Last night was sort of the release of Pic of the Day (not safe for work, or my mom) into the wild. Â The project is a couple months shy of five years old, and while I've talked about it obliquely all over the place, I've never really publicized it directly. Â I'd made the assumption that it was just a shared secret because it comes up in conversation over beers quite frequently, and I do actually refer to it by name occasionally, but I was quite wrong. Â I brought my little MOO "business cards" to distribute, and I was amazed at the response.
For some background, PotD spiders the internet looking for pictures, downloads them, and then sends them to people, one pic per day. Â Subscribers can rate each picture, right from their email, and the system learns what they want and tries to send them more of it. Â It started as a joke; a friend and I thought it'd be funny to spam a third friend's inbox with dirty pictures, just for the hell of it. Â Five years later, I have a fairly robust prioritization engine that I've had great fun building.
Obviously handing out business cards with dirty pictures on the back is going to be a conversation starter, but it was really interesting to talk about all the minutiae of the application. Â I got a number of very interesting suggestions to add to my queue of things to think about. Â The most common comment/question was about monetization. Â I'm sure I could make a killing if I wanted to, but PotD is a hobby. Â It's something I do for fun, in my free time. Â The primary reason I do any sort of publicizing is because the data analysis only becomes relevant as the subscriber population grows, and that's really the fun part. Â And since it's free (and the interface is largely asynchronous – via email), I don't have to worry about ensuring it's completely stable, error free, and available all the time. Â That makes hacking a lot more fun because, lets face it, stability, error handling, and availability aren't typically the "fun" part of application development.
What was perhaps more interesting was the amount of stuff I've done that has PotD as it's sole impetus (or at least primary impetus).  If you go look at my projects page, seven of the eleven projects were created purely for PotD, most notably TransactionAdvice, SchemaTool, FB3Lite, and Amazon S3 integration.  The other three are ComboBox, FlexChart, andjQuery Checkbox Range Selection.  CFGroovy had it's impetus in PotD as well, though the Hibernate aspects quickly grew (out of proportion, in hindsight), and I've not actually used it in PotD beyond a couple trivial spots.  Beyond the actual projects, everything I do with SVG, Batik and Weka (a data mining package), plus a lot of Google Charts stuff and most of those damned query performance issues are all PotD.
Over the years, the application has lived on four different servers, including one that was accessible only via an asynchronous proxy written in PHP.  Yeah, really.  It's pure Adobe ColdFusion, starting on CF7, but now on CF8.0.1.  FB3Lite is the front controller, ColdSpring is used for all the DI/AOP needs, and the codebase is largely procedural even though the majority of it is packaged as CFCs.  Excluding third-party code, there are 129 CFM files (9,760 lines), 53 CFCs (15,794 lines), 12 JS files (2,402).  The database has about 650K data records, along another 1.4M records that are "non-data", if you will (log tables, lookup tables, etc.).  None of these numbers are particularly sizable, and the application itself is far from the largest I've worked on, but I'd say it's the most complex because of how many different pieces they are, the variety of jobs they do, and the level of automation in the various data flows.
So welcome to the world, Pic of the Day.
Comments are closed.