Here lies the last 25 entries in my weblog. Follow the yearly archives to the right for more.

Book Review: Making an Elephant

Making an Elephant Making an Elephant by Graham Swift

This book on his life and writing is good, though not as good as other books I've read like this. I enjoyed the personal passages about his life, more than the thoughts on his craft. The chapter written on his father's death stands out as a moving essay.

I have always been a fan of Graham Swift's fiction, so as a fan, I enjoyed this book. It's not as good as others like this I've read. Art Objects by Jeanette Winterson is better by a contemporary British author, and Mystery and Manners by Flannery O'Connor is a great example by an American author. Still, fans of Swift and other writers might enjoy this.

Every time I read a book like this, I wish for more books like this in my field (computer programming, for those who don't know me). I would love to read from great hackers on how they became the person they are, how life has affected craft, and so on.

View all my reviews >>

Link | Posted by deryck on March 8, 2010 | 0 comments

Simple Rules for De-Fatting Myself

I've got to lose weight. Working from home and the sweeties that line the red bar in the kitchen 6 feet from my desk are killing me. I can't do diets. So here are my simple principals for de-fatting myself that I plan to stick to for the next 3 months to see if it makes a difference.

  • No snacks between meals (at all!)
  • No desserts
  • Evening meal must be the smallest meal of the day
  • Drink lots of water

I'm going with the keep-it-simple path to see if just controlling my food consumption is enough. I'll let you all know how it's going in a few days.

Link | Posted by deryck on February 17, 2010 | 0 comments

Websites Don't Release Anything

A couple weeks ago I was in London for a Launchpad team leads sprint. There were lots of cool discussions, focused mostly on processes within Launchpad. Because of all this process talk, we ended up talking about our release process a fair amount. I had some ideas forming before this, but a week's worth of discussion helped cement my thinking about "releases" for websites. Now some two weeks later, I'm still thinking about this, so here's a quick sketch of what's on my mind.

First, websites don't "release" anything. It's a metaphor, and a poor one at that. We update the site with some version of our code. Different sites do this differently. With regular updates to edge (our beta site which many of our users use anyway) Launchpad has many levels of release -- code updates to edge regularly, db updates to staging regularly, and roll outs of both to the main site monthly. Other sites just continually do the equivalent of svn up on trunk on their site and apply DB updates as needed.

Using the term "release" so casually also makes you feel like you have to build in artificial barriers to make the false release feel more like a traditional software release. Version numbers are a prime example of this. We give a version number to each month's "release" on Launchpad, and I think the only purpose this serves is to confuse developers and users about the meaning of the number. If I download Django 1.1 and hate it, I can choose to download Django 1.0 and use that instead. If you hate Launchpad 10.01, there's nothing you can do about it. If we bork something in 10.01, it's not like we're rolling back to December's release (whatever it was numbered). We will continue moving forward, adding a new branch that removes the busted feature or fixes the newly introduced bug, or what have you.

And it's this very act -- the act of continually moving forward -- that makes me hate talking about website releases all the more. What everyone who works on websites wants to do is move forward as quickly as possible, constantly adding new features and bug fixes to a site. The moment you place some arbitrary stopping point on the process and name it a release, you slow down forward progress.

I realize some would argue this a good thing, that stopping causes you to assess or do QA or ensure some other permanent quality is in the "release." But there's nothing permanent on the web. I would argue that rather than faking something permanent, your time would be better spent getting features and fixes to your users more quickly. I know I'm not alone in this, but still this word "release" hangs on, even in web development.

I'm excited, then, to see some of the changes we're proposing to our "release" process for Launchpad. Björn has proposed a way to release features when they are done which will require a new merge workflow for our work on Launchpad. These are all good things, even if the specifics may change as we discuss this among LP developers. The only thing that would make this better is to drop the word "release" from any discussions of these new proposals. But old habits die hard, as the saying goes.

Link | Posted by deryck on February 16, 2010 | 2 comments

Life Through the Lens of a Machine

Last night I watched Surrogates, which was a fun movie. (Yes, I have kids and watch every movie later than the rest of the movie-going world.) I've also been watching Caprica. Then there's this little film called Avatar, which it seems the entire world has seen. As I finished watching Surrogates last night, I was struck by how much I'm seeing similar themes in sci-fi films and tv shows lately. These stories deal with people living their lives virtually through some intermediary -- an avatar in a virtual world, a robot, or a life-like robotic avatar, and so on. I suspect this will become even more common as time passes.

This suggests to me that there is a deep-seated sense among artists that such a future (or present) is immanent. People have been doing the machines-take-over-from-humans meme forever, but this is slightly different. This is humans-live-through-machines. Surrogates starts with a 10 year timeline that maps from creation of the first surrogate unit to world-wide adoption, which is realistic for how quickly technology can cause a paradigm shift. I think some form of this experience is very close to being a reality.

I say this as someone who views every activity of life through the "lens" of a computer screen. I'm not alone in this. Everyone I know might as well have a computer or smart phone attached to the body permanently.

I started reading The Singularity is Near some time last year. I've read bits and pieces but haven't committed to finishing it yet. I just recently moved this from "reading" to "to-read" on Goodreads because of this. I mention the book here because it deals with similar ideas -- this notion of a convergence of machine and humanity as we human beings push forward our own evolution. This can sound fantastic in the abstract, until you read the book, take an honest look at our computer-connected lives, or see a few stories like Surrogates, Caprica, or Avatar that make some version of this concept seem possible.

I'm not a technophobe, nor do I work in an area of software development that directly touches this kind of work. I do think, however, that inevitably I'll be connected to this kind of work, if I'm not already. "Everything that rises must converge" is not only a great Flannery O'Connor story, but also a great principal of life and technology. No one really knows what this future will look like, or what parts of it will be good or bad for us. It's nice to see artists wrestling with these questions, though. I'm sure the increase in stories like these only confirms how near such a future really is.

Link | Posted by deryck on February 12, 2010 | 0 comments

Book review -- JavaScript: The Good Parts

JavaScript: The Good Parts

JavaScript: The Good Parts by Douglas Crockford

Anyone doing a lot of JavaScript development would benefit from reading this book. I feel very comfortable in the depth of my JavaScript knowledge, and I work with JavaScript on a weekly, if not daily, basis. I still learned things from this book. In many cases, I already knew about the particular peculiarity of JavaScript being outlined, but I learned a bit more about why a particular wart exists in the language.

View all my reviews

Link | Posted by deryck on February 8, 2010 | 0 comments

2010 is here, now what?

With it being the new year, I feel compelled to do one of those predictions or new-year-resolutions posts. I'm not big on either so here's a bit about where I've been and where I'm going.

2009 saw me take a job with Canonical. I started working on the bugs app in Launchpad in April and have since been promoted to team lead for the bugs app team. It's been an amazing few months. Working for Canonical has been a wonderful experience for me. I went from working in companies as the lone telecommuter to a company filled with remote workers. It's wonderful and in the process I've learned a lot about being an effective telecommuter and managing a team remotely. I'll probably put these thoughts into a post sometime in the next couple months.

I'm also working with Zope more these days than Django. From 2005 until 2009, I was doing Django development heavily. There are days I miss Django, but I dip my hand in where I can, mostly with code that runs this site and a couple little toy projects I occasionally hack on. Launchpad is a Zope application, so since April, I've really tried to learn Zope as well as I can. I'm surrounded by great Zope developers on Launchpad, so like working with the Samba team, learning is made easier by absorbing from colleagues. I do like Zope, which may seem weird for a Django guy to say. I'm not a framework zealot, though, and I think Launchpad is a unique Zope app, so I should say, I like Launchpad's use of Zope. I need to do a simple Zope app at some point to get that perspective.

(I still don't love zcml, I have to be honest. The template language is growing on me, and I see it's power. Zope component architecture has won me over completely, though.)

Personally, I feel quite happy about where I'm at with balancing work and life as 2010 begins. I'm as productive as I ever been as both a manager and a coder, and I still have plenty of time with my kids and wife. Some of this is due to time shifting my day to better match European colleagues, but some of it is due to Canonical's focus on project management and communication in a distributed environment, which help to make work time very productive.

Some of my pet projects and hobbies languished a bit in 2009. Anytime you take a new job, this is to be expected. I didn't get the number of books read that I would have liked. I also didn't spend much time in world in Second Life, due to older hardware issues making the experience not so nice. So I want to read more and spend more time in world in Second Life. Discipline will help with the first, and the new laptop I got at Christmas will help with the second. I want to do some personal hacking a bit more, which is what I've always used Second Life for, honestly -- a bit of in world scripting to work on 3D math and similar concepts, viewer hacking to work on my C/C++ skills. I'm planning to work on being disciplined in releasing more of my personal, social-site hacking stuff, too, which is all Python and Django. I've swallowed the lean kool-aid, and I'm on a war against leaving work in progress. In everything personal and professional, I'm taking a task and seeing it through to completion before moving on to something new.

I guess that's my new year's resolution, if I have one -- no unfinished work in progress in 2010! With any luck, I won't wait until 2011 to post here again about how that's working out for me.

Link | Posted by deryck on January 10, 2010 | 0 comments

Kindle Crapped with Black Lines but Amazon Customer Service Rocks

I woke up Saturday morning and reached for my Kindle only to find the screen went boom when I slid the power switch to wake the device. Black lines filled the screen and the device was unusable.

This is what it looked like:

Kindle Screen Gone Bad

I have no idea what caused the screen to do this. I didn't use the device for about a week. It was sitting on my desk on top of a stack of paper books. Nothing was on top of the device and nothing around it.

Today my replacement Kindle arrived via FedEx. I only found time to call Amazon about the problem yesterday. Amazon's customer service rocks. I waited so long because I thought this was going to be a pain to deal with. The Kindle support site was nicely setup. It guided me through a form to submit a support ticket, and then the follow up email walked me through making a call to Amazon. A five minute phone call later, I had a new Kindle en-route, I assume covered by the warranty.

So while it was a bummer to have this happen, Amazon really is to be commended for making it better quickly.

Link | Posted by deryck on December 15, 2009 | 2 comments

Neil Gaiman Has My Dog

Pictures from Gaiman's recent post, What I plan to do this week show that his dog and mine could be twins.

The resemblance is uncanny. Except that my dog, Macy, has about 50 pounds on Gaiman's dog. I don't have any current pics of Macy but I'll try to snap a couple today.

I would include the pics, but can't. Go to his site and see for yourself.

This confirms my impeccable tastes, btw.

Link | Posted by deryck on December 11, 2009 | 0 comments

Book review: Web Component Development with Zope 3

Web Component Development with Zope 3

Web Component Development with Zope 3 by Philipp von Weitershausen

This is a good introduction to Zope 3. I've been reading it off and on since I started working on Launchpad, which uses Zope. The book was good for helping me get the terms and conventions of Zope development, but Launchpad has a very particular use of Zope 3. Some of the more general web dev uses of Zope 3 covered in the book don't apply, for that reason.

But still, this is a good overview of web development using Zope 3. I would recommend the book if you're trying to get up to speed with Zope.

View all my reviews

Link | Posted by deryck on November 28, 2009 | 0 comments

5 Years of Ubuntu

Yesterday was 5 years to the day from the first Ubuntu release, Warty Warthog. 8 days from now we will have the eleventh release, Karmic Koala. I say "we" because I work for Canonical now. While I don't have the historical context that those who have been working on Ubuntu from the beginning have, I do share a sense of wonder at what the last 5 years have been for Ubuntu.

I don't work on Ubuntu at Canonical; I work on Launchpad. But I still feel very much a part of the development process of Ubuntu, just because Ubuntu is so tightly bound to Launchpad. I have to say, too, that Canonical is unlike any company I have ever worked for. Everyone I work with -- literally everyone -- is smart, kind, generous, motivated, and generally a pleasure to work with. To me, this speaks to the heart of what Ubuntu is and what it means to me. Community, collaboration, and a more human computing experience are not just concepts weaved into Ubuntu, but literally, it's the ethos of the people involved in the project and in Canonical.

So my day to day experience of using Ubuntu and hacking on code that contributes to shipping an Ubuntu release is an experience of the best parts of humanity and software development. And I'm quite glad for the opportunity.

Here's to the last 5 years of Ubuntu! I hope I can keep this front-row seat for the next 5, and beyond.

Link | Posted by deryck on October 21, 2009 | 0 comments

Taking on a New Role in Launchpad

Today marked my official start as team lead for my team on Launchpad. I work on the Launchpad bugs app, a.k.a malone, for those who might know yet know. I've only been working for Canonical and working on Launchpad for a little over 4 months, so it's an incredible honor to be given this responsibility. Each of my co-workers is an amazing coder, each one with an impressive set of skills, backgrounds, and abilities. I've counted myself lucky every day since I joined Canonical to get to work with Abel, Gavin, Graham, and Tom.

So I'm going to try hard not to suck as a team lead. :)

Here's to two weeks down, and a few more to go as we close out Launchpad 3.0, and many more after that as we plan and work out the next year of Launchpad 4.0 development.

Link | Posted by deryck on September 3, 2009 | 0 comments

Book review: Sag Harbor

Sag Harbor: A Novel

Sag Harbor: A Novel by Colson Whitehead

I spent all summer on this book. I enjoyed my time in Sag Harbor so much that I couldn't bring myself to finish the book, even as I waited anxiously between reading spurts. The characters are so richly and lovingly drawn, the community is vivid. I just can't say enough good things about this book. When I finished, I wanted to start it again. Right then. I'm not sure if I've ever had that feeling about a book.

I've been a fan of Colson Whitehead since his first novel, The Intuitionist. I read Apex Hides the Hurt, too. I liked each of these, and liked them a lot even, but it's Sag Harbor that really has won my heart. This is a beautiful story about growing up in the 1980s that I could really identify with. And I could go on, on, on. It's really just that good.

View all my reviews.

Link | Posted by deryck on August 24, 2009 | 0 comments

Testing for undefined variables in JavaScript

There are all manner of tests for undefined in JavaScript it seems. if typeof(foo) == 'undefined' or foo === undefined. So when should you use which?

The following shell example explains:


deryck@domino:~$ js
js> foo === undefined;
typein:10: ReferenceError: foo is not defined
js> typeof(foo) == 'undefined';
true
js> var foo;
js> foo === undefined;
true
  

In browser, there is also the window.foo === undefined construction, instead of typeof(foo), but the latter seems clearer in code to me.

Link | Posted by deryck on July 23, 2009 | 0 comments

Launchpad Available As Free Software

Today Launchpad source code has been made available as free/open source software under the GNU AGPLv3. This is a very exciting day for those of us working on Launchpad. I am quite proud that I was actually awake last night when the announcement appeared.

I noticed Jono Lange changed the topic in #launchpad on irc.freenode.net somewhere near midnight my local time. Almost immediately after, I found Karl Fogel's email to our Launchpad list announcing the open sourcing. I'm generally in bed that late; however, I was trying to get a merge proposal submitted before I went to bed, and then, I had some hacking to do on a personal project I'm working on. I am glad circumstances contributed to my being awake when the moment of open sourcing came.

I would really encourage any free/open source developer to look closely at Launchpad for project hosting (or just code hosting, bug tracking, mailing lists, etc. or any combination thereof). The code is freely available, and you'll find a group of developers at Canonical who are excited about seeing Launchpad succeed as both a great collaboration platform and a free software project itself.

Link | Posted by deryck on July 21, 2009 | 0 comments

An if-substring-in-string Django Template Construction

Here's a quick tip for Django template hackers. It's a known fact of Django templates that the syntax is purposefully limited. I've been living with the need for an if-substring-in-string construction. Of course, I could write a custom template tag, but work is quite busy. So on a whim and a 10 minute break I tried this yesterday, and it worked well for me. Take a look and let me know what you think.

First, the problem.

Bookmark Formatting

I have a custom app for pulling in my Delicious bookmarks and formatting them as link posts here on this site. I include the HTML I want in the original bookmark and have a bit of template code to insert preview images generated by ShrinkTheWeb. When I link a YouTube video, I do a quick cut-n-paste of the video to embed the player, and in these cases, I don't want to include the preview image. In Python, this would be super simple:


if 'http://www.youtube.com/' not in link_url:
    show_thumb()

However, Django templates don't have a similiar syntax.

A Solution Using {% with %}

So here's what I did:


{% with link_url|slice:":23" as short_url %}
  {% ifnotequal short_url "http://www.youtube.com/" %}
    My ShrinkTheWeb image goes here.
  {% endifnotequal %}
    Other HTML common to all links goes here.
{% endwith %}

What do others think? A decent solution? There are some issues; if I want to use multiple video sites, for example. At that point, I would be better to use link categories or a custom tag. But for a 10 minute fix, I think it's quite nice.

Link | Posted by deryck on July 3, 2009 | 4 comments

When JavaScript Attacks, errrr, Hacks

I've been doing a lot of JavaScript coding in my recent work on Launchpad. I mean, a lot! We're pushing to get every aspect of a bug page editable within the page itself, hopefully making it easier to manage bugs without being directed to another web page. Everyone on the Launchpad bugs team is working on some part of this. I haven't previously done any JavaScript coding like this, and now I'm sitting with a 1400 line JavaScript file that has grown unwieldy and needs to be tamed. I'm starting on that refactor this morning and thinking on the things I've learned as this file has grown seemingly with a mind of its own.

I should note some of the conditions that led to this. I wrote that I haven't done JavaScript like this before, but it's not as if I lack experience with js. I've done a lot of JavaScript coding both in previous jobs and for fun, everything from minor usability improvments to extensive page functionality in JavaScript. I've taught conference tutorials on AJAX and was even working on a book on Google's use of JavaScript in it's apps. (Yes, I'm a failed tech book author at this point, but the point is still valid, I think.) But all the work I've done previously either started in JavaScript and added server components as needed, or started with the server-side and added JavaScript in targeted areas. This work we're doing on Launchpad bugs has an existing, sophisticated server component -- the bug tracker -- and now needs an extensive JavaScript application built on top of that. Adding complexity is that the JavaScript component is being built piece-by-piece in small branches, rather than with a cohesive architecture. And by several developers at once.

It's this part about building an extensive JavaScript application in pieces that is really the new part for me, and I've learned some things I'll carry foward in terms of how to build a nice JavaScript module in small bites.

Global Module vars

Sticking variables into the global namespace of a module (so multiple functions have access to the variables) is now my sure sign that I need to refactor. From here on, I'll create an object rather than doing this.

This seems obvious but we're using YUI3 where each module is akin to an object itself, so it wasn't that clear to me. I would avoid module-level globals, even inside the module pattern itself, and create distinct objects the moment I begin to need state across objects or functions.

Closures

Again, YUI's module pattern and the way our Launchpad API is designed encourage callbacks via anonymous function closures, especially when dealing with XMLHttpRequest. And really this is a fine thing, and a common pattern when doing async js coding. But it's easy to let the closures get out of hand, which makes the code harder to read and maintain and makes debugging a bit harder, too. So I'm trying to use closures only as I have to.

Custom Events

Given the previous point, I think it's good to fire custom events to signal when to do some work. A custom event when an XHR has completed, or a custom event when it's time to update the DOM. A custom event when some state is initialized, and so on. Custom events are my new mantra going forward.

Perhaps I'll look back after this refactor and feel I've abused this pattern as well, but I think it will be cleaner and will be easier to test.

Patterns for Reuse

And finally, the next time I get into some extended bit of JavaScript work, I'm going to think about the patterns I'll be using and about the overall architecture earlier. Even though I'm sure I'll still be doing small branches that add small bits of functionality, I'll try to look ahead more to where this code might be reused across Launchpad, where this pattern of functionality or interaction might be repeated, and where the code I'm working in is likely to go over the next two cycles.

Link | Posted by deryck on June 26, 2009 | 0 comments

The Early Morning Internets

Most everyone I work with knows this, but friends and family may not -- so just in case you haven't heard -- my work schedule (which means the time I am available online) has changed since I joined Canonical. I am now up very early to better match European time zones, where the other members of the Launchpad bugs team are located. How early, you ask?

I wake at 4:30 am, and I'm at work by 5:00.

A pause while that sinks in on all my musician friends.

Work hours are now 5:00am-2:00pm, but in practice I knock off closer to 2:30 or 3:00. I try to avoid being online after that. I usually spend the afternoons playing with kids, cleaning the house or yard, or other such family/home activities. I usually come back in the evenings for an hour or two of work before I go to bed, but I rarely jump on IM or IRC in the evenings -- evenings are for quite work. Note the usually in the previous sentence. This is not a work requirement -- have I mentioned Canonical really is the best employer! -- and in the summer I'm finding it harder to find time in the evenings with the kids out of school and staying up later. Usually, the girls collapse by 7:00-7:30 on school nights, so I enjoy coming back to the laptop for an hour or two to unwind. Sometimes this is work-related, and sometimes it's just for fun hacking (which may even be work-related still, believe it or not!)

So all of this is to say, if you want to or need to catch me online via IM or IRC, make it happen from 5:00am-2:00pm CST. For you west-coasters I may never see you online again, so ping me out a day early if I need to stay around to catch up with you. :)

While the schedule is different for me in terms of my time online, it really is the perfect schedule for me. I'm focused early, getting a lot of work done, and enjoying working on Launchpad a whole lot. And then there's still time in the day for doing the things a husband and father likes to do.

Link | Posted by deryck on June 24, 2009 | 0 comments

Book review: Saturday

Saturday

Saturday by Ian McEwan

My review at Goodreads

Rating: 5 of 5 stars

Ian McEwan never disappoints, and this novel is no exception. While I found the build up to the final third of the book carefully constructed, if sometimes seemingly a bit slow moving, all of this was to lend greater wait to the final moments of conflict in the novel. I took my time reading this and enjoyed every moment. I finished this on my plane to Barcelona, Spain for Canonical AllHands, and the book really caused me to think on conflict and generosity among various peoples on the planet. I would highly recommend this book.

View all my reviews.

Link | Posted by deryck on May 24, 2009 | 0 comments

Working from Barcelona!

I've just finished my first night in Barcelona, Spain. This was a fun night, a good night for catching up with people in person whom I normally only see online. And, of course, Canonical is steadily growing, so there are many people still to meet or get to know. This should be a nice couple weeks.

That's right -- two weeks. This first week is for the Canonical AllHands meeting; next week is for UDS. . It's a long time to be away from my family, but I really feel it's time well spent.

I've been with Canonical for a little over a month now, and it's been a busy few weeks. We're mid-cycle now on the 2.2.5 release, and looking at our 2.2.5 progress page, you can get a good idea of what sort of work is going into Launchpad Bugs this next release. Lots of words like "UI" and "inline" on the page. I've been doing work on making subscribing to bugs happen on a bug page, rather than having a user taken away to a "subscribe to bug XXXX" page and redirected back again after confirmation.

This is the last week to land code this cycle, and with AllHands, I don't know how much more I'll really get done. But I'm going to try to get in some coding time this week. I would like to finish all of the subscribe-to-a-bug-inline tickets this cycle, but I'm sure that's a bit unrealistic this time. But tomorrow, tomorrow we'll see what happens.

Just not tonight... tonight, I'm dead. I need sleep. now.

EOD

Link | Posted by deryck on May 19, 2009 | 0 comments

Starting Work at Canonical Tomorrow

I'm writing this from a plane, somewhere over New Mexico, headed home from a few days working in Las Vegas. My last few days, actually. As I write it's Friday (the posting of this is now Sunday), and on Monday (tomorrow), I'll start work for Canonical, the company behind Ubuntu. I will be working on Launchpad, specifically joining the team working on the app's bug tracker component.

While I have great friends I'm leaving behind at Greenspun, I know the time is right for me to move on. My heart has always been in free software first and media somewhere after that. The group I've worked with is a progressive segment of the news/media world, but at the end of the day, I've been doing closed, proprietary development for the last few years. I'm excited to lend my hand to free/open source software development again. I feel a bit like I did when I joined the Samba Team, though experience has given me a different set of eyes through which to view this coming change. There will be plenty of challenges and new things to learn, certainly, and I plan to just dive in, work hard, and contribute whatever I can to Launchpad.

I will continue to work from home. Most of Canonical works from home offices, and that will be a nice change, having so many peer telecommuters. My day will be time shifted, with me starting earlier, to better sync with my largely European teammates. This is a positive for me, since I'll finish work earlier and have some time in the afternoon with the kids after school. Because I'll be starting so early, I don't plan to work from the attic office I was using, the one that also houses my wife Wendy's business.

So there is the new job to start in the next few days, but also a whole world of changes happening around that, all of which are positive and exciting, and I truly can't wait to log on IRC Monday and get started.

Link | Posted by deryck on April 12, 2009 | 0 comments

Scripting Simple Shell Commands

I'm setting up a latop with a fresh install of Ubuntu. I haven't done a clean install on a real machine in who knows when, and over the last 3 months or so I've become a huge fan of PPAs. I have several PPAs to keep up to date with packages I use that have frequent updates beyond what's available from Ubuntu updates. Since I'm adding several at once, I'm adding a lot of PPA keys. Doing this reminded me of a simple trick I use when running a frequent command. (Some form of this is common among developers or sys admins, but if you're less experienced with a shell or Linux this may be useful to know.)

First, the command for installing a PPA key is...


sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com [KEY]

...where [KEY] is the PPA's key finger print.

So the easiest way to use this is to cycle back through your bash history and replace the previous run with the new key and run again. For me, I know I won't remember the particulars of this command in a month or two when I need to run it again and it's no longer showing up in my bash history. I'll end up having to consult a man page or the Launchpad help pages. Not a big deal, but with things like this -- commands I use semi-regularly but not enough to keep in memory -- I usually add a little bash script. For example, with this command I created a script called add-ppa-key:


#!/bin/bash

if [ $# -eq 0 ]; then
    echo "Usage: add-ppa-key KEY_FINGERPRINT"
    exit 1
else
    FINGER=$1
fi

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com $FINGER

I always add the usage test with each command like this, just so I can use tab completion to find the command, run it with no arguments, and get back a statement of what I need to do. I have a "bin" directory in my home directory and append $HOME/bin to $PATH in my .bashrc. I have several of these type of scripts in this bin directory, for building software or even for simple to remember but frequently used rsync commands or PythonPath export statements. Not only does this make commands reusable without having to completely remember them, it's also nice for documenting commands. So the next time someone asks me what the command for installing a PPA key is, I can do cat ~/bin/add-ppa-key and paste the output into IRC, IM, or what have you.

Link | Posted by deryck on April 1, 2009 | 0 comments

Moderate FUD

When Bush was President all my liberal friends on Facebook constantly spammed my news feed with posts that had as their point, "Bush is (or will be) the downfall of America." Now that Obama has become President, all my conservative friends are filling my news feed with posts that say the exact same thing, with one minor difference, "Obama is (or will be) the downfall of America." This is why I've never taken to the liberal or conservative label, or the Democratic or Republican label -- I just don't care enough to spam my Facebook friends with FUD. Except for now. Now, I've found a cause worthy of a Facebook wall post. Moderates of the world unite!

What does it means to be a moderate, you ask? It means you have enough of both liberal and conservative friends that you can see how silly both sides look. Conservatives and liberals -- and here, I mean those of you who feel so strongly about that label that you have to post crap on the Internet to prove why you are the one who is correct -- you two are not that different from each other. You both want the other to wake up and become sensible and take up your obviously superior point of view. And if the other does not, then THE WORLD AS WE KNOW IT WILL COME TO AN END (emphasis yours).

So let us moderates unite in our laissez-faire wall post attitude and say to our liberal and conservative friends alike that we are tired of your anti-socialist or anti-anti-socialist messages. You are our news feed terrorists pals, yet we still love you. But we refuse to take sides in online pissing matches. The reason you don't know it's a pissing match is because you only have friends of the same political persuasion. And moderate friends, who of course never speak up.

So here we are, we are not loud, we are not proud. Not usually, anyway. We want to be friends with both conservatives and liberals, with both liberals and conservatives (see you both got top billing there, now be quiet) because there's something about each of you we like. We refuse to choose sides, and we're not backing down! And yes, just this once we moderates should post to Facebook so our bi-partisan, fearful friends can see how silly they look. Indeed, I am posting this to Facebook now, feel free to join me in my honest mediocre dissent. Moderates unite! If we don't stop the world-as-we-know-it-will-end-tomorrow wall posts then the world as we know it will end tomorrow. I'm only writing this because I don't care, not because I care. I am not afraid, and you can't make me be afraid.

Seriously, I'm sorry to offend, but if your political perspective requires me to live in fear, I just can't join your movement. I will forever remain moderately unaffiliated.

Now, where is that "post to Facebook" link...

Link | Posted by deryck on March 17, 2009 | 1 comment

How the Web Supplants Traditional Authority

I recently linked to a NY Mag article on the New York Times, citing it as a nice piece on the Web efforts at the Times. I also posted some questions about a quote by the Times' Aron Pilhofer. Aron noticed the link and in turn posted a question back to me. Thanks Aron for taking the time to do that, and what follows here is my response. Here's my take on why I suggested that the Web "supplants and undermines any notion of 'authority.'"

On the point that the Web undermines authority on the Web, Aron and I are in agreement (based on his comment on this site.) But what is it about the Web that supplants authority?

By supplant, I mean that the Web substitutes one kind of authority for another, that the Web itself is a system of authority, although a different kind of authority. So not only does the Web remove barriers to publishing and communication -- the barriers that others use to make claims of authority -- but the Web also institutes another kind of authority, although I like to think of it as a kinder, gentler authority. This authority is based on consensus among peers. It is relational authority -- many objects pointing to another and confirming the legitimacy and authority of the other.

This authority is clearing typified in Google's PageRank algorithm. I do think, however, that the concept is writ large across the Web in all kinds of ways. Social relationships on the Web are confirmed by the relationships between sites on the Web -- i.e. my personal site points to my Twitter page, my Facebook, etc. The same circle of "friends" show up across various sites. My GPG key has been signed and verified by other people's GPG keys, confirming my identity and creating a trust ring. Using relationships as a structuring principal (and here I mean "relationship" in the most encompassing sense of the word -- personal relationships, link relationships, relational properties of data, etc.) creates a system of authority, one in which a given object is deemed authoritative based on its relationship to other objects.

To take this back to the news industry, which is where this discussion began, something isn't really news on the Web only because it appears on a news site. Something becomes news on the Web because of the ground swell of linking that occurs around something when it becomes popular. And think more than just backlinks from other web pages a la PageRank. Think emails sent to friends, Facebook wall posts, tweets, IRC, and on and on. News isn't news on the Web because it appears on nytimes.com or washingtonpost.com or any other news web site. News is news on the Web when the right places begin pointing to said object and declaring it news.

The only people for whom appearing on a major newspaper's Web site is a prerequisite for being considered news is fellow journalists. And I would argue that even that reinforces the notion that authority is derived from relationships, i.e. this group of people agree that this thing is authoritative as news, which is completely different from previous systems where authority is claimed as divine right or as some function of one's position in society or control of the means of publication.

This is nothing new, really. Oral tradition gave way to the written word. The written word gave way to the printed page. The printed page gave way to the computer screen. And now here we are. Just the way mass-produced Bibles in the vernacular killed the hand-written priestly Bible's claim to authority so the Web kills the printing press's claim. The shift in authority from page to pixel is much the same as the shift from a priestly class to a publishing class. So if we're going to reinvent ourselves in this age, let's don't stake our claim on trying to transition old models to a digital age. Let's fully embrace the age for what it is, new system of authority and all that such a thing means.

Pop-culture Bibles FTW!

Link | Posted by deryck on January 29, 2009 | 2 comments

Comments Back Online and a New Combined Weblog Feed

I have made a few updates on the site here. I know have comments enabled again, and I also have combined my links (which are really like mini-blog posts) into the weblogs feed. Eventually, I'll break all these out -- one feed for blog entries, one for links, and one which is a combined feed -- but for now, it's all one feed.

If you're subscribed to me, you should start seeing link posts appearing in the feed as well.

Link | Posted by deryck on January 15, 2009 | 0 comments

Ok, So What am I doing For Halloween?

Another day in the telecommuting office, even if it's Halloween. What's on tap for today? "Dad" costume, lunch, and iGoogle widgets, errr, gadgets.


Ok, So What am I doing For Halloween? from Deryck Hodge on Vimeo.

Link | Posted by deryck on October 31, 2008 | 0 comments

For older posts, see the writing archives in the sidebar above.