I’m finally allowed to tell you what I’ve been working on! I’ve written a blog post about it here: http://www.swiftkey.net/blog/?p=338

I’ve been at Google HQ in Mountain View, California for the last few weeks developing and testing a new version of SwiftKey designed for a wave of new Honeycomb Android tablets that will be coming to market soon.

See more of Honeycomb here.

Flying back to London tomorrow!


I’ve used MindMeister for a while now. It’s great for organising thoughts and ideas andfor planning projects. Being a nice AJAXy web app, you never have to worry about saving anything.

Now it’s on the iPad. If they’ve modified the interface to make the most of the touch screen it will be awesome. Reason enough to buy an iPad? Maybe…

Post a comment here if you get to try it out.


As a computer engineer the idea of having to send someone an Excel file makes me twitch. Especially when I’ve already sent them an (ASCII-compatible) UTF-8 .CSV file.

What do you think having to send a screenshot of said Excel file does to me…? Uncontrollable twitching, is what.


I am a domain-owner! I paid through PayPal and they suck.

It turns out if you’re abroad, it’s very difficult to use PayPal. They blocked my account due to “suspicious activity” and then asked me to change my password (I’m not sure why) and provide some kind of proof that I’m me. The options were: over the phone (I’m not at home), by credit card (I had an old one listed) or by uploading a proof of address (they’re at home!). Obviously you can’t just add new details and verify those (very sensible). So FAIL. Eventually they accepted a blurry picture of my driving license as proof of address and gave me access to my account. There’s still a “dispute” pending, though… ??

So anyhoo, what can I do with this new-found virtual abode?
At the moment I’m thinking of setting up a virtual server which can provide me with offsite backups, secure proxies, photo hosting, etc. But that stuff’s all for me. What could I provide for the masses?

The MillionDollarHomePage has been done already… Any equally lucrative suggestions would be appreciated.


They’re surprisingly good!

When I boot up this laptop I get a warning saying something “Your battery capacity is low (41%). It may be old or broken. Blah blah blah.” How nice!

But far more impressive was the hard disk warning. (It’s nice to be forewarned of impeding doom…) You get a little icon in the notification area with a hard disk and a warning symbol. Clicking it gives you something like this:

Then “More information” gives you this:

I’ve never seen a more friendly way of finding out everything’s about to go a bit wrong. Luckily my new hard drive arrived yesterday.


‘man make’

19Mar10

If you Google ‘man make’ the fifth result is How to Make a Man Fall in Love with You – wikiHow.

It makes for some interesting reading… but there are many things about the article I just don’t understand. Oh, and never forget:

Don’t look like a stalker!

Well maybe I dig stalker-chicks?

How to Get a Man to Marry You makes much more sense, but there’s definitely more work involved.


My MacBook is pining for a belt-loosening. There’s just way too much junk in its trunk. And by junk I mean stuff. And by trunk I mean hard disk.

It’s so bad that as soon as any memory gets paged the amount of free disk space goes down to zero and then everything starts crashing. =(

In looking for solution to this problem I cam across a nice little open-source application for OS X that terrifies me just a little. It’s called Monolingual.

Monolingual presents you with a list of all the languages (international, not programming) and machine architectures that may be supported on your Mac and lets you remove them. It scans through your hard disk removing what you have selected from every application. This worries me somewhat, especially because Macs are very picky about Universal-architecture binaries loading specific-architecture libraries and such…

I opted to leave the architectures alone and get rid of most of the languages. The result? Space reclaimed: 18M. Not worth it at all. I wish it could have told me that before it started ripping the innards out of my precious Snow Leopard… Lesson learned.

I think my new solution is this.

Mmm… recursion.


Why do I need pthreads statically linked for Window? I am in the odd situation where I am creating a DLL for use in a third-party application where I have no control over the search paths for DLLs (and I can’t put any DLLs in the search paths available) and I need a cross-platform threading library. I’m using mingw (with mysys) as my build environment.

Using the normal libpthreadGC2.a you statically link some code that searches for libpthreadGC2.dll. Adding the Windows incantation (see below) of pthreads below is supposed to somehow import the code and everything should link statically, but it just doesn’t seem to work when creating a DLL.

Don’t forget to add the Windows-specific calls for static pthread-win32 to your code at the beginning:
#ifdef PTW32_STATIC_LIB
pthread_win32_process_attach_np();
pthread_win32_thread_attach_np();
#endif

and end:
#ifdef PTW32_STATIC_LIB
pthread_win32_thread_detach_np();
pthread_win32_process_detach_np();
#endif

In msys, cd to the source directory and…

make clean GC-static CLEANUP=-D__CLEANUP_C XC_FLAGS="" DLL_INLINED_OBJS=" attr.o barrier.o cancel.o cleanup.o condvar.o create.o dll.o errno.o exit.o fork.o global.o misc.o mutex.o nonportable.o private.o rwlock.o sched.o semaphore.o signal.o spin.o sync.o tsd.o version.o "
Presto! You will have a libpthreadGC2.a file you can link against and you won’t need a DLL.
The command tells the Makefile to build a .a C library (i.e. no C++ exceptions) for static linking containing all of the object files specified above.

I couldn’t compile it with C++ exceptions (I got an error to do with “std::terminate”) but I didn’t look into it very much because I don’t need exceptions.

When compiling your code, add the following to your CFLAGS:
-DPTW32_BUILD_INLINED -DPTW32_STATIC_LIB -I/path/to/you/pthread/directory
and this to your linker flags LDFLAGS (at the end!):
/path/to/you/pthread/directory/libpthreadGC2.a -finline-functions -lwsock32
Note: Remove -lpthreadGC2 from your LDFLAGS if you have included this.

Be careful: The ordering of the linker flags is very important, especially when using mingw.


Sofortbild

10Mar10

If you have a Nikon DSLR and Mac, download Sofortbild. Why wouldn’t you? It’s free!

Sofortbild (which means something like “immediate image” in German) connects to you DSLR via wireless or USB and automatically downloads the images to you computer and gives you a large preview (i.e. “tethered shooting”). You can control the most important camera options from the computer and make the camera take a picture.

It’s currently in Beta, but is still fairly polished. It just works. You install, plug in the camera, take pictures and voila, they’re on your screen and your hard drive. For me, it’s Eye-Fi with a wire…

It also does automatic bracketing from which it create an HDR image but, in my limited tests, the presets didn’t produce any interesting results taking pictures of high-contrast bright light, indoors. (This is probably best done manually anyway.)

Things I would like to see:

  • Live View on the computer screen
  • Quickly reviewing images using left/right or up/down
  • Zoom using the scroll wheel
  • Flash control
  • Lots more control of the camera, most of which is probably impossible

Oh yeah, you can tell it automatically import photos into iPhoto/Aperture/Lightroom and you can use an Apple Remote to trigger pictures remotely! Cool.

This find has lead me realise that there are SDKs for Nikon DSLR cameras capable of all sorts of computer-controlled trickery… An SDK for cameras!?!

Anyhoo, this is a perfect application for anybody doing any kind of photoshoot or a cheap way of doing remote triggering.


I’ve had a Twitter account for a while, but until now I had just been lurking. Now I will be publishing content, albeit indirectly. I’m using twitterfeed.com to aggregate my flickr, LiveJournal and WordPress posts and publish to Twitter only.

I’ve set it up to poll the feeds every hour and provide links to the original with some URL munging via bit.ly. Let’s see if it works!