Ian's Blog

Coffee goes in, words come out.

All-Terrain Raspberry Pi!

Another year, another childrens’ toy with a Raspberry Pi needlessly attached to it.

Over the past few weeks, I’ve been taking one of my son’s old broken RC toys and turning it into something a bit more fun — by strapping a computer to it, naturally.

The result is the “All-Terrain Pi”, a robot which can be controlled by smartphone as if it were a racing game, or by using the kid-friendly Scratch programming language.

Here’s a video of the smartphone interface. It all runs in the web browser, with no need to install an app on the phone. Full-screen (ish) video streams from the robot’s on-board camera, while speed and turning are controlled using touch and tilt controls implemented in Javascript.

Programming in Scratch is possible too, recreating the 80s/90s Logo “Turtle” experience for a new generation. As with the smartphone interface there’s a Python program behind the scenes controlling the motor driver board, but this time it receives commands via Scratch’s “Remote Sensors Protocol”.

It didn’t take long for my son to get into controlling the robot, both with the game-like smartphone interface and using Scratch, which he has some experience with from school. (They start programming young now!) We took it to last weekend’s Constructorium hackerspace event at the library, where it was a big hit — by the end of the afternoon, he was teaching the grown-ups!

“Proud” is an understatement.

I’ve finished all the things I set out to achieve with this robot, in a total of only 20 hours or so. Thanks to a pre-made motor driver board and a Raspberry Pi camera fork of mjpg-streamer, some of the hardest bits of the project turned out to be very easy, so I’m very grateful to everyone whose work I’ve built upon to create this robot.

I’m hoping we might be allowed to take the robot into school and maybe hold a competition for the kids to write a program to steer it around an obstacle course; or something similar — to make programming more exciting by taking it off the computer screen and into the real world. If the teachers don’t let us do that, we might hook it up to the internet and have it controlled using redstone circuits on my son’s Minecraft server.

You can find a step-by-step guide to how I built the robot on the All-Terrain Pi page and all the code is open source!

Fun With Parental Controls

Now that our son is getting older, it’s inevitable that his computer use is no longer closely scrutinised — we no longer need to be hanging over his shoulder, showing him what to click on.

Although his web browsing habits run only as far as Planet Minecraft and whatever flash game they’re currently peddling on the Disney Channel, the convenience of App Stores means that he has thousands of poorly-made and wholly inappropriate games available at the click of a mouse. It’s time for something I hoped we wouldn’t have to use — parental controls.

I think we have a five-year window at most between enabling them and him discovering proxies, live CD operating systems or that the administrator password is an easily brute-forceable dictionary word.

But even now, they’re a long way from being useful. We initially decided that “12+” was a reasonable setting for the level of control, since Microsoft already considers most of the games he plays to be rated 12. But the user-supplied ratings of games in the App Store make it all kind of pointless. Here’s MSN Sport, rated 16+ in case it contains some truly horrible material, like American Football.

And the much more wholesome Zombie Sniper 3D (“Beautiful 3D visuals!”), rated 12+.

I suppose that no matter how hard the providers try, parental controls never will be a substitute for being there, checking things out; actual parenting.

Another Year Gone By

Lights flicker and fade, drawing the year to a close. Outside, the weather is warming and slowly burning the frost away; a tiny ripple before the wave of heat to come, before it is summer again.

2014 has been a year of travel, with three trips abroad setting a new record for the furthest south and east I’ve travelled across the world — records I hope to beat before too many more years pass.

Madha wadi, UAE-Oman border

This year also contained what felt like at least 24 months stuck in the office writing documentation and trying to get sales people to stop changing the system design every five minutes.

But for all that, the year has really been about friends and family. August was spent between Galicia and Yorkshire, with those branches of the family we don’t often see.

Family in Galicia

It was the year of RABIES 10, an annual party we started at university that, against all logic and reason, is still going after so many years. It still grows steadily year on year, from the 20-person sit-down dinner of 2005 to what’s now a barbecue with a head count of over 50. This was Joseph’s first year in attendance — he brought along a card game and out-geeked the geeks.

Playing Fluxx at RABIES 10

It was the year of my twenty-ninth birthday, the last before the looming milestone of thirty. I still can’t drive a car, but I am married, I have a child, a good job and plenty of friends, and when I think of all that, thirty doesn’t seem so scary.

And it was Joseph’s seventh birthday too.

As December dawned and winter descended, we were surrounded by our family and friends once again — just as always, and I wouldn’t have it any other way.

Christmas with Friends

Christmas with Family

So tonight, I raise a glass — to family and friends, near and far. To all of you.

Happy new year.

Faded Dreams in Winter

Like many, I came of age with a head full of dreams about what my adult life would be like. I thought maybe I’d live in a big old cottage, raise my children in a little village by the sea, have a wood fire burning through the winter and I’d decorate the house for every season. We’d have a garden to grow vegetables and keep hens, we’d have plenty of money and the house would always be tidy, and we’d be together at home each Christmas morning.

This is now my thirieth winter on this Earth. If my early twenties were “about” anything, they were about going with the flow — accepting what life threw my way and learning to be happy with it regardless.

If my late twenties were “about” something, they may have been about letting old dreams die quietly, replaced with newer and more realistic things. It’s inevitable that those dreams needed to fade and die some time; too many are dependent on things outside my control — responsibilities to family and friends, jobs, even the state of the economy that will forever keep that old cottage by the sea out of my grasp.

I have a flat in town and a son in school there; I couldn’t move to the country even if we had the money. I have in-laws to placate and one day will have parents to look after. My house will always be messy and our savings account always empty.

But I have a family now, and friends, and a home here. I am older. Time to let the dreams of a child fade and die like the passing year, and replace them with new ones.

All I Want for Christmas

As December gets into full swing, one of the joyous seasonal activities that must be undertaken is the ritual filling of my Amazon wishlist with a bunch of crap I don’t need. This is all to help those stubborn relatives who can’t bring themselves to believe I’m telling the truth when I say “I don’t want anything”.

What I really want for Christmas is a tree covered in lights, a table to sit my friends and family around, a dinner to cook for as many as possible, a bottle of wine to drink and stories to tell.

But these days, it rarely seems like that’s an option. Every year we are deluged by adverts exhorting us to buy more and more needless stuff in the vague hope that it will make our families happy and our lives complete.

Spoilers: it doesn’t.

Consumerism has given us little but a yearly orgy of spending, credit card bills and vague disappointment; it’s given us nothing but the idea that happiness is inextricably linked to wealth. It’s benefitted not the middle classes and certainly not the poor — it’s benefitted bankers, politicians, advertising executives; the very people we love to hate but keep shovelling money at year after year.

So please, buy less stuff. Stop stressing about finding the perfect gift. Stop binge-buying in sales, stop watching 24-hour telesales channels, stop racking up debt buying things nobody really needs.

Sit down and eat Christmas dinner with your family.

If you must throw money at something, buy dinner for someone who can’t afford it. Give someone less fortunate a place to spend Christmas with their friends.

“Consumer culture” is bullshit, your friends and family deserve better.

Touchdown, Half a Billion Miles Away

On March 2nd 2004, without great fanfare, an Ariane 5 rocket blasted off into orbit carrying a payload designed by the European Space Agency to investigate a nearby comet. Its name was Rosetta, and it set off on one of the most complex gravitational trick-shots we have ever attempted.

Ten years later, Rosetta finally arrived at comet 67P/Churyumov-Gerasimenko earlier this year. An impressive enough feat by itself, the orbiter is already sending back useful scientific data on the structure and composition of the comet. The world was duly impressed, in a reserved sort of way.

But today; today Rosetta set free a payload of its own — a lander named Philae. We watched with bated breath as it slowly fell in the comet’s barelt felt gravity.

Its descent was live-streamed. It was live-tweeted. It was live-comiced.

The comet’s surface approached.

At 16:03 GMT, Philae successfully touched down on the surface of 67P/Churyumov-Gerasimenko. And our nerdy corner of the internet went wild.

Today, after ten years and half a million miles from home, the scientists and engineers of the European Space Agency landed a robot no bigger than a washing machine, on a comet with gravity one ten-thousandth of Earth’s… exactly where they aimed it.

For the first time in our history — for all we know, the first time it has ever been done in the 14 billion year history of the universe — our species has landed something on a comet.

Today, humanity stands proud of its place in the cosmos.

Gathering Dusk

Dusk falls across Dorset, darkening the fields from Christchurch in the east, past me, way past me out to Lyme Regis in the west.

My week is done, and with it October, and with it the harvest and the last of the warmth that summer left behind. The night will grow dark now, and the year cold, until Christmas comes and winter has us in its grip once more.

And so I raise a glass to those departed — men, women and years all the same. My thirtieth summer has come and gone, and many more remain.

To Lugh and to Loki, to trickster gods and the hosts unseelie, I salute you and drink in your name. A happy Hallowe’en and a blessed Samhain to all of you.

On GamerGate

Dear GamerGate supporters, trolls, flamers and everyone associated:

Here is a pale blue dot.

Really, it’s the pale blue dot.

To abuse the words of Carl Sagan: That’s here. That’s home. That’s us. That’s you, everyone you have ever loved, and everyone you’ve ever hated. It’s every videogame player, creator and journalist. It’s Zoe Quinn and everyone she may or may not have slept with. It’s Anita Sarkeesian and everyone who’s ever sent her death threats. It’s all of 4chan and 8chan and Reddit and everyone who’s ever posted there.

We are alone in space, the only inhabited planet we know of in a universe unimaginably wide.

We are the pinnacle of four billion years of evolutionary history. There has never been a species as intelligent and as capable of wonder as our own. Maybe there never will be again.

We have more than any previous generation. We have built great modern wonders that have brought us closer together, allowed us to understand each other better than ever before. Languages and cultures are no longer a barrier to us.

We alone have come together as a species, shared our skills and our technologies, and sent our representatives to other worlds.

So please, can we stop threatening each other on the internet? It’s beneath us, and we should know better.

Ooh Arr, Oi Be Resolvin’ Ee’s Grammatical Failin’s

Part 1. US Edition

vosotros. vous. ihr.

The more languages I learn, the more it stands out that English has no second-person plural, no way of saying “you” and explicitly meaning more than one person.

That is, of course, except for “y’all”, a term that I’ve found myself using more and more often recently. I feel like I can justify it from a linguistic point of view, though for using it I should probably renounce my British nationality and take up eating barbecue and firing assault rifles.

…Actually, that sounds pretty good.

Part 2. UK Edition

I know quite a few transgender or non-gender-binary people, and so another grammatical lack that seems to crop up from time to time in conversation is the lack of a gender-neutral pronoun in English. But again, this lack can easily be resolved by resorting to a prejudiced-against rural accent.

Despite being from Dorset, my parents thankfully brought me up to speak with an accent that is “middle class Southern” rather than Westcountry. But for all the stereotypes associated with that accent, it does neatly solve the problem of inventing pronouns like “zie”, “hir” and “ey” by simply using “ee” for everything — “he”, “she”, “him”, “her”, and even “you” in a pinch.

There ee go. Grammatical inadequacies in the English language, solved by talkin’ loike ee’s a farmer.

Adventures in Emoji

Yesterday, a friend of mine started me on a quest that was to be filled with despair. It started innocently enough.

I gleefully replied with my 140 character attempt at making that come to life (each Emoji counting, as I would later discover, as two normal characters).

Well, that didn’t look like a bad start. There were some alignment issues there, probably because Twitter uses a proportional font. Nothing that a couple of <pre> tags couldn’t solve!

Oh, how wrong I was.

Twenty-four hours later, this is what I have to show for my efforts:

Well, it’s a whole screen of Rogue-like, which is not bad. But despite wrapping the whole thing up in <pre> tags, there are still alignment issues.

Lesson 1. Not all Emoji are a fixed width.

Lesson 2. No Emoji are the same width as a half-width or full-width Unicode space.

This will become important.

You may also notice that the picture above isn’t a nice <pre> block full of text that you can copy and paste. That’s because, after hours of tweaking to get something looking vaguely presentable, I decided to see what it looked like in a different browser.

And even in the same browser, with a different monospace font:

Lesson 3. The width of an Emoji — and even one of the Unicode spaces — varies from font to font.

Before I even got to that point, though, I was nearly thwarted by an even more frustrating issue — actually laying out the Emoji in a text editor.

I assumed that in the world of monospace text that editors inhabit, these problems of layout would be avoidable. Any modern text editor should allow me to edit a bunch of Unicode characters in a regular grid, right?

Of course not.

My first attempt was using gedit, my GUI editor of choice. It happily allowed me to mix standard ASCII and Unicode characters. When I inserted a space between ASCII characters, it was about 20px wide — so far, so good. But when I inserted a space, even a Unicode full-width space, between two Emoji, the result was only 10px wide. The browser renders the spaces correctly, so to look right in the browser, all spaces had to be half as wide in gedit — useless for drawing a dungeon layout.

I resorted to vi, my console editor of choice. My console font happily supports Unicode, so this should be no problem!

Of course not. For a start, keypresses in vi insert one byte at a time, meaning that every other keypress misaligns every subsequent two-byte Unicode character on that line. And then there’s the quite bizarre way in which it decides to write characters on top of each other.

My third and almost bearable choice was an odd one. I figured that if I wanted the same look in my editor as in the browser, I should use an editor that runs in the browser. I chose the Chrome extension Caret.

At last I had something almost usable, although the misalignment of characters rears its ugly head here too. There’s the infuriating bug that this only applies to characters on the screen, not the cursor position. 70 characters into a line of Emoji, the cursor position can show up almost two characters away from the text it actually sits at.

Lesson 4. There’s not a single program in the world that renders Emoji the same as any other.

Last but not least, there’s the matter of Emoji fonts.

On my Linux machine, my browser and my text editor at least use the same set of monochrome Emoji symbols. But view the same page on an iOS, Android or Windows Phone device, and you’ll discover they have their own platform-specific Emoji fonts which are specifically designed to look great while ruining your attempt at cross-platform compatability. Here’s what our Rogue-like looks like on Android, showing off the inevitable inconsistent widths:

If you’d like to post your hard work to social media sites, you may also discover that Twitter has its own set of unpredictably-sized Emoji. Facebook will at least use your system font when you post Emoji, although trying to edit a post with Emoji quickly results in a field of “your encoding is broken” rectangles.

Lesson 5. Despite Emoji having existed for over a decade, and having been incorporated into Unicode for half that time, Unicode fonts and particularly Emoji in them are a complete mess of incompatible typesetting and platform-specific weirdness. They are not yet suitable for use in layouts — and thus, sadly, for making Roguelike games.

For the curious, here’s how my Emoji Rogue-like would render in your browser. If you use the Cousine font in Chrome on Linux, this might look alright! If you’re using anything else, this is probably a horrible mess.

    🔳🐍             🔳                        🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳      
    🔳      🐂       🔳                        🔳        🍖                  🔳      
    🔳               🔳                        🔳          🍖                🔳      
    🔳🔳🔳🔳🔳🔳🔳🚪🔳                        🔳                            🔳      
                 🔳  🔳                        🔳🔳🔳🔳🔳🔳🔳🔳🚪🔳🔳🔳🔳🚪🔳     
                 🔳  🔳                                       🔳  🔳    🔳  🔳      
  🔳🔳🔳🔳🔳🔳🔳🔳🚪🔳🔳🔳                                  🔳  🔳     🔳  🔳     
  🔳        🐀           🔳                                  🔳  🔳   🔳🔳🚪🔳🔳🔳  
  🔳  🔳                 🔳                   🔳🔳🔳🔳🔳🔳🔳🔳  🔳   🔳     🐉  🔳  
  🔳  🔳          🐀     🔳🔳🔳🔳🔳           🔳                 🔳  🔳  💍     🔳  
  🔳  🔳                 🚪      🔳           🔳  🔳🔳🔳🔳🔳🔳   🔳  🔳🔳🔳🔳🔳🔳    
  🔳  🔳  🎫             🔳🔳🔳  🔳           🔳  🔳         🔳  🔳                  
  🔳🔪🔳                 🔳  🔳  🔳           🔳  🔳         🔳  🔳                  
  🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳  🔳  🔳           🔳  🔳         🔳  🔳                  
          🔳         🔳      🔳  🔳       🔳🔳🔳🚪🔳🔳🔳🔳🔳🔳🚪🔳🔳🔳              
          🔳  🐍     🔳🔳🔳🔳🔳  🔳🔳🔳🔳🔳          🐍              🔳              
          🔳    🐍   🚪                   🚪      🐍  🐍🐍💥🚹        🔳              
          🔳         🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳        🐍        🍖      🔳              
          🔳🍗       🔳                   🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳🔳              
Level:1     Hits:14(14)   Str:15(15)   Gold:34    Armor:1   Exp:20/23

The limited set of Emoji currently available also causes a number of other issues with creating a Rogue-like using the characters. For example, the character set currently does not contain glyphs for:

  • Stairs
  • Treasure chests
  • Corridors
  • Kobolds
  • The Amulet of Yendor

I’m sure the Unicode committee will be working on these soon.