Announcing Tutorials

Here at, we've been working hard on our technical tutorials!

Check out our tutorials page to find the first five lessons of our new course, Introduction to C. In addition to the written content, we plan to post screencasts of each lesson. Please help us out by checking out our YouTube channel; if you like what you see, we would appreciate it if you "like" our videos and subscribe!

While we're busy working on more educational content, we'd love to hear your feedback. Please let us know what you want to see next!

The Basics of vim (Vi IMproved)

During my work over the years as a software engineer, I've noticed that many people have trouble learning how to use the vi editor. Although the need to know it has lessened though the years, knowing how to use vi is still a useful skill.

Once you know how to use a few vi commands, using another text editor (or watching someone else use another text editor!) can feel inefficient and cumbersome. So I wanted to make a short video to explain the basics, so people can jump right in and start using it.

Read more…

On the Origin of IP Ranges in MAAS

In this post, I'd like to discuss the history of IP Ranges in MAAS. IP ranges have evolved significantly in the years that I've worked on MAAS.

If you've found this post, you might be confused about the various concepts related to IP ranges in MAAS. I hope after reading this, you'll understand the difference between static ranges, dynamic ranges, and reserved ranges -- and how they relate to device discovery and managed allocation in MAAS.

I'll start from the beginning, as I know it.

Read more…

GeChic 1303H 13.3" 1080p Portable Monitor Review

When I travel for work, one thing I really miss about the comforts of home (besides my standing desk!) is multiple displays. I just don't feel as productive if I'm constantly switching windows all the time.

Reluctantly, since I could justify buying a portable monitor anyway (for working on normally-headless hardware without a serial console), I went ahead and purchased a GeChic 1303H 13.3" 1080p Portable Monitor.

Read more…

A nice-looking git graph

Just a quick post about how to get a nice summary graph of your git log:

git log --all --graph --pretty --oneline --decorate

I usually make an alias for this (I call it gitkc, because it looks like what gitk would have looked like if rendered on the console.)

When Less Information is Better: using jq with the MAAS API

Sometimes, when working with a JSON API that returns a large amount of data, you want to focus on only the necessary information.

For example, the MAAS API returns large amounts of JSON data, and often you only want to see a subset of the output. If it were tabular ouput, you might use grep and awk. If it were an XML document, you might use an XPATH expression. But what about JSON data?

The jq tool comes in handy for this. (Use sudo apt-get install jq if you don't already have it installed.)

Read more…

Preset the MAC of a New LXD Container

Just a quick tip on how to pre-set the MAC address for a new LXD container. Simply add --config volatile.eth0.hwaddr=<mac> to your lxc launch command. For example:

$ lxc launch ubuntu:x --config volatile.eth0.hwaddr=52:54:00:bc:e4:fe
Creating unespousable-eddy
Starting unespousable-eddy

$ lxc exec unespousable-eddy -- ifconfig eth0 | grep HW
eth0      Link encap:Ethernet  HWaddr 52:54:00:bc:e4:fe

Quick and easy.