DataGen Workers Optimisation

I released DataGen v0.0.9 during lunch break yesterday. This version includes the support to limit how many workers can run concurrently, which is something that I’ve always wanted to add since day one. I finally got the time to do it last weekend, and it turned out to be an easy task thanks to Rod Vagg’s worker-farm module. Why is this necessary? The problem with previous versions of DataGen was that when you want to generate 20 data files, then 20 worker processes will be created and run concurrently.…

more »

Jenkins Build Slaves On A Budget

About half a year ago our team started working on a project with micro-service architecture, which means we had a lot of little applications to build as part of our delivery pipeline. One of the reasons why we opted to use this architecture was to gain the ability to replace a piece of component without having to rebuild the whole system, hence enabling faster feedback loop by releasing small chunks of changes in small parts of the system.…

more »

CITCON 2013

I attended CITCON 2013 in Sydney last February. This year’s sessions covered more non-technical issues compared to CITCON 2010. Two of the more interesting topics for me were on how devops movement could potentially discourage collaboration, and on how large non-tech companies try and still fail to implement continuous delivery. Those were some of the problems that I’ve been battling for many years. In an organisation where dev and ops are two separate divisions, devops is often a shortcut for dev to do ops tasks while bypassing any ops involvement.…

more »

Introducing Repoman

Q: _How do you clone 30 repositories from your personal GitHub accounts and 150 repositories from your organisation GitHub accounts in just one line? _ A: repoman --github-user myuser1,myuser2 --github-org myorg1,myorg2 config && repoman init Q: _How do you execute a set of commands against all repositories in just one line? _ A: repoman exec 'git stash && git pull --rebase && git stash apply' I wrote Repoman back in 2011 and I’ve been using it ever since.…

more »

How To Incorrectly Track The Progress Of A Project

The next time a manager asks you the percentage progress of a task, make sure you reply with a float rounded to 2 decimal places, and say it with full confidence. Sometime in mid 2000s, the manager of a project I was working on had to take an emergency leave, so another manager filled in for him. It was an agile project, but somehow this other manager managed to come up with a magical Gantt chart for the rest of the project.…

more »

Voice-Controlled Lamp Using Ninja Blocks + MacBook

Here’s a video of my latest quick weekend hack, using voice to switch a lamp on and off: Ok, so it’s actually a combination of Watts Clever + Ninja Blocks + Node.js + Automator + Speakable Items. Speakable Items takes the voice commands via MacBook’s internal microphone, then calls the Automator applications, which then runs a Node.js script (which output gets spoken by Automator applications), which then tells Ninja Blocks to actuate Watts Clever power socket.…

more »

Jenkins Build Status On Ninja Blocks RGB LED

Nestor v0.1.2 is out and one of its new features is nestor ninja for monitoring Jenkins and displaying the latest build status on Ninja Blocks RGB LED device (if you have a block, it’s the ninja’s eyes). Here’s a usage example: export JENKINS_URL=<url> export NINJABLOCKS_TOKEN=<token_from_https://a.ninja.is/hacking> nestor ninja Red for build failure, green for build success, yellow for build warning, and white for unknown status. The yellow light looks quite similar to green, and the white one does look blue-ish.…

more »

Akio Morita On Management

For the past few weeks, I’ve been reading Made In Japan, a story about Akio Morita’s life and the first three decades since the founding of Sony Corporation. I haven’t finished this book, but the last chapter titled ‘On Management’ was very interesting and it struck a chord with me. I’ve seen enough management decisions that were short sighted and proven to be wrong in the long run, throughout the 12 years I’ve been in the industry, and some of them could’ve been avoided or at least improved had the people behind them had better insights.…

more »

Private NPM Registry Replicator Document

For my future reference and to help others trying to set up a private NPM registry which sits behind a [corporate] proxy and requires authenticated CouchDB admin access, here’s the replicator document that I ended up using: { "_id": "registry", "source": "http://isaacs.iriscouch.com/registry/", "target": "registry", "user_ctx": { "name": "myadmin_username", "roles": ["_admin"] }, "continuous": true, "owner": "myadmin_username", "proxy": "http://proxy:8080" } For those who are not familiar with CouchDB, the above is a document that needs to be created in _replicator database, so that the replication rule from public NPM registry to your private NPM registry can be persisted and runs continuously.…

more »