A Ghost blog (not a blog about ghosts).

Switching over from Textpattern to Ghost

I recently switched Horrell.ca from Textpattern to Ghost. Chances are there are a bunch of broken links to files and such. I'm still tweaking and fixing things and reworking the site design, so expect more changes in the coming months :)

For anyone else who wants to attempt this, a word of warning: there's no easy way to export content from Textpattern to import into Ghost. Ideally, a Textpattern plugin for this would help tremendously, but I wasn't able to find one. I was going to attempt to create one myself, but it's been so long since I've worked in PHP or created a Textpattern plugin that it didn't seem to be worth my time. Instead I (mostly) followed the instructions I found here. The short version of what you have to do: you need to temporarily setup a WordPress blog, import your Textpattern posts into that, then export your posts via a Ghost WordPress plugin, then import into Ghost. Yeah. If you use Textpattern and are thinking about moving to Ghost, it might be best to wait for a bit until bettor options come up.

Despite all that, at least for me, the switch has been worthwhile. It's a great platform for writting and since it runs on Node.js, it's very light on resources. I was able to resize my current Joyent SmartOS instance down significantly since removing Apache and MySQL from the equation.

Speaking of SmartOS instances, I created a handy script for getting Ghost up and running on Joyent called smarty-ghost . It works fairly well and takes care of setting up the SMF manifest for you. I'll be improving that script over time and the install process should become much simpler when Ghost becomes an published npm package.

Oh, and while I was moving things around on my site I put all the Textpattern plugins I created over the years on GitHub. I probably won't be using Textpattern much or contributiing to the ecosystem anymore, but my old code is out there for anyone who might find it usefull. Here's a list of links to each plugin repo:

I could watch this all day


Installing mod_cloudflare on a Joyent SmartMachine

CloudFlare is a great service and I’ve been using for my horrell.ca site for some time. It speeds everything up, acts as a firewall protecting your site from bots and jerks, and also provides IPv6 support. One side affect of using CloudFlare is the Apache logs for your site will show IP addresses from the CloudFlare network for any site visitors rather than the true visitors IP address. You can fix that by installing the mod_cloudflare Apache module.

Here’s how to install it on a new Joyent SmartMachine

  1. First, download the mod_cloudflare.c source file from CloudFlare’s Github repos (the -L flag makes sure curl follows any redirects):

    curl -OL https://raw.github.com/cloudflare/CloudFlare-Tools/master/mod_cloudflare.c
  2. Install the gcc compiler:

    pkgin install gcc47
  3. Now compile and install the module:

    apxs -c -i mod_cloudflare.c

    If you have a 64 bit machine, you’ll need to use something like this instead:

    apxs -Wc,-m64 -Wl,-m64 -c -i mod_cloudflare.c
  4. Set the permissions:

    chmod 755 /opt/local/lib/httpd/mod_cloudflare.so
  5. Add this to your /opt/local/etc/httpd/includes/dso.conf (this will load the module when Apache starts):

    LoadModule cloudflare_module lib/httpd/mod_cloudflare.so
  6. Now refresh Apache to load the module:

    svcadm refresh apache

And that’s it! If you check your Apache logs (/var/log/httpd/access.log or /home/NAMEOFSITE/logs/access.log) you should start seeing accurate IP addresses.

You can check if the installation went smoothly with:

svcs -vx apache

If Apache is in maintenance, chances are something went wrong with loading the module. The /var/svc/log/network-apache:default.log service log file will give an idea of what you need to fix.

Periodically, CloudFlare adds new IP addresses to their network, so you’ll need to reinstall the module. You don’t need to do anything special for that, just repeat the above steps using the updated mod_cloudflare.c. source file. I follow the git repos for changes (which doesn’t happen that often).

Adding Icons to Folder Names in iOS

The introduction of folders to iOS was a welcome addition to keeping your home screen tidy. Folders allows you to sensible group like applications and then give the folder a given name, like "Games" for all your game apps etc. In iOS 5, Emoji support was added which means you can also use Emoji as icons in your folder names for added bit of flare, like this:

iPHone home screen

Cool huh?

So here's what you need to do to enable Emoji and then use it in a folder name.

First, enable Emoji support by going to SettingsGeneralKeyboardInternational KeyboardsAdd New KeyboardEmoji

All done? Good! Now, touch and hold a folder you want to add an Emoji icon to and then touch it again and you'll see something like this:

Edit folder name screen

Cool, now touch the folder name (in this example Games) and you'll see something like this:

You may have noticed the new globe icon on the keyboard . Touch it and you'll see something like this:

Emoji Keyboard

Tada, an Emoji keyboard!

From here, pick the Emoji you'd like to use, insert it into the folder name (I like to put them at the beginning), touch the globe icon again and then touch Done. The keyboard will then disappear and you can press the Home button to save you changes.

You may have noticed that I had an  icon for the folder in the top right, but that icon is not actually available via the Emoji keyboard. I used Neven Mrgan’s cool Glyphboard (Glyphboard iPhone web app) to add it. From Glyphboard, I just copied the  icon and then pasted it in the folder name.

Installing node and npm on a Joyent SmartMachine

Here are some updated instructions for installing the latest stable version of node (v0.4.12), as well as npm, on a Joyent SmartMachine.

These instructions install node in the ~/local directory avoiding the need for root privileges when installing things with npm, which is bad.

First, create a ~src/ directory — this is where we’ll download the latest version of node.

mkdir ~/src  
cd ~/src  
curl -O http://nodejs.org/dist/node-v0.4.12.tar.gz  

Now untar it:

gtar -xpf node-v0.4.12.tar.  

Create the @~/local@ directory if it doesn’t already exist:

mkdir ~/local  

Now lets add it to your PATH:

echo 'export PATH=$HOME/local/bin:${PATH}' >> ~/.bashrc  
. ~/.bashrc

Now, configure, build, and install node:

cd node-v*  
./configure --with-dtrace --prefix=~/local
gmake install  

The gmake part will probably take the longest. And you’ve probably noticed I’m using gtar instead of tar and gmake instead of make. There are some difference between the Solaris versions and the GNU versions.

Ok, now let’s get things setup for npm:

echo tar = gtar >> ~/.npmrc  
echo root = $HOME"/.node_libraries" >> ~/.npmrc  
echo binroot = $HOME"/local/bin" >> ~/.npmrc  
echo manroot = $HOME"/local/share/man" >> ~/.npmrc  

Ok, now lets install npm:

curl http://npmjs.org/install.sh | sh  

And that’s it!

Disabling the Caps Lock Key on a Mac

I hate the caps lock key. Hate. I'm always, always pressing it by accident. I don't do it that often on my iMac, but boy howdy, I click it all the time on my MacBook Pro. At my old gig, when I did the nine to five thing in a beige cubicle (it might have been a dirty white, actually) I removed it from the keyboard and put it in a drawer (see blurry photo here. Now that's just not something I want to do with my Mac hardware. The IBM keyboard at work was easy enough, but I don't even know if it's possible on the newer Mac keyboards. Plus it looks bad and isn';t the most elegant solution so I've had to put up with it. Until now!

If you own a Mac and have the same stewing hate for the caps lock key that I do, here's how you can disable it.

  1. Open System Preferences
  2. Select Keyboard
  3. Click the Modifier Keys... button. You should now see something like this:
    Modifier Keys preference
  4. Change the Caps Lock key value to No Action so that it looks like this:
    Modifier Keys preference, Caps Lock key disabled
  5. Click OK.

And thats it, no more caps lock key madness!

com.akamai.client.plist errors

So you use a Mac and you notice that you see lots of errors like this in the Console.app application:

10-12-20 2:43:38 PM    com.apple.launchd.peruser.501[242]  (com.akamai.client.plist[8486]) posix_spawn("/Applications/Akamai/loader.pl", ...): No such file or directory  
10-12-20 2:43:38 PM    com.apple.launchd.peruser.501[242]  (com.akamai.client.plist[8486]) Exited with exit code: 1  
10-12-20 2:43:38 PM    com.apple.launchd.peruser.501[242]  (com.akamai.client.plist) Throttling respawn: Will start in 10 seconds  

This happens every ten seconds and you may even notice some performance issues with your Mac because of this. Thanks to this post from Ignored By Dinosaurs, I was able to finally figure out the cause. This error shows up after you've deleted the Akamai download manager that Adobe forces you to use to download one of their products.

I have a different solution to getting rid of this error though, one that does not involve downloading the Akamai download manager again.

First, start the Terminal.app application (located in the /Applications/Utilities folder).

Next, in Terminal.app run this:

launchctl unload ~/Library/LaunchAgents/com.akamai.client.plist  

That will stop the annoying com.akamai.client.plist job and unload it's launchd config.

Now let's remove the com.akamai.client.plist config completely so it doesn't start up again. From Terminal.app, run this:

rm -rf ~/Library/LaunchAgents/com.akamai.client.plist  

Now, log out and back in again. You can verify the com.akamai.client.plist entry is not loaded by running this from Terminal.app:

launchctl list com.akamai.client.plist  

If it produces the launchctl list returned unknown response error, then you know it's gone.


Installing node.js on a Joyent SmartMachine

UPDATE These instructions have been replaced by the much better instructions here: Installing node and npm on a Joyent SmartMachine

Here's a little tip for installing node.js (latest) on a Joyent SmartMachine (formerly called an Accelerator).

First, you'll need to be root, so lets get that out of the way:

su -  

Next, create a ~src/ directory in the home directory of root and download node.js:

mkdir src  
cd src  
curl -O http://nodejs.org/dist/node-latest.tar.gz  

untar it:

gtar -xpf node-latest.tar.gz  

Now, configure, build, and install:

cd node-v*  
gmake install  

The gmake part will probably take the longest. And you've probably noticed I'm using gtar instead of tar and gmake instead of make. There are some difference between the Solaris versions and the GNU versions.

And that's it!