dents: last checked Sat Jul 17 07:15:24 2010 (85 posts)

@zack It's true that the updates server is not #, but the client and kernel module are.
dents Thu Jul 15 12:06:37 2010
@zack I believe the Ubuntu Desktop work was also partially funded by a grant from NLnet.
dents Thu Jul 15 12:01:25 2010
@zack It's only Ubuntu Desktop that's free as in beer... I don't think there are separate desktop/server kernels for !Debian proper.
dents Thu Jul 15 12:00:35 2010

Christine Spang blogs here about free software hacking and her adventures and endeavors.

Have a look at the most recent posts below, or browse the tag cloud on the right. An archive of all posts is also available.

Non-blog things of Christine's can be found on her homepage.

RSS Atom Add a new post titled:

From the department of things-that-I-know-are-possible-but-can-never-remember-how-to-do-so-hey-I-read-the-manpage-and-now-I'm-blogging-it, I bring you "downloading a directory of photos from a website":

 wget --recursive http://example.com/photos/some-event/ --no-directories --directory-prefix <local-folder-name> --accept JPG,RW2

I always remember wget --recursive (or wget -r for short), but that produces an annoying tree of directories starting with the website's domain and working its way up to the directory you actually want. In the command above, --no-directories removes the tree, and --directory-prefix tells wget to put the downloaded files somewhere that's not the current working directory. The --accept option tells wget to discard files with extensions other than those mentioned, so your downloaded directory is not cluttered with webserver-generated files like index.html if you don't want it to be.

Here's the short version, since the long version is nice to remember but not so nice to type:

wget -r http://example.com/photos/some-event/ -nd -P <local-folder-name> -A JPG,RW2
Posted Mon Jul 12 14:13:00 2010 Tags:
Christine Spang Fourth of July

This Fourth of July, pika launched the Couchboat Mark II and paddled it down the river to watch the epic fireworks show put on every year by Boston/Cambridge.

Taking the boat to the river

Putting the boat together

Launch

The boat was an all-day operation and incredibly slow in the water, but so worth it. We watched the fireworks less than a hundred meters from the launch barge.

Photo credit to Molly.

Posted Mon Jul 12 01:05:02 2010 Tags:
Christine Spang [h]ledger rocks my world

I hate keeping track of money. Bank accounts, credit cards, investing—it's such a hassle. Hell, sometimes I even hate the fact that money exists and needs to be dealt with in the first place. But I admit that it's an easier system than bartering for everything.

In college I pretty much ignored most things financial. I rarely had more money than I needed, and put little financial planning into deciding what I could and could not spend money on besides, "I'm going to make X dollars this summer," and, "think twice." But now that I have a steady paycheck, it seems like a good idea to know where all my money goes, so I can make better decisions about how I'm spending (and saving) it.

But I've kept procrastinating starting to do so, because GUI programs like Gnucash and HomeBank seem like such a hassle. Their first screen is dauntingly complex, and if you don't know much about accounting it's scary and difficult to be asked to set up a big set of accounts when first starting to use the program, without having any prior experience with what you personally would find useful to keep track of. Entering data through menus and dialogs is tedious and slow.

hledger (or ledger, which came first) had been appearing on my radar recently, not least because Iron Blogger uses it). hledger changed my opinion of accounting software. In about 15 minutes, using only the sample transactions from the manual, I was able to enter all my assets and liabilities—bank accounts, credit card, student loans, money I've borrowed from people and never paid back though I said I would, etc. And then, I could run 'hledger balance' and it would tell me what sorts of things I had spent money on in the past few days, as far back as I could bother looking up actual transactions for, rather than entering a single transaction with a balance forward. Duuude, awesome!

I'm a geek. I like statistics and data about my life, as long as it's not a huge pain to collect the data in the first place. More data means more on which to base decisions, decisions which will then be freer from the bias of what I find memorable enough to remember having done.

Here's what I like best about ledger:

  • Command-line interface for the hacker in me.
  • Pre-existing facility with a text editor transfers over to facility of data entry.
  • No need to set up accounts separately from transactions. Transactions are the important thing, and accounts just automagically appear when the account name appears in a transaction. Mistakes are trivial to correct in a text editor.
  • Easy to start out with "use text editor to add transactions" and "hledger balance" and then branch out to more advanced features as necessary.
  • Text file format is well-suited to storing in a version control system.
  • It easily replaces two text files that I used to keep: "money owed to others" and "checks written but not yet cashed by the other party."

I don't think I'd be enjoying keeping track of my money nearly so much without a tool like hledger. It gets out of your way to let you focus on the hard things, like choosing categories for the things you spend money on and remembering to record the data in the first place.

Posted Sun Jul 4 13:52:42 2010 Tags:
Christine Spang RC bug squashing

Inspired by various Planet Debian postings, I've spent some time recently looking into a few RC bugs to help with the Squeeze release.

mpg123-el #581227 A previous commenter on this bug suggested a proposed fix, which I tested and uploaded. I think the bug's severity was inflated to begin with, so I downgraded the bug as well.

doclifter #580246 This one had to do with the python2.6 transition. I pointed out a patch against Ubuntu's version of the package that fixes this problem, and someone else made an NMU based on that. (Seemed like a good idea to look in the PTS for Ubuntu patches since Ubuntu always transitions to newer Python before Debian proper.)

gnuvd #580110 I checked upstream and a new version that's supposed to fix this bug was released today, so I updated the bug report to make note of this and give the maintainer a chance to look at it.

libtommath #583820 This FTBFS bug was caused by a previous NMU that fixed a different FTBFS and also made some unrelated changes. I sent a message to the previous NMUer noting this fact and made a new upload fixing the new FTBFS.

fceu #580820 Needs new upstream packaged to fix. The maintainer seems pseudo-MIA but has shown some signs of returning to activity; I sent an email inquiring as to whether he intends to fix the critical issue in this package.

op-panel #582377 and #571427 These were not merged when I started out, so I merged them after noticing they were the same. I spent some poking at the bug itself and made a simple patch, only to find out that there was a pending patch in pkg-voip's subversion repo. I hopped onto #debian-voip to prod the person who'd prepared the patch in subversion about the importance of updating the BTS when working on bugs. These bugs are currently blocking on testing the patch.

Most all of these bugs I've subscribed to in case of follow-up. (Geez, challenge-response subscription via email is kind of a pain.)

Posted Sun Jun 27 00:01:39 2010 Tags:
Christine Spang strawberry season

Last Sunday I cycled out to Verrill Farm near Concord and picked just over 5 pounds of strawberries, which I hauled back via commuter rail / bike to the station and from the station, about 6 miles. The first few weeks of June are strawberry season in Massachusetts, and the picking was prime. At the farm I was told, "You can go anywhere in the field. Come back here when you're done to pay, they're $2.75 a pound." A few strawberries got slightly but not unusably crushed on the way back, but overall I'd deem this acquisition method successful.

The plan for the berries? Make jam, using this recipe. The next day I bought another two quarts of strawberries at the farmer's market in Central Square since I wanted to make a lot of jam and was paranoid that my haul wouldn't be enough. This brought the total quantity of strawberries to 24 cups. That evening, the jam-making commenced.

Washed berries with the green tops removed:

washed berries with green tops removed

Sterilizing the jars:

sterilizing mason jars

And the lids.

sterilizing the jar lids

While keeping the jars and lids hot, I mashed and cooked the berries, adding sugar and lemon juice along the way:

mashing and cooking the berries

Somewhere between the half-hour and one-hour cooking point I declared the jam done, filled 10.5 mason jars with the stuff, and then boiled the filled jars.for 15 minutes to seal them.

Done!

finished jam

All in all, the jam-making portion took about 4-5 hours including stemming the farmer's market strawberries (but not the hand-picked ones). Much of that time was merely watching the pots.

The resulting jam is delicious, though perhaps just slightly more runny than jam ought to be. (Maybe I screwed up by not skimming the foam?) I'm looking forward to "canning" (why is it called canning? it goes in jars!) other fruits of the season as the summer progresses. I've even bought a pair of canning tongs and a wide-mouth funnel to avoid the hilarity of removing full jars from boiling water, terrified that the regular tongs will slip and drop the jar and its contents to doom.

Posted Sun Jun 20 12:52:36 2010 Tags:
Christine Spang the end of an era

The world around me seems to whirl these days. One week ago, I graduated from MIT. People I've known during the last four years have been dispelling to various parts of the globe one by one, day by day. California, Canada, Indonesia, Seattle. Some will be back again. Some will not, or if so only to visit. pika is a continuous bustle of activity as the summer has commenced and it has filled with creative and adventurous MIT students who've suddenly found themselves having free time. A hammock being built on the roofdeck. Thrice-weekly icecream forays. Common areas overflowing with people playing musical instruments, chatting, and messing around on laptops. Summer's warmth has arrived, bringing with it farmer's markets, strawberry picking, and swimming expeditions.

While it's wonderful to get to meet so many new people living in a college environment, I can't help but feel sadness thinking about everyone who's left. There are always more friends to be made as new people arrive, but old ones moving away leave bittersweet memories, and the new relationships are always a bit different as the age discrepancy between me and others changes. Or the me-the-ephemeral-collection-of-thoughts-which-when-regarding-other-people-sometimes-involve-the-mentor/mentee-distinctions-caused-by-one-party-being-older-or-more-knowledgeable-than-the-other-at-least-in-certain-areas changes. The end of a semester always feels like this, but this year even more so as the people I started university with start down new paths.

For me, that was going to involve staying on at MIT to complete a one-year master's program, the "M.Eng." in electrical engineering and computer science. That plan, too, has changed. I've deferred the degree and accepted a full-time engineering position at Ksplice, an exciting early-stage Linux startup here in Cambridge. I'd been working at Ksplice part-time since January before joining full-time immediately following graduation. Ksplice is the realization of ideas I saw being born on the whiteboard at SIPB when I was a freshman, and it's fun to see that play out in a small, ever-changing, low-bullshit company.

All in all, there are many more exciting things down the road, and, working at an MIT startup, I haven't even escaped the MIT/Cambridge reality-distortion bubble yet. Still, it's tempting to resist change and let myself romanticize the good old days, hoping to catch every person I've ever enjoyed spending time with and hold them down here forever. That's not the way life works, though. Change happens.

Posted Sun Jun 13 21:27:32 2010 Tags:

For work recently I've been doing some Django-related tasks that involve talking to an external API with POSTed forms. Django forms objects are declared by creating a class that inherits from django.forms.Form, with the fields of the form declared by declaring attributes of that class. Which works well and is clean and easy to remember—unless the API you're working with requires a field with the same name as a Python keyword, such as return. You can't declare a field like this as an attribute; it will trigger a syntax error.

I spent some time scratching my head over this, and came up with this as a workaround after source-diving to find out how Form objects actually work:

from django import forms

class ExampleForm(forms.Form):
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
            initial=None, errorclass=ErrorList, label_suffix=':', empty_permitted=False, return_url=None):
        forms.Form.__init__(self, data, files, auto_id, prefix, initial,
            errorclass, label_suffix, empty_permitted)
        if return_url is not None:
            self.fields['return'] = forms.CharField(widget=forms.HiddenInput, initial=return_url)

It turns out that the attribute declaration is just syntactic sugar for creating a dictionary of key/value pairs, which is then stored in the fields attribute. So we can monkeypatch in extra values after the translation. Which is somewhat more awkward and ugly, but works in a pinch.

Note that I haven't extensively tested what interactions this may cause with other forms code, so use with some caution.

Posted Thu Jun 3 20:58:11 2010 Tags:
Christine Spang Giraffes? Giraffes!

One of my housemates made me and Daf these wonderful mugs which go astoundingly well with the homemade coasters we got at a Giraffes? Giraffes! concert.

They require some degree of caution in order to not poke oneself in the eye while drinking from them.

Giraffes? Giraffes! mug and coaster

Posted Mon May 24 22:18:21 2010 Tags:

I just replaced my aging 2004-era PC with—wait for it—a 2005-era PC. A friend is moving across the country so I'm taking it off his hands.

Swapping hardware between Freyja and Earlgrey

The differences between the two are more than just the year of time, though: one was hand-built from parts, while the other was a commodity off-the-shelf Compaq. So the new machine, while not strictly faster by the clock, is 64-bit and is much more amenable to upgrades.

While the added bulk is a bit annoying, the case has a lot more space in it—up to 8 or so drive slots (I can't imagine ever needing that many), and 4 RAM slots—which is a sure step up from the limitation of two drive slots and two RAM slots in my old machine.

The most visibly shiny parts in the new desktop experience are 4G RAM versus 1G, and a nice ATI GPU. While I'm glad my OS allowed me to squeeze six years out of my main machine, I'll be happy to stop shaking my fist at Chromium for eating all my memory!

The new machine will keep its old name: earlgrey.

Posted Mon May 24 01:03:09 2010 Tags:

Mode of transportation has not yet been determined. Possibly bike, possibly train, possibly bus. It feels strange not needing to buy plane tickets.

I should be there for all of the conference proper but not for DebCamp.

Posted Mon May 3 01:35:28 2010 Tags:

This blog is powered by ikiwiki.