My Alabama Trip

This is being cross-posted to my other “blog”:

I have a total lack of motivation today. I really want to blame it on staying up until 2am to try and catch up on my rss feeds, but I don’t think I can.
I think this is more of an existential thing. I feel like I’m being slowly given the answer to a question I hadn’t asked yet. A few things are happening here and there that are making me reluctantly examine my environment, both external and internal.

Trouble getting out of bed, not getting to the gym, chicken gone bad… it’s been a rough morning. I am taking another “Taekwondo class”: tonight at my sister’s school. I’m really *REALLY* looking forward to it. It’s almost like coming home.

I also have quite a few projects up in the air at once, and I feel like I really want to address them all.

Don’t get me wrong. I am still 100% responsible for the direction and progress in my life. I’m just feeling pulled in directions I hadn’t considered. And those
directions are pretty much opposites from each other.

Now for my trip!
We left NJ around 10pm wednesday night in my “Mom’s new RV”:, after my first taekwondo class in JUST over 10 years (I left for SF on april 13th, 1996, and taught class the night before.) I had an awesome time, but was really really winded! Anyway, we drove straight through, taking shifts. We arrived in Moundville, AL, 20 miles from our destination of Greensboro, AL at 6pm thursday. And by “arrived”, I mean broke down completely on the side of the road. The locals were VERY, VERY nice, and spent about 3 hours looking at our RV, finally coming to the expert conclusion that it was the fuel pump. We called a tow truck and after another two hours of waiting, we were at the church that everyone on the “UBBT”: build was staying at. A 5:30am wake up call by Tom Callos got everyone on their way. While everyone went to start the first day of building, my Mom and I went to the local Ford dealership in Demopolis (about 20 mins away) to have the RV worked on. As soon as we got there, and got our information sorted, the shop foreman, Charles, informed us that we’d be joining him for lunch. Then, an hour later, he told us that his wife and mother were on their way, and we’d all go out to lunch together. We ended up at a local, authentic southern food joint (complete with sordid back story) for some chicken fingers, catfish, banana pudding, beans and other greasy, suprisingly tasty food. Then it was back to the VERY boring waiting area. Demopolis Ford vending machines If not for John’s PSP and my nintendo DS, I think we would have lost our minds.
As far as we knew, everything was going along great. Great that is, until 6pm when one of the guys came in holding a round, mangled piece of metal, informing us that nothing could be done, and we’d have to wait until monday.
So there we are, 20 miles from where we need to be, WITH our living area and most of the tools we brought, being told that not only could we not use our “house”, but we’d have to wait until MONDAY – when we HAD to leave by sunday afternoon in order to get home on time! Ug.
Somehow, they conjured up a miracle and were able to dis-mangle that piece and get it in place. After a few more close calls, the RV was done – at 8pm! When he came in to tell us that the RV was out front, waiting for us, a full 3 hours after they closed, on a friday night, we asked him how much the bill was.
“Have a nice trip”.
WHAT? are you kidding me? So after we MADE him take a tip (everyone we dealt with in the south abhorred the notion of getting a tip), we found a dumping station in Demopolis, and headed back to the church. We missed the first movie they showed that night, “King Gimp”:, produced by UBBT Team 2 and 3 member, “Nancy Walzog”:, but did get to see her new version of the Ultimate Black Belt Test Movie she made as part of her test last year. It’s awesome!

Saturday, another early wake up, and it was off to the work site. The first day for my mom and me, the second for the rest of the team.
Saturday on the build It was a LONG day, where my still painful scalp sun-burn started (I was only able to borrow a visor, and my hair is still really short). Lots of work got done, but there were too many people there for most of the day and not enough jobs. When the walls started going up, there was plenty to do for everyone. After working all day, we went back to the church to eat (more catfish, hushpuppies and beans), then watch a demo by some of the UBBT folks. Jim (my brother-in-law) wanted to find some crawfish to eat, so a big group headed out while I went to bed.

Sunday was an awesome build day. It was really rewarding. My sister and I built two sets of stairs, stringers and all. We had to leave early, 3pm, in order to get back in time for me to work tuesday and my sister to teach monday night. So after a group photo we headed out.

I had a really great time. I’m making something related to the trip to share with everyone who participated. But that is one of those projects I was talking about earlier.

The Build Team

My first AIMPages Module (

[ This post has been updated -- see below ]

The first thing to note is that AIMPages is VERY beta. Most of the docs were written by the main developer (“Kevin Lawver”:

The next thing is: their heart is in the right place. I am NOT going to pontificate on the future of AIMPages, they have a lot of weight behind them, they’re doing some good stuff, but they are a late-commer to the space. They also have the stigma of being “AOL” to overcome. We’ll see how it shakes out.

But, building a module for them was a cool learning experience.

h3. The Good

The approach they’re taking is to have a module be a directory of a main “manifest” file (index.html), with asset files also in that directory or levels below that (images, javascripts etc). Here’s where it gets interesting: the manifest has to be VALID xhtml! Cool concept. The manifest (and linked stylesheets and scripts) get folded INTO the person’s AIMPage. It’s almost like a mixin in ruby. This presents some interesting challanges – espically since it’s possible to have multiple copys of your module in one page. Therefore no “id”s on elements (except your main “module” one). Everything is accessed by class name.

They also give you access to the “Dojo”: toolkit for javascript goodness.

h3. The Bad

The code, test, deploy cycle seems a bit broken to me. I had TextMate open with my files, I’d make changes, apple-tab to terminal, hit up-enter to rezip the archive, apple-tab(2x) to mozilla, hit back-back to get to the upload form, scroll down a page with a disclaimer that I had to agree to every time (WHY more then once?!?), then find my archive, then hit “save” (I think ‘upload’ makes more sense in this context, but that’s just nitpicking).
In looking through some other code I found (the flickr module by “Ian Costello” – any relation to Eric Costello from flickr?), I noticed something about “local testing” which looked like it had hurdles of its own. All in all, I think that testing needs to be made much easier.

h3. The Ugly

*Documentation* This is under “The Ugly”, b/c I’m fully expecting it will be worked on. As it stands now, there are 3 or 4 example modules on the developer site, each which does something different (different versions of the microformat maybe?). There was no real documentation for dojo or their dojo extensions.

*Testing* As I stated above, the testing cycle is strange and cumbersome. By making modules xhtml and javascript (ala Widgets for Konfabulator and Os X), you’re going to attract developers who want quick results. If those developers have to jump through too many hoops, you lose them. Thats why I never wrote too many firefox extensions – too much work to test and change them.

From one of their VPs:

We’re starting off with a pretty quiet beta, but will start promoting heavily to AIM and AOL users in about a month or so.

I’ll write up how I actually WROTE the thing in another post for now, here is a zip file of the module if you want to look at it:
“Spell with Flickr AIMPages module”:

Oh, and a tip for now – dojo.html.getElementsByClass() is your friend.

[ Update at 6:47 pm ]
Both the Kerry (VP) and Kevin emailed me RIGHT after I sent them this blog post.
From Kevin:


We JUST rolled out the new site today and it has some more
documentation around the javascript stuff. I’d LOVE your feedback on
it if you have the time.

And thank you for the blog post. I need to dig back in and write a
better “setting up your local dev environment” post. It’s not really
that bad, it just takes a few extra lines of javascript to check to
see if you’re in AIM Pages or in standalone mode. I do almost all of
my debugging in standalone mode and then usually only have to upload
the module a couple times. The hardest thing about the local dev
environment is if you want to write server-side modules. Testing
locally with AJAX-y stuff is fairly straightforward. Expect a better
tutorial on that next week.

From Kerry:

Hey Erik~
Great feedback. I ran into some of the same issues when I made my simple module.
After we get the documentation updated, I’ll let you know–would love your thoughts on whether we improved the info.

I’m not afraid to say that I went into the building of this module with some prejudice towards the whole project – I was very wrong – not only have they responded to my concerns – they admited to having simliar problems!

They’re really trying to do the right thing here!

Anatomy of a quick mashup.

My new mashup
Reading “this 37s post”: uncovered a lot of gems. Not the least of which was “Xanix’s bookmarks for ‘greatdesign’”: What is it about lists that makes me so happy? In any event, I wanted a way to view all of those pages in one shot.
I could have written a “Greasemonkey”: script, but I wanted something a little more challenging.

I figured it would take a few steps to automate this process

1. grab and parse the “rss feed”: for Xinex’s list.
2. grab a screen-shot of each site
3. display them in a cool way.

So, being the backwards guy I am, I went looking for a screen-shot program that was scriptable. I found khtml2png – but no os x version. Then I found “Paparazzi!”: Opps, already had it! So, I opened up the applescript dictionary tool, and was bummed to find out that paprazzi didn’t have any scripting abilities. That lasted for 30 seconds, until I found their new version (it’s right there on the homepage). Psyched, I figured out how to call that snipped of applescript with command line options (this was tough for me, AS freaks me out). And from within another program.

Then I set about writing the ruby script to take a rss feed and call my new applescript file for each element.
“ruby source”:
“applescript source”:

After tweaking, that started working pretty well. I had the idea (you can see in the source), to save the url in a file with the filename an md5 hash of the url (Thanks!). I also save two versions of the screen-shot with the hash as a file name.

The last piece of the puzzle was the php to display it all.
“php source”:

It’s pretty well commented, but the gist is this:
* find all .url files, slurp them into an array – hash => url
* loop through said array and make a div for each with a background image of the site
* inside THOSE divs, make another one to show a long screen-shot on mouse over

“Here is the final product”:

Don’t hesitate to let me know what you think, either in comments, or emailed to me –