Ultimate Quality Development System

Dev
Our friends at Divmod have come up with an extremely clear method of rapidly delivering high quality software. The basic idea is you write a bug report, create a code branch, then check in the branch with a "review" tag. When someone reviews and okays your code, you merge into the trunk. This method has lots of benefits, including taking the drama out of peer review, and making it very easy to safely test on multiple platforms. https://opensource.com/article/18/2/uqds (via Twisted)
Read More

Cheap Network Measurement

Dev, DevOps
You can't control what you can't measure. I want a fast local wireless network, counting only from my workstation to the router. If I change settings or drivers, how can I tell if it's an improvement or not? How can I gauge my network speed, including driver and network settings?There are jillions of tools available*, but they mostly 1) require a specific client on the server, or 2) don't actually send traffic, they passively analyze what's there.Here's a solution: transmit a largish file to the server, where it will ignore the data. Measure the network bandwidth locally using 'cpipe' or another tool.Setup: enable SSH on the router, install "cpipe" locally.cat /boot/vmlinuz-* | cpipe -vt | ssh router 'cat >/dev/null'I get lines like this, with statistics on each of many chunks…
Read More

Server names in Dnsmasq

Dev, DevOps
My domain name service (DNS) is running on a router using the wonderful Tomato firmware. When a computer boots up, it sends its hostname (i.e. "sally") to the router, which records the hostname and returns the corresponding IP ("192.168.7.10"). This is all grand. But, what if different services require a computer to have multiple names? That is, when the Puppet service fires up on my lappytop, it looks for the hostname "puppet" by default. Given the above scheme, a computer has one and only one name; DNS doesn't know that "sally" is also known as "puppet". Here's how to fix that. The router is running Tomato, which uses Dnsmasq as the DNS service. It automatically figures out the normal hostname/IP mapping, for instance "sally" in the above example. We can…
Read More

Fast Parallel Downloading (for apt-get)

Dev, DevOps
I'm rebuilding a Ubuntu server. Normally apt-get downloads one file at a time, which can get dull when you're installing 598 files. I found the tool "apt-fast" which downloads one or two files quickly, by downloading with multiple streams per file. This is somewhat sketchy, as it requires installation of additional software, assumes the file gets spliced together correctly, and doesn't gracefully handle network problems.I have a solution: xargsXargs walks on water. It is incredibly useful. In a nutshell, it runs a single command on a list of files. I'll post a lot more later, but here's how to speed up apt-get:cd /var/cache/apt/archives/apt-get -y --print-uris install ubuntu-desktop^ > debs.listegrep -o -e "http://[^']+" debs.list | xargs -l3 -P5 wget -nvapt-get -y install ubuntu-desktop^Replace "ubuntu-desktop^" with whichever task or package you want.…
Read More

Agile Software Development

Dev
I suggest everyone run, not walk, to read Alistair Cockburn's "Agile Software Development (2nd edition)." He talks about how people learn, and how Agile turns software development into a "cooperative game", like rock climbing. That is, developers have different roles, and each role supports the others so the team can progress farther, producing more software features to deliver to the client.The author's notes on how people learn helped me immediately in my teaching practice. My classes are both more accessible (can help more people) and more focused (presenting more sophisticated knowledge.)(Note the 2nd ed is a bit different from the 1st, and so recommended.)
Read More