Sunday, 9 November 2008

Flyback and TimeVault. Time Machine for Linux.

Whilst I was looking at Apple's Airport Extreme to see if it would replace my current Netgear DG834N (which isn't playing very nicely at all), I stumbled across a few projects that provide something akin to Leopard's Time Machine functionality for Linux.


The first is Flyback, a Google Code project based on rsync.  It has a Python GUI interface to administer the backups and is extremely simple on the backend.


The next is TimeVault, an Ubuntu project.  It integrates with Nautilus seamlessly to provide easy restore functionality.  It works by watching directories for any changes and then keeping a backup copy of the files and directories that have changed.  SQLite is used to keep a database of the backups and uses file hashing and an internal directory structure to store the actual file backups.  Disk usage is reduced by using hardlinks to files that haven't changed.


All of these solutions lack the whizzy 3D interface that Time Machine provides but at the end of the day it's about the resilience and not the graphics.  If you're running Linux, chances are that you don't need a 3D interface for your backup and restores anyway.

Friday, 7 November 2008

Dopplr shift

Dopplr is a great social-networking based tool for keeping a track of your travel plans. 


The idea is that you input your travel details and it will find other people going to the same location (or nearby) at the same time. 


If your social network members keep their details up-to-date then you might just find yourself engaged in an impromptu party in a foreign city instead of watching TV in a language you don't understand whilst slowly emptying the mini-bar and your wallet.


Another feature of Dopplr, if you're interested, is the ability to calculate your carbon footprint.


Dopplr even provides webcal links so that you can subscribe to your travel calendar.  Using this functionality, Google Calendar and BusySync, the details on from my Dopplr account appear on my iPhone, automagically.  Handy!


Another weapon in my online arsenal of useless rubbish.  ;)

Saturday, 1 November 2008

Bye bye Drupal. Hello Wordpress!

As you can probably see, I have moved this site from Drupal to Wordpress.


Why? 


The themes are nicer, the modules are better and it seems to be a much more professional project overall.


I've run a basic conversion script over the database for now and, as a consequence, there will be a whole lot of clean-up required. 


Being new to Wordpress means that this might take a little time.


I'm going to use Flickr for photo management and have the Flickr module installed, but I will obviously need to get all my photos online before they'll be available.


I also hope to blog more from the iPhone - and Wordpress should make that easier.


Oh, and here's that script:



# Taken from, http://mcdevzone.com/files/drupal_to_wordpress.sql

# this assumes that both wordpress and drupal are in separate databases.
# The wordpress database is called "wordpress" and the Drupal database
# is called "drupalmigration"

# based on scripts from:
# http://www.darcynorman.net/2007/05/15/how-to-migrate-from-drupal-5-to-wordpress-2
# http://spindrop.us/2006/05/19/migrating-from-drupal-47-to-wordpress
# http://www.brendanloy.com/2007/02/wordpress-21-upgrade-problems.html

# first, nuke previous content in wordpress database
use wordpress;
delete from wp_terms;
delete from wp_term_taxonomy;
delete from wp_term_relationships;
delete from wp_posts;
delete from wp_postmeta;
delete from wp_comments;

# categories
INSERT INTO wp_terms (term_id, name, slug) SELECT term_data.tid, name, name FROM drupalmigration.term_data where term_data.vid = 2;

INSERT INTO wp_term_taxonomy (term_taxonomy_id, term_id, parent) select term_data.tid, term_data.tid, parent from drupalmigration.term_data, drupalmigration.term_hierarchy where (term_data.tid = term_hierarchy.tid) AND (term_data.vid=2);

# posts
INSERT INTO wp_posts (id, post_date, post_content, post_title, post_excerpt, post_name, post_modified, post_author) SELECT DISTINCT n.nid, FROM_UNIXTIME(created), body, n.title, teaser, REPLACE(REPLACE(REPLACE(REPLACE(LOWER(n.title),' ', '_'),'.', '_'),',', '_'),'+', '_'), FROM_UNIXTIME(changed),n.uid FROM drupalmigration.node n, drupalmigration.node_revisions r WHERE n.vid = r.vid;

# category --> post relationships
INSERT INTO wp_term_relationships (object_id,term_taxonomy_id) SELECT nid,tid FROM drupalmigration.term_node ;
UPDATE wp_term_taxonomy SET taxonomy='category';

# category count updating
UPDATE wp_term_taxonomy SET count = (SELECT COUNT(object_id) FROM wp_term_relationships WHERE wp_term_taxonomy.term_id = wp_term_relationships.term_taxonomy_id);

# comments
INSERT INTO wp_comments (comment_post_ID, comment_date, comment_content, comment_parent, comment_author, comment_author_email, comment_author_url) SELECT nid FROM_UNIXTIME(timestamp), comment, thread, name, mail, homepage FROM drupalmigration.comments;

# users
INSERT INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_registered, display_name) SELECT uid, name, pass, name, mail, FROM_UNIXTIME(created), name FROM drupalmigration.users WHERE uid>1;

# update comments count on wp_posts table
UPDATE wp_posts SET comment_count = (SELECT COUNT(comment_post_id) FROM wp_comments WHERE wp_posts.id = wp_comments.comment_post_id);

# fix post slugs. first we have to remove the duplicate _____ chars, then replace that with a single - char
UPDATE wp_posts set post_name = REPLACE(post_name, '__', '_');
UPDATE wp_posts set post_name = REPLACE(post_name, '__', '_');
UPDATE wp_posts set post_name = REPLACE(post_name, '__', '_');
UPDATE wp_posts set post_name = REPLACE(post_name, '__', '_');
UPDATE wp_posts set post_name = REPLACE(post_name, '_', '-');