Announcing the release of django-classified-ads, which is being hosted by Google Code. For everyone who has e-mailed me about this project… here it is! All of the templates and static media (CSS, images, jQuery, and TinyMCE) from has been included in the source code repository. I’ve replaced some of the older custom code with existing Django applications like

Update: This code is now available on github

Back in July, my company was contracted to work on a new classified ad site related to the golf industry. A few weeks prior to this we had decided to take the plunge and start using Django on projects whenever possible. After a few emails back-and-forth about this project, I knew that Django would make a good base for building it.

The key feature requested for the original site was to be able to support several categories of postings, each with their own distinct fields. I used a ‘Field’ model to represent the different field types available for each ad category. A ‘FieldValue’ model was used to store the value of a specific field, and associate it with the ‘Field’ and ‘Ad’ via foreign keys.

Additional features include searching, attaching images to ads, PayPal checkout, configurable pricing options, and custom templates for listing, viewing, and editing each category of ad posting.

You can see a demo version of this software here.

I can release this as an open source application, so that others can use it to build their own classified ad sites, but before I do I need to clean up the code a bit more and get more documentation in place.

Edit: Please see the follow up post.

My company’s most recent project had been incubating in my head for the last six months or so. The whole point of this project revolves around an idea for a business that I had: “Develop open source software that everybody needs, but no one wants to develop for free.” The problem is that those types of projects can cost a lot of money to develop. While there are certain benefits for companies that pay for the development of open source projects and release them, companies generally recoup their investment of resources in those projects by exploiting the competitive advantage of having the software and not their competitors. Individuals generally don’t have enough need for these projects to want to invest the funds required.

Pledge4Code is an attempt to give companies and individuals a new opportunity to invest in the development of open source projects by lowering the perceived cost and delivering maximum value to end users by releasing all project deliverables under OSI approved licenses. Lowering the investment a company has to make in order to get a needed project developed while that company still receives the benefits of using an open source product allows more companies to justify actively using open source software. Pledge4Code works on a “reverse bounty” system where we post prepared project specifications, and then interested businesses and individuals pledge a portion of the development cost. We begin development once all of the needed funds have been pledged. Everyone who had pledged gets to vote to decide if the project is complete, and once voted complete the source code and other deliverables get released under an OSI approved license.

Initially Pledge4Code is going to focus on development tools and libraries, and then branching out as we get a better feel for market demand. One thing we are keeping an eye out for are projects where there is no open source equivalent because it requires more than just expertise in writing good code: legal, financial, and regulatory expertise isn’t cheap. Despite the fact that a lot of open source software is free, we think open source software has more value than traditional proprietary software. Pledge4Code is looking to cash in on that value and help the open source community at the same time.

I want to point out a great article by Scot Hacker, about his experiences migrating to a Django & Python based platform. My company is in the process of a similar migration itself for similar reasons, if not quite the same background. Our new website is now written completely in Python using the Django web framework, and we are now in the process of adding some new features and content. We are also working on some new projects written using Django, which will be launched in the next month or two.

Recently I have started using Michael J. I. Jackson’s Shadowbox.js on some of my client’s sites. On site in particular had an image gallery where you could click on a thumbnail to view a larger version of the image, and some had associated videos as well.

The goal there was to have a single link that would be updated to point to the correct flash video depending on the thumbnail being clicked (the link being hidden if no video was associated with that thumbnail). After a few frustrated minutes, I discovered that Shadowbox.setup() needs to be called after changing the link’s href attribute so that the link will trigger the correct video. Since the initially the link didn’t point to a video at all, I also passed {skipSetup: true} to Shadowbox.init().