glennji.com

Because life's too short to do it the RIGHT way

glennji's blog

May 14

A Tale Of Two Spocks, pt.2

So I've been thinking about time and time-travel today, thanks to watching the Star Trek film on the weekend and a conversation I had with a friend on the way to the train station last night. I tried to explain my understanding of space-time, complete with Einsteinian relativity and Lorenz dilation/contraction, and all it served to prove was that I don't have it straight in my own head!

Time-travel is an old sci-fi standby, used everywhere from Back To The Future to various incarnations of Star Trek to H. G. Well's classic "The Time Machine" (if you haven't read this one yet, avoid the movie and read the book -- seriously). Accordingly, there are many different mechanisms for time-travel -- flux capacitors, 4-dimensional hypercubes, "slinging" around a nearby star at greater than Warp 10 -- and just as many warnings, side-effects or admonishments against altering "the" timeline -- but maybe time is more resilient than that. In any case, let's have a recap on what we know about time (and space).

Time? Space? What's this 'space-time' malarkey?

Our universe (or Bubbleverse?) probably started off as a Planckoscopic[1], high-density, enormously energised region -- maybe it quantum-tunnelled into existence, or maybe it "bounced" from a previous Universe collapse (a "big crunch") ... or maybe something else altogether. It's a bit hard to tell, because before[2] the "big bang" there was neither space nor time -- and questions like "what was there instead" are fundamentally incompossible, like asking a non-synaethesiac what the colour blue tastes like.

So. Some time "after" the big bang our fundamental forces and dimensions established themselves. It looks like we've probably got 3 "unfurled" spatial dimensions -- normal "3D" living -- and only one "temporal" dimension (a.k.a. time). Apparently observed effects like gravity and electromagnetism don't work without this 3+1 dimensional arrangement, but dammit, I'm a computer programmer, not a physical mathematician.

Thing is, these 4 dimensions are not solid, fixed planes as we here in the well-below-light-speed world tend to think of them -- Einstein showed that space and time (probably[3]) curve, bend, stretch and compress in relation to each other and the speed of light. Matter matters, too -- curving space-time and (maybe) creating gravity, although I think the jury is still out about the whole gravity thing. But the stretching and compressing seems to be pretty well-understood, and has even been confirmed with experiments involving an atomic clock and a really fast jet.

Einstein and others predicted that an object moving at a sizeable fraction of the speed of light would appear fore-shortened in the direction of travel (a  Lorenz transformation) -- space has actually contracted in that direction. The effective mass of the object also increases. Even worse, time is dilated -- the object appears to "slow down" because the temporal dimension is warping. The icing on the relativity-cake (the cake is a lie!) is that for constant velocities there's no way to tell who is "moving" and who is "stationary" -- so to you, it looks like time is slowing down for your light-speed-approaching friend; for her, it looks like YOUR time is running slow.

Acceleration is even more fun, and is what was tested with the atomic clock and jet -- the extremely accurate clock placed into the jet, which then accelerated to a speed fast enough to register a temporal slow-down. Sure enough, get the clock back and it is no longer synchronised with it's control clock on the ground. So you can slow time down by accelerating really fast! (You don't personally notice the time dilation -- to you, accelerating through space, the poor little plebs on Earth appear to be leading frantic, sped-up lives.)

My quite possibly flawed idea of this is that the sum of our velocity through all four dimensions equals the speed of light. You speed up in a spatial dimension, you slow down in a temporal dimension -- so at our current relative speeds we are falling through time at almost light-speed!  (This would also mean that light in a vaccuum is travelling through space but not time -- the photon that excites the cones inside your eyeballs today is the same age as the first photon formed in the big bang.

Let's do the time-warp (again)!

Cool, so we can slow down time by accelerating close to the speed of light, but what about going backwards? If we could accelerate above the speed of light, would that mean we were going backwards through time? Conventional wisdom (er..) says yes, but it's not possible -- an object accelerating up to light-speed would develop an infinite effective mass, and space would contracted to zero, and time would stop. But accelerating an infinite mass takes infinite energy ... so it's a hard limit.

(This doesn't stop there being some surreal particles in existence that are already travelling faster than light (FTL) -- we haven't found any such "tachyons", but that hasn't stopped us including them in sci-fi!)

It kind of sounds false  to me just now -- if time is a dimension, why can't we move backwards and forwards like in the other three spatial dimensions? Maybe we don't need to travel faster than light to travel backwards, we just have to get UP to the speed of light to stop our fall through time. That, or figure out what is drawing us so quickly in one direction and create its opposite to slow us, then reverse our direction of travel.

So yeah, even if time is one-dimensional (not multidimensional like I suggested in a previous post) I think travelling backwards should only be as hard as, say, generating anti-gravity to stop us falling down a well.

[1] A microscope made entirely of plankton[1.1].
[1.1] Come on, a plankton microscope would be cool! But in this case I really mean "smaller than Planck length". Might've made that word up, yep.
[2] Yeah, concepts like "before" get a bit silly when there the temporal dimension doesn't yet[2.1] exist.
[2.1] "Yet" is also silly at this point. Probably so is "at this point", come to think of it.
[3] That's science -- nothing is ever final, certain. And we LIKE it that way!

May 14

Invisibility through metamaterials

Illusion Cloak Makes One Object Look like Another Object

Now this is cool, proper sci-fi turned sci-fact. I haven't yet researched what these near-magical "metamaterials" are, and I doubt they work in anything less than a strict structure -- so a "cloak" is out of the question, but a "screen" should be fine -- but it's all just bending light so who knows?

(Thanks to Shep for the link.)

May 12

A Tale Of Two Spocks


Spoiler Warning: Don't read this if you haven't seen Star Trek. Dammit Jim, I'm a programmer, not a physicist.

Dee and I watched the Star Trek movie this weekend. Today at work we're having a ... philosophical (since it's about technology and knowledge that doesn't (yet) exist) ... discussion about the whole "Spock situation" -- can you interact with your future/past self and neither create a paradox nor annihilate into photons[1]?

The physics answer is, of course, maybe.  But the "maybe" hinges on  a) whether two different timelines correspond to two different "realities", and b) whether it's possible to move from one to another.

What is "singular reality"
Better start with this, I suppose. In a single-reality model there is one true reality: one definite past, one present, one future. Our observed 3 dimensions is the whole show (or at least the other spatial dimensions are either two tightly furled to affect us, or they act just like our observable three).

Except that with a single reality, quantum physics is hard to explain. Electrons suddenly smear across space, then "collapse" when they arrive at an "observer" (whatever that means).  But hey, maybe it's a true representation of reality.

What are "multiple realities"?

Whilst we don't have any direct evidence of alternate realities (or "parallel worlds"), there are a few different theories of how they might exist, with the corresponding supporting physics (and mathematics). It may be possible that our habitable part of the universe is just a little "bubble", and that outside our bubble are innumerable other "bubbles" in which the the initial conditions or even the laws of physics can be fundamentally different. In an infinite Bubbleverse there could be an infinity of separate bubbles, and at least some of those would support life (as ours does).

Each bubble could have bubble-local time and space, but travelling between two bubbles is probably "non-trivial".

Alternatively (sic), we can interpret the results of quantum mechanics as evidence of "many worlds". In this interpretation the probability wave function exists because, actually, every nanosecond sees us diverging into different parallel realities -- in one, the electron went one way; in another it took a different path. (What fun; an electron can interact with itself from another reality!)  It is the sum of all possible/parallel realities that gives us the probability wave.

(You might not like the idea of the continuous splitting of reality into infinite parallel worlds. I don't either. To me, it makes a lot more sense if you just think of another spatio-temporal dimension that we're travelling through. So perhaps time is not one-dimensional (we only travel forward) but 2D -- and our conscious "choices" serve to move us "left and right" towards possible futures. No arrogant, ego-centric "splitting" of reality when we decide to walk rather than take the bus; instead, both futures exist and happen with equal "realism", we just only get to "tune into" and experience one of them.

It doesn't have to be "time", of course, but it's easier to understand and imagine.  (Happy to find through Wikipedia that I'm not too nuts: this "experiential" view is akin to the "many minds" interpretation of Professor Zeh!))

So, what about time travel?

At this point you can probably realise that the "singular reality" leads to all sorts of tricky time-travel paradoxes, including the old standard, "Go back in time {10} and kill your (self, parent, ancestor). So you never existed. So you couldn't go back in time {GOTO 10} ..."  But it's easy enough to prove that you probably wouldn't explode in a shower of hot photons if you, say, shook hands with an earlier self (as that venerable thespian Van Damme in Time Cop might suggest).

We are all recycled. Every atom in our bodies was created in the hot core of a star, ejected out into space, integrated into a planet, a biosphere, an atmosphere, a living creature, a meal. We are what we eat, what we breathe and ultimately what we breathe out (and defecate) becomes the building blocks for a future generation of flora, fauna or mineral (depending upon what you eat and happenstance). Furthermore, we replace our cells -- and therefore our particular atoms -- all the time.  Today's skin is tomorrow's dust. And that dust could be a meal for a mite and ad infinitum up the chain.

So: even if there was some thermodynamic/entropy preserving force that would annihilate "import" atoms when they came in to contact with their former selves, Spock has more chance of exploding when he vaccuums under the bed then when shaking hands with his former self.

The case for multiple-worlds is even better -- if a future version of you from one reality somehow found it's way through a singularity[2] and started messin' with the ol' timeline ... well, that would just change YOUR perception/reality, not his! (Or hers.)  So his (or her) memories wouldn't change spontaneously, and he (or she) could do anything she liked -- up to an including killing you! -- with no effect upon it's own existence.

Think about it from the two different perspectives:

"In one future, I went back and killed myself.  In another, I did not."

"In one past, I was killed. In another, I lived well into the future ... where I went back and ..." you get the point. In the multple-worlds scenario, each perspective is equally valid and (more importantly) independent.

Ah, this post is already long enough. Next time I'll ramble about travelling through time and between realities, promise.

[1] I kid you not; this is the expected behaviour according to a sci-fi head at work. He was deeply upset by the Spocks' final scene.

[2] Yeah, that's probably the dodgiest bit of sci-fience right there. Travelling through a black hole? Hello, spaghetification?? Massive crushing forces? Space compacted to near-zero dimensions? Maybe a photon (or quark) could travel "through" a black hole, but good luck to it.

Jan 23

Subliminal messages on Compiz with xsublim

xwinwrap -a -nf -ni -st -sp -o 0.8 --  /usr/lib/xscreensaver/xsublim -no-screensaver -file /home/glennji/.xsublim -font lucidasans-bold-14 -delayShow 5000

I've been experimenting over the last couple of days with subliminal messaging -- a word or phrase displayed too quickly for the conscious mind to perceive it, but which is possibly seen and absorbed by the subconscious. In my case I've been using an xscreensaver hack called xsublim to flash up positive words for 5000 microseconds at a time.

Slight problem - xsublim writes text to the "root" X11 window, a mythical surface that used to contain a wallpaper. This meant that the messages would be below any open windows ... and it didn't seem to work with CompizFusion and GNOME anyway.

So along comes xwinwrap, a useful little utility for drawing things onto a Compiz-enabled display. This can be used to show a screensaver as wallpaper, for example -- scrolling Matrix-symbols, or a movie, or dolphins, or bouncing cows. In my case, I use to to display xsublim above all other windows.

Jan 18

Alphacool LCD support in serdisplib, lcd4linux - the hard way

The Alphacool LCD is nice: 320x200 pixels, graphical, brushed aluminium with a blue back-light. I've got one in my main PC, and it's been sitting there - inactive - since I upgraded from Ubuntu Feisty. Yesterday I (finally) got it going again, with only a little mucking about.

The display is now officially in serdisplib, provided you've got libusb (and specify it in the configure), and there is a serdisplib-based driver in lcd4linux ... although it's not compiled in the standard lcd4linux package that comes with Ubuntu Intrepid.

So, first thing was to download serdisplib and compile it. To do this in a slightly-more sensible way I use checkinstall to create a .deb package. It's a good idea, because it means the software is controlled by the packaging system (and can therefore be removed or reinstalled as necessary). Install checkinstall if you don't have it

sudo apt-get install checkinstall

So, I gunzipped the serdisplib package then opened a terminal and navigated to the appropriate directory:

cd ~/serdisplib-1.97.8

This is the source-code of serdisplib, so I need to configure and make it to compile it for my system. Make sure you scroll back up and check the output of the configure, because the first time I tried it didn't compile libusb because I didn't have the libusb-dev package. This was resolved by installing it in the usual way:

sudo apt-get install libusb libusb-dev

So then, configure and make:

./configure --enable-libusb
make

Alright, at this point I had compiled the binaries, but they're still sitting in this directory (rather than the /usr/bin and other system directories). It's a good time to test out the display:

testserdisp -n alphacool -p 'USB:060C/04EB'

It's a bit weird, but the display shows up as an "EEH Datalink GmbH". Try:

lsusb

... and you can see an entry like

Bus 004 Device 002: ID 060c:04eb EEH Datalink GmbH

Anyway, my test worked - the LCD was activated and displayed a test pattern. You can run a few tests with this one, but I was just happy to see it running again. Time to install serdisplib to the system!

Normally, this is done by running something like "sudo make install", which copies the compiled files and libraries to the appropriate locations, but as I said earlier this would mean serdisplib was entirely outside the packaging system. Instead, run:

checkinstall

This will ask a couple of questions (a description) and then create a .deb package which can be installed (and removed) like any other package. Find the .deb in the same directory and either double-click it in the file manager or install it from the terminal with

sudo dpkg -i serdisplib_1.97.8-1_i386.deb

What I didn't realise, but probably should have, is that this installs to /usr/local (e.g. /usr/local/bin, /usr/local/lib) rather than /usr. This isn't really a problem, but lcd4linux had trouble a little further on finding the libraries in /usr/local/lib rather than /usr/lib. At the time, I just copied the serdisplib stuff from /usr/local/lib to /usr/lib, but it would probably be better to either configure serdisplib to use /usr, or configure lcd4linux to look in /usr/local/lib. Oh well.

So, onto lcd4linux. I already had lcd4linux installed from the Ubuntu repositories, but it didn't include the serdisplib driver. You can check what drivers are included with

lcd4linux -l

So it was time to download the source code for lcd4linux too. Gunzip this in the same way as serdisplib. After attempting to compile this a couple of times I found I needed to patch the source code. Download the patch to your home directory and apply it

cd ~
patch -p0 < lcd4linux-0.10.1_rc2-nordtsc.patch

then we can compile and install it

cd lcd4linux-0.10.1-RC2
./configure
make
checkinstall
sudo dpkg -i lcd4linux-0.10.1_RC2-1_i386.deb

Cool! So now I had the new lcd4linux AND it had serdisplib support. Because I had the Ubuntu repository one too, I could test the two:

/usr/sbin/lcd4linux -l

That's the Ubuntu repo one

/usr/local/bin/lcd4linux -l

and that's the new one. Importantly, this has the line

serdisplib          : any

showing that it has the serdisplib support compiled in.

Because I had installed the repo one first, I already had an init.d script for starting lcd4linux at boot time. However, you want to edit /etc/init.d/lcd4linux and specify the absolute path to the new lcd4linux executable. i.e. change the DAEMON line to:

DAEMON=/usr/local/bin/lcd4linux

Also, you need an lcd4linux config file in /etc/lcd4linux.conf. The easiest way to get this is copy the sample one

sudo cp /usr/share/doc/lcd4linux/lcd4linux.conf.sample.gz /etc/
cd /etc
sudo gunzip lcd4linux.conf.sample.gz
sudo mv lcd4linux.conf.sample lcd4linux.conf

Now edit /etc/lcd4linux.conf with your favourite text editor. Find the SerDispLib display section and replace it with this:

Display SerDispLib {
   Driver 'serdisplib'
   Port 'USB:060C/04EB'
   Model 'ALPHACOOL'
}

Then go to the end of the file and comment/uncomment the appropriate line to specify the SerDispLib display

Display 'SerDispLib'
#Display 'LCD-Linux'
#Display 'LCD2041'
#Display 'LK202'
#Display 'LK204'
#Display 'MI240'
#Display 'CW12232'
#Display 'HD44780-generic'
#Display 'HD44780-WinAmp'

... and a layout

Layout 'Default'
#Layout 'TestLayer'
#Layout 'TestImage'
#Layout 'L8x2'

All being well, you should be able to start up lcd4linux and have the display activate with

sudo /etc/init.d/lcd4linux start

Cool!

There's a lot of tweaking and playing that you can do with lcd4linux layouts, so go nuts.

Dec 01

Paranoia of data-integrity

After the near-miss with my little black fileserver at home (one drive had a hiccup; my girlfriend recovered it) I've been reading up on various file-storage information: RAID, LVM (volume management) and filesystems. Unfortunately, what I'm reading is making me paranoid to the extreme!

For one thing, I know the setup I have at the moment is fragile at best: I have two 500GB drives in a single volume-group, with about 750GB data on them. The problem is, as I now realise, if I lose either drive the entire volume-group is hosed. Worse, I don't have backups (well, I do have the original DVDs that the movies are on, but it would be a right pain to have to re-rip them all).

So I started researching. What about RAID, I thought, and quickly decided that mirroring (RAID-1) is a waste of diskspace. RAID-5 looks better, but can only survive a single disk failure at a time, so perhaps RAID-6 with a total of 5 drives? That would give the capacity of 3 full drives and the ability to recover if any two drives died on me.

On top of that I could put a volume-group. If I'm reading things correctly, this would mean I could a) add a new HDD (of any size?) first to the RAID array, then the volume-group, and be able to use the new space ... possibly without restarting, since SATA is (mostly) hot-swappable. That's what I want, of course -- the ability to start with (minimum) 4 drives, but upgrade (and move to bigger drives) in the future.

To add to this mix, a guy at work (we'll call him Greeny) started "wibbling" about ZFS on (Open)Solaris (and FreeBSD, it turns out). End-to-end data-integrity, it says. Avoid silent data-corruption, it says. Suddenly I'm obsessed -- are my hard-drives randomly swapping bits here and there? Slowly (but surely) corrupting the files?

Yep, they sure are. ZFS promises to stop this by introducing a checksum process (which will notice such bit-swapping and - also silently - fix the file back to a "good" state from one of it's copies). So ZFS and RAID-Z are good things and I want them. But...

... it's not quite there on Linux. Someone has implemented it with FUSE (filesystem in user-space), but it's certainly not considered "stable". Even on FreeBSD it's "development". So the question is: do I go with the trusted, well-known and well-supported (hardware-wise) Linux, or it's once-commercial brother OpenSolaris? If Linux, do I make a ZFS2/RAID-Z filesystem and access it through FUSE?

In either case I better sort out my backups.

Sep 29

Media server ... dead?

Last night my media server may have died; fsck fails with ATA read errors.

I'm hoping I can recover the data: a bunch of movies, music and documents spread across two 500GB HDDs in a logical volume group. Really, I should have mirrored the discs, but that would halve the available capacity (and I have/had more than 500GB worth of data). Who would expect a HDD to die within 12 months?  I figured by the time the disc started acting up I'd have another drive in-place.

Worse: since I never got around to sorting out automatic backups there's stuff on there I really don't want to lose. Not just the music and movies.

Still, HDDs are fairly cheap at the moment (~£80 for 1TB).

Sep 20

Reverse SSH tunnels

So I described why SSH, and SSH tunnelling, is so cool -- you can effectively port-forward over an encrypted channel to any accessible host at the other end.  So I'm running a VNC server at home (so I can have X-Windows applications without a physical display, and have them continue to run when I disconnect), and I can fire up a remote desktop at work by entering localhost:5900 as my VNC server.  It's a "forward tunnel".

But it's "reverse tunnels" that are really cool, because they allow me to connect to an RDP service (Terminal Services) at work from home.  Firewalls will often maintain connection-state information, so can be configured to only allow connections to be established from "inside" to "outside".

With a reverse tunnel, the connection is established from inside (work) to outside (home) whilst I'm still in the office ... but when I get home I can piggyback on the reverse tunnel and get back into the work network!

C'mon, that's cool

Sep 18

"Anything, just play it loud okay?"

I've got an SSH tunnel from <anywhere> to <home> going, and can effectively run any TCP/IP service over a private, secure channel, so the next thing is to sort out my music collection.

I buy (or used to buy) a lot of audio CDs. I'm talking hundreds; I used to visit the local secondhand music shop near Uni and just pick up random albums; now I've got an income, I do the same thing in music stores.

Except now I don't have a CD-player, and had to leave my collection behind when I moved to Britain. So I listen to music almost exclusively on the PC -- MP3s, because the sound of a CPU decoding a bitstream is almost always quieter than that of a CD-ROM drive spinning a disc.

(This is especially true of my laptop, an old, hulking Toshiba Satellite. When playing a CD or DVD on the Toshy it's usually a competition between a loud DVD drive and two of the smallest, crappiest speakers every created. It's telling that the headphone jack on this laptop was used so much that something work-hardened and snapped inside, meaning that half time the speakers don't work at all.)

Last night I wrote a little shell-script which sorts out my current music from directories like "Artist - Album Title" into a directory for "Artist" and sub-directories for albums. This is important because it matches the hierarchy of the three services I'm using: 7digital.com, streamripper and TheLastRipper. It also limits the number of "top-level" directories, because albums by the same artist are all together.

As a bonus, I included a little Perl one-liner which removes empty directories (of which I had a bunch ... largely due to running the buggy script earlier). In the future I might add some kind of album-art downloading, fixing up missing ID3 tags and removing folders that only contain album-art (lost some music somewhere in the transistion from CD to MP3 to portable hard-drive to GNU/Linux NAS).

So now I can buy albums from 7digital.com and just unzip them into the music directory (and let anacron run my cleanup script). This service looks really good: a lot of music, with albums around £7.99 and individual tracks around 80p, from the big music publishers. All in DRM-free MP3, and each purchase is stored in an online "vault" or "locker" for redownload if necessary. You can preview songs (when their preview servers are working) and read reviews of new music to assist my "discovery" activity.

For more "discovery", I can use streamripper to download tracks from Internet radio stations (i.e. Shoutcast). Streamripper is quite clever, provided the stream information is accurate (which really means finding a decent radio station out of the thousands available) and can split individual tracks into correctly tagged MP3s ... in the same Artist/Album hierarchy. Nice.

For less "programmed" discovery there is TheLastRipper, a mono application for downloading from Last.fm (again into the same hierarchy of individual MP3s). Unfortunately for us server-heads, this is a GUI-only program at the moment (although a browse of the source code shows a ConsoleClient work-in-progress), but here VNC comes to the rescue -- the vnc4server (package in Ubuntu's repositories) will run a VNC service which acts as an Xserver, without requiring the physical display hardware. So my little headless black box can run TheLastRipper quite happily; I just have to connect via VNC if I want to change any settings or start/stop the ripping.

Last.fm is nice because of it's intelligent heuristics and social aspects: Last.fm channels are things like "Neighbourhood Radio", "Recommended" and "Music Like <Person>". So I can get recommendations, but don't have to listen to them when I'm awake -- a very good thing, considering I get free downloads between midnight and 6am i.e. not exactly great music-listening hours.

So my music is slowly, slowly getting sorted.

Sep 15

Why I (heart) SSH

Two words: SSH tunneling.

SSH (Secure SHell) is an secure (encrypted) point-to-point communication protocol.  At the simplest level, SSH connects a "client" to a "server" and opens up a "shell" or terminal session from client to server.  Like Telnet, but all the traffic is encrypted "strong" cryptography (for suitably paranoid values of "strong").

But it's more than that - SSH can also act like a secure FTP server with the "scp" command.  Try winscp, for example: it gives a full two-pane FTP-like interface, but uses SSH/scp (or SFTP if required) in the background.

And then le bombe: SSH can "tunnel" other connections between client and server, like a multiprotocol proxy that keeps track of connections - everything goes over the single encrypted channel, but is split back up at the end.  Which means you can open a single port in your firewall but connect to a variety of network services remotely: file-sharing (SMB, NFS); media (UPnP); remote-clients (RDesktop, VNC, Xwindows); shared printers; etc.

Okay, so a working example.

I have a home network connected to the Internet through a regular ADSL2 modem.  Inside the network, we use local IP addresses; outside, the modem translates our outgoing requests into it's own public IP (NAT). The modem has a built-in firewall, but it's very simplistic and really only allows "port forwarding" (i.e. any traffic to a port on the firewall is redirected to a port on an internal machine).

So I set-up an SSH server on a machine inside, and tell the modem to port-forward the SSH port to it.  Now, whenever someone attempts to connect to my public IP address on port 22, the connection is handed over to a little black box inside the network.  Combine that with dyndns (which gives my public IP address a host and domain name) and I can pop open a PuTTY session from work to home -- which is immediately pretty cool, as I can get my files and music (via SCP) and bounce from host to host as I like.

But better than that, by running a local Xserver called Xming, I can fire up GUI-fied programs on my home computers and have them appear on my screen at work!  All built in to Unix, baby.

Better again, by setting up tunnels I can use my home system as a kind of traffic router.  Tunnel the IPP ports and I can print to my home printer.  Tunnel my home proxy and I have privacy at work (and at home, if I'm using TOR).  Tunnel media streaming, or security cameras, or IP-enabled coffee machines.

In fact, the end-point of the tunnel doesn't have to be a local service: I can tunnel local (work) port 900 to the Google Talk servers, then I can use GTalk by connecting to localhost:900 instead of gtalk.google.com!

A bit rambly, but I'll write this up properly one day (promise).