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

Barlow's Declaration Turns Twenty

Submitted by Bill St. Clair on Tue, 09 Feb 2016 11:53:05 GMT

Jan Haas of AP at Wired - Its Been 20 Years Since This Man Declared Cyberspace Independence - On 8 February, 1996, John Perry Barlow first published the Declaration of Independence of Cyberspace. It is as true, relevant, and important today as ever. Thank you, sir!

A Declaration of the Independence of Cyberspace
by John Perry Barlow

Governments of the Industrial World, you weary giants of flesh and steel, I come from Cyberspace, the new home of Mind. On behalf of the future, I ask you of the past to leave us alone. You are not welcome among us. You have no sovereignty where we gather.

We have no elected government, nor are we likely to have one, so I address you with no greater authority than that with which liberty itself always speaks. I declare the global social space we are building to be naturally independent of the tyrannies you seek to impose on us. You have no moral right to rule us nor do you possess any methods of enforcement we have true reason to fear.

Governments derive their just powers from the consent of the governed. You have neither solicited nor received ours. We did not invite you. You do not know us, nor do you know our world. Cyberspace does not lie within your borders. Do not think that you can build it, as though it were a public construction project. You cannot. It is an act of nature and it grows itself through our collective actions.

You have not engaged in our great and gathering conversation, nor did you create the wealth of our marketplaces. You do not know our culture, our ethics, or the unwritten codes that already provide our society more order than could be obtained by any of your impositions.

You claim there are problems among us that you need to solve. You use this claim as an excuse to invade our precincts. Many of these problems don't exist. Where there are real conflicts, where there are wrongs, we will identify them and address them by our means. We are forming our own Social Contract. This governance will arise according to the conditions of our world, not yours. Our world is different.

Cyberspace consists of transactions, relationships, and thought itself, arrayed like a standing wave in the web of our communications. Ours is a world that is both everywhere and nowhere, but it is not where bodies live.

We are creating a world that all may enter without privilege or prejudice accorded by race, economic power, military force, or station of birth.

We are creating a world where anyone, anywhere may express his or her beliefs, no matter how singular, without fear of being coerced into silence or conformity.

Your legal concepts of property, expression, identity, movement, and context do not apply to us. They are all based on matter, and there is no matter here.

Our identities have no bodies, so, unlike you, we cannot obtain order by physical coercion. We believe that from ethics, enlightened self-interest, and the commonweal, our governance will emerge. Our identities may be distributed across many of your jurisdictions. The only law that all our constituent cultures would generally recognize is the Golden Rule. We hope we will be able to build our particular solutions on that basis. But we cannot accept the solutions you are attempting to impose.

In the United States, you have today created a law, the Telecommunications Reform Act, which repudiates your own Constitution and insults the dreams of Jefferson, Washington, Mill, Madison, DeToqueville, and Brandeis. These dreams must now be born anew in us.

You are terrified of your own children, since they are natives in a world where you will always be immigrants. Because you fear them, you entrust your bureaucracies with the parental responsibilities you are too cowardly to confront yourselves. In our world, all the sentiments and expressions of humanity, from the debasing to the angelic, are parts of a seamless whole, the global conversation of bits. We cannot separate the air that chokes from the air upon which wings beat.

In China, Germany, France, Russia, Singapore, Italy and the United States, you are trying to ward off the virus of liberty by erecting guard posts at the frontiers of Cyberspace. These may keep out the contagion for a small time, but they will not work in a world that will soon be blanketed in bit-bearing media.

Your increasingly obsolete information industries would perpetuate themselves by proposing laws, in America and elsewhere, that claim to own speech itself throughout the world. These laws would declare ideas to be another industrial product, no more noble than pig iron. In our world, whatever the human mind may create can be reproduced and distributed infinitely at no cost. The global conveyance of thought no longer requires your factories to accomplish.

These increasingly hostile and colonial measures place us in the same position as those previous lovers of freedom and self-determination who had to reject the authorities of distant, uninformed powers. We must declare our virtual selves immune to your sovereignty, even as we continue to consent to your rule over our bodies. We will spread ourselves across the Planet so that no one can arrest our thoughts.

We will create a civilization of the Mind in Cyberspace. May it be more humane and fair than the world your governments have made before.

Davos, Switzerland
February 8, 1996

Add comment   Edit post   Add post

Hello Again Old Friend

Submitted by Bill St. Clair on Mon, 08 Feb 2016 20:02:10 GMT

I think it's been over three years since I took my Colt AR-15 out of the safe. I used to go to the range at least once a week, with the AR quite often, though it had to share time with the M1A, the 444 Marlin, and my two most fun rifles, a Henry lever-action .22 and a 44 Marlin. Hand-loaded cowboy-action .44 Magnum lead-bullet loads make that Marlin one sweet rifle to shoot.

But I stopped improving and lost interest. Also, ammunition got a lot more expensive. Well, for some reason I decided today to field strip, clean, and oil the AR. Not a speck of rust, thanks largely I think to the Bullfrog Rust Blocker Emitter in the safe.

I usually clean and lubricate with BreakFree CLP (Cleaner, Lubricant, Preservative). That may also share responsbility for the lack of rust. Sometimes I use Bullfrog Rust Hunter Gun Wipes.

I clean the barrels of my rifles with exclusively Hoppe's BoreSnake Rifle Bore Cleaners (which I forgot to put in the image below). Since I discovered them many years ago, I haven't used a regular cleaning rod. I use shotgun cleaning patches soaked with BreakFree to clean the outside, but the inside stays shiny with only BreakFree on the BoreSnake. And a softly-sharpened wooden dowel helps with the nooks and crannies.

Must be time to take this rifle to the range.

Click on either image for the full-resolution version.

Colt AR-15 field-stripped
Colt AR-15 field-stripped and cleaned

Colt AR-15
Colt AR-15 reassembled after cleaning

Add comment   Edit post   Add post

Mail-in-a-Box Rocks!!

Submitted by Bill St. Clair on Tue, 19 Jan 2016 20:15:08 GMT

A couple of years ago, I set up a low-end Dell rack-mount server box for a friend of mine. It's running a bunch of Wordpress sites and a mail server in a server room in Montana. Rock solid.

In order to set up the mail server on that box, I followed a Howto I found on the web. It took a day or two to get just the email set up, and I never felt very confident about it, though it works to this day.

Well, that Montana hosting company charges $70/month to house, power, and feed the net to the box. In a few hours yesterday and today, I set up a Digital Ocean droplet for the web sites and another for the mail server. Two times $10/month = $20/month total. We'll switch over soon, and maybe my friend can get someone to buy her Dell server.

To set up the mail server droplet, I used Mail-in-a-Box, following Digital Ocean's installation instructions. It took an hour total (I still have to set up the DNS, but that shouldn't take long).

Yow! Mail-in-a-Box rocks!!

Add comment   Edit post   Add post

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