I'm happy to announce that Chickadee 0.8.0 has been released!
I'm happy to announce that Chickadee 0.8.0 has been released!
I'm happy to announce that Guile-SDL2 0.7.0 has been released! Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared library. The bindings are written in pure Scheme using Guile's foreign function interface.
I'm happy to announce that Chickadee 0.6.0 has been released!
I'm happy to announce that Chickadee 0.5.0 has been released!
I'm happy to announce that Guile-SDL2 0.5.0 has been released! Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared library. The bindings are written in pure Scheme using Guile's foreign function interface.
Last week I attended a talk called "Account Automation and Temporary AWS Credential Service" presented by two security engineers at Riot Games during the AWS re:Inforce conference in Boston. During this talk they released a neat tool called Key Conjurer under the Apache 2.0 license.
I'm happy to announce that Chickadee 0.4.0 has been released!
I'm happy to announce that Guile-SDL2 0.4.0 has been released! Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared library. The bindings are written in pure Scheme using Guile's foreign function interface.
Haunt version 0.2.4 has been released. This is a quick bug fix release, addressing a bug in enclosure support for Atom feeds. See the 0.2.3 release announcement for more information.
I am pleased to announce the release of Haunt version 0.2.3. This release adds support for podcasting. The existing Atom feed support was extended to render “enclosures”, the construct for linking to external files, such as an OGG file containing a podcast episode. Additionally, Christopher Lemmer Webber (you may know them from their work with GNU MediaGoblin and the ActivityPub federated social media specification) contributed RSS feed support, which will allow podcasts that use Haunt to work with podcasting applications that do not understand Atom.
I'm happy to announce that Guile-SDL2 0.3.1 has been released! This
is a simple maintenance release that adds support for the upcoming
Guile 3.0 featuring JIT compilation. However, one new SDL2 binding
has snuck in. Thanks to Eero Leno for wrapping the
I'm happy to announce that Chickadee 0.3.0 has been released! It has been more than a year and a half since the last release so I figured it was about time!
If you're in the Cambridge, MA area or already planning to attend the LibrePlanet 2018 free software conference, come learn about functional package management at my talk: Practical, verifiable software freedom with GuixSD.
I am pleased to announce the release of Haunt version 0.2.2. This release contains bug fixes accumulated over the past year.
I am pleased to announce the release of Haunt version 0.2.1. This release features a new reader for the Markdown format via guile-commonmark as well as small improvements to the Atom feed generator and documentation.
I am pleased to announce the release of Haunt version 0.2. This release features new readers for the Texinfo and Skribe markup formats, an Info manual, small improvements to the Atom and blog builders, and bug fixes.
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.
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.
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:
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.
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”.
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.
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.
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
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.
I have spent some of the last month working on contributing to GNU
Guile and now I can finally say that I have contributed code to the
project. Guile has several hash table implementations: a Guile native
one, SRFI-69, and R6RS. SRFI-69 contains a handy procedure,
alist->hash-table, which allows for a sort of hash literal-like
Over the weekend, I decided to try out GNU Guix: A fully functional package manager based on Nix and a distribution of the GNU system. I’m a big proponent of GNU Guile, thus I was excited to see a DSL for package management written with Guile.
I spent my weekend at MIT at the GNU 30th anniversary hackathon. I had never participated in a hackathon before and was excited to see what it was like. Developers from many GNU and non-GNU projects were there to hack and help others get involved, and RMS was there to give the keynote speech.
To celebrate the GNU Project’s 30th anniversary, I have decided to make the very first release of my 2D game development framework for GNU Guile. GNU Guile is a Scheme implementation, and has the honor of being the official extension language of the GNU project. Guile-2D is a layer above SDL, OpenGL, FreeImage, and FTGL that provides abstractions for common 2D game programming requirements such as sprites, tilesets, animations, scripting, and collision detection.
I had been looking for a suitable replacement to my old, slow Compaq laptop that I purchased during my freshman year of college when I had very little money. What I liked about my old laptop was that it played well with free software. I had no trouble getting all of my hardware to work out-of-the-box with fully free GNU/Linux distributions such as Trisquel, and I wanted any future laptops of mine to play nicely, too.
I am working towards a 0.1 release of my game development framework for GNU Guile, guile-2d. One of the few remaining blockers on my to-do list is font rendering. A reddit user, Madsy9, pointed me in the right direction with this comment. There are two libraries needed to perform nice font rendering with proper internationalization support: Pango, “a library for laying out and rendering of text, with an emphasis on internationalization,” and Cairo, “a 2D graphics library with support for multiple output devices.”
Yesterday, I took a trip to the MIT Press Bookstore and picked up a copy of The Little Schemer. I’ve only spent a few hours reading and coding along with it, but I’ve had a lot of fun. The following is a mini-review based on my experience thus far.
This is the very first devlog entry for my pet project, guile-2d. As the title suggests, guile-2d is a 2D game development framework for GNU Guile, a Scheme implementation that has the honor of being the official extension language of the GNU project. Guile is a language with a growing number of features, but it still lacks a large assortment of libraries. I like to do 2D game programming, and I saw a niche that needed to be filled. Python has Pygame, Lua has Love, but there’s no fun and accessible game programming library for Guile. Guile-2d is working to correct that.
Everyone that’s ever talked to me about software development knows that I am in love with Emacs. Emacs has a wonderful keyboard driven interface and is almost infinitely customizable via Emacs Lisp. I’ve done a lot of programming in Emacs from my not-so-great laptop lately. My laptop has a rather poor 1280x800 resolution and low performing integrated graphics chip. Until today, I was running the GNOME 3 desktop environment on it. Unlike most people (or perhaps just a loud minority), I like GNOME 3. However, I wanted something that was both less graphics intensive and more keyboard driven than GNOME Shell and Mutter.
Every summer, my friends and I go to Maine for a week. We stay in the Rockland area in an old house on a blueberry field. This year we hiked a mountain in Camden, hiked Mt. Katahdin, and went to the Rockland Blues Festival.
With all of the recent news about the NSA’s widespread spying, I have decided to ween myself off of proprietary, centralized web services. Facebook, Google, and other such corporations hold onto massive amounts of our data that we’ve willingly given to them via status messages, “like” buttons, searches, and emails. Using and contributing to free (as in freedom), decentralized (like email) web services is a really great way to re-establish control of our data. These services rely on many small, interconnected nodes to operate, rather than a monolithic website that is under the control of one entity. If the distinction between centralized and decentralized isn’t clear, consider how email functions. There are many email providers to choose from. Users can communicate with others that choose to use a different email provider. This is how web services should work, but unfortunately very few work this way now.
I spend a lot of my free time writing code. I usually work on my own personal projects that never really go anywhere. So, I decided to take a detour from my normal hacking routine and contribute to an existing free software project. My contribution was accepted awhile ago now, but I wasn’t blogging then so I’m rambling about it now.
Hey! I have a shiny new website. I just purchased a cheap VPS from Digital Ocean and registered the dthompson.us domain for this site. Instead of the going the Wordpress route (or using similar blogging software), I’ve decided to use a static site generator called Pelican after seeing that the Linux kernel website was using it. I’m going to use this site to host this blog, my resume, and information about my software projects.