Linux
Linux, Open Source, and Related Events
Submitted by dvhart on Thu, 2007-09-13 18:50. LinuxGit Rebase - The Missing Link
Submitted by dvhart on Thu, 2009-12-03 18:22. Linux
I've taken longer than many to get comfortable with git. I've become very comfortable with quilt and git consistently behaved non-intuitively (for me). A couple months back someone pointed me at "git rebase -i" - the clouds parted, heavenly rays shone down upon me, and all was well once again in the Zion in my head.
With quilt you work with patches, and you really need to have them well defined in your head before you start. You can get away with some lack of planning if your various patches are restricted to distinct files. More often than not for me however, my patch series work on a single file, or maybe two or three. Merging patches in quilt is ... well ... just like merging patches without quilt ... a flurry of filesystem commands and manual merging.
With git, you work with the source, and generate the patches from your changes. The git motto "commit often" is key to success here. I can start a project with only a rough idea of what needs doing and commit small changes along the way. When the project is done, I may have dozens of commits in my local git tree, none of which are functionally complete, and most likely won't even compile. With "git rebase -i" I can rearrange these patches, merge them, annotate them, and generate a series suitable for submission to LKML. Ahhhhh. I git it! Finally.
Getting Thing Done with Remember the Milk
Submitted by dvhart on Fri, 2009-11-27 09:07. LinuxTodos pile up, balls get dropped, and I search for solutions to managing the chaos. Several years back I found inspiration in David Allen's Getting Things Done (GTD) approach to task management. The simplicity of the various lists and the generic process definition that relied on no specific medium or implementation appealed to my need to customize and make everything my own. GTD seemed perfectly matched to a software application that could manage the various views and relationships of tasks, projects, and contexts. I tried various existing tools, but they each were cumbersome, slow, and unintelligent (forcing me to spend more time in the tool than I was willing to give). I went so far as to program my own, Braindump, which addressed my frustrations. While I accomplished what I had set out to do, the increasingly pervasive presence of smart phones, netbooks, and other internet devices were highlighting the rather crude single-computer usage model of my application. It also suffered from what every other stand-alone task manager suffers: lack of calendar integration.
Among the list of rejected applications years back was Remember the Milk (RTM). While RTM kept things simple and didn't burden the user with a rigid work flow, I felt (at the time) that its extrememly free-form nature would leave too much process enforcement to the user, making it as awkward and cumbersome as its competitors which enforced too much process internally. I was also just not ready to make the leap into the world of "cloud services". After catching a blurb about a new RTM Google Calendar gadget, I decided to give it another shot... and I'm glad I did. I read several other user experiences on using RTM for GTD, one in particular I feel is worthy of citing here as being influential in my approach: Guest Post: Advanced GTD with Remember The Milk by Doug Ireton.
GTD Overview
If you are already familiar with GTD, skip this section. For those of you that haven't been indoctrinated, allow me to present a very brief introduction to the principles of GTD. It's all about freeing your mind from thinking about what you have to do so you can focus on doing it. You need a trusted system to store information so your brain doesn't have to. The process itself is defined by five stages: collect, process, organize, review, and do. These stages are implemented using lists of tasks, or "next actions", and "projects" (work items that encompass more than one task). A key point about next actions is they are immediately actionable. They have no dependency on anything else. During the "do" stage, you should be able to open the next actions list and immediately get to work performing those tasks. Another core mechanism of GTD is the "context". By organizing your next actions by context, such as Calls, Errands, Office, and Home, you can easily see the tasks that you can complete at any given time, based on where you are (by a phone, in the office, driving between work and home, etc.). Lastly, a weekly review is critical to making GTD work. During this review, you review each of your projects and ensure they have a next action so you can make progress on them during the week. Before getting too far into constructing a task management system, I'd recommend reading through GTD.
GTD with RTM
GTD is essentially implemented as a collection of lists. This translates well to Remember the Milk which is just that - a set of user defined lists. RTM also provides some basic properties to list items, such as due date, time estimate, and notes. What makes RTM smarter than a set of paper lists are the tags, locations, and powerful searches. Tags allow you to use short terms to relate tasks to eachother. Locations are intended to allow you to save off the address where a task needs to be completed, which is cute but largely useless IMNSHO, so I'll overload this feature a bit later. RTM provides users with a powerful boolean logic search and the ability to save those searches as custom lists which are automatically updated when your tasks change. Let's see how to put these all together to create a powerful GTD system using RTM!
Core GTD
Let's start with a set of real lists (created via Settings->Lists). I find it useful to separate work and personal lists with "W-" and "P-" respectively.

Inbox and Sent are defined by RTM and cannot be changed. The Inbox works well as a staging ground for thoughts you have that you haven't fully processed yet. You'll work through these during the "Process" and "Organize" stages, converting them into projects and tasks. I use the Personal and Work lists to store all my tasks, currently actionable or not. I use the "na" tag to mark tasks as next actions to distinguish them from tasks that are dependent on something before they can be executed. The two Project lists are used to store an item for every project I'm working on. I tag each project with a short identifier which I also use to tag all the associated tasks so they can be identified by project. Let's look at a project and a couple tasks.
Under the W-Project list I have an item titled "RT Elevator Pitch" tagged with "rt-elevator". I then create a task on the Work list titled "Brainstorm topics" and tag it with "rt-elevator" as well as "na". If I want to see all the tasks for this project, I can click on the project item on the W-Projects list and then click on "rt-elevator" in the Task box on the right. This will open a search for all the items tagged with "rt-elevator".

GTD refers to next actions lists, not task lists. When it's time to get something done, you shouldn't have to wade through all the tasks to find one you can do right now. In the search box, enter "tag:na", this will filter the list to only those tasks which are currently actionable. This doesn't take into account work vs. personal though. To limit it to just actionable work tasks, search for: "list:Work AND tag:na", click on the Save tab and call it "W-Next Actions".

To refine your task list even further, let's take a look at the GTD concept of "Contexts". David Allen suggests the use of the @ (for various reasons) to indicate contexts. This is particularly convenient with RTM as that is the hotkey for specifying location when entering a task. Since I find the locations feature rather useless in its intended form, I overload it as my contexts list. Click on locations and create your GTD contexts list (RTM wants you to specify a map location for each context - pick some place exotic!). For me this list includes: Calls, Errands, Home, and Office. You might add "Computer" ... but if you're reading this that would probably be akin to adding an "awake" context... it just doesn't refine your search very much ;-) Now you can specify a context for each task. To filter by context, search for each of your contexts and save the searches. For example, search for "tag:na AND location:office" and save the search as "@Office". This list will show only those actionable tasks that must be completed at the office! Note that I don't separate Work and Personal lists here. If I'm out running errands I might as well get those for work as well as home done in one go. Same for a batch of phone calls.

Lastly, you'll want a tag and a saved search to keep track of tasks you are waiting on from someone else. I use the tag "wait" for this, and will sometimes include a nickname for the delegate, like "john". Then create Waiting lists, such as "list:Work AND tag:wait" as "W-Waiting".

Calendaring
Something that has always bothered me about the various advanced task management software that I've used, is the lack of integration with my calendaring. And no, the task add-ons in things like Evolution and Google calendar (and all the others) don't count for reasons that are hopefully obvious by now. RTM provides several very nice services for calendaring. You can get an iCalendar (ics) URL for any of your lists. I add the Personal and Work lists to my Google Calendar and all the tasks with due dates appear on the day they are due. RTM also has two Google Calendar gadgets, one that displays a check icon on each day so you can work with tasks of that day (mostly useless IMO) as well as a very nice sidebar gadget that will display the list of your choosing and group the tasks by due date: Overdue, Today, Tomorrow, Monday, Anytime.
There are some tasks that must be done on a certain day, but not at a particular time. You could just add these to your calendar application, but I find it convenient to keep all my tasks in one place. You don't want to have these tasks show up on your next actions lists until the day they are due. That means you either have to remember to set the na tag the morning of (yeah, not very likely right?) or come up with another mechanism. I tag these items as "cal" and ensure they have a due date. I then augment my next action searches to look for "tag:na OR (tag:cal AND dueBefore:tomorrow)". This way I only see the cal tasks when they're due (and afterwards if I failed to complete them).
Extras
When you complete tasks in RTM, it records the completion date. You can use this in a search as well to generate a weekly (or monthly, etc.) report for your boss. Consider searching for 'list:Work AND completedWithin:"1 week of today"' and saving it as "Weekly Status".
If you can convince your colleagues to setup an RTM account (they don't have to be GTD junkies by the way). You can use the RTM "Send To" feature to delegate tasks. The task will then appear be moved to the Sent list. You may need to adjust your waiting searches to include the Sent folder, and possible tag delegated items with "work" or "personal" as there aren't seprate Sent lists. Personally, I'd rather RTM didn't move my tasks to another list after I send them.
Wrap-up
Remember the Milk provide an incredibly flexible tool for managing tasks. Not only is it highly functional in its own right, but it also integrates brilliantly with services like Google Calendar and Google Gears (for offline use). RTM also provides a minimal mobile web interface (which is well... minimal), but if you're an iPhone or Android user, you can download an RTM application if you're a pro user for a much improved mobile interface. Well worth the $25 a year in my opinion. RTM, almost you convince me to purchase a smart-phone... and a $30-40/month data plan. Almost.
Linux Conferences and Introspection
Submitted by dvhart on Wed, 2009-09-23 06:30. LinuxI look forward to the Linux conference circuit every year, but only partly for the opportunity to learn something new and "geek out" for a week or two. Each year I find that spending several days surrounded by some very intelligent, very dedicated people leaves me in a pensive mood. I often find myself yearning for a way to be better at what I do, and to be able to do it faster. Today, during a panel session, a panelist described the "iron triangle" as it relates to software development: Cost, Schedule, Quality/Features - pick two, the third will have to be allowed to vary. This concept has also been similarly described by Susan Susanka in her "Not So Big House" series of books and articles, slightly modified to address the architectural process. This led my wife to ask me what my third point of the triangle was. I had time and quality... so what was the third? Quantity is the obvious answer. I struggle with this as I somehow still believe, despite numerous concrete examples in my own experience to the contrary, that I should be able to be a perfect husband and father, a brilliant kernel developer (in numerous subsystems), a domain maintainer, a competent business strategist, a woodworker of unmatched craftsmanship, a capable chef, an intuitive dog trainer, a carpenter, mason, landscaper, architect, interior designer, model of fitness and health, all the while maintaining my quick wit, charisma, and enviable good looks.
On numerous occasions I have received a similar piece of advice from my mentors. "Be the best in your field." "Pick one thing, and do it extremely well." etc. While I'm not willing to give up everything else to become a better kernel developer, perhaps it is time to let the "Quantity" point vary in favor of the "Time" and "Quality" points.
LinuxCon Speaker's Dinner
Submitted by dvhart on Mon, 2009-09-21 04:22. LinuxI'll be presenting on Requeue PI at LinuxCon this week, so I was able to attend the speaker's dinner at Departure this evening. It was a nice venue, rooftop porch with maybe 40-50 people mingling. I'm no mingler, but I met a couple new people and put faces to some names. I'm particularly interested to hear more from Jesper Brouer on 10Gb routing. Jon Corbet, of LWN, was ever-patient with me for being late (OK, late doesn't quite cut it... grossly remiss) with a series of articles on real-time Linux for LWN. It was a good kick-off to the next two weeks of conferences. Open the flood gates and let the information overload begin!
Fame and Infamy
Submitted by dvhart on Thu, 2009-03-05 01:16. LinuxMany of you know I have been working extremely hard to make some quality contributions to the Linux kernel. This can be a tough environment to work it, but also very rewarding. For the last couple of months I've been working on a patch series to allow for the requeueing of Priority Inheritance aware futexes in order to make glibc pthread_condvars PI aware and avoid some of the problems with the current implementation. I recently sent out an early copy of the patch series to be reviewed by a few core people, not even labeling the mails with [PATCH] as is customary. Apparently that didn't stop someone from finding my new tongue-in-cheek error code for dealing with misbehaving user applications. I was cited on LWN's Quotes of the Week, along with Steven Rostedt, Linus Torvalds, and Andrew Morton. I was the only one, however, to earn a nickname for my efforts. Darren "graceful" Hart, thank you very much :-)
If you don't have an LWN account, I'll try and post a new link once it's publicly visible, but for now, the interesting code segment mentioned in the article follows:
+ /* + * The pifutex has an owner, make sure it's us, if not complain + * to userspace. + * FIXME_LATER: handle this gracefully + */ + pid = curval & FUTEX_TID_MASK; + if (pid && pid != task_pid_vnr(current)) + return -EMORON;
Linux Plumbers Conference: Call for Topics
Submitted by dvhart on Tue, 2009-02-17 19:25. LinuxJon Corbet has posted an article on LWN calling for ideas for topics for this year's Linux Plumbers Conference. Last year was a great success, and I looking forward to attending this year's conference. If you haven't seen it, hop over to LWN and post your thoughts on topics you'd like to see at the conference this year. Current topic suggestions include things like improved user-space I/O APIs, configuration storage, and security integration. I'm debating if I should add "making wireless not suck on Linux".... Add your own, help make LPC a success.
Email in the 21st Century
Submitted by dvhart on Wed, 2009-02-04 06:44. LinuxGeeks worldwide have been using IMAP mail servers to, among other things, allow them to have a consistent view of their email and their folders from various clients. Unfortunately, many useful IMAP features have had poor and spotty client support. The most notable for me has been server side tagging. There is the "!Important" flag... but come on... how much information can you really store with one flag? Is it something I need to do? Something I need to follow-up on? Something I just want to be sure I don't delete? Sure you can use Labels, but most clients store those in local databases so when you pull up your mail in the office (or at home) all of your hard work tagging those mails is now invisible to you! Enter Thunderbird 2.0 with support for IMAP Keywords in the form of tags. So long as you restrict yourself to the default 5 tags mentioned in the latest IMAP spec (or rfc, or whatever it is) these tags are stored on the server! No kidding! The trick is to rename the existing Tags from the default Thunderbird profile rather than delete those and create your own. If you do that, they become custom tags and don't get propagated, at least they didn't appear to for me. Once you rename your tags, your prefs.js file should look something like this:
user_pref("mailnews.tags.$label1.color", "#FF0000");
user_pref("mailnews.tags.$label1.tag", "Important");
user_pref("mailnews.tags.$label2.color", "#CC33CC");
user_pref("mailnews.tags.$label2.tag", "Follow-Up");
user_pref("mailnews.tags.$label3.color", "#CC9933");
user_pref("mailnews.tags.$label3.tag", "Someday");
user_pref("mailnews.tags.$label4.color", "#3333FF");
user_pref("mailnews.tags.$label4.tag", "To Do");
user_pref("mailnews.tags.$label5.color", "#6600CC");
user_pref("mailnews.tags.$label5.tag", "Waiting");
If instead you find entries that look like:
user_pref("mailnews.tags.someday.tag", "Someday");
user_pref("mailnews.tags.someday.color", "#3333FF");
Then you are using custom labels. I found myself in this boat, so I edited prefs.js and added all the $label[1-5] pairs and then did a manual search to retag all my existing mail with the new labels. At this point it's a good idea to copy your prefs.js to your other thunderbird installations so the client knows to look for those tags and render them in the same colors - lest you confuse yourself ;-)
Now... if only tbird would inline plain text attachments in replies....
References:
File Management Idea (from John Stultz)
Submitted by dvhart on Thu, 2008-12-04 18:14. LinuxHey, So I'm John*. I don't blog. This isn't even
my blog. I'm just borrowing it.
So with all the discussion on the planet gnome about future UI changes,
along with the long time rumbling about improving file storage, I
figured I'd throw this small idea for file management out into the fray.
Here's a quick summary of the idea:
A fair amount of file data is managed by users not as files in folders,
but as objects in applications. Ask most Mac users where their music
is, and they don't say "In their user folder, under the iTunes library
folder", they'll just say "it's in iTunes". The same is likely true of
their photos and iPhoto.
So my idea is this: Don't fight user perception. Leverage file
management applications like Rhythmbox and F-Spot as top level storage
objects. Let them act like magic directories. They already deal with
searching, tagging, and storing meta-data, so lets not re-implement that
on the filesystem level.
If a user downloads a music file, they can just save to Rhythmbox in the
save-as dialog. Rhythmbox or any other file management application
functionally becomes a place to store things.
Here is the slide deck with more details.
Of course, I'm not a gnome developer. I'm just a user. So really this is
a bit of a personal vanity slide deck pitching my little homer-mobile of
an idea. But maybe, just maybe, a gnome developer might see it and think
of a better way to achieve something similar.
And since this is a blog post, here is a video of a cat:
* I'm speaking for myself in this post, and not for my employer.
The New Face of BrainDump
Submitted by dvhart on Sun, 2008-11-23 00:52. Linux
After a few weeks of disillusionment with my progress on BrainDump, John S. pumped me up with noise about casting a broad net and all that. You know, the percentage of people interested in BrainDump may be small, tiny even, but if I notify the entire planet about it, I may just get a handful of interested and talented people to participate in its development. So this weekend I spent some time and finished up the web presence of BrainDump.
- Created a new SVG icon in Inkscape - what do you think?
- Created a dedicated Google Sites page: http://braindump.dvhart.com
- Hacked around a bit to get the Site5 svn installation working for pseudo-anonymous read-only source access
- Created the users and development mailing lists
Now I think I'll sit on it a bit and get some feedback from a couple friends, I hope to start making noise on 43 Folders, Life Hacker, Freshmeat, etc. sometime next week. Please have a look and let me know what you think of the site.
