Mar 092015

I had an amazing week. I didn’t plan it. I was exhausted. Physically drained. Stretched beyond breaking mentally. Emotionally checked out. I took a week off (nobody objects when you forget to use your vacation for a year). The kids were in school. My wife had a full week of volunteering and her other regular activities attend to. I took a week to recover, to get my “A game” back.

On Friday, Anthony from Solid Iris reached out to me to collaborate on my 3D Visualization of my kitchen remodel. If you’ve been paying attention this week, you’ve seen the results of that discussion. This isn’t about that. Not really.

I’ve been an open source developer for 15 years and contribute to some of the largest, most diverse, and most successful collaborative software development projects on the planet (e.g. Linux and the Yocto Project). Working with people I’ve never met from all around the world isn’t new to me. But after all that, it was still exciting for someone I’d never met to see my work, recognize a common interest, and reach out to collaborate.

In my discussion with Anthony, I learned a bit about Solid Iris. He reminded me of something I had learned a long time back. When I joined IBM in 2003, I asked the director of the Linux Technology Center, Dan Frye, about avoiding layoffs (I don’t know why I asked that). He told me two things: Work on a critical project, Don’t be a slug. Solid Iris is a small company of eight people. EIGHT PEOPLE. With passion, talent, vision, and commitment, these eight people created a remarkable product and are passionately shouting about it to the world. There is only one project, so *critical* doesn’t really cover it. In a small team, there is no room for slugs.

But this isn’t about Solid Iris. This isn’t even explicitly about me. What this experience reminded me, is that to excel, to do something truly remarkable, there is no room for slugs. There is no room for second priority. I have worked to make sure I am working on critical projects and have tried my damnedest not to be a slug. In that self-focused effort I neglected the other half of the equation.

(Note: I hope this goes without saying, but just in case, and for those who don’t know me well, I want to make it clear that I am *NOT* referring to my immediate team, who I absolutely love working with)

To ensure your efforts are multiplied by your colleagues and partners, they have to share your passion, your drive, your vision, and your commitment. They may not all be rock stars, but they have to be willing eager to learn and to improve. If they aren’t, you’ll be looking back to drag them forward, against their will, instead of looking ahead toward your goals.

When things go wrong, the human response is to find someone to blame. Lauren recently pointed me to Brené Brown’s short on blame versus accountability. My apologies in advance to Brené as I’ll be taking this in a slightly different direction. It’s easy to blame those you’ve been dragging along. I’ve been guilty of this. More than once. It’s easy to let things go, to avoid the discussion that needs to happen, and then cast blame. Let the dysfunction build, then burst, then build again, in an endless cycle of frustration and mediocrity. This is death for a small independent group, but can go unchecked in a large organization.

What’s hard, is holding people accountable. It requires you to have the hard conversations. Accountability goes both ways, and you’re not immune. Accountability is proactive, rather than passive. Accountability can end the cycle.

Holding people accountable is a forcing function. We can’t continue in a non-compliant state. We can course correct, or we can part ways. Either way, we are all better off. Hold yourself and those around you accountable. Strive for excellence, refuse mediocrity. Don’t be a slug, and don’t let them hold you back.

Jan 162013

Over the years I have tended to specialize in a particularly focused areas of development. Until recently, this has primarily been in locking and scheduling, particularly with respect to multiprocessing and real-time.

Since I have joined Intel and been working on the Yocto Project, I have had to branch out quite a bit. From the Linux kernel side, I’ve updated serial drivers, forayed into accelerometers and industrial I/O, debugged x86 early boot errors in the VM, contributed to the start of an upstream modular Linux kernel configuration system, mapped out minimal configurations and tooling for whittling things down, as well as keeping an eye on some of what I used to contribute to and fixing bugs as they arise.

Outside of the Linux kernel, I’ve worked to enable EFI support of some new platforms, re-factored facets of image building and early boot, performed a similar minimal configuration exploration for user-space, fleshed out support for image generation using the ext[234] file-systems, and generally made a nuisance of myself to those who actually know what they’re doing.

While I miss the ability to truly focus on a particular problem and dig deep into brain-bending execution graphs involving multiple threads, atomic variables, and memory barriers, I also appreciate the value of an increased awareness of how all these pieces fit together to form a greater whole. I’ll continue to try and squirrel away some time to work on things I’m most passionate about, but overall, I believe this time spent on the Yocto Project has made me a better developer.

Jan 102013

For over a decade or so we have been using GNU Cash to keep track of our personal finances. We, and by “we” I mean Mary Lou, have been meticulously recording every expenditure from mortgage payments to sodas from the gas station and reconciling them with our bank statements. As we tend to use credit cards for the points, each purchase involves 4 entries in the ledgers (debit from the credit card, payment to expenses, debit from the checking account, payment to the bills envelope (virtual account within checking)). As life gets more and more hectic, this is becoming less and less appealing. We have also struggled with the granularity of our envelopes and expense categories, continually tweaking them to balance between simple entry and detailed reports.

A friend recently reported using and being a fan of their automated expense categories. They have a number of appealing features – like mobile access, email notifications, and lots of useful reports. These are things I either can’t do or take too much time with our current system. However, the aggregated financial service scares me from a security perspective.

Mint claims no money can be moved around from within Mint. OK good. Let’s assume for a moment that they have reasonable encryption and security processes in place to prevent a hacker from mining my passwords to my financial institutions. There is still the risk of exposing our financial information to anyone who manages to acquire our password. Single point of failure. I’m not sure exactly how much damage someone could do with the read-only access, but I’m sure someone more clever than me can come up with some way to do something devious with it.

To address the common defense of “ is far more secure than the average laptop.” Undoubtedly true. They aren’t more secure than MY laptop though, at least not by much. They are also a much MUCH bigger target than the average laptop since there is so much bigger a reward waiting for a would be hacker than pictures of grand kids and a few weeks worth of CPU cycles for the latest bot net.

Now stepping back and not making the assumption of good security practices at Let’s assume they have every intent of having good security protocols in place, that doesn’t guarantee successful implementation of said protocols. So if some new guy, or even their senior security gal who had a late night, introduced a bug which caused the plain text password to be stored in an identifiable memory address for a short period of time and some creative villain noticed and managed to glean a few of these passwords, the results could obviously be catastrophic for those users.

So to all of those of you who are more security savvy than I am on a deeply technical level, please weigh in here and let me know your thoughts. I’d like to use the service, but I need to be convinced the risk is a reasonable one first.

Apr 262012

I sincerely hope that Cringely is way off the mark regarding IBM ( I spent 7 great years working at IBM’s Linux Technology Center (LTC). I worked alongside Linux superstars like Greg Kroah-Hartman, Ted Ts’o, Paul McKenney, and Mel Gorman (among many other talented Linux kernel developers). I poured my heart, soul, and vast quantities of time (and sleep) into leading the Real-Time Linux project in support of Websphere Realtime and the Raytheon DDG Naval Destroyer program ( This is probably to date the most significant point of my professional career and I am sincerely grateful for the opportunity to be involved in such an ambitious and fascinating project.

Sometime in 2010 I became concerned about the direction of my particular project, and looking around the LTC I wasn’t seeing much that interested me personally. I had been saddened to see many of our top Linux developers leave over the years, and started to fear for the future of the LTC. Some managerial changes seemed to lead to a very different culture within the LTC, something much more Big Blue than what we had enjoyed previously. Accepting that the LTC had to grow up eventually, I was able to look past this.

Toward the end of my career at IBM, I attempted to persuade management to provide SSDs to their Linux kernel developers who made extensive use of the git source control management tool. Git is fast, but my tests demonstrated that a lot of time could be saved by switching to SSDs over the spinning disks that shipped with our developer laptops. After some time I got agreement to run a pilot in which a handful of SSDs would be handed out to developers and they would report on the benefits. I left IBM before this happened, and I learned later that management planned to scrap the pilot because “Darren was special.” Sorry, no I was not. I left. The developers that stayed were special! After a bit of a battle as I understand it, the pilot finally happened. Six SSDs were purchased. Six. And developers were meant to test with them, and then hand them over to another developer. Really? OK, so clearly being placated.

This was one of many frustrations associated with keeping costs down. A standing joke (based in fact I believe) was of a senior manager buying toilet paper from a local Costco because we couldn’t acquire it via other means. Another site morale meeting generated a ream of requests to help improve morale. The result were new clocks in the meeting rooms. Morale continued to fall within the LTC. There are many more significant stories to share, but many are probably not appropriate in one way or another for me to share.

In the midst of all this, my family grew by one HC, I lost my home office, and I started taking a close look at our finances. While I had been rated as very successful over the last several years and had seen a couple decent raises, I was clearly not going to achieve my financial goals at the rate things were going. So I looked around. I posted my resume around. I could have gone to New York to work on high frequency trading and made stupid amounts of money – but I valued my home life and my family was (is) young and I wanted to have time to enjoy this part of my life. Eventually Intel called and asked me to come work on the Yocto Project (well, they hadn’t announced it yet, so discussions were quite a bit more vague). The project looked interesting. The people were fun. The compensation was competitive. While it seems to be Taboo to discuss compensation, I feel it is rather core to this discussion. I recall receiving an OTAA (Outstanding Technical Achievement Award) for my work on Real-Time Linux at IBM which everyone congratulated me on. The director called me and formally awarded me with a few restricted stock units. I felt honored. It was a big deal. Except it wasn’t. The sums were paltry, and equated to something like a temporary 2% raise hinged on the company’s stock price. Combined with ever decreasing profit sharing bonuses and low raises for top performance ratings, there was clearly something wrong. After a lot of heart-wrenching soul searching, we (my wife and I) decided to make the jump. There were a lot of factors that influenced our decision, but they can all be summed up in two points: I wanted to work on something interesting and I wanted my technical contributions to be valued.

I have been with Intel, working on the Yocto Project in the Open Source Technology Center, for going on two years now. The project is still interesting. The people are still fun. And management has continued to impress me with the value they place on technical talent. The difference is like night and day. Are there frustrations? Of course. But it is A Great Place to Work, a lot like what the LTC was when I started back in 2003, or perhaps a bit earlier.

So I hope Cringely is dead wrong. Unfortunately, I fear that he is not and I am deeply saddened by the prospect. IBM employs some stellar technical talent as well as some excellent senior leadership. I sincerely hope this is all FUD, or that those who remain are able to turn things around.

Feb 202012

How would you decide which tablet to buy? In particular, I wanted to determine which screen size would suit my needs. I wanted to be able to view listings and read the occasional technical paper. I did some initial web-research, then visited my local Best Buy to get my hands on a variety of tablets.

My test? Google for “Paul McKenney Parallel Programming”, click on the LWN link and download the 358-page PDF. Then open it and test legibility in portrait and landscape mode.

I opted for the 10.1″ Samsung Galaxy Tab. I think the 8.9″ would have worked every bit as well and I preferred the slightly smaller size (with the same 1280×800 screen resolution). Unfortunately, they didn’t have it in stock at any of the Oregon locations and it didn’t come with the $50 gift card, eliminating the 10% savings.

I’ve only dabbled with the device so far and allowed a small gaggle of children to verify that the critical Angry Birds and Fruit Ninja “benchmarks” run beautifully. I will update once I’ve had some time with it.

Dec 082011

I had hoped that the Lenovo X1 was a fluke and not a precursor of things to come when it comes to screen resolution in the Lenovo product line. Unfortunately, it seems Lenovo is continuing to release high-end notebooks with commodity screen resolutions. Their flagship mobile Thinkpad x220 as well as the new Ideapad u300s both sport 1366×768 resolution displays. Their competition, the 13″ Mac Book Air and the Asus Zenbook UX31 both come with higher resolution displays and much trimmer designs. I have loved my Thinkpads over the years, but unless Lenovo offers better displays in the very near future, my next machine will likely come from another manufacturer.

Oct 282011

Today concludes my eleventh day in Prague attending three conferences and enjoying a few quick days of vacation with my wife.

Carsten Emde of OSADL was kind enough to invite me to speak on the Yocto Project at the Realtime Linux Workshop. I thoroughly enjoy hearing from members of industry, academia, and the Linux development community all at the same conference. I received a lot of positive feedback regarding the Yocto Project and collected my fair share of “todos”. Spending time with the leading Linux kernel developers is always inspirational for me, I invariably return with renewed commitment to improving my technical skills. After so many of these events, I consider these people my friends, and I so enjoy the trips that they feel more like a social event than a professional one. That, in my opinion, is how it should be.

Mary Lou joined me here in Prague while Grandma and Grandpa Mickelson braved our two children so she could get away for the needed break. She joined us on an OSADL sponsored walking tour of Prague covering the caste, lesser town, old town, and new town. We enjoyed the sights, the food was great, and some quiet time alone in a place where we had no responsibilities was wonderful. Her visit was long enough that she got to relax and enjoy her vacation, as well as look forward to getting home to our kids, our home, and our life.

Following our break, the Linux Foundation events began. The Embedded Linux Conference Europe (ELCE) and LinuxCon were held in parallel here at the Clarion Congress Hotel Prague. I spent a good deal of time at the Yocto Project booth, talking with attendees and catching up with team members. People were still trying to figure out how to spell Yocto a year ago when the project was announced. Now that the message has gotten out, there was a surge of interest – largely from people tired of maintaining their own frankenstein OS and looking for a solution. Others came by to be mesmerized by the Yocto Project 1.1 contributions visualization video rendered with the excellent gource project.

I attended excellent talks from Jonathan Corbet of LWN fame, Mathieu Desnoyers (EfficiOS), Grant Likely (Secret Lab), Stephen Rostedt (Red Hat), Frank Rowand (Sony), and Koen Kooi (beagleboard). The hallway track was also excellent. I met with developers and friends whom I only see online, including someone I had never met in person and hadn’t heard from in nearly 10 years when we hacked on some opensource projects together.

I wrapped it up with my presentation on tuning Yocto Project built images for tiny systems. Despite an imposing stack of 48 slides, I delivered the talk in the allotted time with room for questions without sending my audience into a speed-talk-stupor. I received some valuable feedback and made some useful contacts.

I am now exhausted mentally and physically. While I’m rather dreading the travel home, I’m very excited to be home with my family again.

Aug 022011

The Linux desktop took great strides as GNOME and KDE migrated through versions 1 and 2 (and even 3 in the case of KDE). They literally caught up with the competition starting from the likes of fvwm2 and windowmaker in an incredibly short period of time.

Since then though, things have been sluggish at best. GNOME put a lot of work into the nuts and bolts which is a good thing, but didn’t do much to improve the user experience. KDE continued to blaze ahead with new technologies like Plasma and their white-screen-of-death… errr, maybe that wasn’t a feature. So GNOME 2 grew stale, while KDE became shiny and unusable.

While this was going on the GNOME Shell sprang into existence with lots of radical paradigm shifts in the desktop usage model. Not to be outdone, well not without trying anyway, Mark Shuttleworth began pushing Unity onto unsuspecting faithful Ubuntu users. Both of these have been met with significant resistance. While GNOME’s new desktop appears to have lovers and haters, Unity had haters and… well… sheep, but no lovers.

So no that Fedora 15 is out and ships with GNOME3 by default, I figured it’s time I gave it a fair shake as I did unity some time back. I grabbed the x86_64 Fedora 15 live installer and stuck it on a USB key using unetbootin.

So, first things first. Before evaluating GNOME3 I had to make some modifications so that I could do something other than complain about the defaults:

  1. Edit /usr/share/themes/Adwaita/metacity-1/metacity-theme-3.xml and replace all title_vertical_pad values with “0” (from the absolutely nucking futs default of 13).
  2. Alt-tab between “different windows” is broken by Gnome3’s window grouping. To switch back and forth between two windows of the same application (say two consoles for instance) use alt+~ instead of alt-tab. There are extensions to restore the by-window behavior, but this is simple enough and provides some added functionality.
  3. Install gnome-tweak-tool to be able to setup some decent fonts and font sizes, or alternatively just use the gnome-shell profile editor to select a console font manually. The rest of the fonts seem relatively sane.

This is just what I did to be able to tolerate the live-image from Fedora.

The Good:

  • The death of the folders and files on the Desktop. I hate them – and yet I am simply not diciplined enough not to put them there. In this one case, I appreciate the system forcing better behavior on me :-)
  • Better use of the Desktop. I like the full screen menu, especially with groups and a search function. It’s easy, intuitive, and attractive. Having the panel and the workspace switcher all integrated into that view works well for my workflow.

The Bad:

  • Constant Accessibility icon. If I don’t need this now, I probably am not going to need it tomorrow (crossing my fingers).
  • The panel calendar opens evolution, and only evolution. Evolution sucks (and so does Coke, Casio algebraic calculators, the Chrome browser, and Emacs), we need a calendar service that other applications can provide. Having the address book, mail, and calendar all assumed to be evolution is annoying.
  • The current window icon in the panel… wtf is that all about? It serves no useful purpose that I can determine.
  • The categories list in the Activities->Applications view is very small in relation to the application icons, detracting from the very easy course mouse control required to select applications when you have to revert to careful precise control to select a category.

All the said, Gnome 3 is hands-down a much better integrated and implemented desktop environment than unity. Someone needs to take the developers rose colored shades away, and then I think we’ll have a nice Desktop solution.

Jun 032011

Lenovo unveiled their much-touted ThinkPad X1. It’s thin, it’s fast, it’s tough, it’s got a lot going for it… but the 13.3″ display comes in only one resolution: 1366×768. Really? 1280×800 was bad enough on the X201 and X220. Even at 800 vertical pixels I’ve run across the occasional dialog box with unreachable OK and Cancel buttons. Are you sure you want to format your root partition? It’s like russian roulette while guessing which of the off screen buttons – presumably [OK] and [Cancel] is selected by default! 768 is just silly.

I understand that most users probably don’t use 6 point font. They probably don’t care if they can only read three Facebook wall posts before having to scroll down. But isn’t there still a market for people that want a high-end screen with their high-end laptop? I’d pay another $100 for 1440×900, and I’m confident nearly every other software developer would as well. I find it a bit amusing that one of the images on the Lenovo web site shows a 3D modeling program on the X1 – not likely people, not with that resolution.

So how about it Lenovo, can we get an optional high resolution screen (as are made available on so many other ThinkPads, past and present) for software developers and other not-blind people?

Jun 012011

After slowly tweaking my bash prompt over several years I’ve finally arrived at something that I feel is simple, functional, and elegant. I’ve addressed my four primary annoyances with working in a terminal:

  1. Finding commands in the terminal scrollback is difficult.
  2. Long working directories cause awkward wrapping.
  3. I find myself using “git branch” and “git status” far too often.
  4. With so many terminals open, it can be difficult to distinguish between them.

I didn’t want fourteen colors, a clock, the date, and my ascii art gravatar in my prompt, so I’ve tried to keep it simple. To address #1 above, I’ve made my prompt green. This makes finding it in the noisy scrollback much easier. This uses escape pres, which are admittedly a bit nasty, but they get the job done:


For #2, I used to show only the leaf of the path, but for *some* projects even this became problematic with pathnames like:


So I took a page out of Joshua Lock‘s book and just ensure my prompt ends with “\n$ ” so my commands start on a new line and in the same column every time.

PROMPT="\u@\h:\w\n\$ "

For #3, also inspired by Mr. Lock, I did some digging and found a ridiculous number of heavy handed implementations, included some running ruby scripts to determine the current git branch. Ruby? Really? Turns out any modern distribution provides the very handy __git_ps1 bash autocompletion feature, so simply adding:

\$(__git_ps1 ' [%s]')

to my PS1 gets me the current branch in square brackets. To show the current state of the repository, including modified files, staged files, and things like being in the middle of a bisection, I export GIT_PS1_SHOWDIRTYSTATE=1 and add bash.showDirtyState=true to my ~/.gitconfig. This adds a * for modified, + for staged (*+ for both), and things like “|BISECTING” when in the middle of a git bisect command. Very handy!

Update (17-Dec-2012): You may find you need to add the following before you can use __git_ps1, particularly if you are on Fedora:

source /etc/bash_completion.d/git

Finally, for #4, I’ve found that setting the working dir in the titlebar of the terminal does a fair job at distinguishing between them. I don’t use many terminal applications (mutt, mc, etc) so the directory is usually adequate. I set a variable and then include that in PS1:


In summary, the setup of my prompt in .bashrc is as follows:

if [ $TERM != "linux" ]; then
PROMPT="\u@\h:\w\$(__git_ps1 ' [%s]')\n\$ "

This results in a prompt that looks something like this:

dvhart@doubt:~ [master]
$ touch test

dvhart@doubt:~ [master]
$ git add test

dvhart@doubt:~ [master +]
$ echo " " >> ~/.bashrc

dvhart@doubt:~ [master *+]
$ git reset --hard HEAD
HEAD is now at 8def692 bitbake TEMPLATECONF

dvhart@doubt:~ [master]
$ git bisect start HEAD HEAD~2
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[e82b229ca456cb77f1da310f7a6f966a4d5e2c95] use __git_ps1 in bash prompt

dvhart@doubt:~ [(e82b229...)|BISECTING]
$ git checkout master
Previous HEAD position was e82b229... use __git_ps1 in bash prompt
Switched to branch 'master'

dvhart@doubt:~ [master]

Update (7-Jun-2011): If you happen to use git to track your home directory config files, such as .bashrc and ~/bin you likely want to avoid using __git_ps1 in your prompt as it will show up pretty much all the time, and lose its effectiveness while working in your actual development project repositories. To address this, I’ve updated my prompt to only display __git_ps1 when the git top-level directory is not $HOME:

# Print the __git_ps1 string unless the git directory is $HOME.
source /etc/bash_completion.d/git
function git_ps1() {
    GD="$(git rev-parse --show-toplevel 2>/dev/null)"
    if [ "$GD" != "$HOME" ]; then
        __git_ps1 ' [%s]'

if [ $TERM != "linux" ]; then
PROMPT="\u@\h:\w\$(git_ps1)\n\$ "