Kiln's Evolution, Part 2: From Prototype to Beta

February 9, 2010 | programming, technology
This article is a continuation of Kiln’s Evolution, Part 1: DVCS as Code Review. In the fall of 2008, Joel was getting increasingly adamant that FogBugz needed source control integration, and most people in the company seemed to think Subversion would probably be the best SCM to make that happen. Tyler and I disagreed, believing strongly that we should use a DVCS instead, and that our code review tool gave a really compelling example of why DVCS was better that any software shop would…

Kiln's Evolution, Part 1: DVCS as Code Review

November 9, 2009 | personal, programming, technology
One of the things that really sucks about doing online code reviews is that, in all the systems I know, your code reviews do not integrate with your source control. If the code reviews are versioned at all—and they’re frequently not—then they’re in an entirely different system than your real VCS. For larger reviews, where you’re talking about a major piece of functionality, that means that your source control system will end up lacking the history of how a feature came to be. In other words,…

The Launch of a Secret Product

October 14, 2009 | personal, programming, technology
For the past year, an odd thing has happened, if you’ve followed my doings. My work on Fog Creek Copilot seemed to dwindle, I became tight-lipped about what I was working on, and I started getting really excited about an upcoming product release. Also around this time, my knowledge of Mercurial, Python, C#, and ASP.NET MVC all seemed to dramatically increase, even though my free-time code output shrank to nothing. What was going on? Oh, the usual. I was working on a top-secret brand-new…

local_settings.py Considered Harmful

October 2, 2009 | programming
One piece of increasingly conventional wisdom when developing Django applications is that your settings.py file ought to conclude with some variant of try: from local_settings import * except ImportError: pass the idea being that you can put a local_settings.py file on each server with the appropriate information for that site. I would challenge that this approach is wrong. By definition, you cannot put local_settings.py in version control, which means that a critical part of your…

The One in Which I Call Out Hacker News

July 1, 2009 | programming, technology
“Implementing caching would take thirty hours. Do you have thirty extra hours? No, you don’t. I actually have no idea how long it would take. Maybe it would take five minutes. Do you have five minutes? No. Why? Because I’m lying. It would take much longer than five minutes. That’s the eternal optimism of programmers.” — Professor Owen Astrachan during 23 Feb 2004 lecture for CPS 108 Accusing open-source software of being a royal pain to use is not a new argument; it’s been said before, by…

The One in Which I Say That Open-Source Software Sucks

June 30, 2009 | programming, technology
These days, arguing that open-source software is crap seems dumb. How many websites are powered by a combination of MySQL, PHP, and Apache? How many IT applications, written in Eclipse, run on Java, using SWT widgets? How many design studios rely heavily on The GIMP and Inkscape for their everyday photo-retouching and page layout needs? Er, wait. That last one. Doesn’t quite ring true. In fact, as good as most people seem to insist that Inkscape and The GIMP are, I’ve yet to see a major…

Zombie Operating Systems and ASP.NET MVC

June 12, 2009 | programming
In 1973, an operating system called CP/M was born. CP/M had no directories, and filenames were limited to 8.3 format. To support input and output from user programs, the pseudofiles COM1, COM2, COM3, COM4, LPT1, LPT2, CON, AUX, PRN, and NUL were provided. In 1980, Seattle Computer Products decided to make a cheap, approximate clone of CP/M, called 86-DOS. 86-DOS therefore had no directories, supported 8.3 file names, and included the pseudofiles COM1, COM2, COM3, COM4, LPT1, LPT2, CON, AUX,…

Introducing FogBugzMiddleware

June 3, 2009 | programming
While I alternate between loving it and hating it, the web framework I use the most is Django. By default, when your deployed Django application encounters a 500 error (and, optionally, an internal 404 error), it sends an email to everyone in the ADMINS sections of your settings.py. Since I don’t like using my email client as my bug tracker, and I take advantage of FogBugz Student and Startup Edition to get a free and awesome bug tracker, I had long ago told Django to take advantage of…

Your Language Features Are My Libraries

May 20, 2009 | programming
At lunch today, we had a lengthy discussion about the merits of various .NET technologies, including LINQ. I complained that, although I like LINQ, and I like C#, I cannot help but be annoyed that many of these “cool” language features in C# are nothing more than libraries in Smalltalk. Joel responded that the comparison wasn’t fair; C# allows you to invent more syntax than those languages permit, and afford greater flexibility. Without disagreeing, let’s visit some specific examples. The…

When to Use Seaside Components

May 8, 2009 | programming
Although, for the past couple of years, I’ve largely stopped doing development in Squeak, I’ve still kept an eye on the Smalltalk community, including looking for Smalltalk questions on StackOverflow. It’s a good way to learn, keep up-to-date, and occasionally earn some easy reputation. Today, I saw that Julian Fitzell, one of the original authors of the Seaside web framework, had posted an outstanding answer explaining when and how to use components in Seaside. If you’re just learning…