Faster than light

Ansible is probably my favorite provisioning and configuration management tool. Its syntax is concise, expressive, and elegant. Unlike other tools in its category, it has excellent documentation with working examples and intuitive naming. Learning it use it effectively can help you be a more productive developer. Speeding Up Ansible Anyone that has used ansible for more than a few hosts with more than a few tasks knows that by default it can be really slow....

January 29, 2017 · 3 min · 580 words · Robert Underwood

LLVM Tooling for C++

C++ is a both a fantastic language and a mess. It supports at least 4 programming paradigms (procedural, functional, object-oriented, template meta-programming). In some senses, many languages give you one great way to do things: C++ gives you every way and trusts you to use them well. With this flexibility comes problems that C++ seems to have beyond what other languages experience. Therefore, having effective tooling to develop and use C++ is essential....

January 22, 2017 · 3 min · 627 words · Robert Underwood

Interpreters Made Easy

The Interpreter pattern from the “Design Patterns: Elements of Reusable Object Oriented Software” can potentially be a very powerful pattern. It allows you to use a domain specific language to represent a complex computational situation. However, writing interpreters in practice can be tricky and time consuming. It really helps to know something about some fundamental parsing algorithms and techniques. The most naive approach to writing an interpret involves manually matching each possible next phrase and creating an if else soup to match each possible outcome....

January 15, 2017 · 3 min · 580 words · Robert Underwood

Poor Man's Parallelism

I really like orchestration tools such as Ansible or SaltStack. They can make running tasks on a group of machines a breeze. But sometimes you can’t or don’t want to install these tools on a machine. In cases like these, it is helpful to know how to parallelize some tasks in the shell. You can do this via Unix/shell job control: cmd="systemctl enable --now docker.service" hosts=(host{1..4}) for host in ${hosts[@]} do ssh & $host $cmd done However from experience, this can be very error prone....

January 8, 2017 · 3 min · 462 words · Robert Underwood

Learning to Learn: GDB

GDB is a powerful tool that is underutilized by most programmers that I’ve met. It can tell you the state of one or more running or crashed programs, and even manipulate the memory of a running process. It is an invaluable tool for understanding what is going wrong with your programs. How to get started To get the most out of GDB you need to compile your program with debug information – metadata that describes the program source....

9 min · 1728 words · Robert Underwood

Learning to Learn: MPI

MPI is the de-facto standard way to write distributed programs that run on super computers. Many have tried to replace it, but so far none of them have succeeded. Learning to use it successfully, will enable you to write powerful distributed programs. Order of Topics MPI has a minimal powerful and useful core, but really tries to completely own it’s space. I strongly reccommend reading “Using MPI” by Gropp et al....

5 min · 1034 words · Robert Underwood