Monthly Archives: November 2006
I’m pleased to announce that my panel at this years SXSW Interactive was accepted. Yeah! This is one of my favorite conferences all year, and I’m looking forward to getting the opportunity to expose more folks to the cool new music recommendation services out there.
Look for more details about panel speakers to emerge as things are confirmed, and a big thanks to everyone who voted for the panel!
A few rainy weekends ago, I had the urge to roll up my sleeves and build something. Every web application I’ve built in the last few years has been built on Drupal, and I wanted to see (remind myself) what it would be like to develop an application from scratch (where “scratch” = a random collection of open source components combined with bits from Drupal). I also had given myself the timeframe of a weekend, so building “Basecamp right” was out. I wanted a simple coding project.
Since I’m extremely childish, immature, and a fan of the practical joke, I decided to build a web app that let you send an email to someone, but make it appear as if it comes from someone else. I decided to call it Prankmail. Frivolous, slightly dangerous, and perfect for a rainy weekend indoors.
Skipping to the good part, you can check it out at:
And if you would like to read about how I built it, and how the
“build from scratch” process compares to building a Drupal site, continue on:
Before I really started with application specific code, I wanted to grab a few Open Source pieces and get a simple and efficient framework to build on (We’re not using Drupal, after all).
I wanted to have clean URL’s (none of that goofy query string nonsense) so I took a look at how Drupal uses MOD_REWRITE and .htaccess files and cobbled together a simple solution. I’ve also been looking at the new Zend framework, and I like the way it maps URL’s to controllers. I am also a fan of Drupal menu system, so I hacked up the arg() function from Drupal, and made it route URL’s to controllers. I like Ruby’s “convention over configuration” and so by default, I set it up so a URL of ‘/message/123′ gets passed to a function ‘controller_message’ with an arg of ‘123′, if that function exists.
I really like Drupal’s very light weight DB abstraction layer, and so I grabbed that as well (mostly because the syntax is so natural to me at this point), and stuck it in my web app.
For templating, I decided to give Smarty one last try. Every time I struggled with the syntax, or found myself fighting along, I could hear Rasmus saying “PHP *is* a templating language, stupid!” Next time, I think I will just stick with a ‘pure’ PHP templating solution.
Setting up this simple framework let me write the rest of the application with speed and ease. Included libraries aside, the actual application itself is quite small.
For help on the UI, I used JQuery and specifically thickbox. I also found the visual JQuery site to be a great resource when I got tripped up on syntax. JQuery is truly fun to code with, and it’s a great feeling to have so much control over the DOM, with such simple and beautiful syntax.
I mean, how is the following snippet not poetry in it’s simplicity:
//add a token to the form that we will check to
//make sure the form processor only looks at forms
//submitted from this page...
The above snippet leads into how I was concerned with spammers and bots submitting mail, so I borrowed a technique from Jack Born and used JQuery to append a token (MD5′d salt + timestamp) to the submission forms DOM, and at the same time inserting the same token into the Session. When the form is submitted, I check to make sure that the timestamp is “fresh” (within 20 minutes), and that the two tokens match. This should prevent, or at least make it more difficult for a bot to make a post directly to my form processor (and I don’t have to use a silly CAPTCHA).
So how did the whole process work, compared to using my usual framework of choice, Drupal?
Setting up the whole framework from scratch was definitely the fun part. I really enjoyed having a chance to “do things my way”, rather then hunt through documentation or lines of code in search of an answer. I think many people code because it feels good to build something, and while Drupal gives you many things “for free”, it was very enjoyable and satisfying to dive in and do it myself.
When it got to the point of adding comments and RSS feeds to the site, I have to admit that it was proving to get a bit tedious, and it would have been nice just to “turn comments on”, in Drupal. But all that being said, the whole exercise reminds me that there are many ways to get a job done. Drupal is a fantastic tool for a specific set of problems, but it’s just that.
Moral of the story is?
There are no silver bullets, and building silly websites is easy and fun.
Now go send some mail!
The kind of event that makes me glad I live in SF is coming right up this week. Make sure you’re there!
“With so many events in November and the Holidays approaching….”reload” at the DNA Lounge for a night to celebrate the convergence of community and independent music.
Bringing together real-world performances and digitally-originating beats, “web2.0″ technology creates a revolutionary way for bands and fans to interact. Reload is an exploration of new models for live music and digital content.”
I usually have about 1 million ideas for a new startup every day, but admittedly, most ideas only last for a minute or two before I dismiss them as foolish. Some last around for a few hours before I toss them on the scrape heap of discarded ideas. If they stick for a day or so, I’ll usually run them by Boris who will either a) point out the huge flaws that an optimist such as myself would never see, or b) jump straight to implementation details.
But take note: I just came across a great quote from American economist Theodore Levitt that will serve as a test for all future ideas . (You’re off the hook Boris)
“People don’t want to buy a quarter-inch drill. They want a quarter-inch hole.”
If any one of my ideas doesn’t help create that quarter inch hole, then straight to the synaptic scrap heap it goes!
From Paul Lamere, check out Snapp Radio, a cool mashup that draws photos from flickr that match the mood and theme of what you’re listening to on last.fm. Some surprising photo choices sometimes come up, but on the whole, very cool to see. I’d love to find out more about how song ‘mood’ is determined though.
Be fun to play with something similar on the desktop that could more easily sync to BPM and actual changes in the music. Maybe some cool color effects, swirls and photos fades, etc… This could probably be done as a Snappradio iTunes plugin.
Went and saw the always witty and insightful Dan Bern play last night at Slims in San Francisco. I’ve seen Dan play quite a few times before, and it’s always been enjoyable, but last night the man really stepped up to the plate. Maybe it was the new guitar he had just bought, or maybe it was the addition of a violinist and second guitar player (and their perfect vocal harmonies), but Dan kicked ass. Check out his tour schedule and don’t miss him if he comes to your town. He’s never sounded better.
Great analysis on Daring Fireball about the revelation that Microsoft will now pay per unit licensing fee from every sale of a Zune player to Universal Music Group.
In addition to conspiratorial thoughts about Microsoft VS Apple, I think the most interesting quote from the DF post is from David Geffen, as he attempts to justify a per-unit licensing fee.
“Each of these devices is used to store unpaid-for material. This way, on top of the material people do pay for, the record companies are getting paid on the devices storing the copied music.”
But will the RIAA still sue Zune users for downloading Universal content? You better believe it!
A compulsory license is an interesting idea that deserves more thought, and having a tax on specific goods (like music players and blank CD’s) that eventually trickles back to the “Artist” (read: rights holder) might also work, but you can’t have your cake and eat it too. Geffen’s justification seems dangerously flawed.