Written words that are often helpful

Performance Testing: Threads vs. Processes

Posted by chathaway on April 22, 2018, 9:30 p.m.

Recently, I spotted a line in Distributed Systems: Principles and Paradigms that caught my interest because it ran counter to my understanding of thread performance on a Linux system.

Instead of using processes, an application can also be constructed such that different parts are executed by separate threads. Communication between those parts is entirely dealt with by using shared data. Thread switching can sometimes be done entirely in user space, although in other implementations, the kernel is aware of threads and schedules them. The effect can be a dramatic improvement in performance. (Tanenbaum, A. S., & Van Steen, M. (2007 ...


Doing Elixir Development in Windows using Docker

Posted by chathaway on April 12, 2018, 2:23 a.m.

This guide documents the steps I took to setup my Elixir/Phoenix/Docker environment on my Windows 10 machine. It might be worth nothing that I'm running Windows 10 Educational, which includes the Hyper-V supervisor; this is required for Docker.

Install Docker

Rather than repeat stuff here: go search Google, and follow the official guide.

This will probably require a restart.

Setup a Dockerfile and docker-compose file

To get started, we need a Dockerfile to build the web host. In addition to elixir, we will need NodeJS and some extras. This should do it:

FROM elixir
ADD . /code


dex auto start search list

Posted by chathaway on March 29, 2018, 5:39 p.m.

This doesn't seem to be documented anywhere, but just a quick tadbit; the dex autostart program ( looks in:

  • $XDG_CONFIG_HOME/autostart or $HOME/.config/autostart
  • for dir in $XDG_CONFIG_DIRS; $dir/autostart or /etc/xdg/autostart/

For things to run. You can look for yourself at


Getting Started with GT.M

Posted by chathaway on Jan. 24, 2018, 11:01 p.m.

GT.M is a high performance, NoSQL database coupled with a MUMPS runtime. In this guide, we will install it on a fresh Ubuntu system, verify that it works, and build a sample database.

Installing GT.M through the package manager

The easiest way to install GT.M is using the Ubuntu package manager; apt.

chathaway@blaze:~$ sudo apt install fis-gtm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  fis-gtm-6.3-000a gcc-6-base icu-devtools libasan3 libatomic1 libc-dev-bin
  libc6 libc6-dbg libc6-dev libcilkrts5 libgcc-6-dev libicu-dev libitm1
  liblsan0 libmpx2 libquadmath0 libstdc++-6-dev libtsan0 libubsan0 ...


arXiv, Arch Linux, biblatex, biber

Posted by chathaway on Nov. 24, 2017, 5:30 p.m.

For the first time in years, an update was published to the biblatex package. This is quite exciting, but presents a problem for those of us who use "bleeding edge" software, like Arch Linux, and need to submit our papers to sites like arXiv, which use more stable packages. This is a quick work around.

The Problem

At the time of writing, there is a new version of biber and a new version of biblatex on my Arch system, which produces a .bbl file a version of "2.9". arXiv emits an error message, informing me that the bbl was ...


When Visiting India

Posted by chathaway on Oct. 1, 2017, 6:04 a.m.

  1. Do NOT plug an American power strip into the wall using an adapter; they power strip is made for 120 VAC, the wall outputs 240VAC, and cheap adapters just change the shape of the plug. It will go PZZT and the magic smoke will escape.
  2. DO bring toiler paper
  3. DO expect spicy food; it's delicious, but not what we eat in the US
  4. Dress well; button down shirts and blue jeans. When I was visiting, relatively few people wore t-shirts or other such garments


Compiler Development 101

Posted by chathaway on Sept. 2, 2017, 9:33 p.m.

Many sites offer tutorials on how to use things like flex, bison, and LLVM. However, these sites give code examples, with no links to the source documentation. Below I explain what each of these tools does, and explain how to access the documentation (which, with the exception of LLVM, is fairly well written).


Documentation can be accessed via "info flex" on a system with the flex-doc package installed. On ubuntu, run:

sudo apt install flex-doc
info flex

To get this documentation

A fast lexer, flex ( reads an input stream and breaks into tokens. Tokens ...


Using Git to files outside the repo

Posted by chathaway on Sept. 1, 2017, 1:29 a.m.

I decided that I wanted to keep a few files in my home directory in version control (.vimrc, .bashrc, .config/awesome), but don't like making that directory a git repo because then the shell prompts always say I'm in a branch. To fix this, I init'd a repo in my normal place then ran:

git config --local --add core.worktree $HOME

And now I can add things like "git add ~/.bashrc" without having to keep that repo in my home directory.



Forcing Diablo II to be "big" when running in window mode on KDE

Posted by chathaway on Aug. 19, 2017, 11:58 p.m.

As we all know, you can get Diablo II to run in Windows mode by passing it the "-w" option, for example:

charles@Bender:~/Games/Diablo II$ wine Diablo\ II.exe -w

On windows, you can then get it to go "big" by maximizing you. It's not possible to do this in Linux, since it's told that it doesn't support this feature. You can override this in KDE by:

  1. Right clicking on the window bar, More Options > Special Window Settings
  2. Checkmark "Size", Force, and enter a resolution that's an aspect ratio on 4:3
  3. Obey ...


A quick note about Phoenix Framework Channels

Posted by chathaway on Aug. 19, 2017, 11:54 p.m.

Just a quick note which frustrated me quite a bit on Thursday; intercepting messages (which should call handle_out) in Phoenix Framework's channels does not cause the handler to get called if you are using "send" instead of broadcast.

I suppose this actually makes sense, since you wouldn't want to stuck in an infinite loop (filtering a send, which sends something), but it wasn't obvious why Phoenix was ignoring my handle_out function. Almost like it wasn't detecting the itnercept() parameters.

A solution may be to add documentation about handle_out to the callbacks section of the Channels module ...


Page 1 of 4. next
Banner Image © 2017 Ranjani Hathaway | Content © 2017 Charles Hathaway PDF