I’ve read through Eric Holscher’s blog post about Reusable App Conventions in Django a few times, and it got me thinking about problems I have had in the past with other developer’s apps.

When you write your views for a Django application you intend to release, unless every view has exactly the same keyword arguments, please make sure to add a **kwargs parameter to your views. This lets your users pass arguments to your views with the include() in their URLconf, without getting errors from the views that don’t have that parameter listed. On my recent fan-fiction web site, I had to work around this problem and it’s really annoying to have to make a local copy and edit it for what could be really trivial to address by the reusable app creator.

I was recently asked how I deal with nebulous or otherwise confused projects. Here’s what I told them:

Ill-defined projects have been par for the course during my freelance software development career. If the client had no experience as a programmer, and had not already hired someone to refine their project requirements, they frequently came to me with a proposal too vague to transform into a finished product. The key to refining and focusing a project’s goals is to focus on the client’s original thought process, and possibly the sequence of events which caused them to seek my expertise.

I start by determining how to shape the project so that it is computationally and financially practical, and addresses the client’s most important business needs. Then, I break down the problems into smaller parts, and prioritize individual items with respect to both business need and risk (how hard will this actually be to implement, will that even be possible, etc). This strategy eventually results in requirements that are clear enough for me to feel comfortable coding a solution.

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 django-classifieds.zxdevelopment.com 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.