How I moved from the west coast to the east coast

Occasionally I get questions from friends who are planning to move. How should I approach this? My answer is nearly always the same: just do it.

My move was planned out for years but I did not have a detailed logistical plan. My partner and I had been planning to move together for a few years but my initial plan to move was even years before that. When I finally made the decision to move none of that really mattered.

What you need to bring is minimal, so give yourself enough time and/or a storage locker to get all of your furniture out of your home. Beyond this, the rest is easy.

  • Find a friend in your destination city. Stay with them awhile. If they have an available room, even better! Might also be possible for them to look at places for you.
  • If you have pets, get a carrier for the flight. Check your airline for pet blackout dates.
  • On the pets topic, get a *large* carrier to store up to two pets while in transit.
  • Buy your plane ticket! Be sure to pay any pet cargo fees after you buy.
  • Get a postal redirect to your new/temporary address.
  • Buy "bankers boxes" for things you wish to bring with you. I would suggest 8 of them.

On that last point, the "bankers box" format is perfect because you can load it up with books and/or heavy dishes and still meet postal regulations.

Yup, you're going to send these by post! It is the cheapest method for few items. Greyhound is ok too, but requires you to drop off and pickup the items. In Canada, you can send things by "expedited mail" (faster than standard, slower than express). By doing so, you can opt for insurance and for a signature on delivery. The boxes will come right to your door if you are home. Each box cost me about $50 on the high end to send (I think probably $35 on the low end). Be sure to check the maximum dimensions for the post and also the maximum weight. I also purchased some 2'x2' cubes (4 square feet) from Budget rent-a-car. They are perfectly postal + airline size compliant however it is very easy to overload them. Send the boxes a day or two before you leave.

Pack your angry cats and go! Transport Canada will ask you to remove the pets from the carrier so they can swab it for potential cuteness explosions. An airline attendant helped me hold the cats as they do *not* like being in an airport. Fortunately they were both too scared to run amok at the airport.

When you arrive you'll remember everything you forgot. So go buy those things at a local shop. Get ready to replace a lot of stuff. I highly recommend checking the classified sites like Kijiji and Craigslist for those items.

The Kafei-Infinite StatusNet theme

Announcing our latest StatusNet theme!

This new theme goes a bit further than our last one - we worked from the default StatusNet base theme this time. The goal with this theme is to support mobile devices, though we ran into a couple limitations of the software so your mileage may vary on that front.

The theme supports the InfiniteScroll module well, and should work fine with your Realtime plugin.

Best of all, you can change all of the colors with a simple custom.css file. We even provided the example files that were used to produce the images in this posting.

How to Install

  • Download the latest files for kafei-infinite: [tar] [zip]
  • Unzip or untar the files in your StatusNet theme directory. The theme folder should now contain a folder called kafei-infinite.
  • Edit the custom.css file in the theme/kafei-infinite/css folder with your own custom settings... OR use the code in one of the files listed in theme/kafei-infinite/css/alternates to overwrite the theme/kafei-infinite/css/custom.css file.
  • Add the theme to your config.php file: $config['site']['theme'] = 'kafei-infinite';
  • Run the scripts/checkschema.php file from the root of your site on the command line.
  • Enjoy!

Learn Chinese writing with our StatusNet account

Have you ever wanted to learn Chinese? I took a course in university and I did not do all that well! Truth be told, I spent most of my time in the course researching linguistics and I still find the subject fascinating today. I really enjoy learning new languages!

Recently I was thinking about how the first 1500-3000 characters in Chinese are all you really need to get by. This number is much lower than in English and French so many published lists of all the "basic words" are out there. This weekend I searched for such a list and the author made the contents available for re-use. Excellent. Shortly thereafter I realized I could parse that file and make it into a flash card program... using StatusNet.

The cron-bot I built posts a random character from the list of ~2700 or so characters in this list every 10 minutes. Why so often? So you always see new stuff coming in. Also, because you can go through the *entire* list in less than 20 days at this rate.

Check it out: http://status.kafei.ca/dawei

If you have an account on identi.ca or another StatusNet service you can subscribe to this URL. RSS is also available.

You could also just visit this page every now and then. Note, there is a "play" button and a pop-up button beside it. Those can be handy for watching live updates if you want to enable it on your office desktop. ^_^

Eventually I might mirror it to twitter. Let me know what you think on my contact form at http://kafei.ca/contact

How it was done

I found a listing of the 3000 basic characters (well, more like 2700+) at this website: http://www.zein.se/patrick/3000char.html and they even mention that re-use of the materials for flash cards are ok! Excellent.

I took this file and pasted it into an OpenOffice Calc spreadsheet and cropped everything down to just the rows and columns I needed. I then exported the file to CSV format, and then proceeded to perform a few regex operations on it to get the data structure just right. I actually did this twice - once after launch to fix a bug. When the CSV file was successfully mutated into a file compatible with the command line tool "fortune" I was ready to go. I compiled fortune's "dat" file and then created a cron job to post random selections to my StatusNet site.

Now a cron job will run every 10 minutes, ask fortune for a random word from the dictionary of the first 3000ish words, and post it to StatusNet.

Why do it this way?

Every day you read your StatusNet feeds - sometimes many, many, many times over the course of the day. It makes sense to put repetitive information like this into a feed that you are going to read over and over. It also makes sense on the level of... knowing when you learned something. That is, in what order you learned it. So scrolling back you hit that point that you've already read.

It also isn't particularly important information. If you miss it... so what. It will eventually come around again. The cycle sound run in roughly 20 days. It is possible for repeats. It is totally random... as much as the fortune program can be random.

It is also possible to comment on the postings to practice using the text. That could be pretty cool, especially if working with a translator to make corrections as you go.

http://status.kafei.ca/dawei

Getting real time updates in StatusNet

Tonight I installed Meteor on my server to allow my StatusNet site to update pages automatically as the updates come in. This is enabled via the Realtime plugin.

To enable the realtime module you will need:

  • A firewall running on your web server (or in front of it)
  • A copy of Meteor on the server
  • Start / stop script for meteor if you are not running Fedora
  • Firewall customization - port mapping
  • A domain name for the server which is visible externally

Installing Meteor

Consider following Meteor's installation guide

  • Create a folder called /usr/local/meteor
  • Download the Meteor source code
  • Untar the file in your /usr/local/meteor directory (yes, it will drop files everywhere, sigh!)
  • Add a non-root user for it to run: useradd meteor
  • Copy over the configuration file: cp meteord.conf.dist /etc/meteord.conf
  • Run meteor: cd /usr/local/meteor && ./meteord -d did it run? (control-C to close it after testing)
  • Test the listener port: telnet localhost 4670
  • Test the command port: telnet localhost 4671
  • The installation guide recommends you create a startup script (cp daemoncontroller.dist /etc/init.d/meteord), however it only works on Fedora. Below is the "Debian version" I created.
  • Be sure to /etc/init.d/meteor stop your test run once your startup script is installed so you can /etc/init.d/meteor start it with the right permissions.
  • Repeat the telnet tests once you are live with your firewall settings.

Debian Startup Script

This is what I'm using in place of the file the meteor creators recommend for /etc/init.d/meteor. This one will run in Debian.

#!/bin/sh
# description: Runs meteord
# chkconfig: 2345 99 00

# Source function library.
#. /etc/init.d/functions

case "$1" in
'start')
echo -n "Starting Meteord: "
#echo 65535 > /proc/sys/fs/file-max
ulimit -n 65535
cd /usr/local/meteor
su meteor -c ./meteord >/var/log/meteord 2>&1 &
echo
;;
'stop')
echo -n "Stopping Meteord: "
killall meteord && success || failure
;;
'reload')
echo -n "Reloading Meteord configuration: "
killall -s SIGHUP meteord && success || failure
;;
*)
echo "Usage: $0 { start | stop | reload }"
;;
esac
exit 0

Firewall settings

  • Block all external connections on port 4671
  • Map an unused external port (such as 81) to port 4670

Update your config file

The last step is to add the configuration to your StatusNet config.php file.

addPlugin('Meteor', array(
'webserver' => 'example.com',
'webport' => '81',
'controlserver' => '127.0.0.1',
'controlport' => '4671'
));
addPlugin('Realtime');

This detail actually comes from the StatusNet site.

That's it! If realtime is enabled correctly you will see a play/pause button at the top of your feed and a link to a pop-up window you can use to monitor the internets all day long.

If your updates aren't working go back and check that the external world can access the port you have assigned for reading from meteor (in my example I had to ensure 81 was mapped to 4670 correctly). I had to try a couple times to get it right.

Enjoy getting real time updates!