Embassytown

China Miéville’s Embassytown finally made it to the top of my reading list, after the recommendation on Terminally Incoherent. I have to agree with everything Luke says, it’s a pretty compelling sci-fi mixture. There’s a little fantastical technology but the story revolves around humans interacting with an alien society whose use of language is fundamentally different to our own.

I finished the book yesterday and by chance listened to an oddly relevant episode on the Grammar Girl podcast this morning. “Because as a Preposition” talks about a new use of the word “because”, for example “I didn’t do my homework because Skyrim”. To me, this sounds wrong. No, sounds is too weak – it feels wrong, jarring, like other kinds of grammatical error. If I read it at speed, I read “…because of Skyrim”. It was a grammatical error when I learned to speak, read and listen, back in the early eighties. Regarding constructions that were erroneous and became acceptable after I’d learnt seem to be quite deep inside me, more a sense like taste or smell with instinctive likes and dislikes than something I think about.

The podcast talks about how this use was happening in popular culture for those who learnt English after I did, so maybe to them it feels different, natural, when they use or observe it. You’ll see why it’s relevant when you read the book!

I found the story itself to be well crafted and I struggled to put it down. I’d certainly recommend it if you’re a fan of SF and the ideas of language and mind interest you.

Finishing my MSc. Dissertation

I finished my dissertation a couple of months ago, and since graduated. Finishing was a great feeling, but I certainly remember the time when I thought I was losing control of the whole thing. I thought my experiments would fail to produce any positive results, and I lost any confidence I would finish at all. A time of sleepless nights and distracted days, but I learned I’m not alone in feeling that way whilst trying to get my dissertation to come together.  To anyone else who’s in that place, try not to get too stressed and negative about it. Stay focussed on what you want to achieve and keep going. If I can do it, you can – it will come together.

Here’s the final result of all that work, Pattern Recognition in Computer System Events – Paul Brabban, published here in the School of Computer Science library. If you want to read it, I’d suggest having a skim over the introduction and then maybe skip to the conclusions. If you’re still interested then the detail is in the middle sections and if you want to try and reproduce my work, there is an appendix detailing some of the implementation choices I made.

I’m lucky to have had such great tuition and support at Manchester, not to mention the excellent supervision I received for my project from Dr. Gavin Brown. I was also very happy to receive some great feedback from my external examiner,  Professor Muffy Calder at the University of Glasgow. I couldn’t have done the project without the support of the industry partner, so thanks to them and their representatives. My mum and stepbrother painstakingly proofread my later drafts and picked out any number of grammatical errors, and my wife, my friends and my family supported me and listened to me going on and on about computer science geekery.

My eternal gratitude to everyone I’ve mentioned and anyone I’ve forgotten!

A few weeks with the System76 Gazelle Pro

After writing about choosing and unboxing, I was going to write this post after two weeks of using my new laptop. It’s been over a month because I’ve busy with a Coursera course and – well – the laptop has just kinda worked. In fact, it’s been so uneventful that there’s not all that much to write about, but I’ve now tried three distributions on it.

Ubuntu 12.10

It arrived as described with Ubuntu installed, and pretty much everything worked, as you’d expect. The problem I could find was pointed out thanks to @TechHomeBacon on twitter:

@brabster @system76 comes out of the box saying graphics “unknown”

— Tech Home The Bacon (@TechHomeBacon) April 25, 2013

However, the folks @System76 replied, explaining how to resolve the issue:

@techhomebacon @brabster sudo apt-get install mesa-utils’ fixes the description. mesa-utils isn’t installed by default.

— System76 (@system76) April 25, 2013

A minor niggle. As I said in my previous post, I’m not a fan of the Unity desktop so enough of that – the first thing I did was start again and install Kubuntu.

Kubuntu 12.10

The install of Kubuntu, a derivative of Ubuntu based on the KDE desktop, was uneventful. There were no problems and everything worked out of the box – sound, graphics, touchpad – all working. Not much to say, but Ubuntu to Kubuntu use the same underlying distribution and I’m already familiar with both, so I decided to try something a little more challenging.

Arch

Arch Linux is an fairly popular lightweight distribution more geared to folks who like to get their hands dirty, so the setup is more involved and exposes more of what’s going on. It’s not based on Ubuntu, and this machine wasn’t built with Arch in mind. I should also mention that I’ve never used Arch before, so I was expecting more problems.

The setup was certainly more interesting, but entirely due to the more involved nature of Arch and my lack of general smarts. The hardware worked just fine, picking up the right packages without any special configuration. Dammit, still nothing juicy to talk about!

I have noticed a couple of things that often don’t work properly. First, Ctrl-F7 toggled my display between laptop panel and external monitor out of the box, which is fantastically helpful as I’m constantly plugging in an external monitor. Next, my USB hub has an ethernet port and sound hardware on board – these also both worked out of the box.

In Conclusion

So far, I would recommend to a friend.

All the hardware works under all three distributions. Although I bought the lowest-spec i7 processor and the Intel graphics hardware is relatively modest, KDE is a joy to use, silky smooth through all the desktop effects. It’s very quiet in normal use with no discernible fan noise. The laptop keyboard has enough space and tactile feedback to be comfortable in use for extended periods – this is of course subjective, but it works well for me. The display panel is clear and bright when the ambient light isn’t so bright as to cause excessive reflections, as you’d expect.

An Aside

I find it surprising that people still write articles criticising Linux as not ready for the desktop, or the casual user. Quotes such as “Is it bad if I say that I was impressed that sound worked right out of the box?” on a recent Ars Technica article brought this to mind as I bought this laptop, and my experience with a multitude of distributions over the past few years leads me to the opposite view – that many distributions tend to work without fuss and seem quite capable of meeting the needs of a typical, casual user. I may try and talk my wife (a Windows 7 user when she’s not tapping and swiping on her iPad) into trying out a suitable distribution for a while, to try and see the experience from a more casual perspective…

Unboxing my System76 Gazelle Pro

In a previous post, I explained my reasoning behind purchasing a Gazelle Pro laptop from System76. Having never bought direct from a US company before, I had reservations  – whether the machine would survive the trip in one piece and how tax would work on the import.

TL;DR: a good experience with nothing particularly bad to note, but things to be aware of if you’re considering buying one of these:

  • Check how to pay taxes if you’re importing – you might need cash, cheque or some other antiquated mode of disbursement on delivery
  • The system comes with a US power adapter rather than one for your region but it can be worked around
  • It’s not as light or as thin as an ultrabook
  • The gloss flat panel is – well – glossy

System76 mailed me when I made my order, then to confirm that my payment and address were validated and that my machine was being assembled and tested, and finally to confirm that it was on its way, with UPS tracking information. I ordered on the 30th March, and it shipped on 5th April. Not too shabby, given that the Easter holidays were in there, and within the 6-10 business days promised. So far so good.

It arrived at my door on the 10th April, exactly when the UPS tracking site said it would. The courier asked for payment of taxes on the doorstep and required payment by cash or cheque. You remember cheques, right? My grandfather swore by them.

Fortunately, I could lay my hands on my chequebook (after blowing the dust off it) because who keeps £150-ish in cash laying about? If I hadn’t been able to pay by one of these methods, the package would have gone back with the courier to redeliver the following day, which would have been a pain in the backside. A bit of potential annoyance there, it’s a shame UPS don’t tell you on their otherwise very handy tracking site how much you’re going to need to pay and that you’re need cash to cheques ready to take your package.

So – check exactly how you’re going to need to pay taxes. UK folks, right now, keep your cheque book handy or make sure you’ve got the cash to cover it.

Anyway. Now, I’ve got a package in my grubby little mits. The outer packaging contains another cardboard box. Taking a knife to the tape reveals that inside, the laptop is cradled in a couple of foam holders, with the power brick stashed down the side. A photo follows – nothing fancy, but who cares about fancy packaging anyway? So long as the kit is in one piece.

System 76 Gazelle Pro packaging
System 76 Gazelle Pro packaging

We unpack, to find a laptop with protective plastic covers, a power brick and cable and a US keyboard component. I had the UK keyboard fitted, explaining the spare part.

Contents of the Gazelle Pro packaging
Contents of the Gazelle Pro packaging

Ah – the power supply cable is for a US power outlet. Not much use for me here in the UK. Could have been a bit of a problem, but fortunately these days most laptop power bricks have a standard three-pin adapter cable between the wall socket and the brick. I swapped my old brick’s UK adapter cable and we’re in business, but it’s something you might need to bear in mind.

Something that’s clear from the System76 brochureware and again on removing the unit from its packaging is that it’s no Macbook Air-style ultrabook. It’s not particularly light or thin, but then it’s also not as expensive as those kinds of machine. To my eye, much more a workhorse than a fashion accessory, but I like that.

The Gazelle Pro out of its protective foam packaging
The Gazelle Pro out of its protective foam packaging

Booting up confirms that the machine works perfectly and that I have the hardware spec I asked for. I cut a corner to keep the cost down a little and went for the standard glossy screen. Was that a mistake? You be the judge. Here’s the screen with the power off, indoors but with bright sunlight streaming through the window nearby.

Reflection from the Gazelle Pro gloss screen
Reflection from the Gazelle Pro gloss screen in bright sunlight when switched off

Here is it at the Ubuntu login screen, again in bright sunlight.

The Gazelle Pro glossy screen at the login prompt in bright sunlight
The Gazelle Pro glossy screen at the login prompt in bright sunlight

I’m not sure how the matte panel would fare, but this unit, as is typical of glossy panels, isn’t going to work well in bright light. Still, I bought the unit knowing that this would be the case, so I’d generally be using it in much more subdued lighting conditions. Things are much better after drawing the curtains.

The Gazelle Pro gloss panel in subdued lighting
The Gazelle Pro gloss panel in subdued lighting (click for much larger image)

 

So after unboxing, I’m pretty happy. There were only a couple of minor, easily resolvable problems to do with shipping over from the US, and I have the machine I paid for. Next time, the verdict after I’ve installed a different Linux distribution (just can’t get on with the Gnome 3 Unity interface, sorry!) and used the system in anger to do some work.

Why I bought a System76 Gazelle Pro laptop

My laptop is a little underpowered these days and I’ve been having a bit of trouble with up to date support for the AMD Radeon graphics hardware it packs, so I’ve been thinking about upgrading for a few months. I wanted to get a machine designed for Linux, rather than a buying a Windows machine and installing my distribution du jour on it. There are a couple of reasons for this desire. First, it seems to be getting more difficult to be sure that a machine designed for Windows is going to work well with a Linux distro, thanks to features like NVIDIA Optimus and UEFI secure boot, and second I object to paying for an operating system I have no intention of using. I’d rather my money went to the projects and supporters of the open source communities that provide the operating system I choose to use.

The only viable options I found for a well specified bit of laptop kit designed for Linux are the System76, ZaReason and Dell. There are others providing Linux laptops but mostly as cheap or refurbished options.

I have a couple of specific requirements other than good Linux support. I want a 15.6 inch 1080p flat panel, because my eyesight is pretty good and I value screen real estate because I use software like photo editing suites and development environments that have big complicated user interfaces. Having run short of memory on a couple of projects recently I want at least 8GB memory, and I want decent processor. I’d like a fast hard disk or an SSD, and I also want to avoid NVIDIA and AMD graphics hardware and stick with Intel graphics, as I don’t do anything that needs epic graphics power and I’d rather have graphics hardware with a good reputation for long-term Linux support.

ZaReason, a US-based company, offers the Verix 530 which comes close but packs NVIDIA graphics hardware and needs both the memory and hard drive boosting to meet my spec, bumping up the price. Dell only offers one Linux laptop which is a bit pricey in comparison to the others and doesn’t have many customisation options. In only offering one machine and whacking a “Dell Recommends Windows” banner on the pages for their Linux machine, Dell’s not building my confidence that they really know what they’re doing with Linux.

System76 won my business with their Gazelle Pro. It comes close out of the box and I can customise the couple of other options I need without breaking the bank. The important options I chose are:

  • 15.6″ 1080p Full High Definition LED Backlit Display with Glossy Surface (1920 x 1080)
  • Intel HD Graphics 4000
  • 3rd Generation Intel Core i7-3630QM Processor (2.40GHz 6MB L3 Cache – 4 Cores plus Hyperthreading)
  • 8 GB Dual Channel DDR3 SDRAM at 1600MHz – 2 X 4GB
  • 500 GB 7200 RPM SATA II HDD
  • International UK Keyboard Layout – Including Pound, Euro, and Alt GR keys

It’s a shame they’re based out of the US as it adds shipping time and cost on. I also wasn’t sure exactly what happens about paying UK taxes on the import. I put the order in last week and the machine arrived today. Next up, unboxing and first impressions!

A disaster, minimised!

I’ve not been blogging this last few months what with all my spare time going into trying to do some proper computer science and then writing my dissertation. Last night, I had a catastrophe – I noticed something in my results that should be impossible and traced it back to a subtle bug that compromised all my results to date! Pretty nasty at this stage in the project…

The effect was subtle and I didn’t think it would alter my conclusions. That said, to ignore it and continue wouldn’t be right. The alternative of explaining about the bug and its effects in my dissertation is not something I wanted to have to do either.

After a few minutes of sitting with my head in my hands I decided to fix it and start again. After all, it’s just compute time and elbow grease, it’s not like I just threw away a month’s time on the LHC or anything! Turns out, my decision to script everything paid off and I could pretty much throw a few tens of hours of compute time in to reproduce all my data and then a couple of hours with the charting software and I’m good to go. The choice of LaTeX also turned out to be even more of a winner as I was able to rebuild my document with the new figures and any layout modifications required almost trivially.

I was right – the conclusions do not change, however they are now more striking and there are no oddities that I can’t really explain. Tips of the day for those doing work like this:

  • script everything you can – just in case you need to redo stuff
  • use LaTeX – because you can swap out every figure for a new version easily

There are plenty of other reasons for applying these two tips, but there’s two reasons I hadn’t thought of before yesterday.

 

Scripting Java with JavaScript

Java programs run on the Java Virtual Machine, a kind of virtual computer that hides many of the differences between the different kinds of computers it’s running on. Folks have been writing implementations of other languages that run on this virtual machine for a while now – besides JVM-specific languages like Scala and Groovy, you can also get ports of existing languages like JRuby, Jython and JavaScript.

Conveniently, in the Java 6 specification (released way back in September, 2006), official scripting support is required in the javax.script package, and a slightly stripped-down build of Mozilla Rhino, the JavaScript implementation is shipped with the JVM.

I’ve been meaning to take a look at this for a while now, and I decided to use these facilities to solve a problem I was having in my MSc. project.

My project consists of runnable experiments that produce some kind of results over sets of data. I want to have fully set up experiments ready to run so that I can repeat or extend the experiment very easily without having to refer to notes or other documentation, which involves programs that accept configuration information and wire up components.

The Java code to do this kind of thing tends to be very verbose – lots of parsing, type-checking and an inability to declare simple data structures straight into code. It’s tedious to write and then hard to read afterwards. Using JavaScript to describe my experiment setup looked like a good solution.

Example: creating a data structure that provides two named date parameters in Java, as concisely as I can:

package com.crossedstreams.experiment;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

public class RunExperiment {
  public static void main(String[] args) throws Exception {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:hh:ss");

    Map config = new HashMap();

    config.put("start", format.parse("2012-02-01 00:00:00"));
    config.put("end", format.parse("2012-02-08 00:00:00"));

    // do stuff with this config object...
  }
}

That’s a lot of code just to name a couple of dates! The amount of code involved hides the important stuff – the dates. Now, achieving the same with JavaScript…

var config = {
  start: new Date("February 1, 2012 00:00:00"),
  end: new Date("February 8, 2012 00:00:00")
}

// do stuff with this config

When there are many parameters and components do deal with, it gets tough to stay on top of. Some of what I’m doing involves defining functions to implement filters and generate new views over data elements and JavaScript helps again here letting me define my implementers inline as part of the configuration:

filter: new com.crossedstreams.Filter({
  accept: function(element) {
    return element == awesome;
  }
})

This approach isn’t without problems, for example there’s some ugliness when it comes to using Java collections in JavaScript and JavaScript objects as collections. To be expected I guess – they are different languages that work in different ways so there’s going to be some ugly at some of the interfaces, maybe even some interpretation questions that don’t have one right answer.

Nothing I’ve come up against so far can’t be fairly easily overcome when you figure it out. I think that using Java to build components to strict interfaces and then configuring and wiring them up using a scripting language like JavaScript without leaving the JVM can be a pretty good solution.