2010-02-14 / 22:27 /

  1. Bob Marley, Exodus
  2. Bonnie “Prince” Billy, Lie Down In The Light

Previous installments: 1 and 2

2010-01-17 / 12:09 /

Casey feeding an alpaca

My impression of a bunny pooping

Click for sauce.

2010-01-11 / 11:24 /

Free Gucci album cover


2009-11-13 / 15:25 /

The last time SALEM graced these pages it was for a mix of several styles, many of them not hip-hop. But the south is powerful within them and it leaks out as heavy sludge:

Gucci Mane – Round One (SALEM Remix)
SALEM – Trapdoor

Meanwhile Busdriver has been here for years.

Busdriver – Least Favorite Rapper (Anti-Pop Consortium Remix)

2009-10-28 / 11:08 /

LOL butter!
LOL butter!!1!

Alien veggies via the CSA
I have no idea what those are, but I'm going to eat them

My pumpkin, 2009

What happens when a runner’s stride frequency is the same as a camera’s frame rate?
Running animation

2009-10-14 / 17:25 /

Success comes with a price, in this case a calcaneus stress-fracture. Ex-runner Mark, in reference to my then-upcoming MRI, warned that my cycling fitness was probably working against me: my cardio & legs were more prepared than my dainty skeleton. My 5 year old New Balance kicks probably weren’t helping, especially since last year I half melted the soles while drying them in a fire. Hiking ruins everything.

Since I don’t have any pain while walking or biking I dodged having to use crutches, which is good since I hear that cycling with crutches is terrible. But I am off “high-impact” foot activity for 6 weeks. Looks like it’s all about yoga and/or swimming for the next month and a half.

It also means I’ve got some open race entries up for grabs. Anyone want to run the Partners in the Park on October 25th (in York, PA) or the Spirit of Pittsburgh half marathon on November 1st? Upside: free. Downside: they’ll think you’re me.

2009-10-14 / 13:00 /

We all know Windows is a ghetto (at least for developers); I just googled for confirmation. Unfortunately I’m stuck there because of work and have been using cygwin to make things easier.

Unfortunately I’m beginning to think cygwin is a ghetto too. You can compile some source, but there are enough differences to be annoying. Specifically you can’t compile libraries to link against other windows apps (like for Python & Haskell libraries) and the path wrangling & soft links break in any native app. It’s only nice if you don’t leave it’s confines.

So maybe a better analogy would be that cygwin is like having a really nice loft in a bad neighborhood.

In contrast MinGW seems more interested in making Windows habitable. Maybe it’s like bike paths & community gardens?

Anyone have any experience with MinGW? I think all I really need is the GCC tools, ssh and bash.

PS: and yes I’ve thought about VMware, etc. But I have to release under Windows anyway, so there’s no point having to maintain two environments. I do have an Ubuntu laptop but I never end up using it.

2009-10-13 / 12:30 /

…in which all I want to do is read and write some goddamn ID3 tags.

I’ve said I want to learn Haskell but I’ve also talked about the pains of learning new programming environments (and given an example from Forth). So when I wanted to rename some mp3 files based on ID3 tags I thought “that’s a great excuse to use Haskell! What could possibly go wrong?” So I simply…

  • install the Haskell Platform
  • check Hackage for ID3 libraries
  • cabal install taglib. FAIL: requires taglib_c C library
  • download the Windows MSVC binary and copy to correct dirs under c:\cygwin\usr\local\
  • update environmental variables according to the Cabal help pages. FAIL: still can’t find package
  • use cabal install --verbose=3 taglib to find out it’s failing calling pkg-config
  • remove MSVC binary of taglib_c
  • try building taglib_c from SVN tip. FAIL: no configure
  • try IDiii: cabal install idiii. FAIL: error installing encoding-0.6.2 dependency
  • back to TagLib: download tarball & install. Success.
  • add PKG_CONFIG_PATH='c:\cygwin\usr\local\lib\pkgconfig' to environment
  • cabal install taglib. FAIL: the .pc files for taglib contain cygwin style paths
  • rebuild taglib_c with --PREFIX=c:/cygwin/usr/local. Success: installed in same directory but with Windows style paths in the .pc files
  • cabal install taglib. Success!
  • run TagLib’s included test code (nice touch, btw). FAIL: can’t find DLL
  • try renaming DLL’s & rerunning test. FAIL: finds DLL’s, can’t link. Suspect this is because GHC is built with MinGW
  • uninstall source-built taglib
  • install taglib’s MinGW binaries, including copying & modifying source built .pc files
  • cabal install --verbose=3 --reinstall taglib
  • re-run test code. FAIL: can’t link because of duplicate symbols in bytestring. WTF?
  • test in ghci. FAIL: can’t find DLL
  • rename DLL’s… FAIL: can’t link to DLL
  • uninstall MinGW taglib
  • try MSVC taglib once more for fun. FAIL: can’t find/link to DLL’s

So I’ve got no ID3 library a broken GHC installation. Next stop: mailing list. But first…

Let’s try that in Python

I wish I could say it was sooo much easier in Python, because that would mean I was done. Instead…

A few dozen lines of code and a few Unicode issues later and I am automatically renaming files based on ID3 tag.

Unfortunately the next step is automatically tagging files based on filename and id3reader doesn’t write tags. This is why people write their own libraries.

So what’s the point

Nothing really. I just wanted to complain. Also people often ask me what it’s like to be a programmer. Sometimes, this is it. My advice: stay in business school.

2009-10-10 / 14:35 /

Via Open Congress:

I can’t second guess the Nobel, but I will say this: we never expect a conservative Republican to be chosen. For instance, when Ronald Reagan helped to bring about the end of the Cold War and he was ignored by the Nobel Committee. I mean, to me, we’re just used to having the Nobel people picking Democrats or liberals to honor in this way.

Sen. Orrin Hatch [R, UT]

2009-10-10 / 12:46 /

I planned on doing a nice travel journal about my experience sailing the Delmarva loop with Captain Habib & crew, but instead I’m just going to dump a bunch of pictures and link to a youtube video.

Here’s a quick summary:

  • Habib has a 36′ sail boat
  • Crew of 7+1: Habib, Joe, James, Lyanne, Eric, Kat, Me + Susan on shore support
  • Sailed Chesapeake south to the Atlantic, cut north up to Delaware bay, took canal back to Chesapeake
  • 4.5 days?
  • Night sailing is fun
  • Those anti-sea-sickness patches you put behind your ears work really well
  • Cleaning up a head mess is not fun (according to Habib)
  • Saw dolphins from far away
  • Saw rays from far away
  • Saw a whale from a meter away
  • Ate well on the boat courtesy of Kat & Eric
  • Celebratory sushi afterwards
  • Bus back to Pittsburgh

The summary: it was awesome. Everyone should do it.

Here’s some of my photos (the full set is on flickr):

Here’s an awesome video that Eric & Kat made about our whale encounter: Delmarva Whale [Youtube]

My best story comes from after I was back. I got off the greyhound in Pittsburgh at 3am. At 5am I woke up and thought I had fallen asleep on watch. I looked at the white wall and panicked thinking I couldn’t see around the jib sail. I stumbled down the steps to the “head” and only while peeing in a regular toilet did I realize I was not on a boat.

2009-09-27 / 20:56 /

Last night at 6:45 pm I was at Finnegan’s Wake for Heather’s birthday. Then we watched the Pirates lose 8-4 and Foreigner careen through a mediocre set. I got home around 11 pm and made some late night pasta in preparation for The Great Race.

I was asleep by midnight.

At about 1:45 pm I got to hear an argument outside. I didn’t catch the details, but Allie was mad at Pam because Pam wanted to call Dominick to get a ride. But according to Allie he just wants to fuck her and isn’t even taking care of their 6 year old. Allie said that If Jamie ever did that to her she wouldn’t stand for it. Pam just wanted to know where her phone was. She was also mad because Allie wasn’t listening to her. I think they both made reasonable arguments, I just wish they had made them quieter, or somewhere else.

For the record, Allie stated several times that she wasn’t drunk.

At 6:30 am I woke to my alarm and the sound of rain.

I had planned to eat eggs but realized that might be a bad running breakfast since running is so much harder on your stomach than biking. Some googling turned up recommendations to stick to simple carbs. To reinforce the point, the search also turned up information on Running Trots. I’ve heard of people pulling over in the woods during cross-country meets but didn’t know it was common enough to merit a name. Scared potentially shitless, I ate a little left over cold pasta and the Snickers nutrition bar (really, I couldn’t make that up) that came with my registration packet.

After pinning my # & attaching my timing chip, I got on my rain bike and headed downtown to catch the bus.

The line started at 3rd & Stanwix and wrapped up past the PPG fountain. It was a wet chilly wait for the bus, a comfortably heated bus ride, then a chillier wait at the start. To be fair, some of the chills at the start was probably pre-race jitters.

At the start I ran into Will, who worked a checkpoint with Louisa during the Pittsburgh-Roubaix and his friend Carolyn(?) who I met once at a Bike Pittsburgh fundraiser. She was an actual runner and looked the part. Will was wearing a stained white cotton T-shirt, guerrilla style.

While listening to droning opening ceremonies I looked around and saw Neil, partner to Boca Chica and big cheese at my CSA waving at me. I waved back.

We waited in the rain another 10 minutes while someone said something unintelligible over a megaphone. The racers would occasionally boo or shout “start the race”–a much clearer message. Eventually there was a gun shot and we all shuffled forward to the timing pad and then started running.

Like any large amateaur sporting event, the first 10 minutes was a cluster of almost running over slower people. Then it thinned out a bit and I settled into a rhythm.

My splits were around 7 minutes/mile, faster than my normal pace but I figured it was sustainable given that the course was mostly downhill.

One of the slight uphills was on Boulevard of the Allies right before town. I started to feel a little bad but grabbed some water and was fine.

Then it was mile 6 and we were turning the corner into Point State Park. In true “I actually used to be a sprinter” fashion I sped up for the last 200 feet, shaving at least .1 seconds.

I came in with a wall clock time of a little less than 42 minutes. They’ve since posted the results: my chip time is 40:56, which I’m pretty happy with. My “I’ll be disappointed if I run slower than this” was 50 minutes (5 min/km), my realistic goal was 42-45 minutes and my dream time was under 40. 40:56 is 6:35.4 splits. It puts me 256/6961 overall, 238/3860 males and 32/503 for my gender & age division.

For comparison the fastest male was 30:35, the fastest female was 35:59.

After drinking ice water and eating two orange slices & a banana I walked to my bike and rode back to the southside. I ran into Jonah outside of Yo Rita (his employer) then went back to my apartment (which is a convienent 50 feet from Yo Rita).

I changed into dry clothes and finished my left over pasta & both of the recovery drinks from the registration packet. Then shower and finally a slice of Pizza Sola before a half an hour nap.

Then I woke up and pooped. Twice. But at least it wasn’t while running.

2009-09-27 / 11:26 /

According to Google Analytics, at least 1 pervert with poor spelling.

2009-09-23 / 12:08 /

4 and a half months later, the thrilling conclusion.

2008-09-25 (Thursday) – 2008-09-27 (Saturday)

Oh right, I came here for a reason. Both DEFUN & CUFP were good. The functional community seems really nice (and smart). Basically everything else I said a year ago.

Then on the walk back I saw the Pandora draw bridge in action. Score!

Drawbridge in action (Pandora Ave)

2008-09-28 (Sunday)

Then I flew home. The End

2009-08-17 / 10:40 /

At one of the volunteer meetings for podcamp marketing guy Mike Munz said something to the effect of “all blogs are really about marketing.”

I disagreed, and have proved such by forgetting to advertise the mountain bike event I just got finished running. Anyway, if you go back in time, check out A Balmy Heaven 2009:

A Balmy Heaven 2009 flyer

And next Sunday I hope you all make it out to The Pittsburgh Roubaix 2009:

Pittsburgh Roubaix 2009 flyer

2009-08-07 / 16:05 /

(A comment gone long, I decided to turn this into its own post)

The reality, though, is that we all do polyglot programming all the time. We use command line scripting languages to simplify our lives, and build languages to manage repetitious build processes. In the sphere of web development, we’re regularly working with regular expressions, JavaScript, and declarative languages like XML, CSS, and SQL (or its derivative, HQL). It’s exceedingly common to see jobs looking for developers who can write both an ActionScript front-end and a JVM back-end (Grails, Roo, whatever). I worked at a shop where we used perl for file processing and fed those into a database, just to be consumed by Java batch process. One gig had service calls from Java to .NET in order to interoperate with Microsoft Office products. In none of these cases did the architects sit around and go, “Oh, man, we can’t implement that solution: people are just too stupid to handle it.”

Robert Fischer, We Aren’t Too Stupid for Polyglot Programming

I think Robert’s absolutely right in that we use many languages all the time, the questions are 1) why and 2) is it the right thing to do.

In my experience, polyglotism falls into a few patterns:

  1. Low level + scripting language driver (C + Lua)
  2. Frontend + Backend (Web)
  3. Core product + automation (Make, perl)
  4. Well establish DSL + general language (SQL, regexps)

In all cases polyglotism provides some obvious benefit. For the first two, that benefit is that it allows the project to work. If Lua were fast enough and Ruby ran in the browser… For #3: mixed language automation is an artifact of low-level languages. Make is a good build tool for C but Ruby’s build tool is Ruby (Rake). Given a change in technology and the right language, these could all be monoglot.

In the last case the DSL’s are chosen for convienence: SQL is better than hand B-tree manipulation and regexps better than FSA‘s.

Using multiple languages isn’t without cost. An obvious one is that learning languages is hard. Most developers know SQL but how many are good at tuning queries? Knowing a language also isn’t the same as fluency. Until you’re fluent in both languages, you’re likely to favor one. See the object/relational–not to mention FP/OOP–divide for examples.

There’s also the technical costs in translating data. XML, Protocol Buffers, Thrift, etc. are all valid interchange formats, but they’re not free. Robert’s emphasis on JVM languages does ease this hurdle, since I believe all the JVM languages can pass objects.

Finally there’s the cost of tools & debugging. You now need tooling–compilers, debuggers, syntax-aware editors–for several languages. More languages can lead to more complexity. Making matters worse, error messages across language boundaries are often cryptic, even when both languages are on the JVM.

So should we all be polyglot? As a matter of personal improvement, I’m all for learning new languages & techniques. But in terms of actually writing good software quickly, it probably only applies if

  • There’s obvious, quick benefit
  • There’s a clear separation
  • None of the other costs are too high

Personally, I think the big efficiency gains are in monoglot solutions. In the web world, glot-supremicists–i.e. Lisp and Smalltalk–have come up with some interesting web frameworks. Polyglotism is a fallback when abstractions leak.

2009-08-07 / 12:55 /

Like many dilemmas, this one results from either/or thinking. A third alternative is to try both methods in parallel and just use whichever result arrives first.

Conal Elliott, Simply efficient functional reactivity [PDF]

Peter Van Roy’s excellent Programming Paradigms for Dummies: What Every Programmer Should Know [PDF] lead me to reread–or I suppose “read instead of just skim”–Conal Elliott’s 2008 FRP paper. It’s interesting, but a little too wrapped up in Haskell type insanity for me understand deeply. I did like the above quote though, it’s such a simple reminder that multicore is changing programming.

Speaking of changing programming, Optical information processing in
Bose–Einstein condensates [PDF]
is a great paper by Dr. Lene Vestergaard Hau. You may remember Dr. Hau from 1999 when she slowed light to 38 mph and from 2007 when she transformed light into matter and back again. Smart cookie, that one.

She’s got more papers on her lab web page.

2009-07-16 / 17:47 /

Casey's newly green-ified IRO

Casey's clown mountain bike deluxe

Clearly, the white balance is different.

2009-06-12 / 11:17 /

Luckily I have until November to train.

Thanks to Jack for the tip.

2009-06-11 / 21:34 /

Cervelo, I finally own you

Cervelo S1, side view

It’s no exaggeration to say I’ve wanted a Cervelo for at least 4 years. I’m not sure if it was seeings Jens Voigt riding one or reading about their history but at some point I decided it was all I wanted in a bike: a sexy pro-level frame designed by geeky Canadians. Thanks to the upped 5k limit on IRA contributions, my tax return almost covered the cost of the S1 frameset.

I had Rob at Thick chase & face the bottom bracket and did the rest of the assembly myself. The internal cable routing was not nearly as dreadful as I thought, thanks in part to engineering.

The 3T Funda Pro fork comes with an insert you epoxy into the top of the fork instead of a compression plug. But seeing as how epoxy is forever and I am uncertain, I shelled out the $25 for an FSA compression plug and have a nice stack of spacers above my stem. Someday.

The Cervelo got it’s first ride longer than a mile in the MS-150. In short: it was amazing.

The first thing I noticed was the ridiculously short wheelbase, more specifically the 2.5″ of toe overlap. I noticed this almost falling over as I slow pedaled across the parking lot to get to the start. But once I started moving the handling improved; at speed it’s wonderful. It tracks great through corners which gave me confidence descending.

Cervlo S1, head onI’m not heavy enough to really test the stiffness but it definitely didn’t feel flexy. I could make the chain rub the front derailleur while standing and climbing, so there’s evidence of flexing and/or my excessively tight tolerances for the limit screws.

Similarly the frame (& especially <400 g fork) feel light, but the rest of the components aren't chosen for weight: Ultegra 9 + Dura Ace STI's, 32 spoke wheels, Dimension/Ritchey cockpit. I weighed the complete bike and it was around 18 pounds.

Cervelo's emphasis is on aerodynamics. I don't have much to compare, but in the rare cases where I was descending beside people I found I could pass them without pedaling. That can't be bad, right?

After coming home and riding around on my steel track bike, I can say the geometry or carbon seatpost on the Cervelo soaks up large bumps well. On the other hand lots of the MS-150 course was over chip & seal roads and the chatter was tiring. I'm not sure how much of that is because of the frame and how much is because chip & seal sucks, especially when you weigh less than 140 lbs.

You’ve filled out in front, Kristen

Kristen gets a big front wheel

That’s not an optical illusion: the front wheel is bigger than the rear. Turns out that Redline 29″ disc wheels are only $80 so I went ahead and tried out this whole 69er thing.

Prognosis: eh…

I test rode it through Schenley & Frick and liked the handling (once I got used to it). But then I rode it at Bavington and strained through the winding sections: the bike just didn’t want to turn. It seems easier to go up and over stuff but some of that is due to the change in position: the taller wheel rotates my weight backwards.

Since she’s in North Carolina for a month, I borrowed Casey’s 26″ wheels. That will let me quickly switch between 29″ and 26″ wheels to get a better comparison. I’ll probably also end up with a 10 degree stem to see how that affects my position & handling.

2009-06-09 / 18:00 /

EDIT: if you’re thinking “oh no, I missed my chance to donate!” fear not: donations are open until July 17th. See the original post begging for donations.

Another year down.

Saturday was pretty uneventful. I caught a ride up with Kimberly and we got there early enough that I could get out with the first batch of riders. After pushing through the first weed-out hill I settled into a nice solo pace. I skipped lunch and stopped only at the last rest stop to pee & refill my water bottles (though not at the same time). Somewhere around 5 miles out I was caught by a group of about 5 riders, including two UPMC guys who I see every year (mostly passing me).

I rolled into Edinboro around noon and ate some recovery food and laid around. Finally I got around to setting up my tent and taking a shower. That’s when I found out what I forgot: soap. So I got a handful of soap from the dispensers by the sinks and ran into the shower. Truly classy.

While reading under a tree in front of my tent another camper came and asked if he could share some shade. His name was Greg and it was his first year riding. Going to get some more snacks I ran into Jim (team captain, who snapped a picture) and Kimberly and Jim (not team captain). Kim & Jim got their stuff and met me by my tent to set up their own camps. Jim had a dorm room but had also brought his ultralight camping hammock. He strung it between inverted soccer goal posts and hung out talking. In the meantime Shane–old college buddy & hiking trip planning extraordinare–showed up and pitched his tent in our circle. In conversation it turns out that the Rachel Carson Challenge is already full! Between that, the Pittsburgh Marathon and the Megatransect it seems like this will be a year of near misses.

Dinner was better than past years, with a slightly better array of cafeteria food.

After dinner we met up with Shane again to catch the shuttle to downtown Edinboro. We had some time to kill before the Pens game, so we got some ice cream at Dairy Supreme. Mint malted = awesome.

Next we hit the Edinboro Hotel for a pitcher of Yuengling and some pre-game coverage. But the bar was a little crowded so we ended up at Boro Bar. Boro had a dark wood-paneled interior, Killian’s red, and camp-buddy Greg. Turns out Greg had been there since a little after 6 waiting for the game to start.

The game started well but when it got to 3-0 we decided to head back to campus.

I fell asleep immediately.

Sunday’s breakfast was similarly better than previous years. I was particularly proud of the oatmeal/Cinnamon Toast Crunch suicide.

The team picture was another pleasant success. Not only was I early, but everyone else was on time too. We were done by 7:17.

Then I pushed my way to the front of the pack to avoid getting stuck in the crowd. I promptly almost missed the first right hand turn then hit the road. Again I tried to ride solo but spent some time riding with a rider in a Papa John’s jersey who knew Nathan and Andrew from Vocollect. After yo-yoing in and out of some small groups, I solo’ed past lunch and followed signs. Soon I was on a road that seemed suspiciously busy and poorly marked. I thought I was saved when I saw someone ahead directing bikes, except that the bikers were coming from the other direction. I followed them and ended up at the 2nd rest-stop. Somehow I had gone backwards 15-20 miles. Oops.

At the rest stop I saw Kimberly and Jim (not team leader). After eating and talking to Rob–Thick Bikes SAG van driver–I rode with Kimbely and Jim to lunch, where it started to rain. There I ate a turkey sandwich with lots of other Team Vocollect riders before heading out solo. On the road Jim (not team leader) passed me. I thought about trying to grab his wheel, but was feeling the extra miles and decided to go alone. Further on I saw an Alcoa jersey on the side of the road and slowed, thinking it might be Jim. Turns out it was someone who looked not at all like Jim, but who did need help. I tried but he needed a schrader-valve compatible pump.

The ride continued into the outskirts of Conneaut where I ran into a guy whose chain had exploded. I stopped and used my chain tool to help him. Twice, unfortunately, since I didn’t realize that he hadn’t routed the chain the first time. Apparently he didn’t do much bike maintenance since the chain was also covered with a 1/8″ layer of black grease which quickly transferred to my hands, jersey, bibs & bartape. Yay.

A few more miles and I was at the lake. Pictures (once again I promptly saw team leader Jim), pizza, etc. etc. I changed clothes and waited a few minutes for Kimberly. We headed up the final hill to load the bikes on the truck and get on the bus back to Moraine.

The bus beat the truck by half an hour, so we waited by the lake. We finally got them loaded on the bike rack and headed back to Pittsburgh. We were both starving and were planning on getting some Kassab’s until we got out of the car and saw they were closed. Kimberly took a shower while I did some research. Turns out Gypsy was open on Sunday so we headed in for some prix fixe. Decent.

Finally Kimberly went to her friend’s chakra dance birthday party while I started to unpack.

I woke up on the sofa around 1 am. I hadn’t yet showered. Gross.