Introducing Louie31 October 2011
Say hello to Louie, the pooch Melissa and I adopted from a local canine rescue. Louie's a energetic little guy who's been through a lot. From what we know, he appears to be part beagle, part
Artwork by Sergio26 October 2011
Melissa surprised me for my birthday with a commissioned painting of my family's dear pet bird Gordie (previously).
The talented artist responsible for this is our friend Sergio Quiñones, who has an Etsy shop full of his original work. His attention to detail and ability to conjure emotion and character in his paintings is masterful.
Sergio is also a big fan of Rufus, and surprised Melissa and I with this painting of the little guy.

[scene]16 September 2011
Today is my last day with IBM Interactive. After six years, I'm moving on. Working for IBM has been a tremendous experience. Fresh out of college in 2005, I had little idea what I was signing up for. My first task was rather menial: packing the office for its move across town. Immediately after that, Katrina hit and I was tasked with building a quick-and-dirty job search engine to help displaced workers. It was that project that revealed to me the scope and reach of IBM's influence. No longer was I hacking on dorm room projects; now I was building sites that ended up featured on cable news broadcasts. In the years that followed, I had the great fortune and privilege to work on a variety of projects supported by IBM's corporate citizenship group: designing and building the platform that powers the SME Toolkit, a partnership with the International Finance Group and the World Bank; rebuilding the online presence of the State Hermitage Museum in St. Petersburg, Russia; and building tools for American Corporate Partners to help our nation's veterans. By far the most exciting experience I had at IBM was the Corporate Service Corps, a 4 week leadership development program in Arusha, Tanzania. Paired with 7 other IBMers, we assisted local NGO and a college with various projects. This was unlike anything I have done: no programming, no Internet. Every day was a new challenge, a new surprise, and we did our best to help our partners with whatever they could throw at us. What's next? I'm joining the Obama for America re-election campaign. It'll be fun.Goodbye, Rufus.22 August 2011
Rufus lost his battle with lymphoma this morning. Words cannot begin to express how much Melissa and I miss him now.
To everyone that was a friend of Rufus, everyone who watched him for a weekend, let him lick your face, or found all 60 pounds of him suddenly sitting in your lap, thank you for helping give him a wonderful life.
Goodbye, little guy. We miss you, we love you.
More.
Iberian Adventure06 March 2011
[caption id="" align="aligncenter" width="640" caption="Mediterranean"]
[/caption]
Melissa and I recently returned from a 9 day jaunt through Spain, with stops in Barcelona, Seville, and Tarragona.
[caption id="" align="aligncenter" width="640" caption="Jamón"]
[/caption]
[caption id="" align="aligncenter" width="640" caption="Stone wall, Barcelona"]
[/caption]
[caption id="" align="aligncenter" width="640" caption="Grape vines, Penedès"]
[/caption]
[caption id="" align="aligncenter" width="640" caption="Cathedral, Seville"]
[/caption]
[caption id="" align="aligncenter" width="425" caption="Contemplating Calçots"]
[/caption]
[caption id="" align="aligncenter" width="425" caption="Altar at Sagrada Familia"]
[/caption]
[caption id="" align="aligncenter" width="640" caption="Barcelona from the air"]
[/caption]
See all photos here.
Errant Paw09 February 2011
While helping Melissa shoot some photos for her Etsy shop, this happy accident occurred. Silly art directors, always getting in the way of things.
Gridded12 January 2011
Action shot of Juan's wonderful entry to the 2010 DIY Gift Exchange. This handmade graph paper notebook is the shizz. His nascent blog ain't too bad, either. Check it out.
Dee Eye Why30 December 2010
Stuff. Lots and lots of stuff. Since Melissa and I started living together, we've struggled to merge our respective collections of stuff, those little trinkets and knick-knacks that seemed so cool at first, but then just sit on a little shelf or cupboard and collect dust. We've done an all right job so far, but there's always more to be done. One day, while studiously avoiding real work clicking through Apartment Therapy, I ran across a neat post on a blog called the Brick House. It detailed their DIY shelving unit project, and I was hooked. In our apartment there was a very large, very empty wall.
And now it is no longer empty:
A few trips to Home Depot, a lot of 1/2" pipes, fittings, wood stain, and spray paint later we had a nice set of shelves on the wall. It's rock solid and hasn't fallen down, yet. That is my humble measure of success.
It was immensely fun for me to work on this project. I tweeted while in-progress that there's something really enjoyable about building an actual physical structure. I spend so many hours every day tapping away at a keyboard building digital things that getting covered in pipe grease and stinking of paint thinner and sawdust is a welcome respite.
Santa was nice to me this Christmas and brought a new set of power tools. I haven't the faintest idea what I'll do with a reciprocating saw living in a rental, but I'll be pleasantly surprised when I finally figure it out.
But most importantly, now there's a new home for all of our stuff.
Phaseone December Mix29 December 2010
Been listening to this mix a lot over the past month. My distaste for Björk is endless, but the remix he uses here works really, really well. Damn! Phaseone - Dec 2010 Mix by PHASEONEPlease just $3 more17 October 2010
Seven years ago Mogos and I took a long trip through Virginia and the surrounding environs. As we slowly inched north, we spent a night in a nondescript campground in Kentucky (painfully) named Twin Knobs. We pulled in late at night, and desperate for a place to crash, picked the first empty site we found, shoved some money in the donation box, and passed out. We woke the next morning to find, much to our delight, that we were married that night.
Swoon.
Са́нкт-Петербу́рг30 September 2010
Last year, in September of 2009, I traveled to Saint Petersburg, Russia to work with the fine folks at the State Hermitage Museum. I had the good fortune to spend 8 days in Petersburg. While not cooped up in a conference room in the museum, I spent my free time exploring the city. Here are some of my favorite pictures from the trip. You can see the whole set over at Flickr.
Handling Nested CDATA With Builder21 September 2010
As noted by our associates at Atomic Object, XML doesn't allow for nested<![CDATA[…]]> elements. In the course of rewriting some pieces of code, I developed the following Builder workaround to allow our application to export valid XML by breaking the nested CDATA elements into distinct chunks. When read back in via our Nokogiri-based parser, it concatenates the values automagically, and the end result is clean, valid XML. Fix code:module Builder
class XmlMarkup < XmlBase
def cdata_with_escaping!(text)
if text =~ /(\]\]>)/
text.gsub!(/(\]\]>)/, "]]>")
end
cdata_without_escaping!(text)
end
alias_method_chain 'cdata!', 'escaping'
end
end
Sample output:
>> xml = Builder::XmlMarkup.new(str)
>> xml.cdata!("> xml.target!
=> "" # valid XML!
>> xml.cdata_without_escaping!("Foo bar sna")
>> xml.target!
=> "" # invalid XML!
Sample parsing with Nokogiri:
>> doc = Nokogiri::XML("")
=> #]>]>
>> doc.css('baz').first.content
=> "Foo bar sna"
]]>
Tracking Drupal User Registrations by Date10 September 2010
Today I wanted to graph the number of registrations recorded by a Drupal site grouped by date. Drupal stores all account data in the users table. To identify accounts that are registered and verified, I queried with "login != 0" in my WHERE clause, e.g.SELECT COUNT(*) FROM user WHERE login != 0;
Since Drupal stores all dates as PHP-style Unix timestamps, e.g. 1284157128, I needed to convert those into a form that MySQL understands. I used from_unixtime() to convert the date to a MySQL date type. By casting, I was then able to use the column in a GROUP BY clause, yielding my result:
SELECT COUNT(*), DATE(FROM_UNIXTIME(created)) as created_date
FROM users WHERE login != 0 GROUP BY created_date;
Which produced results just as I wanted them:
Blue State01 September 2010
Exchange while taking Rufus for a walk:Man on street: That's a great dog there, a boxer, right?
Me: Yep!
Man: Aw, good dogs aren't they?
Me: Yeah, he's pretty stupid but he does love life.
Man: Must be a Republican!
Zing!P4K Mobile Site15 July 2010
A few beers, boredom, and frustration with the lack of a mobile site for this weekend's Pitchfork Music Festival led me to hack up a quick mobile-friendly version of the schedule. It works for all iPhones and Android-based phones. If you save it to your iPhone home screen, you can use it offline (a bonus considering how over-taxed the AT&T network is during the festival).See the mobile-friendly schedule - http://d-struct.org/projects/p4k2k10/
Don't Be Afraid, Don't Be Afraid, Don't Be Afraid10 July 2010
While digging through some boxes full of old papers, I found this leaflet from a Godspeed You! Black Emperor show in Detroit, circa 2001.
The reverse side:
Is now for the first time Dalí born.14 June 2010
Senior year of high school my friends and I recreated this video for our final project in Spanish class. We weren't quite sure what was going on in the video then, and to this day I'm still not very certain. In our low-budget remake, we jumped out of a cardboard box and sprayed milk all over my parents' backyard. The neighbors, I can only imagine, were dumbfounded. I present to you, as a service to Google and befuddled viewers, a transcription of the video, unedited:Bonjour, Good Morning
Is now for the first time
Dalí born
with any kind of traumatism
A little blood,
symbolic blood
And milk,
again milk of today born
and some symbolic fish
of Mediterranean people
This is the blood of Gala ...
...and the blood of the Divine Dalí
[scene]
How not to impersonate utility workers12 June 2010
The scene went down recently here in Pilsen. [caption id="" align="aligncenter" width="500" caption="Wear silly vests and hard hats, and film it all on fancy DSLRs."]
[/caption]
[caption id="" align="aligncenter" width="332" caption="Have one person do all the work, and everyone else mill about and record the momentous event. Not suspicious at all."]
[/caption]
[caption id="" align="aligncenter" width="500" caption="Oh, no! The fuzz! How did they find us?"]
[/caption]
[caption id="" align="aligncenter" width="500" caption="Oh, man, our progressive culture jamming is SHUT DOWN by the police! "]
[/caption]
[caption id="" align="aligncenter" width="500" caption="Be certain, however, to record the heartbreaking takedown of the sign from multiple angles. This will play great on YouTube later."]
[/caption]
[caption id="" align="aligncenter" width="500" caption="The sign that could have changed the world: "Danger: You are 0.5 miles from the Fisk coal fired power plant.""]
[/caption]
Despite looking really silly trying to hang a fake sign, these folks do have a good cause. The Fisk Generating Station is a coal-fired power plant on Cermak Road, here in Pilsen. It's a relic of a bygone era of power generation, and is a public health nightmare. Community groups have been trying for the past decade to shut down Fisk, to almost no success. The 25th alderman, Danny Solis, doesn't appear to be championing the cause, and is in the pocket of Midwest Generation, the owners of the station.
The Chicago Reader has a number of good articles on the subject, including recent efforts by the Chicago Clean Power Coalition to push ordinances through Chicago City Council to regulate and shut down the plants.
- "Speaking of Clean Air" from December 2005.
- "The latest salvo in the fight to clean up Chicago's air" from July 2009.
- "Something in the air" from March 2003.
Scenes from a road trip28 May 2010
I accompanied Melissa and her sister on a short trip to Columbus, Ohio two weekends past. This was the view from the backseat.
More.