trevor elliott
Dactyl Tight Build
After reading about the tightyl on r/ergomechkeyboards, I decided to take the plunge and build my own hand-wired keyboard. The total time to assemble it was not as substantial as I expected, but there were some long gaps during the work due to not having ordered some necessary parts.
Vim's `findfile` function
I’ve recently updated the tests for stack.yaml
and cabal.project
files in my
vim haskell plugin. The
haskell#StackYamlFileExists
and haskell#CabalProjectFileExists
functions now
take advantage of vim’s findfile
function for searching up the directory tree,
rather than just require that either file exist in the current working
directory. This change makes a bit more sense given the way that both stack
and cabal new-build
work, allowing the commands to be invoked from anywhere
underneath the directory that contains stack.yaml
or cabal.project
.
Debug Console on Xen
When debugging HaLVM domains, the writeDebugConsole
function from Hypervisor.Debug
is invaluable. However, in order to see the
messages printed, you must enable the emergency console in
Xen. This isn’t too difficult, but it’s not terribly well
documented: there are many sources that describe parts of the process, but none
that describe the whole thing.
Private DHCP
Recently I was working on a project in which I was creating loads of tap devices, with HaNS instances connected to them. Initially, I was abusing the Galois network, stealing away precious addresses from our internal /24 allocation. This wasn’t the end of the world, as I was reusing addresses I was given, but it got me thinking: shouldn’t I be able to just allocate my own addresses?
Serenade in Haskell
One of the things that I think is great about Haskell is the way that you can use the language to design new syntax. After reading a quick introduction to Serenade.js, one of the features that caught my eye was their templating system. It has a fairly elegant interface that provides a concise language for generating HTML, though it seems like a heavyweight solution, as it requires implementing a parser.