Thinking With Tasks

Up until now, all dependency ordering in dev-pipeline is managed using a function that provides a valid sequence as a Python list. The simplified code is basically this:

build_order = resolve(self.targets, self.components)
for target in build_order:
    for task in self._tasks:
        task(target)

This has been fine for initial versions, but it’s not very flexible.

Continue reading

Step 1 — Scratching Your Itch

Every good work of software starts by scratching a developer’s personal itch.

Eric Raymond, The Cathedral and the Bazaar

Like most developers, I’m a creature of habit. I like git for source control, so I use git to track changes in pretty much everything, even if they’re non-source (e.g., configuration files, my resume, and even my hobbyist writing). It’s mostly a matter of sticking with patterns I know and embracing muscle memory; with git not only get version tracking, but I can easily back my work up to tons of places with one command.

Continue reading

Sub-modules are the Devil

Sub-modules (or if you prefer mercurial, sub-repositories) are a popular method of dealing with complex dependencies spread across multiple repositories. In theory, you can develop libraries while developing multiple applications that use them (or more libraries), and you don’t have to deal with setting up your build environment beyond what it takes to do a simple build.

In practice they lead to lots of issues.

Continue reading