Archive for the Category NiftyKit

 
 

Even more rapid development with Django and jQuery

Compared to coming up with an idea, writing a web app is like trying to swim through treacle. After completing a week-long iteration on TickTickDone, it typically takes a day or two to unwind and mentally process the iteration’s work, then about an hour to come up with the tasks for the next week. Actually coding and testing those features takes the majority of the week’s 15 hours work.

The one-web-app-per-week idea is limited by how much functionality you can develop within the limited timeframe. I’d like to make my time spent coding as efficient as possible. So, I’m setting myself the challenge of creating a framework on top of Django and jQuery such that I can re-develop the current version of TickTickDone (iteration 8, made up of 8 weeks work) within one week.

At the moment, TTD’s code is not great in the DRY department. That problem exists in the javascript code and also in the python code, which is troubled by many very similar unit tests for very similar AJAX response functions. So as a solution, I plan to start by abstracting as many common patterns as I can. I’ll also try exploring the jQuery plugin library for pre-built components to help along the way, and see if I can form all of these into a cohesive library. Once I feel it’s ready, I’ll try using it to re-develop TickTickDone in a week.

An obvious alternative to this whole approach (and the one commonly used) is to hire more people to code for you. That’s not an option for me at the moment because I don’t have the money to hire more coders (a constraint), but it’s also not a great strategy due to the communication scaling problems in large teams.

Any thoughts? Has anyone done this (or tried to do this) before? Let me know in the comments.

Collapsible forms with jQuery

I spent a few hours recently refactoring the TickTickDone javascript to reduce code duplication. In the process, I generalised out a common pattern - a link that, when clicked disappears and is replaced with a form. If the form is cancelled or submitted, the form disappears and the link returns. An example can be found in the “Add a new milestone” button on the goal page of TickTickDone. I’ve packaged up the HTML template and the javascript, and linked them below. To use it, create your HTML page with a section following the format in collapse-form.html. Include collapse-form.js, and call the following in your javascript init:

init_collapse_forms($(document));

Collapsible forms version 1:

collapse-form.html

collapse-form.js

ComicHub

At the end of last year, one of my friends started a webcomic and published it using Google Pages. It was an adequate, but rather inefficient way to work, so we wrote ComicHub, a webcomic hosting site with a clean interface, with grand plans of finding a way to make money from it. It didn’t take us long to realise that that wasn’t going to work, but we put some Project Wonderful ads up anyway (they’ve made $5 in the last six months :D ). All that said, the site is still up and running, and free for anyone who wants clutter-free hosting for their comic / photoblog / random scribblings. Enjoy!

ComicHub: It’s better than Google Pages

Writing a web app in a week

What would it be like to write a small, but useful web app within a timespan of one week?

Way back when I thought of the name “NiftyKit”, I envisioned niftykit.com as an index page for many small web apps we developed. We didn’t really get around to developing that (unless you count ComicHub), and since then have worked on a number of larger projects, the latest being TickTickDone.

The idea reoccured to me the other day, and today I found Clay Shirky’s essay on Sitated Software, which fits the idea beautifully. The concept really appeals to me, I think because the potential for awesomeness is higher than generalised apps because it can be so much more specific and relevant. A great example is leech, a distributed app-sharing tool we built to work around tiny disk quotas at uni, which was lots of fun to develop and use.

I think trying to do it would produce some interesting results (adding a whole new meaning to rapid app development to start with :) ). I can see myself starting to think of ways to speed things up already (eg. setting up a really solid base project to work from each week). It’s certainly a way to use constraints to force innovation.

At the moment I can’t see any way to make a significant sum of money off of it, unless we started generalising the apps after the first version was built, but that would quite possibly defeat the purpose. If we made enough of them they might work as donationware, but maybe it’d be simpler just to do it as a hobby and call it good karma. I’ll see if I can come up with some ideas and try it out.