Recent Blog Posts

Ruby on Guix

August 30, 2015

I’ve been working with Ruby professionally for over 3 years now and I’ve grown frustrated with two of its most popular development tools: RVM and Bundler. For those that may not know, RVM is the Ruby version manager and it allows unprivileged users to download, compile, install, and manage many versions of Ruby instead of being stuck with the one that is installed globally by your distro’s package manager. Bundler is the tool that allows developers to keep a version controlled “Gemfile” that specifies all of the project’s dependencies and provides utilities to install and update those gems. These tools are crucial because Ruby developers often work with many applications that use different versions of Ruby and/or different versions of gems such as Rails. Traditional GNU/Linux distributions install packages to the global /usr directory, limiting users to a single version of Ruby and associated gems, if they are packaged at all. Traditional package management fails to meet the needs of a lot of users, so many niche package managers have been developed to supplement them.

read more ➔

Introducing Haunt

August 08, 2015

I am pleased to announce the first alpha release of Haunt, yet another static site generator. Does the world really need another one of those? No, but Haunt is special because it is written in Guile Scheme, a clean and elegant Lisp dialect, which allows users to compose their websites using functional programming techniques. Using a general-purpose, extensible programming language to build websites allows Haunt users to view their website as not just mere data, but a program. Haunt empowers the user to build the abstractions they need to make a great static website without getting in the way.

read more ➔

Rendering HTML with SXML and GNU Guile

April 10, 2015

GNU Guile provides modules for working with XML documents called SXML. SXML provides an elegant way of writing XML documents as s-expressions that can be easily manipulated in Scheme. Here’s an example:

read more ➔

Reproducible Development Environments with GNU Guix

November 08, 2014

If you’re a software developer, then you probably know very well that setting up a project’s development environment for the first time can be a real pain. Installing all of the necessary dependencies using your system’s package manager can be very tedious. To "solve" this problem, we have resorted to inventing new package managers and dependency bundlers for pretty much every programming language. Ruby has rubygems and bundler, Python has pip and virtualenv, PHP has composer, node.js has npm, and so on. Wouldn’t it be nice to instead have a single package manager that can handle it all? Enter GNU Guix, a purely functional package manager and GNU/Linux distribution. Using Guix, you can easily create a development environment for any software project using the guix environment tool.

read more ➔

Guile-2D is now named “Sly”

August 11, 2014

Guile-2D has been the working title for my game engine written in Guile Scheme for over a year now. The name has become limiting since I realized that it wouldn’t be much extra work to support 3D graphics. After much indecision, I’ve finally decided on an official name: Sly. I think it’s a great name. It’s short, easy to type, and slyness is one of the definitions of “guile”.

read more ➔

Live Asset Reloading with guile-2d

May 04, 2014

Guile-2d provides a dynamic environment in which a developer can build a game incrementally as it runs via the Guile REPL. It’s nice to be able to hot-swap code and have the running game reflect the changes made, but what about the game data files? If an image file or other game asset is modified, it would be nice if the game engine took notice and reloaded it automatically. This is what guile-2d’s live asset reloading feature does.

read more ➔

Functional Reactive Programming in Scheme with guile-2d

March 09, 2014

Last month, the GNU Guile project celebrated the 3rd anniversary of its 2.0 release with a hacker potluck. Guilers were encouraged to bring a tasty hack to the mailing list to share with everyone. My dish was a simple functional reactive programming library.

read more ➔

A Cooperative REPL Server for Guile 2.0.10

January 24, 2014

The next release of GNU Guile, 2.0.10, is to be released “real soon now”. My contribution to this release is the new (system repl coop-server) module. This module introduces a useful variant of the REPL server that I’ve named the “cooperative” REPL server. It is cooperative because it can be integrated with single-threaded programs without the thread synchronization issues present in the ordinary REPL server.

read more ➔

Syncing Required Packages in Emacs

December 30, 2013

I use Emacs on several different computers. To keep my configuration consistent across all of them, I do what many people do and made the ~/.emacs.d directory a git repository. I don’t like to keep copies of all of the Elisp extensions that I use, such as paredit and geiser, in this repository. Instead, I prefer to use package.el (introduced in Emacs 24) with the MELPA repository. This saves me from having to manually keep all of the extensions I use up-to-date, but requires another method to keep useful packages in sync between computers.

read more ➔

Jump to Jasmine Specs with Rinari

December 17, 2013

I use the rinari Emacs mode to assist me when working on rails projects. One of rinari’s most useful features is the ability to quickly jump from one file to another related file. I use this feature almost exclusively for jumping between a ruby class file and its associated rspec file, but lately I’ve been spending most of my time writing javascript. At VHL, we use jasmine for our unit testing framework and the jasmine ruby gem to integrate it with our rails projects. Rinari doesn’t have any built-in jump settings for jasmine test files, so I wrote this quick hack to make it work:

read more ➔
🡐 NewerOlder 🡒