Archive for the ‘geek’ Category

The iLife? No, thanks.

Wednesday, August 25th, 2010

With perhaps perfect timing, I emerged back onto the internet after a week or so away just in time to see this piece in the Evening Standard: Living the iLife. The lede sums up the tone:

Techno-savvy Londoners are abandoning their worldy (sic) possessions and instead living their lives out of a laptop. The digital minimalist is able instantly to access their music, photos and film collection from any computer in the world – and to move house (and country) at the drop of a hat.

The obvious question is, of course, "How many Londoners?", but regardless: the article is built around two interviews – one with Hermione Way, who runs some online video websites from a members' club in Covent Garden and from a range of Apple gadgets, and one with Paul Carr (of The Friday Thing, which I used to like very much). Carr has been living in hotels for some time, while Way "is in the final stages of transferring her life online and selling her possessions".

Which is fine, as is the fact that I'm sure neither gives a fuck about my thoughts on their choice of living arrangement. Nor should they. The reasons why I wouldn't want to try it myself, though – despite, I'm pretty sure, qualifying as one of those "Techno-savvy Londoners" – are several.

How do you eat?

Some are pretty obvious. For example, how the fuck do you cook – or, for that matter, eat? You could probably fry an egg on a Macbook if you thrash the processor with Handbrake and slice just about anything with a Palm Pre, but other than that – no fixed abode, no posessions and being ready to move at a drop of a hat means no kitchen, and that means no cooking. And no plates or cutlery.

Or maybe you're supposed to use disposable ones? Are you allowed to carry a small set of kitchen implements and ingredients? And more importantly still, does the iLife make provision for cats? Even if a cat doesn't count as a "physical possession", I bet his or her litter tray does. No way I'm abandoning that. Urgh.

But even if the "iLife" thing is really more narrowly defined – not owning what can be digitised – though, there's one big, fat problem. I noted it – perhaps not terribly well (seriously seriously?) – here:

to which Mark Prigg, the author of the piece, responded:

To which the answer is yes, they do count, but there just aren't enough of them. This is not because I don't like the concept of storing media in a digital form: I had all my music, in MP3, on a custom-built streaming server, the moment the first UPnP players came out, I've since re-ripped the whole collection many times to increase quality as storage became cheaper and I now own a lot that was purchased in high-bitrate MP3.

My iPod is full of ripped DVDs for time spent on planes, I have more photos stored on my Flickr account than I will ever be bothered to look through and all my documents and work files are mirrored in a cloud storage service and on my own server. Put simply, I'm no Luddite. My problem is the abundance of books and lack of ebooks.

Book-keeping

I own a lot of books, as does my wife, to the point where it causes problems. We're out of storage space, and have been for some time. The bookshelves are crowded and bowing under the weight. I'd love to have the whole lot stored away in some secure, backed-up, format that I could access from an iPad or Kindle, and put the originals in storage or pass them on. The problem is that many – maybe even "most" of our books just cannot be purchased in a digital format.

Even the most cursory survey reveals that the range of ebook stores is staggeringly narrow. Of my favourite novels I could pick up a copy of The Great Gatsby, sure, but no Strong Motion, no White Noise, no Girlfriend in a Coma (or even Generation X). These are not obscure or ancient books. From a quick survey of Helen's books that I can remember off the top of my head there's no The File by Timothy Garton Ash (this is a must-read, btw), and you can forget about a Kindle copy of the hulking great Mitrokhin Archive.

Of course the range of digital music available to buy has expanded remarkably over the past decade, and the same is likely to happen to ebooks, but with music and video we've been supported by a great safety net: if your obscure record or film isn't available, you can simply rip it to digital in minutes. With books that's not an option – hence my "awesome scanner" comment. I can't ever envisage an easy, hands-free way to "rip" a book: the problem is mechanical more than one of computing. Someone has to turn hundreds of pages. I'm not doing it.

Hence my comment, and why I can't see myself – or anyone who reads – ever living "the iLife". The CDs, DVDs and physical format games might go, but we'll keep lugging the books behind us. Oh, and the cats too, of course.

And a response..

Paul Carr saw this post and dropped me a line, pointing out that the problem with the whole iLife thing and books isn't so much reading them as hanging on to them afterwards:

"I like print. In fact I used to be a publisher. The problem is not buying [books] , or reading them; it's owning them. My solution then is to buy them (sometimes new, often second hand) and then to release them into the wild after I've read them a la book-crossing. I've left books in airports, in hotel rooms, in parks and subway stations and even in the back of cabs – always with a note in the front, to the finder, saying that I hope they enjoy the book and inviting them to email me if they do. Which sometimes they do. If it's a book I don't want to leave behind then that's when I look at either investing in a digital edition, or simply long-term loaning itto a friend until I'm next in town. Works like a dream."

Which is a good point, and one I hadn't even considered – I suppose I'm more of  hoarder than I might have imagined. There are quite a few books in our collection that would be very hard or impossible to replace, and many have notes, etc, in them, but then the majority could be picked up again if needed. So, should we all dump all the paperbacks and hit the road with a laptop? Well, maybe not – apparently cooking is, indeed, a problem: "Fortunately, I'm not a big fan of cooking and there are no shortage of affordable restaurants in the world. For others that wouldn't be such fun".

Of tea. And kittens.

Saturday, August 14th, 2010

Last week, on a whim, I made a little website called www.teaandkittens.co.uk. As it turns out, people like tea and kittens. Quite a lot. And some of them even visited the website to see some photos.

In the few days since launch it's served up over 13,000 pageviews to just under 2,000 unique visitors – something of a shock to my poor server. It also took off somewhat on Twitter, where the reaction was huge and overwhelmingly positive. I received a few emails of thanks, and even some kitten photo submissions. Nobody has yet submitted a photo of a cup of tea, but there's still time.

I hadn't really planned anything for the site but it seems a shame to waste this kind of interest, so I've put an RSPCA donation link up on the page (there's another one here!). If I get some time I'll also add a tool for photo submissions. In the meantime, thanks to everyone for spreading the word, and please keep enjoying the kittens – caffeine and furballs FTW.

How to remove "Who to follow" from Twitter

Monday, August 9th, 2010

Twitter's new "Who to follow" thing is as dumb as a bag of rocks. Here's how to remove it from Firefox in ten easy steps:

  1. Go here and install the Stylish Firefox extension. Restart when prompted.
  2. Click tools, then Add-ons.
  3. Click the new User Styles tab
  4. Click "Write new style"
  5. Give it the name Twitter_WTF, tag it Twitter
  6. In the main box, enter this: #recommended_users{display:none;}
  7. Click Save
  8. If there's an Enable button, click it
  9. Close the Add-ons box
  10. Rejoice

Here's how the new style should look:

You can enable and disable the style by right-clicking the Stylish icon in the bottom-right corner of Firefox and (un)ticking it. Thanks to @Yuuichi for posting the style rule last week.

Garmin Forerunner 405CX Review

Sunday, August 8th, 2010

For the past year or so I've been using a heart rate monitor watch – a Polar F4 – when running. Despite a few really stupid flaws – most notably, it has no light, making it impossible to read if you run early or late in winter – this served me perfectly. After knackering my right IT band, though, I've found myself having to slowly build back up my distances from almost nothing – at its worst I could only just run 5k before my knee was in agony – so I decided to upgrade to a GPS watch that can accurately track pace and distance as well as time while I get back up to speed.

After having considered at least five different models and reading dozens of (sometimes useless) reviews, I chose a Garmin Forerunner 405CX*. Here's what I've found since buying it that I wish I'd known beforehand.

One caveat: I don't think it's possible to properly review a device such as this without having used it for a few months, and preferably through winter. When buying a GPS watch there were several questions that I wanted the answers to, however, so I think it's worth putting that information online now for anyone else in the same situation. I'll update this a few months down the line.

What you get

It isn't entirely clear what you get in the box with the 405CX before you buy, particularly as some Forerunner watches are sold with and without heart rate monitors. So, here it is: the standard 405CX package I bought includes the watch on a rubber strap, a heart rate chest strap, a small USB antenna for PC transfers, two velcro straps, a strap changing tool, a charger (it's USB, with a USB mains adapter) and a quick start guide. The heart rate sensor is much the same size as the Polar T31, but has a battery that can be changed without the use of a stanley knife. The chest strap seems to be a little larger than a medium-sized Polar one.

What you don't get

A manual, and god knows you'll need one because the quick start guide covers just that: the start. Download the full manual in PDF here. Also, there are no instructions on how to change the strap – see the video here, but beware that it's a far fiddlier process than the presenters make out. There's no software CD, either – instead this must be downloaded from here.

Why so many wriststraps?

The 405CX looks more like a watch than some older Garmin models, but this is accomplished by building the GPS receiver into the top of the lower strap. It's a clever design, as the receiver always points up when you run, but it makes the watch huge. If you have small wrists, like me, then the standard strap is uncomfortable, so switching to the velcro one is a must. Apparently these straps are not included with the cheaper 405 (non -CX) model. Here's the watch on the small strap on my puny wrist – GPS receiver side facing the camera.

Using the watch

The 405CX has two buttons: one to start and stop, and one to lap. All other controls are on the "touch bezel" – the silver ring around the bezel that works rater like an iPod controller. Tapping and holding one of the four quadrants opens that function, scrolling a finger around adjusts values and single-tapping selects. It takes a few minutes to get the hang of, but works well. The bezel can be locked by pushing both physical buttons at once – I've heard that this is a must if running in the rain, but it's no problem to lock every time.

GPS reception is impressive. It takes about a minute to position at the start of a run – go out, stretch, and it'll be ready – and kept its grip on the satellites even in parts of my run that are under some fairly heavy tree cover.

The options available are numerous. At its simplest, you can run until you want to stop and the watch will track your time, pace, distance and heart rate. It's simple to combine this with the Virtual Partner – set this to run at, say, 4:30 per km and it'll track your progress against that standard through each kilometer. When running on streets rather than a track it's handy to switch on the auto lap function that adds a lap marker every kilometer, mile or whatever – the watch beeps at each marker, and displays your pace through the previous lap.

More usefully for me, you can set the device to monitor you through a fixed run – for 45 minutes, say, or 10km – and alert you when it's done. There are also modes for heart rate zone training and intervals (run, rest, run, rest, and so on). The Advanced workout option allows for even more complicated settings, but cannot be set up on the watch itself – these must be set on the PC and transferred.

By default the watch will show two screens of information when running: one for your heart rate, and another showing the pace and so on. Enabling the virtual partner adds a third. You switch between them by tapping the bezel when running, which isn't as easy as pressing the physical buttons on my Polar, but there's also an option to automatically cycle them at various speeds. It's possible to completely customise what's shown, too: there are three main screens available, each holding three variables, plus the heart rate screen, so you could have up to twelve figures on display should you wish. I've set it up with just one screen for time, distance and pace, and disabled the heart rate screen entirely (it's still logged).

The watch is charged using a clip-on adapter, which is simple enough to use. At the moment it seems to lose approximately 10% of its charge per half-hour of running, so I'd bank on charging it once per week.

Oh, and it has a light. Thank god.

Viewing the data

After running you need to hold the reset button for two seconds to end the session and commit it to memory. Garmin offers two ways to track your runs: Garmin Training Center, which is PC-based, and Garmin Connect, which is online. I've only used Garmin Connect.

Synchronising the watch with the website is simple enough: plug in the USB stick and place the watch nearby and the two will detect and transfer the last run. Once transferred it'll appear on Garmin Connect when you next log in. Here's a snap of the main run screen (map obfuscated to hide my home address):

As you can see it plots a Google Map (with surprising accuracy – you can see which side of a narrow road you ran on, for instance), with pace, elevation and heart rate graphs below. Lap times and paces are shown to the left, along with lots of average data. Click Player and you get this screen:

.. which allows you to replay the run, or check out where you were when any strange peaks or troughs appear on the charts (hint: waiting to cross roads). It can only graph two variables at a time, though, so you can't have pace versus elevation versus heart rate here. A report option allows you to tally data for a period (the last month, say), and you can set goals. These aren't very sophisticated, so you're limited to "run two hours this week" rather than "get back to 15km per run within two months".

Verdict

As I said earlier, time will tell. For the moment, though, the 405CX does everything I wanted it to, and a whole lot more that may or may not be useful in future, and the Garmin Connect website is particularly nifty. I'll update this review in the depths of winter once I know how it copes with the cold and pouring rain. If you fancy buying one, please click here* – it's £250 from Amazon, or about £300-350 elsewhere.

Update: Rain

One concern I had was whether the 405CX – and the bezel in particular – would cope with rain, as I'd read reports of it causing accidentally activating in the wet. Tonight I took it out for a run in some truly awful British weather, though – rain, wind, yuck – and it was fine. I left the bezel unlocked while it got a fix, with no problems, then locked it during the run. I got soaked, so did the watch, but it kept working with no problems.

* These are affiliate links, so if you click one I'll get a small kickback to waste on comic books. The price you pay is the same, and Amazon is the cheapest place to buy (I shopped around quite a bit).

Learn 64 Japanese Verbs

Sunday, August 1st, 2010

I made this to help me study basic japanese verbs – thought I'd put it online in case anyone else finds it handy.

It's designed to help you learn the -ます form of each verb, as well as the verb group (Regular 1, Regular 2, Irregular). The -て form is also displayed. It includes all the verbs found in my Anki verb flashcards, which were designed for students using book one of Japanese For Busy People (JFBP). Enjoy – or, at least, er, find it useful.

Oh, and it's Flash. iPad, schmi-pad. Sorry.

Mousebot, Part Three: Motors

Friday, July 9th, 2010

Armed with some plans and a bunch of miscellaneous parts, the first big challenge is to get Mousebot moving.

The obvious answer would be to hook up two small DC motors to the Arduino's digital output pins, then simply set those to HIGH to move it forward and LOW to stop. This has a couple of problems, though: there would be no way to reverse the motors, and so no way to steer the Mousebot, and the Arduino can't supply much current, so attempting this would probably destroy it.

So there are two problems to solve: how to run the motors from a separate power supply, merely switching it from the Arduino, and how to rig the motors so that current can be supplied in both directions.

Isolating the motor power

In principle, isolating the motor's power supply and switching it from the Arduino should be pretty easy. A transistor can be used as a kind of switch, and I had a few of those to hand, so after checking out which pin is which (thanks, internet) I connected one up like this (excuse the dodgy diagram):

So far so good – when the Arduino digital pin goes high the LED lights, and nothing catches fire. Stick a motor in there instead of the LED and resistor and it should go and stop on command. But how on earth to control the motor in both directions? This turned out to be a bit fiddlier.

Two way control

A look on the web tells me that, in order to control a motor in both directions, you need something called an H Bridge. It's a simple concept – something like this:

Close switches 1 and 4 and the motor runs one way, or chose 3 and 2 and it runs the other way. Substitute four transistors for the four switches, rig them to Arduino outputs and I'd have two way control from the 3V supply. But then I need to control two motors independently, so that'd take eight transistors, eight outputs. That's going to take quite a bit of breadboard.

Buying it in

One way around the effort of making two H-bridges is to buy them: you can get several bridge-on-a-chip components that include the entire thing, ready to solder. The problem is that most are designed to handle motors that take at least five volts – mine only require 1.5 to 3v. Eventually, however, I came across this: the Pololu Micro Dual Serial Motor Controller.

Everything you need to know about this little chip is in the name. It's tiny, it controls two motors and it connects via Serial. Sold. I grabbed one, picked up a second identical motor (Maplin WC68) and started to connect the whole lot up. To connect to an Arduino Duemilanove, I used (pins numbered left to right when the component-side of the board is facing you):

1) Motor +ve (3v, for me)

2) Ground (common: connect Arduino ground and 3v battery -ve)

3) Arduino +5v

4) Serial – I used Arduino pin 3

5) Reset – Arduino pin 2

6 and 7) Motor one. I also connected a .1F capacitor across these

8 and 9) Motor two – again, with capacitor

Note that I used pin 3 for the serial transmission, which is not the Arduino's serial out pin (that's 1) – I had difficulty getting it to work with the standard Arduino serial.write command, so used the SoftwareSerial command to send serial over pin 3, but you could use any digital pin. The resulting mess looks a bit like this:

Once it's all connected, you need to program the Arduino.

Coding it up

Programing the Pololu isn't tricky, but does require a little preparation. The key is to reset it (pin 3 low, wait, high, wait while it initialises) then send four-byte commands. I found it far easier to use softSerial.print() rather than serial.write(), which seemed to generate surprisingly erratic results, hence using pin 3. Here's my test code: each motor is run for two seconds, in turn:

#include <SoftwareSerial.h>
#define rxPin 4
#define txPin 3
SoftwareSerial softSerial =  SoftwareSerial(rxPin, txPin);
int resetPin =  2;

void setup() {
pinMode(rxPin, INPUT);
digitalWrite(txPin, HIGH);
pinMode(txPin, OUTPUT);
softSerial.begin(9600);
pinMode(resetPin, OUTPUT);
digitalWrite(resetPin, LOW);
delay(1000);
digitalWrite(resetPin, HIGH);
delay(1000);
}

void loop() {
// motor 1
softSerial.print(0×80,BYTE); //start command
softSerial.print(0×00,BYTE); //sets device type
softSerial.print(0×03,BYTE); //set motor and direction (0,1,2,3)
softSerial.print(0x7F,BYTE); //full speed
//  stop
delay(2000);
softSerial.print(0×80,BYTE); //start command
softSerial.print(0×00,BYTE); //sets device type
softSerial.print(0×03,BYTE); //
softSerial.print(0×00,BYTE); //stop
delay(2000);
// motor 2
softSerial.print(0×80,BYTE); //start command
softSerial.print(0×00,BYTE); //sets device type
softSerial.print(0×00,BYTE); //set motor and direction (0,1,2,3)
softSerial.print(0x7F,BYTE); //full speed
//  stop
delay(2000);
softSerial.print(0×80,BYTE); //start command
softSerial.print(0×00,BYTE); //sets device type
softSerial.print(0×00,BYTE); //
softSerial.print(0×00,BYTE); //stop
delay(2000);
}

Next steps will be to tidy this up into a more usable set of commands, work out how to sense from the microswitches and actually fit the motors onto some sort of chassis.

Mousebot, Part Two: Parts

Sunday, July 4th, 2010

I now have a plan to build a robot for my cats to chase. So what next for Mousebot? A bit of shopping. Here's what I've picked up to get started.

First, the Arduino board:

It's an Arduino Duemilanove, so unlike older versions it can connect directly via USB. I bought mine from here, where they cost around £20 plus VAT. I got the "Starter Kit", which includes a load of bits and bobs for a tenner or so more. Speaking of bits and bobs:

Here's the stuff I've got for testing. Breadboard, jumpers, a few LEDs and switches, plus a few transistors, diodes and things – all from this kit. I also picked up some 1,000 ohm resistors (Maplin part M1K or in a big box of mixed resistors for a fiver) for use when testing with LEDs.

Also from Maplin, a 9V battery box (part L90AN) and 2.5/5mm DC plug (part L49AY):

Solder the red (positive) wire to the tip and black to the surrounding connector, as shown here, and this will power the Arduino when away from the PC. The box has a small on/off switch built in.

Buying motors turns out to be rather more difficult – there are loads. I figured I'd pick up just one and see if it does the job before buying a second for the other wheel, and settled on Maplin part WC68:

It takes 1.5 to 3v, and has a 100/1 gearbox built in. Hopefully it'll work. And to power the motor:

That's Maplin parts  YR60 (box) and HF28 (the clip and wires). Plus two batteries, obviously. Next step: to get the Arduino working, and the motor under control. Tricky.

Mousebot, Part One: Plans

Sunday, July 4th, 2010

Over the years I've come to know a lot about computers and how to put them together – give me the parts to make a PC and a screwdriver to short the motherboard power header pins and I could get it up and running – or installing Windows, at least – in about five minutes. And, thanks to hours mucking about with website programming and, before that, the Atari ST, I can program a bit – give me a language that works vaguely like either C or Basic and I can bodge together a working program. But there's one thing I know absolutely nothing about at all: how on earth all this stuff actually, you know, works.

When it comes to the electronics that makes all this stuff tick, I know nothing. I could make a simple circuit to light a bulb, and I remember that V = IR. That's about it. So, I think it's probably time to do something about this.

And here's my plan: I'm going to build a robot. Nothing fancy, but a simple thing that can run around the floor of the flat giving our two cats something amusing to chase and pounce on. Here's my (very scientific and carefully designed) schematic for the proposed Mousebot Mk 1:

The whole thing needs to fit into a smallish plastic box, and I think it's best if the drive wheels are largely contained inside (just poking out to touch the floor). With two motors driving two wheels I should be able to manouver the robot like a tank, although I'm not sure what to do with the back – it'll need either a pivoting wheel, or perhaps just to drag the back on the floor. Two switches on the front will tell the robot if it's hit something, and two on the top will activate when the cats manage to pounce on it.

In terms of controlling the whole thing, I'm planning to use an Arduino board. These can be programmed from a PC via USB (the language is really, really simple, and a bit like C), and then run independently when powered by a 9v battery. When I was over in San Francisco I picked up a copy of Make magazine that showed how to remote control a lawnmower using an Arduino chip, so I figure it should be easily up to a simple job like this.

The tricky thing is going to be controlling the motors from the Arduino. As I understand it the board can't handle powering motors directly, so I'll need to work out some way of controlling power from a separate battery pack to the motors from an Arduino output. I think this might require a transistor or two – figuring out how is, I suppose, the next step.

There's loads of Arduino information online, but not so much relevant to UK buyers, so my plan is to document the whole thing here (complete with Maplin part codes) in case it's useful to anyone else. All further instructions, part lists, photos etc can be found here.

International Dumb Day 2010

Wednesday, May 26th, 2010

I may* be slightly over-grumpy on account of having a stinking cold that's left me working on spreadsheets while cats shout at me every time I sneeze, but really, today does seem to have been blighted by some remarkable tech-related news.

First, from the BBC: First human 'infected with computer virus'. Or rather "researcher implants infected chip in own hand seeking publicity, gets it". If I put a copy of back orifice on a USB key then shoved it somewhere appropriate yet uncomfortable would that make me the first human to suffer a rootkit attack? No, it'd make me a berk.

Next, from the Guardian: a story that could be more accurately summarised as "man writes web tool that, for most users, doesn't work". Woo. However, because HTML5 is associated with the magic iPad, it makes a national newspaper blog. Do you know what I miss? XHTML. It was going to revolutionise the web back in 2001 or so, then what happened to it? *Utters wistful sigh and dreams of CSS positioning with the Tantek Celic box-model hack for IE5*

And finally from the Telegraph: Mobile phone number suspended after three users die in 10 years. Or rather, mobile phone number used by three notable rich people in Bulgaria, two of whom were criminals, is not currently in use (it's "understood to have been dormant" and "phone bosses are said to have suspended" it. Who said that? Fuck knows. Maybe it was Elvis. Maybe Elvis has the phone, on Mars, and that's why it's out of network range when called.)

At least the article doesn't quite go as far as to conclude that the phone killed them, as then we'd have to send around the tape of Lisa Simpson and her tiger-repellant rock.

* Am. Certainly.

The Defenders

Sunday, May 23rd, 2010

Galaxy Magazine, Vol 3 No 5, 1953

While waiting for the film to start yesterday we had a rifle through the south bank book market outside the NFT, and I came across this. It's from early 1953 and contains one of Philip K Dick's earliest published short stories – it's listed seventh in my rather battered copy of Beyond Lies the Wub, which is a must-buy if you like his stuff. The cover art is by Ed Emshwiller.

The story (or 'novelet', as it's billed)  includes three black-and-white illustrations, also by Emshwiller, which you can see scanned nicely in this Project Gutenberg edition (HTML). It's a classic cold war science fiction piece in which humanity has retreated underground while robots fight on their behalf up above, and was used as the basis for his novel The Penultimate Truth.

(Massive spoiler warning here – if you haven't yet read the story, please do so!)

I first read this story in maybe 1993 – in fact, I tore through the entire anthology, and then the next three volumes. I still have the books, although they're now so faded that it took a while to find them this morning. I can remember enjoying the clever twists in so many of these early tales, including The Defenders, but what leaps out reading them over 15 years (plus most of high school, a degree and a few jobs) later is the political context.

The story was published in the middle of the McCarthy Senate Committee era, and yet portrays a conclusion to the cold war (it's not even thinly disguised – one side is American, the other Russian, both have spheres of influence in Europe) in which, having nuked the hell out of one another, soldiers from the US and USSR are convinced that it's in their best interest to set aside weapons and differences and work together:

The Russians waited while the Americans made up their minds.

"I see what the leadys mean about diplomacy becoming outmoded," Franks said at last. "People who work together don't need diplomats. They solve their problems on the operational level instead of at a conference table."

The leady led them toward the ship. "It is the goal of history, unifying the world. From family to tribe to city-state to nation to hemisphere, the direction has been toward unification. Now the hemispheres will be joined and—"

Taylor stopped listening and glanced back at the location of the Tube. Mary was undersurface there. He hated to leave her, even though he couldn't see her again until the Tube was unsealed. But then he shrugged and followed the others.

If this tiny amalgam of former enemies was a good example, it wouldn't be too long before he and Mary and the rest of humanity would be living on the surface like rational human beings instead of blindly hating moles.

"It has taken thousands of generations to achieve," the A-class leady concluded. "Hundreds of centuries of bloodshed and destruction. But each war was a step toward uniting mankind. And now the end is in sight: a world without war. But even that is only the beginning of a new stage of history."

"The conquest of space," breathed Colonel Borodoy.

"The meaning of life," Moss added.

"Eliminating hunger and poverty," said Taylor.

The leady opened the door of the ship. "All that and more. How much more? We cannot foresee it any more than the first men who formed a tribe could foresee this day. But it will be unimaginably great."

The door closed and the ship took off toward their new home.

I think I'm going to have to go back and do some re-reading of his other stories – who knows what I've missed.