By now you've probably heard that Delicious will be
closing up shop sold, in an attempt to keep it alive. When the news first hit, I started looking for an alternative cloud-based bookmarking site, with the criteria that it should be free, support tagging, and preferably have an extension for Chrome (or at least a bookmarklet).
I did find a few options, but so far I haven't been particularly pleased with any of them. Now, the news has come that delicious will likely be sold instead of shut down, but by the time I heard that I was already committed to this idea. I was going to, mostly as a way to learn a few new things, create my own port of Delicious. In the process I want to learn CF9 ORM functionality, possibly use EHCache as a 2nd level cache for Hibernate (and just in general), and continue my quest toward FW/1 nirvana. In addition, I wanted to learn how to use Facebook- and Twitter-provided OAuth solutions, so I'll use that as the only login mechanism.
This series of posts will cover my progress on the project and the issues, pitfalls, and lessons learned during its completion.
Here are the tools I'll be using:
- CFBuilder: My IDE of choice for ColdFusion development.
- Git: The project source is already available on Github, which should make it easy to post code samples and share my progress.
- For a Git client, I use a combination of a fork of GitX and the command line client.
- MySQL: Most of the databases on my production server are MSSQL, but my development server (a Mac laptop) only has MySQL. For the sake of simplicity and eliminating potential headaches caused by dev/prod databases being different engines, I'm using MySQL in production as well.
- ColdFusion 9 and Hibernate: At its core, this project is about me learning how to use CF9's ORM functionality.
- EHCache: Since it (supposedly?) pairs up so well with ColdFusion and Hibernate, I might as well give it a shot, right?
- Facebook and Twitter OAuth Solutions: To help prevent situations like Gawker recently dealt with. This is the way to the future.
- FW/1: My current favorite MVC framework for ColdFusion. Lightweight and powerful, yet simple, and with nearly zero config.
- jQuery & jQuery UI: While I already know these fairly well, this will be my first project starting from scratch with jQuery UI so I'm interested to see how well I can use its offerings.
- MXUnit: Unit testing integrated in CFBuilder. Nice.
Other ideas I have are to provide extra features like an RSS feed of each user's bookmarks, an API for interacting with the data (using Taffy, of course!), and possibly adding the option to push to your Facebook wall -- but these are all secondary to the core functionality and will just have to wait. I may also try to bring in other frameworks that could help, like ValidateThis, but I don't want to take on too much new stuff at one time so I'm planning to refactor that sort of thing in.
Also worth mentioning, since I've already done a lot of the initial ORM development work, is that the first few places I look for ORM help when I get stuck are:
- Bob Silverberg posts on ORM in depth, clearly, and frequently.
- Manju Kiran is an Adobe engineer and has some good ORM examples posted.
- Rupesh Kumar is another Adobe engineer who occasionally blogs on ORM topics.
If I can't find what I need there or in the CF9 documentation, then I google or ask friends.
I expect to make a lot of mistakes, and I'm hoping to get a lot of good advice, by writing all of this here -- this is a learning process. I will try to address updates in a way that preserves searchability for others making the same mistakes while still making the solution clear.
Next time I'll show the data model I'm starting with and how to write the persistent ORM CFCs to work for my application.