Still coming

This week has been hectic, with various job related things going on.


Lack of updates due to…

Secret new project

Error: Invalid Map Provider

Using WindowMaker

As debate rages on about GNOME vs XFCE vs Unity vs KDE, I decided to take a trip back to where I got started: WindowMaker.

Over the coming weeks I’m going to keep track of my progress.

Error: Invalid Map Provider

jquery, raspberry pi, via apc and arduino

I’ve been playing with jquery a lot lately, doing animation on the web that I previously ignored. The real hero is actually jquery ui, a library for doing the kind of snazzy hiding (and showing) of things I’ve come to enjoy spending my time doing.

I’ve bought a few hardware toys this week: an arduino uno that was originally going to be a cheap clone but wasn’t, the apc from via which promises and delivers a full PC for fifty bucks and a raspberry pi which arrived yesterday. The apc will get much more attention, in no small part because of its free bootloader vs the locked down pi. As for the arduino, I am sorely tempted to pick up another and wire up a Retro computer, with code in basic.

Error: Invalid Map Provider


At the Iron Blogger event.


Error: Invalid Map Provider

Busy week

Not much to say. How are you?

Error: Invalid Map Provider

Kings of War

Everything is basically ready for the upcoming public release of Kings of War. All the lists and rules are in place, and Mantic has shipped all the Kickstarter books.

Error: Invalid Map Provider

Installing concrete5 on Debian

Today I spent a little time looking at concrete5 — a PHP-based content management system I’d never heard of until recently. The message of concrete5 is strong “CMS made for Marketing but built for Geeks” — and so I decided to take a look at just how geek friendly it was. My first step was to get it installed and configured on Debian — the web server operating system of choice for many geeks.

The first step was to head over to the concrete5 website and download the software.

From the download page, I chose “Download from Sourceforge” as it’ll be quicker and easier to download it directly to my server from Sourceforge.

Once on the Sourceforge page, I simply right-click on the download button, and copy the link address. This is a nice, simply trick that’ll give me a URL I can paste directly into a terminal running on my server.

Paste that URL into a temporary text document for now, you’ll need it again later.

Now, I head over to my server for a few quick steps that’ll make installing concrete5 easy. These steps are:

  • Installing Apache, MySQL and PHP.
  • Configuring Apache with a temporary hostname for our testing site.
  • Creating a MySQL database and user for concrete5.
  • Extracting the concrete5 files into the correct location.
  • Fixing file permissions on the server to allow Apache to write directly to concrete’s configuration folder.

I’m connecting to my server using a command line SSH client, but you can use PuTTY or whatever other SSH client you prefer.

Installing the packages

As root, I ran the following command:

apt-get install apache2 mysql-server php5 php5-gd php-pear php5-mysql dtrx

This will give me Apache (version 2.2), MySQL server, PHP5, the Graphics Draw (GD) library for PHP, the PEAR packaging system and finally the MySQL library for PHP. I find these all to be pretty essential with virtually any PHP/MySQL application (even GNU FM and GNU social) so it’s good to have them installed.

DTRX? DTRX is a tool that “does the right extraction” — it’s a useful tool to have installed if you deal with a variety of zip, tar, etc files from various people — it’ll detect if they failed to make a folder inside the archive and avoid you having a folder full of unwanted files. And its awesome.

With this completed, I move on to the next step, configuring Apache to give me a temporary hostname for this testing site.

Temporary hostnames

If you have your own domain name, and you build a lot of testing sites, you might find it easier to use a wildcard DNS of your own and simply point ALL subdomains of your domain at your server. My DNS situation is a little more complex, and so ironically I’ve taken to using a less orthodox approach to DNS of late, but only when it comes to testing sites — these tricks are bad ideas when used in a production environment, but for testing (especially if you’re running a web server on your own laptop or desktop), they work nicely.

First, you’ll need to know the IP address of your server. I tend to use the ‘ifconfig’ program to tell me this, and to save time, a quick use of ‘grep’ will get you the exact information you need in a hurry.

ifconfig | grep "inet addr"

This will return something along the lines of:

inet addr:89.555.444.333 Bcast: Mask:
inet addr: Mask:

Or in other words, the IP addresses for all of the network devices on my computer — the one I care about is the first one, with a public facing IP address, but for your laptop you can likely skip this step and use instead (or whatever your local IP is)

With this information in hand, I set about creating, editing and enabling my Apache configuration.


Edit the file /etc/apache2/sites-available/concrete5

In this file, you’ll need the following (at a minimum)

<VirtualHost *:80>
DocumentRoot /var/www/concrete5/

In this case, is a special DNS name that includes the IP of the server and a made up name for this site, “concrete5” — is a public wildcard DNS server from 37signals that’s very useful for web developers everywhere.

Saving the file, and then typing:

a2ensite concrete5

Is all I need to tell Apache to start serving files for that site. A quick restart of Apache (as prompted) and we’re ready to move on to the next step — creating the directory structure and extracting the files.

Extracting the files

We told Apache that we were using /var/www/concrete5/ as the place for our concrete5 site. So, let’s create that location, download our copy of concrete5 from Sourceforge and extract it into the /var/www/concrete5/ folder.

mkdir -p /var/www/concrete5/

cd /var/www/concrete5/


dtrx download

DTRX will prompt you what to do with the file, press H to extract it here.

You’ll now find you have a new folder called ‘concrete5.5.2.1’ or similar and a file called ‘download’ — we’re going to tidy this mess up a little, quickly.

mv concre*/* .

rm download

rmdir concrete5.5.2.1

Now all the files are extracted, we need a database for this site.


By default, MySQL has no root password — you’ll want to fix this in a production environment.

mysql -u root

You’ll get a “mysql>” prompt, which you need to type the following two commands. Note they both have semi-colons on the end, as is the case with SQL in general.

GRANT ALL ON concrete5.* TO concrete@localhost IDENTIFIED BY 'secret';

In our example, we have a database called ‘concrete5’ and a user ‘concrete’ with a terribly insecure password.

When you’ve done this, type ‘exit’ at the ‘mysql>’ prompt and test you can log in to MySQL by typing:

mysql -u concrete -p concrete5

You’ll be prompted for your password, and if all’s well, you’ll see the ‘mysql>’ prompt again. Type exit, and let’s move on to the final steps: fixing the permissions and actually running the concrete installer.

Running the installer

In your web browser head over to the site you created earlier. In my case, it’s the fictional — you’ll see a screen that looks a little like this:

Hopefully, the only thing that’ll be wrong will be the permissions on files, which we can fix easily by typing:

chown www-data:www-data /var/www/concrete5/

Which gives Apache’s user (www-data) ownership over the concrete5 files, and permissions to create files as needed.

With that completed, head back to your browser and click the ‘Run tests’ button. Everything should be all set, and you’ll be able to process to the next screen.

Here, you’ll fill in all your own details, and server details for MySQL — hopefully you’ll not type ‘locahost’ by mistake and will actually be paying attention, otherwise you’ll get a nice red error pointing out your mistake.

Once that’s all done, you’ll get to sit and watch as concrete creates the various database tables and data for the system.


And with that, you’re all set. Now I’m off to play with templates for concrete5.


Road trip to New York

Yesterday, I took a road trip to NYC — in a U-Haul. It was the first time I’d ever really been in a car in NYC, other than small parts of cabs and a short ride in the 2600 phone van once. Traffic was intense, and constant, and yet once we got into Manhattan, it seemed to follow nicely. Getting from the outskirts of NYC to Manhattan took about 2 hours more than it should have, and in the end, I had only a few minutes to spare in NYC before taking the Acela back to Boston.

A few things I noted:

  • The NYC subway is way more complex than the Boston subway, yet if you have a general idea of where you’re going, you’re fine.
  • Getting out of the subway and trying to identify a) where I was and 2) where I was heading was something that threw me for a moment, I had to use one of those “You are here” signs
  • Amtrak Quik-Ticket machines don’t scan barcodes from smartphones, or at least not my smartphone.
  • Acela is awesome — even the food was good, the service was excellent and free booze on a train when you’re heading home after a crazy day is a lot of fun.



One liner to get all the domain names linked from a particular page

for domain in $(lynx --source |  perl -ne 'if (/href="([^"]*)"/) { print "$1\n"; }' | grep http | grep "://" ); do echo $domain | sed -e "s/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/";  done | sort -u

Also, wow… Stallman links to a ton of stuff.