Blogging in Lisp


Lisplog is a templating system that blends Apache and Hunchentoot to aid in the maintenance of a blog-like web site.

It is open source, written in Common Lisp, and the code is at

I'm looking for work. My resumé is at

ReadErl Is Live

Submitted by Bill St. Clair on Sat, 31 Oct 2015 02:30:20 GMT

As my first Erlang project, I decided to create a multi-user RSS aggregator, sort of a simplified version of Google's now defunct "Reader". I named it ReadErl. I bought the domain, put up a static HTML "coming soon" page, and created an Erlang shell to fill in. My initial idea was to write the code in Erlang and use Chicago Boss for the web framework.


Then I discovered Elixir and the Phoenix web framework. Blown away. So I switched ReadErl to use those, created a simple Phoenix project, edited its default templates to make the result look pretty much like my original static HTML page, started up a brand new $5/month Digital Ocean droplet, and got it running there.


After getting up the initial page, I decided I wanted it to self-document the versions of the software on which it's based. That's now displayed in small type at the bottom of the page.

Here's how I did it (thanks to utkarshkukreti for the better way to get the :vsn of an app):

<div class="small text-center">
  <%= :erlang.system_info(:system_version) %><br/>
  Elixir: <%= System.version %>,
  Phoenix: <%= {:ok, vsn} = :application.get_key(:phoenix, :vsn); vsn %>

Add comment   Edit post   Add post

Audio Hijack 3

Submitted by Bill St. Clair on Fri, 16 Oct 2015 16:02:11 GMT

When I updated my iMac to El Capitan, one of the applications that didn't work was a year-old version of Audio Hijack Pro. I updated today, to Audio Hijack 3 which replaces the old Audio Hijack & Audio Hijack Pro. Audio Hijack allows you to record sound, from any application on your Mac.

Audio Hijack 3 icon

The new version has a graphic signal path designer, allowing you to pick sources, recorders, outputs, and filters. Cool. Here it is in action, recording an MP3 playing in Firefox (click for full-size image):

Audio Hijack 3 in Action

Images appear in a recordings window, where you can label them for your audio player software (again, click for full-size image):

Audio Hijack 3 Recordings screen

Add comment   Edit post   Add post


Submitted by Bill St. Clair on Sat, 10 Oct 2015 22:14:06 GMT is the web site of a "US consulting group with development resources in Buenos Aires, Argentina." "Inaka is composed of a team of 30 developers, project managers, and designers and is wholly owned and operated by Erlang Solutions Inc - a Washington State corporation and subsidiary of Erlang Solutions Ltd."

I just added their blog's RSS feed to my news aggregator.

There's an Easter egg in their web site's template:


Add comment   Edit post   Add post

More News Feeds

Submitted by Bill St. Clair on Fri, 09 Oct 2015 11:33:53 GMT

I did a Google search for "Erlang blogs" and added some more RSS Feeds to the news aggregator:

Add comment   Edit post   Add post

Comitting to a GitHub Pull Request Branch

Submitted by Bill St. Clair on Fri, 09 Oct 2015 09:14:42 GMT

A GitHub pull request submits a branch of a fork of a repository back to the repository it came from. I've wondered about a line on that page:

Add more commits by pushing to the master branch on [forked repository].

So I did an experiment. I created the billstclair/pull-request-repository with only a README in it. I forked that repository to riak-wws/pull-request-experiment, I committed a change to the fork and created a pull request. I committed another change to the fork. That change, as hinted by the quoted line above, also showed up in the pull request.

This is convenient for fixing problems with pull requests, but the take-away for me is that if I expect to do work in a fork with a pull request that is NOT part of the pull request, I should make a new branch just for the pull request.

Add comment   Edit post   Add post

Controlling Rebar3 Application Compile Order

Submitted by Bill St. Clair on Fri, 09 Oct 2015 08:04:41 GMT

I recently spent a few days building the oc_erchef Erlang application inside the chef-server repository, as reported here. I discovered that in an application with sub-applications, stored in the apps/ directory, the order of referencing those sub-applications in the main .app.src file does not affect rebar3's compilation order. Only the dependencies between the sub-applications has an effect on compilation order.

I created the rebar3-app-dependency repository to illustrate this. See its README for details.

Also see Erlware's description of the rebar3 tree command in Rebar3 Features (part 2): Dependency Tree.

Add comment   Edit post   Add post

Universal Crypto Keychains

Submitted by Bill St. Clair on Thu, 08 Oct 2015 17:02:41 GMT

An idea crossed my mind this morning. I'm calling it "Universal Crypto Keychains". Those of us who use PGP (usually as GnuPG) are accustomed to having a keychain containing our private keys and the public keys of our correspondents. Wouldn't it be nice if that keychain gave you access to wifi routers and web sites. Instead of establishing a userid and password at a plethora of sites, you'd give them the public key corresponding to one of the private keys in your keychain.

I think this is what OpenID is supposed to be about, but I've seen very little adoption. The only web site I use that supports it is, where I get my free web site SSL certificates (until Lets Encrypt takes off).

Why have people been so slow to adopt this? There's a WordPress plugin. There are libraries for PHP, Ruby, Python, .Net, Java, Erlang, Lisp, and I'm sure others.

Add comment   Edit post   Add post

mod_spdy with Apache 2.4.7 on Ubuntu 14.04

Submitted by Bill St. Clair on Wed, 07 Oct 2015 10:58:36 GMT

Just for yucks, I installed mod_spdy on my web server. I built it using the code and directions from, and configured it using the directions from from the Thomas Elsen Security Blog.

I checked that it works with SPDYCheck.

I now get a bunch of these annoying warnings when I restart apache2:

AH02559: The SSLCertificateChainFile directive (/etc/apache2/sites-enabled/ is deprecated, SSLCertificateFile should be used instead

It looks pretty obvious how to fix them, but that may add an additional step to disabling the patch I just installed, so I think I'll keep it, as a reminder. I also left mod-spdy.txt in /etc/apache2, with uninstall instructions. Physical reminders are the best.

It would be better to enable HTTP/2. Apache doesn't yet support that. Maybe I should switch to nginx, but I'm too lazy at present to figure out how to configure it for my web site, especially its 29 .htaccess files. Maybe Ubuntu 16.04 will include a newer Apache version that supports it.

Add comment   Edit post   Add post

"stty -echo" in Emacs Shell

Submitted by Bill St. Clair on Tue, 06 Oct 2015 16:20:41 GMT

I finally found today how to eliminate an Emacs shell behavior that's been bothering me for seemingly ages. Sometimes it gets in a mode where it echoes every command. stty -echo turns that off. Yay! Thanks to Barry Margolin for this post in the Google group.

$ emacs
m-x shell
$ stty echo    # This happens somehow, causes bold lines below
$ pwd
$ echo foo
echo foo
$ stty -echo   # do this to fix
stty -echo
$ pwd
$ echo foo

Add comment   Edit post   Add post


Submitted by Bill St. Clair on Sat, 03 Oct 2015 17:50:23 GMT is a small collection of simple shell scripts that I've written over the years.

Documented by its README.


Add comment   Edit post   Add post