Building a new bicycle one piece at a time
This week’s biking report: I broke a damn pedal. I didn’t even know that was possible.
This week’s biking report: I broke a damn pedal. I didn’t even know that was possible.
Yesterday, while trying to figure out what my parents could have possibly been sending from Port Allen, I realized that Community Coffee, in Baton Rogue, is in the same parish. I saw this as more an interesting bit of trivia than a possible source of stuff. I’ve seen Community Coffee around before, but I usually think of coffee and chicory blends when I think of coffee from Louisiana, a product that I’ve tackled in the past with mixed feelings. Community Coffee in particular I tend to associate with restaurants, since I’m pretty sure I’ve seen it in places like Atlanta Bread Company that want to be a little like a coffee shop.
Here’s a bit from an IRC conversation last night:
23:20 < gopherdave> let’s see.. West Baton Rouge parish appears to be the home of community coffee, but I don’t think they’d get that, since both of us can pick that up at Publix
Landry’s Guns and International Piping didn’t seem like likely sources, either, so I just went about my Friday, stewing in the mystery. What I did not expect was 8 bags of various Community Coffee blends. To add to the irony, I somehow still managed to fail in not buying what they were sending in that short week: one of the coffees is from Hacienda La Minita, a pound of which I ordered from Martinez, also arriving today. Oops. The Community Coffee box included a a leaflet on the coffee-of-the-month included, a batch from the Toledo and Labateca, Columbia, so I’ll probably try that one first. This is kind of overwhelming. I don’t even know where to put all this coffee.
Thanks, mom and dad. I’ll be enjoying this for a while. Or at least a few weeks.
Midsummer’s eve is upon us, so I guess it’s my birthday now. Moshe warned me of the superstitious dangers of wishing one a Happy Birthday early after wishing me one yesterday, but he lives in the future, so I guess it’s ok.
My parents told me that they were sending something, so, of course, that’s been bugging me for the whole week. I has assumed that they would time the package as they would for my sister, about a week farther along the mail route, and I debated whether or not I’d open it when it arrived or wait until today. However, they instead shipped UPS, and the timing was meticulous. I saw an envelope in the mail today, my mother’s careful Palmer script clear even in the dark of the mailbox, but this was just a decoy card. The real goods left their evidence in the form of a UPS InfoNotice, and, according to the tracking information, it’s being shipped from Port Arthur, LA. I don’t know of anything in Port Arthur, so the only assumption I can make is that my present is actually being smuggled in from Cuba, as many convertible pesos spent on well-placed bribes as on the package itself, and Port Arthur is being used instead of Miami to confuse customs. I honestly don’t know what it is, and with my luck I won’t be able to pick it up until Monday. Thanks, Mom and Dad, whatever it is.
I really don’t have good luck with tires.
Today I changed my weekend riding plan to bike around where I live. Besides saving the gas I would have spent driving up to Alpharetta, local biking is more relevant to what I’d like to be able to do. The Big Creek Greenway, though nice for a quick 12 mile ride, is built through swamplands, so it’s all pretty flat. The rest of Atlanta, on the other hand, is built on a hill (I guess Piedmont really means it) and has cars that I need to dodge, so riding on roads is a much different experience. I figured that today I could go get lunch at a place on Hammond, using untrafficed side roads to stop every couple of minutes to catch my breath, but my plan was cut short by a blowout. At first I thought that the noise was a firecracker, or maybe a gunshot, but before I could book it away from those punk kids playing at Allen Park, I noticed that I seemed to be slowing down in a hurry, and it turned out that my rear tire was no longer inflated. Somehow that tube that I bought a couple weeks ago had blown out, continuing the tradition I built with my car of destroying the same tire multiple times. This time the tube decided to take my tire’s sidewall down with it, so, besides the half-mile walk back home dragging a crippled bike, I had an extra $25 expense to look forward to.
The bike shop on Belle Isle didn’t have any tires in my size (700×35C), the nearest being one 38mm wide. There was an awkward pause after learning this information as the guy at the bike shop waited for my response and I waited for his advice, but I eventually ended up with this wider tire installed, which apparently became the standard for hybrid bikes between now and the time the bike was purchased. I went ahead and paid the extra $6 to save 15 minutes of work—I’m not sure if a quarter hour of weekend time is worth six dollars and five minutes of waiting, but the last time I installed a tube myself it freaking blew out in two weeks,—and, while I was spending money, I went ahead and bought a patch kit and some brushes so that I’m no longer tempted to clean my bike with the same brush I use on dishes. I ended up spending about $70 today on bike stuff, so I don’t think I’m ever going to save money on this MARTA idea.
All this tire stuff also reminds me that I still need to get an oil change for my car. My tire treads (on the three that weren’t replaced twice already) were down to 4/32? the last time, so I can’t wait to be told about that new big pile of money I ought to spend. Transportation is overrated.
One of the issues I’ve run into with writing Firefox extensions is that now, since I hold the keys to their arcana, I want to fix the problems in other people’s extensions. Adblock leaks memory and sullies my javascript console with its strange warnings and errors, and I doubt that the guy who writes Toolbar Enhancements is ever going to make a new release for new firefoxes. I can create my forked version of extensions easily enough, but what do I do about the updateURL?
Firefox extensions contain a link to a source of update information. Extensions can be upgraded automatically, but even if automatic upgrades are turned off, the information associated with an extension concerning what versions of Firefox it supports create another reason to check the update information: the compatibility upgrade. Your profile and installed extensions outlive any particular installation of Firefox, so when you upgrade the browser, manually or automatically, it can create a version incompatibility. Since developers aren’t expected to know the future, it’s possible to change the minVersion and maxVersion properties in the update source without making a new release, so any users looking for a compatibility upgrade may learn that their copy already works and they can continue to happily plug along.
The problem this creates for me is whether to provide information only on my forked versions or whether to also inform upgrade-seekers about new upstream releases. Though there might be times when I don’t want my changes undone by a careless upgrade, it seems easier for me to just leave everything in the hands of the user, and for other cases, such as simple compatibility changes, I would want any newer upstream release to supersede my changes. That leaves me to try to figure out how to make two sources of information into one.
Like many lazy people out there, when faced with a task needing dynamic content on the Web, I turn to PHP. It’s a terrible language, but it’s easy to use and does ok at Web things, so half-assed is good enough. Firefox update sources are in RDF, a data-description model that’s been around since, I think, Netscape 4. RSS was born of attempts to summarize a site’s content in terms of RDF, and RDF had another brief surge of interest with Tim Berners-Lee’s Semantic Web idea before people figured out that Web 2.0 was a better name to use to trick investors, but none of that really matters. What’s important to me and my stupid problems is that the XML syntax for RDF allows too many ways to say the same thing for me to just drop in my augmentations to an update file through string processing or even an XML parser, so I’m going to need to actually parse the RDF.
RDF is one of those standards that’s really simple at its base—describe data using a set of triples: subject, predicate and object—but still manages to fill 227 pages of W3C recommendation and countless related drafts and member submissions. After briefly flirting with the idea of reinventing the wheel, I decided that this would be really dumb and started to look for other people’s code to misappropriate. rdfapi is the first google hit for “rdf php,” but it blows. I neither want to try to fix its code nor to fill up my hard drive with its logged warnings and errors. The first hit for “rdf library” is the Redland suite, a much more mature library written by a guy who works at Yahoo! and also happens to be the editor for the RDF/XML syntax recommendation. Redland seems like a better idea, and it comes with PHP bindings.
As I’ve mentioned before, PHP is a crappy language. I do not blame Mr. Beckett one bit for not wanting to code any PHP, instead taking the route of the rest of the PHP library by providing direct bindings to the C functions, but, since Redland has a pretty nice API to begin with, written in that bizarre style of halway object-oriented programming that only C can pull off, it becomes rather obvious on the PHP side that I’m using bindings into a language that expects me to manage my own memory. To alleviate this, I created a PEAR package (are they called packages? modules? extensions?) to provide things like garbage collection, exceptions and all that fancy stuff. As long as you have both the Redland PHP bindings and SPL (comes with PHP), you can use pear install http://gophernet.org/projects/librdf-php/LibRDF-1.0.0.tgz and it’ll dump it wherever PHP extmodackages are stored. On this journey through the fancier aspects of a bad language, I found an attempt to do what javadoc does, so I wrote big, redundant comments for everything and created some files. I also have a demonstration (source) of adding a fictional new version, 1.1.1.0ds1, of rmannoy to the existing update.rdf. You may notice that I replaced all of the list items in the main sequence with “li” predicates; librdf serializes sequences back out using the actual value of the predicate, _1, _2 and so forth, and the firefox RDF parser doesn’t dig this. The Netscape RDF parser has been around longer than the standard, so I don’t care enough to try to point fingers and find out who’s more right. Anyhow, if you ever need to manipulate RDF in PHP, I hope this helps.
Sandy Springs is trying to be a real city. The police department will take over on July 1st, which will almost certainly mean a return to police on 400 that care about speeding. I can hardly wait.
The weather’s been pretty nice the past few days, so I finally got around to replacing the rear tube on my bike, which has had a leak next to the valve stem since December. I’ve been thinking lately about switching to MARTA to get to work. Sure, I work outside of rail range, but I think that I could to work in a reasonable amount of time, especially now that buses can drive on the shoulder on 400 when traffic is slow. I might try driving to Medical Center to prevent me from dying, but once there I can take the train to North Springs (arrives every four minutes or so when everything’s working, 5 minutes to North Springs), from there take route 140 to the Mansell Park & Ride (bus departs every 15 minutes, 12 minutes to Mansell), and I can bike the remaining mile or two. This can totally work. Using a gas price of $3/gallon and 27 mi/gallon (probably low, since most of my drive is highway), I’ll only be saving about a buck a month, but I’ll hopefully get in better shape. Monthly passes are tied to a particular month instead of being valid for any 30 days, so I’ll take a shot at this at the beginning of next month, just in time to avoid the Sandy Springs speed traps.
dcantrell wrote a little while ago about Trader Joe’s and the politics of getting non-standard foods. I agree with his frustration, since I occasionally want to eat something goofy, but Trader Joe’s and Whole Foods don’t sell the non-goofy foods that I also want. However, I think that Publix could be the answer for such a store. They can get you Ostrich and Emu if you ask nicely, and they have all the organic hippie food that you’d expect, but what always set Publix apart from other stores in my mind is that, except for a couple of shelves with things like all-natural Cheetos and vegan Mac&Cheese, there is no hippie section: all the organic food is next to the normal food. Their Greenwise brand has done a lot to get me to buy hippie version of some foods. Since it’s a store brand, the prices usually come out to about the same or lower than the brand-name items adjacent.
One thing in particular I noticed on my last trip to Publix was Greenwise milk. Apparently Publix has started selling milk from cows that have not been treated with recombinant bovine somatotropin. I know from Ben & Jerry that those bovine growth hormones are bad news, but it’s a harder sell than kidney beans. Since no one cares if their milk jugs are yellow, the regular Publix brand milk is the big seller, and the extra 50¢ per half-gallon seems like a lot when it’s right there for easy comparison. Interestingly, the Greenwise milk does come in an opaque container.