Have had reason to do some new things with Git of late.

git archive: exporting and then zipping up or tarring up my git repo, minus any of my .git folders. Otherwise known as: not accidentally shipping my personal credentials out with my repository. (Note: yes, I’m aware that there are other means of storing credentials, such that they don’t end up in your .git/config areas… I just hadn’t configured them at that point for that project…)

git checkout-index, as discussed on StackOverflow: alternate approach to exporting, ala svn export.

Either of these hep better than this:
$ find . -type f -not -path ‘./notThisDirectory’ -exec cp ‘{}’ ‘/c/Development/toThisDirectory/{}’ \;

The problem with the above is that, although it nicely didn’t merge in the ‘notThisDirectory’, it did copy in my .git/config, thus making my separate local repository copy get remarkably confused about where it should push/pull from…

Message to local comic book stores:
A band that sings about Dungeons and Dragons, Godzilla, Worst Superpower ever, a love song for an internet troll, AND a song called ‘Nothing to Prove‘ about girl geeks, which has a great Youtube video

 

And they’re interested in finding great comic book shops to perform in…

I’m in no way affiliated with this group. But if you had them in your shop, I’d be excited to come out and see them / spend money in your store.

Testing our build instructions, so I want to ensure I _know_ the state of the machine on which we’re building. No good if my machine has some wonderful thing cached on it that we miss recognizing needs to be there. Seems like a perfect use for a VM.

I’ve previously done a (very little) bit with Vagrant, as I worked with an Ansible script that we hope to make clearly useful/usable for setting up a build/rebundling environment for OWF. But my Vagrant/VirtualBox/Ansible (etc) skills are weak. Time for a test today.

I have vagrant 1.4.1 installed from previous explorations.
Tried originally to add an Ubuntu 12.04 image to my Oracle VirtualBox directly – blocked by lacking a username and password. (And no, ‘ubuntu/reverse’ didn’t work… saw it, tried it, didn’t work.) So, per guidance on http://www.vagrantbox.es/….

$ vagrant box add “Ubuntu 12.04” “http://cloud-images.ubuntu.com/vagrant/precis
e/current/precise-server-cloudimg-amd64-vagrant-disk1.box”

$ vagrant init “Ubuntu 12.04”

$ vagrant up

$ vagrant ssh “Ubuntu 12.04”
— hmmm, doesn’t work

$ vagrant status

$ vagrant ssh default
… And I’m in!

 

Now to do my installations…

# need administrative privileges

sudo su

# need to update my machine’s knowledge of how to get / where to get packages

apt-get update

apt-cache search npm

apt-get install npm

(I’m now at v 1.1.4 for npm and v0.6.12 for node)

 

Hmmm – attempting to follow the next instruction:

npm install -g grunt-cli…

Didn’t succeed.   Very unhappily.

So, did an npm search – got an SSL Error – CERT_UNTRUSTED.  Aha – I’m not configured with a cert…  This stackoverflow helped….

 

OK, so now the issue is that grunt-cli won’t install because my version of Node is too old: grunt-cli needs at least 0.8 of node

Having challenges getting the two aligned…

 

OK, here’s where VMs are good things..

$ vagrant reload default

And this time around, I’ll start with the apt-get, but avoid getting node via it…

Hmmmm – no dice…

 

OK…

$ vagrant destroy

and now rebuild the thing, this time by setting up a shell script provisioner, so I can more rapidly iterate…  Using ‘Vagrant: Up and Running’, by Mitchell Hashimoto, to give me the magic mojo to put in my Vagrantfile.  (I’m going the simple route and using a shell script provisioner…)

 

 

 

Hanging out in my local pretentious bar.  It’s not what I’d call the local pub – too many ‘interesting’ beers on the menu.  But oh so interesting.  And the bartender is talking about the sorts of drinks she’d like to try – will _have_ to come back in, even though the food is overpriced.  I have this image of having a book club here, and letting this bartender suggest a drink of the night.  She’s raving over international recipes and ingredients like tamarind. My kind of adventurous place.

As part of some code for a not-yet-publicly-visible project, I needed to extend an existing Javascript API.  Because I know my code generally needs all the help it can get, and because our team does unit-testing, I’m building it out via TDD: write a test that fails, write the code to make it run, rinse, repeat.

Challenge: our team is using PhantomJS to run Jasmine tests via karma.  All of the rest of our infrastructure, both test and development, makes use of RequireJS to handle dependencies.   I’m not well-versed in RequireJS, but it hasn’t been an issue so far, as I’d been extending stuff already built out.  Today, I needed to test code that was in a new set of files I’d created.   Wasn’t working.

Collecting notes here in terms of what I needed, which also provides clues to the discerning reader of what bit me….   My hope is to revisit this post sometime in the future and amend it as I’m a bit more expert in all of these areas…

– my code needed to be set up as a Require module with a define() block at the top, even though the thing I’m extending isn’t in a require module.  (We cheat and stub out our other invocations of the underlying API, so this was a new thought to me, that I needed to set this up as a Require module itself…)

– that module’s function needed to return something.  Just having things happen in the function within the define block really doesn’t do it.

– the new module needed to be made visible as a name in my test-main.js

– the new file needed to be made visible to the configuration to Phantom

Beyond the TDD, to then have my new module work within my webapp, I no longer need to link explicitly to the Javascript file, but instead just let our RequireJS stuff do its magic.   That required both adding it as a referenced package within our dojoConfig and then also adding it in as a dependency to the primary app module itself.  Not sure I’ve got in the spot I finally want it, in terms of usage within the app, but I can at least see my code come in/through now.

Takeaway: Lots of places to put things to make things “just work”.

 

 

 

After too many bits of time spent wondering, “how’d I make that work, again?”, I’m finally getting around to figuring out how to automate a development environment.  Starting out by doing some playing with Vagrant. The idea is that with each project I build, I’ll set up a script to build out a virtual machine with its dev environment. I also want a set of scripts to build out a deployment environment. E.g., bundle together OWF, a security plugin, the plugin’s configuration, and maybe a custom theme for the OWF instance.  Preferably by doing so in some sort of pluggable way.  E.g., I could mix/match what I want by pulling in bits and pieces from various places.  And then readily have a build/deployment script path for pushing to our EC2 demo instance.

Not sure yet whether the right toolkit is Chef, Puppet, Ansible, …  just have gotten to the ‘gotta have a solution’ level.  Since one of the guys in our office made available some Ansible scripts related to OWF which I’d offered to test/share out with the OWF community, starting there.  Since Ansible doesn’t run on Windows, that backs me up to trying out Vagrant to set up a Linux machine off of my Windows box.  I’m taking Vagrant’s tutorial path of using VirtualBox.  (I’ve had VirtualPC on my box for a bit, but that’s been purely to let me do IE7 testing on a machine running IE9.)

Progress today: got his Ansible scripts running, after some hiccups getting the right version of Ansible to hit my virtual machine.  Oh, and I committed my first potential pull request possibilities to his devops repository.  Like the Vagrantfile that sets up the right version of Ansible…

 

 

 

 

Hashtag trending on Twitter: #FiveWordTechHorrors

My favorites seen this evening:

 

 

 

 

 

The Post has an article about Target hiring a former CIA agent to give parents guidance on how to get your kids’ Christmas list, hide the presents, etc.  Parents need guidance for this?  Half the fun of being a parent is thinking through these things.  Tucking the gifts away in the back corner of the “scariest” room in the house.  Scary here can mean it’s dark, or that the kids know that entering that room is likely to give them the chore of cleaning it up.  Handling the Santa presents versus the mom and dad ones by changing your handwriting on the gift tag by using your opposite hand and wrapping the gifts in different wrapping paper.  Having the kids do the Santa letter at Grandma’s house so that she can pilfer the letter from the mailbox as soon as the kids have gone home.  (You do have to make certain not to get caught with that letter in hand: I found Cameron’s on the kitchen table this morning after some late night shopping… would have been a bad scene had he come out for breakfast when called.)

I was the kid who would find the presents in our house.  I remember how much fun it was to go sneaking around.  So now when I catch Callie doing the same thing, I leave one present in a place she’ll find.  But I make it the most educational/boring/oh my goodness how could my parents get me that present, just to see if she’ll confess her knowledge and thus display her means and methods.  Oooh, so much fun.

I did pick up a new trick from the article – hadn’t tried having the kids write their letters in invisible ink.  That’s a good one.

 

 

Continuing on with my geek volunteer efforts, after some conversations with the ‘client’, we discovered that not only do we want to collect some information via forms, but the folks who fill out these forms will want to register for classes and be paired with a mentor.   Aha!  That starts to sound like a customer relationship management (CRM) system or one of the learning management systems that lots of colleges are using lately.  I knew of a few open-source solutions, and figured this was a good reason to do some exploring.  Idea on my part is that a custom app ought to be the last resort, unless the custom app provides a real advantage to the group.  Otherwise, someone’s gotta be willing to take on maintenance and hosting of that app if I’m hit by a bus / win the lottery.  This application isn’t, at least at this point, something that this organization wants/needs to invest in.

Open-source CRM – after surveying a bit, narrowed in on SugarCRM, specifically its community edition.  Its AGPL license is a challenge in terms of integrating other capabilities were I need to extend Sugar, but since I’m trying to go with vanilla and just use its customizations, believe it’s readily workable.

Open-source LMS – the clear community leader at the moment is Moodle.  As its GPL, rather than AGPL, the license headaches are mitigated a bit, as long as the group doesn’t attempt to share out its source.  (Note: not a open-source license expert: statement is my understanding – confirm before assuming it’s right..)

But licensing will only matter if the solutions are the right fit…

Shortening the story a bit…  I went ahead and stood up a Moodle instance on an EC2 instance.  I found a plugin to collect survey information related to student classes.  Since Moodle had that idea of surveys + people, adding SugarCRM to the mix definitely seemed the wrong way to go.  Moodle installed nicely, as did the plugin, but in the end, it just felt like the wrong use case fit – too much complexity, and then not enough control over the user experience.  Note: were I to customize the Moodle code or write a new theme, I assume I’d have had full control.  But it was a higher hurdle than I wanted to leave for those who came behind.

The same underlying technology stack that Moodle uses is also used by a composable system called Drupal.  Headed that way for part 2 of this app…

I’m looking around my home this morning, two of my three kids in view. One’s at the computer – I’m thankful that we can provide them things that let them explore the world. The other greets me with a chipper “Hi, mom!”. I’m thankful for the great relationship we have with all three of them. The last is downstairs, I think: of the three she’s the one who most often leaves little drawings around, and I’m thankful for her creative spirit. Yesterday, she and her big sister got tasked with “make something that looks like a turkey – here’s some walnuts, pipe cleaners, and other craft supplies”. Our centerpiece of mums ended up with 3 turkey heads poking up out of it, and the explanation was that the turkeys were hiding from becoming Thanksgiving supper.

My husband walks into the kitchen, on the phone with his mom. They’re finalizing the preparations for him to fly out tomorrow to go help his brother and brother’s family move to our area. I’m thankful for my husband’s generous approach to life: his brother one of many folks he’s helped in various ways this year. I’m thankful for the opportunity upcoming to get to know my brother-in-law, sister-in-law, and niece, as they move into the area for a few years. And I’m thankful for my mother-in-law and father-in-law: they were over yesterday for an early Thanksgiving dinner. They have always been supportive of our family, and are just great folks in general.

I think out more broadly… we’ve changed churches lately, and I’m thankful for both the church we’ve left and the one we’ve been attending. Both have and are teaching us much, and I cherish the friendships we grew at our “old” church, as well as the chance to engage with new folks at our “new” church. Both churches honor and worship God, and I am thankful to get to share in their fellowship and worship.

I think of my extended family. Those relationships are more strained this year than I’d like. I’m thankful that there’s still at least the potential to repair them, that family members still seem to have their health, and that for one family member, at least, this year wasn’t their last.

I think of our health, those of my kids and my husband and mine. My husband’s been given a clear bill of health again this year from his doctor’s, and we get to grow another year older together. My kids have been blessedly healthy and even injury free this year. I drew the short straw on injuries and managed to top out our HSA this year (thankful for great healthcare! and thankful for a reprieve from surgery!), but have recovered and gone back to the activities I love.

I’m looking around at my WordPress dashboard, and seeing an upgrade notice. That reminds me that I’m thankful for the opportunity to work in a field I love. Later today and this weekend I’ll be working on a volunteer project to provide a registration system for a charity that’s doing some great work in the community. I’m thankful that the Lord’s blessed me with skills that I can use, and pointed me towards opportunities to use them.

Yesterday we had the mom of Cora’s friends over, and the day before we were out and about with a young lady who’s an extension of the Coleman family. The day before that, we were retrieving Callie from a not-quite-successful sleepover at another friend. Very thankful for friendships, growing and grown, and hope to always remain open and inviting for more.

The Lord has blessed us this year in many ways, and I offer thankfulness to Him for another year to live, to enjoy His blessings, and to learn more how to serve Him well in every area of my life.  May your Thanksgiving be as abundant in thankfulness!