rob.rho.org.uk
2024-03-10T21:29:56+00:00
https://rob.rho.org.uk/
Rob Hague
rob@rho.org.uk
id:/2024/03/marchintosh_ping
#MARCHintosh: Partial Success
2024-03-10T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><img class="pixelart" src="/2024/02/marchintosh.gif" alt="#MARCHinstosh" style="float: right; " />
I’ve not had much time to tinker since the start of the month, but in the time I have had I’ve had some partial success: the Mac SE is now talking to the Internet!</p>
<p class="image_display">
<img class="pixelart compact-mac" src="/2024/03/MacTCPPing.png" alt="Screenshot of a successful MacTCP Ping" />
</p>
<p>This turned out to be pretty straightforward, mainly following along with the <a href="https://bluescsi.com/docs/WiFi-DaynaPORT">instructions from BlueSCSI</a>. The one wrinkle I hit was that I couldn’t mount the image with the drivers with the software I had. I worked around this by duping it to an actual, honest-to-goodness 3.5” floppy disk. Running from that, everything went smoothly, and pretty soon MacTCP was talking to my router, and from there the world.</p>
<p>So, why am I only calling this a partial success? While, strictly speaking, I’ve already achieved my stated aim, it doesn’t match the picture I had in my mind. When I said “on the Internet”, I was really meaning “browsing the web” — I want to be able to access this very blog from the SE. The networking layer is solved, but when I came to installing <a href="https://www.macintoshrepository.org/9678-netscape-navigator-2-x">Netscape Navigator 2</a> (which seems like a reasonable baseline), I found that, rather than MacTCP, it requires OpenTransport (an alternative TCP/IP stack — yes, you needed to bring your own back in the day). BlueSCSI/DynaPORT also supports that, so I’m optimistic I’ll be able to sort it out.</p>
<p><strong>Side note:</strong> while taking screenshots in System 7 is trivial (just Command-Shift-3), I’ve yet to figure out a smooth way of getting them off the SE in a form readable by modern software. My current workaround is to mount one of the SE’s hard drive images in <a href="https://infinitemac.org">InfiniteMac</a>, open it there, and then take a screenshot of <em>that</em>. Hence, the above image isn’t of the highest fidelity. I still have the original PICT, and will replace it with a better version once I’ve fixed the workflow.</p>
<p class="image_display">
<img alt="Tim Berners-Lee and Vint Cerf wearing T-shirts reading I didn't invent the internet and I didn't invent the web" src="/2024/03/inventors.jpeg" />
</p>
id:/2024/02/marchintosh
#MARCHintosh
2024-02-29T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p class="image_display">
<img class="pixelart" src="/2024/02/marchintosh.gif" alt="#MARCHinstosh" />
</p>
<p>I came across <a href="http://www.marchintosh.com">#MARCHintosh</a> a few days ago — it’s a loose collection of retro Mac content for the month of March — and I’m going to give it a go. My goal will be to get the recently-revived Mac SE on the internet via the BlueSCSI’s Pico-W WiFi support; a modest project compared to others out there, but should be fun to do it as part of a larger event.</p>
id:/2024/02/keyboards
Keyboards
2024-02-23T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<ul class="horizontal_gallery">
<li>
<a href="/keyboards#corne">
<img src="/images/keyboard_thumbnails/corne.jpg" alt="Corne" />
</a>
</li>
<li>
<a href="/keyboards#manta">
<img src="/images/keyboard_thumbnails/manta.jpg" alt="Manta" />
</a>
</li>
<li>
<a href="/keyboards#ferris-sweep">
<img src="/images/keyboard_thumbnails/sweep.jpg" alt="Ferris Sweep" />
</a>
</li>
<li>
<a href="/keyboards#mbuk">
<img src="/images/keyboard_thumbnails/mbuk.jpg" alt="MBUK Macropad" />
</a>
</li>
<li>
<a href="/keyboards#one-percent">
<img src="/images/keyboard_thumbnails/onepercent.jpg" alt="The One Percent" />
</a>
</li>
<li>
<a href="/keyboards#layouts">
<img src="/images/keyboard_thumbnails/layout.png" alt="Layouts" />
</a>
</li>
</ul>
<p>This blog has had a variety of structures since it started, but for many years it’s been whittled down to the very basics: a reverse-chronological list of posts, with an archive. However, as I pick up the amount I’m posting here (both frequency and volume), I’ve come to the conclusion that it would be useful to start adding long-lived summary pages to bring together pages on particular themes.</p>
<p>To that end, I’ve added <a href="/keyboards">a page summarising my various keyboard projects</a>. This gives an overview of each project, and links to the relevant posts and external resources.</p>
<p>Behind the curtain, I’m trying out <a href="https://jekyllrb.com/docs/datafiles/">Jeykyll’s data files</a> as an easier way to produce structured pages. The page itself is a <a href="https://shopify.github.io/liquid/">Liquid</a> template that iterates over a separate YAML file which looks like this:</p>
<p><code>yaml
- title: Full Keyboards
keyboards:
- key: corne
name: Corne
thumbnail: images/keyboard_thumbnails/corne.jpg
hero_image: /2021/12/corne_full.jpg
firmware: https://github.com/robhague/qmk_firmware/tree/master/keyboards/crkbd/keymaps/robhague
description: |
This is the first proper keyboard I made, and is still in daily
...
</code></p>
<p>This turns out to be a good fit for how I think about these things, so I can see myself using the technique more in the future.</p>
<p>I anticipate adding these kind of topic pages as other themes emerge, but sparingly. The reverse-chronological list of posts is the heart of blogging, and this blog is no exception.</p>
id:/2024/02/cheap_and_cheerful
Cheap and Cheerful
2024-02-11T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>In my post recent about the dawn of the Mac, I alluded to the fact that I didn’t have a Mac at all until much later, but instead grew up on other platforms. I’d like to expand on this a little.</p>
<p>For much of the late eighties and early nineties, the computer market was bifurcated, at least on this side of the Atlantic. Powerful, and correspondingly expensive, PCs and Macs were increasingly prevalent in the workplace. In homes, however, there was a completely separate ecosystem. <a href="https://theamigamuseum.com">Amigas</a> (and <a href="https://en.wikipedia.org/wiki/Atari_ST">Ataris</a>) weren’t generally as powerful as their business rivals, peripherals like displays were rougher around the edges (more often than not, it was just a regular TV), and advances like hard drives were slower to arrive.</p>
<p>Nevertheless, the fundamentals of what was then the leading edge of computing — graphical user interfaces, applications such as word processing and desktop publishing, and so on — were all present and correct. These platforms allowed people a gateway into this world at a price that was literally an order of magnitude cheaper. You could get a complete system for a for a few hundred pounds, rather than a few thousand.</p>
<p>Back in the present day, I’m typing this on a wall-size display in my <a href="https://www.meta.com/gb/quest/products/quest-2/">Meta Quest 2</a>. Yes, the resolution could be better, the hand tracking keeps kicking in as I type, and the passthrough looks like 16mm film that’s been left in an Argentinian basement for fifty years, but it’s easily good enough to give a taste of the possibilities, and might even be useful. The games are pretty good, too.</p>
<p class="image_display">
<img class="half-width pixelart" src="/2024/02/king_touch_quest.png" alt="Pixel-art image of Tutankhamun's blue and gold death mask wearing a Meta Quest 2" />
</p>
<hr />
<p><em>Image based on Avril Harrison’s iconic <a href="https://amiga.lychesis.net/applications/DeluxePaint.html#AH_KingTut">King Tut</a>, which adorned the box of <a href="https://theamigamuseum.com/software/applications/deluxe-paint/">Deluxe Paint III</a>.</em></p>
id:/2024/01/first_contact
First Contacts
2024-01-30T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>Today I hit a switch that I’ve been putting off for a while; I ended my decade-long refusal to give access to my address book to <a href="https://www.whatsapp.com">WhatsApp</a>. When the service first came to prominence, I decided I wasn’t happy giving <em>other people’s</em> information to FaceBook, despite the limitations it placed on my use of the service. However, I’ve been re-evaluting this for a while, for a couple of reasons.</p>
<p>Firstly, statistics. The service is very widely used here in the UK, and has been for many years, and almost everyone will follow the default path and allow it to scan their address book. The chances of my providing any information that the company don’t have already are basically nil. As such, my demurring is at this point purely symbolic.</p>
<p>Secondly, and more importantly, the landscape has changed. Since the rise of WhatsApp, tech in general and the handling of personal data specifically has a lot more regulatory and legislative attention. In particular, the GDPR<sup id="fnref:gdpr"><a href="#fn:gdpr" class="footnote">1</a></sup> provides targeted and toothy oversight in this case. While I don’t really trust <s>FaceBook</s>Meta any more than I did in 2014, I trust that they’re under close scrutiny, backed by serious regulation. Their <a href="https://faq.whatsapp.com/1191526044909364#">public description</a> of how they handle contact data seems fine, and I now have a reasonable amount of confidence that they’ll stick to it.</p>
<p>With those two points, I was on the fence. The thing that finally pushed me into action was <a href="https://arstechnica.com/tech-policy/2024/01/apple-accuses-uk-of-power-grab-enabling-secret-veto-over-security-updates/">this story</a>, which quotes Apple as being willing to “withdraw critical security features from the UK market” if amendments to the Investigatory Powers Act current under consideration make it into law.</p>
<p>I am far from a privacy absolutist, and recognise that there are circumstances that justify law enforcement, with due process and safeguards, gaining access to private communications. I also bristle whenever gigantic transnational corporations seek to place themselves above elected governments. However, the legislation in question, as is the case more often than not, does not engage with the nuances of the technology it seeks to regulate, and in my opinion fails to balance individual and societal rights.</p>
<p>My hope is that the government listen to the arguments put forth, and refine or drop the changes. However, this is by no means certain (or, I fear, likely). Moreover, Apple has, on multiple recent occasions, shown its willingness to comply in the more minimal and spiteful way possible with legal constraints it doesn’t agree with, and so I have little doubt it would be good to its word. If that comes to pass, iMessage would be the most likely casualty for UK users.</p>
<p>With that in mind, making sure I have WhatsApp as a fallback seems prudent. It is, of course, possibly that WhatsApp will find themselves in a similar position as Apple, but given the degree to which it’s used for off-the-books Westminster discussions this seems like one thing that might actually get the politicians to sit up and take notice. It’ll be interesting to see when the penny drops.</p>
<div class="footnotes">
<ol>
<li id="fn:gdpr">
<p>Despite Brexit, the UK still has equivalent protections in the form of the Data Protection Act 2018, at least for the moment. <a href="#fnref:gdpr" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2024/01/41st_anniversary
The 41st Anniversary of the Information Purification Directives
2024-01-24T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img class="pixelart" alt="Welcome to Macintosh" src="/2024/01/welcome.png" />
</div>
<p>Forty years ago, on January 24th, <a href="https://www.youtube.com/watch?v=ErwS24cBZPc">Apple introduced Macintosh</a>, and showed the world how <a href="https://rob.rho.org.uk/2014/01/1984.html">1984</a> wasn’t like “1984”. Over the intervening decades, both the company and the platform have had ups and downs, but today the Mac is not only here, but in very good shape. Whatever you think of the computers themselves, or the company that makes them, it’s undeniable that this launch was one of the formative events of the modern tech landscape. To mark the occasion, I decided to embark on a little project — resurrecting the <a href="https://lowendmac.com/1987/mac-se/">Mac SE</a> that has been sat on my shelf for far too long.</p>
<p>It’s worth noting at this point that I have no personal experience of the dawn of the Mac. For the first few years of its life, I was resolutely in the land of eight bits — the <a href="/2023/08/1983.html">Acorn Electron</a> and Commodore 64. A couple of years after the Mac SE came out, we got an Amiga 500 that shared its Motorola 68000 processor<sup id="fnref:A3000"><a href="#fn:A3000" class="footnote">1</a></sup>, but I don’t recall ever seeing a Mac until I got to university in 1996, and didn’t buy one myself until 2002, at the start of the OS X era. However, the classic Macs, and in particular the compact Macs like the SE and the very first 128k model, have long been an object of historical fascination for me, and so I was keen to properly try one out.</p>
<p>The specific SE in question was picked up at a hardware giveaway at the Computer Lab around the turn of the millennium; an internal label suggests it originally dates from 1988. It’s the FDHD version, with a double density floppy drive and an internal SCSI hard drive with a whopping 20MB capacity. I’ve had it up and running on <a href="/2009/01/happy-birthday.html">previous occasions</a>, but the last time I tried to get it going (when my daughters expressed curiosity about it) it hit the dreaded question-mark-floppy error, meaning that enormous hard drive was kaput. I resolved to fix that, and do it properly, so that we could actually use and explore the computer as it would have been in its heyday.</p>
<p><img src="/2024/01/bluescsi.jpg" alt="A Microscribe SCSI hard drive and a BlueSCSI board" /></p>
<p>After a bit of research, I landed on the BlueSCSI as the best way to do this. This is a small board that hosts a Raspberry Pi Pico, and emulates a SCSI hard drive (or several), using an SD card for storage. You can get these ready assembled, but I opted for the kit form. I also upgraded to the Pico W, which with appropriate software allows the 80s OS and hardware to connect to 2020s WiFi. A little through-hole soldering later, and some tips from the very helpful Discord group, and I was greeted by the Welcome to Macintosh banner.</p>
<p>In order to get as close to the original experience as possible, I’ve gone for <a href="https://en.wikipedia.org/wiki/System_6">System 6</a>. Coming at this from a modern context, one of the first things that strikes you is something that isn’t there: multitasking. I’m not talking about some underlying technical capability (though that’s not there either), but at the user level. By default, you can only run one application at once. This includes the Finder (the desktop and file manager); when you start an application, the Finder exits, and only returns when you quit the application.</p>
<p>System 6 introduced an <em>optional</em> alternative, MultiFinder, which keeps the Finder and multiple other applications running concurrently. This would have been completely infeasible on the original Mac with its paltry 128k of RAM, but the SE’s relatively generous 4MB makes it a useful option. It became the <em>only</em> mode of operation in System 7, and of course is now the way that all desktop OSs work.</p>
<p>The original, single-tasking Finder does, however, strongly echo another, more modern OS that’s still going strong: iOS. On iPhones (and, for the most part, iPads), launching an application takes over the entire device until you exit it and start another. Of course, those devices are constantly multitasking in the technical sense, running loads of stuff behind the scenes and keeping recently used applications running in the background, but from the user perspective there’s a definite echo of the first Mac.</p>
<p>Another distinctive things is the hardware. The all-in-one form factor is iconic, and the Mac SE hews closely to the template established by the first Mac. Coming at it cold, I expected the 9” screen to be an impediment, but I found that in actual use it isn’t. While it’s a far cry from the 27” screen I use at my desk with a modern Mac, the difference between it and a laptop screen is far less pronounced. More tellingly, it’s almost exactly the same size as my iPad Mini. On both iPad OS and System 6, software expects to be running within such constraints, and adapts accordingly, meaning that it doesn’t offer a barrier in practice.</p>
<p>More than the size, the compact Mac display is marked out by the colour, or rather the lack of it. While pretty much all of the other computers of the era (PCs, Commodores, and even Apple’s own Apple ][ ) spent their increased graphics grunt on adding colour, the Mac spent it on resolution, giving a single-bit display (black and white, no greyscale) with a relatively high density of truly square pixels. If your target is serious work, rather than games, even a brief acquaintance suggests that this was the right call. The display on the SE is crisp and bright, and remains very usable even after 36 years.</p>
<p>Inside the SE (a place with which I’m now far more familiar) is a Motorola 68000, running at 8MHz, just like the original Mac. For comparison, my work laptop has an Apple Silicon M1 Pro, which has ten cores, running at up to 3320MHz. The two are so different that it doesn’t make sense to do a quantitative comparison, but the modern device clearly has <em>orders of magnitude</em> more processing power at its disposal. So, the SE will feel slow, right? Actually, not so much. In general, it feels snappy and responsive, in some cases <em>faster</em> than its younger cousin, and it’s interesting to think about the reasons why.</p>
<p>One reason is the aforementioned lack of multitasking. I’m typing these words into TeachText, the extremely basic text editor bundled with System 6, and (as I’m not using MultiFinder), that’s the only user level code that’s running. While modern OSs and multicore processors are generally pretty good at keeping background tasks in the background, you still get the occasional judder when one suddenly demands more power, or contends for a common resource such as mass storage.</p>
<p>More important, though, is that the software being run is doing far less. If I somehow managed to run System 6 and TeachText on Apple Silicon, it would run like the blazes. However, modern applications have grown in complexity, both inherent and useful (constantly checking the code you’re typing for errors, for example), and… less useful. Software can gain needless complexity for a variety of reasons — the need to market showy new features, the lack of the time, will or skill to make things simple, or misaligned incentives between the user, the customer (often someone else) and the software provider. However it arises, it sucks up the phenomenal gains that have been made in hardware over last forty years and makes your brand new computer <em>feel</em> no faster than a decades-old antique.</p>
<p>With all that in mind, one last question remains; what becomes of the SE? Now that I’ve resurrected it, I don’t want to just put it back on the shelf to resume gathering dust. There will certainly be a history lessons or two with my daughters, and I can see myself playing around with quite a few bits of period software to see how they compare to their modern equivalents. Beyond that, Hypercard might be an interesting medium for the girls to explore digital and interactive art. Finally, I can see its appeal as a distraction-free writing tool. There’s life in the old dog yet.</p>
<p>Overall, I’m glad I decided to embark on this slightly weird endeavour. Not only was it fun to get working, but it’s given me a far better insight into a branch of computing history I didn’t experience at the time, and through that an interesting perspective on the present day.</p>
<div class="images-from-mail">
<img width="256px" src="/2024/01/macse_41st.jpg" />
</div>
<hr />
<p><em>If you don’t happen to have a Mac SE sitting on the shelf, you can still explore the classic Mac experience in the comfort of your browser at <a href="https://infinitemac.org">Infinite Mac</a>. If you want to read more about the creation of the Mac, a great place to start is <a href="https://www.folklore.org">Folklore.org</a>, full of stories from and of the people who were there.</em></p>
<div class="footnotes">
<ol>
<li id="fn:A3000">
<p>By way of an <a href="https://www.computinghistory.org.uk/det/2721/Acorn-A3000/">Acorn A3000</a>, but that’s another story. <a href="#fnref:A3000" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2024/01/read_something
Read Something Wonderful
2024-01-08T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve just started on <a href="https://stevejobsarchive.com/book#">Make Something Wonderful</a>, from the Steve Jobs Archive:</p>
<blockquote>
<p>A curated collection of Steve’s speeches, interviews, and correspondence, Make Something Wonderful offers a window into how one of the world’s most creative entrepreneurs approached his life and work.</p>
</blockquote>
<p>Beyond a very limited print run, this is available both online and as a standard ebook. When it first came out, there was a lot of talk amongst the Apple cognoscenti (for example, on <a href="https://daringfireball.net/linked/2023/04/11/make-something-wonderful">Daring Fireball</a>) about how the web version was the superior way to read it.</p>
<p>So far, I’m pretty sure I disagree. The web version is <em>aesthetically</em> nicer in many ways, in particular the typography. However, in terms of the actually reading experience, I think it falls short.</p>
<p>With the ebook, I can load it onto an eInk device (even a Kindle) and read it in comfort. My position is kept consistent across devices, if I want to snatch a few moments to read on my phone. I can make highlights and notes, and these will easily and automatically flow to <a href="https://readwise.io">Readwise</a> and thence <a href="https://obsidian.md">Obsidian</a>. It’s a robust and mature ecosystem, and the web version offers only a much reduced, ersatz version of it<sup id="fnref:apps"><a href="#fn:apps" class="footnote">1</a></sup>.</p>
<p>I’m not suggesting that aesthetics aren’t important, and the flexibility of the modern web allows creators to go beyond what’s possible with the constraints of ePub and similar formats. However, the trade-off is utility.</p>
<p>There’s a similar trade-off between ebooks and physical ones. I very much appreciate a well produced, thoughtfully designed paper book, with gorgeous illustrations and typography, such as Dave Addey’s <a href="https://typesetinthefuture.com/2018/12/11/book/">Typeset in the Future</a>. I have physical copies of my favourite novels to return to again and again. If I’m after the text, rather than the artefact, though, an eBook is usually superior.</p>
<p>There is one ray of light for the web version of Make Something Wonderful, though. Behind its JavaScript and web fonts and scroll hijacking is a standard, reasonably well structured web page. That means you can import the whole thing into a read later service such as <a href="https://readwise.io/read">Readwise Reader</a>, and reproduce a lot of the practical advantages of the ebook version, at the cost of those aesthetics.</p>
<p>In fact, the foundation have given us the best of both worlds. A casual reader benefits from the lush experience, while those of us who want or need more flexibility can get it. In a world of increasing restrictions and platform tying, that is indeed something wonderful.</p>
<div class="footnotes">
<ol>
<li id="fn:apps">
<p>It’s not a stretch to see similarities with the much-derided practice of trying to ape a native app in a web view. <a href="#fnref:apps" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/12/santa_worm
Good Night, Good Luck, Merry Christmas
2023-12-18T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>I made this yesterday to help the youngest with a craft project, and thought I’d post it here in case it’s useful to anyone else:</p>
<center>
<img src="SANTA_Worm.svg" alt="SANTA worm logo" />
</center>
<p>The image was based on the nicely structured SVG version of the original, public domain NASA Worm logo from <a href="https://en.m.wikipedia.org/wiki/File:NASA_Worm_logo.svg">Wikimedia Commons</a>.</p>
<p>The title of this post is taken from the famous Apollo 8<sup id="fnref:aware"><a href="#fn:aware" class="footnote">1</a></sup> <a href="https://en.m.wikipedia.org/wiki/Apollo_8_Genesis_reading">Christmas Eve message</a>, specifically the sign-off by mission Commander Frank Borman, who <a href="https://www.theguardian.com/science/2023/nov/10/frank-borman-commander-first-apollo-moon-mission-dies-aged-95">died earlier this year</a>. The full sign-off, after the three crew members took turns reading from the Book of Genesis, was:</p>
<blockquote>
<p>And from the crew of Apollo 8, we close with good night, good luck, a Merry Christmas – and God bless all of you, all of you on the good Earth.</p>
</blockquote>
<div class="footnotes">
<ol>
<li id="fn:aware">
<p>Yes, I’m aware that Apollo 8 predates the worm logo by a long way. <a href="#fnref:aware" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/12/new-role
A New Role
2023-12-07T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve been at <a href="https://cydarmedical.com">Cydar</a> just short of ten years. In that time, the company has grown from six people to almost 60, and from core technology to a software medical device supporting thousands of surgeries across six countries.
In 2017, <a href="/2017/12/ringing_in_the_chang.html">I took on the role of Chief Technology Officer</a>, a role that has grown as the company has. The focus of a startup CTO is initially building the technology itself, but increasingly other things come to the fore; working with partners, integrating the product into the wider ecosystem, and working with the rest of the leadership team to define the vision and direction of the product.</p>
<p>I’ve been doing all of these for the last six years, but in 2023 Cydar has kicked into a higher gear in terms of growth and ambition. It’s common for companies at our stage to find that the functions of the CTO, each of which get more involved and complex, reach the point where they can’t all be covered by a single individual. The organisation needs to change to reflect this new reality if it’s to continue to succeed and grow.</p>
<p>Hence, we’re splitting my former role in two. As of the first of December, <a href="https://www.linkedin.com/posts/cydarmedical_we-are-delighted-to-announce-the-appointment-activity-7136262830785196032-K3X3/">Cydar has a new CTO, Prasanna Rangadurai</a>. Prasanna’s experience at building medical software businesses will be crucial in taking us to the next level. At the same time, I’ve moved to the role of Chief Software Architect, allowing me to focus on the long term development of the technology, ensuring that it can both scale as our business does and grow into the new areas we want to explore.</p>
<p>Changes like these are always a little nerve-racking, but I’m optimistic. I’m looking forward to working with Prasanna, and I think it’s the best way to take Cydar forward. Moreover, I’m relishing the opportunity to get back to focussing on software itself, and taking on some meaty technical challenges. For me, and for Cydar, the journey continues.</p>
id:/2023/11/sweep
Ferris Sweep
2023-11-25T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>As mentioned in the <a href="/2023/10/layout_evolution.html">last post</a>, I’ve been happily using my <a href="/2021/12/the_corne_maze.html">Corne</a> at home, and <a href="/2022/05/oops_i_did_it_again.html">Manta</a> when I go into the office, since building them. However, they present something of a false dichotomy; true split on one hand, wireless portability on the other. A couple of weeks ago, I finally got round to building a keyboard the parts for which have been sat on my shelf for a year, and that answers with the question “why not both?”.</p>
<p><img src="/2023/11/sweep.jpg" alt="Ferris Sweep keyboard" /></p>
<p>The keyboard in question is the <a href="https://github.com/davidphilipbarr/Sweep">Ferris Sweep</a><sup id="fnref:name"><a href="#fn:name" class="footnote">1</a></sup>, “a version of the more fabulous <a href="https://github.com/pierrechevalier83/ferris">Ferris</a> by Pierre Chevalier that uses a daughter board like a promicro, elite-c, bit-c, nice!nano etc. instead of using onboard components.” The idea of making a keyboard using onboard components intrigues me, but for this project the ability to add a daughter board was more important, as it allowed me to use a pair of <a href="https://nicekeyboards.com/nice-nano/">nice!nano</a>s. These fit the de facto standard ProMicro form factor, but pack in a more powerful microcontroller, battery charging circuitry, and wireless. One of these gives the Manta its Bluetooth chops, but it has a additional trick up its sleeve — the two halves can also use Bluetooth (specifically, BLE) to talk to each other, resulting in a fully wireless true split keyboard.</p>
<p>The board is also nice and simple, taking advantage that each controller only has a small number of keys to worry about (17). This allows it to avoid the need for the diodes found on most keyboards. The only things you need to solder on are the switches, the controller, and a power switch<sup id="fnref:mishap"><a href="#fn:mishap" class="footnote">2</a></sup>.</p>
<p>The version I have is from <a href="https://mechboards.co.uk/">Mechboards</a>, where I get most of my keyboard stuff. There was some kind of mixup with their variant, meaning that <a href="https://github.com/mechboardsguides/mbuk-ferris-sweep-readme/blob/main/readme.md">it’s not completely equivalent to the standard ones</a>. This was easily worked around with a couple of questions on their excellent support forum, and the silver lining is that it shows off the more interesting side of the nice!nanos.</p>
<p>In terms of switches, you <em>can</em> get variants of Sweep that support the de facto standard MX switches, but I decided a better fit would be Choc low profile ones. This dramatically cuts down the choices available: while there are hundreds of MX-compatible switches from dozens of manufacturers, covering every conceivable style, material and price point, there are very few Chocs beyond the (perfectly reasonable) <a href="https://splitkb.com/products/kailh-low-profile-choc-switches">options offered by Kalih</a>.</p>
<p>The ones that caught my eye were the <a href="https://mechboards.co.uk/products/sunset-tactile-choc-switches">Sunsets</a>, a relatively new entry manufactured by Kalih but designed by <a href="https://lowprokb.ca/">LowproKB</a>. “The first truly new Choc switch in years” claimed to achieve a decent tactile feel despite the short travel. I’ve been enjoying the <a href="https://mechboards.co.uk/products/durock-tactile-67g-teal">Durock Teals</a> I used in the Manta, so I decided to give them a go. I paired them with some <a href="https://mechboards.co.uk/products/pre-order-mbk-pom-choc-keycaps">simple blank POM keycaps</a>. The are nice and neat, and feel great, but more than one person has pointed out that in white they look like <a href="https://www.rennie.co.uk/">Rennie</a> indigestion tablets.</p>
<p>The kit came with FR4 switch and bottom plates (the same material used as the base for the PCB), but I opted to skip these, soldering the switches directly to the board and leaving the bottom open.
One wrinkle that I encountered with this plan was that the rubber feet that came with the kit, which need to be positioned right at the edges of the board to prevent it rocking as you type, had to overlap the pins of the switches. This meant they didn’t sit flush, and more worryingly pushed at the switches, which doesn’t seem great for long term reliability.
I worked around this by replacing them with smaller feet that fit in the gaps between pins. The result, in combination with the low profile switches and keycaps, is a very svelte keyboard, around half the height of the Corne (left) and Manta (right):</p>
<p><img src="/2023/11/corne-sweep-manta.jpg" alt="Corner, Sweep and Manta keyboards, side-on" /></p>
<p>So, how does it all come together? Pretty well. The portability is fantastic, and the Sunsets deliver on their promise of tactility. It took me a little while to get used to the more aggressive stagger, particularly on the outermost columns, compared to my other keyboards, but once I’d got the hang of it the overall typing experience is superb.</p>
<p>So, have I reached keyboard nerd Nirvana? Is this the fabled End Game? It actually might be. I’ve been using it full time both at home and the office for a couple of weeks, and it fills both roles admirably. There might be tweaks here and there, but it’s close enough to what I’m after that I may not need to make another conventional keyboard<sup id="fnref:conventional"><a href="#fn:conventional" class="footnote">3</a></sup>.</p>
<p>Of course, that doesn’t mean I’ll not make a keyboard at all. Even leaving aside <a href="/2023/08/onepercent.html">elaborate joke projects</a>, there are plenty of interesting directions to explore — one-handed keyboards, stenographic keyboards, built in pointing devices. My immediate next project is more prosaic, however: I’m going back to the start. The RGB lighting on my Corne is broken, due to the failure of my less-than-robust <a href="/2021/11/twentyfour.html">bodging</a> around my inexperienced soldering. I picked up a replacement PCB in a Mechboards sale a while ago, so will rebuild at least the left half with the benefit of more experience. After that, who knows?</p>
<p><img src="/2023/11/sweep-pumpkin.jpg" alt="Sweep on a pumpkin" /></p>
<p><em>ZMK firmware <a href="https://github.com/robhague/zmk-config">here</a>.</em></p>
<div class="footnotes">
<ol>
<li id="fn:name">
<p>Named after the <a href="https://rustacean.net">mascot</a> of the <a href="https://www.rust-lang.org">Rust</a> programming language, who you can see on the left half. <a href="#fnref:name" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:mishap">
<p>The one slight mishap I had in assembly was that the power switches didn’t seem to connect the batteries correctly. I’ve worked around this for now by wiring them directly to the controllers, meaning I can’t easily turn them off. ZMK has pretty good power saving, so it’s not a disaster, but a physical switch is useful to avoid the keyboards constantly waking up when jostled in a bag and running down the batteries. I plan to have another go at the switches when I have a moment. <a href="#fnref:mishap" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:conventional">
<p>Yes — I’ve reached the point where I think of an unlabelled, true split, column stagger 30% keyboard as “conventional”. <a href="#fnref:conventional" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/10/layout_evolution
Layout Evolution
2023-10-25T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>Believe it or not, I do actually <em>use</em> the weird keyboards I’ve made — the <a href="https://rob.rho.org.uk/2021/12/the_corne_maze.html">Corne</a> at home, and the <a href="https://rob.rho.org.uk/2022/05/oops_i_did_it_again.html">Manta</a> when I go into the office. In spite of (or perhaps because of) the tiny number of keys they have, I can now type both more comfortably and faster than on a conventional keyboard. The thing that makes this possible is the layout — the arrangement of keys, and in particular key combinations.</p>
<p>I tweak this as I go, and it’s moved on quite a bit from the original layout I documented back in <a href="https://rob.rho.org.uk/2022/03/no_place_like_home_row.html">March last year</a>.
The QWERTY letters with the dropped P remains the same, and I’ve been really happy with the rest of the basic structure: the home row modifiers, the space-delete-enter arrangement, and the two layers behind the thumb keys. The contents of those layers, however, has evolved substantially.</p>
<p><img src="/2023/10/layout20231025.svg" alt="My current layout" /></p>
<p>The biggest change was to move the numbers. When I started out with these minimal layouts, I assumed that having the numbers across the top row would provide the smoothest transition from the more standard layout (this was also the logic behind sticking with QWERTY). However, I soon came to find this cumbersome, so decided to try out a numpad arrangement. This turned out to be a lot easier, and the learning curve I’d worried about never materialised.</p>
<p>It also clarified the purpose of the two layers. The “Num” layer (activated by holding down the left thumb key) contained arrows on the left half of the split, and a numpad plus a few mathematical symbols on the right half. The “Pun” layer was dedicated to punctuation, spread across both halves.</p>
<p>This arrangement served me well for many months, but a little while ago, I noticed that it had a weakness. Numbers needed two hands. While I’ve never been a big user of the numpad on 100% keyboard, the fact that I needed to have both hands on the keyboard to enter a column of figures started to grate.</p>
<p>The solution is simple; switch the layers on the right hand half of the keyboard. I’ve just got round to making this tweak, resulting in my current layout as shown above. The layers are now less logically consistent, but make <em>physical</em> sense. I’ve renamed them “Left” and “Right” to reflect this.</p>
<p>Other notable changes:</p>
<ul>
<li>I’ve dropped the single key Cmd and Enter on the second thumb keys; the Manta lacks these, and so I didn’t want to put anything significant on them.</li>
<li>The Left layer has ⌘-Z/X/C/V on the corresponding letters, to give convenient one-handed access those shortcuts</li>
<li>I’ve added preliminary support for Mouse Keys (on QMK only for now).</li>
<li>On the implementation side, there’s more consistent use of transparency on the modified layers.</li>
</ul>
<p>The layout is personal to me, but if you want to borrow some ideas, or see how things are done, the <a href="https://github.com/robhague/qmk_firmware/tree/master/keyboards/crkbd/keymaps/robhague">QMK</a> and <a href="https://github.com/robhague/zmk-config">ZMK</a> configurations are available on GitHub. I’m certainly not done yet, but I’m pretty happy with the current state of things. If you have a keyboard where you can perform this kind of customisation, I encourage you to give it a go.</p>
id:/2023/08/1983
1983
2023-08-25T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>Last weekend, we visited the <a href="https://www.computinghistory.org.uk">Centre for Computing History</a> in Cambridge with my brother and nephew. As we walked into the main room, children running ahead, one of the exhibits caught my eye. It was unfamiliar, but there was something about it that rang a bell. It turned out to be an <a href="https://www.computinghistory.org.uk/det/44254/Acorn-Business-Computer-(ABC)/">Acorn Business Computer</a>, a machine I’d read about but can’t recall seeing in person before. After a moment, I realised what I’d recognised. The keys were the same colour and font as those of another machine, one that’s apparently so deeply embedded in my psyche that I latch on to minor details of it from across the room.</p>
<p><img src="/2023/08/electron.jpg" alt="Acorn Electron close-up" /></p>
<p>The <a href="https://www.computinghistory.org.uk/det/181/Acorn-Electron/">Acorn Electron</a> was launched 40 years ago today. We got one a year or so later, when I was six, and it’s fair to say that it had an outsized influence on my life, starting an interest that turned into a hobby and then a career, and providing a springboard for learning and playing. It was, of course, replaced by a succession of more and more powerful machines, but it was the first. Given that history, there’s no way I can possibly be objective about it. So I won’t.</p>
<p>I’ve previously described the Electron as being for kids not rich enough to have a <a href="https://www.computinghistory.org.uk/det/182/Acorn-BBC-Micro-Model-B/">BBC Micro</a> but not cool enough to have a <a href="https://www.computinghistory.org.uk/det/424/Sinclair-ZX-Spectrum-48k/">Spectrum</a>, and I think that stands up. The Electron was intended to provide the essence of what made the Beeb the Beeb at a price closer to that of the Spectrum. While it had to drop some features (notably Teletext mode and multichannel sound) and ran slower than its fuller-featured sibling, it did a pretty good job of retaining that essence. In particular, high resolution graphics<sup id="fnref:hires"><a href="#fn:hires" class="footnote">1</a></sup> and the superlative BBC BASIC (with built-in assembler!) were present and correct. Somewhat counterintuitively, this might have been the reason behind its lacklustre reception compared to its rivals.</p>
<p>Both the BBC Micro and Spectrum trace their origins to the <a href="https://clp.bbcrewind.co.uk">BBC Computer Literacy Project</a><sup id="fnref:chips"><a href="#fn:chips" class="footnote">2</a></sup>. The national broadcaster, in conjunction with the government, saw the need to inform, educate and entertain people about the new “computer” things that were going to be so important in the 1980s, and wanted a reference model to provide a solid basis for this programme. Several companies bid for the contract, but the field quickly narrowed down to two Cambridge companies: the already successful Sinclair, and the fledgling Acorn<sup id="fnref:micromen"><a href="#fn:micromen" class="footnote">3</a></sup>.</p>
<p>Sinclair had a solid track record of introducing sophisticated technology — <a href="https://www.computinghistory.org.uk/det/70693/Sinclair-Cambridge-Type-2-(Prototype-Model)/">pocket calculators</a>, <a href="https://www.computinghistory.org.uk/det/41038/Sinclair-Black-Watch/">digital watches</a>, <a href="https://www.computinghistory.org.uk/det/5513/Sinclair-Microvision-MTV1B-(TV1B)/">miniature TVs</a> — to the consumers. In particular, the <a href="https://www.computinghistory.org.uk/det/423/Sinclair-ZX80/">ZX80</a> and <a href="https://www.computinghistory.org.uk/det/184/Sinclair-ZX81/">ZX81</a> brought microcomputers to the mass market at an unprecedentedly low price (£99 for the pre-built ZX80, down to £49 for the kit form of its successor). In all cases, the genius was in figuring out a coherent set of functionality that would provide value to regular users, and could also be implemented within the constraints of technology and cost.</p>
<p>In contrast, Acorn seem to have been more focussed on making a “real” computer, and then scaling it down to fit the consumer market<sup id="fnref:caveat"><a href="#fn:caveat" class="footnote">4</a></sup>. With the Proton (renamed the BBC Micro when they won the CLP contract), they succeeded spectacularly. While it was expensive compared to other home computers, its capabilities were both broader and deeper. Not only did they have a long life in UK schools, they found some surprisingly serious applications. When I was an undergraduate in the late 90s, I’d still see them occasional, running scientific equipment or the information screens dotted around the Computer Lab.</p>
<p>However, in the Electron, Acorn arguably pushed the idea too far. The compromises to get the Electron down to a more Spectrum-like price point meant that it could do much of what its elder sibling could do, but it did it <em>slower</em> (often much slower). This compounded a weakness of the Beeb that was much more critical for the home market; games.</p>
<p>Like the Beeb, the Electron supported full colour, high resolution graphics — any pixel on the screen could be set to any colour in the palette. In contrast, the Spectrum split the screen into 8x8 blocks, each of which could only show two colours (foreground and background). This is clearly a less flexible approach, and leads to the much-maligned <a href="https://en.wikipedia.org/wiki/Attribute_clash">colour clash</a>, but it has the distinct advantage: there’s far less data to shuffle around. While this doesn’t matter much for static pictures in an educational or scientific application, it’s critical for animation. The Electron’s slow RAM access makes fast, colourful graphics a challenge. The Spectrum’s design may be less general, less like a serious computer, but it’s well targeted at a key thing that home users want to do. The issue wasn’t insurmountable — there were plenty of fun games to be had, from <a href="http://www.acornelectron.co.uk/info/electron/acornsoft/Snapper.html">Snapper</a> to <a href="http://www.acornelectron.co.uk/eug/64/a-rept.html">Repton</a> to <a href="http://www.acornelectron.co.uk/info/electron/superior_acornsoft/The-Last-Ninja-1-V1.html">The Last Ninja</a> — but the additional challenge, combined with the smaller market, meant there was never the creative explosion that happened for the Spectrum.</p>
<p>In an odd kind of way, this limitation plays into an an area where the Electron really did do well; learning about computers themselves. If the games are thin on the ground, you may as well investigate how the machine itself actually works. Here is where the Electron shines. Its design is logical and elegant. BBC BASIC provides a lot more structure and capability than the dialects on other home micros, and the built in assembler provides an easy on ramp to program the 6502 directly. It may not be as much of a “real” computer as the BBC Micro, but it’s enough of one to provide a solid jumping off point. It did so for me, and thousands of others.</p>
<p>The Electron was not a commercial success, both for the reasons suggested above and external factors having nothing to do with the machine itself<sup id="fnref:made"><a href="#fn:made" class="footnote">5</a></sup>. It was one player amongst several, and before the decade was out all had been eclipsed by US behemoths like IBM, Commodore and Atari. Acorn faded, and you’d be forgiven for thinking that its influence was long gone.</p>
<p>Forgiven, but wrong. The MacBook Air on which I’m typing this is, in a distant but direct way, a descendant of the Electron we got that Christmas. But that’s another story.</p>
<p><img src="/2023/08/electron_users.jpg" alt="Various users of the Acorn Electron, taken from the box art." /></p>
<blockquote style="min-height:360px">
<p><img src="/2023/08/electron_box.jpg" alt="Acorn Electron box" style="float:right; height:320px;" />
The above image is taken from the box art of the Electron’s packaging, shown here. This was the version that we got for Christmas 1984, but this particular one is one I picked up on eBay a few years ago.</p>
<p>I’ll finish with another nod to the <a href="https://www.computinghistory.org.uk">Centre for Computing History</a>. They not only provided the setting for the opening anecdote, but also a fantastic resource for more information about the various vintage computers scattered throughout this post. They do some great preservation and education work, and their museum in Cambridge is well worth a visit.</p>
</blockquote>
<div class="footnotes">
<ol>
<li id="fn:hires">
<p>Relatively speaking. <a href="#fnref:hires" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:chips">
<p>For an in depth look at the Computer Literacy Project itself, <a href="https://mitpressbookstore.mit.edu/book/9780262034036"><em>Now the Chips Are Down</em>, by Alison Gazzard</a> is fascinating. <a href="#fnref:chips" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:micromen">
<p>The story of Sinclair and Acorn’s battle for the CLP contract was retold in the brilliant BBC4 drama <a href="https://www.bbc.co.uk/programmes/b00n5b92">Micro Men</a>. For reasons that aren’t clear, it never seems to be repeated or turn up on iPlayer, but the Centre for Computing History held a watch-along with some of the actual participants that’s <a href="https://www.youtube.com/watch?v=yaonVYOTSsk">available on YouTube</a>. <a href="#fnref:micromen" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:caveat">
<p>A big caveat; this is my impression, formed from reading accounts and histories, and my very subjective view from the outside. Remember, I was six at the time. <a href="#fnref:caveat" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:made">
<p>If you’re interested in the rise and fall of the vibrant UK home computer sector in the 80s, I highly recommend <a href="https://store.rpipress.cc/products/the-computers-that-made-britain">The Computers That Made Britain</a>. <a href="#fnref:made" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/08/onepercent
The One Percent
2023-08-20T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>The first keyboard I built had noticeably fewer keys than a standard, or even laptop one — broadly speaking, a “40%” in keyboard circles. My next one went even further, a 30%. This raises the question; how minimal could I get? In answer to that, I present the One Percent keyboard:</p>
<p><img src="/2023/08/onepercent.jpg" alt="The One Percent, a single key keyboard" /></p>
<p>But, you may ask, how can you type anything on a keyboard with only one key? Fortunately, that was a question answered almost two hundred years ago:</p>
<video width="100%" muted="" autoplay="" playsinline="">
<source src="/2023/08/morse.mp4" type="video/mp4" />
<img src="/2023/08/morse.jpg" alt="Morse Code" loading="lazy" />
</video>
<p>As you can see in the video, you can plug in a real Morse key, or use the built-in MX switch. Either way, the interpretation of the morse code happens on the device — as far as the computer is concerned, it’s just a standard USB keyboard. Perhaps not the most practical one in the world, but a keyboard nonetheless.</p>
<p>The genesis of this project was a long while ago, when I came across <a href="https://www.raspberrypi.com/news/make-a-chord-keyboard-with-raspberry-pi-pico-and-circuitpython/">this</a> project. I thought it’d be a fun way to take the next step from building kit keyboards, and also a good reason to <a href="/2022/05/the_ratio.html">try out</a> the Raspberry Pi Pico. I acquired a Pico and some <a href="https://thepihut.com/products/neokey-socket-breakout-for-mechanical-key-switches-with-neopixel-for-mx-compatible-switches">Adafruit NeoKeys</a>, but by the time they had arrived I’d decided to go off-piste and try something a bit different. Before too long, I had a breadboard prototype:</p>
<p><img src="/2023/08/breadboard_pico.jpg" alt="Breadboard prototype using a Raspberry Pi Pico" /></p>
<p>In addition to the Pico, the NeoKey provides a hot-swap socket for a standard MX key switch. It also includes a NeoPixel for RGB illumination. I also added a small (128x32) OLED display to provide feedback while typing; this makes it a lot easier to understand how the board is interpreting your taps, especially for someone who doesn’t know Morse code (like me).</p>
<p>On the code side, I went for <a href="https://circuitpython.org">CircuitPython</a> — it’s well supported by the RP2040, and comes with libraries to support NeoPixels and USB HID devices. Moreover, the trivial transfer-and-run approach allows for very rapid iteration, and makes it a joy to use.</p>
<p>The process of writing the software was an interesting exercise in <em>unlearning</em> a few decades of instinct. Initially, I was pleasantly surprised to discover that CircuitPython supports <code>async</code>/<code>await</code>, and I immediately started to use these to allow fairly straightforward code that would nevertheless let other stuff run when necessary. It was only later I asked the in-retrospect-obvious question; <em>what</em> other stuff? I’ve spent so long working in multitasking environments, where a single logical processor will be running dozens or hundreds of things concurrently, that I’ve internalised that as a key part of my mental model of computation. Programming a microcontroller for an embedded device is more like programming an 80s home computer — you’ve got the entire thing at your disposal, and it’s up to you what you do with it. This reminder alone made the project worthwhile.</p>
<p>At this point, both hardware and software were working. However, I didn’t want to leave this as temporary prototype to be disassembled the next time I wanted to reuse the parts. I wanted it to be something more real, or at least more permanent. To this end, I decided to use the <a href="https://shop.pimoroni.com/products/tiny-2040">Tiny2040</a> from <a href="https://pimoroni.com">Pimoroni</a>. This is built around the same RP2040 processor as the Raspberry Pi Pico, but on a smaller board (with fewer external connections, but not in a way that affects this project).</p>
<p class="image_display"><img src="/2023/08/stamps_tiny.jpg" alt="A Tiny2040 on top of a UK first class stamp; they're the same size" />
<img src="/2023/08/breadboard_tiny.jpg" alt="Breadboard prototype using a Tiny2040" /></p>
<p>A few tweak to the software and everything works as expected. I also added a 3.5mm jack to allow a real Morse key to be added. I came across the <a href="https://www.kanga-products.co.uk/ourshop/prod_7633808-The-Nano-Key.html">Kanga Nano Key</a> on eBay, and it does the job nicely, but any other key (modern or antique) should be easy to wire up.</p>
<p>Unfortunately, a variety of other commitments meant I had to shelve the project for while, but a couple of weeks ago I found time to pick it up again and do the final step of soldering it all up on a protoboard, as seen at the top of this post. Not the neatest work, by any means, but it’s functional, and I’m more than happy with the result.</p>
<p class="image_display"><img src="/2023/08/onepercent_back.jpg" alt="The back of the One Percent keyboard, showing the connections" /></p>
<p>I’ve put the code <a href="https://github.com/robhague/onepercent">on GitHub</a>, along with schematics. I wouldn’t hold it up as a great example of style, but if you’re looking to learn too then it might be useful, if only to make you feel better about your own progress.</p>
<p>Overall, I’m really pleased with how the project worked out. I don’t make any claims to originality — there have been plenty of previous morse keyboards and similar projects — but my aim was to try something new, and to learn things, and I certainly have. My next build is likely to be more run-of-the-mill, but I’m sure I’ll return to this kind of thing before too long. However long that takes, I’ll have a tangible reminder of the possibilities.</p>
id:/2023/06/vision3g
Vision 3G
2023-06-11T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>One of the most striking things about the <a href="https://www.apple.com/apple-vision-pro/">Apple Vision Pro</a> announcement is the price: $3499. This is even higher than the rumoured $3000, a whopping seven times the projected price of the <a href="https://www.meta.com/gb/quest/quest-3">Meta Quest 3</a>, and has been cited as a reason that the Vision Pro will fail. While there are several reasons that might lead to it not taking off, I don’t think this is one of them.</p>
<p>That’s not to say that the price isn’t astronomically high, and out of reach of the vast majority of people. It is. However, as Steve Balmer famously pointed out at the time<sup id="fnref:balmer"><a href="#fn:balmer" class="footnote">1</a></sup>, so was the iPhone’s launch price. That product went on to do reasonably well. The swingingly expensive initial version seeded the market, and acted as a beachhead for the far more reasonably priced <a href="https://en.wikipedia.org/wiki/IPhone_3G">iPhone 3G</a> to achieve more widespread success a year later.</p>
<p>The main challenge that the Vision has with following that trajectory is bringing the price down; while the hardware in the first iPhone was pretty impressive for the time, that in the Vision is even more complex, along more axes. Moreover, even if they managed to halve the price, it’s still over $1500 — closer to a MacBook Pro than an iPhone. Given what’s inside, that’s not that surprising, but it will still limit the market.</p>
<p>This perhaps explains Apple’s emphasis on productivity (i.e., Mac-like) users, but that’s also a potential problem. While the iPhone essentially additive, the Vision Pro is looking to <em>replace</em> existing devices — the Mac for work, and the iPad for consumption. Until the platform is established enough that people will buy one instead of replacing their Mac or iPad, that’s going to mean a slow burn.</p>
<p>This, rather than the price per se, seems to me to be the biggest risk for the success of Apple Vision as a platform. The longer it takes to be established, the more chance for another player (maybe Meta, maybe someone else, maybe even an open platform) to come in and define the market. If that happens, Apple Vision would be relegated to a niche. Apple will no doubt do everything they can to ensure that doesn’t happen, but I expect there’ll be quite a few who will be pushing to ensure that it does.</p>
<div class="footnotes">
<ol>
<li id="fn:balmer">
<p>While I’m not a massive fan of Balmer’s in general, I give him a pass on his “most expensive phone in history speech”. He had a job to do (boosting Windows Mobile OEMs in the face of this new threat), and he did it with gusto. Microsoft’s subsequent actions show that they had at least some understanding of the changes the iPhone brought, even if they were ultimately unsuccessful. The ones who dropped the ball were Palm/Treo (“PC guys won’t just walk in”) and RIM (who apparently thought the demo was fake.) <a href="#fnref:balmer" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/06/googly
OMG They Actually Did The Googly Eyes: Quick WWDC Thoughts
2023-06-06T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><em>Some quick, largely unfiltered reactions to the <a href="https://developer.apple.com/wwdc23/">WWDC keynote</a>. I’ll probably follow up with something more substantial later…</em></p>
<ul>
<li>The new Mac Pro seems like a bit of a damp squib; a Mac Studio in a bigger box with PCI slots is nice, but it doesn’t really move the needle in terms of how far Apple Silicon can go.</li>
<li>The 15” MacBook Air is not exciting, but is excellent. The new default answer to the question “what laptop should I get?” for most people.</li>
<li>FaceTime on AppleTV looks well done, and I can see myself using it a lot.</li>
<li>AirPods Pro keep getting better, though not clear if this is a hardware or a software update.</li>
</ul>
<p>And one more thing…</p>
<ul>
<li>Unless I missed it, they didn’t say “Virtual Reality” once. (Or “Mixed Reality”, but nobody says that. Stop trying to make it happen. It’s not going to happen.) Definitely <em>Augmented</em> reality, even when it’s entirely immersive.</li>
<li>They tackled interaction with other people head on, and did a pretty good job of tackling both that and use cases more generally.</li>
<li>Sensors, screen, build all a step up from the state of the art, as expected.</li>
<li>Eye tracking for pointing is interesting, and sounds great <em>if it works as promised</em>.</li>
<li>The same could be said of a lot of VisionOS; it looks great, but in terms of experience what we saw yesterday was no more real than Tony Stark’s home office. A lot rides on how it is in practice.</li>
<li>The one exception is EyeSight. This was the weird wildcard rumour that seemed too ludicrous to be real, but they actually did it and it looks… OK. Perhaps it’ll fall into the uncanny valley in person, but in that case the video can get pretty close and it seemed like it’d work.</li>
<li>Shout-out to AutoStereo Displays</li>
<li>The high price was expected, but the timeline was a lot longer than I’d have guessed. Clearly this isn’t a short term thing; Apple are planning for the future.</li>
</ul>
id:/2023/06/the_network
The Network is The Computer
2023-06-04T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>Yesterday as I mowed the lawn I was listening to the <a href="https://daringfireball.net/thetalkshow/2023/05/31/ep-377">latest episode of The Talk Show</a>, which discussed the <em>two</em> rumoured hardware announcements at Apple’s now-imminent <a href="https://developer.apple.com/wwdc23/">World-Wide Developer Conference</a>. All eyes are understandably on the AR/VR headset, but there’s also good reason to expect them to complete the transition to Apple Silicon with a new Mac Pro. The show dealt with these as two distinct developments, but on reflection I think there’s a connection between them: connection.</p>
<p>Since John Ternus described the Mac Pro as a story <a href="https://9to5mac.com/2022/03/08/apple-teases-apple-silicon-mac-pro-at-end-of-march-event/">for another day</a>, a persistent question has been how does it go beyond the <a href="https://www.apple.com/uk/mac-studio/">Mac Studio</a>? A key factor in what makes Apple silicon perform so well is the fact that everything is integrated into a single package. The higher end parts are essentially more of the same blocks, but still in a single package, and the <a href="https://www.apple.com/uk/newsroom/2022/03/apple-unveils-m1-ultra-the-worlds-most-powerful-chip-for-a-personal-computer/">M1 Ultra</a> has already seemingly pushed this approach as far as it can go. Moreover, <em>expandability</em> has previously been what sets the Mac Pro apart. How does that work in the world of Apple Silicon?</p>
<p>On the headset side, one interesting aspect of the rumoured specs is that it will contain <em>two</em> M2s. Leaving aside the <em>why</em>, the answer to the <em>how</em> might be the same as that for the above question. Both point towards the idea that Apple is developing some kind of high-speed device-level interconnect.</p>
<p>Does that mean Apple is abandoning its approach of extreme integration at the silicon level? Far from it — such an interconnect would be the next step along the path, allowing everything to be in a single chip<sup id="fnref:die"><a href="#fn:die" class="footnote">1</a></sup> where that makes sense, but not being limited where it doesn’t. In effect, instead of being a souped-up iPhone, the Mac Pro would be a <em>network</em> of souped-up iPhones in a single device, in an interesting inversion of the old Sun Microsystems slogan at the top of this post<sup id="fnref:ambient"><a href="#fn:ambient" class="footnote">2</a></sup>.</p>
<p>However fast such an interconnect is, though, it can never be as fast as staying on the same piece of silicon. This kind of <em>non-uniform</em> architecture is nothing new. The most obvious example is the memory hierarchy (registers, cache, RAM, swap), but a more directly relevant example would be the first multi-socket AMD x64 systems of the early 2000s. Each CPU had its own directly connect pool of RAM, and while another CPU could address that memory, that request had to go via the “owning” CPU and was thus a lot slower. These details were abstracted away, but if you cared about performance you needed to pay attention to them. While this complexity is tempting to avoid, it’s often the right trade-off.</p>
<p>Another, more modern, example of non-uniform computing is the GPU. Not only do these often have their own RAM<sup id="fnref:gpuram"><a href="#fn:gpuram" class="footnote">3</a></sup>, but a completely separate programming model. If you’re not abstracting away the complexity with a high level framework like <a href="https://unity.com">Unity</a> or <a href="https://www.tensorflow.org">TensorFlow</a>, this requires far more investment and effort that simply keeping an eye on processor affinity. The benefits of accelerated computing are such that, for a lot of applications, this is more than worth it.</p>
<p>Even GPUs, though, don’t scale up infinitely. Nvidia, the leader in that space, has moved from selling chips, to cards, to integrated systems <em>with optimised internal interconnects</em>. Beyond this, CEO Jensen Huang is emphasising “data center level computing”, adding another level to the hierarchy.</p>
<p>For the most demanding types of computing, this kind of fractal approach has always been a feature. Occasionally, the particulars of implementation mask it at certain levels, but I suspect that with a new Mac Pro (and almost incidentally with the headset) Apple will be bringing it back to the fore. We’ll see tomorrow.</p>
<div class="footnotes">
<ol>
<li id="fn:die">
<p>I’m using “chip” loosely here — like many modern devices, Apple Silicon is actually multiple semiconductor dies tightly integrated into a single package. This represents, of course, another point on the interconnect continuum, a half-step between SoC and PCB. <a href="#fnref:die" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:ambient">
<p>By coincidence, this slogan also came up in The Talk Show, but in the context of ambient, or ubiquitous, computing. This is a very interesting angle (for me in particular) on both the headset and computing more generally, but that’s for another day. <a href="#fnref:ambient" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:gpuram">
<p>Apple Silicon’s GPUs are a notable exception to this — the CPU, GPU and other accelerators all use a common pool of RAM. Programmed correctly, this gives a big performance boost by avoiding the need to shunt data to and from GPU RAM. This stark difference in model is often cited as a reason why external GPUs don’t make sense for an Apple Silicon Mac Pro, but I don’t see any reason why the two models couldn’t coexist in the same machine, especially in the increasingly common case of using the GPU for non-graphical tasks. <a href="#fnref:gpuram" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/05/capable
Capable modules?
2023-05-29T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>I recently came across a blog post by Thomas Leonard entitled <a href="https://roscidus.com/blog/blog/2023/04/26/lambda-capabilities/">Lambda Capabilities</a>. This provides an interesting framing of the well-established security concept of <em>capabilities</em> (broadly, explicit, fine-grained authorisation as opposed to policy-based permission) in terms of functional programming. This essentially boils down to the observation that, if you don’t have global variables (a good idea for a variety of reasons), and stick to pure functions, the formal parameters can serve as capabilities — a function can only access the things that you pass in to it. For example, if I only pass in the <code>htdocs</code> directory object, the function can’t access files elsewhere<sup id="fnref:parent"><a href="#fn:parent" class="footnote">1</a></sup>.</p>
<p>The ergonomics of passing every capability a function might use explicitly may sound questionable, but there’s a widely used example: JavaScript’s <a href="https://requirejs.org/docs/whyamd.html#amd">AMD modules</a>. While decidedly <em>not</em> ticking the “purity” box, they’re strikingly similar in use: each module is a function, taking as parameters all of the other modules it needs.</p>
<p>AMD modules have since been superseded by <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules">standardised <code>module</code> support</a>, and in any case JavaScript’s mutability and abundant built-in global state mean that they’re not an effective capabilities mechanism, but they provide good evidence that the idea is both usable in practice an not unique to functional languages like OCaml and Haskell<sup id="fnref:fun"><a href="#fn:fun" class="footnote">2</a></sup>.</p>
<p>An even more relevant comparison is with <a href="https://webassembly.org">WebAssembly</a>, which does not start with the same global baggage, and has a sandboxing model that explicitly prevents cross-function leaking. A WebAssembly runtime built around this model of capabilities seems like a very interesting proposition.</p>
<div class="footnotes">
<ol>
<li id="fn:parent">
<p>Assuming, of course, that directory objects in this world don’t provide access to their parents. <a href="#fnref:parent" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:fun">
<p>Or perhaps that JavaScript <em>is</em> a functional language like OCaml and Haskell. <a href="#fnref:fun" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/05/vrarxryr
VR, AR, XR, YR?
2023-05-25T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2023/05/vr.jpg" alt="Close-up of VR headset eyepieces" /></p>
<p>After years of increasingly concrete rumours, the tea leaves seem to be finally aligning on Apple announcing a virtual/augmented reality headset at their <a href="https://developer.apple.com/wwdc23/">World-Wide Developer Conference</a> in a couple of weeks. The consensus seems to be that the hardware will be very high end, significantly pushing the boundaries of the field, and have a price to match.</p>
<p>VR and it’s alphabetic stablemates have long been a fixture of fiction for me — I’ve read <a href="https://www.gollancz.co.uk/titles/william-gibson/neuromancer/9781473217386/">Gibson</a> and <a href="https://www.nealstephenson.com/snow-crash.html">Stephenson</a>, watched <a href="https://www.warnerbros.co.uk/movies/matrix">The Matrix</a>, and played <a href="https://en.wikipedia.org/wiki/Shadowrun">Shadowrun</a>, <a href="https://en.wikipedia.org/wiki/Cyberpunk_(role-playing_game)">Cyberpunk</a> and <a href="https://www.arcade-history.com/?n=dactyl-nightmare&page=detail&id=12493">Dactyl Nightmare</a> — but over the last few years they’ve become increasingly real. Last year, in order to try and get a handle on where this was going, I picked up a <a href="https://www.meta.com/gb/quest/products/quest-2/">Meta Quest 2</a> to play around with.</p>
<p>My first impression was that they’d nailed the hardware; while there are undoubtedly areas where it could be improved, it does what it needs to do. A useful comparison would be the iPhone 4; while a modern iPhone is massively better in every respect, all the pieces were present and <em>good enough</em> to make the form factor work. The Quest 2 meets that bar, so while I imagine Apple’s entry will be nicer, there aren’t any fundamental gaps in capability that they need to fill. There is, however, one big question that Meta have so far left unanswered. Why would you want it?</p>
<p>Games would be one answer, and one that I and, I suspect, the vast majority of Quest owners, keep coming back to. However, it’s not historically been one of Apple’s strengths. Specifically, they seem to be either unable or unwilling to work with serious game developers (as opposed to those making mobile casinos) in a way that creates and sustains a healthy ecosystem. Games will certainly be created for the platform, but it would be surprising for Apple to be betting the house on them alone.</p>
<p>How about collaboration? Ben Thompson of <a href="https://stratechery.com/">Stratechery</a>, is a big advocate of the sense of presence that comes from sharing a virtual space with someone, but has also pointed out that the expected high-price, low-volume first product makes this a hard sell. Even if you’re daft enough to spend $3000 on an unproven version 1 product, how many of your friends are? Here, Meta’s (relatively) cheap-and-cheerful offering has a significant advantage, and nevertheless they have so far failed to get much traction for the idea of socialising in the metaverse.</p>
<p>How about work? This is a field where cost is less of an obstacle, and niche products have more of a chance to establish themselves. Indeed, in my own neck of the woods of medical visualisation, I’ve seen a few impressive proofs of concept. However, nothing as yet has broken though to be a must-have. The fact that Microsoft, with its well regarded HoloLens technology, has chosen to get out of the space doesn’t suggest they have much confidence that it will take off any time soon.</p>
<p>How about something like the <a href="https://www.sightful.com/">Sightful</a>’s recently-announced “AR laptop”, with a headset simulating an enormous display in a portable package? This seems like an application with potentially broad appeal, and it’s certainly easier to envisage spending that price on something that replaces your MacBook as opposed to something that replaces your Switch. However, it also highlights the key weakness of headsets in general — in bringing you into a virtual world, they take you out of this one.</p>
<p>The problems are twofold. Firstly, the physically bulky hardware obscures exactly the part of your face that’s most key to interacting with other people. An Apple headset is likely to be somewhat sleeker that their competitors, but without an almost unprecedented leap past the current state of the art it will still present a massive barrier between you and those around you.</p>
<p>Less obvious, but more fundamental, than this physical barrier is the <em>attention</em> barrier. When using such a headset, your attention is wholly (VR) or partly (AR) elsewhere. <em>Those around you know this</em>, and this will fundamentally colour your interactions with them. The same could be said for laptops, phones and tablets (and, going back further, Walkmans, TV sets and novels), but with a fundamental difference — shared context.</p>
<p>If you’re dividing yourself between a companion and a screen, they can see that you’re doing so, and you can both modulate your interaction accordingly. Note that this doesn’t imply any primacy of the personal over the digital, but rather the ability to consciously and collaboratively balance the two. Perhaps you want to ask a colleague a question, but see that they’re doing something on their phone so hold off. They, in turn, notice you doing this, and pause their task at an appropriate point to turn their attention to you. This kind of natural, implicit negotiation is only possible if everyone in the same space is experiencing the same thing, and that’s exactly the assumption that VR and AR subvert.</p>
<p>In some cases, this kind of isolation might be acceptable, or even desirable. However, it significantly limits the contexts in which the platform can be used (in stark contrast to laptops, and especially phones, which can be used essentially anywhere). To counteract this, the advantages of the platform would need to be substantial — the fabled 10x improvement over doing things the old way. As of yet, nothing that compelling has emerged. Apple’s entry into the market will certainly liven things up, but they’ll have to launch something truly astonishing to accelerate adoption in a meaningful way. Apple (since 1997, at least) have focussed on broad appeal, and there doesn’t seem to be an opening for that in this case. Which leaves an obvious conclusion; they’re playing the long game.</p>
id:/2023/04/bea_wolf
Bea Wolf
2023-04-03T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2023/04/bea.jpg" alt="Bea Wolf" /></p>
<blockquote>
<p>Your leader sparkles with power and also with sparkles</p>
</blockquote>
<p>I don’t often pre-order things, but I pre-ordered <em><a href="https://www.smbc-comics.com/bea/">Bea Wolf</a></em> as soon as I got wind of it. I’m pleased to say that it didn’t disappoint. It’s a graphic novel retelling of the Old English epic poem <em>Beowulf</em>, with words by Zach Weinersmith (of the decidedly not-for-kids <a href="https://www.smbc-comics.com">SMBC</a>), and pictures by French artist Boulet. The Danes and Geats are replaced by five-summered kids wielding foam-hilted swords against fun-hating neighbour Mr Grindle. It’s permeated with a sense of fun and innocent naughtiness, epic from a knee-high point of view, and I was grinning from beginning to end.</p>
<p>The language echoes the spirit and some of the form of the original — poetic rather than prosaic — but is still fresh and accessible enough to keep a 7- and 10-year old engaged. The black-and-white art has an eye-catching style full of character, depth and weight. Most importantly, the story shines through. It will definitely be a regular fixture in our bed-time rotation (a place of high honour), and I’m crossing my finger that Weinersmith & Boulet are already working on the remaining two volumes.</p>
<p><img src="/2023/04/grindle.jpg" alt="Mr. Grindle" /></p>
id:/2023/03/objection
Objection!
2023-03-25T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2023/03/phoenix.png" alt="Phoenix Wright, Pixelated Attorney" /></p>
<p><a href="https://blogs.microsoft.com/blog/2023/03/16/introducing-microsoft-365-copilot-your-copilot-for-work/">Microsoft 365 Copilot</a>, the recently announced addition of ChaptGPT-like Large Language Models to their venerable Office tools (and the somewhat less venerable Teams), is one of the more concrete and at least potentially potent applications of Large Language Models to date. As well as straight-forward localised capabilities such as summarisation and image generation, it offers a new way to query and aggregate data from across an entire company. While incredibly useful (if it works as advertised), this could have some interesting unintended consequences.</p>
<p>Google, arguably Microsoft’s biggest rival in both office tools and LLMs, recently ran into trouble for <a href="https://techreport.com/news/3492552/doj-accuses-google-of-destroying-messages-in-antitrust-case/">not retaining potentially incriminating messages</a>, highlighting the fact that a company’s electronic records are fair game as evidence in court actions. Traditionally, this has involved one party producing a list of documents the other has to produce, and having teams of paralegals and junior lawyers pore over them to find relevant details. Companies such as <a href="https://www.logikcull.com">Logikcull</a> already apply AI techniques to automate this process, but what if you already had a model customised for and connected to the company’s data<sup id="fnref:model"><a href="#fn:model" class="footnote">1</a></sup>? To look at it another way, could a company’s Copilot be called as a witness?<sup id="fnref:witness"><a href="#fn:witness" class="footnote">2</a></sup></p>
<p>Obviously, a cloud-provided AI tool is very different from a human being, but the legal fiction of corporate personhood is well established, and it’s not too much of a leap to consider interrogating the tool to be akin to interrogating that fictional person. In the US, corporations have long claimed, and been granted, protections under the first amendment. Are we about to see them take the fifth?</p>
<p>There are numerous issues with this framing, and of course it needs a massive I Am Not A Lawyer stamp applied. However, it seems to me that there’s enough wiggle room that someone will try it, and probably before too long. A lot of it, particularly in common law systems such as the US and UK, will depend on how early cases pan out. It’s impossible to predict what will happen, but the impact on everyone from cloud providers to CIOs to white collar criminals could be profound.</p>
<p><em>This post is an extended version of <a href="https://mas.to/@robhague/110074402750147245">a post on Mastodon</a>, which kicked off an interesting conversation with <a href="https://mastodon.xyz/@sgf">Simon Frankau</a>. The header image is based on a screenshot from <a href="https://www.ace-attorney.com">Phoenix Wright: Ace Attorney</a> by <a href="https://www.capcom.com">Capcom</a>.</em></p>
<div class="footnotes">
<ol>
<li id="fn:model">
<p>One issue would be the scope of the demand; the documents to be turned over during discovery are tightly defined, and litigants don’t have carte blanche to look at anything they want to. Based on the presentation, Microsoft actually seem to be in a pretty good position here, as they separate the linking to existing data (“grounding” in their architecture) from the main LLM, in part to explicitly implement access controls. However, this sort of strict separation isn’t a given, and even if you have it in the first version, constant vigiliance is required to avoid compromising it as the architecture evolves. <a href="#fnref:model" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:witness">
<p>I’m not suggesting that litigators will literally be cross-examining a laptop in the witness stand (well, probably not), but demanding access to the tool as part of the discovery process seems well within the bounds of possibility. <a href="#fnref:witness" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/03/scotsmanhood
Corporate Scotsmanhood
2023-03-19T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<blockquote>
<p>Apple is only really Apple when they put the user first.</p>
</blockquote>
<p>The above phrase leapt out at me when reading a recent <a href="https://daringfireball.net/linked/2023/03/02/eu-apple-antisteering">Daring Fireball post</a>, and it’s a pithy distillation of a common sentiment amongst Apple aficionados. However, I think that sentiment is mistaken, or at least off the mark. It’s a corporate variation of the <a href="https://en.wikipedia.org/wiki/No_true_Scotsman">true Scotsman</a> fallacy.</p>
<p>Apple is really Apple <em>by definition</em>. Tim Cook’s Apple is no less the real Apple than Steve Job’s, or John Sculley’s, or Gil Amelio’s<sup id="fnref:parents"><a href="#fn:parents" class="footnote">1</a></sup>. Fundamentally, the company that compromises user experience in the name of services revenue is the same company that created the iPhone, the Mac, and the apple ][ (not to mention the <a href="https://lowendmac.com/2013/the-story-behind-apples-newton/">Newton</a>, the <a href="https://lowendmac.com/1990/mac-classic/">Mac Classic</a> and the <a href="https://lowendmac.com/2015/ill-fated-apple-iii/">Apple III</a>).</p>
<p>From another perspective, though, they’re different companies. <a href="/2013/05/google_is_not_your_friend.html">Corporations aren’t people</a>, but like people they change over time. The Apple of 1977, or 1984, or 2007, is not the Apple of 2023. Moreover, it’s reasonable to compare today’s Apple to those previous incarnations, for better or worse.</p>
<p>This suggests an alternate framing of the sentiment above. Apple is always <em>really</em> Apple, but it’s only the <em>best</em> Apple when it puts the user first. That’s a sentiment I can get behind.</p>
<div class="footnotes">
<ol>
<li id="fn:parents">
<p>Ask your parents. <a href="#fnref:parents" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2023/02/on_bullshit
On Bullshit
2023-02-05T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>The oft-quoted <a href="https://press.princeton.edu/books/hardcover/9780691122946/on-bullshit"><em>On Bullshit</em>, by Henry G Frankfurt</a>, is a short but thought-provoking read. It centres on the definition of <em>bullshit</em>, as distinct from <em>lying</em>:</p>
<blockquote>
<p>It is impossible for someone to lie unless he thinks he knows the truth. Producing bullshit requires no such conviction. A person who lies is thereby responding to the truth, and he is to that extent respectful of it. When an honest man speaks, he says only what he believes to be true; and for the liar, it is correspondingly indispensable that he considers his statements to be false. For the bullshitter, however, all these bets are off: he is neither on the side of the true nor on the side of the false. His eye is not on the facts at all, as the eyes of the honest man and of the liar are, except insofar as they may be pertinent to his interest in getting away with what he says. He does not care whether the things he says describe reality correctly. He just picks them out, or makes them up, to suit his purpose.</p>
</blockquote>
<p>This seems particularly relevant when it comes to ChatGPT and other large language models. While inarguably impressive, useful in certain contexts, and a foundation on which I’m sure many great things will be built, their domain is limited to language. They lack the underlying connection to reality described in the above excerpt. A good understanding of bullshit therefore seems like a useful tool to have when thinking about them, and Frankfurt provides a good starting point.</p>
id:/2023/02/write-less
Writing Less
2023-02-02T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>In a recent, and appropriately brief, post, Matt Gemmel extolled the virtues of allowing yourself to <a href="https://mattgemmell.scot/write-less/">write less</a>. Specifically, of not worrying too much about the quantity, or even the quality, of what you put on your own blog, and thus removing the psychological barrier to writing there. With the continuing implosion of <a href="https://twitter.com">Twitter</a>, I’ve drifted over to <a href="https://joinmastodon.org">Mastodon</a> (I’m <a rel="me" href="https://mas.to/@robhague">@robhague@mas.to</a>), but I’m also using it as an opportunity to re-evaluate my use of social media in general. Posting more freely on here seems like a good thing to try, and more importantly one over which I have complete control. Let’s see how it goes.</p>
id:/2022/09/artifical_id
Artifical Id
2022-09-22T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>In science fiction, computers are typically portrayed as unemotional, detached, soulless. Their output is logically correct but cold. Thought without feeling. However, as we start to see the emergence of AI-created images, the opposite seems to be true.</p>
<p>Take the first image in <a href="https://stratechery.com/2022/the-ai-unbundling/">this recent Stratechery article</a>. It’s an image generated using <a href="https://www.midjourney.com/home/">Midjournery</a>, based on a simple text prompt. It captures the <em>feel</em> of the concept Thompson is trying to get across, and as such works well as an illustration. However, if you look closer:</p>
<blockquote>
<p>my boy on a bicycle, meanwhile, is missing several limbs, and his bike doesn’t have a handlebar</p>
</blockquote>
<p>I intentionally studied the image when I first came across it (given the subject of the article, the fact that it was AI-generated wasn’t a surprise, and these images still pique curiosity), but I completely missed these logical flaws until I went back and checked. The AI had done a pretty good of evoking the emotional meaning of the prompt, while completely dropping the ball on the structural details.</p>
<p>This seems to be a theme across generative AI. Beyond images, <a href="https://github.com/openai/gpt-3">GPT-3</a> will generate flowing, natural-seeming prose that, when you think about it, comprises entirely dead ends and wild goose chases rather than coherent reasoning. <a href="https://github.com/features/copilot">Copilot</a> will generate code that, at a glance, appears to be just what you need, but doesn’t actually compile.</p>
<p>Of course, these models will get better, and the think will catch up with the feel (whether they can start to <em>really</em> construct a bike or an argument is an entirely different question). However, I think it’s interesting that their first successes were with the heart rather than the head.</p>
<center>
<img alt="An android dreaming of electric sheep, by Stable Diffusion" src="/2022/09/android.png" />
<p><i>An android dreaming of electric sheep, by
<a href="https://github.com/CompVis/stable-diffusion">Stable Diffusion</a></i>
</p>
</center>
id:/2022/07/stillracing
Still Racing The Beam
2022-07-30T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2022/07/pitfall_detail.png" alt="Pitfall on the Atari 2600" width="100%" /></p>
<p>Atari recently celebrated its <a href="https://www.atari.com/50th-anniversary/">50th anniversary</a>, which reminded me of the excellent <a href="https://mitpress.mit.edu/books/racing-beam">Racing the Beam, by Nick Montfort and Ian Bogost</a>. It’s a fascinating exploration of their iconic home console, one of the first with interchangeable games (in the form of cartridges): the <a href="https://atariage.com/2600/">Atari 2600</a>.</p>
<p>From pull quote on the dust jacket:</p>
<blockquote>
<p>William Morris famously opined “You can’t have art without resistance in materials.”</p>
</blockquote>
<p>The 2600 provided a <em>lot</em> of resistance. Architecturally, it offered little more than was necessary to implement Pong and similar games — two player sprites, two bullets, and some very low resolution play fields. It had 128 bytes of RAM (not kilobytes, <em>bytes</em>), and only 2KB of ROM in each cartridge.</p>
<p>The basic capabilities of the machine topped would, at first glance, seem to top out with things like <a href="https://archive.org/details/atari_2600_combat_-_tank-plus_tank_1977_atari_joe_decuir_steve_mayer_larry_wagner">Combat</a> (which is, admittedly, quite fun). However, later developers (both within Atari and elsewhere, notably Activision) pushed past these to produce far more sophisticated titles than the original designers had ever envisaged. <a href="https://archive.org/details/atari_2600_pitfall_1983_cce_c-813">Pitfall</a>, pictured above, is a prime example. Another is Garry Kitchen’s truly remarkable effort to port <a href="https://garrykitchen.medium.com/how-i-spent-my-summer-of-1982-59638293f358">Donkey Kong</a></p>
<p>This involved a deep understanding of how the machine worked, including the dynamic behaviour: <em>when</em> everything happened. A key technique was changing what was drawn (the playfield and sprites) <em>while they were being drawn</em>. This was usually done in the split-seconds when the cathode ray had finished one line and was returning back to the start of the next, hence the name of the book: the code was literally racing the beam.</p>
<p>In my previous job, we created a product that solved a very similar problem. When translating a digital circuit from the idealised world of 1s and 0s into the messier domain of physical wires and voltages, it’s imperative that a signal is steady at its intended value by the time it’s needed (setup), and it stays that way until everything that depends on it has stabilised (hold). This is a problem that gets harder, rather than easier, as technology improves – newer, smaller manufacturing processes are both more variable and can run at higher speeds, leading to tighter and tighter constraints. Our software would adjust circuits until they met these constraints, performing the job that the Atari programmers were doing at a far larger scale.</p>
<p>These days, I’ve moved away from silicon and into the cloud. When creating distributed applications, one of the primary things you have to bear in mind is latency, and which data can be where, by when. Networks get faster, but this is fundamentally limited by physics – the speed of light. We’re still racing the beam.</p>
id:/2022/07/flying_solo
Flying Solo
2022-07-03T20:04:06+00:00
Rob Hague
rob@rho.org.uk
<p>After a relatively short public beta, <a href="https://github.com/features/copilot/">GitHub Copliot</a> is now available to the public. While it’s certainly impressive, I won’t be adopting it (or similar services like <a href="https://aws.amazon.com/codewhisperer/">Amazon CodeWhisperer</a>) any time soon, for a couple of reasons.</p>
<p>One concern is the licensing implications. These systems exist to insert non-trivial chunks of code derived from other sources into the code you’re working on. There’s no guarantee that such inclusion is permitted by the licence for those sources, so this potentially opens users up to significant legal risk. While there’s some <a href="https://aws.amazon.com/codewhisperer/">informed analysis</a> suggesting it’s not violating copyright law (in the US, at least), it’s very early days, and the true situation is only likely to become clear when cases end up before a court.</p>
<p>Microsoft, and so presumably by extension GitHub, have phalanxes of very smart lawyers on board, and I have no doubt that they’ve thoroughly understood the risk they’re taking. However, they’re also very well resourced, and will have been mainly considering the effects on themselves rather than everyone else. Just because the HMS GitHub is sailing confidently into the storm, it doesn’t mean it’s a good idea to hop into your canoe and paddle after them.</p>
<p>More fundamentally, frictionlessly dumping code snippets that you don’t understand into your editor seems to me to be a very bad idea. Copilot may save on some typing, but at the risk of not knowing what you have at the end. Brian Kernighan said that debugging is twice as hard as writing a program in the first place. Copilot only addresses the second, while robbing you of the context you need to do the first.</p>
<p>I’m not against the idea of AI assistance — that would be an odd position to take for the CTO of a company aiming to provide exactly that in the context of surgery — but Copilot and its ilk seem to me to sit in a kind of coding uncanny valley. The results are convincing enough to be dangerous. In time, the performance of these tools will get even better, and more importantly we’ll get to grips with how humans and AI can work on code together. Until then, I’ll be flying solo.</p>
id:/2022/05/the_ratio
The Ratio
2022-05-28T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>If you find yourself needing to entertain small (or indeed not-so-small) children, it’s useful to know that there are a few things that almost always provide delight vastly out of proportion to their cost. Bubbles, balloons, face paints. Playing with technology is typically an expensive hobby, but here too there are exceptions. In particular (and I’m far from the first to make this observation), <a href="https://en.wikipedia.org/wiki/Microcontroller">microcontroller</a> kits offer a stupendous ratio of money to fun.</p>
<p>In some ways, with their limited capabilities but openness to tinkering, they feel a lot like the home microcomputers of the 80s. However, those were still relatively expensive — even the famously cheap <a href="http://www.computinghistory.org.uk/det/424/Sinclair-ZX-Spectrum-48k/">ZX Spectrum</a> was comparable to a decent iPad or Xbox today<sup id="fnref:inflation"><a href="#fn:inflation" class="footnote">1</a></sup>. In contrast, the <a href="https://www.raspberrypi.com/products/raspberry-pi-pico/">Rapsberry Pi Pico</a> starts at <em>£3.90</em>, literally a hundred times cheaper. If you fry it by wiring it up wrong, or want to permanently embed it into a project, no problem — just get another. This removes a big obstacle to messing around.</p>
<p>Another obstacle has traditionally been the accidental complexity of working with them, but no more. The Maker community and the companies around it — <a href="https://www.arduino.cc">Arduino</a>, <a href="https://www.adafruit.com">Adafruit</a> and many others — have done fantastic work on the tools and development environments, vastly reducing the distance between having an idea and seeing it work. For me, the apotheosis of this (so far, at least) is <a href="https://circuitpython.org">CircuitPython</a> (and the closely related <a href="https://micropython.org">MicroPython</a>):</p>
<ol>
<li>Plug your development board in via USB, and you’ll see a drive containing a file called <code>code.py</code></li>
<li>Edit that file and save the changes</li>
<li>There is no step 3</li>
</ol>
<p>Removing all of the tooling complexity makes coding for hardware as easy making stuff appear on the screen, and bridges the gap between the two. For someone who’s always been on the virtual side of that fence (even while writing tools for the physical side), it’s a refreshing expansion of horizons.</p>
<p>My only regret is that I’m late to the party. The girls and I have played around with <a href="https://microbit.org">BBC micro:bits</a> and the <a href="https://www.kittenbot.cc/products/meowbit-codable-console-for-microsoft-makecode-arcade">Meowbit</a>, and done a bit of GPIO stuff with the <a href="https://www.raspberrypi.com/">Raspberry Pi</a>, but the real gateway for me was my recent interesting in <a href="//2022/01/why_make_a_keyboard.html">keyboards</a>. Now, though, I’m hooked, and if you enjoy messing around with code I strongly suggest you follow my lead and give it a go. After all, what have you got to lose? It’s cheaper than a pack of balloons.</p>
<div class="footnotes">
<ol>
<li id="fn:inflation">
<p>The ZX Spectrum was £125 when it launched in 1982, <a href="https://iamkate.com/data/uk-inflation/">equivalent to about £500 today</a>. At time of writing, an Xbox Series X is £450 (if you can get one), and a 64GB iPad Air is £569. <a href="#fnref:inflation" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2022/05/oops_i_did_it_again
Oops I Did It Again
2022-05-02T11:05:19+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2022/05/manta_scale.jpg" alt="Manta keyboard with various objects for scale" /></p>
<p>To make one weird custom split keyboard may be considered unfortunate. To make two starts to look like a rabbit hole. Nevertheless, that’s where we are.</p>
<p>Even before I’d completely finished my <a href="http://rob.rho.org.uk/2021/12/the_corne_maze.html">first keyboard build</a>, I was already looking for ideas for the next. Out of several contenders, the one that caught my eye was the <a href="https://mechboards.co.uk/products/manta-kit">Manta</a> kit. This is a very compact single-piece split keyboard kit that takes the de facto standard Pro Micro controller board. It occurred to me that pairing it with the pin-compatible <a href="https://nicekeyboards.com/nice-nano/">nice!nano</a> would result in a neat and very compact wireless keyboard to complement my Corne. After vacillating a little about whether I could commit to such a restricted layout, I ordered the bits as a birthday present to myself.</p>
<p>As it happened, I should probably done a bit more research. Once I came to put things together, I realised that the Manta wasn’t actually on the list of supported hardware in <a href="https://zmk.dev">ZMK</a>, the preferred firmware for the nice!nano. A little searching suggests that I was the first person to try this particular combination<sup id="fnref:first"><a href="#fn:first" class="footnote">1</a></sup>. This was more ambitious that I was aiming for on my second build. I felt like a challenge, though, so I pressed ahead.</p>
<p>The Manta doesn’t have the wealth of easily available resources as more popular kits like the Corne, but I did manage to track down a schematic showing how the pins are wired up (in particular, the rows and columns of the matrix). In combination with ZMK’s excellent <a href="https://zmk.dev/docs/development/new-shield">new shield documentation</a><sup id="fnref:shield"><a href="#fn:shield" class="footnote">2</a></sup>, this was enough to get the hardware up and running.</p>
<p>(One aspect worth mentioning is ZMK’s interesting tooling approach; while you can download a tool chain and build locally, this isn’t necessary if all you’re doing is adding new configurations. Instead, they have a very straightforward setup based on <a href="https://zmk.dev/docs/user-setup">GitHub Actions</a>. This builds the desired firmware on each change pushed to GitHub, and you just download the resulting artefact to flash to the controller. This sounds baroque on paper, but works really well on practice and removes a significant barrier to getting started.)</p>
<p><img src="/2022/05/manta_ipad.jpg" alt="Manta keyboard with an iPad Mini" /></p>
<p>So far, I’m pretty pleased with the result. I’m using essentially the same <a href="http://rob.rho.org.uk/2022/03/no_place_like_home_row.html">layout</a> as for my Corne, so the main differences are physical — the proximity of the two halves, and in particular the higher position of the thumb keys. The latter took a bit of getting used to, and isn’t quite as comfortable for me as the Corne’s more spacious arrangement, but it seems workable and a reasonable trade-off to reduce the overall footprint.</p>
<p>I wanted to try a tactile switch this time around, and went with <a href="https://mechboards.co.uk/products/durock-tactile-67g-teal">Durock Tactile 67g Teal</a>. I’ve <em>not</em> <a href="http://rob.rho.org.uk/2022/02/this_little_finger.html">installed a heavier switch for the P key yet</a>; I thought that the reasonably high activation force combined with the perceptible bump would mean it wasn’t necessary. So far this seems to be the case, but I’ll need to use it more to be sure.</p>
<p>The feel of the switches is great, and I think I prefer them over linear. I’m definitely noticing the noise, though — while not too obnoxious, it’s certainly a lot louder than the Silent Ink Blacks in my Corne. For my next build, I’ll be looking for something in between the two.</p>
<p>Yes; “next build”. The Corne is a good home keyboard, and the Manta joins it as a fine portable one, but there are more things I want to try, both for the pleasure of making them and the pursuit of elusive perfection. The rabbit hole goes on for while longer yet.</p>
<p><img src="/2022/05/manta_antiscale.jpg" alt="Manta keyboard with various unhelpful objects for scale" /></p>
<p><em>I may write up a build guide in due course, but if you want to try the Manta with a nice!nano my shield configuration is <a href="https://github.com/robhague/zmk-config">here</a>.</em></p>
<div class="footnotes">
<ol>
<li id="fn:first">
<p>If you know differently, please let me know. <a href="#fnref:first" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:shield">
<p>“Shield” is a term originating in the Arduino ecosystem; in ZMK, it specifically means a the board that carries the actual switches, and connects to a daughterboard containing the controller (the “board”) as opposed to having a controller built in. In this case, the Manta is the shield and the nice!nano is the board. <a href="#fnref:shield" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2022/03/no_place_like_home_row
There's No Place Like Home-Row
2022-03-31T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>My <a href="/2022/02/this_little_finger.html">last post</a> describe the process of figuring out how to lay out the letters on the Corne in a way that will work with my fingers. This works fine for <a href="https://monkeytype.com/">MonkeyType</a>, but isn’t quite sufficient for using the keyboard day to day. There are a few other things you need to cover. Before diving into the details, here’s the layout:</p>
<p><img src="/2022/03/corne_layout_full.svg" alt="My full Corne keyboard layout (at time of writing)" /></p>
<p>The first thing that leaps out at you is the keys that <em>aren’t</em> used — along with the keys above and below the repositioned P, I’ve not assigned anything to the outermost (“pinky”) columns on both sides, or the outermost thumb keys.</p>
<p>This may seem like an odd choice, given that the keyboard doesn’t have that many keys to start off with. However, my experiments with the letters convinced me that reducing finger movement is a good thing to prioritise, even at the cost of some complexity.</p>
<p>Speaking of complexity, an explanation is in order for anyone not familiar with layered layouts. This basically means that additional modifiers (beyond the usual shift, control and so on) are used to pack multiple logical keys on to the same physical one. The blue legend shows what you get when you press a key on its own (almost exclusively letters in this case), the green when you hold the “raise” modifier, and the red when you hold the “lower” one. As a concrete example, to type an opening parenthesis “(“ you hold down “lower” and press the key that would usually type a “G”. This all sounds convoluted, but you get used to it surprisingly quickly<sup id="fnref:soft"><a href="#fn:soft" class="footnote">1</a></sup>.</p>
<p>For everything down to a 60% keyboard<sup id="fnref:percent"><a href="#fn:percent" class="footnote">2</a></sup>, layers alone are sufficient. However, when you get down to 40% (then reduce that to effectively 30% by ignoring ten of the keys), you run into a problem. Where do you put the modifier keys? There are various options, but the one that appealed to me was <a href="https://precondition.github.io/home-row-mods">home row mods</a>.</p>
<p>This approach takes advantage of the <em>tap-and-hold</em> functionality available in <a href="https://qmk.fm">QMK</a> and other firmware, which lets you double up the functionality of a key. There’s a lot of subtlety in the details, but basically a short tap has one function (e.g., typing an “F”) while holding the key down has another (e.g. the shift modifier). Home row mods puts the usual modifiers (shift, control, opt/alt and command/win) on to the home keys. This has the major benefit of placing them in the most accessible positions on the keyboard.</p>
<p>The main cost of home row mods, and layers in general, is cognitive load. Rather than just having to move your fingers to the required position, you need to figure out the combination (and, in some cases, temporal sequence) to get the effect you want. This can, of course, be learnt — people learn to play the piano, fly jet fighters, and use Emacs, after all — but it implies a significant learning curve. For something that has, for many of us, has been effortless for years or decades, it can be a bitter pill to swallow.</p>
<p>Nevertheless, the layout is now complete, which means I can use it for day-to-day work, and I’ve been doing so on-and-off for a couple of weeks now. Over the course of that time, I’ve made a couple of minor adjustments — most notably adding the extra Cmd key on the right to make one-handed use of the CUA keyboard shortcuts easier — but I’m generally pretty happy with it. I’m still climbing that ferocious learning curve, but it’s getting easier and I feel like it’ll be worth it in the long run.</p>
<p>This is definitely not the final endpoint for this layout. I’m sure there will be plenty of further tweaks and changes as I use it more. The basics are solid, though, and I expect to steadily approach and then surpass my proficiency with a standard keyboard. Moreover, I’ll have fun doing it. Learning a new skill is always stimulating, and I’m enjoying the mental gymnastics.</p>
<p><em>The QMK implementation of this layout is available <a href="https://github.com/robhague/qmk_firmware/tree/master/keyboards/crkbd/keymaps/robhague">on my GitHub account</a>, if you want to look into more details.</em></p>
<div class="footnotes">
<ol>
<li id="fn:soft">
<p>As is often pointed out, this isn’t a million miles away from how the soft keyboards on modern smartphones work, and plenty of people adapt to those just fine. <a href="#fnref:soft" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:percent">
<p>In the custom keyboard world, sizes are described as the rough number of keys expressed as a percentage, as a full keyboard layout has about 100 keys. So, 60%, a common choice for compact keyboards that takes that standard layout and drops the numpad, F keys, navigation cluster and arrows, has around 60 keys. <a href="#fnref:percent" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2022/02/this_little_finger
This Little Finger On My Right
2022-02-27T21:22:00+00:00
Rob Hague
rob@rho.org.uk
<p>Having <a href="/2021/12/the_corne_maze.html">built my keyboard</a>, the next step was to start using it. Naively, I expected the learning curve would be pretty small, as I’ve been using a split keyboard for decades, and (I thought) touch type with a reasonable approximation of proper technique. This did not turn out to be the case.</p>
<p>Using <a href="https://monkeytype.com/">MonkeyType</a>, which seems to be the typing tester of choice for <a href="https://www.reddit.com/r/MechanicalKeyboards/">r/MechanicalKeyboards</a>, I get around 60wpm (words per minute) on both the Microsoft Sculpt and my MacBook’s built in keyboard without any particular effort. While this won’t win any prizes, it’s perfectly respectable and certainly fast enough that I don’t feel it’s holding me back.</p>
<p>When I first tried the Corne, I was lucky to hit 20wpm, and more worryingly the accuracy was rarely above 80%. I was expecting a little difference, but not this kind of gulf. On closer examination, I noticed a clue that both pointed towards the root cause, and lead me down a bit of a rabbit hole. When typing on the Corne, I kept inserting spurious semicolons.</p>
<p>To take a step back, the idea behind staggered ortholinear keyboards like the Corne is to minimise lateral finger movements. To this end, each column of keys has a dedicated finger. This corresponds well to to touch typing on a normal keyboard, which is why I thought the transition would be a simple matter of getting used to the different offsets. However, in my case there’s a complication. One of my fingers doesn’t entirely work.</p>
<p>Specifically, it’s the little finger on my right hand. While I can grip with it fine, I can’t extend it properly, or lift it off a flat table, as demonstrated in this entirely convincing video:</p>
<video src="/2022/02/fingers.mp4" width="100%" muted="" loop="" autoplay=""></video>
<p>I first noticed this in my early twenties; I asked my GP about it, and they basically shrugged and said it was just one of those things. Given that it wasn’t particularly bothering me, I put it to the back of my mind.</p>
<p>The link to the semicolons is obvious; that’s the home key for that finger, and I was clearly resting the finger on the key with just enough pressure to occasionally activate it. Simple enough, but you’d expect that to happen on all keyboards, not just ortholinear ones.</p>
<p>Paying closer attention to my typing, I was surprised to see that I <em>wasn’t</em> following standard touch typing technique nearly as closely as I thought. My left hand was pretty well behaved, but my right darted all over the place. I instinctively held my little finger curled in to my palm, and my ring finger did double duty for the keys it would normally press (much like the index fingers do in the middle).</p>
<p>On the Corne I was consciously trying to type properly, resulting in the extra semicolons. Having discovered this, I could have just shrugged and adopted the same curled-finger technique, but that would dilute some of the benefits of the new layout. Instead, I wanted to try and do something to improve the situation.</p>
<p>To solve the resting problem, I took advantage of the hardware flexibility the DIY approach gives me. I removed the Gateron Ink Silent Black and replaced it with a <a href="https://mechboards.co.uk/products/kailh-box-chinese-style-ancient-grey">Kailh Box Chinese Style Ancient Grey</a>:</p>
<div class="images-from-mail">
<img class="half-width" src="/2022/02/odd_switch_out.jpg" alt="Right hand side of a Corne keyboard with the switches expose. One switch is of a different type." />
</div>
<p>Both are linear switches (so no noticeable bump on the activation point), but the activation force of the Kailh is significantly higher than the Gateron (95g vs 60g). As hoped, this means that I don’t accidentally activate the key while resting on it, but can still press intentionally without issue.</p>
<p>The spurious semicolons were gone, which brought a big improvement in accuracy but only a mild one in speed. Some more mindful typing later, I figured out another, more subtle issue caused by my dicky finger. Because I can’t lift my finger on its own, I have to lift my <em>entire hand</em> to position that finger on another key. This, and the need to return the home position afterwards, has a significant impact on speed (and accuracy, if I’m not careful in getting back).</p>
<p>At this point, it occurred to me that I not only have flexibility in hardware, but in software too. I can put keys wherever I like. Specifically, if I move P down to the home row, I can type every letter without the gross hand movement.</p>
<p><img src="/2022/02/corne_modified_qwerty.svg" alt="QWERTY layout with the P dropped down" /></p>
<p>Sure enough, with this change, both speed and accuracy immediately got far closer to acceptable levels. I still need a lot of practice to reach and then surpass those I get with a standard keyboard, but I can now see a clear path to get there.</p>
<p>This raises a dangerous question: why stop there? If I’m deviating from QWERTY, there are plenty of other layouts out there to pick from, most of which optimise for reducing finger motion. <a href="https://workmanlayout.org/">Workman</a> even specifically cites “<a href="https://workmanlayout.org/#pros-and-cons">Reduced load on the right pinky compared to Dvorak and Colemak</a>” as an advantage. Perhaps it’s time to see how deep the rabbit hole goes.</p>
id:/2022/02/infrastructure_as_in
Infrastructure As Intent
2022-02-12T13:44:33+00:00
Rob Hague
rob@rho.org.uk
<p>Following on from my <a href="http://rob.rho.org.uk/2022/01/more_than_one.html">previous post</a>, I saw a subsequent article on the same site <a href="https://www.lastweekinaws.com/blog/the-cdks-most-fundamental-flaw-is-fixable/">looking at the problem from a different angle</a>. The part that most interested me was the <em>preservation of intent</em> across multiple languages, in this case the programmatic AWS CDK used to define a resource graph in the abstract, and the representation you send to the cloud to turn the definition into (virtual) reality.</p>
<p>This is closely related to a central issue I found when working on this problem; <em>secondary notation</em>. This is all the bits of the program that are ignored when it is executed, but provide vital information to help a human reader understand it<sup id="fnref:def"><a href="#fn:def" class="footnote">1</a></sup>. It can take various forms, not all of which make sense in a particular context. Things like variable names and comments make sense in most (but not all) languages. In contrast, a textual language can convey secondary information by the choice of (non-significant) whitespace and parentheses, whereas a visual language might do so with the shape, colour and position of the corresponding element. Both are valuable forms of secondary notation, yet there isn’t a good way to represent them in the other context.</p>
<p>The solution I explored revolved around ensuring that secondary notation was preserved across translations between languages (even when it isn’t visible), and crucially across modifications to the program. This is essentially the same problem that Kehoe describes in relation to CDK and Cloud Formation — how to avoid the author’s intent being lost in translation between forms. The concrete example he mentions, <a href="https://lifa.dev/ingraph/">InGraph</a>, takes this idea and purports to provide a rich, high level language environment where intent (or secondary notation) is preserved in the move to and from AWS’s services. I’ll need to dig deeper to determine how successful it is in this regard, but regardless it’s a powerful approach to this problem and many others.</p>
<div class="footnotes">
<ol>
<li id="fn:def">
<p>As always, things are never this clear-cut; there isn’t necessarily one single way to “execute” a program. But you get the idea. <a href="#fnref:def" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2022/01/twitter_challenge_done
No Twitter Challenge — Done
2022-01-31T21:27:00+00:00
Rob Hague
rob@rho.org.uk
<p>It’s the end of January, and hence the end of the <a href="https://www.calnewport.com/blog/2021/12/20/analog-january-the-no-twitter-challenge/">No Twitter Challenge</a>. How did it go?</p>
<p>The first thing to say is that I did indeed stick to it (<a href="http://rob.rho.org.uk/2021/12/no_twitter.html">my version</a> of it) for the entire month. After having removed the app from the suggestions on my iPhone home screen, I was quickly fell out of the habit of reaching for it whenever I had a moment. The nearest I came to cracking was notifications; I’d left this on so I could still see DMs and replies, but if you don’t look at it for a while Twitter gets needy. It starts popping up notifications about posts it thinks you’d like in order to tempt you back. Tellingly, none of the ones it tried even came close to doing so.</p>
<p>The thing that surprised me was how little I missed it. I <em>did</em> miss the personal interactions with people, usually those I know in real life, that happen from time to time, but a bit of distance made me realise that these are relatively rare sunbeams through a massive cloud of passive, low-value background noise. There’s certainly value to be had on Twitter, but the amount of effort it takes to extract it has become onerous. It no longer seems like a good way to spend time, at least in the way I was using it.</p>
<p>So what did I do with all the time freed up by taking a break? Sadly, there’s not much to tell on this front — for various reasons, the Twitter fast coincided with a particularly busy time both at home and at work, so even with less time on social media I didn’t have an opportunity to take up cabinetmaking or learn the oboe. I’ve managed to post on here a little more than I would otherwise have (although this may have been due to the <a href="http://rob.rho.org.uk/2022/01/twentyyears.html">twentieth anniversary</a> putting it into my mind), and I’ve read more. Instead of dropping into Twitter, I’d open the Kindle app and read a page or two, or catch up on my RSS feeds.</p>
<p>I’ve also, like it seems everyone else, started playing <a href="https://www.powerlanguage.co.uk/wordle/">Wordle</a>. That game is notable for how <em>little</em> it demands your time — one brief puzzle and then it’s No Wordle For You until the next day. This is the complete antithesis of Twitter, and indeed most of the modern app and media landscape, which are consciously and insidiously designed to monopolise a much of your attention as possible, whether you want them to or not. Wordle, being simple and not requiring much in the way of resources to run, has the luxury of not needing to make money<sup id="fnref:nyt"><a href="#fn:nyt" class="footnote">1</a></sup>, but it offers an interesting contrast to the business model that seems to dominate technology at the moment.</p>
<p>In conclusion, I’m glad I did the challenge. It allowed me some space to reconsider my use of, and relationship to, the main social media platform that I use, both what I get out of it and what that costs. I’m not going to start preaching about any particular approach to this or any other service on the basis of my experience, but I am going to make some more permanent changes to my own behaviour. While I’m not going to make my absence from Twitter permanent, I <em>am</em> going to vastly reduce the time I devote to it. Hopefully this will force me to become more efficient at finding the good stuff, but at the very least it will limit the down side. The key thing is to be mindful of my time, and how I choose to spend it. Twitter is only one facet of this, but it’s a start.</p>
<div class="footnotes">
<ol>
<li id="fn:nyt">
<p><em>Update</em>: Mere hours after I posted this, Wordle was <a href="https://www.theguardian.com/games/2022/jan/31/wordle-new-york-times-buys">acquired by the New York Times</a> for a “seven-figure sum”. They’ve yet to say anything about changes to the gane, but they’ll presumably be looking to recoup their investement somehow. <a href="#fnref:nyt" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2022/01/more_than_one
There's More Than One Way To Do It
2022-01-30T15:47:43+00:00
Rob Hague
rob@rho.org.uk
<blockquote>
<p>I envision a world in which I can set things up in the AWS console (or really, any cloud vendor’s) via the magic of clicking things. The provider captures what I set up and renders it into code or configuration somewhere, similar to the way that the Console Recorder browser extension does. The provider becomes aware of what has been provisioned previously (and how!), then automatically generates diffs in the correct repository, or updates its CloudFormation/Terraform/CDK expression of the environment as it exists at the current moment.</p>
<p>– <a href="https://www.lastweekinaws.com/blog/clickops/">ClickOps</a> on <a href="https://www.lastweekinaws.com/">Last Week in AWS</a></p>
</blockquote>
<p>This idea strikes a chord with me. Firstly, I’ve done my fair share of both manual and automated AWS wrangling, and so am very familiar with the frustrations Corey talks about in the article. Secondly, it has strong echos of my PhD work, the core idea of which was to allow programs to be manipulated via various different representations (textual, graphical, physical), allowing you to pick the most appropriate for the task at hand.</p>
<p>It’s long been settled that both GUIs and programmatic or command line interfaces have their place, with their own strengths and weaknesses, and each is better than the other for some tasks. However, there remains a fundamental disconnect, a bright line between the two domains. Moving between the two often involves starting from scratch, and even when it doesn’t is usually a one-time, one-way process that comes with mismatches and loss of fidelity.</p>
<p>A much better approach, of which ClickOps is an example, is to allow a variety of tools to be used <em>together</em>, working on the same underlying artefact, with minimal overhead switching between them. Projects like <a href="https://arcade.makecode.com/">MakeCode Arcade</a> and <a href="https://www.trymito.io/">Mito</a> are already showing fruit in this area, as are perhaps <a href="https://www.airtable.com/">AirTable</a> and its brethren. It seems like this is an idea who’s time has come, though there’s a lot still to do.</p>
id:/2022/01/why_make_a_keyboard
Why Make a Keyboard
2022-01-26T21:18:00+00:00
Rob Hague
rob@rho.org.uk
<p>As documented <a href="/2021/11/twentyfour.html">here</a> and <a href="/2021/12/the_corne_maze.html">here</a>, I recently made a keyboard. This raises an obvious question; why bother? Instead of doing it yourself, you can easily buy a wide range of keyboards, often for less money and always for less effort. Of course, everyone who makes this odd choice will do so for different reasons, but here are mine.</p>
<p>One factor is that it allows you to get closer to what you want. I was after a split keyboard, and none of the off the shelf options seemed to be exactly what I was after. Add in that I wanted to try out full travel mechanical switches, and it narrows the choices even further.</p>
<p>However, that’s not sufficient justification on its own. The trade-off doesn’t make sense without the other, far more significant, term in the equation: it’s <em>fun</em>. I decided to build a keyboard for the building far more than for the keyboard.</p>
<p>My work is software development, as are many of my hobby projects. This has a lot going for it, but the results are by definition intangible. Moreover, it’s an inherently abstract endeavour. I wanted to try something more concrete, and with an end result I could hold.</p>
<p>I also wanted something a bit out of my comfort zone; while I’m familiar with digital electronics at a logical level, I’d not picked up a soldering iron in well over a decade (and even then I didn’t really know what I was doing). Learning to do this well was (and continues to be; I’m far from finished) a stimulating and rewarding challenge. To my surprise, I found it a very analogue experience, closer to painting than plug-and-play electronics. Perhaps not coincidentally, it’s incredibly absorbing — I found myself losing track of time.</p>
<p>Having finished the build, I’ve moved onto the software — both modifying the firmware, and modifying <em>myself</em> to learn to type on a very different layout. However, I’m already missing the hardware aspects. While reading around the custom keyboard community before starting this, I couldn’t understand how so many people ended up having half a dozen keyboards. Now I get it.</p>
id:/2022/01/twentyyears
Twenty Years of rho.org.uk
2022-01-15T11:25:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2022/01/twentyyears_posts.png" alt="Post frequency and length over 20 years" /></p>
<p>Twenty years ago today, the first version of this blog <a href="/2002/01/up_and_running.html">went live</a>. Back then, iPhones and Twitter didn’t exist, and I was a graduate student with few demands on my time. Things
<a href="/2004/05/got_one.html">have</a>
<a href="/2005/05/ring_my_friend_i_sa.html">changed</a>
<a href="/2013/03/rosalind.html">somewhat</a>
in the <a href="/2014/08/end_of_an_era.html">intervening</a>
<a href="/2015/05/margaret.html">period</a>, but the blog is still here.</p>
<p>I’ve not been all that consistent over the years, in either the
frequency or length of posting. There were 221 posts up to the start of 2022, ranging from 40 posts in 2003 to just one each in 2007 and 2018. The median post length is 123 words, the longest 4323 (my <a href="/2020/02/tsconf2019_cutting_edge.html">TSConf talk</a>, a bit of an outlier), and the shortest few just 4 a piece (not counting the title).</p>
<p>I’ve managed at least one post per
calendar year (just), and the longest gap is between January 2007 and
July 2008. This was a result of the software I was using at the time
becoming <a href="/2008/07/new-site-new-software.html">sufficiently
unwieldy</a>
that it put me off writing anything, but also represents a sea change
in the kinds of posts I put up. Before the break, it was dominated by
short posts and links, the kind of thing that would now find their
natural home on Twitter (not coincidentally, I joined the service
during this gap). After, I tended towards more substantial (or, at
least, longer), less frequent posts. These seem like a better fit for the medium, so I feel this is where the site actually hit its stride.</p>
<p>As well as length, the subjects and quality have been pretty variable as well. However, I’m happy with it overall — I’ve always done this for the exercise and pleasure of writing, so any merits of the end result are a pleasant bonus. With that in mind, and in no particular order, here are a few of my favourite entries over the last two decades:</p>
<ul>
<li><a href="/2011/06/give-me-inconvenience.html">Give Me Inconvenience, Or Give Me Death!</a></li>
<li><a href="/2014/01/progress.html">Progress</a></li>
<li><a href="/2014/12/ml_for_the_working_p.html">ML for the Working Programmer</a></li>
<li><a href="/2015/08/toys.html">Toys</a></li>
<li><a href="/2012/03/aim_high.html">Aim High</a></li>
<li><a href="/2014/01/1984.html">1984</a></li>
<li><a href="/2011/08/loot_or_fiddle.html">Loot or Fiddle</a></li>
</ul>
<p>It’s not always easy to find the time to post here, hence the erratic cadence of the <a href="/archive.html">archives</a>, but whenever I do I’m glad I have. All being well, I’ll keep doing so for another twenty years at least.</p>
<p><em>(The statistics in this post, and the chart at the top, were generated using <a href="/2022/01/twentyyears.ipynb" download="twentyyears.ipynb">this Jupyter notebook</a>.)</em></p>
id:/2021/12/no_twitter
No Twitter Challenge
2021-12-31T11:25:00+00:00
Rob Hague
rob@rho.org.uk
<p>For January 2022, I’m going to try Cal Newport’s <a href="https://www.calnewport.com/blog/2021/12/20/analog-january-the-no-twitter-challenge/">No Twitter Challenge</a>:</p>
<blockquote>
<p><em>Do not access Twitter for the month of January</em>. In its place, learn a new non-professional skill or pursue a hobby project for no other reason than inherent enjoyment. When you feel the need to check Twitter, work on this initiative instead.</p>
</blockquote>
<p>While I enjoy Twitter, and my feed is free from much of the toxicity for which the platform is famed, I don’t like how it atomises my time and attention. Giving it a break for a month will let me figure out exactly what I want out of the service, and free up some time for other things.</p>
<p>I’m going to make one slight tweak to the rule as stated above; I’m not going to access the Twitter <em>feed</em> during January. I’ll keep notifications on, meaning that I’ll still see any DMs or replies that come in. I don’t anticipate many of these, so it seems like a reasonable compromise to avoid leaving people hanging. I’ll also share links to any posts that I make on this blog, as I suspect that’s the main way people see them now that <a href="http://rob.rho.org.uk/atom.xml">RSS</a> is a niche pursuit. I don’t think either of these will compromise the spirit of the challenge, but if I find that the first leads me to sneaking a peek at the feed I’ll cut that out as well.</p>
<p>Hopefully a bit of a reset will let me re-approach Twitter in a more considered way; even if it doesn’t, I’ll at least have had a bit more spare time for other things for a few weeks. Wish me luck!</p>
id:/2021/12/no_tape
No Tape?
2021-12-30T11:45:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2021/12/basic.jpg" alt="A BASIC listing from BBC Acorn User" /></p>
<p>Back in my day, JavaScript was called BASIC and you bought it at the newsagents.</p>
<p>(A newsagent is a shop where you buy newspapers and magazines.)</p>
<p>(Newspapers and magazines are like the web, but printed out every so often and sent around in vans.)</p>
<p>(The web is like Facebook, but with less consistent styling and marginally fewer Nazis.)</p>
<p>(Facebook is like Instagram, but for your parents.)</p>
<p>(Instagram is like TikTok, but the pictures don’t typically move.)</p>
<p>(TikTok is like something I’m too old to have even heard of, but I imagine it’s terrible. Get off my lawn!)</p>
<p><em>This post was originally a <a href="https://twitter.com/robhague/status/1476482047011086337">thread on Twitter</a>; I’m posting it here, lightly edited, to make it both more readable and under my own control.</em></p>
id:/2021/12/the_corne_maze
The Corne Maze
2021-12-10T20:57:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2021/12/corne_full.jpg" alt="Rob's Corne Keyboard" /></p>
<p><a href="/2021/11/twentyfour.html">My previous post</a> was a timeline of my first proper keyboard build, written as I was actually going through the process. But what about the final destination, and why did I decide to go there?</p>
<p>The world of custom keyboards is vast and varied, and you can pick and choose components to end up with almost anything you could want. If you so desired, you could put together a very nice version of a standard keyboard. However, I figured that, if I’m going to make something, I may as well go for something a bit more exotic and tailored to my own preferences.</p>
<p>One thing I have a strong and long-held preference for is split keyboards. My current everyday keyboard is a <a href="https://www.microsoft.com/en-gb/d/microsoft-sculpt-ergonomic-desktop/8xk02kz6k69w?activetab=pivot:overviewtab">Microsoft Sculpt</a>, and I’ve been using it and its predecessors for decades. There are plenty of kits for building keyboards with similar layouts, but I decided to go a step further and try a <em>true split</em> keyboard. Here, the two halves are physically separate and connected with a cable, allowing them to be positioned independently.</p>
<p>Another variation that I wanted to try was an <em>ortholinear keyboard</em>. The staggered layout of standard keyboards — where the A is offset a little relative to the Q above it — is inherited from typewriters, to allow room for the levers to sit next to each other. Freed from this constraint, you can arrange the keys in straight columns, meaning that each finger only has to move up and down, rather than left and right. It’s not clear how much difference this makes, but it sounded interesting enough to be worth a try. I settled on a <a href="https://mechboards.co.uk/products/helidox-corne-kit?variant=40391708049613">Corne Light kit</a> (as with most of the rest of the components, I got it from <a href="https://mechboards.co.uk">Mechboards UK</a>, who’ve been an excellent source for this kind of stuff).</p>
<p><em>Sound</em> is another choice. The first image that will pop into many people’s heads when they think of a mechanical keyboard is rapid-fire clattering, like a thrash metal cover of <a href="https://www.youtube.com/watch?v=UbxUSsFXYo4"><em>Nine to Five</em></a>. There’s some truth to this — the whole point of a mechanical keyboard is that there’s a definite physical action when you hit a key, and that will unavoidably come with some sounds — but it’s a matter of degree. Some aficionados will specifically seek out a particular sound, picking switches with additional components that click when the key is pressed<sup id="fnref:bmx"><a href="#fn:bmx" class="footnote">1</a></sup>, giving auditory feedback (and broadcasting to everyone the you’re Using A Fancy Keyboard).</p>
<p>The obvious downside of this, even if you like the sound yourself, is the imposition on those around you. While I’m largely working on my own at home at the moment, this involves plenty of calls, where background clacking would be even more of a problem than in person. Hence, I decided to go for the quietest switch I could find. I ended up with <a href="https://mechboards.co.uk/products/gateron-ink-silent-black">Gateron Ink Silent Blacks</a>. These are a linear switch, meaning that there’s no tactile step when the switch is activated. I <em>think</em> that’s the right trade-off for me, but this is all a voyage of discovery so perhaps I’ll revisit the decision once I’ve used the keyboard for a while.</p>
<p>The final element is perhaps the most visible — the keycaps. There’s a whole cottage industry of short-run and artisanal keycaps (with prices to match), but I thought I’d start simple. I went with blanks DSA ones; these are about as low as you can get for standard, as opposed to low profile, switches, and seemed like a good fit for the rest of the design. I added a little tick of red wire to the home keys, both as a practical aid to touch-typing, and a tiny bit of visual interest.</p>
<p>Overall, I’m pretty pleased with how it turned out. It looks and feels good, and works well. Not at all bad for a first attempt.</p>
<div class="footnotes">
<ol>
<li id="fn:bmx">
<p>A bit like affixing a playing card so that it hits the spokes of your BMX. <a href="#fnref:bmx" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2021/11/twentyfour
A Keyboard in Twenty-Four Tweets
2021-11-13T20:40:00+00:00
Rob Hague
rob@rho.org.uk
<p>Following on from my <a href="/2021/08/starting_small.html">macropad practice run</a>, I commenced on my first <i>proper</i> build — a <a href="https://github.com/foostan/crkbd">Corne Classic</a> 40% true split keybaord. I chronicled the highs and lows of the process in real time on a <a href="https://twitter.com/robhague/status/1437104575916429319">Twitter thread</a> which I've reproduced here for posterity.</p>
<hr>
<div class="tweet">
<p><a href="https://twitter.com/status/1437104575916429319">6:23 PM Sep 12, 2021</a> — So it begins...</p>
<p class="twitter-image">
<img alt="Close-up of a surface mounted LED on a PCB" src="/2021/11/thread_media/E_Ge_jHWUAAzjpN.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1439325245907906574">9:27 PM Sep 18, 2021</a> — Progress: all LEDs (key and underglow) soldered. Once I've done the diodes and controller I'll find out if they actually work.</p>
<p class="twitter-image">
<img alt="A PCB for half a keyboard, with SMD LEDs attached" src="/2021/11/thread_media/E_mCrfbWQAoxScJ.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1440657057074454529">1:39 PM Sep 22, 2021</a> — Some lunch break soldering and the diodes are done — through-hole in this kit, so a lot more straightforward.</p>
<p class="twitter-image">
<img alt="A keyboard PCB with LEDs and diodes" src="/2021/11/thread_media/E_4986sVIA8tbXF.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1441733185302249476">12:55 PM Sep 25, 2021</a> — Headers, TRRS Jack and reset button — no shorting pins with tweezers for me! Ready to add the controller and OLED and see if it all works.</p>
<p class="twitter-image">
<img alt="A keyboard PCB with LEDs, diodes, a TRRS jack and a reset button" src="/2021/11/thread_media/FAIQr9jWQAM0TGj.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1441742500025282568">1:32 PM Sep 25, 2021</a> — Success! And failure! The controller and OLED are working well, and all the keys register correctly. Unfortunately, none of the LEDs light up. This could be a firmware thing, but more likely I messed up the first LED in the sequence (which was also the first one I soldered).</p>
<p class="twitter-image">
<img alt="A fully populated keyboard PCB plugged in via a USB cable" src="/2021/11/thread_media/FAIZJ8zWQAAGp5Q.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1441743449858924545">1:36 PM Sep 25, 2021</a></p>
<Googles "how to desolder SMD LED" while wishing he'd thought to do them in reverse order>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1441774195134791686">3:38 PM Sep 25, 2021</a> — It *was* firmware! I just needed to set RGBLIGHT_ENABLE (...and link-time optimisation so that the resulting binary would fit into the 32K RAM the controller) but it looks like it my shoddy soldering is off the hook. Looks like it's time to properly read up on QMK.</p>
<p class="twitter-image">
<img alt="A keyboard PCB with six LEDs illuminated" src="/2021/11/thread_media/FAI1-6PUcAwvFIn.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1441813173326147588">6:13 PM Sep 25, 2021</a> — Some more firmware tweaking and the per-key LEDs are in Tastefully Understated mode. Looks like I have one broken or badly soldered one (top of the fourth column) — will redo it tomorrow and see if that fixes everything downstream as well.</p>
<p class="twitter-image">
<video controls="" poster="/2021/11/thread_media/yRtDVXqpxW_Oj5kI.jpg" style="width: 100%">
<source src="/2021/11/thread_media/oSa1vV9am_JN_YDX.mp4" type="video/mp4">
</video>
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1442104948305514503">1:33 PM Sep 26, 2021</a> — Fixed — the connections looked OK as far as I could tell, but I suspect that I damaged the LED itself by applying too much heat. Fortunately, the kit came with a few spares, and once I'd replaced it everything is working as it should. Bonus: I can now use a solder sucker.</p>
<p class="twitter-image">
<img alt="A keyboard PCB with many LEDs illumoinated in a range of ocolours" src="/2021/11/thread_media/FANizhuWQAMbEvd.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1442108150878928906">1:45 PM Sep 26, 2021</a> — Next step is to get the other board (the left hand bit) assembled to the same point — once both halves are working I'll move on to the switches.</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1444260986228199424">12:20 PM Oct 2, 2021</a> — Bit of a setback on the second board. One duff LED again (the second this time), but it really didn't want to come off and I've made a mess of the pads in the process. I *hope* there's enough left to make a good connection with the replacement; what do you think my chances are?</p>
<p class="twitter-image">
<img alt="Close-up of damaged pads on a PCB" src="/2021/11/thread_media/FAsLtddX0AUlnGp.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1444375329221529602">7:54 PM Oct 2, 2021</a> — Having done a bit of research, a fix may be beyond my abilities, at least at present. There are no convenient vias to wire to, and I don't want to hack away at the top layer too much for fear of damaging the very close and as-yet-working circuitry for the keys themselves.</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1444375638006185984">7:56 PM Oct 2, 2021</a> — One option may be to add jumper wires to the other LEDs in the sequence, or maybe even skip that one entirely and modify the firmware to account for the altered sequence.</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1444376408327868419">7:59 PM Oct 2, 2021</a> — (As a side note, it turns out I'd misunderstood the sequence for the under lighting LEDs — they go by row rather than column. Which means the LED may have actually been fine, and there was no need to remove it in the first place. 🤦♂️)</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1444388241537478656">8:46 PM Oct 2, 2021</a> — This is going to end up with me writing Tcl, isn't it?</p>
<p class="twitter-image">
<img alt="Screenshot of a PCB design in a CAD tool" src="/2021/11/thread_media/FAt_ZxeWYAM6xaf.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1447224545404915714">4:36 PM Oct 10, 2021</a> — The damaged pads (and the previous LED, which was also not working) successfully bypassed; sequence passes to the per-key LEDs, which are the ones I might actually use. Still some work to do there, but progress.</p>
<p class="twitter-image">
<img alt="Close-up of a wire connecting two pads on a PCB" src="/2021/11/thread_media/FBWTDRlXIAUUfqf.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1449424124540030977">6:16 PM Oct 16, 2021</a> — It turned out that only one of the key LEDs was a problem; replacing that fixed the sequence. Flushed with success (and not having to conserve spare LEDs) I fit a new one on the empty-but-intact pads for the under lighting. That worked too.</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1449424133826170882">6:16 PM Oct 16, 2021</a> — So, I decided to go for broke, and use my newfound familiarity with the board to wire in my sole remaining LED into the sequence directly, anchored to the last undamaged pad...</p>
<p class="twitter-image">
<img alt="Close-up of three wires connecting an SMD LED on a PCB" src="/2021/11/thread_media/FB1jkGuXoAAcLE4.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1449424143732989952">6:16 PM Oct 16, 2021</a> — ...and it worked! IT WORKED! I am disproportionately happy with this.</p>
<p class="twitter-image">
<img alt="A keyboard PCB with six LEDs illuminated" src="/2021/11/thread_media/FB1jksRXoAk822Y.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1449424152406814728">6:17 PM Oct 16, 2021</a> — So I now have the full complement of LEDs, and both sides working together. Next step, adding the switches. Not trivial, but certainly feels like I'm on the home stretch.</p>
<p class="twitter-image">
<img alt="Two halves of a split keyboard, connected by a cable, without key switches, many LEDs illuminated" src="/2021/11/thread_media/FB1jlQ-XIAQPxqG.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1450549789763031044">8:49 PM Oct 19, 2021</a> — Doing a mechanical bit while cooking tea.</p>
<p class="twitter-image">
<img alt="A jam jar full of key switches and an empty switch plate" src="/2021/11/thread_media/FCFjVvbUUAArH7y.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1450558146863321100">9:23 PM Oct 19, 2021</a> — Switches done ( not yet soldered).</p>
<p class="twitter-image">
<img alt="Two halves of a split keyboard, with switches but without keycaps" src="/2021/11/thread_media/FCFq8F0VUAEXA8t.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1451935025029599241">4:34 PM Oct 23, 2021</a> — Took a couple of rounds of testing and resoldering, but all the switches are now connected and working consistently. With the addition of key caps (just some simple blank DSAs from eBay), and it's complete:</p>
<p class="twitter-image">
<img alt="A fully assembled true split keyboard with blank black and white keycaps and dual OLED displays" src="/2021/11/thread_media/FCZPNQFXMAQMuZL.jpg">
</p>
</div>
<div class="tweet">
<p><a href="https://twitter.com/status/1451935601268334601">4:36 PM Oct 23, 2021</a> — Now all I need to do is figure out a layout, and learn to type on it. And turn off those damn lights.</p>
</div>
id:/2021/08/starting_small
Starting Small
2021-08-31T21:35:00+00:00
Rob Hague
rob@rho.org.uk
<p>A little while ago, I decided I wanted to try something different. After a bit of reading around and practice, I got to the first concrete result last week:</p>
<p><img src="/2021/08/mbuk.jpg" alt="MBUK Macro Pad with assorted switches" /></p>
<p>What you’re looking at is:</p>
<ul>
<li>An <a href="https://mechboards.co.uk/shop/kits/mbuk-macro-pad-kit/">MBUK Macro Pad</a> kit from <a href="https://mechboards.co.uk">Mechboards UK</a></li>
<li>A <a href="https://www.sparkfun.com/products/12640">Pro Micro</a> controller</li>
<li>A taster menu of switches:
<ul>
<li>Gateron Ink Silent Black</li>
<li>Gateron Brown</li>
<li>Kalih Speed Copper</li>
<li>Durock T1 Tactile 67g Teal</li>
</ul>
</li>
<li>The tweezers I use to short the reset pins to flash the firmware</li>
</ul>
<p>A small start, but I’m pretty pleased with it as it served its main purpose — proving that I can solder this kind of thing without trashing it, and thus giving me the confidence to move on to something more ambitious.</p>
<p>So, will I <em>actually</em> move on to such a thing, or has this project sated my desire to tinker? Suffice to say that the parts for my first full<sup id="fnref:full"><a href="#fn:full" class="footnote">1</a></sup> keyboard are already on their way, and I’m idly speculating about ideas for the one after that. I think this will keep me going for a while.</p>
<div class="footnotes">
<ol>
<li id="fn:full">
<p>“Full” as in “a replacement for a normal keyboard”, rather than having 100-something keys. <a href="#fnref:full" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2021/03/life_sci_ai
Podcast — Life Sci AI
2021-03-01T21:35:00+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<a href="https://overcast.fm/+o5xJfgmEI"><img class="half-width" src="/2021/03/lifesciai.jpg" /></a>
</div>
<p>A little while before Christmas I recorded <a href="https://overcast.fm/+o5xJfgmEI">an episode of the Life Sci AI podcast</a> (“a series of interviews with some of the industry’s top professionals, discussing the latest topics circulating the world of science”) with Nick Mahoney of SciPro<sup id="fnref:youtube"><a href="#fn:youtube" class="footnote">1</a></sup>. We talked about a range of subjects including working in medical technology, visualisation, and how device regulators are dealing with software in general and AI in particular. It was a lot of fun to do, particularly looking back on how far we’ve come from the early days of <a href="https://cydarmedical.com">Cydar</a>.</p>
<div class="footnotes">
<ol>
<li id="fn:youtube">
<p>There’s also a YouTube version on the <a href="https://www.sciproglobal.com/life-sci-ai-the-podcast-ep-3">official page</a>, but I wouldn’t recommend it due to risk of sea-sickness. If I do another of these, I’ll be sure to sit on a real chair rather than a gym ball. <a href="#fnref:youtube" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2020/12/us_and_them
Us and Them
2020-12-05T16:40:00+00:00
Rob Hague
rob@rho.org.uk
<blockquote>
<p style="white-space:pre-line">Slack is IRC for the masses
Dropbox is FTP for the masses
Facebook is blogging for the masses
Spotify is Napster for the masses
Reddit is Usenet for the masses
</p>
<p>What are nerds doing right now, that non-nerds would do if it were more accessible?</p>
<p style="text-align:right"><i>— Daniel Feldman <a href="https://twitter.com/d_feldman">@d_feldman</a>, <a href="https://twitter.com/d_feldman/status/1333967358877184007">2020-12-02</a></i></p>
</blockquote>
<p>Creating an artificial separation between Us and Them to maintain exclusivity and a privileged position of expertise? (Just kidding; non-nerds do that too.)</p>
<p>Less snarkily, I dislike this kind of division as it smacks of gatekeeping. More importantly, othering your audience (with the implication that they’re lesser in some way) leads to worse products from a user perspective.</p>
<p>To expand on one example in the quoted tweet, Facebook is (approximately) blogging for the masses, but WordPress is blogging for everybody; people choose to use it even if they have the expertise to do it a more complicated way.</p>
<p>Looking at things that require arcane technical expertise and making them useable to a wider audience is a great idea, but it should be done by removing accidental complexity rather than dumbing down the core functionality. As far as possible; separating accidental and essential complexity isn’t necessarily obvious, and there may be trade-offs. Nobody said it would be easy.</p>
<p>To answer the original question: version control. Nerds (specifically, software developers) have access to powerful tools for managing documents and data that could be useful in a far wider variety of contexts, but they’re so complex we can barely use them ourselves.</p>
<p><em>This post was originally a <a href="https://twitter.com/robhague/status/1334040999945973761">thread on Twitter</a>; I’m posting it here, lightly edited, to make it both more readable and under my own control.</em></p>
id:/2020/12/fresh_air
Fresh Air
2020-12-01T20:55:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2020/12/laptops.jpg" alt="MacBook Air (2020) and MacBook Pro (2011)" /></p>
<p>I’ve been using the same personal laptop — an Early 2011 MacBook Pro — for almost a decade. A good initial spec meant it had a reasonable shelf life, and replacing its spinning hard disk with a third party SSD<sup id="fnref:replace"><a href="#fn:replace" class="footnote">1</a></sup> extended this substantially. However, while it remains a capable machine, it’s definitely showing its age. It’s bulkier that its newer brethren, has a non-retina screen, and what was once a high-end processor and copious RAM is a little aneamic for some 2020 tasks. Moreover, it no longer gets OS updates from Apple (some may say this is a point in its favour). In any case, when Apple finally announced the new ARM Macs, I decided it was time to replace it.<sup id="fnref:homework"><a href="#fn:homework" class="footnote">2</a></sup></p>
<p>I was after a laptop, so the choice was between the <a href="https://www.apple.com/uk/macbook-air/">MacBook Air</a> and the <a href="https://www.apple.com/uk/macbook-pro-13/">13” MacBook Pro</a>. These two are far more similar than their Intel namesakes. Both are based on the same <a href="https://www.apple.com/mac/m1/">M1</a> ARM system-on-a-chip, have the same RAM and SSD options, and (in this respects, like their predecessors) are near-identical in size and weight. The Pro has a few minor improvements (and the Touchbar, but the less said about that the better), but the differences basically boil down to two things: £300 and a fan.</p>
<p>The fan (or “active cooling system”) means that the Pro can keep the M1 running at its impressive full speed for extended periods (indefinitely?), while the Air’s passive cooling means it throttles down to a more modest pace after a short while. The impact of this is very workload dependent, but the benchmarks from <a href="https://www.theverge.com/21570497/apple-macbook-pro-2020-m1-review">The Verge</a> suggest that the Air has about 70% of the performance of the Pro for intensive use.</p>
<p>The last time I bought a laptop, this would have been the end of the story. Why would you even consider a computer that’s appreciably slower (sometimes, and leaving aside the £300)? My instincts were to buy the highest performance I could afford. Part of this was the visceral desire to have <em>the best thing</em>, for some well-defined but not necessarily relevant version of <em>best</em>. The more level-headed justification (excuse?) was future-proofing. The better the system is <em>today</em>, the longer it will be until I’ll want to replace it. This is the mindset that leads to me having a nine-and-a-bit year old laptop, but this time around I took a step back and reexamined it.</p>
<p>I use a personal laptop for things like writing, simple image editing, and hobby programming, mostly in dynamic languages like Python. None of these are things that would tax any halfway decent modern laptop, and either of Apple’s new model won’t blink. The active cooling system has undisputable benefits, but they’re unnecessary for the things I tend to do. With this in mind, the extra power is less important that the certain knowledge that I’ll never hear a fan<sup id="fnref:fan"><a href="#fn:fan" class="footnote">3</a></sup>. Hence, I decided to go with the Air.</p>
<p>Once I’d decided that I wasn’t going all-out for raw performance, this brought another parameter into play: RAM. Again, my instinct was to go with the most RAM possible, which in the case of the M1 Macs is 16GB. However, given that I’ve already decide that this isn’t going to be a performance powerhouse, would the standard 8GB be sufficient? The Late 2013 Macbook Pro I use for work only has 8GB, and it’s rarely if ever a problem. Why would I need more in a machine that will be doing less?</p>
<p>I have to admit that impatience was a factor in this thinking. I wanted to wait for the first reviews rather than order on day one, so by the time I started looking every 16GB configuration was showing a delivery date in mid-December. Not only was I keen to get the new machine, I was also concious of the fact that it put the shipping date perilously close to the end of the year. A slip of a week or two would thus take it into January, and <em>terra incognita</em> as far as shipping things to the UK is concerned.</p>
<p>All of these factors pushed me towards getting a stock configuration. I ultimately went for the 512GB configuration, as filling up storage is basically just a matter of time. I ordered it from John Lewis<sup id="fnref:johnlewis"><a href="#fn:johnlewis" class="footnote">4</a></sup> — they not only offer accidental damage cover for a fraction of the price of AppleCare (prudent with children in the house), but a generous return window in case my reasoning above doesn’t pan out.</p>
<p>So, now that it’s here, am I thinking of taking advantage of that return window? I’ve been using it on and off for a week (I’m not using it for work, remember, so this is just evenings and weekends), and the conclusion is: definitely not. The new MacBook Air is essentially everything I’m looking for in a personal laptop. I had high expectations, and it’s exceeded them.</p>
<p>In terms of performance, it’s been able to handle everything I’ve thrown at it so far without breaking a sweat, and the occasional pauses that you typically see during day-to-day computer work are essentially absent. Everything feels smooth and responsive, and stays that way. All of this is without fan noise (of course), but also without anything getting noticeably hot.</p>
<p>What about applications that haven’t been recompiled for the new processors? We always knew the new machines would run existing software (as was the case for the Mac’s transitions to Intel and PowerPC previously), but how well they would is an open question. While the performance of Apple’s M1 is a cut above comparable x86 chips, the difference isn’t as big as it was between contemporary 68k and PowerPC, or between PowerPC and Intel.</p>
<p>The answer turns out to be “very well”. Apple’s Rosetta 2 translation layer, combined with some <a href="https://twitter.com/erratarob/status/1331736203402547201">well-chosen features of the hardware itself</a>, runs them pretty much flawlessly<sup id="fnref:rosetta2"><a href="#fn:rosetta2" class="footnote">5</a></sup>. Performance isn’t quite up to the level of code compiled for ARM, but is competitive with comparable Intel chips. This isn’t just GUI applications, either — I’m currently using x86 versions of <a href="https://brew.sh">Homebrew</a> and <a href="https://www.python.org">Python 3.9</a> until I can get native versions built, and I’m writing these words in a x86 build of <a href="https://emacsformacosx.com">Emacs</a>. No problems.</p>
<p>Along with some more general quality-of-life benefits (phenomenal battery life, TouchID), the overall effect is compelling. The best summary I can think of is that it brings together some of the best aspects of a Mac and an iPad. The surface aspects of the hardware, and the interactions with the software, are as frictionless as on iOS, but the underlying functionality has the flexibility of macOS. A powerful combination.</p>
<p>So, are there any downsides? One drawback that I <em>don’t</em> think will bother me is the lack of ports — just two USB-C/Thunderbolt ports plus a headphone jack. In practice, if I’m plugging things into a laptop, it’s at a desk, so the ability plug in a single connector for power, display and other peripherals is more valuable than being able to plug lots of individual devices in directly. Other than that… I honestly can’t think of anything.</p>
<p>Perhaps I’ll discover some downsides as I use it more, but so far the MacBook Air seems like a perfect fit for what I want. If I end up needing more performance (and don’t want to use <a href="https://aws.amazon.com">someone else’s computer</a>), I may need to swap it for a higher spec (and by that time, the choice will likely be wider), or perhaps supplement it with a desktop machine. Until then, though, I’m happy.</p>
<div class="footnotes">
<ol>
<li id="fn:replace">
<p>Yes, it’s old enough that the hard drive was a standard, easily replaced 2.5” one. As a further blast from the past, when adding the SSD I also got a bracket that allowed me to mount the old HDD in place of the DVD burner. <a href="#fnref:replace" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:homework">
<p>It’s not going to waste, though — it will have a few more years of useful life as a homework laptop. <a href="#fnref:homework" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:fan">
<p>All of the reports I’ve heard suggest that the 13” Pro is silent in practice. I’m sure this is the case, but I’d know that there was the <em>possibility</em> of fan noise, and there’s a distinct possibility that I’d imagine it even if it wasn’t there. <a href="#fnref:fan" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:johnlewis">
<p>The <a href="https://www.johnlewis.com">shop</a>, not the <a href="https://twitter.com/johnlewis">very patient man from Virginia</a>. <a href="#fnref:johnlewis" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:rosetta2">
<p>The only exceptions being a few newer instruction set enhancements and virtualization; in particular, JIT compilers and similar <em>are</em> supported. <a href="#fnref:rosetta2" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2020/06/out_on_a_limb
Out on a Limb
2020-06-22T12:35:00+00:00
Rob Hague
rob@rho.org.uk
<p><em>I’ve been intending to write more here, but most of what is happening in the world feels too big to tackle. To ease myself in gently, I decided to concentrate on relative trivialities, and you don’t get a lot more trivial than Apple predictions that will be defunct in a day.</em></p>
<p>The murmur of rumours that Apple is about to transition the Mac line to in-house ARM processors has built to a crescendo over recent months, and the general consensus is that they’re going to announce this transition at next week’s remote WWDC. The commentariat have the general, plausible predictions covered, so here’s a long shot — unlikely to come to pass, but interesting to think about.</p>
<p>The Mac has already gone through not one but two transitions of processor architecture (68000 to PowerPC to x86), and in both cases offered an emulation layer to allow software compiled for the old architecture to run on the new. This avoids early adopters of the new platform facing a wilderness of applications until developers catch up.</p>
<p>Despite this, there’s overwhelming scepticism that Apple will pull the sane trick this time around, for the simple reason that it doesn’t seem feasible. Intel’s Core chips were sufficiently faster than the contemporary PowerPC G4s that they could offer an acceptable emulation experience, and the earlier PowerPCs were so much faster than 68000s that the emulator soon offered <em>better</em> performance. In contrast, goes the standard reasoning, while Apple’s A-series ARM processors are certainly impressive they don’t provide the order-of-magnitude improvement over the current Intel chips to make emulation any more than a miserable experience.</p>
<p>However, I think this misses a key point. What if Apple’s new Mac chips — let’s call them “X-series” — can <em>run x86 code natively</em>? Their existing, highly optimised cores could be paired with a translation layer that took in an x86 instruction stream and converted it into the ARM instruction set. This idea isn’t as absurd as it may seem at first glance, for a number of reasons.</p>
<p>Firstly, this is essentially how CISC architectures like x86 are implemented anyway — translation of the incoming instructions to <em>microcode</em> for actual execution. In fact, this structure was one of the key motivations for RISC architectures, as described by John Hennessy in a <a href="https://learning.acm.org/binaries/content/assets/leaning-center/bytecast-show-notes/acm-bytecast-john-hennessy--dave-patterson-show-notes.pdf">recent interview</a> on <a href="https://learning.acm.org/bytecast/bytecast-archive">ACM ByteCast</a>:</p>
<blockquote>
<p>I think Dave and I both also had exposure to the primary way in which many computers and even mainframes were designed then, using lots of microcode. I think we both looked at it and said, “Well this machine is doing a lot of things at runtime that could be done at compile time with less overhead and more efficiency. So why not just do it then, simplify the instruction set. Why not make the micro instructions the instruction set rather than add an extra level of interpretation. I think that was a great insight.</p>
</blockquote>
<p>While the distinction between RISC and CISC is less than clear-cut in modern designs, ARM’s origins in the above mindset make it a plausible candidate to serve as CISC microcode.</p>
<p>Secondly, there’s ample precedent in an adjacent field — games consoles. The SuperNES and MegaDrive both contained pretty much complete hardware versions of their predecessors (the NES and Master System, respectively), as did the early models of the PlayStation 3. It doesn’t seem likely that Apple would include a separate x86 chip alongside an ARM, as that blows away the cost and power saving advantages of the transition. However, it validates the idea of including dedicated hardware to support backwards compatibility.</p>
<p>Finally, and more importantly, there are numerous precedents to be found in the history of ARM itself. ARM processors have long supported multiple distinct instruction sets at once. Beyond the standard 32 and 64 bit variants, there have been several iterations of the Thumb instruction, a related but distinct instruction set that trades flexibility for code compactness.</p>
<p>A bigger departure, and a closer analogue to a hypothetical x86 layer is <a href="https://en.wikipedia.org/wiki/Jazelle">Jazelle</a>. This was an optional extension to the architecture that allowed processors to execute Java bytecode directly. While the Java Virtual Machine is far simpler than x86, the same principles could be applied.</p>
<p>One of these principles was using software to fill in the gaps. The most common instructions were supported directly in hardware, but obscure features or corner cases raise an interrupt, falling back to a software implementation. Unlike, say, Qualcomm or Samsung, Apple are in an excellent position to follow this lead, due to their oft-cited advantage of controlling both the hardware and software. Designing both in tandem is their bread and butter.</p>
<p>Apple’s control of the OS gives them a further advantage — they can tailor exactly <em>how</em> they support running x86 code. Rosetta, the technology used for the PowerPC to Intel transition, was implemented as a just-in-time translation layer that the OS wired in to processes running binaries that hadn’t been recompiled. This architecture would allow the system to work around any gaps in the hardware emulation in advance.</p>
<p>To approach things from the other direction, the software translation layer could convert x86 code into ARM, augmented by additional instructions for operations that can’t be translated to efficient RISC code. This would allow the additional hardware to be limited to just those instructions, and seems like the most attractive option if the emulation is only a transitional measure while developers port their applications to the new architecture.</p>
<p>Of course, this kind of hybrid hardware/software emulation is easy to conjecture about, but a major effort to actually implement. Apple may have decided that the cost isn’t justified, or they may have made a positive choice <em>not</em> to offer x86 compatibility for some broader strategic reason. Hence, I won’t be surprised if tomorrow they unveil an ARM macOS that won’t run old software. If they do offer backwards compatibility, I’ll be very curious to read about the details. Either way, it’ll be an interesting step for ARM.</p>
<p><strong><em>Update 2020-06-28</em></strong>: So, I got the day wrong, and this article preceded the announcement by a matter of <em>hours</em>, rather than a day and a half. It looks like I was right about the what, in that the new ARM Macs <em>will</em> indeed run x86 code via a translation (<a href="https://www.macobserver.com/news/wwdc2020-rosetta-2-apple-silicon-macs-virtualization/">Rosetta 2</a>), but not the <em>how</em>. I’ve not seen anything to suggest that Rosetta 2 takes advantage of any specific hardware support, and the fact that the Developer Transition Kit is based on an existing iPad processor (the A12Z) heavily implies that it doesn’t.</p>
<p>That said, the DTK is most definitely <em>not</em> representative of ARM Mac hardware that will eventually be released as a product. It’s entirely possible that the Mac-specific Apple Silicon <em>will</em> include features to accelerate Rosetta 2. Whatever the case, the overall news from WWDC is making it increasingly likely that the Apple device I buy this year won’t be a phone.</p>
<p><strong><em>Update 2020-11-26</em></strong>: Perhaps I wasn’t so far off after all; to quote an excellent <a href="https://twitter.com/erratarob/status/1331736203402547201">thread from @erratarob on Twitter</a>:</p>
<blockquote>
<p>So Apple simply cheated. They added Intel’s memory-ordering to their CPU. When running translated x86 code, they switch the mode of the CPU to conform to Intel’s memory ordering.</p>
</blockquote>
<p>Not full, native x86 support by any means, but a smart approach: spending die area on the pain points, and do the rest in software. Whatever the <em>how</em>, the <em>what</em> is rock-solid, performant emulation. I’ve been using an M1 Macbook Air for a few days now, and one of the many things that’s impressive is that x86 software <em>just works</em> — no glitches or weird behaviour, and at the speed you’d expect. This was an area where the ARM transition could have bitten Apple hard, but they’ve exceeded even my most optimistic expectations. A tremendous feat of engineering.</p>
id:/2020/02/tsconf2019_cutting_edge
TSConf 2019 — TypeScript at the Cutting Edge
2020-02-10T20:28:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="/2019/10/tsconf19.html">Last October</a> I had the chance to speak at <a href="https://tsconf.io">TSConf 2019</a>, and share some of our experiences at Cydar using TypeScript in a fairly unusual context. Below is written version of the talk, edited a little to make it read better. You can see a video of the talk itself, along with the other talks at the conference, on <a href="https://tsconf.io/videos.html">the conference website</a>.</p>
<p><img src="/2020/02/tsc_19_title.png" alt="TypeScript at the Cutting Edge — Rob Hague, CTO, Cydar Medical" /></p>
<p>First off, a bit about the company. <a href="https://cydarmedical.com">Cydar Medical</a> is an early-stage software company based in the UK. In 2012, Tom Carrell, a vascular surgeon at St Thomas’s hospital in London, was encountering particular kinds of problems in his clinical practice. He asked around and eventually found Graeme Penney, an imaging scientist at KCL. They established the company to see if the technology was viable, figured out it was, got it to the stage where it was working. The next step was to turn it into a product to deliver to clinicians, and that’s where I joined the company in 2014.</p>
<p>The product is Cydar EV (Endovasuclar - I’ll explain that in a moment):</p>
<p><img src="/2020/02/tsc_19_meddev.png" alt="Cydar EV: A software medical device that provides augmented reality overlays during image guided surgery" /></p>
<p>Here it is in action:</p>
<p><img src="/2020/02/tsc_19_inuse.jpg" alt="Cydar EV in use" /></p>
<p>That’s Cydar EV in action on an actual case. It’s CE marked and FDA cleared, and it’s in clinical use in sites in the UK, US and across continental Europe.</p>
<p>I’m afraid that, to explain what you’re looking at there, I’m going to have to take a slight diversion into surgery. One of the key diseases we support the treatment of is abdominal aortic aneurysms:</p>
<p style="text-align:center;"><img src="/2020/02/tsc_19_aaa.jpg" alt="Drawing of the aorta and associated anatomy, showing an aneurysm" /></p>
<p>The aorta is the main blood vessel coming from the heart that pumps oxygenated blood through the body, and an aneurysm is where the wall of that vessel weakens, causing it to swell, and if left untreated it can burst. In the case of an aortic aneurysm, that’s often fatal, so you don’t want to let it get to that stage.</p>
<p>The treatment is conceptually pretty simple. You get a cloth tube (a graft), and place it across the diseased part of the vessel. The blood then flows through that tube instead of the aneurysm.This takes pressure off the ansuerysm, which stops expanding and can start to heal. The question is, how do you get that graft in there?</p>
<p>One option is open surgery — the clinician cuts the patient open, and sews in the graft directly. This is effective, but it’s a major procedure, with a very long recovery time.</p>
<p>A very attractive alternative is endovascular surgery, which looks like this<sup id="fnref:cc"><a href="#fn:cc" class="footnote">1</a></sup>:</p>
<p style="text-align:center;"><img src="/2020/02/tsc_19_evar.jpg" alt="Drawing of endovascular aneurysm repair, with graft undeployed and deployed" /></p>
<p>For this, you augment the graft with a springy metal frame – a stent — to produce a stent graft. You crunch it down, and put it inside a long tube. You then insert that tube (the delivery device) into a small incision in the leg, up the femoral artery. The clinician threads is up into the place where it needs to be deployed, and then withdraws the tube, which springs back to its original shape, bridging the blood vessel. This is a less invasive procedure, with far quicker recovery time for the patient.</p>
<p>The problem is, you can’t see what you’re doing. If you’re doing open surgery, it’s right there in front of you, but here you have a device you’re inserting into an incision, and the only control you have is moving it forward and back, and twisting it. To compound matters, you need to position the device very accurately as well.</p>
<p>If you look at the diagram above, you see just above the graft there are two vessels coming off. These are the renal arterys. If you block one of those off the patient loses function of a kidney, so it’s vital that this graft goes where it’s meant to. In slightly more complicated procedures, if the aneruysm was higher up, the graft would have little holes in, or branches, and these need to be positioned exactly into the vessels so you don’t cut off blood flow to them. So, you need some way to see where your device is before deploying it.</p>
<p>These procedures are performed using <a href="https://en.m.wikipedia.org/wiki/Fluoroscopy">fluoroscopy</a> (real-time X-ray) guidance. This is a typical fluoroscopy image you’d see during a procedure:</p>
<p><img src="/2020/02/tsc_19_fluoro.jpg" alt="Example fluoroscopy image" /></p>
<p>You can see on here, the bone is very clear. This image is part-way through a procedure, so you can see a stent graft, and there are some wires going into the renal arteries. Can you spot what you <em>can’t</em> see on that image? You can’t see the blood vessels. The problem is that blood, blood vessels, and almost everything else in your abdomen, is about the same density as far as X-rays are concerned. You can’t see soft tissue with fluoroscopy.</p>
<p>There is a way around this: you can inject contrast medium, which is an X-ray opaque fluid. This gives a nice, clear picture, showing you exactly where the blood vessels are. The downside is, it’s toxic — too much can also damage your kidneys. Hence, you want to use it as little as possible.</p>
<p>There’s another technique to get around the visibility problem, which is to overlay other information onto the image. This is where Cydar comes in. The other information we use is the preoperative CT scan that has been taken before the procedure. This is what has been used to diagnose the disease in the first place, and to plan the procedure, so this is already existing data. We take that, we segment the bit of anatomy that’s interesting, and we combine it with the fluoroscopy image. This is what the clinician would see for the same image, but using Cydar EV:</p>
<p><img src="/2020/02/tsc_19_overlay.jpg" alt="Example fluoroscopy image with Cydar EV overlay" /></p>
<p>You can now see the blood vessel, and you can confirm that the renal arteries are where you expect them. This allows the procedure to be done in less time, using less X-ray radiation, and injecting less contrast.</p>
<p>(The reduction in X-ray dose is a big benefit to the patient, but also to everyone else in the room. The patient will have one or two of these procedures in their entire life, the clinical team will be doing several every week, so even though they are not directly in the path of the x-rays, the back-scatter is quite an issue.)</p>
<p>There are other systems that do this on the market. They tend to be based on mechanical tracking. It works, but there are two disadvantages compared to how we do it. The mechanical tracking systems track the position (and angle) of the X-ray detector relative to the table. What it doesn’t track is how the patient moves relative to the table, which is a source of inaccuracy, and we’re far more accurate than them. There’s another problem, which is that they’re part of very expensive fixed fluoroscopy sets that are built into the operating theatre. Our system is retro-fitted to could be one of those sets or it could be a far cheaper mobile fluoroscopy set in a regional hospital. We work with essentially any x-ray set.</p>
<p>So, how do <em>we</em> do it? We use cloud based computer vision to find the vertebrae in the image, and match them to the vertebrae in the CT scan. From that, we can work out what the projection of the fluoroscopy image is, do a similar projection on the data from the CT scan, and produce this overlay.</p>
<p>That’s the surgical part over, and that’s the product. So, how does this look in practice, and where do we use <a href="http://www.typescriptlang.org/">TypeScript</a>. I’m going to take you through a few of the parts of the product, and show you where we use TypeScript.</p>
<p><img src="/2020/02/tsc_19_vault.png" alt="The Cydar Vault" /></p>
<p>This is what we call the Vault. This is the part of the tool that the clinicians log on to from their desktops in the hospital, they can upload CT scans they want to use with the system, and see how they’re progressing. It’s essentially a fairly conventional database-driven web app, but on the front end we’ve added a fair bit of interactivity. One example is these images at the bottom you can see. You can scrub through them to see if you’re got the right image (you may upload several images for the same patient, not all of which will be suitable).</p>
<p>This is a place where TypeScript is particularly useful, simply as a better way to write JavaScript. This kind of interactivity is the bread-and-butter of client side JavaScript, but writing it in TypeScript is a better experience. The transpilation is quite useful, allowing us to skip an explicit step for browser compatibility, and it makes things easier to organise and keep track of.</p>
<p>The most interactive part of the Vault is the Overlay Creation Tool, which warrants looking at in more detail:</p>
<p><img src="/2020/02/tsc_19_oct.jpg" alt="Overlay Creation Tool" /></p>
<p>This is a 3D viewer and annotation tool which the clinicians uses to select from the CT scan the anatomy they want to see during the procedure. You see here we’ve picked out the aorta, and you can see the aneurysm. For this kind of application, hospitals would typically have to have dedicated workstation, and you have to go to that to work on your case. We didn’t want that; instead, we wanted clincians to be able to access the tools from their own desktops, anywhere they were.</p>
<p>We considered implementing the Overlay Creation Tool as a pure web app, but the problem with that is you can’t rely on clinicians having a decent computer on their desktop. For example, they are unlikely to have a dedicated GPU. As an alternative, we’ve take a remote desktop approach. The main view is a C++ application running on an AWS instance in the cloud with enough CPU to handle this, and a decent GPU. This means we can give a consistent level of performance. We deliver that via a <a href="https://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a> session in the browser.</p>
<p>The VNC viewer itself is off-the-shelf, but around that we have a fairly complex bit of TypeScript, because it turns out that the trade-off is that you’ve reduced the requirements for local machine performance, but what now matters is network performance. Hence, we have quite a bit of logic in there to track disconnections, and slow down, or events such as the connection pausing and later resuming, and respond correctly. We found it a lot easier to keep track of this in TypeScript, rather than vanilla JavaScript. TypeScript is great for imposing a bit more organisation, and keeping track of what’s going on.</p>
<p>The final bit is, once you’ve done all of this, you get into the operating room:</p>
<p><img src="/2020/02/tsc_19_itg.jpg" alt="Cydar EV In-theatre GUI" /></p>
<p>This is running on a touchsceen PC, as shown in the first photo. This is the interface that the clinicians will be looking at while they’re operating. On the left is the fluoroscopy, coming in via a video capture card. We take snapshots of that, send them up to the cloud for processing, and get back and display the results. This isn’t something you’d do with web technology.</p>
<p>But, nevertheless, that’s what we did.</p>
<p><img src="/2020/02/tsc_19_itg_devtools.png" alt="Cydar EV In-theatre GUI with Chrome devtools" /></p>
<p>All of this is running on a standard web browser on a that PC in the operating room. This raises a couple of questions: <em>how</em> and <em>why</em>?</p>
<p>You’re all familiar with the web platform, so the <em>how</em> is probably preaching to the choir. The approach we took wouldn’t really have been feasible in, say 2010. However, now, the web platform has got increasingly powerful, and has got a lot of capabilities it didn’t used to have. For example:</p>
<ul>
<li><a href="https://www.w3.org/TR/webrtc/">WebRTC</a> allows us to capture the video, without having special native software</li>
<li><a href="https://get.webgl.org/">WebGL</a> is used for rendering the overlay itself (the outline is a full 3D render with a special shader)</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSockets</a> allow more dynamic communication than request/response</li>
</ul>
<p>The most important thing is maturity and performance. On the maturity side, the standard web platform has rounded out, with things like Promises and typed arrays. Overall, it has become extensive, mature and stable. It gives you a very strong base to work on. In terms of performance; there’s been a lot of virtuous competition between vendors,and as a result the performance of Javascript is now phenomenal compared to other dynamic languages.</p>
<p>More importantly, <em>why</em> are we taking this somewhat unusual approach to what would normally be an embedded system in a language like C++, using a native toolkit?</p>
<p>To understand this decision, return to this definition:</p>
<p><img src="/2020/02/tsc_19_meddev2.png" alt="Cydar EV: A SOFTWARE MEDICAL DEVICE that provides augmented reality overlays during image guided surgery" /></p>
<p>The key part is “Software medical device”; we didn’t want to be a hardware company. We wanted to be software company, and move at the speed of a software company. You can do hardware as a small company, but especially for medical hardware that’s a very tough proposition. Fortunately, the regulators have been coming round to the idea that you can have a medical device that is purely software.</p>
<p>This is a relative new thing — when we first started the regulatory process for Cydar EV we were working based on guidance from 1997, which meant every time we did a release we had to ask questions like “does this change the sterility of the product”? You can’t really sterilise software, so no.</p>
<p>Things have improved substantially since then, and there is now a special guidance note for purely software devices. For example, under the new FDA guidance, if you answer yes to “is this change to fix a security flaw?” then essentially you don’t need a new approval. If you’re making a change to fix a security issue, they want you to get that out. The regulators are becoming far more aware of software as a medical device. This is why we’re very keen that our medical device is <em>just</em> the software.</p>
<p>This is our setup in the operating room:</p>
<p><img src="/2020/02/tsc_19_or.png" alt="Cydar EV operating room setup" /></p>
<p>On the left we have an existing medical device, the fluoroscopy set. That is the highest classification of medical device, for obvious reasons — it’s shooting ionising radiation at people. It’s very highly regulated, with a very involved process to get the certification, and if you modify it at all that could invalidate that certification. We don’t want to do anything to modify that device. Fortunately, a standard feature on these devices is a video feed to drive a second monitor. That’s what we put into our capture card, allowing us to get the images from the device without impacting its certification.</p>
<p>On the right hand side, we have Cydar Medical, and Cydar EV. Cydar EV is inherently a cloud system, as we need a very large amount of compute to do the computer vision part. We’ve always put this computing power in the cloud, as we don’t want to be delivering this hardware into hospitals. The Cydar EV software is a medical device in its own right, and that’s what we get the certifications for. This process revolves around having a QMS, with a well established process, a key part of which is taking a risk-based approach.</p>
<p>In the middle, we have what we call the <em>Cydar Appliance</em>. This is a standard PC, running standard software, and is in itself <em>not a medical device</em>. It has to conform to other standards — for example, it has to be cleanable<sup id="fnref:fanless"><a href="#fn:fanless" class="footnote">2</a></sup>, but is nevertheless an off-the-shelf device not specific to Cydar. Because of that, all of our software is in the cloud side, and we need a platform where the hardware in the OR is just a dumb terminal essentially. The web is an obvious choice.</p>
<p>That’s why we chose the web platform. How did we get to TypeScript? We started off thinking most of the heavy lifting in C++ and Python on the server side. The client is going to be pretty simple, sending video to the server and displaying the results to the user. The first versions worked like that.</p>
<p>We rapidly realised we were going to have to do a lot more on the client, for two reasons. Firstly, performance. You don’t want that round-trip latency every time. If you can do more locally, you can react to changes quicker.</p>
<p>Secondly, safety. Remember I said a risk-based approach is central to getting medical device certification? The key risk we identified is showing the <em>wrong</em> overlay. If we can have a check that the overlay we’re displaying corresponds to the image that’s on the screen, and we can do that locally, we can enforce that safety constraints without relying on the network. That’s a big win for us for safety.</p>
<p>We developed this functionality in JavaScript, but by the time we’d added the additional computer vision into the client, it was getting very unweildy. So, we had a look around for options to replace JavaScript.</p>
<p><img src="/2020/02/tsc_19_choice.png" alt="CoffeeScript, Flow and TypeScript" /></p>
<p>CoffeeScript we dropped quite quickly, as it didn’t really offer us anything over ES6, and even at that time it seemed obvious that the latter was going to have widespread adoption. This left <a href="https://flow.org">Flow</a> and TypeScript.</p>
<p>This was a far harder choice, as the two systems, certainly in 2016 when we were making this decision, were pretty comparable in terms of power and expressiveness. Two factors swung it. Firstly, I personally prefer the syntax of TypeScript. That’s a nice to have, but isn’t enough on its own. Secondly, tooling. Even then, TypeScript’s tooling was better than Flow’s and it’s just gone from strength to strength since then.</p>
<p>There was another factor, one that was a bit of a gamble in 2016 — popularity. We wanted to be using the one with the broadest community, as opposed to finding ourselves in a niche interest some years down the line. It’s fair to say that that’s paid off — TypeScript is clearly the winner in terms of popularity. It’s also turned out to be an excellent fit for our needs.</p>
<p>The conversion process was straightforward, allowing us to go one file at a time. Once everything was converted we turned strict mode on and kept it on, because that gives the most benefits from static typing. Since then, it’s continued to prove very useful for us.</p>
<p>One of the things I particularly like about TypeScript is the combination of functional and object-oriented types. Many years ago as an undergraduate I learned <a href="http://rob.rho.org.uk/2014/12/ml_for_the_working_p.html">ML</a><sup id="fnref:ml"><a href="#fn:ml" class="footnote">3</a></sup>, and when we started to use TypeScript I dug that knowledge out and ended up writing TypeScript in a very functional style with algebraic types. I really enjoy that, and it works well with the way I think. Other people on the team prefer a more Java or C# style, with classes and interfaces. TypeScript not only allows these two styles to coexist, but allows them to integrate. We could of course have a coding standard that says “you cannot use algebraic types” or “you cannot use classes”, but we’ve found that’s not been necessary, because the two work together. I think that’s one of the big strengths of TypeScript’s type system.</p>
<p>The last thing I want to go over is one place where we’ve found TypeScript particularly valuable. Once we’d converted the code, it was still quite complex and hard to understand what was going on, and reason about what was happening with the system. This was becoming a problem, especially as we want to be confident that we preserve the invariant that we don’t display the wrong overlay compared to the image. I looked around for options as to how to organise the code, and the one we came up with was <a href="https://redux.js.org/introduction/getting-started/">Redux</a>.</p>
<p><img src="/2020/02/tsc_19_ts_redux.png" alt="TypeScript and Redux" /></p>
<p>This is one several similar things around that take a functional approach combining an immutable state tree and reducers which take a state and an action and give you a successor state.</p>
<p>What I like about Redux is it’s incredibly simple — you could read the entire source code in an afternoon and you’d be going home early, because it’s a fantastically simple and well-thought-out library. It also fits what we do really well. In particular, I think it’s a very good fit for TypeScript, if you take the time to type your actions.</p>
<p>This is a slightly large union type, defining the acitons that can happen in our In-Theatre GUI (ITG):</p>
<p><img src="/2020/02/tsc_19_actions.png" alt="ItgAction type" /></p>
<p>Having a proper type for your actions means that you can be confident that, whenever they’re dispatched, it has the right things in it.</p>
<p><img src="/2020/02/tsc_19_localcheckresult.png" alt="LocalCheckResult type" /></p>
<p>To take a specific example, the <code>LocalCheckResult</code> action above is dispatched when we’ve checked the overlay/image invariant I mentioned. The type ensures we have all the information, and means the reducer doesn’t need to be very defensive (and can thus be a lot simpler).</p>
<p style="text-align:center;"><img src="/2020/02/tsc_19_states.png" alt="A generated state transition diagram" /></p>
<p>Another thing we can do once we have this set up is log out the states and actions. From that log, we can reduce the data to abstract transition diagrams. Briefly, black arcs are expected transitions that were observed in the test run, blue arcs are transitions that were expected but not observed (comparable to gaps in code coverage), and if there were any red arcs they would represent a transition that occurred but that you weren’t expecting — a CI failure.</p>
<p>This is something that’s revealed actual problems and regressions, where state transitions we didn’t think could happen did. This build directly on the structure provided by strong types and Redux, and makes it a lot easier to reason about what your software is doing.</p>
<p>In conclusion:</p>
<ul>
<li><em>The web platform is powerful enough for almost any application.</em> If there’s an application that would have previously had to be a native application, there are now few technical barriers to implementing it as a web application instead, with the distribution and development advantages that come with it.</li>
<li><em>TypeScript lets you develop more complex applications more easily</em> than JavaScript alone, because it gives you the extra support and extra structure to manage these larger codebases.</li>
<li><em>Static type checking combines really well with existing JavaScript tools for managing this complexity</em>.</li>
</ul>
<h2 id="questions">Questions</h2>
<h3 id="what-do-you-use-for-performance-monitoring-as-youll-have-to-check-all-of-this-stuff-in-different-browsers-and-webgl-is-particularly-inconsistent-across-browsers">What do you use for performance monitoring, as you’ll have to check all of this stuff in different browsers, and WebGL is particularly inconsistent across browsers?</h3>
<p>We use Selenium for CI testing, but mainly for correctness. In theory you can run the In-Theatre GUI in any reasonably modern browser. Our original plan was to have the hospital provide the PC and browser, but as the question correctly identifies there’s a lot of variation in WebGL (and JavaScript) performance across browser, and hardware, and due to the interaction between the two. What we do for that reason, and for reliability and testing in general, is we have a standardised setup that we provide to go into the operating room, because that’s where the performance is critical. For the desktop use, we check correctness with Selenium, but we accept a degree of variability these as we have limited control over the platform.</p>
<h3 id="unfortunately-i-couldnt-catch-the-exact-question-on-the-recording-but-it-was-something-along-the-lines-of-what-happens-if-the-network-fails-during-an-operation"><em>Unfortunately, I couldn’t catch the exact question on the recording, but it was something along the lines of “What happens if the network fails during an operation?”</em></h3>
<p>That was the key thing that led us down the path of doing the correctness check locally. If the network fails, the check is still running locally, so if you have an overlay but the image isn’t changing, the overlay will stay there. As soon as the image changes and invalidates the overlay, it will come down immediately, failing safe. Part of our risk assessment is that not showing an overlay isn’t harmful to the patient, because there are many reasons that we wouldn’t be able to show an overlay — the image is poor quality, the necessary anatomy isn’t visible, they’re outside our working range of angles. Showing an incorrect image <em>is</em> potentially harmful, hence we fail safe.</p>
<h3 id="the-larger-javascript-ecosystem-is-pretty-chaotic-have-you-had-any-trouble-with-regulators-using-npm-for-example-if-i-was-a-regulator-id-worry-about-that">The larger JavaScript ecosystem is pretty chaotic. Have you had any trouble with regulators, using NPM for example? If I was a regulator, I’d worry about that.</h3>
<p>Regualators tend to work at a more abstract level — what they worry about is that you’ve got a process. They want to know that you’re looking at it, rather than looking at it themselves. In terms of supply chain, the term for third-party software in the regualtory sphere is SoUP — Software of Unknown Provenance — which means anything that’s been developed outside your QMS. We have to review dependencies and make sure we’re not using anything that has a problem in terms of performance (mainly correctness) or security (more of a concern for the information security side). We keep this manageable by keeping dependencies to a minimum — that was a big factor in the choice of Redux as opposed to a bigger framework such as React. Not only is it small enough to review, but if it disappeared tomorrow we could probably reimplement it (at least the parts we need) in a week. It’s not so much a library as an idea. As an illustration, a little while ago, one of the team posted an implementation of Redux in RxJS on our Slack; it’s literally a single line. The power of Redux isn’t the code, but the idea of structuring your code in those terms.</p>
<div class="footnotes">
<ol>
<li id="fn:cc">
<p>EVAR image © BruceBlaus - <a href="https://commons.wikimedia.org/w/index.php?curid=47113849">Own work, CC BY-SA 4.0</a> <a href="#fnref:cc" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:fanless">
<p>This means it has to be fanless, which has a surprisingly large impact on performance – if you compare a fanless machine with exactly the same hardware but actively cooled, you’d be surprised at what a difference that makes. That’s something we ran into early on. <a href="#fnref:fanless" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:ml">
<p>This was before ML stood for Machine Learning. <a href="#fnref:ml" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2020/01/the_stuff_of_2019
The Stuff of 2019
2020-01-01T21:15:00+00:00
Rob Hague
rob@rho.org.uk
<p>As we commence 2020, here’s a dozen things I’ve enjoyed reading, watching, or listening to over the last twelve months. No particular order, and of course no implication of 100% agreement or endorsement, but I found them all worth the time. Click around to see if anything takes your fancy, and Happy New Year.</p>
<!-- Anyone looking at the source, please forgive the inline style. I'm currently mid-way through replacing my blog engine, and this was the least problematic way to get the post done. -->
<center style="max-width: 480px; margin: auto; line-height: 0px;">
<!--
--><a href="https://www.amazon.com/gp/video/detail/B07FMHTRFD"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/omens.jpg" alt="Good Omens" /></a><!--
--><a href="https://typesetinthefuture.com/2018/12/11/book/"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/typeset.jpg" alt="Typeset in the Future: Typography and Design in Science Fiction Movies, by Dave Addey" /></a><!--
--><a href="https://www.netflix.com/title/80186863"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/umbrella.jpg" alt="The Umbrella Academy" /></a><!--
--><a href="https://www.darkhorse.com/Books/3002-529/William-Gibsons-Alien-3-HC"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/alien3.jpg" alt="William Gibson's Alien 3" /></a><!--
--><a href="https://mitpress.mit.edu/books/racing-beam"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/beam.jpg" alt="Racing the Beam, By Nick Montfort and Ian Bogost" /></a><!--
--><a href="https://www.hbo.com/chernobyl"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/chernobyl.jpg" alt="Chernobyl" /></a><!--
--><a href="https://www.penguinrandomhouse.com/books/566433/the-testaments-by-margaret-atwood/"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/testaments.jpg" alt="The Testsments, by Margaret Atwood" /></a><!--
--><a href="https://www.penguinrandomhouse.com/books/301357/crashed-by-adam-tooze/9780670024933/"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/crashed.jpg" alt="Crashed: How a Decade of Financial Crisis Changed The World, by Adam Tooze" /></a><!--
--><a href="https://profilebooks.com/the-age-of-surveillance-capitalism.html"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/surveilance.jpg" alt="The Age of Surveillance Capitalism: The Fight for a Human Future at the New Frontier of Power, by Shoshana Zuboff" /></a><!--
--><a href="https://www.bbc.co.uk/programmes/w13xttx2"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/moon.jpg" alt="13 Minutes to the Moon" /></a><!--
--><a href="https://goose.game/"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/goose.jpg" alt="Untitled Goose Game" /></a><!--
--><a href="https://www.schneier.com/books/click_here/"><img style="width:33%;padding:0px;max-width:120px;" src="/2020/01/killeverybody.jpg" alt="Click Here to Kill Everybody, by Bruce Schneier" /></a><!--
-->
</center>
id:/2019/10/tsconf19
TSConf 2019
2019-10-14T13:08:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2019/10/tsconf19.jpeg" alt="TSConf 2019" /></p>
<p>As I type this I’m about to head back to the airport to head home after <a href="https://tsconf.io/">TSConf 2019</a>, a one-day conference about <a href="https://www.typescriptlang.org/">TypeScript</a>. Tech conferences are not something I usually do, but I saw the call for proposals and submitted an abstract about our use of TypeScript at <a href="https://cydarmedical.com">Cydar</a>. I was lucky enough to be accepted, so here I am. I’ll post more on that later, but below are some thoughts on the conference in general.</p>
<p>The keynote was given, of course, by <a href="https://twitter.com/ahejlsberg">Anders Hejlsberg</a> (of Turbo Pascal and C# fame). After recapping the background of TypeScript, he moved on to go over some of the upcoming enhancements in 3.7. The biggest reaction was to optional chaining and nullish coalescing, features that the TS team have been championing through the standardisation process. These are certainly useful additions to the language, but I confess I’m a little uneasy about “nullish” joining “falsey” in the programming lexicon.</p>
<p>The next talk was by some nervous-looking guy who spent too long talking about surgery and had to rush the TypeScript part a little. We’ll skip that one.</p>
<p>The rest of the day had some fascinating presentations. Testing was a common thread — <a href="https://twitter.com/feru">Ferdnanda Andrade</a> and <a href="http://www.danvk.org/">Dan Vanderkam</a> looked at this from different angles. <a href="http://www.joshuakgoldberg.com/">Josh Goldberg</a> did unspeakable things (well, arithmetic) in the type system (he’s made it available in <a href="https://blog.joshuakgoldberg.com/binary-arithmetic/">blog form</a>), and <a href="https://www.no.lol/">Lauren Tan</a> focused on looking beyond the code to work effectively in your organisation. One talk I was particularly interested in was the introduction to <a href="https://deno.land/">Deno</a> by <a href="https://tinyclouds.org/">Ryan Dahl</a> and <a href="https://twitter.com/kitsonk">Kitson Kelly</a>. It seems like an excellent ground-up rethink of scripting platforms, and I’ll definitely be digging into it more deeply when I get the chance.</p>
<p>After the talks there was a live episode of the <a href="https://www.sitepen.com/blog/feed/podcast/">TalkScript</a> podcast with members of the TypeScript team, followed by a trivia quiz and some truly amazing karaoke from the MCs.</p>
<p>On top of everything else, I seemed to be followed by a strange sense of deja vu. I’ve <a href="/2003/10/i_m_blogging_this_ri.html">been to Seattle before</a>, also for a conference — in that case, <a href="http://ubicomp.org/ubicomp2003">UbiComp 2003</a> where I was presenting a <a href="/2003/10/20/poster.pdf">poster</a> for my PhD work. This coincidence was underlined by the talk by Holly Mitchell and <a href="https://www.microsoft.com/en-us/research/people/tball/">Tom Ball</a> on <a href="https://arcade.makecode.com/">MakeCode Arcade</a>. This looks like a fantastic educational programming system in general<sup id="fnref:excuse"><a href="#fn:excuse" class="footnote">1</a></sup>, and makes good use of the browser platform (all the way to using WebUSB to reflash the physical devices if you want to).</p>
<p>However, the thing that leapt out for me personally was the way they had both a block-based and a textual representation of the program <em>and you could edit in either one, and seamlessly switch between the two</em>. This was a central idea in my PhD work, and it’s amazing to see it in action in a practical system, with such a solid and complete implementation. Talking to one of the developers afterwards, they’re achieving this using a slightly different approach to me — language-to-language mappings rather than a common abstract representation — but that makes sense in the more focussed and practical context. However it works under the hood, it provides a valuable path for learners to progress from visual programming to a more conventional platform.</p>
<p>All in all, TSConf has been a great experience. All credit to the team at SitePen for organising a friendly, fun and informative event — I learnt a lot from both the talks, and the people I met in between. I’ll post a link to the talks once they’re up, and if you have any interest in TypeScript I’d highly recommend keeping an eye out for TSConf 2020.</p>
<p><img src="/2019/10/seattle-2003-2019.jpeg" alt="Space Needle Selfies, 16 years apart" /></p>
<p><em><strong>Update 2020-02-10:</strong> Videos of all the talks are now <a href="https://tsconf.io">available on the TSConf website</a>, and I’ve written up my talk as <a href="/2020/02/tsconf2019_cutting_edge.html">a blog post</a>.</em></p>
<div class="footnotes">
<ol>
<li id="fn:excuse">
<p>No, <em>you’re</em> going to use your daughter as an excuse to buy a <a href="https://www.kittenbot.cc/products/meowbit-codable-console-for-microsoft-makecode-arcade">dinky retro console</a> <a href="#fnref:excuse" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2019/06/five-years
Five Years
2019-06-01T20:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>Five years ago, I <a href="http://rob.rho.org.uk/2014/08/end_of_an_era.html">left Cadence</a>, a company I’d been with in one form or another for almost a decade, and joined <a href="https://cydarmedical.com/">Cydar</a>. This was an inflection point for the company; Tom and Graeme, the founders, had proved that the technology the was viable, and had generated initial interest and funding, and started to build a team. The next step was to turn this technology into a product and a business. John (the first CTO) and I formed the core of the development team tasked with the former.</p>
<p>A few months later, we’d expanded the team, put the foundations of the production system in place, and were watching it being used to deliver high performance cloud computing into the operating theatre to provide surgical guidance (to the best of our knowledge, a world first). This was a major milestone, but definitely not the last.</p>
<p>Fast forward five years, and a lot has changed. Cydar EV is a fully fledged product, in use across the UK, US and mainland Europe. The company has grown to several times the six people that it was when I joined, although we’re still in the fantastic converted water mill that we were then. The biggest change for me was <a href="http://rob.rho.org.uk/2017/12/ringing_in_the_chang.html">taking over the role of CTO</a> in 2017. This has brought with it a host of new challenges, but interesting ones. More importantly, I still get to work with incredibly smart people, on fascinating technology, to an end that makes people’s lives better. All in all, it’s been a pretty good five years.</p>
id:/2019/02/weird-bobby-tables
Weird Bobby Tables
2019-02-11T22:09:00+00:00
Rob Hague
rob@rho.org.uk
<p>Jarred Sumner asks <a href="https://jarredsumner.com/codeblog/">why isn’t the internet more fun and weird</a>? He laments the creativity lost when modern social platforms cut off the Wild West your-code-here flexibility of earlier platforms such as MySpace.</p>
<blockquote>
<p>We — the programmers, designers, product people — collectively decided that users don’t deserve the right to code in everyday products. Users are too stupid. They’d break stuff. Coding is too complicated for ordinary people. Besides, we can just do the coding…so why does it matter?</p>
</blockquote>
<p>He then goes on to cite this well-known XKCD:</p>
<p><img src="https://imgs.xkcd.com/comics/exploits_of_a_mom.png" alt="XKCD — Exploits of a Mom" /></p>
<p>While I agree with the general premise of the post, namely that users are more than capable of creating with code and that there’s value in a platform that lets them do so, I think the reasoning is backwards. The problem with Bobby Tables isn’t that users are too stupid. The problem is that they are too smart.</p>
<p>In the early decades of computing, and even the early years of the web, everyone was on the same side. Nobody was going to go out of their way to break or abuse the systems you put online, and any chaos that happened to be caused was <a href="https://en.wikipedia.org/wiki/Morris_worm">purely by accident</a>. Needless to say, times have changed. Even if the majority of people in your corner of the internet are community-minded saints, there are enough bad actors that it’s only a matter of time (perhaps milliseconds) before one finds you.</p>
<p>We can’t turn the clock back to those halcyon days, and give the benefits of the modern web few would want to. However, all is not lost. A recurring theme in recent years is <em>isolation</em> — technologies such as <a href="https://azure.microsoft.com/en-gb/overview/what-is-virtualization/">virtualisation</a>, <a href="https://www.docker.com/resources/what-container">containers</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy">sandboxing</a>. These allow untrusted code to be run while mitigating the risks if that code is in fact malicious.</p>
<p>Modern, mature (although still evolving) isolation technologies have enabled a flourishing of platforms such as <a href="https://glitch.com">Glitch</a>, <a href="https://mybinder.org/">Binder</a> and Sumner’s CodeBlog. Following an over-correction in the direction of safety, this is a welcome move back towards flexible, creative platforms, made with eyes open to the technological risks. These platforms allow users to code the web both easily and safely, without the whole thing crashing down when it meets little Bobby Tables.</p>
id:/2019/01/good_year
A Great Year for Blogging
2019-01-22T22:13:57+00:00
Rob Hague
rob@rho.org.uk
<p>Just before New Year, I happened to look at the <a href="/archive">archive</a> and realised that I’d only written a single post in the entirety of 2018, making it the joint-leanest year since I started this site in 2002. This was certainly not intentional, but rather due to a parade of other things big and small eating up my time. Nevertheless, it’s something I resolved to improve upon in 2019.</p>
<p>My resolve was cemented when I came across <a href="https://www.manton.org/2019/01/17/basecamp-leaves-medium.html">Manton Reece’s post</a>, which ends on the following positive note:</p>
<blockquote>
<p>I think 2019 is going to be a great year for blogging.</p>
</blockquote>
<p>This may well turn out to a sentiment akin to the Year of Linux On The Desktop, more hope than reality, but I there are reasons to think that there may be something in it. Barely a week goes by without a revelation of a remorseless Facebook doing something terrible, and Twitter is increasingly polarised and toxic. The shine definitely seems to be coming off centralised, bite-sized social networks.</p>
<p>Whether or not this is the case generally, I’m going to aim to write more here this year. We’ll see how that goes…</p>
id:/2018/01/eve
Eve
2018-01-30T21:16:57+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve been keeping my eye on the <a href="http://witheve.com/">Eve</a> project and company, both lead by <a href="http://www.chris-granger.com/">Chris Granger</a>, for a while now, and so I was a little sad to see the <a href="https://groups.google.com/forum/#!msg/eve-talk/YFguOGkNrBo/EozaCfheAQAJ">announcement</a> that it was shutting the doors.</p>
<p>The aim of Eve was “make programming accessible to everyone”. This is an aim that is close to my own heart, and was the area in which I did my PhD. It revolves around the idea that programming can be a useful tool for a wide variety of people, instead of being the specialist domain of a select priesthood. However, as I <a href="http://rob.rho.org.uk/2016/06/hyperdev_hypercard.html">wrote a while ago</a>, the vast majority of current approaches throw up needless barriers to casual use, and the systems that <em>are</em> suitable for such use are limited in their scope.</p>
<p>Eve was an ambitious attempt to address this by reconceiving programming from the ground up, rather than modifying or extending an existing environment. The component pieces — logic programming, interactive computation, integrating code and data — weren’t new, but they were combined in a considered and consistent way that showed great promise.</p>
<p>Ultimately, though, the people behind Eve “couldn’t find a home” for the project. They have open sourced the runtime, but I suspect that the project’s more lasting contribution will be the ideas on which it was based. More than the specifics, it acted as a challenge to our assumptions about what programming environments are, and how we approach them. Eve may be winding down, but the questions it raises remain, and we should carry on asking them.</p>
id:/2017/12/ringing_in_the_chang
Ringing in the Changes
2017-12-31T15:42:02+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2017/12/ringing_in_the_chang_image1.jpeg" class="from-mail" />
</div>
<p>I’m writing this on New Year’s Eve, a time when it’s traditional to reflect on the year gone by. For me, there’s been one big change that has kept me so busy that I’m only getting round to writing about it six months later. At the start of July, I took on the role of CTO at <a href="https://cydarmedical.com">Cydar</a>.</p>
<p>There’s been a lot to get to grips with; not just the usual strategic and management responsibilities common to the CTO of any growing startup, but also the processes and regulations required when developing a medical device. Fortunately, we have an excellent team, and John, my predecessor, provided invaluable support while I found my feet.</p>
<p>Now I’ve had a while to get the hang of things, and I’m really liking the change. This is not only true where I expected it to be, in the technical areas were I now have responsibility, but also in the areas where I’ve not had previous experience. I was expecting the more organisational aspects of the role to be a price I paid to get my teeth into the fun stuff, but I was surprised to find myself enjoying them. I’ve always enjoyed learning new things, and there’s a lot for me to learn.</p>
<p>The flip side of this is the things that I’m <em>not</em> doing. Given the other things now on my plate, I’ve largely stepped back from programming day-to-day.<a href="http://rob.rho.org.uk/2013/04/a_programmer_no_more.html">The last time I moved into a largely non-programming role</a>, I missed writing code. This time around I’m not finding the same thing. It could be because I have more than enough to keep me busy elsewhere. However, I think that it’s rather because I’m still very much working in <em>development</em> in the wider sense. Even though I’m not generally committing changes into Git, I’m still involved in the design, planning and review. The main difference is that I now spend more time looking at the big picture, though I’m hoping the years of focussing on the details will stand me in good stead as I do so.</p>
id:/2017/12/quarg
Quarg
2017-12-28T20:43:21+00:00
Rob Hague
rob@rho.org.uk
<p>Parsing arguments in Python isn’t hard. There are already many libraries for command line argument parsing in Python, not least <a href="https://docs.python.org/3/library/argparse.html"><code>argparse</code></a> in the standard library. However, just because it’s not hard doesn’t mean it’s entirely without effort, and when you’re working on specific problem it’s probably not top of your mind. Creating a proper command line syntax for your quick script or runnable module requires making declarations or tagging things, so you just end up writing something like this and moving on:</p>
<pre><code>if __name__ == '__main__':
infile, outfile = sys.argv[1:]
do_stuff(infile, outfile)
</code></pre>
<p>It’s rough, but it gets the job done. However, throw away scripts have a tendency not to get thrown away, and this kind of overly spartan, undocumented CLI can end up hanging around for longer than first thought. Adding features is a pain, and a rewrite using a more structured framework is a lot of effort and has to maintain compatibility with the ad hoc version.</p>
<p><a href="https://github.com/CydarLtd/quarg">Quarg</a> was written to address this problem directly, allowing a proper command line interface to be built up incrementally, <em>starting from nothing</em>. The first and most important design goal was that it worked on unmodified Python code, and produced sensible results. This is done by taking the information that’s already there — top level functions, parameters names, and docstrings — and building an interface based on some broad assumptions and conventions.</p>
<p>The purely automatic interface (which you can get by running your script with <code>quarg</code> as the interpreter, or adding a call to <code>quarg.main()</code> at the end) is useful, and often sufficient, but you can refine it by adding annotations in the form of function decorators and specially formatted docstrings. This is what allows and interface to be built incrementally, rather than requiring a fixed amount of effort up front.</p>
<p>Under the hood, the actual argument parsing is done with <code>argparse</code>, and much of the functionality of that library is available via the <code>arg</code> decorator. While there are fancier libraries out there, I’ve always found the parsing of <code>argparse</code> to be good enough, and it avoids adding an external dependency. Quarg only depends on the standard library, and works in Python 2 and 3, so it should be easy to integrate into most contexts. It’s available on PyPI (<code>pip install quarg</code>).</p>
<p>(On a personal note, I’ve been using Python for 18 years, and while that’s mostly been ad hoc and proprietary stuff, I’ve shared numerous projects on GitHub (and, earlier, SourceForge). However, this is the first package I’ve uploaded to PyPI. The process was pretty straightforward and painless thanks to the <a href="https://packaging.python.org">Python Packaging User Guide</a>, and I’ll definitely be doing it again. The spread of unified package indices such as PyPI, NPM and CPAN are one of the biggest practical improvements to the programming experience that I’ve seen over the last two decades, and it’s taken me too long to pitch in.)</p>
<p>There are numerous ways in which Quarg could be improved — for example, by making use of type annotations if they’re present. There are also no doubt numerous bugs still to be fixed. Nevertheless, we’ve been using it internally at Cydar for a while now, and found it pretty useful. Hopefully you will too.</p>
<p><em>While I’m the main author and maintainer of the library, Quarg began life at <a href="https://cydarmedical.com">Cydar</a>, and the company retains the copyright. Thanks to my colleagues at Cydar, particularly <a href="https://twitter.com/manicai">Ian Glover</a>, for useful feedback and code contributions. Unfortunately the latter are not attributed in the Git history, as I had to excise it from a larger private repository.</em></p>
id:/2017/05/ducks
Ducks
2017-05-26T20:45:00+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2017/05/ducks.jpeg" alt="Ducks" /></p>
<p>Python popularised the term “duck typing”; if it looks like a duck, and quacks like a duck, it’s a duck.</p>
<p>C++ is similar, with the caveat that it had damn well better <em>actually</em> be a duck or everything will explode and you’ll get an error message that won’t fit in your terminal’s scrollback.</p>
<p>C works on the assumption that you probably have your reasons for asking a fire hydrant to quack, and doesn’t want to say anything in case it looks stupid.</p>
<p>In Tcl, it’s a duck. Everything is a duck. If you want something other than a duck, make it yourself by taping a bunch of ducks together.</p>
<p>In Java, you spend three days poring over the documentation to try and figure out how to get hold of an instance of something that implements AbstractWaterfowlFactoryManager, then give up and reimplement the whole avian kingdom from scratch based on a version of dinosaurs that you hacked together in college.</p>
<p>JavaScript has no built in concept of “duck”, but there are dozens of ducks to choose from in NPM. All have several hundred dependencies, aren’t documented, and don’t appear to be actively maintained.</p>
<p>Haskell does have ducks, but they’re <em>so</em> 2011. You should totally rewrite everything using Mallard, which is basically the same thing, but better for some reason.</p>
<p><em>That’s my lot for now, but feel free to send me any more that fit the bill.</em></p>
id:/2017/01/the_thrilling_adve
The Thrilling Adventures of Lovelace & Babbage
2017-01-23T21:51:39+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2017/01/the_thrilling_adve_image1.png" class="from-mail" />
</div>
<p>Tori got me <a href="http://sydneypadua.com/2dgoggles/the-book/"><em>The Thrilling Adventures of Lovelace & Babbage</em> by Sydney Padua</a> for Christmas; I’d seen a few scattered excerpts, but didn’t really know anything about the thing as a whole. Turns out it’s rather good. The comics are entertaining, imaginative and well executed, but the real treat are the notes. Padua goes into detail about the characters, history and technology in an informal and engaging way, often exploring surprising tangents. Definitely recommended.</p>
id:/2017/01/now_playing
Now Playing
2017-01-22T13:32:11+00:00
Rob Hague
rob@rho.org.uk
<p>A very brief post to note that I’ve added a <a href="/now">/now</a> page. This is something of an experiment; time will tell if I consistently update it, or it languishes unloved for a while and the gets shoved down the memory hole.</p>
id:/2016/11/how_to_get_ahead_in
How To Get Ahead In Pro Computing
2016-11-27T12:56:42+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2016/11/how_to_get_ahead_in_image1.JPG" class="from-mail" />
</div>
<p>If you follow things in the Mac world, you can’t have missed the hand-wringing regarding the Mac Pro. The 5K iMac is an excellent desktop all-in-one, and the MacBook Pro line just had a substantial update (albeit overdue, and not without issues). The Mac Pro, on the other hand, has had <em>no</em> updates since it was unveiled to great fanfare in 2013. This lack of attention has led to speculation that Apple is no longer interested in Pro desktops. <a href="https://marco.org/2016/11/05/world-without-mac-pro">Marco’s widely-circulated post</a> does an excellent job of explaining why this would be a bad thing.</p>
<p>One thing that has lead to pessimism regarding the Mac Pro’s future is the news that <a href="https://www.google.co.uk/amp/www.macrumors.com/2016/10/28/apple-out-of-display-business/amp/?client=safari">Apple is out of the stand-alone display business</a>. That move makes more sense for a company that doesn’t make desktops that need external monitors. However, it raises an interesting possibility. What if the next Mac Pro, or whatever replaces it, <em>doesn’t connect to a monitor at all</em>?</p>
<p>The key insight is that the machine that’s doing your intensive, pro-level computation (and generating all the noise, and slurping the power) does not need to be the one you’re looking at and touching. The user interface, including hardware like the monitor and keyboard, is provided by an iMac or MacBook, and the Pro box just needs to worry about the low-level, high performance calculation. Dividing the responsibility like this allows each part to make different trade offs. It frees the user facing part from trying to dissipate heat from demanding components, and frees the computation part from concerns of ergonomics.</p>
<p>This path is well-trodden for larger teams; animators and developers share farms of servers to render graphics and compile code. A headless Mac Pro would provide similar benefits to individuals. It <em>could</em> do this over the network, being essentially a miniature, personal server farm, but Apple could instead (or as well) use a faster, more direct connection. Their enthusiastic support for Thunderbolt 3 may not <em>just</em> be to get rid of big, ugly legacy ports.</p>
<p>If you relax the constraint that the thing providing computational grunt has to be a fully fledged general purpose computer, you could do this today. Thunderbolt is essentially an external PCIe bus, so a high-end graphics card in a suitable enclosure could provide plenty of additional OpenCL cores. If you want something more like traditional CPUs, Intel’s <a href="http://www.intel.co.uk/content/www/uk/en/processors/xeon/xeon-phi-detail.html">Xeon Phi</a> would work similarly.</p>
<p>The big stumbling block in this is application support; these thousands of cores won’t do much good if they sit idle while Lightroom grinds away on you internal i7. However, Apple has a good track record in this regard. Things like <a href="https://developer.apple.com/reference/dispatch">Grand Central Dispatch</a> show that they have both the technical chops to design a usable API for complex tasks like parallel programming, and the organisational will to aggressively push its adoption.</p>
<p>As a final cherry in the cake, a headless Mac Pro would also answer the question of doing “real” (in this case, computationally intensive) work on an iPad Pro. An external box would allow developers to create hybrid applications that served demanding use cases without losing the things that make an iPad an iPad. The <a href="https://www.microsoft.com/en-us/surface/devices/surface-studio/overview">Surface Studio</a> seems like a compelling form factor, but in Apple’s world it needs to be iOS, not a Mac. A headless Mac Pro (combined with an even larger iPad) would achieve this <sup id="fnref:intel"><a href="#fn:intel" class="footnote">1</a></sup>.</p>
<p>I’m not saying that we’re about to see the release such a Mac Pro — predicting future Apple products is a game for fools and clickbaiters. However, it would seem to allow them to support “Pro” users (including, not forgetting, their own developers and designers) without compromising the commercially more relevant consumer products. Whatever happens, if they don’t do something, they’ll end up ceding the space to a competitor. If they no longer care about it, then perhaps that’s a good thing.</p>
<p>(The heading image is <a href="https://en.m.wikipedia.org/wiki/Judith_Beheading_Holofernes_(Caravaggio))">Caravaggio’s <em>Judith Beheading Holofernes</em></a>.)</p>
<div class="footnotes">
<ol>
<li id="fn:intel">
<p>One interesting but solvable problem that this raises is Thuderbolt, which is an Intel technology. Might we see an x86 iPad before an ARM Mac? <a href="#fnref:intel" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2016/11/ain_t_got_nothing
Ain't Got Nothing
2016-11-14T21:09:30+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2016/11/ain_t_got_nothing_image1.PNG" class="from-mail" />
</div>
<p>At <a href="https://cydarmedical.com">work</a>, we use web technology for something a little unusual — delivering realtime augmented reality to operating rooms to support image-guided surgery. We’re constantly looking for ways to stay on top of the complexity involved, whilst still being able to add new functionality. To this end, we just migrated this from vanilla JavaScript to <a href="http://typescriptlang.org">TypeScript</a>, the statically typed variant from Microsoft Research that’s just hit 2.0. All in all, I’ve been very pleased with the results.</p>
<p>For those of you not familiar with it, TypeScript is essentially a superset of ECMAScript 6, with a type system added on. The decision to base the language on ECMAScript, rather than just using it as a compilation target, gives a far clearer migration path — you can simply change the extension on your existing source file and start adding type annotations. Compared to the prospect of a complete rewrite, this makes migrating an existing code base a far less… courageous endeavour.</p>
<p>Another benefit is that you get to use all of the nice features of ES6 (lexical <code>let</code> and <code>const</code>, arrow functions, default arguments) without having to worry about support on various platforms (the TypeScript compiler takes care of it). On the other side of the scales, it’s true that TypeScript inherits all of JavaScript’s flaws. However, I quite <em>like</em> JavaScript, especially the recent versions. Moreover, the vast majority of the issues that remain (numerical representation, limited tooling, anaemic standard library) are characteristics of the environment rather than the language itself.</p>
<p>The idea of glomming a type system onto a formerly dynamic language is one that could go horribly wrong, but TypeScript does a very good job of it (unsurprisingly, given it’s pedigree). Firstly, the type system is gradual; by default, things get the permissive <code>any</code> type, so your unmodified JavaScript will work out of the box. Once you’ve annotated everything, you can turn this default off to keep everyone honest.</p>
<p>This doesn’t mean you have to have annotations for every function and variable, though; like any modern language worth its salt, it uses type inference to fill in the blanks. The type system also supports <a href="https://en.m.wikipedia.org/wiki/Algebraic_data_type">algebraic types</a>, including (in TypeScipt 2.0) discriminated unions. If you tend towards a functional rather than object oriented style anyway, the result is something that feels very much like an <a href="http://rob.rho.org.uk/2014/12/ml_for_the_working_p.html">ML for the working programmer</a>.</p>
<p>While TypeScript has a lot of details that I like, there’s one feature in particular that has won me over: strict null checks<sup id="fnref:snc"><a href="#fn:snc" class="footnote">1</a></sup>. This means that, if the type system says that something is a string, it’s <em>actually</em> a string; it can’t be null (or undefined). This eliminates a pervasive flaw in JavaScript, and indeed almost all other languages that use reference types (Tony Hoare called it the <a href="https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare">“billion dollar mistake”</a>). If a null value is a possibility, you <em>have</em> to account for that, or your code won’t type check. The impact of this seemingly simple change is immense; in fact, I’d recommend adopting TypeScript on the strength of this feature <em>alone</em>.</p>
<p>The only significant snag we hit in moving to TypeScript is the build process. We try and keep third party dependencies to an absolute minimum, which meant we’d previously been able to get away with a very minimal build system based on <a href="http://requirejs.org/">RequireJS</a>. With TypeScript introducing a mandatory build step, we decided to bite the bullet and go with something more fully featured.</p>
<p>We picked <a href="https://webpack.github.io/">webpack</a>, and while we have a system that works I’ve not been particularly impressed. On the plus side, it’s allowed us to adopt <a href="http://sass-lang.com/">SCSS</a>, and supports things like <a href="https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">source maps</a>. However, it’s a prime example of the JavaScript community’s tendency to have hundreds of micro-dependencies. This isn’t a deal breaker for us in this case, as they’re development rather than runtime, but is still far from ideal. Related to this, much of the functionality (even basic things, such as returning a failing exit code if one of your build steps doesn’t work) is in the form of third party plugins. The TypeScript plugin we’re using seems to be having some kind of configuration turf war with the compiler’s own configuration system, which means we can’t benefit from a lot of the deep tool support that the latter provides.</p>
<p>The specific issues we’re seeing are relatively minor, and I expect that we’ll solve them with a little tweaking. The underlying problem will still be there: there seems to be an unnecessary amount of accidental complexity to solve a relatively simple problem. This isn’t just webpack, though — we went with it because it looked like the <em>least bad</em> JavaScript build system. If we replace it with anything, it’ll be good old-fashioned <code>make</code> (“the worst build system, except for all the others”).</p>
<p>When compared to more established languages like Python, the JavaScript landscape is, to put it mildly, somewhat turbulent. Innovation and pace are valued over stability and rigour. However, as the web platform is used for more and more critical things, this is starting to change. TypeScript is definitely a move in the right direction.</p>
<div class="footnotes">
<ol>
<li id="fn:snc">
<p>Strict null checking was <a href="https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript">introduced in TypeScript 2.0</a>, but as it will almost certainly break existing code, it’s off by default. You can enable it with the flag <code>--strictNullChecks</code>, and I highly recommend that you do. <a href="#fnref:snc" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2016/08/in_the_abstract
In The Abstract
2016-08-18T20:34:56+00:00
Rob Hague
rob@rho.org.uk
<p>In <a href="https://www.relay.fm/radar/37">Under the Radar #37</a>, David and Marco discuss code reuse, and the benefits of abstraction. They come down solidly on the side of YAGNI — You Ain’t Gonna Need It. In other words, it’s usually not worth putting extra effort into making something more general than it needs to be right now, as you’re unlikely to correctly predict the <em>way</em> in which it will need to generalise (if it ever does).</p>
<p>This is certainly not a straw man; it’s a trap I’ve often seen people fall into, myself included. However, I’ve also seen people go too far in the opposite direction, viewing any abstraction or generalisation as a problem.</p>
<p>This made me look at my own use of abstraction, and I found myself thinking of the <a href="https://fieldnotesbrand.com">Field Notes</a> brand tagline:</p>
<blockquote>
<p>“I’m not writing it down to remember it later, I’m writing it down to remember it now.”</p>
</blockquote>
<p>Similarly, I tend not to create abstractions to cope with future cases, but <em>in order to understand the code that’s already there</em>. Some people understand things best when they’re concrete and explicit, but I’m not one of them. I need to systematise things, to put them in a framework and create rules. This is one of the reasons I’m attracted to programming. The framework I construct to understand isn’t just a model of something; it can <em>be</em> the thing.</p>
<p>Abstraction, of course, can have numerous other benefits — brevity, clarity, and yes, even reuse. For me, though, it’s first and foremost a tool for understanding what the hell’s going on.</p>
id:/2016/06/hyperdev_hypercard
HyperDev, HyperCard and a Small Matter of Programming
2016-06-12T08:20:35+00:00
Rob Hague
rob@rho.org.uk
<p>HyperDev (<em>now out of beta, renamed <a href="https://gomix.com">GoMix</a>, then renamed again to <a href="https://glitch.com/">Glitch</a></em>) is a new web development product from <a href="https://www.fogcreek.com/#">Fog Creek</a>, and it looks very promising. It aims to remove the friction from creating a web application by getting rid of all the incidental complexity usually associated with development. To quote from <a href="http://joelonsoftware.com/items/2016/05/30.html">Joel’s introductory post</a>:</p>
<blockquote>
<p>Step one. You go to hyperdev.com.</p>
<p>Boom. Your new website is already running. You have your own private virtual machine (well, really it’s a container but you don’t have to care about that or know what that means) running on the internet at its own, custom URL which you can already give people and they can already go to it and see the simple code we started you out with.</p>
<p>All that happened just because you went to hyperdev.com.</p>
<p>Notice what you DIDN’T do.</p>
<ul>
<li>You didn’t make an account.</li>
<li>You didn’t use Git. Or any version control, really.</li>
<li>You didn’t deal with name servers.</li>
<li>You didn’t sign up with a hosting provider.</li>
<li>You didn’t provision a server.</li>
<li>You didn’t install an operating system or a LAMP stack or Node or operating systems or anything.</li>
<li>You didn’t configure the server.</li>
<li>You didn’t figure out how to integrate and deploy your code.</li>
</ul>
</blockquote>
<p>This is a big deal. If you’ve been programming for a while, you cease to notice the rituals and rain dances required to get things working. You build up mental callouses, and after a while forget that the accidental complexity is even there. To someone just getting started, this is a major impediment<sup id="fnref:shibboleth"><a href="#fn:shibboleth" class="footnote">1</a></sup>. HyperDev shows that it’s an unnecessary one.</p>
<p>Crucially, HyperDev <em>isn’t</em> a toy environment, a sandbox for learning the basics. It produces real applications, running on a real platform<sup id="fnref:node"><a href="#fn:node" class="footnote">2</a></sup>. You can take what you’ve created, deploy it elsewhere, and expand it on any way you choose. This turns it from a dead end into a launch pad.</p>
<p>All this makes it interesting as a platform for <em>end user</em> development — allowing users who aren’t developers, and don’t necessarily want to be, to use web technology to solve their own problems. However, while they’ve removed most of the rough edges, one thing remains that makes it less than perfect for this use case: programming itself.</p>
<p>Consider two end-user development systems (perhaps the only two) that have seen widespread success: <a href="https://nodejs.org/en/">HyperCard</a><sup id="fnref:hyper"><a href="#fn:hyper" class="footnote">3</a></sup> and <a href="http://office.microsoft.com/en-us/excel">Excel</a><sup id="fnref:joel"><a href="#fn:joel" class="footnote">4</a></sup>. Both are notable in that you can start using them interactively and directly, and immediately get value from them <em>without programming at all</em>. Excel is a useful tool even if you just type figures into a grid and make charts. Not everyone needs to bother with formulae, and even fewer with Visual Basic, but those facilities are there as and when you need them. Similarly, HyperCard allows you to start with a simple graphical editor, and move on to links and then scripts.</p>
<p>In the case of Excel, the overall architecture is geared towards the simple case, and it shows the strain when pushed into more complex use. HyperCard was had a better model in this regard, but the vagaries of the market meant it never got a chance to keep pace with changes in the technology landscape. HyperDev’s story for progression is stronger than either, at the expense of missing out the first step.</p>
<p>In summary, HyperDev does a fantastic job of removing unnecessary friction from traditional development. It’s shaping up to be a useful tool in its own right, and it also acts as an existence proof to make us reexamine the assumptions embedded in our existing environments. In terms of empowering end users to solve their own problems, though, there’s still more to explore.</p>
<p><em>The title of this post is a reference to <a href="https://mitpress.mit.edu/books/small-matter-programming">A Small Matter of Programming, by Bonnie Nardi</a>, a great book covering the motivation and theory behind end-user programming.</em></p>
<div class="footnotes">
<ol>
<li id="fn:shibboleth">
<p>Some regard this as a badge of honour, a shibboleth, a bouncer on the door keeping out the riffraff, and see it as a good thing. It isn’t. <a href="#fnref:shibboleth" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:node">
<p>Well, <a href="https://nodejs.org/en/">Node.JS</a>. <a href="#fnref:node" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:hyper">
<p>I assume that the name “HyperDev” is a nod in this direction. <a href="#fnref:hyper" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:joel">
<p>Fog Creek founder Joel Spolsky worked on Excel when at Microsoft; I’d be interested to hear how his experiences there shaped the development of HyperDev. <a href="#fnref:joel" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2015/12/web-fonts
Web Fonts
2015-12-09T22:00:50+00:00
Rob Hague
rob@rho.org.uk
<p>One of the things I enjoy doing with this site is tweaking the design. I’ve previously written about <a href="http://rob.rho.org.uk/2014/11/new_look.html">the goals I’m aiming towards</a> when I do this. Along with the publication of this post, I’m made another change in order to get closer to the ideal described there; I’ve introduced <a href="http://www.html5rocks.com/en/tutorials/webfonts/quick/">web fonts</a>.</p>
<p>In that previous post, I was less than complimentary about web fonts:</p>
<blockquote>
<p>No web fonts for body text. This not only adds another resource to the page load, but unlike an image or style sheet it renders the text itself invisible until it arrives. Until someone works out a way around this, I’m steering clear of web fonts for sites with casual visitors.</p>
</blockquote>
<p>This is all still factually correct, but I’ve reconsidered how it relates to my goal of a fast, lightweight site that works well for drive-by readers. Firstly, I realized that the that the biggest non-content resource on all pages was <a href="http://rob.rho.org.uk/images/banner-horizontal@2x.png">the logo</a>, which <em>is just text</em>. If I could replace this with real text in a font of my choice, I could eliminate the image entirely while still retaining visual control.</p>
<p>The second aspect, the invisible text while loading, remains, but isn’t the problem I thought it was. Even in my original objection I left myself an out — the body text is still in reliable old Georgia, and so will not be affected. A brief delay in the rendering of headings and so on seems acceptable, as long as it really is brief. On a lot of sites that use web fonts, it isn’t — it’s often noticeable, and occasionally a real impediment to getting to the content. Why do I think I can do better?</p>
<p>The main problem isn’t web fonts themselves (which are a just a resource like any other), but rather the way they’re often implemented. Services like <a href="https://typekit.com">Adobe TypeKit</a> and <a href="https://www.google.com/fonts">Google Fonts</a> offer a wide range of high-quality fonts, <em>hosted on their own servers</em>. This makes for painless integration — just add a single stylesheet and you’re done — and allows them to manage licensing and pricing, but comes at a cost. Third party resources like this not only put you at the mercy of someone else’s operations and priorities, but can also torpedo performance by requiring a separate HTTP connection and DNS lookup. For reasons of both performance and pigheadedness, I ruled such services out.</p>
<p>The alternative is to host the font yourself, just like a stylesheet or image. There’s no technical trick to this, but it requires a font licensed in such a way that allows redistribution. Unless you’re willing to pay far more than I can justify, this rules out most well known fonts from major foundries (who, not unreasonably, want to charge for their work). However, in parallel to the software world, there are fonts with more open licenses which would suit my purposes. After a bit of searching on <a href="http://www.fontsquirrel.com">FontSquirrel</a>, I came across the rather nice <a href="http://www.cooperhewitt.org/open-source-at-cooper-hewitt/cooper-hewitt-the-typeface-by-chester-jenkins/">Cooper Hewitt</a>, a font that the Cooper Hewitt Smithsonian Design Museum commissioned for their own branding and then released under an open license. The light weight fit with the look I was aiming for, and the integration was straightforward. I also took the opportunity to replace some image links with text, meaning that there are now no non-content images on the site.</p>
<p>So, what’s the end result? Looking at the <a href="http://rob.rho.org.uk/2015/09/hashes_in_space.html">previous post</a>, which is short but not unusually so:</p>
<ul>
<li>Before: <strong>six</strong> resources, totaling <strong>65.3KB</strong>.</li>
<li>After: <strong>four</strong> resources, totaling <strong>34.0KB</strong>, a little over half the size.</li>
</ul>
<p>So, not only do web fonts make the site prettier and more accessible, they substantially reduce both the size and number of resources. This translates into genuine performance gains for anyone visiting the site. When I started looking at web fonts, my aim was to improve the appearance without <em>increasing</em> load times, so such a marked improvement is a very nice bonus.</p>
<h3 id="update">Update</h3>
<p>Having inlined the font stylesheet into the main one, the page is now down to <strong>three</strong> resources — the HTML, a single stylesheet, and the font itself. The total size remains about the same.</p>
id:/2015/09/hashes_in_space
Hashes In Space
2015-09-18T20:42:50+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://ipfs.io">IPFS</a> - InterPlanetary File System - is an open source project to create a “permanent web”, one that avoids the broken links and single points of failure arising from HTTP. <a href="https://blog.neocities.org/its-time-for-the-permanent-web.html">Kyle at NeoCities</a> explains this in far more detail, but the core idea is to replace URLs with hashes, resulting in content-addressed links.</p>
<p>We use such hashes extensively at <a href="https://cydarmedical.com">Cydar</a> to wrangle the data flowing through our distributed system, so I know first hand that they’re a straightforward and effective way to tackle this. Content hashes solve the two hard problems in computer science: names are unambiguous and can be generated locally, and the corresponding content is effectively immutable, meaning cache invalidation isn’t required. Throw in the fact that integrity checking is built in, and you have a compelling approach to handling distributed data.</p>
<p>IPFS is by no means perfect. In particular, while I like the content addressable part, I’m less convinced about the blockchain-based naming mechanism. Nevertheless, there’s definitely enough there to make it worth keeping an eye on.</p>
id:/2015/08/toys
Toys
2015-08-29T13:18:47+00:00
Rob Hague
rob@rho.org.uk
<p>The history of computing is full of toys that nobody would seriously try to get real work done with. The PDP was a toy. The Apple II was a toy, and so was the Mac. Unix was a toy Multics, C a toy version of Algol (thrice removed), and the Web a toy in comparison to <a href="http://www.xanadu.com/">Xanadu</a>.</p>
<p>With renewed rumours of an iPad Pro, people<sup id="fnref:atp"><a href="#fn:atp" class="footnote">1</a></sup> are again suggesting that the iPad (and tablets in general) isn’t suitable for <em>real work</em>. If history is anything to go by, this is a pretty good indicator that it’s an avenue worth pursuing.</p>
<div class="footnotes">
<ol>
<li id="fn:atp">
<p>Such as Marco on <a href="http://atp.fm/episodes/132">ATP episode 132</a>. <a href="#fnref:atp" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2015/06/monolithfirst
MonolithFirst
2015-06-07T12:17:36+00:00
Rob Hague
rob@rho.org.uk
<p>Martin Fowler (of <a href="http://martinfowler.com/books/refactoring.html">Refactoring</a> fame) writes in praise of monoliths, at least at <a href="http://martinfowler.com/bliki/MonolithFirst.html">first</a>.</p>
id:/2015/05/margaret
Margaret
2015-05-18T12:33:47+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2015/05/margaret_image1.JPG" class="from-mail" />
</div>
<p>Announcing the arrival of Margaret, born Saturday at 4:30pm, weighing 10lb 3oz (4.62kg). Mother and baby doing great, and <a href="/2013/03/rosalind.html">Rosalind</a> can’t get enough of her little sister.</p>
id:/2015/04/blogtools
Blogtools
2015-04-02T20:51:47+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve just created a <a href="https://github.com/robhague/blogtools">GitHub repository</a> to publish some of the bits and pieces I use to maintain this site. Most notable so far is the script I use to submit posts by email. I’ve found this to be a flexible and straightforward way to update the site; if you use a static blogging engine such as Jekyll, you might find it useful too.</p>
id:/2015/03/happy_birthday_ema
(happy-birthday 'emacs)
2015-03-20T12:41:20+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2015/03/happy_birthday_ema_image1.PNG" class="from-mail" />
</div>
<p>Computing technology is a field with an unhealthy obsession with novelty. This is particularly true of the things that developers use to <em>create</em> technology - new tools, languages and frameworks arrive on a daily basis, faster than anyone could hope to keep up. In this febrile atmosphere, it might seem odd that one of the most important tools in my digital life - one that I use heavily, every day - is three decades old.</p>
<p><a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> was first released to the public on the 20th of March 1985, thirty years ago as I write this. For the uninitiated, it’s a text editor. Neal Stephenson, in the excellent <a href="http://www.cryptonomicon.com/beginning.html">In The Beginning There Was The Command Line</a>, elaborates:</p>
<blockquote>
<p>I use emacs, which might be thought of as a thermonuclear word processor. It was created by Richard Stallman; enough said. It is written in Lisp, which is the only computer language that is beautiful. It is colossal, and yet it only edits straight ASCII text files, which is to say, no fonts, no boldface, no underlining. In other words, the engineer-hours that, in the case of Microsoft Word, were devoted to features like mail merge, and the ability to embed feature-length motion pictures in corporate memoranda, were, in the case of emacs, focused with maniacal intensity on the deceptively simple-seeming problem of editing text. If you are a professional writer–i.e., if someone else is getting paid to worry about how your words are formatted and printed–emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish.</p>
</blockquote>
<p>In truth, Emacs doesn’t <em>only</em> edit text - it can do everything from reading email to playing games - but text editing is the lens through which it view these tasks. This dovetails nicely with the Unix philosophy of using streams and files of text to communicate between disparate programs. For me, it is this that makes it such an enduringly useful tool. The time I’ve invested in learning to use it - seventeen years and counting - can be applied not just to obvious things like editing program text and notes, but for almost anything else that can be framed in terms of text. Combined with a robust editing feature set honed of thirty years of widespread use, it’s a hard combination to beat.</p>
<p>Will it hold this vaunted position forever? It seems unlikely. Emacs’ aging foundation has been showing for a while (every time the whole lot freezes because a network operation gets confused, for example). New pretenders to the throne - <a href="http://lighttable.com">LightTable</a> and <a href="https://atom.io">Atom</a> being two recent examples that seem to have the right idea - keep popping up to tempt me away. However, every time I try one of these young bucks, they seem thin and incomplete compared to the rough but capable workhorse I’m leaving behind. There’s plenty of life in the old dog yet.</p>
<p><em>The <a href="http://www.gnu.org/graphics/heckert_gnu.html">GNU Head</a> image copyright is held by the Free Software Foundation, and the image is used here under the <a href="http://directory.fsf.org/wiki/License:CC_ASA2.0">CC-BY-SA</a> license.</em></p>
id:/2015/01/blast_from_the_past
Blast from the Past
2015-01-25T14:17:01+00:00
Rob Hague
rob@rho.org.uk
<p>I finally got round to doing something I’ve been meaning to do for a long while: migrating my old (pre-2008) blog entries to the new engine. The <a href="/archive.html">archive</a> now goes back to 2002, when I first started this site.</p>
<p>To put this in context, that’s two years before Facebook<sup id="fnref:fb"><a href="#fn:fb" class="footnote">1</a></sup>, four years before Twitter, and nine years before Google Plus. Geocities and the original MySpace were around at the time, but they aren’t any more.</p>
<p>This gets to the heart of why I go to the trouble and (very minor) expense of hosting my own blog. I’m on various social networks, but in the knowledge that whatever I put there isn’t really under my control: it’s at the mercy of the whims, competence and cash flow of someone else. They may decide, at any moment, to chop and change it, festoon it with advertising, or hide it completely. The entire service is liable to disappear, taking my words with it, if it’s not paying its way.</p>
<p>The stuff I write here is mine, and I’m not beholden to anyone else to keep it here. That’s important to me; if it’s important to you, put Twitter and Facebook down for a moment and get yourself a blog.</p>
<div class="footnotes">
<ol>
<li id="fn:fb">
<p>Four years before it was open to the general public, as opposed to students at particular institutions. <a href="#fnref:fb" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2015/01/the_empire_strikes_b
The Empire Strikes Back
2015-01-21T22:51:49+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve been using a Mac at home for over a decade, and pretty much all of my professional work has targeted Linux (or has been platform-neutral). Since university, my only real contact with Windows has been a work-issued computer, and since I changed jobs I don’t even have that on my main machine. Yet, I find myself excited about the upcoming <a href="http://blogs.windows.com/bloggingwindows/2015/01/21/the-next-generation-of-windows-windows-10/">Windows 10</a>. From the prosaic - unifying things both technically and presentationally across a wide range of devices - to the outlandish - Cortana, augmented reality - they seem to be nailing both the ideas and the details.
How did this happen? When did Microsoft get interesting?</p>
<p>It didn’t happen all at once. The <s>Metro</s> Modern design language showed that they could come up with something good-looking and innovative without just aping Apple, and the Kinnect is one of the few consumer products in a long while that’s genuinely impressed me on a technical level. There have been changes in the way they interact with the rest of the tech world too; supporting other people’s platforms and languages on Azure, and open sourcing key components of their own. All of these trends seem to be coming together, and recently they really seem to be hitting their stride.</p>
<p>To someone who started paying serious attention to the technology world in the late nineties, this is a strange turn of events. Microsoft were to us what IBM was for the previous generation; the staid, standard choice that nobody got fired for buying. Moreover, they were <em>evil</em>, the 800lb gorilla that crushed all before them with questionably legal business practices, ruthless patent suits, and Fear, Uncertainty and Doubt. Noted philanthropist and campaigner Bill Gates was the most despicable person on the planet (Mark Zuckerberg was still in high school). Whole communities pretty much defined themselves as being <em>not Microsoft</em> (although they’d spell it with a $).</p>
<p>The main difference between then and now is, of course, power. In the nineties, Microsoft absolutely dominated the personal computing landscape. Apple were a has-been on the verge of bankruptcy, and IBM were floundering. The web was only just starting to emerge in earnest. Microsoft had an open field, and they exploited it to the full.</p>
<p>Today, the picture is very different. The web as a common medium has diluted their platform advantage, and mobile has opened up a new frontier. For a while, Microsoft floundered, slow to adapt and leaning ever more heavily on their existing cash cows, seemingly oblivious that the world was moving on.</p>
<p>This seems to have changed. Their new CEO has accelerated the process, but I think it started before that. In any case, they seem to be re-energised by the knowledge that they’re no longer top dog. It’s unlikely that they’ll regain their dominant position, but they’re back in the fight in a big way.</p>
<p>It’s early days for Windows 10, of course, so I could be completely wrong. Perhaps this is the last gasp of a dying giant. The only way to know is to watch it unfold. One way or the other, though, it won’t be boring.</p>
id:/2015/01/learning
Learning
2015-01-07T20:58:19+00:00
Rob Hague
rob@rho.org.uk
<p>January is a time for trying new things. My last post got me thinking about this, and conversations at work since I’ve been back have solidified my resolve. In 2015, I’m going to learn a new programming language.</p>
<p>This isn’t because I’m particularly dissatisfied with my current arsenal - <a href="https://www.python.org">Python</a> and <a href="https://isocpp.org">C++</a> have served me well for a long time, and I’m not about to abandon them and throw away the experience I’ve built up. I’m going to keep polishing my knowledge of those - including Python 3 and C++ 11/14 - along with the other languages I use for work (mainly <a href="http://javascript.crockford.com/javascript.html">JavaScript</a>, <a href="https://www.opengl.org/documentation/glsl/">GLSL</a> and <a href="http://www.nvidia.com/object/cuda_home_new.html">CUDA</a>).</p>
<p>What I’m interested in here is something a little different. Learning new technologies, and languages in particular, is useful both in its own right, and to give you a new perspective on the familiar. I’ve long been interested in programming languages, but rarely knuckle down and learn a new one in depth. I’d like to change that.</p>
<p>The last few years have been pretty good as far as interesting languages go; as more code has move to the server, new languages have emerged, and old ones are getting renewed interest. Here’s are the languages that have particularly caught my attention:</p>
<ul>
<li><a href="https://golang.org/">Go</a> seems to be getting a lot of traction, and you certainly can’t argue with <a href="http://readwrite.com/2009/11/10/google_go_open_source_language">its pedigree</a>. What I’ve seen of it is sensible and pragmatic. Surprisingly, given its origins, it looks closer to being a more rigorous Python rather than a modern C or a rationalised C++, but that’s not necessarily a bad thing. My main reservation is its youth; while it has a lot of excitement now, it’s still relatively untested, and it remains to be seen how it will fare over the long term.</li>
<li><a href="http://www.rust-lang.org">Rust</a>, in contrast, looks like it <em>would</em> be a viable replacement for C++ in a lot of the situations where the latter makes sense. Moreover, as I mentioned in my <a href="http://rob.rho.org.uk/2014/12/ml_for_the_working_p.html">previous post</a>, it takes a lot of cues from type theory and languages like ML, which appeals to the computer scientist in me. However, like Go, I’m worried about its staying power. This is if anything even more of a concern, as Rust’s backer (the Mozilla Foundation) doesn’t have the deep pockets and killer instinct of Go’s (Google).</li>
<li><a href="http://haskell.org/">Haskell</a> is something I’ve been curious about since I was an undergraduate, but I’ve never taken the plunge and used it for anything substantial. Over the last few years, my reservations have crystallised into something specific. I’m worried that I’ll accidentally make something none-strict, and suddenly my code will be linear (or worse) rather than constant in space. I’d assumed that this was just due to my unfamiliarity with the language, but it appears that the experts also find it difficult to reason about Haskell in this respect. Unfortunately, this is basically a deal-breaker for anything long-running like web apps, but is less of a problem for things that I’m just going to run myself (such as a compiler).</li>
<li><a href="http://fsharp.org/">F#</a> looks fascinating, and has a number of interesting features (having worked on physical units support in my last job, I find <a href="http://msdn.microsoft.com/en-us/library/dd233243.aspx">units of measure</a> particularly intriguing). However, while no longer Windows only, that seems like its natural home. It’s also (as far as I can see) tied to the .NET environment, which seems a little more heavyweight than I’d like. (Both of these objections would of course be irrelevant if I ever found myself writing anything Windows-only; you never know…)</li>
<li><a href="https://developer.apple.com/swift/">Swift</a> is essentially the same story writ large; interesting, but single vendor. In this case, it isn’t even - yet - cross-platform or open source. That said, Apple seem likely to put consistent and continued effort in to it, which goes some way to offsetting its immaturity (it’s by far the newest language on this list). Perhaps a good choice on its home turf, but not elsewhere.</li>
<li><a href="https://ocaml.org/">OCaml</a> is, perhaps surprisingly, the final item on my list. Like Haskell, I’ve had half an eye on it for a long time. Recently, however, I seem to be hearing of more and more people making serious use of it. Part of this is undoubtedly because I know a few people who work on <a href="http://www.citrix.com/products/xenserver/overview.html">XenServer</a> and related projects, where OCaml is used heavily. It’s not just them, though: Facebook has also recently been working on numerous projects (<a href="http://hacklang.org/">Hack</a>, <a href="http://flowtype.org/">Flow</a>, <a href="https://github.com/facebook/pfff/wiki/Main">Pfff</a>) in the language. These aren’t toys, either - they’re big, complex projects in key areas of their respective businesses. This combination of momentum and maturity should be enough to get me over the syntactic peculiarities that have niggled me before.</li>
</ul>
<p>It should be obvious by this point that I consider none of these languages a slam dunk; they all have their problems. This shouldn’t be surprising. I’ve been around too long, and seen too many hot new things come and go, to think that any language (or framework, or service…) will be perfect. That said, I’m not looking for perfect. I’m looking for interesting and useful, and every language on the list is both.</p>
<p>I don’t see any need to commit myself to any one of them exclusively. I’m a (programming) polygot already, and I intend to remain one. I’ll try each out for a small project that suits it, and see what I think. The problem is that, with commitments at work and at home, my time for such projects is limited, so I need to make a decision. Which should I try first?</p>
<p>Having considered it, I think I’m going to go with OCaml. It has the kind of high-level abstractions that I’m missing from my current tools, but is sufficiently grounded that I can reason about it without getting a headache. I’ll find a little project to try (probably something involving parsing and data munging), and see how it goes.</p>
<p>And now I’ve made a public declaration of my intent, I might actually follow through on it without getting distracted by a hundred other things. Watch this space.</p>
id:/2014/12/ml_for_the_working_p
ML for the Working Programmer
2014-12-31T14:13:24+00:00
Rob Hague
rob@rho.org.uk
<p>In 1996, I arrived in Cambridge and, like countless other fresh university students, went about acquiring the prescribed stack of wincingly expensive textbooks. One - the key one for the Computer Science part of the course - bore the title <a href="http://www.cambridge.org/gb/academic/subjects/computer-science/programming-languages-and-applied-logic/ml-working-programmer-2nd-edition">ML for the Working Programmer</a><sup id="fnref:text"><a href="#fn:text" class="footnote">1</a></sup>.</p>
<div class="images-from-mail">
<img src="/2014/12/ml_for_the_working_p_image1.JPG" class="half-width" />
</div>
<p>At the time, I thought nothing of this, but as my classmates and I learnt ML - the primary teaching language for undergraduates at the Computer Lab - we began to regard it as ironic overstatement, or perhaps protesting too much. Surely no <em>working</em> programmer would use this fussy, academic language? Unlike real languages such as C (or even BASIC), there was no way to access memory directly. You couldn’t circumvent the type system to get things done. You couldn’t even do something as simple as a <code>for</code> or <code>while</code> loop; you had to tie yourself in knots with “tail recursion”, and hope that the compiler makes it efficient<sup id="fnref:tail"><a href="#fn:tail" class="footnote">2</a></sup>.</p>
<p>By the time I’d graduated, I’d come to appreciate the elegance, expressiveness and power of ML, but still regarded it as a language for academics; something to influence other, more practical, languages perhaps, but not something I expected to see being used in the “real” world. But then, strange things started to happen.</p>
<p>The first hint that something was changing came from, of all places, Microsoft. In 2005, they adopted <a href="http://fsharp.org/">F#</a> as an official language for their .NET platform. This new language<sup id="fnref:msr"><a href="#fn:msr" class="footnote">3</a></sup> was essentially a dialect of ML<sup id="fnref:ocaml"><a href="#fn:ocaml" class="footnote">4</a></sup>.</p>
<p>A little while later, over on the open source side of the fence, there was an increase in interest in ML’s lazy compatriot <a href="http://haskell.org">Haskell</a> at Red Hat and others. Interestingly, this wasn’t for solving hard problems with complex algorithms, where you might expect a more expressive language to be useful. Instead, it was for things like scripting and build automation, the most pragmatic of practical tasks. Academic languages were definitely getting their hands dirty.</p>
<p>In the past few years, things have picked up even more. The first time I looked at <a href="http://www.rust-lang.org/">Rust</a>, the closest thing to a viable C++ replacement I’ve yet to see, it was pleasantly familiar. More recently, Apple’s <a href="http://developer.apple.com/swift">Swift</a> has a distinctly ML-like flavour.</p>
<p>It’s not just shiny new languages, either. <a href="http://www.stroustrup.com/C++11FAQ.html">C++ 11</a> added ML-like features such as lambdas and type inference to its already stuffed arsenal<sup id="fnref:exceptions"><a href="#fn:exceptions" class="footnote">5</a></sup>. Even <a href="http://javascript.crockford.com/javascript.html">JavaScript</a>, while not changing in terms of the language spec, is becoming noticeably more ML-like<sup id="fnref:lisp"><a href="#fn:lisp" class="footnote">6</a></sup> in actual use, as people stop trying to make it look like Java and adopt a more functional style.</p>
<p>All of this is, in my opinion, very good news. Programming isn’t easy, and you need some kind of intellectual framework to navigate the near-infinite space of possibilities. The core ideas behind ML and friends have been polished in the river of academia for decades, and have become smooth and beautiful as a result. ML has a lot for the working programmer.</p>
<div class="footnotes">
<ol>
<li id="fn:text">
<p>The full text of the book is <a href="http://www.cl.cam.ac.uk/~lp15/MLbook/pub-details.html">available online</a> <a href="#fnref:text" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:tail">
<p>Spoiler: it does. <a href="#fnref:tail" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:msr">
<p>Perhaps not coincidentally F# was developed at Microsoft Research Cambridge, at the time next door to the Computer Lab. <a href="#fnref:msr" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:ocaml">
<p>Not the Standard ML I’d learnt as an undergraduate, but its close relative <a href="https://ocaml.org/">OCaml</a>. Perhaps it’s just early exposure, but I’ve never been keen on the latter’s syntactic quirks. Semicolons as list separators? <em>Sacré bleu!</em> <a href="#fnref:ocaml" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:exceptions">
<p>In fact, C++ has had at least one feature taken directly from ML almost since its inception. Don’t like exceptions? Blame ML. <a href="#fnref:exceptions" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:lisp">
<p>Arguably LISP-like, but I’d say that that would imply macros. Perhaps Scheme-like, but Scheme and ML are very similar in many respects. <a href="#fnref:lisp" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2014/11/new_look
New Look
2014-11-29T12:09:36+00:00
Rob Hague
rob@rho.org.uk
<p>As you may or may not have noticed (depending on how you’re reading these words, and if you’ve been here before), I’ve given this blog a little spring clean. The idea for this redesign emerged when I noticed that I actually preferred the (responsively selected) mobile layout of my site to the full one. Maybe it would be worth adopting and adapting that kind of layout across the board? Looking around, I found that a number of other sites that I liked the look of (such as <a href="http://mattgemmell.com/designing-blogs-for-readers/">Matt Gemmell’s</a>) had taken a similar approach, so I decided to give it a go.</p>
<p>Any design needs to be informed by the people who are going to use it. Thinking about this, I came up with a few categories of user:</p>
<ol>
<li>Casual readers who come to an article via a link they’ve seen elsewhere. They’re mainly interested in reading the single article in question, so it needs to be presented clearly, and stand on its own, with the absolute minimum of extraneous cruft. If the article piques their interest, they may want to explore the site further, but this <em>must not</em> be at the expense of presenting the article on its own.</li>
<li>Regular readers who check out all or most posts via links on my Twitter feed. This group has similar needs to the first, but as they see the site more frequently will be even more sensitive to anything that gets in the way.</li>
<li>Subscribers to the RSS feed. It’s a full text feed, so I imagine most of these readers will rarely, if ever, actually visit the site itself. For this use model, the content needs to work on it own, rendered without custom styling.</li>
<li>People who’ve encountered me, online or offline, and want to check out the blog to get an idea of who I am. These readers will start at the front page, then poke around.</li>
<li>Myself. Anything that requires me to do extra work when writing posts will mean I write fewer, and I’m already bad enough in that score. Hence, the styling absolutely <em>must</em> be automatic, unless I want to achieve some special effect. When I just want to write plain text with the occasional image (by far the most typical case) I need to be able to just drop in my <a href="http://daringfireball.net/projects/markdown/">Markdown</a> and have it look good without additional tweaking.</li>
</ol>
<p>With those users in mind, I came up with the following requirements:</p>
<ul>
<li>Readable text. This affects all users other than RSS readers, and trumps everything else. To this end, I use fairly conservative fonts (currently Georgia for the body text, and as close to Helvetica as available for the headings) and colours (black on white, with a couple of shades of grey - all other colour is saved for the content), with plenty of white space.</li>
<li>Minimal page loading times. This is vital for the first group in particular. To this end:
<ul>
<li>No JavaScript (unless the post itself includes JavaScript, such as <a href="http://rob.rho.org.uk/2011/08/loot_or_fiddle.html">this one</a>).</li>
<li>Minimise non-content resources such as images and style sheets.</li>
<li>No web fonts for body text. This not only adds another resource to the page load, but unlike an image or style sheet it renders the text itself invisible until it arrives. Until someone works out a way around this, I’m steering clear of web fonts for sites with casual visitors.</li>
</ul>
</li>
<li>Responsive design. Users in the first two groups may well be using a phone or tablet, especially if they arrive via Twitter. The site must look as good, and more importantly be as readable, on a phone as it does on a desktop.</li>
<li>Simple HTML. This is vital for the third group, and also contributes to making my life easier as the writer. It also improves accessibility for the visually impaired and anyone using <a href="http://w3m.sourceforge.net/">W3M</a>.</li>
<li><em>No elements that do not directly serve these goals.</em></li>
</ul>
<p>The last point was perhaps the hardest to get my head round, but once I started to swing the axe I enjoyed it immensely. Gone is the sidebar. Gone are tags. Gone is the short bio. Gone are the pages of old posts.</p>
<p>Hang on. Pages of old posts? Aren’t they kind of important? Well, yes - one of the things I like about running my own site is that it’s a collection of writing going back more than a decade that isn’t going to disappear because somebody changes their business model. However, having the reader endlessly clicking on an “older posts” link doesn’t seem to be a good way to present them. Bearing in mind the types of user listed above, I’ve torn these down and replaced them.</p>
<p>As before, the first five posts are shown, in full, on the front page. However, at the bottom of this page, there is no longer a set of links to historical posts in five-post chunks (which change whenever a new post is added). Instead, there’s a link to a single <a href="/archive.html">archive</a> page that contains links to every old post in reverse-chronological (i.e., newest first) order.</p>
<p>The reasoning being this is straightforward; I don’t imagine many people are going to want to sit and read through page after page of my blog in order. If someone wants to read a sample of what I’ve written, the five most recent posts would seem to suffice. If they’re looking for a specific historical post, a unified archive page is far better than a paginated set of all the text. The new arrangement is simpler, more logical, and more effective.</p>
<p>I’ve not finished tinkering with the site by any means. I want to try algorithmically generated related posts, and add some kind of search facility to the archive. However, I don’t think I’ll be doing any major, site-wide design changes for a while. Instead, I’m going to try and focus on actually writing stuff.</p>
id:/2014/11/allies
Allies
2014-11-01T12:17:29+00:00
Rob Hague
rob@rho.org.uk
<blockquote>
<p>“From scientific reports to political speeches, few things are more appalling than listening to inept and specious arguments made by ones allies.”</p>
</blockquote>
<div class="quote-attribution">
Edward Tufte, <i>Beautiful Evidence</i>, p141
</div>
id:/2014/08/end_of_an_era
End of an era
2014-08-17T17:45:34+00:00
Rob Hague
rob@rho.org.uk
<p>The past couple of months have been a bit of a whirlwind for me, but now things have settled down I thought I’d write a little about it. What’s changed? In short, at the end of May, I left my job of almost a decade and started something new.</p>
<p>I started at <a href="http://en.m.wikipedia.org/wiki/Azuro">Azuro</a> immediately after finishing my PhD in 2004<sup id="fnref:overlap"><a href="#fn:overlap" class="footnote">1</a></sup>. I never intended to stay in the same job for a month shy of ten years; I thought I’d give it a go for a year or two, get some experience and understanding of the commercial world, and then move on. Needless to say, things didn’t quite work out like that.</p>
<p>The main reason for this was that Azuro continued to offer what I was looking for in a job. The key technology was interesting - I was mainly focused on the GUI, Tcl shell, and core data structures, but got my hands dirty in the optimisation code occasionally - and at a programming level it was first rate<sup id="fnref:cxx"><a href="#fn:cxx" class="footnote">2</a></sup>. More importantly, the people were great, and the working environment was relaxed enough to be enjoyable while still having the edge of a startup.</p>
<p>I also got to watch the company grow; I was joint-thirteenth employee (three of us started on the same day), and it steadily expanded both in Cambridge, and soon in the US. I grew with the company, starting as a newly-graduated developer with little experience of the business world, and taking on new responsibilities like interviewing, talking to customers, and eventually leading a team.</p>
<p>The acquisition of Azuro by <a href="http://www.cadence.com/">Cadence</a> in 2011 meant we were no longer a company of a few dozen, but part of a much bigger organisation of thousands. Moreover, much of what I worked on quickly became obsolete (after all, Cadence already had a GUI and Tcl shell). I gave the new situation a go, and indeed used the chance to <a href="http://rob.rho.org.uk/2013/04/a_programmer_no_more.html">try something different</a>, but at the start of this year I decided it was time to move on, and started looking for interesting opportunities.</p>
<p>After a relatively painless hunt I joined <a href="http://cydar.co.uk">Cydar</a>, a startup in a completely different field<sup id="fnref:field"><a href="#fn:field" class="footnote">3</a></sup> with an exciting product that will have a genuinely positive impact on people’s lives. As employee number six, I’m hoping that I’ll have the chance to shape the company and the way that we do things.</p>
<p>So far, it’s been hectic but exhilarating - getting infrastructure up and running, trips to London to see the system in action on real live patients, and breaking ground on a new codebase. At the moment, I have no doubt I made the right choice. Whether it’ll last ten years, who knows?</p>
<div class="images-from-mail">
<img src="/2014/08/end_of_an_era_image.jpeg" class="from-mail" />
</div>
<div class="footnotes">
<ol>
<li id="fn:overlap">
<p>Actually, I handed in my thesis a couple of weeks <em>after</em> starting at Azuro; timekeeping isn’t necessarily my strongest suit. <a href="#fnref:overlap" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:cxx">
<p>This is in large part why I have a high opinion of C++. Having worked so long with a clean, well-engineered C++ codebase written from scratch by a smart, disciplined team, I know it can be done well. <a href="#fnref:cxx" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:field">
<p>Medical imaging, as opposed to electronics design automation. <a href="#fnref:field" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2014/02/cdan
Comprehensive Data Archive Network
2014-02-27T21:36:00+00:00
Rob Hague
rob@rho.org.uk
<p>A <a href="http://youtu.be/_P9HqHVPeik">video</a> showcasing the <a href="http://www.wolfram.com/wolfram-language/">Wolfram Language</a> has been doing the rounds. It makes for an impressive demo, but not nearly impressive enough for me to commit to a proprietary programming language that only runs on a single vendor’s platform. Nonetheless, there are a lot of impressive features there.</p>
<p>A major one is the integration of curated data sets of real-world knowledge, meaning that unlike most programming environments the Wolfram Language comes with some knowledge of the world built in. The video includes an excellent demo of this, starting with a list of South American countries:</p>
<p><img src="/2014/02/wolfram_countries.png" alt="Getting a list of countries in the Wolfram Language" /></p>
<p>Wolfram then goes on to look up the flags of these countries, pull out the dominant colours, and so on. While these are all things that could be done in almost any language, you’d have to find the country list from somewhere, massage it into a useful format, and import it into your code. Having this kind of general data there at your fingertips removes a point of friction for many tasks, and seeing the demo got me thinking.</p>
<p>One of the big practical advances in programming that has occurred since I’ve been doing it seriously is the rise of the package manager. Starting with the venerable <a href="http://www.cpan.org">CPAN</a> for Perl, almost every language worth it’s salt has a more-or-less well developed package system - <a href="http://rubygems.org">Ruby Gems</a>, Python’s <a href="https://pypi.python.org/pypi/pip">PIP</a>, <a href="https://www.npmjs.org">npm</a> on Node.js, and so on. This made me wonder: why isn’t there such a thing for data?</p>
<p>Off the top of my head, what I’m after would have the following characteristics:</p>
<ul>
<li>Language-independent. If I need to tie an R list of countries to a Python list of flags, we’re pretty much back to square one.</li>
<li>Standardised format. XML would be an obvious choice, as would JSON. The actual details would be hidden behind language-specific implementations - as a programmer, you’d just see objects.</li>
<li>Distributed. You should be able to pick and choose data sources, in the same way you can choose <a href="https://wiki.debian.org/Apt">APT</a> repositories in Debian. There would be a few well-known, trusted sources to get you started, but you could add in more specialised collections.</li>
<li>You should be able to refer to data by natural, symbolic names (e.g. “Countries”, “Mountains”) or specific URIs (“http://example.com/geography/countries/v1.1”). Handling this sensibly in the context of the previous point is probably the hardest aspect.</li>
<li>Data should be cached, versioned, and there should be some kind of simple scheme to get aggregate data.</li>
</ul>
<p>With all this in place, I could just fire up my Python (or Ruby or Node) shell and do the following:</p>
<pre><code>>>> import cdan
>>> cdan.get("Countries", "Capitals")
[ ("Afghanistan", "Kabul"), ...]
</code></pre>
<p>These are just rough ideas, with a lot of hand-waving, but I think there’s something there. Moreover, I’d be amazed if I was the first person to think of this. Far more likely is that something similar already exists and I’ve just not come across it.</p>
<p>That’s where you come in, dear reader. If you know of something like this that I’ve missed, please let me know via <a href="https://twitter.com/robhague">Twitter</a> or <a href="mailto:rob@rho.org.uk">mail</a>, and I’ll update this post with any interesting links.</p>
<p><strong><em>Update:</em></strong> Thanks to <a href="https://twitter.com/semapher">@semapher</a> for pointing me at the <a href="okfn.org">Open Knowledge Foundation</a>. In particular, their <a href="http://ckan.org">CKAN</a> project looks a step in the right direction, but it’s not quite in the form described above. Worth keeping an eye on, though.</p>
id:/2014/01/1984
1984
2014-01-24T00:00:00+00:00
Rob Hague
rob@rho.org.uk
<center>
<a href="https://www.youtube.com/watch?v=2zfqw8nhUwA"><img src="/2014/01/apple1984.jpeg" /></a>
</center>
<blockquote>
<p>Today we celebrate the first glorious anniversary of the <a href="http://www-03.ibm.com/ibm/history/exhibits/pc25/pc25_birth.html">Information Purification Directives</a>. We have created for the first time in all history a <a href="http://windows.microsoft.com/en-us/windows/history#T1=era0">garden of pure ideology</a>, where each worker may bloom, secure from the pests of any <a href="http://www.digitalresearch.biz/CPM.HTM">contradictory true thoughts</a>. Our Unification of Thoughts is more powerful a weapon than any fleet or army on earth. We are one people, with one will, one resolve, one cause. <a href="http://www.folklore.org/StoryView.py?story=The_End_Of_An_Era.txt">Our enemies shall talk themselves to death</a> and we will <a href="http://www.nytimes.com/1996/12/30/business/apple-seeing-mixed-results-from-cloning.html?pagewanted=all&src=pm">bury them with their own confusion.</a></p>
<p>We shall prevail!</p>
<p><em>On January 24th, Apple will <a href="http://www.youtube.com/watch?v=RcRQWGFJ5YY">introduce Macintosh</a>. And you’ll see why 1984 won’t be like “1984”.</em></p>
</blockquote>
<div class="quote-attribution">
Apple Computer, Inc commercial, 1984
</div>
<center>
<a href="http://www.apple.com/mac-pro/"><img src="/2014/01/MacPro.jpg" /></a>
</center>
id:/2014/01/progress
Progress
2014-01-16T21:30:00+00:00
Rob Hague
rob@rho.org.uk
<p><img class="full-width" src="/2014/01/electron.jpg" /></p>
<p>Almost thirty years ago, in 1984, I got my first personal computer (shared, of course, with my brother) - an <a href="http://www.computinghistory.org.uk/det/181/Acorn-Electron/">Acorn Electron</a>. It had an 8-bit 6502 CPU running at 2MHz, 32K of RAM, much of which was used for the screen, and could display graphics in eight colours on an analogue TV, once you’d retuned a spare channel<sup id="fnref:channel"><a href="#fn:channel" class="footnote">1</a></sup>. It opened up the world of arcade clones (I grew up on <a href="http://www.computinghistory.org.uk/big/19604/Snapper/">Snapper</a> and <a href="http://www.computinghistory.org.uk/big/19610/Boxer/">Boxer</a>, and wouldn’t play <a href="http://www.arcade-museum.com/game_detail.php?game_id=10816">Pac-Man</a> and <a href="http://www.arcade-museum.com/game_detail.php?game_id=7610">Donkey Kong</a> until years later), <a href="http://www.computinghistory.org.uk/big/19600/Sphinx-Adventure/">text adventures</a>, and of course programming - first in <a href="http://www.computinghistory.org.uk/big/31049/Start-Programming-With-The-Electron/">BASIC</a>, then in <a href="http://rob.rho.org.uk/2012/03/aim_high.html">6502 assembler</a>. We loved it.</p>
<p><img class="full-width" src="/2014/01/amiga1200.jpg" /></p>
<p>Twenty years ago, I had an <a href="http://www.computinghistory.org.uk/det/7798/Commodore-Amiga-A1200/">Amiga 1200</a> (still shared). A 16-bit 68020 at 14hz. 3.5” floppy disks instead of cassette tapes. Hardware-accelerated graphics in hundreds of thousands of colors<sup id="fnref:HAM"><a href="#fn:HAM" class="footnote">2</a></sup>. Gorgeous, deep games like <a href="http://www.frontier.co.uk/games/older/frontier_elite_ii/">Frontier</a> and <a href="http://www.revolution.co.uk/games/sky/">Beneath A Steel Sky</a>. In every way, it made the Electron look like a relic of a bygone age (which, by that time, it was).</p>
<p><img class="full-width" src="/2014/01/ibook.jpg" /></p>
<p>Ten years ago, I was writing up my thesis on an <a href="http://lowendmac.com/ibooks/">Apple iBook</a>. 800MHz PowerPC G4, 512MB of RAM. Graphics that the Amiga could only dream of, and in sleek, portable package to boot. A capacious hard drive and wireless network connection. It was not only an incredibly powerful computer in its own right, it was part of a global network that was scarcely imaginable a decade before.</p>
<p><img class="full-width" src="/2014/01/macbookpro.jpg" /></p>
<p>Today, I’m writing this on a <a href="http://lowendmac.com/2011/15-macbook-pro-early-2011/">MacBook Pro</a>, which is… not all that different, to be honest. Somewhat faster, somewhat more storage, nicer screen, but it can’t do anything fundamentally different to the iBook I was using in 2004. Has progress stalled? Has the personal computer had its day?</p>
<p>It’s certainly true that there haven’t been any revolutions of magnitude of cassette to disk to mass storage, or orders-of-magnitude leaps in processing power or graphical ability. More importantly, the fundamental capabilities are the same. Ten years ago, I had a portable, Internet-connected computer with a powerful processor, plentiful on-board storage, a decent screen and a keyboard. Today, I have the same thing.</p>
<p><em>But.</em></p>
<p>I also have a smartphone, which allows me to check email, browse the web, and perform a plethora of other tasks wherever and whenever I want.</p>
<p>And I have an iPad that gives me a decent chunk of the laptop’s functionality in a lighter, more comfortable package, with a battery that lasts all day.</p>
<p>And I have a <a href="http://www.bigv.io">virtual server</a> that provides a permanent presence on the network, without relying on my flakey domestic electricity supply and data connection.</p>
<p>And I have a <a href="http://www.raspberrypi.org">Raspberry Pi</a>, which lets me tinker at the lowest level of both software and hardware (or hook it up to a TV and watch videos if I’m feeling less tinkery).</p>
<p>And I have a host of other more specialised devices that let me read books, watch films, and listen to music in ways that didn’t even exist a decade ago.</p>
<p>Some might argue that these aren’t PCs - indeed, some of them are often referred to as “Post-PC” devices - but I think that requires a definition of PC that’s unnecessarily restrictive. My smartphone, for example, is most certainly a computer, and both physically and functionally it’s the most personal one I’ve ever owned.</p>
<p>The personal computer isn’t dead. In fact, it’s doing better than ever. More people are using computers, in more ways and more often, than ever before. All that has changed is that the PC is no longer a single machine that did everything, closetted away in a spare room (or plugged into the TV via an RF modulator). Ever-improving technology, coupled with the interoperability provided by the Internet and the web, have made it easy to have many different devices, each tailored to specific needs.</p>
<p>In <a href="http://mitpress.mit.edu/books/invisible-computer">The Invisible Computer</a>, Donald Norman relates that, in the early twentieth century, a home might have a single electric motor, with numerous attachments to adapt it to specific tasks (sewing, grinding meat, churning butter). As motors became cheaper and more reliable, they proliferated, and each device (blender, vacuum cleaner, sewing machine) would have its own. At this point, users no longer see the motor, just the device and the task - I’m not using the motor, I’m cleaning the floor.</p>
<p>Norman suggests that computers will go through the same trajectory, and indeed this is what’s happening. He describes it as computers disappearing, and being replaced by “information appliances”. I’m not convinced by this distinction; to me, computers are simply becoming more prolific, more competent, and above all more personal. That’s progress.</p>
<hr />
<p><em>Many thanks to the <a href="http://www.computinghistory.org.uk/">The Centre for Computing History</a> for providing the Electron and Amiga images. They’ve just opened up a <a href="http://www.computinghistory.org.uk/pages/28568/Visiting/">museum</a> in Cambridge, with exhibits ranging from early punch card machines and minicomputers to the home micros of the 80s and beyond. Much of the vintage hardware is up and running, so you can see if you’re still any good at GoldenEye or try to remember some BASIC. Well worth a visit if you’re in the area.</em></p>
<div class="footnotes">
<ol>
<li id="fn:channel">
<p>A TV would typically have eight channels - mapped to physical buttons with associated tuning knobs - which left plenty spare as there were only four broadcast channels at the time. <a href="#fnref:channel" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:HAM">
<p>Well, 256 in sensible display modes - to get more, you needed to employ the CPU-intensive trick of Hold-and-Modify (HAM). <a href="#fnref:HAM" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2013/07/grdwd
Google Reader Death Watch Diary (Special Edition)
2013-07-02T20:54:00+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2013/07/grdwd.jpg" class="from-mail" />
</div>
<p>Originally on <a href="https://twitter.com/search?q=from%3A%40robhague%20%23grdwd">Twitter</a>. The author has now come to terms with the loss of Google Reader, and is giving <a href="https://feedwrangler.net">Feed Wrangler</a> a try.</p>
id:/2013/05/a_hostage_to_fortune
A Hostage To Fortune
2013-05-07T21:23:12Z
Rob Hague
rob@rho.org.uk
<p>A quick post to throw out a couple of predictions about the upcoming iOS 7. The first is pretty much received wisdom by this point. The second seems obvious to me, but I’ve not seen it written down elsewhere, and hence seems worth recording.</p>
<ol>
<li><em>iOS 7 will have some kind of inter-application communication mechanism along the lines of Android’s Intents or Windows 8 Contracts.</em> iOS is already behind in this respect, and as Android catches up (and arguably overtakes) in areas like performance and aesthetics this is a deficit Apple can ill afford.</li>
<li><em>The feature will be called “Services”.</em> This seems like a foregone conclusion to me, as it’s the name of a very similar facility that OS X has had since the it was NextStep. Using the name would allow Apple to (with some justification) spin it as being ported from their other OS as opposed to cribbed from their competitors, and they could even reuse some of the existing APIs.</li>
</ol>
<p>There. Now we just need to wait for WWDC to see if I’m right.</p>
<p><strong><em>Update</em></strong>: Maybe in iOS 8.</p>
id:/2013/05/google_is_not_your_friend
Google Is Not Your Friend
2013-05-06T20:47:00+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2013/05/googlecorp.png" class="half-width" />
</div>
<p>Google is not your friend. Apple is not your friend. Facebook is so not your friend that they didn’t even recognise that “friend” was already a thing, and assumed it was just a random syllable to which they could attach their own meaning. Microsoft, Amazon, Twitter, Samsung, Sony - none of them are your friends.</p>
<p>This isn’t meant as a slight against those corporations, or even a statement about those corporations in particular. Considering <em>any</em> corporation to be your friend is an absurd category error, like calling your coffee table a fine, upstanding citizen. However, in a recent survey, <a href="http://blogs.wsj.com/tech-europe/2013/05/01/in-google-we-trust/">17% of people in the UK thought that Google “had their best interests at heart”</a>. Amongst “young people” (16-24 year olds), the figure was higher; 28%.</p>
<p>Why is this worrying? In spite of the pernicious, pervasive and persistent legal fiction of corporate personhood, corporations are <em>not people</em>. They do not have morals, conscience, or loyalty. They’re made up of people, who may well be moral, conscientious and loyal, but the corporation is not those people. It acts solely in its own interests. <em>It cannot be trusted to do anything else.</em><sup id="fnref:book"><a href="#fn:book" class="footnote">1</a></sup></p>
<p>This may sound like I have a very negative view of corporations, but I don’t. Corporations are a phenomenally effective and successful device in many ways, and their benefits far outweigh the downsides. I simply try to keep their nature in mind when dealing with them, or trying to understand their actions. I no more blame a corporation for screwing over the little guy, or tying itself in knots to avoid paying tax, than I would blame a shark for eating somebody. That’s what sharks do.</p>
<p>The question is, how can we contain the negative aspects of corporate nature without losing the benefits? One approach is regulation. This has had success in some areas - for example, pollution, overt bribery, and embezzlement. However, in most areas, the trend has been towards less regulation, in no small part due to effective lobbying by corporate interests.</p>
<p>While there is some truth in the idea that excessive regulation strangles businesses, excessive <em>deregulation</em> gives the worst aspects of corporate psyche free reign, and leads to crises such as 2008’s credit crunch and the resultant global crash. Coming up with an effective regulatory regime that nevertheless allows corporations to give us the products and services we want us a difficult balancing act, but one that it is imperative to perform.</p>
<p>Corporate regulation is a pressing issue for governments, but what about
individuals? If corporations are venal, amoral predators, how can we deal with
them every day without being crushed? By bearing in mind their nature. You
cannot trust a corporation to act in your best interests, but you can
absolutely trust it to act in its own. Take the advice of <a href="http://www.imdb.com/title/tt0074119">Deep
Throat</a>, and follow the money.</p>
<p>Whatever your interaction with a corporation, the key question to ask is: what’s in it for them? Are they selling you something for a straight profit? Selling something as a loss leader to get you to buy more profitable items? Giving things away to entice you to look at advertising? Some combination of the three? The answer should inform your dealings with them.</p>
<p>To use the common Gillette analogy, Apple sells you razors (iPhones and iPads). Amazon gives you the razors (Kindles, which are sold more or less at cost) in the hope of selling you the blades (books and other media). Google gives you the razors (Android and cheap Nexus devices) <em>and</em> the blades (search, maps, email), then makes money by selling strangers tickets to watch you shave.</p>
<p>Each of these has its trade offs. Paying a fair price (including a profit margin) obviously has a high up-front cost, but is transparent and puts your relationship with the corporation on a solid footing. The loss-leader model reduces that up-front cost, but means that the corporation has a motivation to constantly hustle you in order to make good on its initial outlay. The most problematic model, from my point of view, is the advertising-driven one, because in that one <em>you are not the customer</em>.</p>
<p>The up-side of advertising-funded services - little or no cost to you - comes at a heavy price in terms of privacy. The better targeted an ad can be, the more attractive it is to the people who are actually paying corporation money - the advertisers. The corporation are motivated to use as much of what they know about you as they can to this end.</p>
<p>Does this mean that such services should be avoided? No, you just need to be aware of your relationship with the companies involved. I use Google, because they have the best search results, and Facebook because that’s where people are, as well as devices and software from Apple and Amazon, but in all cases I remember where their interests lie.</p>
<p>Corporations a many things, but they’re most definitely not your friends.</p>
<div class="footnotes">
<ol>
<li id="fn:book">
<p>The dangers of the notion of corporate personhood are explored in greater depth in the excellent book <a href="http://www.amazon.co.uk/Corporation-Pathological-Pursuit-Profit-Power/dp/1845291743/">The Corporation, by Joel Bakan</a>, the cover of which also serves as the inspiration for the illustration at the top of this post. <a href="#fnref:book" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2013/04/a_programmer_no_more
A Programmer No More
2013-04-07T19:46:10+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2013/04/a_programmer_no_more_image.jpeg" class="from-mail" />
</div>
<p>At the start of the year, I changed jobs<sup id="fnref:rosalind"><a href="#fn:rosalind" class="footnote">1</a></sup>. I’m still working for <a href="http://cadence.com">Cadence</a>, I’m still working on <a href="http://www.cadence.com/products/di/edi_system/pages/default.aspx">Encounter</a>, I’m still going the same office and seeing the same faces. However, I’m no longer a Member of Consulting Staff, but a Principal Product Engineer. I’d be the first to admit that neither title is particularly informative, but basically I’ve gone from writing code to writing specifications. In other words, for the first time in my professional life, I’m no longer a programmer.</p>
<p>Stating things in such stark terms is dramatic but a little misleading. Firstly, while I’m no longer writing C++ that gets turned into the shipping product, there is still a (small) Tcl coding aspect to my new role. In addition, I’ve written a lot of code over the last eight years, and I’ll be helping out the new maintainers of that code. These are peripheral aspects, though - the core of my new job is spent in Word, not Emacs.</p>
<p>At the moment, I don’t know if this will be a permanent change. Programming is something I love, and I’ve enjoyed doing it for a living. However, I’ve also been doing it for a long time, and an opportunity came up to try something new. Perhaps it will prove to be something I enjoy every bit as much; at the very least, it will give me a fresh perspective on the business I’m in, and allow me to pick up and improve some useful skills. Either way, I’m going to give it a good shot.</p>
<p>One final note is that, while I’m no longer writing code at work, and the title of this post notwithstanding, I still consider myself a programmer. Programming is a powerful tool I have at my fingertips, but more than that it’s a way of thinking, an approach to solving problems. I’ve been doing it since I was six, I’ve studied and taught it at one of the best university departments in the world, and it’s put food on the table for more than a decade. At this point I feel confident in saying that, whatever else I become, I’ll be a programmer forever.</p>
<div class="footnotes">
<ol>
<li id="fn:rosalind">
<p>Because I don’t have <a href="http://rob.rho.org.uk/2013/03/rosalind.html">anything else</a> keeping me busy at the moment. <a href="#fnref:rosalind" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2013/03/rosalind
Rosalind
2013-03-17T16:36:44+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2013/03/rosalind_photo.JPG" class="from-mail" />
</div>
<p>Announcing the arrival of Rosalind, born Thursday at 09:28pm, weighing 10lb 4oz. Mother and baby both wonderful.</p>
id:/2013/01/two_out_of_three_ain
Two Out Of Three Ain't Bad
2013-01-19T22:14:14+00:00
Rob Hague
rob@rho.org.uk
<p>Lenovo recently announced a <a href="http://bgr.com/2013/01/07/lenovo-ideacentre-horizon-284592/">27” touchscreen “table tablet”</a>. This has been the subject of much mirth on <a href="http://daringfireball.net/linked/2013/01/07/lenovo-27-inch-tablet">Daring Fireball</a> and similar places. While the device certainly has it’s problems, I think it’s a mistake to write it (and, by extension, the whole form factor) off entirely. To explain why, I’m first going to dig into the past.</p>
<p>In 1991, Mark Weiser, a computer scientist at the famous Xerox PARC laboratory, wrote a paper titled <a href="http://www.cse.nd.edu/~cpoellab/teaching/cse40463/weiser.pdf">The Computer for the 21st Century</a>. It contains a compelling and comprehensive vision of how computing would develop over the next couple of decades (the ones we’ve just had), and I plan to revisit these predictions in a future post. However, for today, I want to concentrate on just one small aspect; form factor. Weiser divides computing devices that users typically interact with into three broad categories (emphasis added):</p>
<blockquote>
<p>My colleagues and I have built what we call <strong>tabs</strong>, <strong>pads</strong> and <strong>boards</strong>: inch-scale machines that approximate active Post-It notes, foot-scale ones that behave something like a sheet of paper (or a book or a magazine), and yard-scale displays that are the equivalent of a blackboard or bulletin board.</p>
</blockquote>
<p>If we look at the computing devices of today, they fit into the first two categories very well<sup id="fnref:scope"><a href="#fn:scope" class="footnote">1</a></sup>. The increasingly commonplace smartphone falls squarely into the tab camp, and tablets such as the iPad are clearly (as the name suggests) pads. However, when we get to the third category - boards - examples are harder to find. Interactive whiteboards are fairly common in meeting rooms and classrooms, but they tend to be used for fairly limited, specialised tasks (when they’re not being relegated to merely expensive slide projectors or TVs). They have neither the pervasiveness or generality of our modern day tabs or pads.</p>
<p>So, was Weiser wrong? Is the third category redundant, or at least minor in comparison to the other two? Perhaps, but I don’t think so. I think the industry simply hasn’t cracked it yet. This is not for want of trying. For example, before Microsoft used the name “Surface” for its iPad/Ultrabook/<a href="http://www.worldofspectrum.org/">ZX Spectrum</a> competitor, it referred to a board-sized, horizontal computing device that covers exactly the use cases Weiser discusses. In particular, it was designed for sharing - the display is big enough for several people to comfortably see, and the interface handles not only multiple touch points for an individual user, but multi-touch interaction for <em>multiple</em> users simultaneously. Lenovo’s touch screen behemoth is another stab at the same idea.</p>
<p>The situation seems comparable to the development of tablet computing. For a decade, Microsoft and others<sup id="fnref:others"><a href="#fn:others" class="footnote">2</a></sup> tried time and again to produce a tablet for the mass market, and every attempt was a failure<sup id="fnref:mass"><a href="#fn:mass" class="footnote">3</a></sup>. The form factor took off with the launch of the iPad, which broke the deadlock by being so much better in areas that mattered (usability, battery life, price) that it offered real value over the status quo. I believe boards are due a similar breakthrough. It won’t necessarily come from Apple, but I’d be amazed if they’re not working on one. It would certainly be more interesting than a TV.</p>
<div class="footnotes">
<ol>
<li id="fn:scope">
<p>In terms of form factor, which is what I’m discussing here. In other respects, particularly personalisation, our current devices and use patterns are significantly different from Weiser’s ideas. <a href="#fnref:scope" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:others">
<p>Including Apple, if you consider the Newton to be a pad rather than a tab. <a href="#fnref:others" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:mass">
<p>Specifically, Tablet PCs prior to the iPad never made an impact in the mass market. They’ve been, and continue to be, reasonably successful in certain niche markets. <a href="#fnref:mass" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2012/11/near_field_of_dreams
Near Field Of Dreams
2012-11-07T20:52:56+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2012/11/near_field_of_dreams_image.jpeg" class="from-mail" />
</div>
<p>Apple’s <a href="http://www.apple.com/iphone/">iPhone 5</a> is a superb piece of hardware. Granted, it doesn’t have a 3D camera, a barometer, or a screen the size of a bread board, but design is about choice, and for me at least Apple have consistently come closer than anyone to making the right choices given the constraints of technology and cost. However, there is one area in which I think they’ve missed an opportunity; <a href="http://www.nfc-forum.org/">Near-Field Communication (NFC)</a>.</p>
<p>In case you’ve not heard of it, NFC is a technology that allows devices to wirelessly detect small physical tags when brought into close proximity to them, and securely exchange snippets of information. It’s been around for years, and many (most?) top-tier handsets from other manufacturers incorporate it. At present, it’s mostly used for contactless payment, an application that Apple quite correctly points out has yet to take off. However, there are far more interesting possibilities, in the area of <em>ubiquitous computing</em>.</p>
<p>Ubiquitous computing - the area in which I did my <a href="http://www.cl.cam.ac.uk/research/dtg/attarchive/spirit/">pre-doc work</a> and <a href="http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-651.pdf">PhD</a> - revolves around integrating computing activities into the real, physical world. In the last decade, it has moved out of the lab and into everyday life, mainly thanks to the meteoric rise of the smartphone. As well as functioning as increasingly powerful, connected handheld computers, these bristle with sensors: multiple cameras, GPS, accelerometers and gyroscopes. These allow modern smartphones to interact with their environment in ways impossible for desktops and laptops. This in turn has opened up a whole range of applications. NFC has the potential to open up a whole host more.</p>
<p>True, there are few existing applications that can take full advantage of NFC. However, I would say this to Apple. You are in a uniquely strong position; a market leading platform, and an army of skilled, motivated developers. Take a leap of faith, introduce NFC on a flagship iOS device, and a lack of apps will not be a problem for long. If you build it, they will come.</p>
id:/2012/08/apple_vs_samsung
Apple vs Samsung
2012-08-27T12:11:48+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2012/08/apple_vs_samsung_samsungapple.png" class="from-mail" />
</div>
<p>So, the <a href="http://www.theverge.com/2012/8/24/3254422/apple-samsung-trial-verdict/in/3030480">verdict is in</a> in the Apple vs Samsung case<sup id="fnref:verdict"><a href="#fn:verdict" class="footnote">1</a></sup>, and it’s pretty much all in Apple’s favour. Others have extensively covered both the verdict and the case itself, so I’m not going to reiterate the details. However, I thought it worthwhile to get down my own views on the result in a form that allows more nuance that <a href="https://twitter.com/robhague/status/239310845912440832">Twitter</a>. Broadly speaking, the verdict seems correct given the current (US) law<sup id="fnref:ianal"><a href="#fn:ianal" class="footnote">2</a></sup>, but raises the question of whether those are the laws we<sup id="fnref:usuk"><a href="#fn:usuk" class="footnote">3</a></sup> want.</p>
<p>Apple’s claims fall into two broad categories; design and trade dress issues,
and utility patents. In the first case, I’d say Apple has Samsung bang to
rights. Anybody with eyes can see that The Samsung models in question look
uncannily like the iPhone, more than they look like other Android phones or
previous Samsung models. A friend at work has the Samsung Galaxy Ace, and in
many respects it looks more like an iPhone 3G than my iPhone 4 does. A key
argument made by Samsung is that this is the only sensible way to design a
touchscreen phone, but that’s transparently nonsense. Consider, for example, the <a href="http://www.htc.com/uk/help/htc-hero/">HTC Hero</a>, a popular and well-regarded Android phone that could in no way be mistaken for an iPhone. Even Samsung’s more recent models, such as the <a href="http://www.htc.com/uk/help/htc-hero/">Galaxy S3</a>, differ enough that they’re unlikely to be considered copies (this is not, I imagine, a coincidence).</p>
<p>Some people have looked at the list of design elements claimed by Apple, and interpreted them as trying to claim a monopoly on general concepts like “black rectangles” and “coloured icons”. This would, of course, be ludicrous, but fortunately it isn’t even remotely true. The features aren’t consider in isolation; a design only infringes if it duplicates all or most of them, and as a result looks substantially like the original. You’re fine to use a black rectangle, or a grid of icons, or a dock, but if you (as Samsung did) use a black rectangle <em>and</em> a grid of icons <em>and</em> a dock <em>and</em> many of the other features listed in the patent, expect a call from Apple’s legal department.</p>
<p>So, assuming that Samsung did indeed substantially copy Apple’s designs (and packaging, and adverts, and retail stores), the next question is: should doing so be illegal? I’d argue that it should. While it seems unlikely that many people would actually buy a Samsung device in the mistake belief that it was an Apple one<sup id="fnref:bestbuy"><a href="#fn:bestbuy" class="footnote">4</a></sup>, aping the design is essentially giving out the message that the two products are interchangeable, nullifying the advantage of the considerable design effort that Apple has put in. If the law permits this, then how would a profit-minded company (which Apple undoubtedly is) justify spending any money on design? As someone who likes well-designed products, I think it’s entirely proper to prohibit this kind of wholesale mimicry.</p>
<p>This leads us neatly on to the utility patents. Without going in to details, I think the evidence presented established that the Apple patents were both valid and infringed. The more interesting question is, should the kind of features in question (such as the bounce-back behaviour when you scroll to the end of a list) be patentable at all? The important thing to note is that they’re fairly <em>simple</em>, in that once a competent software engineer had seen the feature in action they’d be able to reproduce it without too much difficulty, but not <em>obvious</em>, in that that same software engineer wouldn’t come up with that solution when presented with the same problem.</p>
<p>On the one hand, you could make the same argument about encouraging innovation that I made in relation to design patents above. Why would a company go to the effort and expense of developing the feature if their competitors can immediately duplicate it and rob them of any advantage? However, the case is more nuanced with utility patents.</p>
<p>Firstly, while there are plenty of constraints in visual and industrial design, it seems to me that the constraints on useful features are far more specific (for example, how do we indicate that the user has reached the end of the list?). This means that genuine independent discovery is more likely. To put it another way, it seems far more likely to me that two programmers, working independently, would come up with bounce-back scrolling, than two designers would come up with phones that look as similar as the iPhone 3G and the Galaxy Ace. However, patent law doesn’t allow for this; you can violate a patent without ever having seen it, or the thing to which it pertains. Secondly, useful inventions build on previous work more than designs. In restricting straight copying, you’re also preventing others from taking the idea and improving upon it.</p>
<p>On balance, it seems to me that the world gains more if we allow this kind incremental improvement, than if we allow a monopoly on such inventions. Inventors still have the advantage of being first to market, and they can still compete on the quality of their implementation; I’d say that this provides sufficient incentive to ensure that innovation doesn’t grind to a halt. Hence, while I think the jury came to the correct conclusion with regard to the law as it stands, I don’t agree that utility patents<sup id="fnref:software"><a href="#fn:software" class="footnote">5</a></sup> necessarily achieve their intended purpose of encouraging innovation.</p>
<p>Finally, a word about Samsung’s counterclaim, in particular the utility patents essential to 3G radio. Out of the whole verdict, the rejection of this claim is perhaps the most important part. While the patents themselves are (to the best of my knowledge) perfectly valid, there are two reasons that this claim should be - and was - rejected. Firstly, the functionality in question was implemented wholly within Intel baseband chips, and Intel had already licensed the patents for those chips. In other words, Samsung had already had one fee for these patents , and were trying to extract another.</p>
<p>Secondly, and more importantly, when these patents were incorporated into the 3G standard, Samsung agreed to license them on fair, reasonable and non-discriminatory (FRAND) terms. The terms which Samsung offered to Apple in no way met this definition. If Samsung had won this one, it would have set an extremely dangerous precedent; companies could get their patents into standards, wait for them to become widely adopted, and then go after everyone using the standard for exorbitant licence fees. This sort of bait-and-switch would allow patent holders to skim money from the technology on an ongoing basis without contributing anything further to it. This kind of perverse incentive would put a brake on genuine innovation, and I’m heartily glad that it has been rejected by the court.</p>
<p>Phew. That was longer than I originally intended. If you’ve any comments, or have spotted any factual errors, I’d love to <a href="mailto:rob@rho.org.uk">hear from you</a>.</p>
<div class="footnotes">
<ol>
<li id="fn:verdict">
<p>Surprisingly quickly, given the complexity if the case; there’s been <a href="http://www.groklaw.net/article.php?story=2012082510525390">some suggestion</a> that the jury might have rushed, and got some details wrong in the process. I don’t think it’s going out on a limb to suggest at this fact may feature in Samsung’s inevitable appeal. <a href="#fnref:verdict" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:ianal">
<p>I am not, it’s worth pointing out, a lawyer. <a href="#fnref:ianal" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:usuk">
<p>I say “we”, but of course I’m in the UK and therefore not under the jurisdiction of US law<sup id="fnref:extradite"><a href="#fn:extradite" class="footnote">6</a></sup>. However, IP laws by their nature are somewhat international, so examining them in one jurisdiction can be informative for others. <a href="#fnref:usuk" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:bestbuy">
<p>Apple made the claim that this was happening in substantial numbers with the iPad and the Galaxy 10.1, but their evidence wasn’t strong. <a href="#fnref:bestbuy" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:software">
<p>For software, in any case; there are other fields, such as <a href="#fnref:software" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:extradite">
<p>Unless I’m extradited on some flimsy pretext, but what are the odds of that? <a href="#fnref:extradite" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2012/08/good_news
Good News!
2012-08-21T20:59:13+00:00
Rob Hague
rob@rho.org.uk
<p>Twitter’s <a href="https://dev.twitter.com/blog/changes-coming-to-twitter-api">recent announcement</a> has many things with which to take issue, and one of them is the generic corporate language in which it was expressed. Anil Dash has had a go at <a href="http://dashes.com/anil/2012/08/what-twitters-api-announcement-could-have-said.html">rewriting it</a> in less staid language. Unfortunately, in my opinion at least, he’s made it far, far worse.</p>
<p>For one, it seems somewhat less honest than the original. The first sentence - “We have awesome news for Twitter developers” - reminds me of nothing more than the Simpson’s episode “Trash Of The Titans”:</p>
<div class="images-from-mail">
<img src="/2012/08/great_news_image.jpeg" class="from-mail" />
</div>
<blockquote>
<p>Good news, everyone! I got into a fight with the garbage men and they’re cutting off our service!</p>
</blockquote>
<p>The changes are <em>not</em> awesome. For some developers, they’re a moderate improvement. For many others, they make things a lot worse. Pretending that everything is awesome is disingenuous, transparently so.</p>
<p>What I dislike more than the obvious spin, though, is the inappropriately chummy tone. I don’t <em>want</em> corporations to talk to me like they’re my friend. They’re not, and they can’t be. That’s not meant as a slight against corporations - despite their many faults, they’re useful institutions. However, they’re <em>not human beings</em>, and can’t be dealt with as such.</p>
<p>Fortunately, when corporations try to sound like your buddy in official communication, they always fail. Every time. Totally. Utterly. Embarrassingly. As such, the technique never works as intended. It only leaves a bad taste in the mouth, and an impression of untrustworthy shilling in the memory.</p>
<p>So, how can corporations achieve an “authentic voice”, and “engage” with their customers/partners/advertising fodder? Short answer: they can’t. “Authentic” in this case means “human”, and, as mentioned, they’re not. The only way they can get close is to cede control. <em>Individuals</em> like <a href="http://www.tbray.org/ongoing/">Tim Bray</a> can promote a company’s interests whilst still sounding like human beings. However, even then, they need to walk a fine line, and make it clear that they have a vested interested when they do.</p>
<p>For official announcements, though, don’t try and give them the human touch by using words like “cool” and signing the CEO’s name at the bottom. Just stick to the dull, dry legalese and do us all a favour.</p>
<p><em>Image from <a href="https://frinkiac.com/">Frinkiac</a>. The Simpsons is owned by some division or other of <a href="http://www.21cf.com/">21st Century Fox</a></em></p>
id:/2012/08/twitter_ye_not
Twitter Ye Not?
2012-08-19T15:12:29+00:00
Rob Hague
rob@rho.org.uk
<div class="images-from-mail">
<img src="/2012/08/twitter_ye_not_image.jpeg" class="from-mail" />
</div>
<p>Anyone who’s been paying attention to Twitter (the company) will have been waiting for the other API shoe to drop, and <a href="https://dev.twitter.com/blog/changes-coming-to-twitter-api">yesterday it did</a>, landing squarely (but not unexpectedly) on developers using their API. In summary, Twitter are continuing their strategy of limiting the the types of application that can connect to the service, and the things that they can do once they’re there. Some of the changes are mundane book-keeping (requiring authentication for all API calls, shuffling around the rate limits), but others are more pervasive. Marco Arment, developer of <a href="http://instapaper.com">Instapaper</a>, summarises most the key points, and objections, <a href="http://www.marco.org/2012/08/16/twitter-api-changes">here</a>. He finishes with this:</p>
<blockquote>
<p>I sure as hell wouldn’t build a business on Twitter, and I don’t think I’ll even build any nontrivial features on it anymore.</p>
<p>And if I were in the Twitter-client business, I’d start working on another product.</p>
</blockquote>
<p>Given the changes in the API, this seems like an eminently reasonable position. When you depend a proprietary (as in, owned by a single company) API, you’re to an extent at their mercy. When their interests align with yours, everything is fine, and everybody wins. However, as soon as their interests diverge from yours, you’d better have a back-up plan. I plan to write more about that in the future, but today I want other questions.</p>
<p>Do I think this is a mistake on Twitter’s part? Perhaps; it seems that they’re sacrificing a lot of good will for short-term gain, and uncertain short-term gain at that. On the other hand, I don’t know the internal details of Twitter’s business, and I certainly can’t predict the future, so it’s entirely possible that this will turn out well for them, and provide enough of a revenue stream to justify their considerable funding.</p>
<p>Is this going to make Twitter a poorer service? Undoubtedly, yes. The wealth of clients, the simplicity of the core service, and the multitude of services built on top of that core, are all big reasons why I prefer Twitter to Facebook. Discouraging (and, eventually, banning) “traditional” third-party clients, limiting the services that can be built on the API, and cluttering up the stream with inline media (“Twitter Cards”) all work against these advantages.</p>
<p>Are you going to stop using Twitter? This is the big one, hence the title of this post. And, in the tradition of headlines ending in a question mark, I’d say the answer is no.</p>
<p>I joined Twitter fairly early, before anyone else I know, in order to follow interesting people (emphatically <em>not</em> celebrities, who hadn’t heard of it by this point) like <a href="https://twitter.com/gruber">@gruber</a> and <a href="https://twitter.com/timbray">@timbray</a>. Since then, many more people have joined, including many people I know personally. Nevertheless, the attraction of the network is the same. Interesting people, saying interesting things, are what makes a social network interesting (the meaning of “interesting” varies from person to person, of course). Hence, I’m going to stick with Twitter while it’s still the place where interesting things are happening, in spite of their recent attemprs to undermine the experience.</p>
<p>Does this mean I’ll never leave? No. If the conversations I want to be a part of (or, at least, eavesdrop on) move elsewhere, I’ll go with them. This is the real risk that Twitter is taking; not that their API changes will scare everyone off immediately, but that they will contribute to a soft but steady pressure pushing people away. Social networks don’t die with a bang of closed accounts, but with a whimper of irrelevance.</p>
id:/2012/08/rasppi_vnc_howto
RaspPi Vnc HowTo
2012-08-05T13:38:50+00:00
Rob Hague
rob@rho.org.uk
<p>In a <a href="http://rob.rho.org.uk/2011/10/vnc_on_the_raspberry.html">previous post</a>, I demoed a setup that used VNC and a <a href="http://www.raspberrypi.org">Raspberry Pi</a> to produce a cheap and easy networked display. Commenters on the corresponding YouTube video have asked for more details on exactly how to do this, so here’s a step-by-step guide.</p>
<h3 id="what-you-need">What You Need</h3>
<p>Firstly, a Raspberry Pi. I’m using a standard-issue Model B (the only model available for purchase at time of writing). The RaspPi needs to be connected to the network; I’m using the built-in Ethernet adaptor; a USB WiFi adaptor should also work, but this is beyond the scope of these instructions. You’ll also need a mouse and keyboard to get things set up, but these are <em>not</em> needed for normal operation. This means you can borrow them from another machine, as opposed to buying new ones. You’ll also need a display, obviously; I’m assuming you’re using the HDMI connection.</p>
<p>Secondly, you’ll need an OS. These instructions are based on <a href="http://www.raspbian.org">Raspian</a>; you could do the same thing on other Linux distros, but the details will vary a lot, especially in terms of installing packages. I’m using the 2012-07-15 Wheezy image, downloaded from <a href="http://www.raspberrypi.org/downloads">the Raspberry Pi downloads page</a> - a more recent version should also be fine. The image, plus the modifications below, will fit on a 2GB SD card. You’ll find links to details on how to write the OS image to the SD card, and general setup instructions if you need them, on the download page.</p>
<p>Note that these instructions result in a setup where the RaspPi works <em>only</em> as a VNC client; in particular, you won’t easily be able to use a normal desktop. Fortunately, you can go back to a more “normal” Raspberry Pi experience just by swapping in another SD card with a more usual OS image on it.</p>
<h3 id="installing-the-software">Installing the software</h3>
<p>On first boot, Raspbian presents you with a text menu containing the various options. Select the following ones (using the arrow keys and return/enter) and follow the instructions given:</p>
<ul>
<li><code>expand_rootfs</code> - this expands the file system so that it uses all of the available space on your SD card.</li>
<li><code>change_pass</code> - it’s essential to change the password on any system that’s going to be accessed over the network.</li>
<li><code>ssh</code> - enabling the ssh server isn’t essential, but it makes maintenance of the RaspPi easier once you’ve ditched the keyboard and mouse.</li>
<li><code>boot_behaviour</code> - Answer yes to the question “Should we boot straight to desktop?” - we’ll be replacing the desktop with the VNC viewer.</li>
</ul>
<p>When you’ve changed those options, press the escape key to exit the config menu; this will leave you at a command prompt.</p>
<p>Next, install the VNC viewer. Fortunately, Raspbian’s <a href="http://debian.org">Debian</a> heritage makes this part really easy. There’s a package for <a href="http://www.tightvnc.com">TightVNC</a>, the VNC viewer we’re going to use, so installing it is just a matter of running the following command:</p>
<pre><code>sudo apt-get install xtightvncviewer
</code></pre>
<p><code>apt-get</code> will present you with a list of packages that need to be installed, and ask you if you want to continue. Type y, and it will install TightVNC and all of its dependencies.</p>
<h3 id="configuration">Configuration</h3>
<p>In order to have the listening VNC viewer come up when the machine boots, we’re going to override the default behaviour of the desktop session. This is done by creating a file called <code>.xsession</code> in the default user’s home directory (<code>/home/pi</code>; this will be the current directory). If that file exists, it’s run (as a shell script) in place of the normal desktop session. The contents should be:</p>
<pre><code># Determine the IP address of the "eth0" network interface
export IP=`ip addr show eth0 | grep -oP '(?<=inet )(\d+\.){3}\d+'`
# Display the IP address, so people know where to connect
wish <<END &
pack [label .ip -text "$IP:5500" -font "Helvetica 72" -fg grey -bg black]
END
# Listen for VNC connections
xvncviewer -listen -fullscreen
</code></pre>
<p>(If you’re unsure as to how to create text files, try running <code>nano .xsession</code> editor on the command line.)</p>
<p>There’s quite a bit going on here. The last line is the easiest; this just runs the VNC viewer so that it listens for incoming connections, and uses full screen mode. The rest of the script finds the IP address that the RaspPi has been allocated, and displays a large banner showing the address and port that you need to use to connect VNC servers (for example, “192.168.0.12:5500”). It does this using <code>wish</code>, the windowing shell for Tcl/TK<sup id="fnref:tk"><a href="#fn:tk" class="footnote">1</a></sup>.</p>
<p>Finally, we need to disable the screensaver and monitor power saving on the X server. To do this, you need to edit the LightDM config file<sup id="fnref:dpms"><a href="#fn:dpms" class="footnote">2</a></sup>. Run <code>sudo nano /etc/lightdm/lightdm.conf</code>, find the lines:</p>
<pre><code>[SeatDefaults]
#xserver-command=X
</code></pre>
<p>and change them to read:</p>
<pre><code>[SeatDefaults]
xserver-command=X -s 0 -dpms
</code></pre>
<p>That’s it; you can now reboot (<code>sudo reboot</code> from the command line, or just cut the power). You should see the startup messages scroll past, then a little while later the screen will clear and you’ll see the banner with the IP address and port.</p>
<h3 id="connecting">Connecting</h3>
<p>Exactly how you do this depends on the platform from which you want to connect. If you already use a VNC server, it may well have some way to make reverse connections; check the documentation. If not, here’s how to get started:</p>
<ul>
<li>
<p><strong>Windows</strong>: Download and install <a href="http://www.realvnc.com/download/open/">RealVNC Open</a>, and run the server. A small icon will appear in the system tray (at the right hand end of the taskbar). Right-click on this, select the “Add New Client” menu, and enter the IP address and port shown.</p>
</li>
<li>
<p><strong>Mac OS X</strong>: There is a VNC server built in to OS X, but I’ve yet to find a way of making it perform reverse connections. As an alternative, download <a href="http://www.testplant.com/support/downloads/vine/">Vine VNC</a> and put it in your Applications folder. Run it, select Reverse Connection from the Server menu, and enter the IP address (the default port is correct).</p>
</li>
<li>
<p><strong>Linux</strong>: Install a VNC server via your package manager, then from within the VNC server (i.e., with $DISPLAY set to its display number) run <code>vncconfig -connect <host>:<port></code>.</p>
</li>
</ul>
<h3 id="odds--ends">Odds & Ends</h3>
<p>Firstly, a word about security, The setup, as described, doesn’t use any encryption for the VNC connection, so I’d only use this on a local network. In most cases (including a typical home router, and the majority of office networks), you need to take specific steps to expose a machine to the wider internet, so you almost certainly don’t need to worry about this. If you’re doing this at work, though, be sure to check with your network administrator first.</p>
<p>One thing you’ll notice is that the viewer doesn’t scale the desktop it’s displaying. If the desktop you connect is a lower resolution than the RaspPi display, it’ll be shown surrounded by a black border. If it’s higher resolution, you’ll only be able to see the top-left (unless you use the RaspPi’s mouse to pan around). For best results, make sure that the resolutions match<sup id="fnref:scaling"><a href="#fn:scaling" class="footnote">3</a></sup>.</p>
<p>Performance will vary according to the network, but I’ve found it reasonable for general use. It’s not really up to video, but it should be fine for presentations.</p>
<p>Hopefully, this setup will prove useful; give it a go, and <a href="mailto:rob@rho.org.uk">let me know</a>.</p>
<p><strong><em>Update</em></strong>: The above description originally used the port number 5550, whereas the default listening port is actually 5500. Thanks to Sergey Dobrodey for spotting this.</p>
<p><strong><em>Update 2</em></strong>: <a href="http://www.magdesign.ch/">Marc-André Gasser</a> has spotted that the screen may blank after about 10 minutes; I think that this is due to a change in the default setup in newer Raspbian releases, but I may have simply missed it due to a quirk in my initial setup. In any case, Marc has found a solution. Add the following lines to <code>/etc/X11/xinit/xinitrc</code>, after the first line:</p>
<pre><code>xset s off
xset -dpms
xset s noblank
</code></pre>
<p>This isn’t specific to the VNC server; it’s likely to be useful for any application that’s used as a permanent display. Thanks, Marc!</p>
<div class="footnotes">
<ol>
<li id="fn:tk">
<p>I’d not recommend this as a way to create user interfaces in general. However, it’s convenient for one-liners like this, and it has the advantage of being installed alongside X Windows in most Linux distributions. <a href="#fnref:tk" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:dpms">
<p>Thanks to Raspberry Pi forum member “wpc” for documenting this <a href="http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=11815">here</a>. <a href="#fnref:dpms" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:scaling">
<p>Several VNC viewers provide desktop scaling, which would be ideal. However, I haven’t yet been able to get any of them working from <code>.xsession</code> in listen mode. If and when I do, I’ll post an update. <a href="#fnref:scaling" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2012/06/tidymail
TidyMail
2012-06-28T21:08:12+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://en.wikipedia.org/wiki/Posting_style#Top-posting">Top-posting</a></p>
<p>The iOS Mail app is great in many ways, but it unfortunately leads you to commit one of the cardinal sins of emailing:</p>
<p>Specifically, when you reply to a message, Mail places the insertion point and signature above the quoted text of the message to which you’re replying. This leads you to write your reply before everything, which as all right-thinking people know is beyond the pale.</p>
<p>In order to solve this, I’ve come up with a script called <em>TidyMail</em>, which can be downloaded from the <a href="http://github.com/robhague/tidymail">GitHub project page</a>. This adds a signature where you want it, and performs other tidying (such as remove the signatures from quoted messages) as it goes. To use it, you turn off the signature in Mail, and instead insert the standard signature leader (a line containing only “–”) where you want the signature to be inserted. Everything below this line will be deleted, which is useful if you only want to quote the start of a message.</p>
<p>There is one remaining question; how do you invoke the script to tidy up outgoing messages? iOS is notably (perhaps notoriously) stringent in what it allows to run on the device, so invoking the script on the client is not an option. Fortunately, I run my own mail server, which gives me a way in. There are various possibilities, but I’ve settled on configuring my MTA, <a href="http://www.exim.org/">Exim</a>, to run the script as part of its remote SMTP transport. This is easy to do by adding the following line to the “remote_smtp” section:</p>
<pre><code>transport_filter = /etc/exim4/tidymail.py
</code></pre>
<p>This works reasonably well, but has the drawback that it won’t apply the filter to mail delivered locally. This is fine for my use, as I’m the only one using the server, but your mileage may vary. <em>I imagine there are better ways to hook the script into Exim, but I’m not all that familiar with the package. If you have any suggestions, I’d be <a href="mailto:rob@rho.org.uk">delighted to hear from you</a></em></p>
<p>There we go; it’s a slightly convoluted system, but it’s been working well for me for a couple of years. If you use iOS or a similar mail client, have your own server, and dislike top-posting, then you might find it useful too.</p>
id:/2012/05/dunce_monkeyboy
Dunce, Monkeyboy
2012-05-29T20:14:32+00:00
Rob Hague
rob@rho.org.uk
<p>A little while ago, I wrote <a href="http://rob.rho.org.uk/2011/11/of_gardens.html">a piece about Apple, the App Stores, and the restrictions they place on developers</a>. The main question was; would users be able to install software outside the official App Store? I suggested that Apple are unlikely to impose this restriction on <a href="http://www.apple.com/macosx/">OS X</a>, for two reasons. Firstly, it would put OS X at a significant disadvantage compared to other desktop operating systems (most significantly, <a href="http://windows.microsoft.com">Windows</a>), and secondly, they already have a very successful App Store only platform, namely <a href="http://www.apple.com/ios">iOS</a>. However, another interesting development in this area has cropped up, and from an unexpected direction.</p>
<p>It has <a href="http://arstechnica.com/information-technology/2012/05/no-cost-desktop-software-development-is-dead-on-windows-8">emerged</a> that the upcoming new version of Microsoft’s free development tools, <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express">Visual Studio Express</a>, will only support the development of Metro apps. There are two things at are significant about Metro in this context. Firstly, it only has access to a limited subset of the Windows API, making it in some ways closer to iOS than OS X. Secondly, and more significantly, Metro apps can only be installed from the Windows App Store<sup id="fnref:enterprise"><a href="#fn:enterprise" class="footnote">1</a></sup>, which requires (as with Apple’s stores) a paid developer account.</p>
<p>This is an interesting move on Microsoft’s part, and (as the title may suggest), I don’t think it’s a smart one. Granted, the strategy has worked well for Apple on iOS, but that was starting from a clean slate. Microsoft’s situation is very different; they’re trying to move their existing platform from an open to a curated model (while simultaneously moving to a pared down UI). If they want users to make the switch, they’ll need a healthy software ecosystem on the new platform, which in turn means they need to court developers.</p>
<p>As a company, Microsoft has long had a reputation for encouraging and supporting developers (their CEO is noted for his <a href="http://video.google.com/videoplay?docid=1274983729713522403">quiet enthusiasm</a> on the matter). However, this move seems to be something of a slap in the face, at the very time they’re asking developers to stick their necks out and commit to a new, untested platform. This won’t affect the big guys much - they’re already paying to be in the developer program, and for the Professional versions of Visual Studio - but it hits right at the heart of the small-scale developers that are such a large part of the success of iOS. It’s had to see it as anything other than a colossal own goal.</p>
<p>However, I don’t use Windows at home, and at work it’s mainly there to run SSH and VNC. I don’t really have any stake in the success or failure of the platform. The question I’m interested in is: what does this mean for the Mac App Store? Will Microsoft’s move embolden Apple to lock down OS X and ban third-party installation<sup id="fnref:gatekeeper"><a href="#fn:gatekeeper" class="footnote">2</a></sup>?</p>
<p>I think the answer is no. My original reasoning stands; given that they’re very definitely keeping iOS and OS X as distinct systems (albeit with a fair degree of cross-pollination in terms of features and UI), there’s no need to impose the same limits on each. In this regard, they can have their cake and eat it. It may even further spur their growth in the PC market, if Microsoft press ahead with their developer-hostile policy. However, if I’m wrong, and the move succeeds in fostering Metro growth without alienating the Windows developer community, Apple might be encouraged to follow suit. We’ve certainly not seen the last move in this game.</p>
<p><strong><em>Update:</em></strong> It seems that Microsoft has <a href="http://blogs.msdn.com/b/visualstudio/archive/2012/06/08/visual-studio-express-2012-for-windows-desktop.aspx">relented</a>, and there will be a version of Visual Studio Express that targets non-Metro applications. This is a very sensible move, and shows a commendably responsive attitiude on Microsoft’s part. It’s easy to talk the developer-relations talk, but they appear to be genuinely ealking the walk as well, at least in this instance.</p>
<div class="footnotes">
<ol>
<li id="fn:enterprise">
<p>For consumers, at least; enterprise versions of Windows 8 permit side loading of apps. However, this is intended for internal or bespoke apps, or those sold in large business-to-business contracts, and in any case isn’t an option on the consumer and small business versions of Windows. <a href="#fnref:enterprise" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:gatekeeper">
<p>Note that I don’t believe that the <a href="http://www.apple.com/macosx/mountain-lion/security.html">Gatekeeper</a> feature in Mountain Lion is a move in this direction. For one thing, the user can opt out. More importantly, it represents Apple making a conscious effort to extend some of the security benefits of the curated model to third parties. If they were planning to funnel everyone towards the App Store, it would have made more sense to do nothing. <a href="#fnref:gatekeeper" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2012/03/aim_high
Aim High
2012-03-05T21:35:46+00:00
Rob Hague
rob@rho.org.uk
<p>In the light of the <a href="http://www.raspberrypi.org">Raspberry Pi</a> project’s attempt to reintroduce kids to the idea that a computer is something you program, I thought I’d share with you something from my own childhood. Specifically, a book:</p>
<div class="images-from-mail">
<img src="/2012/03/aim_high_image.jpeg" class="from-mail" />
</div>
<p>Unlike more modern children’s books, it doesn’t state a target age, but I believe it’s aimed at junior school children<sup id="fnref:age"><a href="#fn:age" class="footnote">1</a></sup>. As you can see, it’s illustrated by with lots of little cartoon robots acting out the various operations that occur in a computer. And it teaches you machine code.</p>
<p>I can imagine some readers reaching for their pedantic hats. “This man
is a fool,” they’re thinking, “who clearly doesn’t know what ‘machine code’
is. He obviously means ‘assembly language’.”</p>
<p>Au contraire<sup id="fnref:pretentious"><a href="#fn:pretentious" class="footnote">2</a></sup>.</p>
<p>You see, in the mid-eighties, computers weren’t quite so impressively specced
as they are today. Unless you had the Rolls Royce of home computers, the <a href="http://en.wikipedia.org/wiki/BBC_Micro">BBC
Micro</a><sup id="fnref:electron"><a href="#fn:electron" class="footnote">3</a></sup>, you wouldn’t have
had the luxury of an <em>assembler</em>. You had a BASIC interpreter, and you
considered yourself lucky. The book provides a listing for you to type in.
This isn’t an assembler, of course: it’s just a program that allows you to
type in bytes, in hex, to be poked into consecutive locations in memory. Once
you’ve learnt hex on page 11, of course.</p>
<p>In 48 uncrowded, extensively illustrated pages, it goes from explaining things like binary and the difference between RAM and ROM, through addressing modes and
registers, to writing real (if simple) machine code programs. <em>In two
different architectures, on half a dozen mutually incompatible computers.</em>
This is an impressive scope for such a slim book, made even more ambitious
when you consider it’s aimed at children.</p>
<p>The important message is that this level of depth doesn’t scare kids off; instead, they lap it up (some of them, at least). By all means provide simpler material for those without the time, inclination or ability to tackle the complicated stuff. Just make sure you provide something challenging to keep the interest of those who can.</p>
<div class="footnotes">
<ol>
<li id="fn:age">
<p>I think I picked up this copy at a library sale when I was ten or eleven, but I could be out a year or two either side. <a href="#fnref:age" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:pretentious">
<p>A fool, no. Pretentious, possibly. <a href="#fnref:pretentious" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:electron">
<p>Or it’s younger sibling, the <a href="http://en.wikipedia.org/wiki/Acorn_Electron">Acorn Electron</a>, which was a cheaper, cut-down version for those who weren’t rich enough to afford a BBC Micro, but weren’t cool enough to own a Spectrum. Guess what I had. (Actually, it was a fantastic machine that managed to get the vast majority of the features of the Beeb into a more affordable package for the home market.) <a href="#fnref:electron" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2012/02/raspberry_pi_launche
Raspberry Pi Launched
2012-02-29T14:54:39+00:00
Rob Hague
rob@rho.org.uk
<p>Today saw the official launch of the <a href="http://raspberrypi.org/">Raspberry Pi</a> low-cost computer. Although there have been a couple of hiccups due to the distributors not expecting the phenomenal levels of demand<sup id="fnref:idiots"><a href="#fn:idiots" class="footnote">1</a></sup>, it’s still a big day for the project, and a testament to the months and years of the hard (and unpaid) work of everyone at the Raspberry Pi Foundation<sup id="fnref:foundation"><a href="#fn:foundation" class="footnote">2</a></sup>.</p>
<p>However, it’s worth remembering that the project is not about cheap computers for hobbyists (although that’s a useful side-effect); it’s about giving kids the tools with which to learn to program. To that end, here’s a video from the BBC’s Rory Cellan-Jones (who has also written a <a href="http://www.bbc.co.uk/news/technology-17190918">great article about the launch</a>):</p>
<center>
<iframe width="400" height="225" src="http://www.youtube.com/embed/m3h6Boe9n3M" frameborder="0" allowfullscreen="1">
</iframe>
</center>
<div class="footnotes">
<ol>
<li id="fn:idiots">
<p>Personally, I don’t think these teething troubles are a big deal, given the level of interest in such a small organisation. What <em>has</em> irked me somewhat is the level of vitriol directed at the Foundation. This has ranged from the merely thoughtless to the utterly vile, with occasional racist and homophobic language tossed in for good measure. It smacks of both a lack of respect and a sense of entitlement that would be comical of they weren’t so deeply unpleasant. <a href="http://twitter.com/raspberry_pi">Liz</a> has been handling this with more patience and good grace than I think I would have been able to muster in the circumstances. <a href="#fnref:idiots" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:foundation">
<p>I don’t have any formal connection to the Foundation myself; I’m just an enthusiastic supporter. <a href="#fnref:foundation" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2011/11/of_gardens
Of Gardens and Sandboxes
2011-11-04T18:34:00+00:00
Rob Hague
rob@rho.org.uk
<p>Yesterday, <a href="http://twitter.com/matthewbloch">Matthew Bloch</a>, MD of <a href="http://www.bytemark.co.uk/">Bytemark Hosting</a><sup id="fnref:bytemark"><a href="#fn:bytemark" class="footnote">1</a></sup>, <a href="http://twitter.com/matthewbloch/status/132062362327977985">tweeted</a>:</p>
<blockquote>
<p>next stop: no installations on your own computer from outside the walled garden. A free desktop is much more important.</p>
</blockquote>
<p>He was referring to <a href="http://www.tuaw.com/2011/11/02/apple-to-require-sandboxing-in-mac-app-store-apps-as-of-march-20/">Apple’s announcement</a> that they’ll soon be requiring all apps sold via the <a href="http://www.apple.com/mac/app-store/">Mac App Store</a> to implement <a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/9">sandboxing</a>. Broadly speaking, this strictly limits what an individual app could do once installed - for example, it can’t access files outside it’s own area without going through the standard save and restore dialogs. Mac OS X’s younger sibling, <a href="http://www.apple.com/ios/">iOS</a>, has had even stricter sandboxing in place since it first allowed third-party applications. It also has another property, namely that the App Store is the <em>only</em> way to install applications under iOS. Matthew’s worry is that Apple’s adoption of one iOS policy (sandboxing) on the Mac suggests that they’re likely to adopt another, and forbid installation of non-App Store apps.</p>
<p>Personally, I think the two are separate issues. Sandboxing is a sensible policy in its own right. It’s a key component of the success of the iOS App Store - the fact that you don’t need to worry about the developer’s incompetence or malice before downloading that 69p impulse buy. Relatively few applications actually need to do things that sandboxing prevents, like alter system settings. For the rest, sandboxing allows the ease-of-use and convenience that iOS users have grown used to.</p>
<p>It’s not like sandboxing is even a new idea. Not only did Java applets (remember those?) give it a go in the late 90s, but Mac OS X’s own version has a lineage stretching back to <a href="http://en.wikipedia.org/wiki/Chroot">chroot</a> jails, introduced to Unix in 1979. The idea that every program a user runs has to be able to do anything that that user is not an absolute, and there’s nothing inherently wrong with a user choosing to restrict the facilities available to specific programs. All modern systems do this to an extent, by restricting root privileges to programs explicitly granted them. Sandboxing could be thought of as simply a more fine-grained version of the same idea.</p>
<p>Restricting installation to only the official App Store, on the other hand, represents a significant break from the current status quo. At present, if I want to install a random piece of software from some shady corner of the internet on my Mac, I am free to do so, and live with the consequences. Channelling all installations through the App Store (and Apple’s somewhat mercurial review process) doesn’t give me this option. For many users, who just want to get work done, and don’t want to worry about maintaining their computer, this might be a reasonable trade-off, but for others (such as myself), it is not. However, it’s important to remember that this isn’t an all-or-nothing distinction. For example, I’d want <a href="http://itunes.apple.com/gb/app/galcon-fusion/id419955867?mt=12">Galcon Fusion</a> to be sandboxed, but still build <a href="http://www.gnu.org/s/emacs/">Emacs</a> myself. If I lose the option of installing arbitrary software, though, the range of things I could do on Mac OS as opposed to another system would be severely curtailed. I don’t think there’s much risk of this happening, for two reasons.</p>
<p>Firstly, the people that such a move would alienate - developers, designers, and those who see themselves as power users - are the sort of people who are willing to pay a premium for high-end hardware. Whilst not as numerous as general consumers, this group must still be a significant source of profit for Apple, and so they’d need a good reason to abandon them. Furthermore, many of these users are the very people who keep the App Store stocked with high-quality products. Driving them away would, in my opinion, be a significant own goal.</p>
<p>Secondly, and more importantly, why do they need to? Apple already sell a walled-garden OS for people who want it, and the devices that use it sell pretty much as fast as Apple can manufacture them. They don’t need to sneak a walled garden in via the back door, because they’ve already kicked down the front. My expectation is that Mac OS will be increasingly seen as a “Pro” platform, and iOS as the way for general consumers. This is arguably no bad thing, as it allows people to use computers for what they actually want to do without having to worry about servicing and maintaining them (I touched on this in a <a href="http://rob.rho.org.uk/2011/06/give-me-inconvenience.html">previous post</a>). As John Gruber <a href="http://daringfireball.net/2011/06/windows_8_fundamentally_flawed">points out</a> the Mac/iOS division allows Apple to cater for those of us who want the flexibility offered by a general purpose system, whilst not burdening everyone with the attendant complexity. And if at some point they choose to stop catering for us, there are plenty of others who will.</p>
<p><strong><em>Update:</em></strong> Mathew has responded <a href="http://matthewblo.ch/53/">on his blog</a>. He makes some interesting points. Most importantly, he points out that Apple already charges developers $99 per year. Root access could be restricted to these developers (and anyone who paid the fee could join them), whilst not providing it for regular users. The latter would effectively be handing over both the hassle and the control of auditing the software on their machine to Apple, a bargain that many people would consider reasonable (and one that most people already make with, for example, their email).</p>
<p>The fallout for developers would be that they could no longer rely on end users being able to install software themselves, and therefore everything would have to go through the App Store, with Apple taking their 30% cut. For many small developers, this again is a good bargain - the simplicity of the App Store, plus the trust user’s have in it, are worth Apple’s cut (and the small but non-zero risk of running into problems with the review process). However, as Matthew points out, big developers such as Adobe and Microsoft are less likely to be happy, and could go as far as abandoning the platform.</p>
<p>That’s a key reason I don’t think that Apple are likely to go down this route. Over the last decade, Mac OS X has gone from having the scantest selection of third-party software to having arguably the best. Part of this has come from the kinds of small commercial developers that are a natural fit to the App Store, but it also comes from big-name applications like <a href="http://office.microsoft.com/">Office</a> and <a href="http://www.adobe.com/products/creativesuite.html">Creative Suite</a>. Losing these applications would be a significant blow to the platform, and I’d be surprised if the additional App Store revenue would make up for it. Indeed, it’s not at all clear that there would <em>be</em> any additional revenue, given that the change would result in users leaving a Mac OS that no longer met their needs.</p>
<p>More importantly, the end result of this game makes no sense. Why would Apple turn Mac OS into another iOS, when they already have iOS? If people are choosing between a hassle-free/locked-down device (depending on your perspective) and a more flexible/fragile one, why would Apple not want a product on both sides? The only reason would be that one side doesn’t make enough money to justify pursuing. I don’t think that’s the case, but if and when it is, I wouldn’t expect them to turn Mac OS into iOS. They’ll just stop selling it.</p>
<p>In conclusion, I don’t expect Apple to remove the ability to install arbitrary applications from Mac OS in the foreseeable future, not through any moral compunction or fear, but simply because I don’t think it would increase their profits in the long term. I could be wrong about this; Apple clearly know their business better than I do. We’ll see.</p>
<div class="footnotes">
<ol>
<li id="fn:bytemark">
<p>Who are, as I believe I’ve mentioned before, highly recommended if you’re in the market for hosting. <a href="#fnref:bytemark" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2011/11/ritchie_and_mccarthy
Ritchie and McCarthy
2011-11-01T21:18:41+00:00
Rob Hague
rob@rho.org.uk
<p>In the past two weeks, there has - justifiably - been a lot of coverage of the death of <a href="http://www.apple.com/stevejobs/">Steve Jobs</a>. However, two other computing pioneers have also died during that time. <a href="http://www.cs.bell-labs.com/who/dmr/index.html">Dennis Ritchie</a> and <a href="http://www-formal.stanford.edu/jmc/">John McCarthy</a> were not the household names in the same way, but their contribution was arguably more fundamental. Whilst Job’s work made modern computing accessible, Ritchie’s and McCarthy’s made it possible. They created, respectively, <a href="http://cm.bell-labs.com/cm/cs/cbook/">C</a> and <a href="http://www.lisp.org/">Lisp</a>, which are essentially the Greek and Latin of programming<sup id="fnref:church"><a href="#fn:church" class="footnote">1</a></sup>.</p>
<p>In a field which values the new over the old to an almost pathological extent, these two languages have lasted for decades. If someone embarking on a new software project tomorrow using, say, PL/I, it would seem like an obtuse exercise in nostalgia. Use C, on the other hand, and nobody would raise an eyebrow. Lisp’s influence is less obvious, but arguably more profound. Whilst you can still use it in unadulterated form, relatively few people do. However, the popular dynamic languages that all the cool kids are using - <a href="http://www.python.org">Python</a>, <a href="http://ruby-lang.org">Ruby</a>, <a href="http://javascript.crockford.com/">JavaScript</a> - are essentially Lisp in new clothes<sup id="fnref:slw"><a href="#fn:slw" class="footnote">2</a></sup>.</p>
<p>The origins of the two languages are instructively different. C was created to solve an immediate practical problem - writing Unix in a portable way. Moreover, it was targeting relatively modest hardware, the PDP-11<sup id="fnref:pdp"><a href="#fn:pdp" class="footnote">3</a></sup>. It therefore lacks some of the bells and whistles that, even in 1973, “real” languages were thought to need. However, instead of limiting its scope, this resulted in an elegant simplicity that has seen it adapt to four decades of hardware improvements whilst many “real” languages have fallen by the wayside.</p>
<p>In contrast, Lisp wasn’t intended to be a language to solve a particular practical problem. It wasn’t intended to be a programming language at all. McCarthy had written a paper outlining a theoretical system for formally describing algorithms. Fortuitously, he didn’t make the “theoretical” part clear to one of his grad students, who promptly went off and implemented it on the department’s computer, creating the first Lisp interpreter<sup id="fnref:hoho"><a href="#fn:hoho" class="footnote">4</a></sup>. What had started as a mathematical model of programs turned out to be an amazingly flexible and powerful way to actually write them.</p>
<p>What both languages have in common is that they each have a small, conceptually coherent core. Because it’s small and coherent, the programmer is able to internalise the basic concepts of the langauge. This done, they’re free to concentrate on the task at hand, rather than the details of the language. This is also why they’ve lasted so long - simple, clear ideas date far less quickly than specific technologies.</p>
<p>You might wonder why, in an post about two men who have recently died, I’ve not said much about their lives. The reason is simple; I didn’t know them, and so I’ll leave the biography to those who did. Like millions of other people, though, I do know their work. Both have had an enormous impact on a field that touches the lives of almost everyone, and will continue to do so for a long time to come.</p>
<blockquote>
<p>McCarthy said: “Steve Russell said, look, why don’t I program this eval…, and I said to him, ho, ho, you’re confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 703 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today…”</p>
</blockquote>
<div class="footnotes">
<ol>
<li id="fn:church">
<p>Which makes <a href="http://schemers.org/">Scheme</a>, of course, Church Latin. <a href="#fnref:church" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:slw">
<p><a href="http://c2.com/cgi/wiki?SmugLispWeenie">Smug Lisp Weenies</a>, as they are known, would claim that these more modern languages are merely partial, cargo-cult facsimilies of the real thing. There’s something in this, but they also succeed in ways that Lisp doesn’t. That’s a subject for a different day. <a href="#fnref:slw" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:pdp">
<p>Not, as I said in the original version of this post, a PDP-7; porting the nascent operating system from the PDP-7 to the PDP-11 was one factor that led to the development of C. <a href="#fnref:pdp" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:hoho">
<p><a href="http://en.wikipedia.org/wiki/Lisp_programming_language">Wikipedia’s Lisp page</a> cite’s the following from <a href="http://www.paulgraham.com/hackpaint.html">Hackers & Painters by Paul Graham</a>. Unfortunately, I don’t have my copy to hand to find the original source. <a href="#fnref:hoho" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2011/10/vnc_on_the_raspberry
VNC on the Raspberry Pi
2011-10-12T06:59:02+00:00
Rob Hague
rob@rho.org.uk
<p>Here’s a quick demo I’ve put together, showing the <a href="http://raspberrypi.org">RaspPi</a> running as a VNC client:</p>
<center>
<iframe width="400" height="225" src="http://www.youtube.com/embed/HRqSOjtCuVI" frameborder="0" allowfullscreen="1">
</iframe>
</center>
<p>The setup is a slightly unusual one; instead of the client connecting to the server, it runs in <em>listen mode</em>, and the server initiates the connection. This allows the RaspPi to be used as a kind of shared, network display. The software on the RaspPi end is <a href="http://tightvnc.com">TightVNC</a>, which is available in the Debiam ARM repository. On the server side, I used <a href="http://www.testplant.com/products/vine/">Vine Server</a>, as the built-in server on Lion doesn’t support reverse connections (if you want to use the normal client/server arrangement, the built-in server is fine).</p>
<p>The reason that VNC supports this back-to-front arrangement is interesting in itself. <a href="http://www.cl.cam.ac.uk/research/dtg/attarchive/">ORL (later AT&T Labs Cambridge)</a>, the birthplace of VNC, also took a significant interest in location-aware computing, firstly with the Active Badge, which could track users to the granularity of a room, and then with the Active Bat, which could do so within a few centimetres. I worked at the lab for a year before starting my PhD (which they sponsored), in the <a href="http://www.cl.cam.ac.uk/research/dtg/attarchive/spirit/">project</a> exploring the sort of applications you could build with this sort of technology.</p>
<p>One of the simplest and most effective was display teleporting. If you wanted to show someone your screen, you just held your Bat (or, in earlier versions, your Badge) against their monitor and pushed a button. Hey presto, via the magic of VNC reverse connection, there it was. Even though this application hasn’t exactly become ubiquitous, the reverse connection mode that was added to VNC to support it has remained a standard and useful feature. The location-aware technology <a href="http://www.ubisense.net">lives on</a> as well.</p>
id:/2011/09/mmmm_pie
Mmmm... Pie...
2011-09-15T18:08:39+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve been lucky enough to get my hands on one of the <a href="http://www.raspberrypi.org">Raspberry Pi</a> alpha boards. I have various plans for things to try with it, but I thought I’d post some initial thoughts about the experience of using the board, and the project as a whole.</p>
<p>If you’ve not heard the name before, it’s a charity that aims to “promote the study of computer science and related topics, especially at school level, and to put the fun back into learning computing”. To this end, they’re developing a $25 computer. Not a toy, or a working model, but a real computer that’s cheap enough to give to kids without worrying about them breaking it. This isn’t just pie in the sky<sup id="fnref:pun"><a href="#fn:pun" class="footnote">1</a></sup>, either: they’ve already produced two generations of prototype hardware, and should be on course to have the final version in production, at the target price<sup id="fnref:models"><a href="#fn:models" class="footnote">2</a></sup>, before the end of the year.</p>
<p>The board, pictured below, has at it’s heart a <a href="http://www.broadcom.com/">Broadcom</a> system-on-a-chip based around an <a href="http://www.arm.com">ARM</a> CPU, with 128MB or 256MB of RAM stacked on top. There’s very little else on the board - the slightly more expensive version has a single-chip USB hub and Ethernet adapter, but that’s pretty much it. This simplicity is how they’ve managed to hit the ambitious price point.</p>
<div class="images-from-mail">
<img src="/2011/09/mmmm_pie_image.jpeg" alt="Raspberry Pi Alpha Board" class="from-mail" />
</div>
<p>This kind of SoC is more often found in set-top boxes and the like, so it has <a href="http://www.raspberrypi.org/2011/08/demo-raspberry-pi-running-quake-3/">reasonably good graphics</a> and sound. It really is a complete system - you just plug a keyboard into the USB port, a TV (or monitor) into the HDMI, and you’re away.</p>
<p>On first booting the board, I was taken back. Not to primary school and the BBC Micro, but to my first exposure to Linux at University. The disk image I have boots to a console, and I found myself dredging up knowledge of things like runlevels and virtual consoles that I hadn’t used for years. My soft hands suitably re-calloused, I proceeded to poke around, install various packages (including, I admit, <a href="http://en.wikipedia.org/wiki/X_Window_System">X Windows</a> and <a href="http://lxde.org">LXDE</a>), and generally having a play. The current OS image is based on <a href="http://www.debian.org">Debian</a>, and so hundreds of packages are only an <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">apt-get</a> away. The list isn’t as comprehensive as it is for x86, but there are still plenty of interesting packages (such as <a href="http://www.tightvnc.com/">TightVNC</a>) to install.</p>
<p>The thing that struck me as I used the Raspberry Pi was how familiar everything is. This isn’t some kind of esoteric embedded system, but a real computer, with a real OS, and standard languages and compilers right there, running on the board itself. Granted, it’ll never challenge the latest <a href="http://www.apple.com/macbookpro/">MacBook Pro</a> in terms of raw horsepower, but for the intended use - programming education - it’s more than enough.</p>
<p>You could, of course, stick <a href="http://www.mozilla.org/firefox/">Firefox</a> on the device, and get a dirt-cheap, tiny, low-power client for the web. There are also myriad things that become feasible when you can get a computer for the sort of money that Curry’s would charge for an HDMI cable not too long ago - smart screens, tiny servers, automation, and many others. You could even stick <a href="http://www.libreoffice.org/">LibreOffice</a> on it and equip a school computer lab for a fraction of the price today. However, doing so would miss the point.</p>
<p>The project stems in large part from the observation that fewer of the eighteen-year-olds arriving at <a href="http://www.cam.ac.uk">Cambridge</a> to read <a href="http://cl.cam.ac.uk">Computer Science</a> had a good grasp off how computers actually work<sup id="fnref:interviews"><a href="#fn:interviews" class="footnote">3</a></sup>. This is not, of course, to say that they’re any less bright, but just that their exposure to computers has been markedly different from that of those of use who grew up in the eighties (or even the nineties).</p>
<p>There are numerous factors behind this change, but a big one is the rise of the <em>family</em> computer. This is a device that has a myriad of uses - banking, shopping, gaming, <a href="http://bbc.co.uk/iplayer">watching TV</a> - which means that parents are a lot less inclined to let an inquisitive seven-year-old poke around in it’s innards. A Commodore 64 or Acorn Electron, by contrast, was useful for… pretty much nothing, out of the box. Even getting a game to load involved reading the manual and getting some mysterious incantation <em>just right</em>.</p>
<p>This initial uselessness is not only part of the charm of early home computers, but also a key to their educational value. To make them do anything of interest, you had to program them at least a little, and this gave curiosity a way in. Even copy-typing listings from a magazine<sup id="fnref:old"><a href="#fn:old" class="footnote">4</a></sup> gives you the idea that, far from being some kind of magic, this box is something that could be understood if you put your mind to it.</p>
<p>Modern computers are increasingly black boxes, with a big implied or explicit “no user serviceable parts inside” notice discouraging people from wondering how they work. This is appropriate for tools that are increasingly central to our lives<sup id="fnref:apple"><a href="#fn:apple" class="footnote">5</a></sup>, but raises the question of where the next generation of programmers and hardware engineers is going to come from. By providing a cheap, open machine that kids can tinker with to their heart’s content, Raspberry Pi are providing an answer. It’s not the complete solution, but it’s a big part of it. What they need now are software and ideas, and if you’re a programmer of teacher (or both) that’s something you can help with. You can also help by buying one of the final boards under their buy one, give one scheme. I’ll certainly be getting one or two.</p>
<div class="footnotes">
<ol>
<li id="fn:pun">
<p>Sorry. <a href="#fnref:pun" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:models">
<p>There are actually two models (with a naming scheme that might seem familiar) - the model A for $25, and the model B for $35, which adds extra RAM, Ethernet, an additional USB port. The alpha board corresponds to the model B. <a href="#fnref:models" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:interviews">
<p>Eben, one of the founders of the project, and I were both involved in interviewing prospective Computer Science undergraduates, for different colleges. <a href="#fnref:interviews" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:old">
<p>Coverdisks? Cassettes? <em>Checksums?</em> Luxury! When I were a lad, we had copious syntax errors, and we were glad of it… <a href="#fnref:old" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:apple">
<p>This is one of the reasons I tend to buy <a href="http://www.apple.com">Apple</a> hardware these days - I’m willing to sacrifice some of the ability to upgrade and repair the kit myself for the integration and simplicity. <a href="#fnref:apple" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2011/08/loot_or_fiddle
Loot or Fiddle
2011-08-20T08:30:19+00:00
Rob Hague
rob@rho.org.uk
<p>I've still not quite got my head around the recent rioting. However, I can fall back on sarcasm. So, without further ado, and with a nod to the sadly defunct <a href="http://en.wikipedia.org/wiki/Brunching_Shuttlecocks">Brunching Shuttlecocks</a>, I present to you 'Loot or Fiddle'. Simple decide whether the item or the quote in question relates to the 2011 rioting and looting, or the 2009 expenses scandal.</p>
<noscript>
<p><i>You seem to have JavaScript disabled; you'll need to turn it on if you want to see the answers.</i></p>
</noscript>
<div id="loot-or-fiddle-quiz">
<div class="quiz-question answer-loot">
<h4 style="width: 65%">1: A case of bottled water (£3.50).</h4>
<p style="display: none" class="quiz-answer-info"><i>Loot</i>: An easy start; this was, of course, an item looted in the riots. <a href="http://www.businessinsider.com/nicolas-roberts-looter-water-london-2011-8">The man in question was sentenced to six months in prison</a>. On this basis, and if the time was proportional to the value stolen, <a href="http://www.guardian.co.uk/politics/2011/may/20/mps-expenses-elliot-morley-sentenced">Eliot Morely</a> would have been sentenced to over 4,200 years.</p>
</div>
<div class="quiz-question answer-fiddle">
<h4 style="width: 65%">2: "My case shouldn't have been brought before the court... There are so many others who have walked free and nobody is going to say [anything] about their situation."</h4>
<p style="display: none" class="quiz-answer-info"><i>Fiddle</i>: This was Eric Illsley, former Labour MP for Barnsley Central, <a href="http://www.telegraph.co.uk/news/newstopics/mps-expenses/8653889/MPs-expenses-Eric-Illsley-claimed-150000.html">on his release from prison</a>. Presumably, he'd be happy for the rioters to just make good the damage and apologise.</p>
</div>
<div class="quiz-question answer-fiddle">
<h4 style="width:65%">3: Women's clothes and shoes, nail polish, baby wipes and comics.</h4>
<p style="display: none" class="quiz-answer-info"><i>Fiddle</i>: These items were on a <a href="http://www.telegraph.co.uk/news/newstopics/mps-expenses/5301789/MPs-expenses-Phil-Woolas-in-row-over-shoes-and-nail-polish.html">shopping list claimed by Phil Woolas</a>, the charming and likable former immigration minister who was eventually ejected from parliament for his <a href="http://www.guardian.co.uk/politics/gallery/2010/nov/05/phil-woolas-campaign-literature">interesting campaign literature</a>.</p>
</div>
<div class="quiz-question answer-loot">
<h4 style="width: 65%">4: A pair of shorts</h4>
<p style="display: none" class="quiz-answer-info"><i>Loot</i>: Despite having slept through the riots, and taken a single item from a haul made by her lodger, Ursula Nevin was sentenced to five months in prison, <a href="http://www.guardian.co.uk/uk/2011/aug/13/manchester-police-sorry-looter-sentence">much to the delight of Greater Manchester Police</a>. She has since been <a href="http://www.guardian.co.uk/uk/2011/aug/19/riots-mother-looted-shorts-freed?INTCMP=ILCNETTXT3487">freed on appeal</a>.</p>
</div>
<div class="quiz-question answer-fiddle">
<h4 style="width: 65%">5: A £2,600 home cinema system</h4>
<p style="display: none" class="quiz-answer-info"><i>Fiddle</i>: Whilst it's certainly possible that a particularly ambitious and well-prepared looter could have carried off such a system, I was thinking of the one <a href="http://www.telegraph.co.uk/news/newstopics/mps-expenses/5326634/Shahid-Malik-cut-price-rent-at-home-and-claims-for-66000-MPs-expenses.html">claimed by former Justice Minister Shahid Mailk</a>. The Fees Office actually picked up on this one, and after some haggling the taxpayer only subsidised Mr. Malik's TV to the tune of £1000. Bargain.</p>
</div>
<div class="quiz-question answer-loot">
<h4 style="width: 65%">6: "This is copycat behaviour. There's a sense that some people don't have the kind of barriers and discipline that people in the past have been brought up with"</h4>
<p style="display: none" class="quiz-answer-info"><i>Loot</i>: This is a <a href="http://www.metro.co.uk/news/871897-copycat-riots-hit-manchester-birmingham-and-wolverhampton">quote from Hazel Blears</a>. The same Hazel Blears who has the kind of barriers and discipline that meant she flipped her second home several times, avoiding £13,332 of Capital Gains Tax, and, when caught, assumed it would be OK to simply <a href="http://www.guardian.co.uk/politics/2009/may/13/mps-expenses-hazel-blears?INTCMP=SRCH">pay the money back</a>.</p>
</div>
<div class="quiz-question answer-fiddle">
<h4 style="width: 65%">7: Iams Senior cat food (£3.69)</h4>
<p style="display: none" class="quiz-answer-info"><i>Fiddle</i>: Whilst it's easy to picture rioters throwing a bin through the window of Pets At Home in order to steal scratching posts and catnip mice, this was in fact one of several pet-related items <a href="http://www.dailymail.co.uk/news/article-1180295/Tory-MP-Cheryl-Gillan-claimed-pet-food-dog.html">claimed by Welsh Tory MP Cheryl Gillan</a>.</p>
</div>
<div class="quiz-question answer-fiddle">
<h4 style="width: 65%">8: A "hip hop" bed (£550)</h4>
<p style="display: none" class="quiz-answer-info"><i>Fiddle</i>: I have no idea what makes a bed hip hop, but Labour's Ian Lucas bought one on expenses. He also got an £838 sofa bed, presumably for when he's feeling less gangsta.</p>
</div>
<div class="quiz-question answer-loot">
<h4 style="width: 65%">9: "This is criminality pure and simple"</h4>
<p style="display: none" class="quiz-answer-info"><i>Loot</i>: This was <a href="http://www.guardian.co.uk/politics/video/2011/aug/09/david-cameron-riots-criminality-video">David Cameron, speaking directly after a COBRA meeting</a>. Although it could just have easily been about MPs a couple of years earlier.</p>
</div>
<div class="quiz-question answer-loot">
<h4 style="width:65%">10: Over £22,000 in 4 days</h4>
<p style="display: none" class="quiz-answer-info"><i>Loot</i>: The amount of money donated to <a href="http://somethingniceforashraf.tumblr.com/">Let's Do Something Nice For Ashraf Haziq (+ Others)</a>, a website created in response to the treatment of a Malaysian student who was <a href="http://www.channel4.com/news/online-campaign-for-riot-victim-ashraf-haziq">mugged, twice, during the riots</a>. This outpouring of support was just one of the positive stories to come out of an otherwise dire week of news.</p>
</div>
</div>
<script>
function quiz_answer(button, loot) {
var responseDiv = button.parentNode;
var parent = responseDiv.parentNode;
var correct = (parent.className == 'quiz-question answer-loot')?
loot : !loot;
responseDiv.innerHTML = correct?
'<span style="color: green; font-weight: bold">Correct</span>' :
'<span style="color: red; font-weight: bold">Incorrect</span>';
for(var e = parent.firstChild; e !== null; e = e.nextSibling) {
if (e.className === 'quiz-answer-info') {
e.style.display = 'block';
}
}
if (correct) { quizScore++; }
quizScoreElement.innerHTML = quizScore+'/'+quizCount;
}
var quizDiv = document.getElementById('loot-or-fiddle-quiz');
var quizScore = 0;
var quizCount = 0;
for(var e = quizDiv.firstChild; e !== null; e = e.nextSibling) {
if (e.className != null && e.className.indexOf('quiz-question') != -1) {
var responseDiv = document.createElement('div');
responseDiv.innerHTML =
'<input type="button" value="Loot" onclick="quiz_answer(this, true)">'+
'<input type="button" value="Fiddle" onclick="quiz_answer(this, false)">'
responseDiv.style.width = '33%';
responseDiv.style.textAlign = 'right';
responseDiv.style.cssFloat = 'right';
responseDiv.style.styleFloat = 'right';
e.insertBefore(responseDiv, e.firstChild);
quizCount++;
}
}
var quizScoreElement = document.createElement('div');
quizScoreElement.style.textAlign = 'right';
quizScoreElement.style.font = '24px bold';
quizDiv.appendChild(quizScoreElement);
</script>
id:/2011/06/give-me-inconvenience
Give Me Inconvenience, Or Give Me Death!
2011-06-11T00:10:00+00:00
Rob Hague
rob@rho.org.uk
<p>In <a href="http://poddelusion.co.uk/blog/2011/06/10/episode-88-10th-june-2011/">this week’s episode of The Pod Delusion</a>, there’s a piece contributed by <a href="https://twitter.com/petehague">my brother</a>, entitled “Death of the Operating System”. In it, he talks about the rise of “walled garden” operating systems such as <a href="http://www.apple.com/ios/">Apple’s iOS</a>, and what this means for “general purpose” operating systems such as <a href="http://www.apple.com/ios/">Mac OS X</a>, <a href="http://www.microsoft.com/windows/">Windows</a> and <a href="http://www.debian.org/">Linux</a><sup id="fnref:walled-garden-def"><a href="#fn:walled-garden-def" class="footnote">1</a></sup>. Once walled gardens are the norm, he suggests, general purpose OSs will come to be viewed by many as being only useful for illegal purposes, and eventually will become illegal themselves.</p>
<p>One point on which I agree is that wall gardens are going to become more prevalent. In a <a href="http://daringfireball.net/2011/06/windows_8_fundamentally_flawed">recent article</a>, John Gruber makes the point that the recently-announced <a href="http://www.microsoft.com/presspass/features/2011/jun11/06-01corporatenews.aspx">Windows 8</a> is a flawed response to the iPad<sup id="fnref:win8-ipad"><a href="#fn:win8-ipad" class="footnote">2</a></sup>, as it includes the ability to run the existing Windows interface, and the applications that go with it, essentially unmodified. The iPad, on the other hand, started with a completely blank slate, with no attempt at compatibility with the pre-touchscreen world. This may, at first glance, seem like a weakness, but it is, Gruber argues, key to one of the major strengths of the platform – simplicity. He’s talking about the UI, but the point applies equally to the installation of software.</p>
<p>Even if you discount the configure-make-install dance that’s familiar to anyone who builds their own software on Unix-like systems, installing and updating software is a pain in the arse. Systems vary in how well they handle it - Mac OS X beats Windows, and both are in turn beaten by Debian - but even if the normal install channels work well, anyone but an expert has a hard time keeping track of exactly what’s been done. This is compounded by the tendency, permitted by the general purpose operating system, for all and sundry to roll their own installation and update infrastructures. Worse, once you’ve given permission for a piece of software to install things, it’s easy for malicious software to creep in, necessitating yet more installation and tending of security software.</p>
<p>Most people simply don’t want this hassle. They just want to read their email, and check their Facebooks, and go on The Google. Maybe catapult the occasional bird at a tower of pigs. A walled garden – if it’s well-tended – takes the responsibility for managing things like updates and installation, leaving the user to simply choose the applications they want from a list (if that). This brings the device closer to an information appliance, as described by Donald Norman in <a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=5160">The Invisible Computer</a>. With it’s over-the-air backups and syncing, <a href="http://www.apple.com/ios/ios5/features.html#pcfree">iOS 5</a> is a significant step in this direction - it’s increasingly feasible for someone to entirely forgo owning a general purpose computer like a PC, as all their needs are fulfilled by walled garden devices.</p>
<p>Peter’s belief is that, when this is the norm, and owning a general purpose computer is a marginal pursuit, politicians playing to the peanut gallery will seek to ban it in the same way that they banned handguns after <a href="http://en.wikipedia.org/wiki/Dunblane_massacre">Dunblane</a>. While PCs aren’t as obviously deadly as pistols, the twin modern-day bogeymen of terrorists and paedophiles might make them a convenient target when Something Must Be Done.</p>
<p>He draws an analogy with gun ownership in the United States, but I think this is a red herring. The second amendment isn’t in the Bill of Rights by chance; the right to bear arms is intrinsically bound up in the genesis of that country. As Sarah Palin recently <a href="http://www.guardian.co.uk/world/richard-adams-blog/2011/jun/06/sarah-palin-paul-revere-british">pointed out</a> (albeit in her usual ham-fisted, <a href="http://en.wikipedia.org/wiki/Truthiness">truthy</a> way), the American revolution succeeded in no small part due to the fact that the citizens of the nascent republic were armed. As a result, gun ownership is seen by many Americans as a key component of liberty, and no amount of <a href="http://en.wikipedia.org/wiki/Waco_siege">Wacoes</a> and <a href="http://en.wikipedia.org/wiki/Columbine_High_School_massacre">Columbines</a> are going to override that.</p>
<p>In Britain, with no such historical context, governments have more latitude to pass whatever gun control laws they see fit. However, even after tragedies such as Dunblane, and the attendant media outcry, this hasn’t led to an outright ban on firearms. Whist you can’t buy a handgun or an assault rifle, it’s still relatively straightforward to buy and own a shotgun. The reason for this is obvious; shotguns have, to borrow a phrase from the <a href="http://en.wikipedia.org/wiki/Sony_Corp._of_America_v._Universal_City_Studios,_Inc.">Betamax case</a>, substantial non-infringing uses (specifically, game hunting and pest control). Handguns, on the other hand, have essentially no other use than to injure or kill other human beings<sup id="fnref:sports-shooting"><a href="#fn:sports-shooting" class="footnote">3</a></sup>.</p>
<p>General purpose operating systems clearly fall into the former category. They can be used to hack into a nuclear power station’s control system, or clandestinely distribute images of child abuse, but they can also be used to sequence genomes, or administer complex financial instruments, or develop <a href="http://www.arm.com/">the processor for your next phone</a>. They’re also vital as the back end for all of the web applications and cloud services that are the bread and butter of your walled garden devices. Crucially, and unlike sports shooting with handguns, these activities <em>make a lot of money</em>. A hell of a lot of money. Successive governments, with their talk of creative and knowledge economies, and their laser-like focus on STEM<sup id="fnref:stem"><a href="#fn:stem" class="footnote">4</a></sup> education, recognise this, and there’s no way that they’d kill the goose that keeps laying golden eggs so that a junior minister can have a favourable news cycle.</p>
<p>However, there is another possibility. You need a licence to own a shotgun. What if you needed one to own a non-locked-down computer? This couldn’t happen today - too many companies rely on selling products to computer owners - but in the future, when the man on the WiFi-enabled Clapham Omnibus is satisfied with just his iPad, it’s possible. The problem with such a move is that much of the innovation in computing comes from individuals and small companies, precisely because the barriers to entry are so low. Any country that implemented such a scheme would see a dramatic chilling effect in its software sector at least. Few governments would want this, but it’s a subtle enough point that they might blunder into it by accident. Fortunately, technology companies have in recent years learnt not to be so shy and retiring when it comes to lobbying for their own interests.</p>
<p>It’s also worth considering that the idea of “owning a computer” needn’t be limited to buying a box and plugging it in in the spare bedroom. Even if we reach the stage where Ken Olsen’s widely-quoted<sup id="fnref:olsen-quote"><a href="#fn:olsen-quote" class="footnote">5</a></sup> utterance is true, and there is no reason for any individual to have a (general purpose) computer in their home, that doesn’t mean they disappear entirely. With ever-improving connectivity, the device that does your computing doesn’t necessarily have to be the thing you’re staring at and prodding. There are significant advantages to your general purpose computer being cossetted in a data centre somewhere, where it can have air conditioning and a backed-up power supply, and make all the noise it wants. This doesn’t necessarily meaning ceding control entirely; for example, I rent a virtual server from <a href="http://www.bytemark.co.uk/">ByteMark</a><sup id="fnref:bytemark"><a href="#fn:bytemark" class="footnote">6</a></sup>, over which I have free reign. I get the benefits of their fast internet connection and other infrastructure, whilst retaining control of my software, and importantly, my data.</p>
<p>This leads on to a potentially more troubling aspect of Apple’s recent WWDC announcements; the dominance of the cloud. It raises the question: how happy are you about giving control of your data to a single hardware company? My answer would be: slightly happier than I am about giving it to a single advertising company, but still far from ecstatic. However, that’s an issue for a whole other post.</p>
<div class="footnotes">
<ol>
<li id="fn:walled-garden-def">
<p>Peter draws the distinction between “walled garden” systems, where all software must be installed through channels sanctioned by the OS vendor, and “general purpose” systems, where, once the original OS is installed, the user can install additional software as they see fit. This isn’t the terminology I would’ve chosen, but it’ll do for the discussion at hand. <a href="#fnref:walled-garden-def" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:win8-ipad">
<p>He doesn’t really address the question of whether it’s <em>aiming</em> to be a response to the iPad. Microsoft’s internal fractiousness and lack of a coherent, clearly communicated vision makes this far from obvious. <a href="#fnref:win8-ipad" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:sports-shooting">
<p>The only non-violent use I can think of is sports shooting, but I remain to be convinced that this needs to be done with real handguns using live ammunition. <a href="#fnref:sports-shooting" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:stem">
<p>Science, Technology, Engineering and Maths. <a href="#fnref:stem" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:olsen-quote">
<p>Widely, and accurately, quoted, but generally misinterpreted. The context of the quote suggests that Olsen was talking about home automation, not personal computers. <a href="http://www.snopes.com/quotes/kenolsen.asp">Snopes</a> has more. <a href="#fnref:olsen-quote" class="reversefootnote">[back]</a></p>
</li>
<li id="fn:bytemark">
<p>Highly recommended, by the way. <a href="#fnref:bytemark" class="reversefootnote">[back]</a></p>
</li>
</ol>
</div>
id:/2011/04/all-change-again
All Change. Again.
2011-04-09T08:41:00+00:00
Rob Hague
rob@rho.org.uk
<p>After a bit of thought, I’ve decided to move the site away from <a href="http://openmelody.org/">Open Melody</a>. I’m still a big fan of the software, and I wish the project the best of luck, but I’ve come to realise that it’s not a good fit for what I want to do. If you have several blogs, many users, and need a web interface and dynamic features like comments and trackbacks, then Melody (and it’s predecessor, <a href="http://www.movabletype.org/">Movable Type</a>) are a good choice. However, I have a single blog, a single user, and I want to keep everything static so that any fleeting spike in traffic won’t bring the whole thing grinding to a halt. Moreover, I prefer things where I can get at them, in the file system; that way, I can use all the filters and editors and version control systems that I’m familiar with.</p>
<p>This last point is what crystallised the decision for me. I’ve increasingly been finding myself getting bogged down in details whilst trying to make changes to the site’s design or functionality. Melody is justifiably a complex system, as it does a lot. There are large parts of it I don’t understand. I’m sure I could learn it, but the fact that I keep fighting the tide suggests that I’d be learning things weren’t necessary for what I actually want to achieve. So, I’ve decided to move to something simpler and better suited to my needs.</p>
<p>The tool I’ve chosen is <a href="http://www.jekyllrb.com">Jekyll</a>. It’s small and simple enough for me to understand completely (having to learn <a href="http://www.ruby-lang.org/">Ruby</a> is an added bonus), it keeps everything in files which I can edit with Emacs and track with Git, and it has an importer that brings the posts in from Melody with a minimum of fuss. So, the site looks more or less the same, but the back end is a lot more straightforward and it should make it easier to improve things in the future.</p>
<p>I for one welcome our new text file overlords.</p>
id:/2011/02/new-banner
New Banner
2011-02-27T16:57:23+00:00
Rob Hague
rob@rho.org.uk
<p>As you may have noticed, I’ve created a new baner for the top of the site. It’s the first to contain neither the colour yellow or the letter ρ. I put it together in <a href="http://www.libreoffice.org/">LibreOffice Writer</a>, using FontArt (their version of MS Word’s WordArt). Hardly the ideal tool for the job, but none of the image editing tools I tried allow you to expand text in both dimensions to fill an arbitrary rectangle.The font, in case you’re interested, is Monotype Baskerville (as included in Mac OS X), a typeface with a <a href="http://typophile.com/node/12622">long and interesting history</a>.</p>
<center><img src="/images/banner-baskerville.png" width="425px" height="75px" alt="New banner" /></center>
id:/2011/02/panic-on-the-streets-of-espoo-1
Panic On The Streets Of Espoo
2011-02-12T18:52:00+00:00
Rob Hague
rob@rho.org.uk
<p>All of the recent chatter on Twitter and blogs regarding the <a href="http://arstechnica.com/gadgets/news/2011/02/nokia-adopts-windows-phone-7-as-primary-platform.ars">Nokia-Microsoft partnership</a> has tempted me to offer up my own hostage to fortune. But first, a disclaimer: I have no inside information. This is all conjecture based on public sources. Also, these opinions, like all of those on this site, are entirely my own, and not those of my employer.</p>
<p>Now that’s out of the way, I’ll get straight to pontificating (I’m assuming you already know the background). Plenty has already been said about whether the deal is good or bad for Nokia (it seems fairly universally agreed that it’s good for Microsoft), but I want to write about the effects outside those companies; specifically, what it will do the the smartphone landscape.</p>
<p>In the short term, the answer is probably nothing. It’ll take Nokia some time to bring a Windows Phone 7 handset to market. However, it seems safe to assume that they will release one at some point. Slightly less safely, let’s also assume that they don’t screw up either the implementation or the launch, and it sees a reasonable degree of success. This is where it gets interesting.</p>
<p>My guess is that Microsoft will be looking to use Nokia as the main way of ensuring WP7 gains traction. I say this because all of their other OEMs are not committed to the platform in the same way, <em>because they all also make Android handsets</em>. Why would they cede the control they have over the Android platform for the relatively restrictive (not to mention more costly) Microsoft setup, when the former has all the momentum and volume? Nokia, on the other hand, have pretty comprehensively thrown their lot in with MS, and seem to have basically given up on their home-grown efforts. As such, they’ll be even keener for WP7 to succeed than Microsoft themselves, having essentially bet the entire company.</p>
<p>Now that Microsoft has a captive hardware manufacturer, does it still need any others? My guess would be no. It sounds like Nokia will be getting special access, and working closely with Microsoft on the future development of the platform. I predict that, before too long, Nokia will be the <em>only</em> manufacturer of WP7 hardware. It’s possible that Microsoft will simply dissolve the agreements with the others - it would be a shitty move, but the <a href="http://en.wikipedia.org/wiki/Microsoft_PlaysForSure">PlaysForSure</a> debacle demonstrates that they have absolutely no compunction about cutting their partners loose if they think it’s to their advantage. More likely, though, is that they simply leave of their own accord. Certainly, if I were Samsung, or HTC, or LG, I wouldn’t be putting money into any future Windows phones having heard Friday’s announcement. The only one that I can see staying of their own accord is Dell, but only because they’ve been so firmly in bed with MS for so long that it probably doesn’t even occur to them that they can take off the leather cuffs and gimp mask.</p>
<p>I don’t think this prediction spells doom and gloom for Nokia or Microsoft. I think Windows Phone 7 will have a better chance of gaining noticeable market share if it’s more focussed, and if the software and hardware are developed in tandem. And, perhaps surprisingly for a long-time Mac and Linux user, I do want it to succeed. I don’t want it to gain the 95%+ share that Windows had on the desktop, but I don’t think there’s much risk of that. However, it is, from what I’ve heard, a well-designed, usable platform. More importantly, I think a market with four strong players (iOS, Android, WP7, and WebOS, which HP seem to be making a good job of at the moment) will be a lot healthier for both consumers and developers than the alternative, an iOS/Android duopoly.</p>
<p>To round off, I’d like to make an even more long-term prediction; eventually, Microsoft will end up buying Nokia to create an in-house mobile hardware division. This would be intensely unpopular in Finnland - hence the title of this post - but given that Nokia seem to be positioning themselves as mainly a manufacturer of WP7 handsets, there would seem to be little reason for them to remain a separate entity. The one wildcard in this the non-smartphone side of the business, but that is being so ruthlessly cannibalised by no-name Asian manufacturers that I would be surprised if there’s much mileage left there. Another possibility is a split - the smartphone business goes to MS, and Nokia is left with other phones, plus their less high-profile lines (set-top boxes, network infrastructure). The gutted Nokia would be a shadow of its former self.</p>
<p>It’s a shame to see Symbian, the best mobile OS for a long while, and Maemo/MeeGo, a promising alternative, go the way of the dodo, but the writing has been on the wall for a while now. Elop’s <a href="http://www.engadget.com/2011/02/08/nokia-ceo-stephen-elop-rallies-troops-in-brutally-honest-burnin/">burning platform</a> memo, melodramatic as it was, wasn’t too far off the mark. What remains to be seen is if jumping into the sea results in rescue, or merely a more drawn-out death.</p>
id:/2010/11/unchained-melody
Unchained Melody
2010-11-07T18:31:08+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://openmelody.org"><img src="/2010/11/button-iheartmelody-transparent.png" alt="I Heart Melody" style="float:left;" /></a></p>
<p>I’ve just completed migrating this site from <a href="http://www.movabletype.org/">Movable Type OS</a> to <a href="http://openmelody.org">Melody 1.0 Beta</a>. This not as big a leap as it might sound, as Melody is a community fork of Movable Type. Indeed, the whole process has been a lot smoother than my attempt to upgrade from MT 4 to MT 5 (in which I lost my theme for reasons I couldn’t fathom, and ended up restoring from backups).</p>
<p>I’ve been considering making the move for a while. The final push came when Six Apart, the company that created the software, was <a href="http://daringfireball.net/linked/2010/09/21/six-apart">sold</a>. I’ve no idea what the newly merged company will do with the open source version of MT, but I’m a lot more comfortable relying on (and, maybe, contributing to) a vibrant open source community. The signs are good that that’s what Melody will have.</p>
id:/2010/11/purple-parsnip-celariac-soup
Purple Parsnip & Celariac Soup
2010-11-04T19:25:56+00:00
Rob Hague
rob@rho.org.uk
<p><img src="/2010/11/04/purplesoup.jpg" style="float: right; width: 320px;" /></p>
<p>During the winter, I tend to make soups to take into work for lunch. This week’s involved red cabbage (on Tori’s suggestion), and so came out this rather… interesting colour. Nevertheless, it tastes great, so here’s the recipe.</p>
<p><strong><em>Makes 10 Portions</em></strong></p>
<ul>
<li><strong>1kg</strong> Parsnips (around three good-sized ones)</li>
<li><strong>750g</strong> Celariac</li>
<li><strong>500g</strong> Red cabbage (about half a head - if you’d like the end result to look less alarming, you could substitute green or white cabbage)</li>
<li><strong>200g</strong> Bacon (getting lardons will save on chopping)</li>
<li>Olive oil</li>
<li>Pepper</li>
<li>Rosemary</li>
<li><strong>2 pints</strong> Vegetable stock</li>
</ul>
<p>Preheat the oven to 200°C (400°F, gas mark 6). Peel the parsnips and celariac, and chop into 1cm cubes. Place in a roasting tin, drizzle with olive oil, and season with pepper and rosemary. Roast for 40 minutes, turning half-way through. Meanwhile, heat a large saucepan or casserole, and fry the bacon (chopping it into smaller pieces if necessary). Chop the cabbage, and bring to the boil in a separate pan with a little water. Make up the stock.</p>
<p>Once the cabbage is soft (about five minutes), remove it from the heat. When the parsnips and celariac are ready, add to the cabbage and blend using either a food processor or hand blender (in the latter case, you might need to do it in batches). Add the blended vegetables and stock to the bacon, bring to the boil, and simmer for 30-45 minutes.</p>
id:/2010/10/just-my-type
Just My Type
2010-10-31T12:33:49+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.amazon.co.uk/Just-My-Type-About-Fonts/dp/1846683017/ref=sr_1_1?ie=UTF8&qid=1287318638&sr=8-1"><img src="/2010/10/31/justmytype.jpg" style="float: right; margin-left: 2px;" width="100px" /></a></p>
<p>I’ve just finished reading <a href="http://www.amazon.co.uk/Just-My-Type-About-Fonts/dp/1846683017/ref=sr_1_1?ie=UTF8&qid=1287318638&sr=8-1">Just My Type</a>, a book about fonts by Simon Garfield. As the name suggests, it deals with a field that was for centuries esoteric, but is now commonplace: typography. Garfield takes us through the history of type, stretching from Gutenberg and Garamond all the way to Calibri and iBooks. Along the way, we get to learn about Letraset and Selectics, Eric Gill’s bizarre sexual proclivities, and the short, sad tale of Doves (don’t bother looking for it in your font menu - it’s not there).</p>
<p>The book is meandering and conversational, wandering from one area of interest to the next without getting bogged down in technical details. This makes it and easy and pleasant read, but occasionally causes frustration. For example, the “hot metal typesetting” is mentioned several times in the early chapters, but not explained until chapter 17, mid-way though. However, in spite of (or perhaps because of) the lack of technical details, the enthusiasm that both the author and his interviewees have for the subject shines through. It’s also a wonderful book to look at, with plentiful illustrations, and samples of the types being discussed throughout.</p>
<p>In short, this book isn’t going to teach you the nitty-gritty of type design, but it does offer a good introduction to the subject, and prompts you to look more closely at the fonts that pervade the environment. Definitely recommended.</p>
id:/2010/10/no-comment
No Comment
2010-10-21T07:30:34+00:00
Rob Hague
rob@rho.org.uk
<p>This morning, I got an e-mail from someone who’d come across my Flattr article, and had attempted to comment on it. Unfortunately, this only served to reveal that the comment link on this site is broken. This is fallout from an upgrade I did a little while ago - I unlinked the comment scripts until I was sure everything is working, and forgot to reinstate them.</p>
<p>I tried to correct the problem this morning, only to hit a bug in either Movable Type or the way I’m using it - whenever a comment was added, the formatting of the main article disappeared. Hence, I’ve disabled them for the moment. In the long term, I’m thinking of migrating to <a href="http://openmelody.org/">Melody</a>, so I’ll consider comments then. In the meantime, I’m still delighted to hear from you via <a href="mailto:rob@rho.org.uk">email</a> or <a href="http://www.twitter.com/robhague">Twitter</a>.</p>
id:/2010/07/flattry-might-get-you-somewher
Flattry Might Get You Somewhere
2010-07-24T14:28:48+00:00
Rob Hague
rob@rho.org.uk
<p>A couple of weeks ago, I saw a tweet that went along the lines of “Flattr sounds more like a pyramid scheme than a social network”. I’d never heard of this thing called Flattr, so I followed the link to <a href="http://eu.techcrunch.com/2010/07/06/is-flattr-the-new-facebook-like-but-this-time-with-real-money/">this article</a>. I found it interesting enough to write a <a href="https://twitter.com/robhague/status/18031445809">mildly facetious tweet of my own</a>, and before I knew it I’d been offered a beta invitation code by their “evangelist”. What the hell, I thought - it’s worth a tenner (or so - Flattr operates exclusively in Euros) to give it a proper try.
Flattr basically works like this: content creators register “things” - articles, photo sets, videos, or anything else that can be published on the web - with the site. They then add a button, similar to the “Digg/Tweet/Like This” buttons that have been cropping up all over the place for the last couple of years, to the thing in question. Consumers then come along, and, if they like what they see, click the button to flattr (yes, it’s a verb as well) the thing. So far, so conventional.</p>
<p>The interesting part is what happens next. Every Flattr user allocates a certain amount of money per month for the purposes of flattry. At the end of each month, it’s divided evenly between all of the things flattr’d that month, and the money (less a cut) is added to the creator’s Flattr account (where it can be transferred to a real bank account). Basically, it’s a low-friction way to tip creators of stuff you enjoy.</p>
<p>In other words, it’s another micropayment system. The information superhighway is littered with the corpses of failed micropayment systems dating back to the 90s (when people still used terms like “information superhighway”). What reason is there to think that things will be different this time? Well…</p>
<p>Firstly, unlike many previous systems, Flattr is <em>actually</em> low friction. Flattring something is genuinely no more complicated than clicking a link. This is partly due to advances in things like AJAX (also known as JavaScript Actually Works Now), but mainly down to the clever way Flattr is set up. The even distribution reduces the thought process to a binary decision - there’s no need to think about how <em>much</em> you want to flattr a particular thing, just whether you want to flattr it or not - and the fixed monthly amount means that you don’t need to worry about accidentally overspending. The upshot is that Flattr fits in with the way you already browse the web.</p>
<p>Secondly, the company has a clear revenue model - the cut of contributions that I mentioned above. This is predictable, as each active user by definition pays out a fixed amount each month, a fixed proportion of which goes back to Flattr. Equally important, it scales with their costs. The more active users they have, the more servers and staff they need to keep the service running, but the more revenue they’re getting in. They’re not only providing a way for people to pay for things on the web, they’ve come up with a model where users pay to keep the service itself on the web. (The fact that paying for a service you use sounds like a radical idea is testament to the weird hall of mirrors that is the web economy.)</p>
<p>At this point, you may be asking yourself, “Why do I care what the business model is? I just want the site to be there.” The reason I care is that running a non-trivial site like Flattr takes money. Significant amounts of money. The most reliable way to ensure the continued existence of such a service is for it (or, more accurately, the company behind it) to turn a profit. For this, they need a revenue stream. In most cases, services are reluctant to charge users directly, as they rightly or wrongly believe that the users expect things to be free. However, they have to get the money from somewhere. When I can’t see where this is, I get nervous.</p>
<p>Perhaps the best example of this at the moment is <a href="http://www.facebook.com/">facebook</a>. It’s recently been reported that the company is at last <a href="http://www.theregister.co.uk/2010/06/21/sources_say_facebook_turned_2009_profit/">making a reasonable profit</a>. I am, under sufferance, a facebook user. Like everyone I know who’s signed up, I have <em>never given them any money</em>. So where is the profit coming from? Maybe it’s from creaming a percentage off all of the money people shell out to <a href="http://mediacommons.futureofthebook.org/content/cultivated-play-farmville">not play Farmville</a>. However, there’s a more obvious answer: targeted advertising. In some cases, this can be benign, even helpful. For example, in connection with the turning-a-profit story, Channel 4 News interviewed the owner of a wedding venue who’s adverts appeared on the pages of users in the relevant area when their relationship status changed to “engaged”. However, in other cases, it feels intrusive, even oppressive.</p>
<p>The worrying aspect is that, from outside the company, we have absolutely no idea what they’re doing. We just know that they’re doing <em>something</em> to turn a profit. If you hand over a monthly subscription that covers the cost of providing you with the service in question, the company has little motivation to do anything nefarious to make extra money from you. If you get the service for free, they’re practically obliged to. Another way of looking at it is that, instead of handing over cold, hard cash, you’re handing over a wealth of personal and demographic information about yourself and your social network (in the old-fashioned sense). The value of the latter is difficult to quantify, especially if you have no idea what they’re doing with it.</p>
<p>So, I like Flattr as a consumer because it’s easy, and because their business model doesn’t suggest they’re going to rip me off or sell my personal data to the highest bidder. However, how does it fare as a creator? One key objection, raised by my friend Steven, is that it doesn’t <em>require</em> you to pay for any particular thing you consume. Steven likened this to busking; I think of it more as an honesty box. However, given that the thing being payed for is neither a physical object nor a performance, I don’t think either analogy captures the whole story.</p>
<p>At this stage, it’s impossible to say whether Flattr will soar to ubiquity, or collapse under the weight of spam, fraud or indifference to join the other failed attempts at the side of the road. However, it seems to me to be an interesting experiment, at the very least. Is it an appropriate payment method for everything? Clearly not - you couldn’t rely on Flattr to fund a Hollywood movie, for example. Is it a useful option amongst many? Only time will tell, but I’m happy to spend a bit of pocket money in order to find out.</p>
id:/2010/06/life
Life
2010-06-08T07:31:36+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve been messing around with JavaScript and the new HTML5 canvas element. After a couple of random experiments, I decided that I needed a well-defined goal, and I picked <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway’s Game of Life</a>. Here’s the result:</p>
<center>
<div id="life">You'll need to turn on JavaScript (and have a recent, canvas-supporting browser) to see this.</div>
<script type="text/javascript" src="/2010/06/08/life.js">
</script>
</center>
<p>Hopefully, the interface should be relatively self-explanatory (see the Wikipedia page linked above for details of the game itself). The <em>Save</em> button produces a string representing the game board; to go back to a previous state, paste such a string into the box and hit <em>Restore</em>. The whole thing should work in recent versions of Firefox, Chrome, Safari and Opera. It won’t work in IE, as that browser doesn’t support canvas.</p>
<p>Thing’s I’ve learnt in doing this:</p>
<ul>
<li>The interface to canvas works pretty well, and I’ve not (yet) found any major gotchas between the browsers that support it.</li>
<li>JavaScript is surprisingly good (and fun) language, especially if you stick to <a href="http://javascript.crockford.com/">the good parts</a>.</li>
<li>JavaScript performance varies noticeably between browsers; in particular, Firefox (3.6) seems slower than the others. My hunch is that the difference is in the optimisation of JavaScript’s somewhat unorthodox handling of arrays - this is something I’ll have to look into.</li>
<li>The game works, glacially slowly, on my iPhone 3G, but the editing (which uses onclick) doesn’t. I might fix this.</li>
</ul>
<p>The code is up <a href="http://robhague.github.com/CanvasLife/">on GitHub</a>.</p>
<p><strong><em>Update:</em></strong> I’ve added this entry as my first “thing” on <a href="http://flattr.com">Flattr</a>. Be gentle with me.</p>
id:/2010/04/bring-out-the-gimp
Bring Out The Gimp
2010-04-20T20:03:10+00:00
Rob Hague
rob@rho.org.uk
<p>The Tories have launched <a href="http://www.guardian.co.uk/politics/blog/2010/apr/20/1">a new poster campaign</a> with such a… strong message that I felt compelled to produce my own version. Sadly, I imagine this one would also go down well at <a href="http://conservativehome.blogs.com/">Conservative Home</a>.</p>
<center>
<img src="/2010/04/20/subsistence.jpg" alt="Subsistence is too good for them" />
</center>
<p>(The original image is from <a href="http://www.conservatives.com/News/Photo_Galleries.aspx">here</a> - I’m assuming, given the Quatro thing, they’ll have a sense of humour about this sort of thing.)</p>
id:/2010/04/the-photoshop-election
The Photoshop Election
2010-04-14T07:04:03+00:00
Rob Hague
rob@rho.org.uk
<p>Sod <a href="http://www.mumsnet.com/">Mumsnet</a> - what with <a href="http://mydavidcameron.com">MyDavidCameron.com</a>, <a href="http://www.guardian.co.uk/politics/2010/apr/01/labour-gordon-brown-hard-man">the Guardian’s April Fools joke</a> and the <a href="http://news.bbc.co.uk/1/hi/8601781.stm">Fire Up The Quatro back-and-forth</a>, this is shaping up to be the Photoshop election. I might not know about biscuits, but I <em>do</em> know about hastily cobbled together composite images of questionable funniness. So, here are a couple of efforts based on the recent manifesto launches (actually put together in <a href="http://www.gimp.org/">the GIMP</a>, natch):</p>
<center>
<img src="/2010/04/14/labman.jpg" style="width:270px" alt="Labour Manifesto" />
<img src="/2010/04/14/conman.jpg" style="width:270px" alt="Conservative Manifesto" />
</center>
id:/2010/04/weekend-project-worksheets
Weekend Project: Worksheets
2010-04-01T19:53:32+00:00
Rob Hague
rob@rho.org.uk
<p>Last week, I had need to run some queries against the internal database at work. These weren’t reports that needed to be run forever more, but I wanted to keep a record of them - both the queries and the results. I ended up writing my queries into a text file, evaluating them using Emacs’ SQL mode, and pasting the results back into the file. This worked quite well, but I thought I could do better.</p>
<p>I’ve been wondering about worksheet-style interface, as found in, for example, the <a href="http://www.sagemath.org/">Sage</a> open source maths system. SQL, at least if you’re running SELECT queries, is ideal for this, as each query is independent, so you don’t have to manage things like ordering and mutation. Hence, last weekend, I knocked up a rough draft of what such an interface might look like. I’ve tidied it up a little, and an posted it <a href="http://github.com/robhague/sql_worksheets">here</a>. There’s still plenty to add (support for other databases, UI improvements, some semblance of security), but the basic functionality is there, and it should serve as a basis for further experiments.</p>
id:/2009/12/nanowrimo-2009
NaNoWriMo 2009
2009-12-01T22:48:39+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.nanowrimo.org"><img alt="nano_09_winner_inv_120x240.png" src="/2009/12/02/nano_09_winner_inv_120x240.png" width="120" height="240" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></a></p>
<p>So, November is over. And, fifty-thousand and some words later, I’ve managed to do it again. In the middle of Sunday afternoon, I wrote the last words of <em>Homeopath</em>, a somewhat odd tale of intrigue, rage, and maybe murder. But maybe not. In any case, it’s definitely written, and it’s definitely more than 50,000 words, and so I’ve won <a href="http://www.nanowrimo.org">NaNoWriMo 2009</a>. Go me.</p>
<p>This year, I’m not going to post the entire thing immediately. Instead, I’m going to have a break from it for a while, then revisit and edit it in a month or two. So, no novel in this post, I’m afraid. I can, however, tell you some thing’s I’ve learnt over the last month:</p>
<ul>
<li>Planning helps; I didn’t plan in any detail, and ended up wandering around for 25,000 words setting the scene before I got on with the plot.</li>
<li>Writing in the first person gives me the urge to constantly point out that I don’t necessarily share the opinions of my protagonist. Make of that what you will.</li>
<li><a href="http://www.gnu.org/software/emacs/">Emacs</a> and <a href="http://daringfireball.net/projects/markdown/">MarkDown</a> make for a pretty nice editing environment for prose. <a href="http://willmore.eu/software/isolator/">Isolator</a> is also handy.</li>
</ul>
<p>The main thing I’m intent on taking away from the experience, though, is getting back into the habit of actually doing something substantial - writing something, programming something, practising something - when I get home from work in the evening, as oppose to just collapsing in front of the TV. NaNoWriMo imposed a structure where this wasn’t an option. I’m hoping that I’ll be able to keep it up now that it’s finished.</p>
<p>Finally, two graphs (because graphs are traditional). This first graph shows my progress over the course of the month; basically, things went a bit pear-shaped early on, but I managed to make the time up over the subsequent weeks.</p>
<p><img alt="wordcount_totals.png" src="/2009/12/01/wordcount_totals.png" width="599" height="215" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>
<p>The second graph shows my daily writing rate; the red line marks 1,666 words per day, which is the average rate (more or less) than you need to keep up to make it to 50,000 within the month.</p>
<p><img alt="wordcount_daily.png" src="/2009/12/01/wordcount_daily.png" width="595" height="238" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>
<p>Fascinating, I’m sure you’ll agree.</p>
id:/2009/10/learning-by-experience-and-how
Learning by experience, and how not to do it
2009-10-31T17:09:19+00:00
Rob Hague
rob@rho.org.uk
<p>In 2002, I signed up for <a href="http://www.nanowrimo.org">NaNoWriMo</a>, an insane Internet pseudo-contest to write a novel in a month. I managed it, and you can see the results <a href="http://www.rho.org.uk/archive/nanowrimo/novel1.html">here</a> (be gentle - it was written in a month, and I haven’t revisited it with an editor’s pen). For a few years, I paid it no mind, but this year I seem to be surrounded by people who’re taking up the challenge, so I’ve succumb to peer pressure and <a href="http://www.nanowrimo.org/eng/user/550051#">signed up again</a>. Wish me luck.</p>
<p>P.S. - For anyone who has an nascent novelistic idea (or even a title), and have, say, mentioned it in the pub, then it’s not too late to sign up. You know who you are.</p>
<p>P.P.S. - Regarding the <a href="/2009/09/silverservice-and-snow-leopard.html">previous entry</a>, the bad news is that I’ll not have a chance to work on SilverService for at least a month. The good news is that I’ve already solved the new entry problem, which was the most serious issue with the current version. If you have the OS X developer tools, you can grab the latest version from <a href="http://github.com/robhague/SilverService">GitHub</a> to get the fix.</p>
id:/2009/09/silverservice-and-snow-leopard
SilverService and Snow Leopard
2009-09-24T08:06:34+00:00
Rob Hague
rob@rho.org.uk
<p><img alt="silverservice-nom.jpg" src="/2009/09/silverservice-nom.jpg" width="280" height="311" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" />
Snow Leopard, the latest version of Mac OS X, was billed as “no new features”, but actually comes with a whole raft of minor improvements. One of these is improved handling of Services, a vastly under-rated feature inherited from NeXT. If you’re not up to speed on Services, or the improvements in Snow Leopard, <a href="http://www.macosxautomation.com/services/learn/tut01/index.html">this website</a> has a good overview.</p>
<p>This is of particular interest to me, because it has ramifications for a piece of software I wrote a little while ago: <a href="http://www.rho.org.uk/software/silverservice/">SilverService</a>. Specifically, I <a href="http://twitter.com/robhague/status/3602298300">wondered</a> if the ability to easily creates services in Automator renders SilverService obsolete. One of the areas in which I was thinking of extending the tool was the ability to create longer scripts, something which is definitely catered for well in Automator. However, the Automator approach is somewhat heavyweight, so I think there’s still value in a more focussed tool for one-liners.</p>
<p>With that in mind, I’ve dusted off the (now pretty ancient) source code, and got it compiling under the latest XCode. It basically works, but has at least one major interface bug (newly created services do not appear in the table until you restart the application), and one more minor problem that has been present since the start (the services only work when the application is running). I plan to look into these over the next few weeks, with the aim of producing an updated version with bug fixes but no new features. I’ve also created a <a href="http://github.com/robhague/SilverService">SilverService repository on GitHub</a>, if you want to have a hack yourself.</p>
<p>As ever, if you have any comments or suggestions about SilverService, I’d love to hear them, either via the comments below, <a href="mailto:rob@rho.org.uk">e-mail</a> or <a href="http://twitter.com/robhague">Twitter</a>.</p>
id:/2009/05/linksys-wrt54gs-dhcp-problem
LinkSys WRT54GS DHCP Problem (Mac OS and Linux)
2009-05-03T15:22:53+00:00
Rob Hague
rob@rho.org.uk
<p>On Friday, I decided had a go at fixing the occasional dropped connections I’ve been seeing between Windows machines and my LinkSys WRT54GS (v5,1) router. As part of the process, I upgraded the firmware to what I assumed was the latest version. That was a mistake. After the upgrade, the router’s DHCP server would no longer dole out an IP address to Mac OS X or Linux clients, either wired or wirelessly (Windows XP clients seem unaffected).</p>
<p>It turns out that the solution is to get the <em>latest</em> latest firmware. The Cisco/LinkSys page offers version 1.50.9 of the firmware as the most recent version for most models; this version exhibits the problem. Instead, try version 1.52.2 available here:</p>
<p><a href="http://forums.linksys.com/linksys/board/message?board.id=Wireless_Routers&message.id=74229">LinkSys WRT54GS Firmware version 1.52.2</a></p>
<p>The solution is simple, but took me a while to find. Hopefully, this entry will save time for anyone experiencing similar problems.</p>
id:/2009/04/marketingsocialmedia
Marketing & Social Media - Another Way To Do It Right
2009-04-24T07:04:13+00:00
Rob Hague
rob@rho.org.uk
<p>Many, many people will charge you money to shill your product on Twitter and Facebook. Many people have written many things on why this doesn’t really work, and I won’t rehash those points here. A little while ago, I came across <a href="http://a.wholelottanothing.org/2009/03/this-is-how-social-media-really-works.html">this</a> post describing an example of how social media can help with product marketing - basically, if your product is good, and you don’t actively prevent people sharing information about it, your customers will market it for you. (It occurs to me that you could make the same argument about The Pirate Bay, but that’s a whole other can of worms.)</p>
<p>In any case, yesterday I encountered another way that social media and product marketing can be mixed effectively. The sequence of events went like this:</p>
<p>1) I see a <a href="http://daringfireball.net/linked/2009/04/21/capo">link on Daring Fireball</a> to a <a href="http://supermegaultragroovy.com/products/Capo/">Capo</a>, a Mac application for playing songs in various ways (slowly, looped, and so on) so that you learn them on the guitar.</p>
<p>2) I <a href="http://twitter.com/robhague/status/1594179985">tweet</a> that it looks interesting, but I don’t really have the musical ear to take advantage of it.</p>
<p>3) A little while later, the developer (SuperMegaUltraGroovy) <a href="http://twitter.com/capoapp/status/1594421370">replies</a>, encouraging me to try and learn, and pointing me at a video that might help.</p>
<p>There are two important points here. Firstly, it wasn’t a generic mass-mailed press release, but rather a specific reply to my post. That differentiates it from spam. Secondly, it was clearly from SuperMegaUltraGroovy - they weren’t pretending to be a neutral observer or satisfied customer. That differentiates it from shilling.</p>
<p>The end result is that, from relatively little effort on the part of SuperMegaUltraGroovy, I’ve come away with a very positive impression of the company, and am seriously considering buying a $39 application that I previously only had a passing interest in.</p>
<p>So, it seems there are ways to use Twitter and Facebook to promote your company or products without pissing people off. It also seems like a way that indie developers can differentiate themselves from bigger companies - I can’t see the latter pulling this off without it seeming contrived. We’ll see if this becomes the accepted way of doing things, or if more irritating methods prevail. Given that nobody seems to have figured out a way to make the irritating methods work yet, there’s hope.</p>
id:/2009/04/the-wire
The Wire
2009-04-10T14:55:24+00:00
Rob Hague
rob@rho.org.uk
<p>I’ve finally watched the first episode of The Wire, and I get the impression that might be every bit as good as everyone says it is. One thing that is beyond doubt, though, is that it doesn’t take prisoners in terms of depth or complexity. I don’t think that this is due to the accents or slang - I’ve read in various places that this is a barrier, but I didn’t have a problem - but rather that a very rich and intricate world is thrust upon you in one go. In introducing both a large number of characters and an unfamiliar setting with little preamble or explanation, it does ask a lot of the viewer. For me, at least, this infinitely preferable to being spoon-fed.</p>
<p>Given the BBC’s insane 5-episodes-a-week schedule, combined with the fact that Tori isn’t keen, I’m unlikely to be able to keep up with it for very long, but I’m going to give it a try.</p>
id:/2009/02/the-ties-that-bind
The Ties That Bind
2009-02-22T15:13:00+00:00
Rob Hague
rob@rho.org.uk
<p>The other day, I was reading a web page, and something strange happened. Without warning, a woman in a red uniform appeared, and started pushing things about. “This is it,” I thought, “I’ve cracked. The walls of reality are coming tumbling down.” However, it turned out that I wasn’t, in fact, going mad, but was instead experiencing something I’d been deprived of for quite a few years now; animated banner advertising.</p>
<p>The reason for this brief psychodrama was that I was trying out <a href="http://www.google.com/chrome">Google Chrome</a>. My general impressions of it are almost universally positive, but I switched back to <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a> because of something I didn’t expect: lock-in, where the way a piece of software works makes it difficult or impossible to move to an alternative. Usually, lock-in is something associated with proprietary software and formats, MS Word being a typical example. Firefox and Chrome are both open source, and deal in the open standards that make up the web, so what’s going on?
Firstly, being open source does not prevent lock-in. The issue at hand isn’t the program - in fact, quite the opposite. The less relevant the program is, the better. What’s important is your data, and hence the thing that makes the difference is the format in which the data is kept. In the case of a web browser, the data that it deals with day-to-day is in open, standard formats - HTML, CSS, PNG - so that shouldn’t be a problem. The lock-in comes instead from the configuration. This used to mean bookmarks, but that’s now an all-but-solved problem - pretty much every browser worth considering will happily import your bookmarks from all of the others.</p>
<p>The thing that eventually drove me back to Firefox, and was behind my unexpected visit from the cabin crew, was the lack of extensions. For example, I’m so used to <a href="http://adblockplus.org/en/">AdBlock</a> and <a href="http://noscript.net/">NoScript</a> that I forget that they’re there, until they suddenly aren’t. Hence, as Chrome doesn’t (yet) have either, migrating from Firefox becomes a lot less tempting, regardless of how well the young pretender does everything else (very well, for the record).</p>
<p>Extensions, at first sight, look like an issue of lock-in, as I can’t take the extensions I use in Firefox and run them in Chrome. However, it isn’t - it’s merely a functionality issue. For example, another extension I use a lot is <a href="http://getfirebug.com/">Firebug</a>, a web page development tool. As with the others, this only works in Firefox. However, in this case I don’t really care, as Chrome has pretty good development tools built in. The functionality is what I’m interested in; as long as I can migrate between tools, I can use whichever meets my needs.</p>
<p>So, the main thing that prevented me switching wasn’t really lock-in, but rather that Chrome doesn’t yet meet my needs. However, there is a lock-in issue lurking. <a href="https://addons.mozilla.org/en-US/firefox/addon/748">GreaseMonkey</a> allows me to write user scripts that tweak web-pages in pretty much any way I like. These scripts <em>are</em> subject to lock-in; however long I wait, Google aren’t going to add a switch to Chrome to shuffle around Bugzilla pages to reflect my personal whim. This sort of thing blurs the line between functionality and data, but in lock-in terms is definitely on the side of data. User scripts are essentially a data format, and in fact are not exclusive to GreaseMonkey; <a href="http://www.opera.com/">Opera</a> also supports them, and Chrome is working on it. When the support is there, I’ll be giving Chrome another look.</p>
<p>There’s a similar situation where things don’t work out quite so neatly. There’s an application that I spend most of screen-staring time in even more than a web browser; the <a href="http://www.gnu.org/software/emacs/">Emacs</a> editor. This has the problems of extensions and user scripts writ large - I’ve not only collected a vast array of extension and customised the behaviour of the editor to behave the way I like it, but have produced reams of my own elisp (Emacs Lisp) code to add substantial chunks of functionality that is unlikely to turn up in other applications any time soon. Unlike user scripts, elisp isn’t really an independent format - it’s inextricably bound up with Emacs and the way it works, which in turn consists of more than thirty years of innovation, refinement and cruft.</p>
<p>In theory, you could implement an elisp interpreter in another editor, but if you did one good enough to be useful, then you wouldn’t have a distinct editor any more - you’d just have another version of Emacs. If I ever move to truly different editor, I’ll have to rewrite my custom extensions from scratch, which would be a significant amount of effort. It’s usually easier to extend Emacs to include whatever features I want from the competitor, using yet more elisp. Now that’s lock-in.</p>
id:/2009/01/happy-birthday
Happy Birthday
2009-01-24T18:55:43+00:00
Rob Hague
rob@rho.org.uk
<center>
<object width="326" height="265"><param name="movie" value="http://www.youtube.com/v/R706isyDrqI&hl=en&fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/R706isyDrqI&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="326" height="265" /></object>
<img alt="mac25.jpg" src="/2009/01/24/mac25.jpg" width="275" height="265" />
</center>
<p>This is a Mac SE that I acquired at a Computer Preservation Society give-away a few years back. The 20MB (yes, 20 <i>Mega</i>byte) hard drive is a bit temperamental, but after leaving it next to a radiator for a while I managed to get it to boot on the fifth or sixth attempt. The application shown is, of course, HyperCard.</p>
id:/2009/01/fooled-and-poked-by-random-lia
Fooled and Poked By Random Liars
2009-01-03T12:10:17+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.amazon.co.uk/Fooled-Randomness-Hidden-Chance-Markets/dp/0141031484/ref=sr_1_1?ie=UTF8&s=books&qid=1230987597&sr=1-1"><img src="http://www.penguin.co.uk/static/covers/all/4/8/9780141031484L.jpg" style="float: right; margin-left: 2px;" height="100px" /></a></p>
<p><a href="http://www.amazon.co.uk/Liars-Poker-Playing-Money-Markets/dp/0340767006"><img src="http://217.169.40.204/websites/images/store/books-web/9780340839966-1-2.jpg" style="float: right; margin-left: 2px;" height="100px" /></a></p>
<p>In 2008, the Invisible Hand was caught in the Invisible Till, and markets around the globe crashed in one of those freak, once-in-a-million-centuries events that happens every four or five years. As such, it seemed like a good time to improve my woefully limited knowledge of finance, if only to learn what used to be in that big, smoking crater. To this end, I borrowed a couple of books written by prominent nay-sayers in the field.
The first is <a href="http://www.amazon.co.uk/Liars-Poker-Playing-Money-Markets/dp/0340767006">Liar’s Poker</a>, by Michael Lewis. This is an account of his time at Wall Street trading firm Saloman Brothers during the 1980’s. While mostly autobiographical, it contains a large chunk (around a third) dealing with the emerging mortgage securities market. This doesn’t have the same immediacy as the personal recollections, but the subject matter is particular interesting given the origins of the current, ahem, hiccup.</p>
<p>In fact, the main thing that strikes you reading Liar’s Poker is that, even though it was written twenty years ago, it feels as if it (or something very like it) could have been written today. Lewis himself more or less says as much in a <a href="http://www.portfolio.com/news-markets/national-news/portfolio/2008/11/11/The-End-of-Wall-Streets-Boom">recent article</a>. It’s both worrying and very entertaining, in a schadenfreudery kind of way, but you do need to bear in mind that it was written by one of the winners, someone who got out mostly intact. It needs to be read with a huge heaping of salt, and an understanding of survivorship bias. This leads us onto the next book.</p>
<p><a href="http://www.amazon.co.uk/Fooled-Randomness-Hidden-Chance-Markets/dp/0141031484/ref=sr_1_1?ie=UTF8&s=books&qid=1230987597&sr=1-1">Fooled by Randomness</a>, by Nassim Nicholas Taleb, bears the subtitle “The Hidden Role of Chance in Life and the Markets”. It’s a kind of precursor to the author’s better-known “The Black Swan” (which is waiting for me on my shelf). It covers probability, and people’s general inability to cope with it both intellectually and emotionally. Appropriately enough, given this this subject matter, it manages to be both pleasantly personal and reasonably rigorous, though I get the impression that the author would disavow any claim to the latter.</p>
<p>Much of the technical ground (survivorship bias, sampling, conditional probabilities, reptilian brain) covered seemed familiar, though I couldn’t put my finger on where I’d picked it up. Nevertheless, the presentation is engaging, and a worthwhile overview and refresher. More interesting is the context in which Taleb puts these ideas. His twin causes seem to be scepticism, and an acceptance of human irrationality (especially your own). This raises it above the field of cosy, anecdote-based paperbacks that seem to be required reading for politicians these days. However, possibly I’m exhibiting an emotional response to just having invested time in reading the book. You never know.</p>
id:/2008/11/death-by-typing
Death by typing
2008-11-23T14:07:18+00:00
Rob Hague
rob@rho.org.uk
<p>When I first published the previous entry, I’d mistyped the quote in the title as “You Killed Anne L. Retentive With A Type?” I corrected this, but then an alternative script for the comic in question popped into my head. “Hang on,”, I thought, “hasn’t Dilbert just grown all sorts of groovy, funky Web 2.0 shenanigans that allow you do do those ‘mash up’ things the kids are talking about these days?” (Free tip: if you want to read Dilbert without all of the extraneous bells and whistles, try <a href="http://dilbert.com/fast/">http://dilbert.com/fast/</a>.)</p>
<p>It turns out that you <em>can</em> produce modified versions of comics, but only in fairly limited ways. However, I do still have the GIMP:</p>
<p><img alt="deathbytyping.png" src="/2008/11/23/deathbytyping.png" width="560" height="184" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>
<p>(<a href="http://dilbert.com/fast/2000-03-29/">Original strip</a> at
<a href="http://www.dilbert.com">Dilbert.com</a>)</p>
id:/2008/11/appjet-or-you-killed-anne-l-re
AppJet, or "You killed Anne L. Retentive with a typo?"
2008-11-20T20:52:47+00:00
Rob Hague
rob@rho.org.uk
<p>Tori and Ellie both warned me off it, which pretty much ensured that I would end up read Midnight’s Children by Salman Rushdie. I’ve not found it nearly as heavy going as predicted, but I did notice a couple of, well, idiosyncrasies that grate after a while. And I don’t like grating. Fortunately, at the pub on Sunday, we came up with a solution.</p>
<p>Even more fortuitously, an interesting way to implement said solution drifted across my radar a few days later. <a href="http://appjet.net">AppJet</a> are a start-up that produce a really rather good web application platform. They’ve recently come to wider attention with their real-time collaborative editor <a href="http://etherpad.com/">EtherPad</a>, but I thought I’d start with something more modest. So, without further ado:</p>
<p><a href="http://commaappeal.appjet.net/">The Comma Appeal</a></p>
<p>Read on for my thoughts on the AppJet platform itself.
In short, it seems brilliant. I’ve only had limited experience with it so far, but even after a brief exposure it’s clear they’ve got a lot right. First off, it’s an online application, but you can start using it instantly - no sign-up, no e-mail back-and-forth, just click on the “create an app” link and start coding.</p>
<p>The coding itself is in JavaScript, a language that after a long time in the wilderness is now back in favour. This gives the whole thing the same sort of feel as client-side JavaScript, but augmented with a bunch of libraries to allow access to server-side features. So far, so familiar - there are a number of frameworks, platforms and doohickeys that provide similar facilities. Where AppJet shines, though, is the web-based IDE. The basic setup splits the window in half; the left hand side contains your JavaScript (and HTML and CSS) code, and the right hand side is a preview of the app in development. Whenever you want to see the fruits of your labour, hit the reload button and the preview is updated to reflect your changes.</p>
<p>This isn’t, on the face of it, and earth-shattering idea, but it leads to an incredibly fluid development process. Combine this with the easy creation and distribution tools, and the claims that it’s “the easiest way to program, host, and share your own web app” start to look fairly close to the truth. Even better, the back end is available for download, so you can run it on your own server and avoid putting your application and data at the mercy of the cloud if you want.</p>
<p>So, a very positive first look overall. However, it is only a first look, so maybe the early promise won’t pan out when you try and use it to build something more substantial. That certainly seems to have happened with EtherPad - apparently, they had to make substantial upgrades to the platform in order to get it working as well as they wanted (these changes are due to be released soon). Either way, I’ll definitely be keeping an eye on the platform to see what happens.</p>
<p>Oh, and Anne L. Retentive? <a href="http://dilbert.com/fast/2000-03-29/">Well…</a></p>
id:/2008/11/once
Once
2008-11-15T13:36:45+00:00
Rob Hague
rob@rho.org.uk
<p>“<a href="http://www.imdb.com/title/tt0907657/">Once</a>”, which I saw last night on DVD, is a musical. I’m probably as fond of musicals as any straight man is allowed to admit to being in polite company, but I recognise the problems of the form. Chief amongst these is the violence done to suspension of disbelief when people burst into song for no apparent reason. This just isn’t a normal reaction to, say, unwanted pregnancy, hanging, or Nazis. Passers-by spontaneously springing into oddly well-choreographed dance doesn’t help matters.</p>
<p>Once dodges this particular bullet by framing the songs in a story whose protagonists, being musicians, actually have plausible context for song-bursting-into. Films like <a href="http://www.imdb.com/title/tt0080455/">The Blues Brothers</a> and <a href="http://www.imdb.com/title/tt0101605/">The Commitments</a> have pulled this trick before, but here it is taken further, as the characters are singing about their situation in the manner of a traditional musical, but always in a way that doesn’t rip you out of the narrative. Even when the nameless female lead is wandering down the street in her pyjamas and in song, it’s done in such a way that you could almost, <em>almost</em> believe it might actually happen. Not quite, though - it is, after all, still a little bit of a fantasy.</p>
<p>The film as a whole is enjoyable, touching, and on a small, intimate scale. It feels more like a long TV drama than a feature film. As such, even though I’m not sure it would seem right on the big screen, it works very well on DVD. And very few bystanders dance at all.</p>
id:/2008/11/bread
Bread
2008-11-10T18:58:27+00:00
Rob Hague
rob@rho.org.uk
<p>Tori and I have bread machine and, contrary to the stereotype, we actually use it on a regular basis. Several people have asked for the recipe we use, so I thought I’d put it somewhere that Google could find it.</p>
<ul>
<li>2 teaspoons sugar</li>
<li>1 teaspoons salt</li>
<li>2 tablespoons (30ml) olive oil</li>
<li>300ml water</li>
<li>300g strong white flour</li>
<li>200g strong wholemeal or granary flour</li>
<li>7g (1 sachet) yeast</li>
<li>2-3 dessert spoons of seeds (optional)</li>
</ul>
<p>We get fairly consistent results on the wholemeal (4 hour) programme, or, if you preheat (but <em>don’t</em> boil) the water, the rapid (2 hour) programme. That said, different machines do slightly different things, so experiment. As far as seeds go, we’ve used sunflower, poppy, flax, linseed and alfalfa - they’re all good, so you can mix in a few different types.</p>
<p>Enjoy.</p>
id:/2008/11/hiatus-and-return
Hiatus (and return)
2008-11-09T17:21:02+00:00
Rob Hague
rob@rho.org.uk
<p>When I started the new-look blog, I was aiming to update at least once per week. A cursory glance at the timeline will tell you that, for the last few weeks, I haven’t managed it. I do have an excuse, however - the hard drive in my laptop died a sudden and inexplicable death. I’ve actually been quite lucky in this respect - in the twelve or so years that I’ve had a computer with a hard drive, I’ve only had one other fail on me, which I believe works out at well below the failure rate you’d expect for consumer hard disks - but it’s still a bit inconvenient. While I do have other devices that I could in theory use, you really need a proper, decent-sized keyboard if you’re composing text of any length. That eliminates everything but the desktop PC, which would’ve meant sequestering myself away upstairs instead of being sat on the sofa, still connected to other people. Well, at least it gave me a chance to read more, and get marginally less bad at the guitar.</p>
<p>In any case, I’ve now got and installed a new hard drive (at 320GB and 7200rpm, it’s substantially better than the 80GB/5400rpm one it replaces). Fortunately, I finally caved in and upgraded to OS X 10.5 a few months ago, so relatively recent Time Machine backups meant bringing everything back was a piece of cake.</p>
<p>Now I just need to think of something to write. Damn.</p>
id:/2008/09/how-to-lose-friends-and-aliena
How to Lose Friends and Alienate People
2008-09-29T17:47:00+00:00
Rob Hague
rob@rho.org.uk
<p>We caught another premiere at the <a href="http://www.cambridgefilmfestival.org.uk/">Film Festival</a> on Friday. Well, I say “premiere”, but the stars and red carpet all seemed to be in London a day before. And I say “caught”, but due to a slight mix-up with the time, we arrived half an hour in. On the plus side, they had author Toby Young and producer Stephen Woolley for a Q&A afterwards, and we got to find out that cinemas still have people with torches to show you to your seat.</p>
<p>I have to confess that the trailers didn’t fill me with confidence. However, with a reasonable cast, headed by the excellent Simon Pegg, we decided to give it a shot. I was pleasantly surprised; it’s by no means a classic, but definitely worth the price of admission. The main issue won’t be a surprise anyone who’s familiar with the book - the main character isn’t exactly what you’d call sympathetic. In fact, and it’s a little difficult to figure how to bring this up in a Q&A with the real-world counterpart sitting right there, he’s pretty much a grotesque. They’ve softened him up to allow the narrative to work as a romantic comedy, but as a result, he seems to veer wildly from loveable loser to contemptible creep. Pegg, and to a lesser extent his co-star Kirsten Dunst, save this from disaster with likeable performances, but it still sits slightly uncomfortably at times.</p>
<p>Than again, perhaps I’m being harsh. Maybe the first thirty minutes is pure gold.</p>
id:/2008/09/the-understudy
The Understudy
2008-09-20T13:05:22+00:00
Rob Hague
rob@rho.org.uk
<p>Last night we caught the UK premier of <a href="http://www.imdb.com/title/tt1014808/">The Understudy</a> at the <a href="http://www.cambridgefilmfestival.org.uk/">Cambridge Film Festival</a>, and - assuming it gets a more general release - I’d thoroughly recommend it. The basic story (the tag line, “Dying for stardom she finds a role to kill for”, tells you pretty much all you need to know) could have turned into a schlocky car crash if given the standard Hollywood treatment. However, even though it was filmed in New York, it’s written and directed by a British couple, which might be why its both subtle and very, very dark. The only fault I might find with it is that the plot never really surprises - however, that doesn’t particularly detract from a great film. Highly recommended.</p>
id:/2008/08/hellboy-gets-smart
Hellboy Gets Smart
2008-08-30T13:29:55+00:00
Rob Hague
rob@rho.org.uk
<p>I was intending to start writing up films I’ve been to see, with an individual entry for each. I haven’t quite managed that, so here’s a grab bag of things I’ve seen recently.
First up, <em>Hellboy II: The Golden Army</em>. Going to see the original when it came out a few years ago, I was expecting a fairly standard two hours of mild diversion, but nothing more. In fact, it turned out to be great - visually inventive, a good ensemble cast, and most importantly, never taking itself too seriously. Everyone involved seems to be enjoying themselves immensely, and it comes through in the finished product.</p>
<p>The sequel is more of the same, with a sprinkling of tight white t-shirt flashbacks and a dash of the non-Franco bits of Pan’s Labyrinth. The same sense of fun is still present, and the effects are if anything more impressive. This is possibly the only black mark against the film; the original felt small in scope, which was part of it’s charm, whereas the sequel tries for something more grandiose. As a result, it doesn’t have the same amiable feel. Still, it’s one of the most entertaining films of the year so far.</p>
<p>Next, <em>Get Smart</em>. It’s by no means a classic, but it’s worth seeing. Most heavily-promoted movies starring Steve Carrel leave me cold, and the trailers for this didn’t fill me with confidence, but I’d enough fond memories of the TV show to give it a go. I’m glad I did. Carrel is excellent as Max, the other headline names (Anne Hathaway and Dwayne Johnson) and supporting cast (notably, Masi Oka from Heroes) all acquit themselves with aplomb, and an unexpected, cantankerous bonus appears in the form of Alan Arkin as the Chief (random fact; Arkin also starred with Carrel in the superb Little Miss Sunshine). Another nice touch is that, unlike most of the regular-Joe-is-forced-to-become-field-agent genre (and it is a genre), Smart is actually competent, as well as being a bit of a buffoon. Not an easy trick to pull off, but Carrel manages it.</p>
<p>Finally, a random assortment of slightly less recent films. There isn’t really much to say about <em>Wall-E</em> - it’s Pixar, so even if it was their worst film ever, it would still beat the crap out of pretty much everything else in the box office. In any case, it isn’t their worst film by a long shot - in fact, it’s vying with Toy Story and The Incredibles for my favourite Pixar of all time. The short is one of their best, too. <em>Hot Fuzz</em> isn’t even slightly new, but it’s well worth digging out the DVD, as it just gets better and better every time you watch it.</p>
<p>Finally finally, <em>The Prestige</em> deserves a special mention - fantastic performances and intelligent plotting with genuinely unpredictable twists. The only slight flaw in this gem of a film is the exposition sequence at the end, complete with flashbacks to fill in the gaps. I only just figured out what was going on, dammit! Don’t take that away from me!</p>
<p>Sorry. I’ve calmed down now.</p>
id:/2008/08/a-problem-with-time
A problem with time
2008-08-25T08:15:07+00:00
Rob Hague
rob@rho.org.uk
<p>I recently read a talk by the founder of <a href="http://github.com">GitHub</a> saying that I (and everyone else) should <a href="http://gist.github.com/6443">start a side project</a>. I’ve been thinking that I should do this for ages now, and the author made some good points that provide me with even more reasons to do so. One of thing things that he points out is that you need to allocate a chunk of your free time to working on your project. Fine; that isn’t the problem.</p>
<p>The problem I encountered was when I tried to implement one of his time-freeing suggestions, which was to stop reading RSS, and instead keep up with things on <a href="http://twitter.com">Twitter</a>. This sounded like a good idea, and I’m already on Twitter, so I decided to give it a go. I started to follow John Gruber, author of the excellent <a href="http://daringfireball.net">Daring Fireball</a>, and ran into the problem of the title. John lives in Philladelphia, which is on the east coast of the US (I admit I had to check this on Google Maps). This means that he’s five hours behind GMT. Given that Twitter is a more-or-less real-time service, the difference is immediately apparent. He doesn’t get up and start twittering until fairly late in the day where I am, and he carries on way past my bedtime. The upshot is that I get up and have a bunch of unread tweets, which isn’t all that different to my usual habit of reading RSS over breakfast. I’ll give it another few days, but I suspect I’ll be back on RSS before too long.</p>
id:/2008/08/its-alive
It's Alive!
2008-08-17T15:07:14+00:00
Rob Hague
rob@rho.org.uk
<p>After bashing out a little HTML and CSS, and tweaking Apache config files a bit, www.rho.org.uk has a <a href="http://www.rho.org.uk">new front page</a>, which points (amongst other places) here, so this site it now visible to the outside world. I’ve also created an <a href="http://www.rho.org.uk/archive">archive</a> of the previous (Blosxom-based) site on the off chance it’s of any use to anyone.</p>
<p>Now all I have to do is write some blog entries about something less tedious than configuring blogging software. Hmm…</p>
id:/2008/08/new-look
New Look
2008-08-16T18:06:31+00:00
Rob Hague
rob@rho.org.uk
<p>Just finished tinkering with the look of the new blog; currently, I’ve settled on the standard “Minimalist White” with a custom header background. No doubt it’ll evolve as time goes on, but I’m happy with it for now. For what it’s worth, the <a href="http://www.movabletype.org/design/assistant/">Movable Type Design Assistant</a> proved very useful in trying out ideas. I was less impressed with the way MT itself kept throwing away my changes to the stylesheet when I hit “save”, but that seemed to stop once I turned of syntax highlighting. C’est la vie.</p>
<p>I’ve also added an initial bio page <a href="//about.html">here</a>; it’s not complete yet, but at least it’s more up-to-date than my last one.</p>
id:/2008/07/new-site-new-software
New Site, New Software
2008-07-23T19:52:39+00:00
Rob Hague
rob@rho.org.uk
<p>Anyone who’s been paying attention to http://www.rho.org.uk (which is, to a first approximation, no-one) will have noticed that I’ve not updated it for over a year and a half. The short answer is lethargy; I just didn’t get round to it. For the long answer, read on.
Previously, <a href="http://www.rho.org.uk">http://www.rho.org.uk</a> was a single site running on <a href="http://www.blosxom.com/">Blosxom</a>. In order to get the site looking how I want it to, I’d written a number of templates. And plugins. And hacked the script a bit. It all sort of worked, I enjoyed doing it, and I even appreciated the Perl practice. However, I decided to rearrange things such that entries were organised by date as opposed to category (see <a href="http://www.w3.org/Provider/Style/URI">Cool URIs don’t change</a>), and that’s when the problems started.</p>
<p>In theory, this shouldn’t be too difficult - Blosxom is, after all, a very flexible system, and can do this sort of thing - but to sort out all the details, and to make all my plugins and templates work in the new world, isn’t a ten-minute job. The effect was that every time I felt like writing some actual content for the site, I’d pick up the computer, and think “I need to sort out the script first”. I’d prod at it listlessly for half an hour, but without enthusiasm. After all, that wasn’t what I’d picked up the computer to do. I’d lose interest, and go and do something else. Last week, instead of starting to tweak the script, I checked the public version of the site. The last entry was from eighteen months ago.</p>
<p>I <em>could</em> have knuckled down, dived in, mixed metaphors and fixed the existing setup. However, that sounds a lot like hard work. What’s more, the problems probably wouldn’t stop there - the more I go off-piste with Blosxom, the bigger a rod I create for my own back. I realised that rho.org.uk is something I do for fun, and that what I really wanted was something that worked with the minimum of fuss. I’ve tried the DIY route, and I know I can do it. That doesn’t mean I want to. I want to be writing entries, not messing with Perl and Apache.</p>
<p>So, I decided to start from a clean slate. I’ll keep the old site around as an archive, but I’m not bothering to port the older entries en masse. I’m also separating my blog - (<a href="http://rob.rho.org.uk">http://rob.rho.org.uk</a>) from the main website (<a href="http://www.rho.org.uk">http://www.rho.org.uk</a>), as that gives me more flexibility for any future changes, and means I don’t need to shoehorn pages that don’t make sense (such as the one for <a href="http://www.rho.org.uk/software/silverservice">SilverService</a>) in to a blog structure. Software-wise, I’m using Movable Type - I’ll post more about that later.</p>
<p>I also promise to post more frequently. Honest.</p>
id:/2007/01/thisservice
ThisService
2007-01-25T08:30:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Today, John Gruber <a href="http://daringfireball.net/2007/01/word_count_script_for_thisservice">mentioned</a> a utility called <a href="http://wafflesoftware.net/thisservice/">ThisService</a>, which seems to offer the same sort of thing as <a href="http://www.rho.org.uk/software/silverservice/">SilverService</a>, in a slightly different way. This suggests that there's some interest in the idea, so I might look into dusting off the latter. (If you're interested, <a href="mailto:rob@rho.org.uk">mail me</a> and let me know.)
</p>
id:/2006/06/surprise_delivery
Surprise Delivery
2006-06-22T09:10:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I got into work this morning to find a package on my desk - <a href="http://www.play.com">PLAY.COM</a> had delivered my new <a href="http://ms.nintendo-europe.com/dslite/">DS Lite</a>. This came as something of a surprise, as the official European release date is tomorrow. Not that I'm complaining - it means I get to play Mario Kart DS, which PLAY shipped separately last week.
</p>
id:/2006/03/raising_the_drunken
Raising The Drunken Rant Bar
2006-03-28T12:10:00+00:00
Rob Hague
rob@rho.org.uk
<p>
For the last week or so, I've been dipping into <a href="http://www.cabochon.com/~stevey/blog-rants/">Stevey's Drunken Blog Rants</a>, a disorganised collection of essays written by Steve Yegge, a software engineer at Amazon and now Google. He has lots to say on various aspects of programming, ranging from interviewing to Emacs to lanugauges to continued learning. All good stuff, and he even references Cthulhu and Amber.
</p>
<p>
(Actually, I'm slightly miffed that he's beaten me to the Amber/Lisp simile that's been rolling around in my brain for a while now. Ah well, it's sufficiently obvious that I'd be a little surprised if it hadn't turned up somewhere before...)
</p>
id:/2006/02/when_the_long_tail_w
When The Long Tail Wags The Dog
2006-02-20T13:14:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.bricklin.com">Dan Bricklin</a> (of <a href="http://www.bricklin.com/visicalc.htm">VisiCalc</a> fame) has posted <a href="http://www.bricklin.com/tailwagsdog.htm">When The Long Tail Wags The Dog</a>, an interesting essay on the appeal of general purpose applications (e.g., spreadsheets) compared to specialised ones for popular cases (e.g., tax calculation). His argument is that, given that you can only learn a finite number of tools, you're going to pick at least some general purpose ones, as those are more likely to fulfill your specific needs when said needs diverge from the popular. My view is that he doesn't properly consider hard problems, where solving the problem, in your way or any other, is too difficult or costly for the user, but nevertheless he makes a good point.
</p>
<p>
A good book on the subject is <a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=6799">A Small Matter of Programming, by Bonnie Nardi</a>. The copy I borrowed proved invaluable during my PhD, and I've just picked up a copy to reread (under a tenner on Amazon Marketplace - thanks, <a href="http://www.bournemouth.ac.uk/">Bournemouth University</a>). I'd thoroughly recommend it to anyone interested in end-user programming.
</p>
id:/2006/02/the_bdfl_has_my_phon
The BDFL Has My Phone!
2006-02-14T09:43:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.python.org/~guido/">Guido van Rossum</a> has just <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=148064">got the same phone that I have</a> - the excellent <a href="http://www.europe.nokia.com/nokia/0,,58708,00.html">Nokia 6630</a>. He's raving about <a href="http://www.forum.nokia.com/python">the Python port for Series 60</a>, so I may have to actually get round to using it as opposed to merely having the icon sat in the menu. Actually, I think this will really come into its own when Nokia introduce the E-series in a few months time; two of the models have full QWERTY keyboards (one Blackberry-style, the other folding), which will make using Python (and PuTTY) on the phone a whole lot nicer.
</p>
id:/2005/10/spam_plagiarism
Spam plagiarism
2005-10-05T16:57:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Like a lot of people, I use a bayesian spam filter, trained to sift the crap from the mail I'm interested in. It's pretty good; I can't remember the last time I got a false positive, and most spam goes straight into the junk folder. One or two still get through, though. Appending random poetry to the end of the message worked for a while, but training makes that less effective. However, today I received a message with the following tacked on the end:
</p>
<blockquote>Watching anything from a Michael Moore documentary to a CBC investigative report, I know I like reality. So why do I hate (and I mean that with the full intensity intended by someone who rarely uses that word) reality television shows? Because reality TV isn't insightful commentary. Voyeuristic melodrama that is anything but real has no chance of being more than annoying and boring. I used to think blogs were to e-zines what reality television shows were to dramas. Now, I think the comparison would be more effective if blogs were perceived more like independent film. And reality television scheduled in between soap operas.</blockquote>
<p>
My first thought was that random poetry had become more sophisticated, and vaguely topical. However, as I read it I became less and less convinced. Turns out that this was in fact written by a human; a quick Google search reveals the original post on <a href="http://sleeplessstoryteller.blogspot.com/2005_03_01_sleeplessstoryteller_archive.html">someone's Blogspot blog</a>. This may have been going on for a while, but it's the first time I've seen it. I think it's an interesting development; the blogoshpere is providing spammers with a near-infinite supply of chatty, lucid (more or less) prose that's far more realistic than machine-generated text could realistically hope to be. I'm not sure how effective bayesian filtering will be against such techniques, but my guess is that it more or less neutralises the positive score as an indicator, meaning that the negative score is more important. I'm curious to see what happens.
</p>
id:/2005/10/mccarthy_the_zach
McCarthy - the Zach Braff of Computer Science
2005-10-04T13:15:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Turns out that <a href="http://www-formal.stanford.edu/jmc">John McCarthy</a> didn't just invent <a href="http://www-formal.stanford.edu/jmc/recursive/recursive.html">pretty much all of the concepts in modern programming languages</a> four decades ago, he also <a href="http://www-formal.stanford.edu/jmc/hoter2/hoter2.html">predicted the web</a>. Yes, I know that various people from Vannevar Bush onwards have done so, but it's still impressive.
</p>
id:/2005/10/online_wimps
Online WIMPs
2005-10-03T17:09:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.eyeos.org/">This</a> looks quite interesting; a (fairly successful) attempt to simulate a standard desktop metaphor GUI using dynamic HTML. I don't think it's necessarily the way to go about the problem, though - the desktop metaphor is starting to creak around the edges after three decades - but it's still worth a look.
</p>
id:/2005/09/shiver_me_timbers
Shiver Me Timbers!
2005-09-19T09:19:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Aaar! As ye may well have noticed, today be <a href="http://www.talklikeapirate.com/">International Talk Like A Pirate Day</a>. This day be notable for two reasons; firstly, everyone is talking like a pirate, and secondly, there be significantly more people on the seven seas using <a href="http://www.rho.org.uk/archive/blosxom/plugins/bloglikeapirate">software written by me</a>. Hoist the mainbrace!
</p>
id:/2005/09/internet_history_ma
Internet history, Manufactured for Your Convenience
2005-09-08T10:51:00+00:00
Rob Hague
rob@rho.org.uk
<p>
The <a href="http://www.milliondollarhomepage.com/">Million Dollar Homepage</a> has had a few articles in the press today; basically, someone who's about to start University is flogging permanent space on a mosaic-like page by the pixel (well, by the 100-pixel block), in order to finance his studies. It's brazen, it's novel, and I like it. Good luck to him.
</p>
id:/2005/09/inequality_and_risk
Inequality and Risk and Paul and Tim
2005-09-06T09:21:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.paulgraham.com/">Paul Graham</a> is always worth a read, and his <a href="http://www.paulgraham.com/inequality.html">recent essay on inequality and risk</a> is no exception. It revisits a topic that he's written on before, namely that the economic inequality caused by rewarding productive behaviour (his example, starting a start-up) is a good thing, as it drives people to create wealth, thereby raising the general level of wealth for everyone. I agree with the basic thrust of the argument, but diverge when it comes to the details - for example, how much to tax the rich. <a href="http://www.tbray.org/ongoing/">Tim Bray</a> (he of XML fame) has written <a href="http://www.tbray.org/ongoing/When/200x/2005/09/05/Inequality">an interesting and lucid response</a>. I think my own opinion lies somewhere in the middle of the two viewpoints, but I'm not yet sure exactly where on that line.
</p>
id:/2005/09/justzipit_the_brig
JustZIPit - The bright side of hard disk failure
2005-09-04T13:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>
On Sunday, the hard drive on my PC decided to give up the ghost. Fortunately,
I managed to get the important stuff backed up before it went entirely, but it
does mean I've had to buy a new disk, and spend far too long yesterday and
today reinstalling things (fortunately, as I've got the iBook as well, I can
do work in parallel, but it's still a pain). Anyway, I was casting about for a
free (as in beer) Zip utility for Windows (2000 - I've not got XP), and I came
across <a href="http://free-backup.info/justzipit.html">JustZIPit</a>, a neat
little piece of software that disposes of the overdone UI of WinZip and its
clones, and replaces it with two actions; click on an archive to decompress it
into a folder in the same directory, and select a context menu item to produce
an archive from a file or directory. Nice.
</p>
id:/2005/08/wil_wheaton_is_right
Wil Wheaton is right...
2005-08-23T09:59:00+00:00
Rob Hague
rob@rho.org.uk
<p>
...<a href="http://www.fossil.com/shopping/product/detailmain.jsp?itemID=26508&itemType=PRODUCT&iMainCat=965&iSubCat=1076&iProductID=26508">this</a> <i>is</i> the coolest watch ever.
</p>
id:/2005/08/oops
Oops...
2005-08-21T10:56:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Yesterday, I knocked up a quick CGI interface so that I can post to this site more easily (hidden behind SSL and only accesible via a different hostname, natch). On the plus side, this means that I might update more frequently. On the down side, it means that I managed to accidentally publish several test entries. Oops. Still, normal service has been resumed. I hope.
</p>
id:/2005/07/how_things_work
How Things Work
2005-07-19T09:32:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Almost anyone who grew up in Britain will be familiar with Ladybird books -
small, thin hardbacks that went from basic reading ("Dick has a ball. See the
ball.") to fact-filled fun for older kids such as their "How Things Work"
series ("What's this, grandad?" "It's like <a href="http://www.howstuffworks.com">HowStuffWorks.com</a> in a book." "What's
a book?" etc...). Anyway, someone's gone to the trouble of scanning in the
1971 and 1979 editions of <a href="http://davidguy.brinkster.net/computer/">How Things
Work... The Computer</a>, and they're great. I particularly like the 1971 idea of
"<a href="http://davidguy.brinkster.net/computer/1971/08-09.jpg">A small
digital computer designed for the businessman</a>" (top left).
</p>
id:/2005/06/disaster
Disaster!
2005-06-28T11:36:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I just typed in my name while trying to customize Firefox's search behaviour,
and it seems that <i>I'm no longer the internet's number one source of Rob
Hague related information</i>! This site is only the second hit in
<a href="http://www.google.com/search?q=rob+hague">Google</a>.
Some other <a href="http://www.roberthague.com/">Rob Hague</a> in Australia
has taken the crown. I'll have to think of some way I can regain my Number 1
status, which might be tricky as my eponymous nemesis has <i>actual
content</i> that people may want to look at, as opposed to just a random bunch
of stuff and pictures of <a href="/2002/12/a_christmas_message.html">disected
chocolates</a>. That's just not playing the game.
</p>
id:/2005/05/azuro_lanuched
Azuro lanuched
2005-05-16T20:38:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.azuro.com">Azuro</a> was officially launched today, along
with our power-saving product <a href="http://www.azuro.com/prod/prod01.htm">PowerCentric</a>.
Yay!
</p>
id:/2005/05/ring_my_friend_i_sa
Ring my friend, I said you'd call
2005-05-15T10:47:00+00:00
Rob Hague
rob@rho.org.uk
<p>
As of about 4:20 yesterday, I am now sufficiently qualified to manage a
Kwikimart. Woohoo!
</p>
id:/2005/05/manamana
Manamana
2005-05-10T09:30:00+00:00
Rob Hague
rob@rho.org.uk
<p>
From <a href="http://www.timesonline.co.uk/printFriendly/0,,1-7-1599218-7,00.html">this</a> article on Disney's plan to relaunch The Muppets:
</p>
<blockquote>
<p>As if to illustrate this point, when I contacted Disney its vice-president of corporate communications for Europe replied: "Disney has deemed irreverence as one of the five core equities of the Muppets (humorous, heartwarming, puppet-inspired and topical being the other four)."</p>
<p>I would say that's pretty much case closed.</p>
</blockquote>
<p>
Indeed.
</p>
id:/2005/05/don_t_forget_to_vote
Don't forget to vote
2005-05-05T09:24:00+00:00
Rob Hague
rob@rho.org.uk
<center><a href="http://www.whoshouldyouvotefor.com"><img alt="Who Should You Vote For?" border="0" src="http://www.whoshouldyouvotefor.com/wsyvfbutton.jpg"/></a></center>
<p>
(Especially if you live in March East.)
</p>
id:/2005/02/creative_commons
Creative Commons
2005-02-28T20:40:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've added <a href="http://creativecommons.org">Creative Commons</a> licences
(both human- and machine-readable) licences for the text of the site. Note
that these apply only to the text, and not to images or other stuff (I may
change my mind about that latter). I'm working under the assumption that, if
people want to, they'll copy the material here anyway, so I may as well
make explicit the conditions I'm happy for this to happen under.
</p>
<i><b>Update:</b> This post refers to the previous incarnation to the, prior to the 2008 reboot. At that point, I decided to drop the Creative Commons licenses. If you wish to repulish content on this site, please <a href="mailto:rob@rho.org.uk"</a>mail me</a>.</i>
id:/2005/02/the_cutting_edge
The Cutting Edge
2005-02-06T08:45:00+00:00
Rob Hague
rob@rho.org.uk
<p>
While going through my BlogLines feeds this morning, I came across <a href="http://it.slashdot.org/article.pl?sid=05/02/06/0013217">this</a> article
on SlashDot. It caught my eye because it's about the BroadBand Phone, which
was developed and initially rolled out at AT&T; Labs, Cambridge, during my time
there. My time there before my PhD, <i>four years ago</i>. Honestly, if I
didn't have RSS keeping me up to date with the latest news, I don't know what
I'd do.
</p>
<p>
(Check out the <a href="http://www-lce.eng.cam.ac.uk/~rss39/bbphone/">BroadBand
Phone</a> out, though - it's a cool project, and it's good to know it's
continued in some form despite the closure of the lab.)
</p>
id:/2005/01/the_children_won_t
The children! Won't somebody think of the children!
2005-01-26T11:44:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Understatement of the year so far: <a href="http://www.sun.com/privacy/#g2_7">Sun.com is not structured to attract children</a>. Maybe they've had a problem with hordes of eleven- and twelve-year-olds signing up for <a href="http://www.opensolaris.org/">OpenSolaris.org</a> email...
</p>
id:/2005/01/oh_dear
Oh dear
2005-01-05T20:18:00+00:00
Rob Hague
rob@rho.org.uk
<center>
<a href="http://bbspot.com/News/2003/01/os_quiz.php"><img alt="You are HP-UX. You're still strong despite the passage of time. Though few understand you, those who do love you deeply and appreciate you." border="0" height="90" src="http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/hp-ux.jpg" width="300"><br>Which OS are You?</br></img></a>
</center>
id:/2004/11/firefox_1_0_released
FireFox 1.0 Released
2004-11-09T14:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>
You may not have heard (they've been keeping it pretty quiet), but those crazy
cats at the Mozilla Foundation have released version 1.0 of their lightweight
browser, <a href="http://www.mozilla.org/products/firefox">FireFox</a>. Could
be curtains for <a href="http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html">NCSA
Mosaic</a>...
</p>
id:/2004/11/bloglines
Bloglines
2004-11-07T21:54:00+00:00
Rob Hague
rob@rho.org.uk
<p>
After being a happy user of <a href="http://ranchero.com/netnewswire/">NetNewsWire Lite</a>, I've decided to try out an online news aggregator,
namely <a href="http://www.bloglines.com">BlogLines</a>, in order to have access
to feeds (and, more importantly, the list of which article's I've read and
which I haven't) available in multiple places, across several platforms. A
particularly nice feature of BlogLines is that they have several notifier
applications, including a a FireFox extension, to let you know when there are
new articles to read. I'll try it for a week or two, and then put up a post
about how it's going.
</p>
id:/2004/10/venerable_educationa
Venerable Educational Institution Saved by Caius
2004-10-09T19:35:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Mmm... Chips with mayonnaise...
</p>
id:/2004/09/makes_a_change_from
Makes a change from Viagra
2004-09-22T09:32:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Got into work this morning to find some interesting spam waiting for me. It
begins:
</p>
<blockquote>
You\'re invited to shop for large selection of bombs and different
kinds of rockets such as surface-to-air,
surface-to-surface and weaponry available at reduced price. With the
following types of rockets you will be
able to commit terrorist attacks, destroy buildings, electric power
stations, bridges, factories and anything
else that comes your mind. Most items are in stock and available for
next day freight delivery in the USA.
Worldwide delivery is available at additional cost. Prices are
negotiable.
</blockquote>
<p>
It go on to list todays specials, including cluster bombs and high explosive
fragmentation air bombs. Fuel-air explosives are apparently out of stock.
</p>
<p>
Of course, this could all be a complete con, and you may never get the
megadeath weapons you order. However, if I were looking to defraud someone
for large amounts of money, I'd think twice before picking a mark who was in
the process of shopping around for military hardware. Then again, I'm not the
sort of person who sends out spam, so what do I know.
</p>
id:/2004/09/sensible_title_bars
Sensible Title Bars Under Windows XP
2004-09-21T19:22:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I made a simple but useful discovery today at work; it <i>is</i> possible to
make the title bars on Windows XP a reasonable size without resorting to a
thrid-party skinning tool or the "classic" look (yes, yes - I know the classic
window furniture looks far less like it belongs around The Square Window, but
the toolkit and colour scheme is far better in the XP theme). Just go to the
"Appearance" tab of Display Properties, and click Advanced. Select a title bar
in the illustration, and you can change the font and size, allowing you to
make the title bar smaller. Selecting "System" (which is only available at
10pt) makes the title bar eighteen pixels, which is more or less the same as
Classic. I've no idea why I didn't spot this earlier, but I'm glad I did.
</p>
id:/2004/09/lest_ye_be_forgettin
Lest ye be forgettin'...
2004-09-19T09:30:00+00:00
Rob Hague
rob@rho.org.uk
<p>
...it be <a href="http://www.talklikeapirate.com/">Talk Like A Pirate Day</a>.
Arrrr!
</p>
id:/2004/09/to_buy_one_apple_pro
To buy one Apple product may be viewed as misfortune...
2004-09-05T13:43:00+00:00
Rob Hague
rob@rho.org.uk
<p><img align="right" alt="iPod (Click Wheel)" src="/2004/09/05/ipod.png">
After a year or so of watching my bank balance move monotonically in one
direction (the wrong one), I now have an income again. I celebrated this fact
by splashing out on a 20GB fourth gen
<a href="http://www.apple.com/ipod/">iPod</a>. It arrived on Wednesday, and on
the whole I've been impressed. The design of the thing is, of course,
fantastic. Not only does the iPod itself seem to be getting neater and simpler
with each generation (without sacrificing functionality), but all the little
touches (like the fold-out packaging) cement the impression of a product into
which real thought has been invested. I particularly like the power adaptor -
it's just a transformer with a 6-pin FireWire port in it. As I said, simple.
</p>
<!-- more -->
<p>
The UI is equally clean, well designed and functional. That isn't to say there
isn't room for improvement. As has been mentioned many times, the addition of
the "Shuffle Songs" option is a bit of a red herring. It shuffles your entire
library aside from audiobooks; sounds good, but you quickly realise it isn't
actually what you want. I have a playlist which is all of the songs in my
library, <i>minus the ones that it doesn't make sense to shuffle</i>. I've
collected these tracks - things like the vocal skits on Eminem albums, or
tracks from the end of albums that have twenty minutes of silence followed by
a "secret" ditty - into a "Don't Shuffle" playlist, and made a smart playlist
with the rule "playlist is not Don't Shuffle". Playing this list shuffled by
songs is, of course, relatively easy, but it kind of makes the Shuffle Songs
redundant. A more useful thing to put on the main menu would be the option for
shuffling (by song, by album, or not at all), but while you can add certain
things to the main menu, this isn't one of them. That said, this is purely a
software issue, so it may well get fixed in a future update.
</p>
<p>
Another things that was added in the fourth generation (although I thing a
software update will get the same effect on third generation models) is the
ability to create and save several On-The-Go playlists. I've not really found
much need for this yet, but I have been using one of the other new information
input features, namely the ability to rate songs on the iPod. If something
turns up that I've not heard in a while, I can quickly give it a rating with a
few clicks. This rating then gets transferred back to iTunes next time I sync.
The whole process allows you to rate the songs in your library without having
to sit an go through them all at once, and should prove useful for smart
playlists and Party Shuffle in iTunes.
</p>
<p>
One thing that Apple has cut back on with the latest generation of iPods is
the included accessories; no longer do you get a case or inline remote. With
the 20GB version, they've also left out the dock. This was presumably to get
the cost down, which to me seems fair enough; you can still buy all of the
accessories in question separately, and if you got them all it would bring the
price up to more or less the same as the previous generation. The difference
is, if you don't want, say, the case, you don't pay for it. This is a good
thing, especially given the large and growing range of third-party iPod
accessories available.
</p>
<p>
The only fly in the ointment so far happened this morning. The iPod
spontaneously froze this morning. 49 seconds into "That's Not Me". It wouldn't
respond to button clicks, so I reset it. It now seems fine, and plays the same
song all the way through without complaint. Maybe it wasn't in a Beach Boys
mood earlier. In any case, I don't think it's a big problem, unless of course
it keep recurring, in which case I'll have to investigate further.
</p>
<p>
I've also signed up for a couple of music download services. The first is <a
href="http://www.emusic.com">eMusic</a>. This is a subscription-based service;
the basic package is $9.99 (about six quid) per month/40 tracks. The nice
thing about it is that the tracks are all non-DRM'd MP3s, which means you can
do what you want with them - archive them, play them on Linux or your DVD
player, transfer them to more or less any portable music player. The only
drawback is that they have a relatively limited catalogue. Nevertheless, it's
worth a try - especially as they have a free 100-track trial with no
obligation.
</p>
<p>
I've also signed up for <a href="http://www.apple.com/itunes/store/">iTMS</a>,
but I'm not planning to get much from there, as the songs are DRM'd. Of
course, it's technologically completely ineffective - the system used
(FairPlay) was cracked within days (as it happens, by everyone's favorite
Norwegian teenager, DVD Jon) - and so it only serves to hamper legitimate
users who want to do something that lies outside the very narrow range of
things that Apple deign to allow you. Of course, even without cracking the
DRM, you can always burn the tracks to CD and then re-encode them, but this
leads to a loss of quality, and in any case I object to having to jump through
hoops in order to listen to music that I've paid for using the software and
hardware of my choice.
</p>
<p>
I do like the iPod, though.
</p>
id:/2004/08/stick_em_up
Stick 'Em Up
2004-08-23T23:26:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Peter suggested this on IM last night...
</p>
<center>
<img src="/2004/08/23/stickemup.jpg"/>
</center>
id:/2004/08/still_here
Still here
2004-08-22T16:51:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Just a quick note to say that I'm still here, even though I've not added
anything to the site in a while. I've been a little busy with a whole bunch of
stuff - finishing my thesis, starting at <a href="http://www.azuro.com">Azuro</a>, and moving house. I also unwisely
agreed to run a six-week roleplaying game at the same time. However,
everything's just about finished now, so I should be able to get round to
some site spring-cleaning that I've been meaning to do for a while.
</p>
<p>
First thing, I'll be looking at moving the site over to the <a href="http://www.blosxom.com">Blosxom</a> version 3. I also might change over
to dynamic content, depending on various hosting details. Oh, and I've updated
the design little - now the news half is wider than the static content.
There'll probably be more changes on top of this; watch this space...
</p>
id:/2004/06/inkewrimo
InKeWriMo
2004-06-01T18:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>
If you're at all interesting in open source or Linux (either for it or against
it), you can't have missed the Alexis de Tocqueville Institution's recent
report suggesting that Linus Torvalds couldn't have possibly have written a
kernel that quickly without cribbing the code from Minix. The assertion has
been roundly dismissed by Tannenbaum, Stallman, Torvalds and various others, but
got me thinking; how difficult <i>is</i> it to get a kernel up and running?
Could I do it?
</p>
<p>
Like a pebble causing a landslide, this thought lead inextricably to the idea
of InKeWriMo - International Kernel Writing Month (c.f.
<a href="http://www.nanowrimo.org">NaNoWriMo</a>). A month is perhaps a little
ambitious if you're doing it in your spare time, and I'm more than a little
busy for the next couple of months, but still...
</p>
id:/2004/05/extensible_programmi
Extensible Programming for the 21st Century
2004-05-27T12:31:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've just had my bi-monthly heart attack, when I stumble across something that
seems to scoop my entire thesis, and spend the morning frantically chasing
references to check that it doesn't. In this case, it was a fairly interesting
<a href="http://www.third-bit.com/~gvwilson/xmlprog.html">article</a> (linked
to from <a href="http://developers.slashdot.org/developers/04/05/26/2231214.shtml?tid=126&tid=156">this
SlashDot thead</a>) about "extensible programming", wherein instead of
communicating data between components in terms of streams of characters,
<i>á la</i> the Unix command line, we use something a little more
structured, which at the moment translates as XML. He also brings in a lot of
together other ideas, such as Scheme hygienic macros, in a view that's spookily
similar to my own way of thinking. Worth a look.
</p>
<p>
(In case you're wondering, the thing that worried me thesis-wise was the
fourth footnote, which alludes to the fact that .NET makes translation between
source languages "almost possible" via common intermediate form. I've checked,
and I can't find anything suggesting that anyone actually does this with .NET.
If you're reading this, and know of someone who does, then <i>please</i> <a href="mailto:rob@rho.org.uk">let me know</a>.)
</p>
id:/2004/05/got_one
Got One
2004-05-27T12:12:00+00:00
Rob Hague
rob@rho.org.uk
<p>
After a few weeks of phone calls, interviews and such, I've accepted a job at <a href="http://www.azuro.com">Azuro</a>, a small EDA startup. Now all I have to do is finish this damn thesis...
</p>
id:/2004/05/added_cv
Added CV
2004-05-12T09:28:00+00:00
Rob Hague
rob@rho.org.uk
<p>
As I'm looking for a job at the moment (as well as writing up, which is why
I've not done anything to the site for a while), I've added my CV to my homepage. Enjoy.
</p>
id:/2004/05/clickpod
ClickPod?
2004-05-09T16:13:00+00:00
Rob Hague
rob@rho.org.uk
<p>
The recent <a href="http://www.theregister.co.uk">Register</a>
<a href="http://www.theregister.co.uk/content/39/36030.html">article</a> about
<a href="http://homepage.mac.com/jonassalling/Shareware/Clicker/">Clicker</a>
(a piece of software I'd get in an instant
if it supported my workhorse-like 6310i) got me wondering why Apple hadn't
done something similar themselves (as they've done in the past with other
third party software such as Watson). One thing that did occur is that it
would involve writing software for other people's devices (i.e., the phones),
and that's something they've traditionally been happy to leave to others.
However, there is an alternative route that they could take - the
much-postulated
<a href="http://www.theregister.co.uk/content/archive/28467.html">BluePod</a>
(a iPod with Bluetooth). Think about it; a platform they control,
synchronization software that's already written, and an ideal user interface
for remote controlling things. Even if they don't enable the personal radio
station mode that everyone's focusing on, adding Bluetooth to the iPod would
make the syncing of contacts, calendars and other low-volume data easier, and
would further cement the iPod's place as an accessory to your Mac (a position
that's been diluted a little by the addition of Windows compatibility).
</p>
<p>
Now we just need to convince Apple to make the damn thing.
</p>
id:/2004/05/where_can_you_see_li
Where can you see lions?
2004-05-09T16:12:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Only in <a href="http://www.weebls-stuff.com/toons/29/">Kenya</a>, apparently.
</p>
id:/2004/03/silverservice_0_1_re
SilverService 0.1 Released
2004-03-29T15:10:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.rho.org.uk/archive//software/silverservice">SilverService</a> is a little application
that I had the idea for a year ago, and I got round to writing a couple of
weeks ago. I've tidied it up, and written a ReadMe file, and now I'm foisting
it on the world under the GPL. I chose that particular licence because this is
something that a) I'd like to keep working on, and the GPL might offer a little
bit of leverage when getting permission from a future employer, and b) it's
something that could easily be embraced and extended as a shareware or
commercial app should someone feel like it, unless of course it's copylefted.
</p>
<p>
I'm starting the versioning at 0 because there are still some things I want to
add before I'll consider it to be complete. One is the ability to manage
bigger scripts (as opposed to just one-liners), and the other is some sort of
plugin or extension system.
</p>
<p>
I'd be very interested to hear any comments you have about the software; <a href="mailto:rob@rho.org.uk">mail me</a>.
</p>
id:/2004/03/ram_cureall_or_pan
RAM - Cureall or Panacea?
2004-03-10T16:55:00+00:00
Rob Hague
rob@rho.org.uk
<center><img src="/2004/03/10/ram.png"/></center>
<p>
I've just installed the 512MB SODIMM that I bought with my birthday money
(thanks, guys) into the iBook, and the difference is, well, even better than I
was expecting. Applications launch faster, waking from sleep is near
instantaneous, switching between applications is no longer accompanied by five
or ten seconds of the spinning beachball, the sun is shining a little
brighter, and the shooting pains in my wrists are gone. Is extra RAM the
solution to all of the world's ills? I think it just might be.
</p>
<p>
(I may be exaggerating a tiny bit, but the difference really is remarkable.
Not that the iBook was particularly bad to start off with, but now running
four or five applications at once is that bit smoother.)
</p>
id:/2004/03/best_technical_docu
Best Technical Documentation Ever
2004-03-09T15:25:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Ben has pointed me at <a href="http://poignantguide.net/ruby/chapter-4.html">Why's (Poignant) Guide to
Ruby</a>, which he quite correctly describes as the best technical
documentation ever. Read it and you'll see why. Scarily, it's also got me
(re)interested in Ruby - its full, pouting lips and SmallTalk-like use of
anonymous blocks is threatening to tempt me away from the housecoat / slippers
/ significant whitespace cosiness of Python. It's probably a temporary
infatuation, but you never know...
</p>
id:/2004/02/added_cloth
Added CLOTH
2004-02-01T18:59:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've had the source for CLOTH, a rewrite of a simple library that I wrote at
AT&T;, laying around for a while now (OK, a year and a bit). Anyway, I finally
got round to tidying it up, so <a href="http://www.rho.org.uk/archive//software/cloth.tgz">here it is</a>.
</p>
id:/2004/01/yet_another_way_to_w
Yet Another Way To Waste Time
2004-01-26T10:07:00+00:00
Rob Hague
rob@rho.org.uk
<p>
John Gruber's <a href="http://daringfireball.net/">Daring Fireball</a> is one
of the few blogs that I read regularly. It's always worth a look, and this
morning was no exception; he provides a link
<a href="http://www.folklore.org">Folklore</a>. It's run by Andy Hertzfeld, one
of the team who designed the original Mac, and is basically a repository of
anecdotes about, for want of a better word, “hacker culture”. At
the moment, it's filled with stories from the Mac project, which is a
particular treat given it's 20th aniversary (yesterday). It's like
<a href="http://www.catb.org/~esr/jargon/">the Jargon File</a>, but without
the whole <a href="http://www.catb.org/~esr/jargon/html/politics.html">ultra
right wing neo-conservative gun nut</a> angle.
</p>
id:/2004/01/42_actually
42, Actually
2004-01-14T11:31:00+00:00
Rob Hague
rob@rho.org.uk
<p>
The BBC have a <a href="http://news.bbc.co.uk/1/hi/entertainment/film/3393971.stm">story</a>
about the new, might-actually-happen, Hitchhiker's Guide To The Galaxy movie.
They've cast two of the high points of <i>Love, Actually</i> - Martin Freeman
(Tim in The Office), and Bill Nighy ("Thankyou, Ant or Dec... Kids, don't buy
drugs - become a rock star, and they give them to you for free!") - as Arthur
and Slartibartfast respectively. They're also retaining the vocal talents of
Stephen Moore, the original Marvin ("God. I'm so depressed."). It's nice to
see they're not screwing it up
yet, although they still have to cast almost everyone else. Johnny Depp as
Zaphod? We can only hope.
</p>
id:/2004/01/spot_the_difference
Spot The Difference
2004-01-07T12:00:00+00:00
Rob Hague
rob@rho.org.uk
<p>
To celebrate the 20 years of the Macintosh, Apple have released a <i>very
slightly different</i> version of everyone's favourite <a href="http://www.apple.com/hardware/ads/1984/1984_480.html">Superbowl
commercial</a>.
</p>
id:/2004/01/small_but_useful
Small but Useful
2004-01-05T10:00:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.ragingmenace.com/">Raging Menace</a> has a bunch of little
Mac OS X programs by Alex Harper, and very useful they are too. <a href="http://www.ragingmenace.com/software/sidetrack/">SideTrack</a> is a replacement
driver that lets iBook and PowerBook users reconfigure the trackpad to provide
scrolling areas, tap-to-right-click and on. <a href="http://www.ragingmenace.com/software/menumeters">MenuMeters</a> provides a set of
neat meters for memory, CPU usage and so on, that don't take up much screen
real estate; I've found it particularly useful to confirm that it is indeed
more memory that I need, not a faster processor (when the paging indicator
goes off the scale, that's a hint). I'll probably have a look at <a href="http://www.ragingmenace.com/software/sleeptight">SleepTight</a> at some point
too. It gives Jaguar the Panther-like functionality to lock the screen when
the machine sleeps. Handy when you're carting the machine round, but I'm only
using the iBook at home at the moment, so I don't really need it just yet.
</p>
id:/2003/12/dave_didn_t_whack_my
Dave didn't whack my google, but it is nevertheless whacked
2003-12-29T15:25:00+00:00
Rob Hague
rob@rho.org.uk
<p><img align="right" alt='"Dave Whacked my Google"' src="/2003/12/29/davebadge.jpg"/>
A few months ago, I was meant to be going to Dave Gorman's Googlewhack
Experience, but unfortunately had to cancel at the last minute as it was
inconveniently on the night I was flying out for UbiComp. Tori saved me the
badge pictured as a souvenir. Another consolation prize arrived yesterday in
the form of an e-mail from one Phil Bradley (who I don't know, but it goes to
show that not all unsolicited e-mail is unwelcome). It cheerfully informed me
that I was a googlewhack for <a href='http://www.google.com/search?q=gesticulating+taramasalata"'>gesticulating
taramasalata</a>. Yay the internet.
</p>
id:/2003/12/i_ve_been_registered
I've been Registered
2003-12-17T13:51:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I got a name-check in <a href="http://www.theregister.co.uk">The Register</a>
today, for my sort-of-entry into their <a href="http://www.jennicam.com">Jennicam</a> <a href="http://www.theregister.co.uk/content/28/34564.html">eulogy
competition.</a> I'd like to
thank my agent, and Tori, who pointed out the typo in the first place, and...
</p>
id:/2003/12/metadata_good_and_b
Metadata, Good and Bad
2003-12-11T15:59:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.w3.org/RDF/" title="RDF Resource Description Framework">
<img align="left" alt="" border="0" src="http://www.w3.org/RDF/icons/rdf_w3c_icon.48"/></a>
I've been looking into <a href="http://www.w3.org/RDF/">RDF</a>
recently, as I'm writing an XML-based bibliography tool (by the way,
if anyone knows of an existing RDF vocabulary for describing citations
in journals, please, please, <i>please</i> <a href="mailto:rob@rho.org.uk">mail me</a> and let me know what it is),
and it looks pretty useful for a variety of things, including a
messaging/blogging/browsing thingy I've been vaguely thinking about
for a while now - more when and if I get round to writing it.
</p>
<p>
Anyway, while scouring the web for resources (there are lots, as long
as what you're interested in is RSS; I'm not), I came across a nice
<a href="http://www.well.com/~doctorow/metacrap.htm">antidote to
metadata</a>. Handy to bring you down to earth if you're getting
carried away with the whole semantic web thing.
</p>
id:/2003/12/towers_as_far_as_th
Towers, As Far As The Eye Can See
2003-12-11T11:28:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I don't normally just re-list links from other sites, but I found <a href="http://www.kernelthread.com/hanoi/">this link</a> on <a href="http://www.slashdot.com">SlashDot</a> (which I made a resolution
not to read years ago, and haven't, but I've subscribed to the RSS
feed for the links), and I couldn't resist. Go programming silliness.
</p>
id:/2003/12/deck_the_halls_with
Deck The Halls With Boughs Of Holly
2003-12-09T13:16:00+00:00
Rob Hague
rob@rho.org.uk
<p>
It's that time of year again; carol singers roasting on an open fire
and whatnot. Last year, Tori persuaded me that it was a good idea to
go halves on a seven foot six artificial tree, which was a good idea
with the high ceilings of the place I was in last year, but a bit
dodgier in our current flat. Nevertheless, it came up in
conversation, so I risked life and limb getting it out of the loft
(we don't have a ladder), and set it up.
</p>
<p>
I'd just finished, and we were decorating it, when Tori pointed out
that you're not meant to put decorations up until the 19th. So I'm
not allowed to turn the lights on, and it's sitting forlornly in the
corner looking unilluminated and slightly sad. I'll post a picture of
the tree in all it's glory when she lets me switch it on.
</p>
id:/2003/12/poplee_will_bleeive
Poplee will bleeive ayhinntg they raed
2003-12-03T09:13:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Anyone with an e-mail address has probably seen the meme that begins
"Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy...", and claims that it's
as easy to read a sentence where the letters in the words are reordered, apart
from the first and last, as one where they're not. It's very convincing, until
you realise that <i>it doesn't work</i>. <a href="http://www.mrc-cbu.cam.ac.uk/personal/matt.davis/Cmabrigde/">This
page</a> picks it apart bit by bit.
</p>
id:/2003/11/nxml_mode_how_xml_s
nXML-mode: How XML should Work
2003-11-19T16:56:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.jclark.com/">James Clark</a>, writer of <a href="http://www.jclark.com/xml/expat.html">expat</a>, editor of the <a href="http://www.w3.org/TR/xslt">XSLT Recommendation</a> and all-round XML
genius, has done it again, by writing an XML editing mode for Emacs that
doesn't suck. In all fairness, PSGML-mode isn't terrible - I wouldn't have been
using it daily for the last few years if it was - but it was an SGML editor
with XML functionality bolted on, which meant it was unnecessarily
complicated, and couldn't do anything useful without a DTD. <a href="http://www.thaiopensource.com/download/">nXML-mode</a> is still in
alpha, and doesn't have a pretty download page yet, but is nevertheless the
bee's knees, the dog's bollocks, and almost any other part of any animal you'd
care to name (except, perhaps, the dingo's kidneys). It's based on RELAX NG
schemas (and comes with XHTML, XSLT and DocBook out of the box), works fine
without any validation, supports namespaces, and autocompletes like a dream.
Hoorah!
</p>
<p>
(It may seem like I'm getting a little overexcited about Yet Another Emacs
Mode, but I'm getting my head down to write my thesis, and hence will be
writing even more XML than usual over the next few months, so I welcome this
like a plumber would welcome a new, revolutionary sort of self-assembling
pipe. Or something.)
</p>
id:/2003/11/news_is_dead_long_l
News is dead! Long live News!
2003-11-12T13:55:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://gmane.org"><img align="left" alt="Gmane" border="0" height="50" src="http://gmane.org/img/gmane-50.png" width="51"/></a>
A few weeks ago, <a href="http://www.ntk.net">NTK</a> mentioned <a href="http://www.gmane.org">GMane</a>, a mailing-list to NNTP gateway. I
never really got into the whole newsgroup thing, so I didn't pay much
attention. However, last week I noticed that the traffic from the <a href="http://www.blosxom.com">blosxom</a> mailing list was getting a little voluminous,
and realised that a newsreader would probably be a better tool to handle it. I
gave GMane a try, and indeed, it's far better. I'd recommend it to anyone
subscribed to mid- to high-volume public mailing lists.
</p>
id:/2003/11/cooluri_0_2
CoolURI 0.2
2003-11-12T11:02:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've added a requested feature to the <a href="http://www.rho.org.uk/archive/blosxom/plugins/cooluri">CoolURI</a> Blosxom
plugin; it'll now provide default flavours for URIs of the form
<tt>blosxom.cgi/path/to/entry</tt>, where "entry" is an entry as opposed to a
category.
</p>
id:/2003/11/alas
Alas...
2003-11-06T12:36:00+00:00
Rob Hague
rob@rho.org.uk
<p>
... I've decided not to do <a href="http://www.nanowrimo.org">NaNoWriMo</a>
this year. I have a thesis to be writing.
Good look to everyone who is, though. As a side note, I've repaired the broken
links to <a href="/2002/12/i_may_live_to_regret.html">last year's "novel"</a>. At some
point, I may even get round to editing it. But don't hold your breath.
</p>
id:/2003/11/the_league_of_extrao
The League of Extraordinary Gentlemen
2003-11-03T15:37:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Usually, "comic book" is a term of derision as far as films are concerned. In
this case, though, the source material is Alan Moore's excellent graphic
novel, so it'd be more of a complement. Which means we're going to have to
find a new term of derision, because the film is appalling. To be fair, I was
watching it on a nine inch screen in the back of the seat in front of me, and
the tape kept jumping, so I probably didn't get as much from the special
effects as I would've done on the big screen, but this just meant that I paid
more attention to the script. Oh, the script...
</p>
<!-- more -->
<p>
The original graphic novel was multi-layered, intelligent, and the
characterization was superb. The film version has none of this; the dialogue
rarely rises above merely functional, serving to bridge between one explosion
and the next, and at its worst vying with whichever Batman sequel had Mr
Freeze in it ("Batman! There's a new villain attacking the museum!"). The story
had been almost entirely replaced, which wouldn't necessarily be a bad thing,
if the new one wasn't so nonsensical. And the characters have been cut to
ribbons. Whereas, for example, Alain Quatermain was, in the comics, a
washed-up opium addict, he's been cleaned up for the film, and given a dead
son to make up for the morphine. Hyde is reduced to a misunderstood lunk, and
the invisible man becomes a mockney thief, straight out of Carry On Up The
Twightlight Zone.
</p>
<p>
The one improvement over the original comes in the form of Dorian Grey, played
by Stuart Townsend (of Shooting Fish fame; anyone who knew me as an
undergraduate could tell you I'm slightly partial to said film). He has all
the best lines, and steals the screen whenever he's on it. This is a marked
contrast to Tom Sawyer, who, while not actually bad in any particular way, is
entirely superfluous. A marksmen? We've already got Quatermain. A substitute
son for the latter? A needle would've been better. Love interest for Mina?
Dorian blows him out of the water. About his only contribution is that he's an
American in what is otherwise an almost exclusively European League (with the
exception of Nemo, who has remained Indian, although he <i>has</i>
mysteriously gained Kung Fu).
</p>
<p>
In all fairness, LXG (as Twentieth Century Fox are encouraging people to refer
to it) doesn't nearly approach the nadir of last summer (Head and Shoulders,
anyone?), but I was expecting so much more. The concept is intriguing, and the
comic is superb. Unfortunately, the film doesn't live up to this.
</p>
id:/2003/10/argh_my_life_points
Argh! My Life Points!
2003-10-28T18:46:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've just caught an episode of <i>Yu-Gi-Oh!</i>, one of the current batch of
lazily-animated Japanese tie-in cartoons, designed to sell things. In this
case, it's a collectable card game, but the brilliant thing is that the
cartoon seems to be entirely about <i>people playing the card game</i>. Now I
know that Pokemon involved people involving engaging in the same sort of
things that characters in the game do, Yu-Gi-Oh actually centres around two
people standing around in little pods, drawing cards from a deck, and taking
turns. They shout card names at each other, speak <i>sotto voce</i> to camera
to explain their tactics, and wax lyrical about the rules for minutes at a
time. Sheer genius, from a marketing point of view, at least.
</p>
id:/2003/10/le_fin_de_concorde
Le fin de Concorde (or something)
2003-10-24T10:56:00+00:00
Rob Hague
rob@rho.org.uk
<p>
In case you'd not noticed, today marks <a href="http://news.bbc.co.uk/1/hi/uk/3209837.stm">the final flight of
Concorde</a>, the
worlds only supersonic commercial air liner. No longer will you be able to
experience three-hour London to New York flights with an odd combination of
in-flight vintage champaign and a passenger compartment as spacious as a
National Express coach (apparently; I've never flown on it). A couple of
high-profile safety problems didn't help, but the real problem was the cost;
there were never enough harried executives desperately wanting day trips to
New York to cover the inordinate cost of the fuel. If there had been more
demand, the price would've come down, other supersonic air liners would've
been built, and we probably wouldn't notice the decommisioning of Concorde. As
it is, comercial supersonic travel is, at least for now, consigned to the
history books along with that long pointy nosecone.
</p>
<p>
White elephant of the skies, we salute you.
</p>
id:/2003/10/transglobal_emporium
Transglobal Emporium - for all your luxury shed and caravan calendar needs.
2003-10-23T17:21:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I forgot to link to this last year, but I simply couldn't pass up the chance
again. <a href="http://www.transglobal-emporium.com/">Transglobal
Emporium</a>, purveyors of the classic <a href="http://www.transglobal-emporium.com/products/shed-calendar-2004/index.html">Luxury
Shed Calendar</a>, have added the <a href="http://www.transglobal-emporium.com/products/caravan-calendar-2004/index.html">Luxury Caravan Calendar</a> to their range. Both would make <a href="http://www.transglobal-emporium.com/products/shed-calendar-2004/index.html">tasteful
additions to any home, or <a href="http://www.transglobal-emporium.com/products/caravan-calendar-2004/index.html">delightful
christmas gifts</a>.
</a></p>
<p>
A must for any lovers of <a href="http://www.transglobal-emporium.com/products/shed-calendar-2004/index.html">Sheds</a>
or <a href="http://www.transglobal-emporium.com/products/caravan-calendar-2004/index.html">Caravans</a>.
</p>
id:/2003/10/the_beginning_of_the
The Beginning of the End
2003-10-20T19:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>
It's the last talk, and they're about to turn off the WiFi, so this'll be my
last entry 'til I get home. It's been a good conference; I've heard about and
seen some interesting work, met a lot of fun people, and drank quite a bit of
surprisingly good Seattle beer. One thing I've noticed is that I seem to fall
naturally into the role of devil's advocate; I'm defending arty projects and
ethnography to systems people one minute, then electronics and tracking
systems to HCI people the next. It's nice that there's such a range of
specialities at one conference; I hope it stays that way, as opposed to
fragmenting into narrower venues.
</p>
id:/2003/10/patent_pending
Patent Pending?
2003-10-20T19:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've just seen a presentation of a great piece of work from Mitsubishi
Research. Basically, it allows you to use a normal LED to sense light levels,
with only a microcontroller and a single extra trace on your PCB. This means
it can be added to a device that already has an LED and microcontroller at
give or take zero cost. What's more, as you now have both an emitter and a
receiver, you can use it for short range bidirectional communication. It's
very clever, very useful, and, unfortunately, very patented.
</p>
<p>
Now I'm not sure how I feel about this. Unlike, say, the one-click shopping
patent, there are no technical grounds to object to it. It's original,
non-obvious, and hasn't been done before. It's a piece of apparatus, and it
solves a real problem (many patent systems require a physical instantiation
and/or usefulness). However, it seems a crying shame that the technology can't
be freely used and incorperated into other devices. The patent system was
designed to protect the original inventors, allowing them to exploit the
invention for a time while guaranteeing that it's (eventually) available to
the public. This seems a laudable aim, but loses it's lustre when the
exploitation rights are assigned to a corporation. I don't think that's really
what's bothering me, though. I think it's that in this case, patenting the
technology both reduces the potential for research, but also reduces the
chance of wide dissemenation of the technology - even a slight per-device
license fee would significantly reduce the cost benefit of the technique.
Still, it was a very cool paper.
</p>
id:/2003/10/my_contribution
My contribution...
2003-10-20T19:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I've just taken down the poster that I've been displaying (well, that a
pinboard has been displaying on my behalf), and it occured to me that I should
probably make it available online.
<a href="/2003/10/20/poster.pdf">So here it is.</a>
I'm planning to do a proper page for the
<a href="http://www.cl.cam.ac.uk/Research/Rainbow/">Rainbow Group site</a> in
the next week or so, which would serve to fill out the details somewhat.
</p>
id:/2003/10/i_be_due_for_a_keel
I be due for a keel-hauling
2003-10-20T19:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>In honour of <a href="http://www.talklikeapirate.com">International
Talk-Like-A-Pirate day</a>, I've knocked together another
<a href="http://www.blosxom.com">Blosxom</a> plugin -
<a href="http://www.rho.org.uk/archive/blosxom/plugins/bloglikeapirate">Blog-Like-A-Pirate</a>. It also works from the command line, in case
you're not a Blosxom user. Now there's no excuse for sounding like a
scurvy landlubber.</p>
id:/2003/10/cool_uris
Cool URIs
2003-10-20T19:20:00+00:00
Rob Hague
rob@rho.org.uk
<p>As of this morning, I've officially released my first
<a href="http://www.blosxom.com">Blosxom</a> plugin -
<a href="http://www.rho.org.uk/archive/blosxom/plugins/cooluri">CoolURI</a>.
It allows the use of extension-free, date-based permalinks, like
the ones described in
"<a href="http://www.w3.org/Provider/Style/URI">Cool URIs don't
change</a>". It's pretty simple, but does the job well enough for
now, and means that when something better comes along I won't need to
change the URLs again. Which is the entire point.</p>
id:/2003/10/popped_my_ebay_cherr
Popped my eBay cherry
2003-10-19T18:30:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Today is a momentous day. Bands played, speeches were made, ribbons were cut.
Or they should've been, for today is the day I put my first item up for sale
on eBay. Actually, it's Tori's item; her iBook, that she doesn't use any more
now she's here with access to my PC (which I tend to spurn in favour of my own
iBook). Anyway, the auction is
<a href="http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&item=2760421507">here</a>
if you're in the market for a robust, cute-looking laptop with a firewire
port.
</p>
id:/2003/10/licensing_rant
Licensing Rant
2003-10-16T11:07:00+00:00
Rob Hague
rob@rho.org.uk
<p>The software on this site is licensed under a variety of
<a href="http://www.opensource.org">OSI</a>-approved open
source licences. UnityWiki is unambiguously a derivative work
of PikiPiki, which is covered by the
<a href="http://www.fsf.org/licenses/gpl.html">GPL</a>, and
hence is distributed under the same licence. The two original
projects, Bookaroo and Newfile, are licensed under the
<a href="http://opensource.org/licenses/mit-license.html">MIT
Licence</a> (basically equivalent to the
advertising-clause-free version of the BSD licence).</p>
<!-- more -->
<p>Ideally, I'd like to distribute things under a slightly
more restrictive licence; one that forced derivative works to
be licensed under similar terms, but didn't impose any
restrictions on other work that is merely combined with it in
the way that the GPL attempts to (I think that the GPL is on
shaky ground there, as it seems to try and extend the
definition of "derivative work", but in any case I'd rather
have a licence that explicitly permitted distribution of
combined works under different terms).</p>
<p>The LGPL is sort of right, but I don't like the wording; it
seems overly complicated, and overly specific in places (for
example, it uses the words "object files" - not a useful
concept if you're trying to licence software written in
Python, or even Java). Apparently, the <a
href="http://opensource.org/licenses/mozilla1.1.php">Mozilla
Public License 1.1</a> would do what I want, but according to the
<a href="http://www.fsf.org">Free Software Foundation</a> it's
not compatible with the GPL, and the resulting restriction is
as bad as a restriction to only link with GPL-compatible
software. The Mozilla project themselves get round this with a
triple-licensing approach (MPL/GPL/LGPL), but that seems a bit
messy. Hence, as BSD-style licence seems to be the best bet
for now - it also has the advantage that it doesn't limit your
options in the future. Maybe this is the way to go long-term;
after all, I'm not trying to push any free-software agenda or
anything. It'd just be nice to ensure that improvements to the
software could be incorporated back in to the main tree.</p>
<p>If you've got any suggestions or comments about this issue,
I'd be <a href="mailto:rob@rho.org.uk">glad to hear them</a>.</p>
id:/2003/10/talking_about_talkin
Talking about Talking
2003-10-15T17:53:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I'm sat in a talk about blogging, so it seems appropriate that I should tell
the world via the wonder of RSS. I should probably
start listenting again now, though.
</p>
id:/2003/10/i_m_blogging_this_ri
I'm blogging this right now
2003-10-13T20:21:00+00:00
Rob Hague
rob@rho.org.uk
<p>
I'm writing this from <a href="http://www.ubicomp.org">UbiComp</a> in Seattle;
just in case you don't believe me, here's photographic evidence:
</p>
<center><img src="/2003/10/13/spaceneedle.jpg"/></center>
<p>
I've only skimmed over the programme so far, but there looks to be a lot of
interesting stuff here.
This afternon I've got to do a one-minute talk to persuade people to come and
see my poster. At some point, I should probably decide what to say.
</p>
id:/2003/10/the_other_king_is_de
The Other King Is Dead...
2003-10-02T09:51:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.brunching.com">The Brunching Shuttlecocks</a> may be no
more, but various bits of the site live on at
<a href="http://www.selfmadecritic.com/">The Self-Made Critic</a>,
<a href="http://www.bookofratings.com/">The Book Of Ratings</a>, and, as of
today, <a href="http://www.lorebrandcomics.com/">Lore Brand Comics™</a>.
<a href="http://slumbering.lungfish.com/">Slumbering Lungfish</a>, Lore's
blog, is also worth a look.
</p>
id:/2003/10/coke_uses_gps_to_tra
Coke uses GPS to track prizewinners
2003-10-01T10:05:00+00:00
Rob Hague
rob@rho.org.uk
<p>
It looks like UbiComp-like location aware technologies are making their way
into the mainstream. Apparently Coke are planning to use
<a href="http://www.indystar.com/print/articles/6/078419-4506-031.html">GPS
receivers in winning cans</a>
to seek out people and present them with HumVees or large amounts
of gold. I'm not they've really thought this through - aside from the
technical issues of putting a GPS recevier in a can (what happens if you open
the can underground? Or on the wrong side of a tall building? Or in a
reasonably thick tent?) , I don't really think that buying a can of carbonated
beverage with vegetable extract can reasonably be taken to imply that you give
your consent for a multinational corperation to track your movements. Maybe
there's a shrink-wrap EULA on the ringpull, but even then it's probably
a case for Lord Denning's Big Red Hand.
</p>
id:/2003/09/fun_with_ntl
Fun with NTL
2003-09-28T15:27:00+00:00
Rob Hague
rob@rho.org.uk
<p>
Having spent far too much of <i>another</i> Sunday trying to work out where
the problem with the web is due top my ISP or Safari having one of it's spats,
I've learnt two things. One is that NTL tech support operators are somewhat
startled if the first thing you say to them is "Your web proxy
inktomi1-cam.server.ntl.com drops the connection if you send it an HTTP POST
request longer than about 1.1k", and the other is that
<a href="http://homepage.ntlworld.com/robin.d.h.walker/cmtips/index.html">this
site</a>, that Ben pointed me at last time this happened, has all the answers.
(To be fair, once the NTL guy had got over the intial shock, he did give me
the list of alternative proxy servers, but they were only numeric IPs, which
for some reason didn't work on Mac OS X).
</p>
id:/2003/09/mmm_blowfish
Mmm... Blowfish...
2003-09-28T11:10:00+00:00
Rob Hague
rob@rho.org.uk
<p>
After looking for ages, I've recently found
<a href="http://www.dreamflow.nl/projects/sshkeychain">SSHKeychain</a>, an
Aqua-integrated ssh-agent thaat works the way I want it to. Other agents have
done the job adequately, but SSHKeychain has a bunch of little features that
make it stand out from the crowd. It'll run in the menubar (so it doesn't take
up space in the dock), but more importantly it makes use of the Keychain. Not
only can you store your passphrases in there, but the agent can forget keys
when the machine sleeps, and ask you for the (Keychain) passphrase on wake, or
the next time the agent is accessed.
</p>
<p>
Now I just need to get round to sorting out an on-demand wrapper for SSH
tunnels...
</p>
id:/2003/09/prepare_to_be_boarde
Prepare To Be Boarded...
2003-09-19T11:53:00+00:00
Rob Hague
rob@rho.org.uk
<p>...For it be <a href="http://www.talklikeapirate.com">International Talk
Like A Pirate Day</a>. Yar! Shiver me timbers, splice the main brace, and so
forth. (Note to self: avoid calling Tori "wench", lest ye be forced to walk
the plank)</p>
<p>(Avast, I be raising a flagon to shipmate
<a href="http://www.jclark.org/weblog">Jason Clark</a>, who be joining me in
<a href="http://www.rho.org.uk/archive/blosxom/plugins/bloglikeapirate">Blogging-Like-A-Pirate</a>. Aaarrr!)
</p>
<p><b>Update:</b> <a href="http://homepage.ntlworld.com/linnorm">Simon</a> has
piratised his web page in admirably minimalist fashion, and of course one of
my favourite comics is officially <a href="http://www.itswalky.com">It Be
Walky!</a> for the day. Yarrr!</p>
id:/2003/09/now_powered_by_blosx
Now Powered By Blosxom
2003-09-19T11:36:00+00:00
Rob Hague
rob@rho.org.uk
<p>Phew. That was a hairy ten minutes or so. I managed to completely trash my
docroot directory whilst trying to move the testing and ready Blosxomed website
to the new host (called, with absolutely no connection to Steven Kitson,
"ocelot"). For some reason, rsync didn't seem to want to do the right thing.
Anyway, it's all sorted out now, so the site is officially generated by
Blosxom (statically at the moment, but I plan to have a mixture of static and
dynamic eventually). Archives are all there, but not linked to - I'm planning
do some reworking over the weekend, now everything is in place.</p>
id:/2003/09/still_blosxoming
Still Blosxoming
2003-09-08T09:57:00+00:00
Rob Hague
rob@rho.org.uk
<p>As Tori was away at the weekend, I got the chance to sit
down and get my head around <a href="http://www.blosxom.com">Blosxom</a>.
Once I'd reminded myself that XML is a means to an end, and
not an end in itself, I started to see ways in which I could distort it
to fit my own weird designs. I've now just about got it doing what I
want, but things need a little bit more polishing before it goes
live.</p>
id:/2003/09/good_thing_bad_thin
Good thing, bad thing
2003-09-03T16:45:00+00:00
Rob Hague
rob@rho.org.uk
<p><b>Good Thing:</b> Getting a poster accepted at <a href="http://ubicomp.org">UbiComp 2003</a>.</p>
<p><b>Bad Thing:</b> Said conference clashing with the night I'm meant to
be going to see Dave Gorman's Googlewhack Thingummy. Dammit.</p>
id:/2003/09/to_blosxom_or_not_t
To Blosxom, Or Not To Blosxom
2003-09-03T16:44:00+00:00
Rob Hague
rob@rho.org.uk
<p>That is indeed the question. I'm 90% finished with my ad hoc Python
Script, but the more I think about it, the more sense it makes to use <a href="http://www.blosxom.com">Blosxom</a>
in the long run, as I get to leverage all of the great plugins people write
for it (and would probably contribute one or two of my own). I think I've
figured out a way to do what I want to do with it, so this weekend I
might suffer the slings and arrows of outrageous Perl and try
again.</p>
id:/2003/07/why_1984_wasn_t_like
Why 1984 wasn't like "1984"
2003-07-23T11:08:00+00:00
Rob Hague
rob@rho.org.uk
<p>Apple's famous commercial for the release of the Macintosh,
shown during the 1984 Superbowl, is probably one of the most
famous, and most effective, TV ads in histroy.
<a href="http://www.duke.edu/~tlove/mac.htm">This page</a>
not only has a Quicktime version of the ad, but also has an
interesting scholarly analysis of what it means, and where it
sits in a wider context.</p>
id:/2003/06/look_at_me_ma
Look at me, MA
2003-06-04T10:50:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've not updated the page for a while, as I've been a little
busy since I got back from Switzerland. In the two months (eep -
I didn't realise it was that long until just now) I've been
back, I've been to Roman and Carries wedding in the US (and very
nice it was too), got my MA (which basically means that I'm
entitled to wear a longer gown, should I want to), and done more
than a few supervisions. However, the exams have started now, so
I've finally got nothing to distract me from doing the PhD work
that I badly need to do if I'm going to finish anywhere near
December.</p>
<p>Which obviously means that I'm thinking of rewriting the
software that generates this site.</p>
<p>I've been considering
<a href="http://www.blosxom.com">Blosxom</a>,
which is certainly a very neat piece of software, but I'm not
sure how easy it would be to get it to work with all the
existing <a href="http://www.w3.org/Style/XSL/">XSLT</a> stuff,
which I don't want to throw away. We'll see what happens; I'm
sure I'll pick the option that wastes the most time. Damn my
subconscious.</p>
id:/2003/04/a_conversation
A Conversation
2003-04-04T18:53:00+00:00
Rob Hague
rob@rho.org.uk
<p>I found <a href="http://www.minimumeffort.com/nutshell.html">this
page</a> when idly browsing
<a href="http://www.wilwheaton.net">wilwheaton.net</a> while waiting for
a kernel image to transfer of a serial line (which, by the way, takes an
age, and eventually failed for reasons that are, so far, unknown. Bah.).
I think it sums things up quite nicely.</p>
id:/2003/04/compsci_history
CompSci History
2003-04-04T13:44:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://perso.wanadoo.fr/levenez/lang/">This
page</a> has a load of links to information about almost
every programming language you can imagine, but more
importantly, it has <i>a five-page diagram showing where
they're all descended from</i>! OK, it's not that exciting,
but I find it interesting. There a couple of mistakes
though, so I might have to assemble my own version...</p>
id:/2003/03/dammit
Dammit
2003-03-18T13:05:00+00:00
Rob Hague
rob@rho.org.uk
<p>When I find myself actually agreeing with the
<a href="http://news.bbc.co.uk/2/hi/uk_news/politics/2860583.stm">
actions</a> of Anne Campbell, you know that something's seriously
wrong.</p>
id:/2003/03/the_jargon_file
The Jargon File
2003-03-10T13:50:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://info.astrian.net/jargon">The Jargon File</a>'s old
homepage seems to be unceremoniously redirecting visitors to random
Linux-oriented sites, so the link goes to a mirror. If you've not heard of it
before, it's "a comprehensive compendium of hacker slang illuminating many
aspects of hackish tradition, folklore, and humor." Taken with a grain of
salt, it's fairly interesting, and you can easily get lost in it for hours. I
particularly like the <a href="http://info.astrian.net/jargon/Hacker_Folklore/Some_AI_Koans.html">AI
Koans</a> and <a href="http://info.astrian.net/jargon/Hacker_Folklore/A_Story_About_Magic.html">A
Story About Magic</a>.</p>
id:/2003/03/yikes
Yikes
2003-03-10T09:51:00+00:00
Rob Hague
rob@rho.org.uk
<p>Follow the links in a <a href="http://www.macslash.org">MacSlash</a>
story about web badges, I ended up skimming Apple's
<a href="http://www.apple.com/legal/guidelinesfor3rdparties.html">
Guidlines for Using Apple Trademarks and Copyrights</a>, and noticed
the following, fairly broad, prohibition:</p>
<p><i><b>3. Variations, Takeoffs or Abbreviations:</b> You may not
use an image of a real apple or other variation of the Apple logo
for any purpose.</i></p>
<p>"Any purpose". Thousand's of unimaginative still-life painters must
be quaking in their boots.</p>
id:/2003/01/gr_ezi
Grüezi
2003-01-31T15:27:00+00:00
Rob Hague
rob@rho.org.uk
<p align="center"><img src="/2003/01/31/ibmsign.jpg"/><p>
<p>There haven't been any updates for a while, as I've been busy
settling into my new surrounds in Switzerland, where I'm doing a 3-month
internship at <a href="http://www.zurich.ibm.com">IBM's Zurich Research
Lab</a>. I don't have an internet connection at home, so I can only
add updates from the lab, but I should be able to manage that now and
again.</p>
</p></p>
id:/2002/12/a_christmas_message
A Christmas Message
2002-12-28T21:34:00+00:00
Rob Hague
rob@rho.org.uk
<p>Tori's parents very kindly got me a box of Quality Street for
Chirstmas, and consequently I had a purple one for the first time in
several years. For those of you not familiar with the confectionary in
question, they consist of a hazelnut, surrounded by a thin layer of
caramel, all encased in a chocolate shell. As I was happily eating
this, I began to wonder how they made the oversized version that can
be bought individually. Did they employ some sort of genetically
engineered super-hazelnut? In an endeavour to find out, I bought one,
and disected it.</p>
<p align="center"><img src="/2002/12/28/purpleones.jpg"/><p>
<p>As you can see, they just pad it out with caramel. This seems to be
a swiz, although I'm not entirely sure why.</p>
</p></p>
id:/2002/12/bite_sized_chunks
Bite-Sized Chunks
2002-12-04T22:02:00+00:00
Rob Hague
rob@rho.org.uk
<p>Both Steven and Tori requested that I break the HTML version of the
novel into smaller chunks, to make it more manageable. Kind-hearted soul
that I am, I dived into the Perl script and produced such a vesion,
which is now linked alongside the text and monolithic HTML versions.
(Sorry, no luck with the PDF version yet...)</p>
id:/2002/12/i_may_live_to_regret
I may live to regret this...
2002-12-02T16:50:00+00:00
Rob Hague
rob@rho.org.uk
<p>...but I've posted to the web; see the links below.
I'm slightly paranoid about this, but hey, I know
that it's not exactly <i>1984</i>, so I should be able to handle
a little (or a lot) of criticism. You never know, some of it
might be constructive...</p>
<ul>
<li><a href="/2002/12/02/novel.html">Clockwork (one large page)</a></li>
<li><a href="/2002/12/02/novel1.html">Clockwork (split into several pages)</a></li>
<li><a href="/2002/12/02/novel.txt">Clockwork (plain text)</a></li>
</ul>
id:/2002/12/thank_entity_it_s_a
Thank $ENTITY It's All Over
2002-12-01T09:48:00+00:00
Rob Hague
rob@rho.org.uk
<p>Well, that's it, then. Last night, I submitted to the
NaNoWriMo website, and hence am a fully validated winner. I've
got the icon (see right), the certificate, and everything. Now I
just need to wait for my masterwork to finish rattling off the
printer, then I can go and meet up with other U.K. NaNoWriMos in
London.</p>
<p>(As far as this site goes, I'm probably going to post a copy
of the novel for people to point and laugh at. This'll probably
happen next week sometime.)</p>
<p>TTFN</p>
id:/2002/11/yay
Yay!
2002-11-30T18:49:00+00:00
Rob Hague
rob@rho.org.uk
<p>I did it! At a little after 6:30 tonight, I passed the 50,00 word
mark. I've got a couple of sections left to write, and I want to tidy it
up a bit before I submit it to NaNoWriMo and print it out, but,
basically, yay!</p>
id:/2002/11/going_well
Going well...
2002-11-27T12:05:00+00:00
Rob Hague
rob@rho.org.uk
<p>Things are going quite well; I'm ahead of schedule, and it
looks like I'll make 50,000 by Saturday (probably <i>on</i>
Saturday. Anyway, I have a plan for the remaining
5,614 words, and I plan to try to get about 1,000 words ahead
tonight, so should be able to turn up at The Moon On The Water
on Sunday brandishing a completed novel. Wiigii!</p>
id:/2002/11/now_with_added_valid
Now with added validation!
2002-11-20T11:47:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've rejigged the pages so that they validate as proper XHTML
(Transitional only, I'm afraid. I do some murky things with
tables in order to get reasonable results for everything back to
Netscape 4, and I don't think it's time to give those up just
yet.) See the buttons at the bottom of the page...</p>
id:/2002/11/head_above_water
Head above water
2002-11-20T11:44:00+00:00
Rob Hague
rob@rho.org.uk
<p>I managed to (finally) get back on track last Saturday, and
have managed to stay on the right side of the green line since
then. I'm not very far ahead of schedule, but at least I'll be
able to hold my head up high at the Cambridge NaNoWriMo meet
tonight. (Not many people have responded - I think it got a bit
overshadowed by the London event - but, hey, it's an excuse to
go to the pub.)</p>
id:/2002/11/wiigii
Wiigii!
2002-11-15T02:22:00+00:00
Rob Hague
rob@rho.org.uk
<p>It all started with some comic book character mugs Steven has.
Anyway, to cut a long story short, I've spent far too much time this week
reading the <a href="http://www.itswalky.com/d/19970908.html">archives</a> of
<a href="http://www.itswalky.com/">It's Walky</a>, right back from when it used
to be called "Roomies" and everyone had big, big hair. I highly recommend it
(it even seemed to actually <i>increase</i> my producutivity; I've no idea how.)</p>
id:/2002/11/d_oh
D'Oh!
2002-11-07T09:32:00+00:00
Rob Hague
rob@rho.org.uk
<p>It's a sad day; I've dropped below the green line. Actually, I was
expecting this by this point, but it's not too bad; I should be able to
catch up at the weekend.</p>
id:/2002/11/almost_ahead_of_myse
Almost ahead of myself.
2002-11-05T11:08:00+00:00
Rob Hague
rob@rho.org.uk
<p>Only managed to make it to 8228 words, so (unless I do a
couple of hundred at some point today, which I'll probably not get
a chance to), I'll slip below the green line. Still, I guess I can
catch up tomorrow...</p>
id:/2002/11/above_the_line_just
Above the line (just)
2002-11-04T12:11:00+00:00
Rob Hague
rob@rho.org.uk
<p>Not a bad weekend; I've managed to stick to the
2000-words-a-day target without too much hassle. As tomorrow is
Bonfire Night, I'll not be getting anything done, so I'm going
to try and get ahead of myself (8500 at least, maybe 9000)
tonight.</p>
<p>On Ben's suggestion, I've also added a "Triangle of Delight"
to the graph; this involved some disgusting Gnuplot hackery, but
it works.</p>
id:/2002/11/these_words_don_t_co
These Words Don't Count
2002-11-01T16:48:00+00:00
Rob Hague
rob@rho.org.uk
<p>As you can see, I've got off to a flying start, pissing
around with this web page instead of getting todays 2000 words
in. Still, it's workable now, so I don't really have an excuse
to <i>not</i> work on the novel...</p>
id:/2002/10/friday_morning_grab
Friday Morning Grab-Bag
2002-10-25T11:48:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've come across a couple of interesting things on my daily
trawl through the web. The first is a nice article entitled <a href="http://www.macdevcenter.com/pub/a/mac/2002/10/22/macforunix.html">
"Top Ten MacOS X Tips for Unix Geeks"</a> at the O'Reily
website. A tie in with their "OSX for Unix Geeks" book (which
I've not seen much of), it starts of with the mind-boggling
trivial ("You can find the Terminal application by navigating
to <tt>/Applications/Utilities</tt> in the Finder. Drag the
Terminal application to your dock so you can access it
quickly."), but by hint 3 is giving you quite useful tips on
substantial stuff like Startup items and <tt>/etc</tt>. The
second was <a href="http://www.macosxhints.com/article.php?story=20021024062517608">
this hint</a> at <a href="http://www.macosxhints.com">macosxhints.com</a> about
getting an iBook to drive two monitors in true PowerBook
fashion. I <i>think</i> that my iBook is one of the qualifying
models, but given the dire yet plausible horror stories about
a botched hack permanently wrecking the firmware, I'm not
going to try it until I need to.</p>
<p>In other news, Bluetooth is working like a charm; I've been
using it to transfer VCards to and from my phone, and check my
mail while sitting waiting for a Neal Stephenson (yes, that's
<i>Neal Stephenson</i>) talk to start. I got the modem scripts
from <a href="http://www.taniwha.org.uk/">www.taniwha.org.uk</a>, and
setting it up was fairly straightforwards; mail me if you'd
like more details.</p>
id:/2002/10/apple_destroys_trees
Apple Destroys Trees - Film At 11
2002-10-17T12:08:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've just taken delivery of a
<a href="http://www.dlink.com/products/usb/dwb120m">D-Link
Bluetooth adaptor</a>, which I can use with my
<a href="http://www.nokia.com/phones/6310i/">Nokia 6310i</a>
to get a dialup connection while I'm sitting on a train back
from Nottingham. Anyway, if you follow the link, you'll see
that it's a dinky little dongle-like device, about
45x16x8mm. It came in a box with the standard page-and-a-half
"this is what a USB port looks like" user guide, repeated in a
dozen languages. <i>That</i> box was rattling around inside a
350x250x200mm box, presumably provided by the courier. So,
assuming that the recipient knows how to plug a USB connector
in to a USB port, then we could fit 2,625 Bluetooth adaptors
into the box, and still have space left. That seems a little
wasteful.
</p>
id:/2002/10/nanowrimo_i_must_b
NaNoWriMo - I Must Be Mad
2002-10-14T10:07:00+00:00
Rob Hague
rob@rho.org.uk
<p>
<a href="http://www.nanowrimo.org/">
<img align="left" alt="Official NaNoWriMo 2002 Participant" src="/2002/10/14/nanowrimo2002_participant_icon.gif"/>
</a>
A while ago,
<a href="http://www.chiark.greenend.org.uk/~benc/">Ben</a> mentioned
<a href="http://nanowrimo.org/">NaNoWriMo</a> - that's
National Novel Writing Month. The idea is to write a 50,000
word novel in November. Against my better judgement, I've
signed up, and I'll be posting updates somewhere
on the site. Watch this space (or take the vastly more popular
route, and don't).</p>
id:/2002/10/added_unitywiki
Added UnityWiki
2002-10-14T10:07:00+00:00
Rob Hague
rob@rho.org.uk
<p>I wanted to set up a
<a href="http://c2.com/cgi/wiki">Wiki</a> so that a group of
us could collaborate on designing a role-playing game
setting. As I wanted something easy to install, I chose
<a href="http://sourcefrog.net/front/mbp/piki/">PikiPiki</a>
(<a href="http://moin.sourceforge.net/">MoinMoin</a> has a lot
more features, but is a lot more complex and requires distutils,
which wasn't installed on the target machine). Anyway, I've
hacked the script around to add a couple of nice features and
tidy things up, and then
<a href="http://www.chiark.greenend.org.uk/~benc/">Ben</a>
asked for CVS access as he wanted to make some improvements and
install it at work. So, I set up a SourceForge project, and
hence world+dog can now download the source and fiddle with
it. See the box to the left for details.</p>
id:/2002/10/you_learn_something
You Learn Something New Every Day
2002-10-11T16:11:00+00:00
Rob Hague
rob@rho.org.uk
<p>Today's question: what exactly is a pretensioner?
Well, it's...</p>
<ol>
<li>A large, complicated and difficult to fit gadget
that sits under your seat and pulls the seatbelt tight
when you have a crash
(<a href="http://www.howstuffworks.com/seatbelt4.htm">www.howstuffworks.com</a>)
Apparently, Corsa ones come with explosives in them.</li>
<li>Bloody expensive.</li>
<li>Fairly essential in a "not dying while driving down
the A1 to Nottingham" way, particularly if your seatbelt
is prone to spontaneously popping out of the holder at
inopportune moments, such as when you're pulling in to the
outside lane.</li>
</ol>
<p>Educational, isn't it?</p>
id:/2002/10/things_that_stop_me
Things That Stop Me Doing Work On Monday
2002-10-07T16:42:00+00:00
Rob Hague
rob@rho.org.uk
<p>In case you've not seen it, look at
<a href="http://www.thingsmygirlfriendandihavearguedabout.com/">
Things My Girlfriend and I Have Argued About</a>.
Not only is it "laugh until you shake and people walking past your
office think you're insane" funny, but the author got into a legal
argument with The Mail On Sunday, and he's friends with a load of
ex-staffers from Amiga Power.</p>
id:/2002/07/new_scripts
New Scripts
2002-07-04T14:59:00+00:00
Rob Hague
rob@rho.org.uk
<p>As you may or may not notice, I've rejigged the scripts that generate
the site a little. The most user-visible change is that the index page now
carries the 5 most recent items from <i>any</i> section, allowing you to
get a summary. Enjoy.</p>
id:/2002/07/new_sections_mac_a
New Sections - Mac and Me
2002-07-03T12:14:00+00:00
Rob Hague
rob@rho.org.uk
<p>Further to the previous news item, I plumped for the
iBook in the end, and have so far been very pleased with
it. Accordingly, I've added a Mac
section to the site; hopefully, somebody somewhere will
find it interesting.</p>
<p>I've also added a separate
homepage. Both are currently a bit bare-bones, but will
get padded out with guff in the fullness of time.</p>
id:/2002/07/first_post
First Post!
2002-07-03T11:26:00+00:00
Rob Hague
rob@rho.org.uk
<p>Sorry about the title. Anyway, here's a real homepage
where I can add personal info without cluttering up the main
page (which obviously serves as an invaluable resource for
so many). I intend to replace the photo ASAP, by the way.</p>
id:/2002/07/the_king_is_dead_lo
The King Is Dead, Long Live The King
2002-07-03T10:12:00+00:00
Rob Hague
rob@rho.org.uk
<p>Like a phoenix, <a href="http://www.scarygoround.com">Scary-Go-Round</a> has
risen from the ashes of <a href="http://www.bobbins.org">Bobbins</a>; read and enjoy,
especially the lift operator. (On a slightly more confusing
note, I tried to put a little in the Spooky Jar, but couldn't
connect to PayPal. Maybe this is why it's at $0.)</p>
id:/2002/06/got_fink_working
Got Fink Working
2002-06-20T12:16:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've had another go at getting Fink working, and this time
succeeded. Last time I managed to miss out an entire step in
the instructions (fink scanpackages) - I must've been asleep
or something. Anyway, I'm installing xfree86, more out of
necessity than desire. I need to run Python Tkinter programs,
and although I have the native Mac OS X Tk installed, I cant
get Python to recognise it when building from source. I'm
trying out <a href="http://mail.python.org/pipermail/pythonmac-sig/2001-October/004285.html">something</a>
I've found on the Pythomac-SIG mailing list, but until I get
that to work, it's X11 or nothing. In any case, I'll probably
need it to run Gimp until the native version arrives.</p>
id:/2002/06/mac_1_unix_0
Mac 1, Unix 0
2002-06-12T12:21:00+00:00
Rob Hague
rob@rho.org.uk
<p>Some success, some failure. On the plus side, I've now
played with all the "Digital Hub" apps successfully. I used
iMovie to splice together a couple of interview videos I have
to transcribe, imported Lou Reed's "Transformer" and the theme
from Amelie into iTunes (I'm listening to "Perfect Day" at
this very moment) and got a couple of photos into iPhoto. The
latter is the most interesting, as it involved getting my ZiO
SmartMedia reader working. I was a little disappointed that it
didn't work straight off, but when I went to <a href="http://www.microtechint.com/downloads">Microtech's
site</a> and downloaded the drivers, everything went
swimmingly.</p>
<p>I also downloaded the OS X 1.1.5 update. I'm impressed with
what I've seen of Software Update, and it installed the
upgrade with no problems. I've not seen the dramatic speed
increases everyone seems to be crediting it with, but then
again I've not really started stretching the iBook yet.</p>
<p>On the Unix side, things have been going a lot less
smoothly. I tried to install <a href="http://fink.sourceforge.net">Fink</a> in order to get
things like Python and Carbon Emacs and start getting real
work done. However, something went wrong. It's almost
certainly due to my dodgy install of the developer tools (I
downloaded the image from ADC, but it was corrupted. I
ploughed on with the install regardless, and ended up with
only half the tools. D'Oh.) I've removed it, and in the
process of downloading the image again (not going via a PC and
a dodgy CD-R this time).</p>
id:/2002/06/got_it
Got it
2002-06-09T10:01:00+00:00
Rob Hague
rob@rho.org.uk
<p>I'm typing this entry on my shiny new iBook. I got it
Friday morning, but this is the first real chance I've had to
play with it. I've not really found much out yet. I had a
slightly worrying moment Friday night when I was populating
the hard drive with the restore CDs (not sure why they can't
ship the hard drive with the system set up on it). It
complained that the modem couldn't hear a dialtone, but seemed
to connect to Apple and submit my registration and iTools details
fine. However, when I started trying out apps, the modem
claimed to still be connected, even though it wasn't (I could
hear a dial tone on the line via my phone). Disconnecting just
hung. Anyway, I tried again this morning and it seems to work
fine (I'm using it now to SSH into the lab and type this), so
it's probably just a glitch in the installer.</p>
<p>The only other problem I've seen so far is the on
switch. It works fine, in that it turns the computer on and
off, but I swear I saw the switches on other iBooks glowing
(similar to the collar on the power connector). I'll check
this out.</p>
id:/2002/04/pre_purchase_cogniti
Pre-purchase Cognitive Dissonance
2002-04-23T03:11:00+00:00
Rob Hague
rob@rho.org.uk
<p>I'm currently contemplating getting a laptop, for working while
away from home, and for giving PowerPoint-like presentations
(although I'll be using PDF, of course). I'm looking to spend
about £1000, and battery life is important so I want to avoid
second-hand machines. The current front runners are an end-of-line
Vaio that I saw (although the spec was fairly ropey), a
bottom-of-the-range Thinkpad, or Apple's new <a href="http://www.apple.com/ibook">iBook</a>. If anyone has any
suggestions, mail me at
<a href="mailto:rob@rho.org.uk">rob@rho.org.uk</a>.</p>
id:/2002/04/pigs
Pigs
2002-04-16T10:12:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.osi.org">www.osi.org</a> is the home
of Ontario Swine Improvement, and not, as you might expect,
the <a href="http://www.opensource.org">Open Source
Initiative</a>. Just so you know.</p>
id:/2002/03/added_newfile
Added newfile
2002-03-13T18:36:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've added newfile, all packaged up. It's simple, but
it's useful.</p>
id:/2002/03/in_out_shake_it_al
In, Out, Shake It All About
2002-03-13T14:16:00+00:00
Rob Hague
rob@rho.org.uk
<p>About a week ago, Microsoft and UniSys put up <a href="http://www.wehavethewayout.com">WeHaveTheWayOut.com</a>,
a site advocating moving over from complicated, difficult
to manage Unix systems to easy-to-administer, secure Windows
boxes. However, a quick check on <a href="http://www.netcraft.com">Netcraft</a> revealed the
site was running Apache/FreeBSD - hardly a ringing
endorsement. The site was soon migrated to Windows, but then
failed and was down for several days. Meanwhile, someone
else put up <a href="http://www.wehavethewayin.com">WeHaveTheWayIn</a>, a
site advocating Open-Source and proprietary Unix as an
alternative to Windows. This really is the sort of stuff you
couldn't make up.</p>
<p>(<a href="http://www.cio.com/archive/010102/shop_content.html">
This site</a> has a similar theme, but couched as a 12-step
programme...)</p>
id:/2002/03/added_software
Added "Software"
2002-03-13T11:54:00+00:00
Rob Hague
rob@rho.org.uk
<p>Expansion continues apace; I've added a page with some
little bits of (open source) software I've
written. Currently, there's not much there, but I have stuff
I want to add to it when I have the time...</p>
id:/2002/03/page_created
Page Created
2002-03-13T11:42:00+00:00
Rob Hague
rob@rho.org.uk
<p>Title says it all, really. I intend to put more on here,
but for now it's just the point to access the Bookaroo .tgz
file.</p>
id:/2002/03/i_m_24
I'm 24
2002-03-07T14:53:00+00:00
Rob Hague
rob@rho.org.uk
<p>It's my birthday today; I'm now officially 24. Hurrah.</p>
id:/2002/03/hear_yourself_think
Hear yourself think
2002-03-07T13:28:00+00:00
Rob Hague
rob@rho.org.uk
<p><a href="http://www.quietpc.com/">Quietpc.com</a> has a
whole range of products designed to dull the hovercraft-like
roar of the modern PC, including replacement fans, PSUs and
hard drive mountings. As my home PC makes a noise like a
Harrier jump jet, I'll be spending some money here pretty
soon...</p>
id:/2002/02/pixar_go_back_to_the
Pixar go back to their roots
2002-02-13T13:44:00+00:00
Rob Hague
rob@rho.org.uk
<p>As everyone knows, the new iMac is more than a little
similar to an angle-poise lamp. Accrodingly, Apple
commisioned Pixar to animate the adverts, and the results
can be found <a href="http://www.apple.com/hardware/ads/newimac.html">here</a>.</p>
id:/2002/01/added_links
Added "Links"
2002-01-18T14:53:00+00:00
Rob Hague
rob@rho.org.uk
<p>I've added a (currently fairly meagre) links page. And you
thought I was never going to update this...</p>
id:/2002/01/shifman
Shifman...
2002-01-18T14:46:00+00:00
Rob Hague
rob@rho.org.uk
<p>The first Link Of The Day has got to be
<a href="http://petemoss.com/spamflames/ShifmanIsAMoronSpammer.html">
this</a> account of ones man's struggle against reality.</p>
id:/2002/01/up_and_running
Up and Running
2002-01-15T11:18:00+00:00
Rob Hague
rob@rho.org.uk
<p>Wahey! Well, it took a while for me to get my correct
credit card details to <a href="http://www.domainbuster.com">DomainBuster</a>, and for
the approprite changes to percolate through various bits of
Internet plumbing, but I've finally got the site
working. There's not much here yet, but I'll be sorting that
out.</p>