dents: last checked Fri 27 Jan 2012 04:45:02 PM EST (488 posts)

nursing a cooking urge after weeks of scrounging. tonight: fried tofu with broccoli and peppers. nom! # http://ur1.ca/7sk4a
dents Wed 25 Jan 2012 09:43:08 PM EST
blustery, sunny, warm, puzzle anticipation, chance and not-so-chance encounters with old friends. oh joyful day! #
dents Fri 13 Jan 2012 01:17:09 PM EST
Woot. Confirmed: going to @PyCon in Santa Clara in March!
dents Tue 10 Jan 2012 11:50:39 AM EST
I spent like 15 minutes today trying to figure out the least-stupid way to share a CACM article with some non-subscribers. #
dents Mon 09 Jan 2012 11:10:49 PM EST
Enjoying return to bipedal motion.
dents Tue 03 Jan 2012 09:45:26 AM EST

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 "git tricks I learned from work" department:

git push . HEAD:<branch-name>

This will push your current HEAD to a local branch named . You can also force an update using +, just like when you're using push to update an actual remote. HEAD can of course be a more complicated refspec.

You probably don't use git in as crazy ways as my work does, but knowing that you can use a dot to refer to your local repository in commands like push can sure come in handy every once in a while, especially when doing complicated rebases.

Posted Thu 19 Jan 2012 05:59:13 AM EST Tags:

Check out this series of photos of crittercam, which I took at the Mystic Aquarium on memorial day. Crittercam is basically a camera that gets strapped onto various animals to help marine biologists study their behaviour.

1986-2003

The first few iterations are clearly ad-hoc constructions, held together with duct tape, glue, and hand-attached metal.

oldest crittercam

Gotta love the multilingual "REWARD!!" written on it in permanent marker.

older crittercam old crittercam

As well as their phone number, in the case that some lost unit should wash up on shore and someone stumble across it.

1994 crittercam

In the later models you can see the influence of the advent of cheaper methods for constructing less jury-rigged cases. These days you can manufacture stuff in small quantities without sending it to a production facility. The package has gotten smaller (okay, that has a lot to do with the shrinking camera electronics and storage mediums), sleeker, and less hand-made.

2003 crittercam

I love seeing the evolution of technology! (Also seeing people using ad-hoc methods to get stuff done.)

duct tape engineering

(Cred must be given to Mako for the aquarium conversation that inspired this post.)

Posted Sun 19 Jun 2011 12:28:45 PM EDT Tags:

Another summer, another excuse to bike around carrying a lot of stuff. This time, the adventure was cycling to Ari and Beth's wedding in New London, Connecticut, with Mako and Daf.

Day 1 - Friday, May 27th

Mako and I took our bikes out for a loaded run down the Minute Man bike path to Bedford and back to make sure everything was in good working condition.

loaded for testing

Thanks to a whole bunch of bike maintenance we'd done in the week leading up to this, everything was confirmed to be ship-shape!

Amongst pre-tour maintenance tasks were replacing a very worn chain, heavily worn brake pads, a minorly worn cassette, and some _very_ worn derailleur pulleys. Check out the spikes on those things! (They're _supposed_ to look like gears.)
worn parts

Total distance covered: about 50km.

Day 2 - Saturday, May 28th

Prepped with a hearty grits and tofu scramble breakfast at Johnny D's in Davis Square, we made our getaway at a decadent 11am on a glorious sunny morning. Our friend Ben joined us, leading us on a nice route out of the city and staying on all the way down to Woonsocket, Rhode Island, where we stopped to grab sandwich ingredients (bread, fruit, hummus, veg salami) for lunch at a Stop & Shop.

The only problem encountered was me totally not paying attention to what grocery store we were going to stop at, and powering down a road 10km in the wrong direction, until I finally had the sense to turn on my phone and figure out what was up.


View Larger Map

(We were traveling from Chepachet towards East Killingly on the CT/RI border. I ended up halfway to Providence. Oops.)

At least the scenery was nice!
scenic rural RI
Well, I knew it was all downhill from here.
Jerimoth Hill

This resulted in me not getting to the campground until around 8pm, kind of cranky and thoroughly ready for food and a shower.

On the plus side, getting in late meant my buddies had already set up the tents!
camp
Our fourth party member (traveling separately) had bike problems and couldn't join us, so we had to drink her share too.
thirsty

Total distance covered: 110km, or, if you're me, 130km.

Day 3 - Sunday, May 29th

We rolled out of the campground at 10am, needing to cover another 70km in order to make it to the wedding on time. It was hot and sticky that day, and we had to brave the rolling ridges of Connecticut. We passed through Jewett City, which was funny on the way to a Jewish wedding.

We rolled into our motel in Groton at around 3pm, quickly showered, and then piled into a cab to make it to the wedding in time.

Wedding!
wedding

Much merriment, glass-breaking, excellent food, and running around in circles was had.

Total distance covered: 70km.

Day 4 - Monday, May 30th

We basically took this mildly rainy day off, only cycling enough to move our camp to Mystic, Connecticut and make it to the Mystic Aquarium.

Beluuuga!
beluga

And the highlight of the day was getting pizza and drinking local beer at Pizzetta, where you can ask for almost any pizza on the menu in vegan form.

Who'd have known that the best vegan pizza I've ever eaten would be found in Mystic?
pizzetta

I highly recommend Cottrell's brews, which were most excellent. Seriously, they even have a song.

Total distance covered: 20km.

Day 5 - Tuesday, June 1st

We parted ways with Mako (and Mika, who had joined us late from Tokyo by this point) on another brilliant sunny morning, Daf and I heading east and them heading west. We took a windy and somewhat ill-planned route to Providence.

It just so happened that we passed by Cottrell's on the way, and stopped in to greet the brewer and see the operation.
Cottrell
The only proper bike trouble of the entire trip: I ran over a half-inch staple, and then forgot how to switch my pump back to Presta mode from Schrader.
flat

The route ended up being longer than expected, but I can't praise Rhode Island's converted railway paths enough, and it was, for the most part, flat. We hopped on the commuter rail in Providence to make it back to Boston that day.

Total distance covered: 130km.

All in all, it was a great trip, where lots of lessons learned from last time were put into practice. (In particular, adequate prep, having a good rack setup, and having enough gears on the bike to avoid knee pain while climbing hills loaded. Mad props to Star for lending me her stellar bike, which was way better suited to touring than my racer.)

I didn't miss my computer a bit.

(More pics here.)

Posted Thu 02 Jun 2011 10:31:41 PM EDT Tags:

I found the following quote from Stefano's DPL platform interesting:

When faced with the dilemma, I've favored ditching some DPL tasks and communicating or taking notes about the others, instead of the other way around.

It takes someone who really knows Debian to realize that sometimes communicating about what's being done is more important than doing more.

Posted Fri 18 Mar 2011 06:45:03 PM EDT Tags:

Sometimes, Amazon packaging makes me want to cry.

The tires and their boxes

Yes, that is two foldable bicycle tires, one each in a FOUR FOOT BY SIX INCH BOX, with the rest of the boxes filled with paper. The last time I bought these tires, through the MIT cycling team, they looked like this. So to be fair, this also a vendor WTF for selling the ones that aren't pre-folded on the web.

I filled out their packaging feedback form to let them know how I felt.

Posted Sat 02 Oct 2010 11:51:46 AM EDT Tags:

DebConf launched with a bang—the day I arrived by bike I was up until 3am meeting and greeting in the basement lounge of the Carmen Columbia dormitory, where I was staying. No idea how I managed to be so awake for that.

The rest of the week alternated between hacking like crazy on code for my talk and spending a lot of time socializing with Debian folks new and old.

For the day trip to Coney Island, I joined the dkg-led bike expedition which ended up running to nearly 30 miles, which was a bit more than expected. The fact that this was all in actual dense city really drove home the scale difference between Boston and New York (I'd never been to NYC before this). We took several breaks to lounge around and eat and drink, so it took quite a long time even given the distance. I hadn't planned on seeing the baseball game that was a part of the trip, but I ended up going anyway and it turns out that a bunch of geeks at a minor league game is actually quite a lot of fun! I hope someone else will put some pictures from the bike ride and game online soon, since I didn't really take any myself.

This was the first DebConf where I gave a talk, which resulted in me skipping almost all of the other talks, because my talk was on the last day and I reaaally wasn't ready at the start of the conference due to the rest of life being pretty crazy this summer. I missed some things I would have liked to see because of this, but ultimately I think it was worth it. The good news is: it went well! I was nervous until I actually started talking (never given a talk at a conference before), and then it was fine. If you missed it, the talk video is on the web in low and high quality; slides are here.

The audience was great—there were excellent questions and people were excited and interested in the project. I couldn't have asked for a better reception. After the talk finished I spent some time aisle-chatting with some folks, and totally failed to recognize Joey despite having met him before, because he'd shaved off his hair.

DebConf was, like usual, both inspiring and exhausting. I haven't managed to follow up on much that happened during the conference yet. I definitely plan to do so, though, now that real life is calming down again. I'd hate to waste the post-conference buzz about SD. My todo list includes:

  • Working more on the SD debbugs bridge to make it more stable.
    • I ran into Jesse soon after coming back and now have a better idea of how I'm going to handle a lack of history properly.
  • Getting my patch to the Debbugs SOAP interface merged.
  • Looking into the read-write SOAP interface work that was done as a Summer of Code project.
  • After talking with Jesse I also kind of want to hack up a RESTful interface that could be used alongside the SOAP interface. It seems like doing so will make development of and using the Debbugs web API less painful in the future. This may be a rabbit hole that I don't actually want to jump down, but it's an idea.
  • Maybe other help on Debbugs proper!
  • Fixing SD bugs and generating more documentation.
  • Thinking about and thanking people for talk feedback!
  • Playing around with monkeysphere for authentication on my personal machines.
  • Watching videos of talks I missed (this includes basically everything that didn't have to do with bugtracking).
Posted Sun 22 Aug 2010 02:58:55 PM EDT Tags:

DebConf being in New York City this year, clearly the right way to get there was to bike, together with Molly and Daf. Being touring newbs, there were a few mishaps.

Day 1

We aimed to catch the 10:00 commuter rail train from Boston to Providence, Rhode Island, but we ran late (predictable) and had problems with the bicycle rack for my racing bike, which attaches without frame mounts (also predictable, since Mako and Mika test-rode it earlier in the week), so we didn't make it in to the station until around 10:20. We used the extra time to eat and fix up the bikes, though, so it's not clear how much of a setback that was.

Here are our bikes ready to go at the Providence commuter rail station.

bikes at Providence

We then had some problems with Molly's brakes, and it took a long time to navigate out of the city, but eventually we found ourself on the "Washington Secondary Trail"—a wonderful bike path along an old rail line. Every couple miles there'd be an old covered rail bridge over the river, and it was a well-paved straight shot for about ten miles, with no cars and no need to navigate.

Molly on a train bridge

Just as we were getting into things after the bike trail ended, something completely unexpected happened.

This is Daf's derailleur after it sheared off in the middle as we attempted to start after a red light outside Tractor Supply Co.

broken derailleur

Luckily, John and his son Chris lent us a hand and hauled Daf and his bike to the nearest bicycle shop in the back of their pickup truck. They'd just come from there, where John had bought Chris a new helmet.

Greenway Cycles, the only bike shop in a twenty mile radius, was three miles away. We got there an hour before it closed and Rick replaced the derailleur and straightened the hanger in a jiffy.

Due to all these things, we didn't get as far as we'd planned in the first day and ended up camping in Seaport Campground in Mystic, Connecticut, rolling in at around 22:00. We did about 65 miles, including six due to the detour to the cycle shop. Carrying camping gear is heavy! Several delicious peanut butter and jelly bagels and some wheatberry and couscous salad later, we were passed out.

Day 2

Molly at the campground

The second day included less bike trouble, but was no less eventful, and we were tired from the previous day's riding. The highlights included taking a tiny sidewalk path that I'm baffled how Google knows about up onto a sidewalk alongside the I-95 bridge across the Thames to New London, Connecticut.

the Thames bridge

The 13:00 ferry from New London to Orient Point, New York, where we got some remarkably good veggie burgers (whole edamame visible!) for lunch.

Cross Sound Ferry

And a vineyard on the north fork of Long Island, where we stopped for a quick tasting and ended up picking up a bottle of barrel-fermented chardonnay. The vineyard was small—23 acres, with 11 acres of grapes—and the proprietors were friendly and extremely interested in our trip. They gave us a dollar off on the bottle due to our method of transport.

The Old Field Vineyard

It turns out there are only two trains a day on the Long Island rail, and we just barely caught the 18:52 return from Riverhead. We had mere seconds in the station and ended up without enough cash to pay for tickets onboard, but the conductor just took what we had and gave us tickets to Penn Station anyway.

Outside Penn, a girl with a mohawk and a messenger bag overheard us talking about biking up Broadway and told us to bike up 8th Avenue instead. "Always bike up 8th and down Broadway because they have bike lanes in those directions." Thus, we didn't die dodging taxis in the dark.

So basically, due to various people being extremely nice to us for no good reason, we made it to Columbia University around 22:30, on the correct day. Warm fuzzies for humanity all around. :)

Posted Mon 02 Aug 2010 05:58:17 PM EDT Tags:

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 12 Jul 2010 02:13:00 PM EDT 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 12 Jul 2010 01:05:02 AM EDT 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 04 Jul 2010 01:52:42 PM EDT Tags:

This blog is powered by ikiwiki.