Real World Job Skills the Free Software Way

At the 2011 Ohio LinuxFest, I gave a presentation entitled "Real World Job Skills the Free Software Way." In it, I detailed a number of ways in which free software improves not only one's hard technical skills, but also the softer social skills that are so often absent from professional development discussions. I focused on three hard skills -- programming, documentation, and packaging -- and three soft skills -- communication, mentoring, and professional networking -- and gave practical examples of how using free software and participating in free software projects can demonstrably improve one's image to potential employers.

One of the most interesting moments in my presentation occurred early when I asked for a show of hands of who had a GitHub or SourceForge or similar code sharing account. Most of the hands in the room went up. I then asked for a show of hands of who provided links to those accounts on their resumes. Only one hand remained up.

"Why not provide a link to your code on your resume?" I asked. I was, honestly, surprised that no one was doing it. Here's an excellent way to show to potential employers "This is my work", where that work includes not only code contributions but commit messages, bug fixes, community engagement, and much more. Such a link allows a potential employer to see what you're doing, and gives a great starting point for a variety of interview questions. This applies as much to sysadmins as programmers: automation scripts and time-saving solutions that you may have created go a long way to demonstrating your value to potential employers.

After my prepared remarks, I asked for comments from the audience. In particular, two people were currently hiring for new positions, so I wanted to hear from them as to what specific things they looked for in potential candidates. This proved illuminating, and largely mirrored the items in my presentation. Then one attendee asked, essentially, "I do PHP stuff on my own at home. How can I really put that on my resume in a way that makes sense to a potential employer?"

My on-the-spot answer was okay, but not great. I encouraged the fellow to get involved with a project so that he could then also list his participation in that project along with his PHP experience. Rather than just goofing around with PHP on his own, he'd be using PHP within the framework of a real free software project, and enjoying all of the ancillary benefits that come from such participation. This takes time, though, which may not help someone looking for a job right now.

What I should have said was this: you should list PHP on your resume somewhere, and expand upon it in your cover letter with an explanation of your passion for learning new things, an explanation of your problem solving methodologies, and a direct statement that you'd like to apply your passion to the benefit of this would-be employer. You're unlikely to get a full-time PHP programming position based solely on personal use of PHP, for example, but listing the things you've learned on your own on your resume should prove instructive to potential employers when evaluating you against other candidates for the position. Taking the extra step to articulate these things in your cover letter is even better.

I quite enjoyed giving this presentation, and I'd love to find an opportunity to do it again!

In Praise of PhotoRec

As I mentioned on Google+, I destroyed my laptop's filesystem. This was entirely due to my own carelessness. As I sat there looking at an unhelpful GRUB error message, I reviewed my options. I knew that I had destroyed the partition table on my laptop, and created two new partitions: one 1GB ext4 partition and one 512MB Linux swap partition. Both had been formatted, meaning that I wouldn't be able to easily get my old partitions back, and even if I could the filesystem would be pretty corrupt.

I could spend some time using other computers in my house to research recovery options. This was a crap shoot at best, and I didn't really expect to be able to get back to a reliable state. I could cut my losses and install a fresh copy of Ubuntu atop a new partition table. Or I could try to tell my wife that the computer was beyond repair and that I'd need to purchase a brand new system.

After several deep breaths, I chose the second option. I quickly started the Ubuntu installation, and sat down to watch some television while waiting for the process to complete. I had performed a mental inventory of the data on my laptop, and felt reasonably comfortable with losing most of what was on there. After a couple of moments, though, I realized that I was losing all of the digital photos of my family. We've taken a lot of photos in the last two years, and only a small portion of those get published to Flickr. I had a tremendous sinking feeling in my gut as I realized the enormity of my loss.

The next day I made an effort to put a good face on things. It's just data. Just pictures. I still had my family, of course, and we could take new pictures. No big deal.

When relating all of the above to Mike, he shared his own digital loss experiences, and mentioned in passing PhotoRec, a "file data recovery software designed to recover lost files including video, documents and archives from hard disks, CD-ROMs, and lost pictures from digital camera memory." It's part of the TestDisk suite, which I saw in passing while briefly investigating my recovery options prior to re-installing Ubuntu. I thought to myself, what the heck: if it can recover some of the files, that's better than nothing.

So last night I booted the Ubuntu live CD, edited /etc/apt/sources.list to ensure that the Universe repository was enabled, and then executed sudo apt-get install testdisk. I installed an empty USB thumb drive, and then invoked sudo photorec /dev/sda, instructing PhotoRec to look at my laptop's entire hard drive.

The entire process was alarmingly simple. By default, PhotoRec finds and recovers a whole lot of file types: tarballs, executables, text files, and more. My first pass with the default options quickly filled the USB stick because it was recovering a lot more than just the JPG files I wanted.

I purged the USB stick and ran PhotoRec again, this time instructing it to only recover JPG files. Again the USB stick quickly filled up! I inserted another stick with twice the capacity and that was filled to capacity. I attached a 500GB USB drive, carved out a 10GB partition -- thinking that that would be more than enough to finish the job -- and even that was filled! So I made a second partition on the USB drive for ~490 GB and let PhotoRec run over night.

This morning, several thousand JPG files had been recovered. PhotoRec can't restore the original file names, but a quick skim through the various directories it creates shows that my photos -- and a lot more -- have been salvaged. Now I can go through the recovered files at my leisure and organize them as necessary for import back into Shotwell on my laptop, or archive to DVD.

A few quick thoughts:

  • PhotoRec does a superb job of dealing with out-of-space situations. It doesn't fail, it simply stops what it's doing and asks you where it should store future files. This allowed me to successively provide additional media without having to start over or duplicate the files recovered. I was thoroughly impressed.
  • PhotoRec recovered a bunch of images from the new installation of Ubutnu, as I expected. But it also found a lot of photos from my prior installation -- the photos I wanted. It also found a number of photos files from my browser cache, which shouldn't really surprise me but for some reason did. And I suspect that some of the files found were from an even earlier installation of Ubuntu that I had installed over some time ago!
  • Data recovery is surprisingly effective. The ease with which this data was recovered has me more convinced than ever that I should start encrypting at least some stuff, and I should definitely be using a secure delete function when possible. For any hard drives I dispose of, it is absolutely imperative that I run them through DBAN first.

I can't praise PhotoRec highly enough.

Progeny

While rocking my daughter to sleep last night, I gazed upon her little face and watched her eyes flutter closed as her breathing slowed. I wanted nothing in the world to disturb her sleep. I wanted to take onto myself all the discomfort she's experiencing from the teeth poking through her gums, that she might sleep peacefully through the night.

I pondered the future, knowing that at some point I'd have to release my beautiful little angel into the harsh, uncaring world around us. I won't be able to protect her from all that will harm her. I can only do my best to equip her with the skills and self-confidence necessary to face each challenge with dignity and courage.

I know that my concerns for her are deeply "first world problems": she's well fed, sheltered, fiercely loved and wanted. She'll hopefully never experience true hunger, or worry about where she'll find warmth in the heart of winter.

I began to wonder what other parents around the world and through history felt when they held their kids. Certainly they shared my desire to give the world to their progeny, and to see them grow up healthy and happy. But what would that be like for a near-destitute farmer in Mexico, living in the shadow of a drug cartel? What concerns must an Afghan parent feel when they hold their child at night, ostensibly in the middle of a war zone?

What about someone like a king or queen, hundreds of years ago? Did they worry about their little baby being assassinated for political purposes before they could blossom into a wonderful young adult? Did the weight of authority weigh on their shoulders, worrying that their kid might not live up to the demands of the office they were to inherit?

And royalty aside, what would a peasant feel while holding their infant late at night, soothing them to sleep?

PHP libraries for Dynect API and Namecheap API

At work we currently use GoDaddy to register domains. We register rather a lot of domains. Using GoDaddy makes this take considerably longer than it should. Owen has a good description of the problems with GoDaddy if you're unfamiliar with the problems with GoDaddy.

I've been researching alternatives, with a particular interest in registrars that provide a decent API. I've found a couple on my own, and had a few others recommended to me. I've focused most of my efforts on Namecheap, who do provide a reasonably complete API.

In addition to a good registrar, I'm also evaluating whether it makes sense to decouple our DNS management from the organization used to register the domains. Namecheap's bread and butter is registering domains, and their DNS management is a complimentary add-on. You know what they say about getting what you pay for ... To that end, I've been evaluating Dyn and their Dynect enterprise platform. They offer a very robust API, and provide a number of attractive (and, arguably, pricey) add-on features like GSLB, Active Failover, and more.

As an aside, I'd like to state unequivocally that Dyn's support staff has been nothing short of phenomenal thus far, and I'm not even a paying customer yet. Ryan O'Hara was super responsive via Twitter. The "concierge" staff (what Dyn calls their tech support folks) have been extremely helpful and technically competent in every exchange I've had with them.

Both Namecheap and Dyn offer perfectly serviceable, no-nonsense web interfaces. But there's still an awful lot of repetition required to complete the setup of the domains we would register. By providing access to an API, though, these companies allow us to create our own internal semi-automated solutions.

The only programming language with which I have any fluency is PHP. Unfortunately for me, I found no existing PHP library for interfacing with the Namecheap API. There is a PHP library for Dynect, but it's built atop the CodeIgniter framework, and I was underwhelmed with it. So I did what any good open source advocate would do: I wrote my own and published them on github!

My Namecheap REST PHP library is a simple, single class for accessing the Namecheap API. It's woefully incomplete, but it provides the core functionality I currently need to deploy a proof-of-concept automation solution for my employer.

My Dynect REST PHP library is also a simple, single class for accessing the Dynect API. It, too, is woefully incomplete but it does what I currently need it to do.

I've licensed both libraries under the Apache License, so you should feel free to use them. As always, patches are warmly welcomed.

This is my first foray into github, too, so this entire process has been filled with learning opportunities. It's been fun, and I'm looking forward to demonstrating to my employer the proof-of-concept system I've developed atop these two libraries.

The Cake Is A Lie

Birthday cake
Almost twenty years ago my mom took my sister and I to visit my dad on his birthday. We took him to lunch, and then went back to his office to enjoy the birthday cake we'd brought with us. Dad, enjoying the opportunity to share his family with his co-workers, reveled in cutting the cake. With a flourish he put the knife point into the cake, and slid the blade along. He frowned for a moment, and then repeated the process, looking even more perplexed. After a third attempt to cut the cake he said aloud "What the hell...?"

And so began a decades long tradition in my family: the foam cake. An oblong piece of foam is decorated to look like a birthday cake, but is impossible to cut and serve. At first it feels like the knife is cutting the cake, albeit with a little more resistance than one might normally experience, but that first feel quickly gives way to the truth that the cake is not being cut at all. It's really confusing to anyone who hasn't experienced it before, and even if you have experienced it before you're often not expecting it when it's your cake.

My dad waited a couple years after mom first sprang the foam cake on him, but he returned the favor and then some. On and off the fake cakes were bandied back and forth, in more elaborate and unexpected presentations. Dad's best delivery was when he took mom to a fancy restaurant for her birthday, and asked the waiter "Say, you guys don't serve cake at all, by chance?" The waiter promptly brought out a small beautifully decorated cake. Little did mom know that dad had personally delivered that fake cake to the restaurant earlier that day. What I wouldn't have given to see the look on her face when she realized what she'd been served. Dad also got a terrific double whammy on mom when he not only threw her a huge surprise birthday party, but managed to serve her a fake cake at that party, too!

I think my parents only tried to spring the fake cake on me one time, the year I graduated high school. I don't know what it was that made me suspicious, but I refused to cut the cake when handed the knife. Maybe mom or dad were grinning just a little too much, maybe I picked up on the excited anticipation from the assembled on-lookers. Whatever it was, I knew I was being offered a fake cake.

On Saturday we had a joint birthday party for Josie and me. Josie enjoyed discovering and eating her cake, and a second cake was brought out for me.

A fake cake was the farthest thing from my mind.

Angela had been planning the fake cake with my dad since Easter, and they executed it flawlessly. I was so surprised to have fallen for it! Angela had a perfect cover story for why a second cake was needed at all, and dad managed to discretely inform most of the guests of the surprise without making me suspicious. They got me good!

It was a terrific surprise, and the smiles and laughs all around made it worth losing my perfect reputation for spotting fake cakes. I'll have you all know, however, that my guard will be up next year!

← Previous  1 2 3 4 5  126 Next →

About

Brewer philosopher.

User