Rebuilding Pic of the Day

I need some help, thoughts, recommendations as I undertake this, but first some background…

As I do every 15-18 months, I've decided that it's time to rebuild Pic of the Day.  I've never actually done it; the codebase is still the same one I started 5-6 years ago and have edited (often daily) since then.  But the amount of cruft is becoming more and more problematic, and while I could do a hard-core refactoring and trimming down of the app, I don't see a compelling benefit to doing it that way versus a ground-up rewrite, and I'm confident the latter will actually be quite a bit faster.

In the past I've created partial re-implementations with pure CFML, Spring/Hibernate, Grails, and CFML/Groovy hybrids.  In every case, one of the objectives was a gradual migration, where the two versions either shared a database, or did incremental data copies from old to new, so the app could be ported in stages.

I've decided I really don't want to do that.  Obviously I need to move data from old to new, but I'm happy with just doing the pic/recipient/rank tuples and the associated entities, and starting from scratch with the other bits (the spider state, the image pool, historical records, etc.).

My question for all of you is really about the technology stack.  As I mentioned above, I've tried several.  Time-to-market would be maximized with a CFML-centric solution, because that's what I have the best infrastructure and tooling for, but that's not a significant driver.  PotD is a hobby; it's how I entertain myself for hours every night after the kids are in bed.  I do have resource constraints on my server, particularly RAM, so that is a consideration, but other than that I'm pretty much open for anything.

If you were undertaking this project, what would you use and why?  If you don't supply the why, I'm deleting your comment.  :)

4 responses to “Rebuilding Pic of the Day”

  1. Marlon

    Ruby on Rails :) Mainly because even though I've used CF since 1997, I've found Ruby and RoR to be much faster to develop and much more fun in general….I'm betting that you won't share my enthusiasm though :)

  2. Sean Corfield

    It depends on what your driving motive is for maintaining the code base in the first place. If it's really entertainment value in terms of code learning / coding-for-relaxation – and it sounds like you're open to non-CF technology – why not use it as an opportunity to learn something fairly different?

    Marlon's suggestion of RoR is reasonable (but you already have that under your belt I think?) so I'd add a suggestion of Scala and the Lift web framework. It's quite 'different' to most of the stuff I expect you've built apps with before so it could be fun to learn (I just read Programming Scala over the trip to CFinNC and was very impressed by the language). I'm not convinced about Lift but it's definitely a very interesting approach (it just seems a lot of work).

  3. Matthew Lesko

    After reading Programming Collective Intelligence my suggestion is Python. This book provides a lot of depth around numerous data crunching algorithms that you are using to do the recommender, all of which are implemented in Python. And further to this end, I think there are several libraries in Python for this sort of work, NumPy comes to mind, which make life easier to do it.