Blog Archive — Page 3
This is part of my blog, which I have long since stopped maintaining. The page has been preserved in case its content is of any interest. Please go back to the homepage to see the current contents of this site.
-
The Long, Slow Death of Facebook
“Facebook has a big problem”, the tech media breathlessly cries. Despite using it every day, I’m not a fan of Facebook, and so am drawn to these articles like a moth to a flame. Let’s all enjoy guilt-free schadenfreude at the expense of a billion-dollar business! So, what’s Facebook’s problem this week? People are sharing more web pages and news stories, but fewer “personal stories”—plain status updates that relate to their lives.
A while back I complained of a slightly different problem: a lack of customisability of the news feed:
Does anyone know if there are secret Facebook settings to customise the news feed? Lately it's been 90% stuff I don't care about:
- $friend liked $never-heard-of-you's photo
- $friend shared $clickbait-article
- $friend is going to $event-miles-away
In essence, I was fed up of every day scrolling past a wall of this:
It turns out that Facebook’s controls for the news feed are pretty terrible. If a friend of mine comments on a non-friend’s post, “likes” it, or worst of all “reacts to” it, that’s automatically considered newsworthy for me. Facebook offers no way to customise the feed to remove these kind of posts.
You can, however, choose to hide all posts from certain people, including those not on your friends list. So based on the advice I received, I started “hiding all from” everyone I didn’t recognise who appeared in my news feed.
I’ve done this almost every day for the last couple of weeks, and in a way, it has been very successful. Almost all the strangers’ profile pic changes and distant events have gone, there’s fewer clickbait posts and memes, and mercifully almost no Minions at all.
But what’s left?
Not much.
The media was right, at least as it pertains to my Facebook friends. What remains after you’ve removed all the crap is real status updates—from about five people. Out of 200-odd friends, very few are actually posting status updates and pictures. Mostly of their kids, because I’ve reached that age. The rest of my friends either largely share stuff I didn’t care about, so I don’t see them any more, or they post so rarely that they’re drowned out by the wall of baby photos.
Although Facebook was our LiveJournal replacement, the place we went to stay in touch with our friends’ lives once we left university for our far-flung pockets of adulthood, it looks like for us that age of constant sharing may be on the decline.
I’m not sure if I will be happy or sad to see it go.
-
A Base Hardware Set for USV Control
Here’s a thing that I don’t have, wouldn’t have time to use, and really shouldn’t buy. But a thing that I really want anyway. It can do 40 knots.
While I haven’t quite talked myself into buying it yet, I have been thinking about the hardware to make it autonomous, and whether I should develop a simple, standard set of hardware for the job.
Although an Ardupilot would work pretty well, I don’t find it it particularly intuitive to use, and for obvious reasons I’d rather use the autonomous navigation software that my team and I have spent the last eight years writing—and that means a real PC. We’ve had it running on a Raspberry Pi Model B, although it’s a bit on the slow side, so the new Raspberry Pi 3 is the logical successor. It has built-in WiFi, but with such a tiny antenna that users report a very limited range, so a separate WiFi adapter will be needed as well.
Control of the throttle ESC and rudder servo are via PWM signals in vehicles like this, and the Pi cannot properly generate by itself. When our graduates at work built a similar boat a couple of years ago, they used an Arduino Mega for PWM control, but that’s probably overkill—for my quadcopter I used this servo control board that fits neatly on top of the GPIO connector.
What I’d also like to do is optionally pass through the PWM from an RC receiver to the boat, so I can easily swap between remote and autonomous modes. The board above has a 3.3v-5v buffer chip on the PWM channels which renders it output-only, but the USB equivalent has no such buffer and could be used for input and output.
Handily, moving the servo control from the Pi’s built-in UART to USB frees up that UART for receiving GPS data, with I2C used for the equally important heading sensor. I’m using the CJMCU uBlox 6M GPS & HMC5883L Compass module scrounged from my quad.
The two smaller boards should mount on top of the Pi using spacers and mounting holes in the boards, resulting in a neat self-contained unit capable of autonomous control and remote access via WiFi. The architecture looks something like this:
That’s enough to get started with, and if it works well, it can be used as a standard platform on which to build additional features. The first expansion is likely to be a camera for remote FPV control similar to the All-Terrain Pi, and hopefully the Raspberry Pi 3 is also powerful enough for some simple machine vision processing to drive Autonomy’s collision avoidance algorithms.
-
Goodbye, Dungeon
Today, Southampton’s Dungeon club announced that it would be closing this weekend. Although it’s been a long time since our university days, it’s sad to see it go. It’s one of the formative places of my youth—I was introduced to the place at age 18, full of nerves; by 21 the Hobbit and the Dungeon was our regular night out, and we couldn’t go to either without running into someone we knew.
I dug through the archive to find some pictures of us all there, and came away with only two—these were before the days of high-res camera phones, after all. We were young, and clean shaven, and had glow-sticks braided in our hair.
The Dungeon was a place where I found friends; found musical genres and subcultures I never knew before; found laughter and music and dance and magic under the ultraviolet lights.
Thanks for the memories.
-
The Bookmark
The second book is nearly finished now, the one that not so long ago I thought I had lost the knack of reading. For all my worries, I had not lost the knack of reading, or of filling my mind and body and soul with all that I read.
An old map serves as a bookmark, chosen at random from the detritus that collected next to my bed in untidier times. It’s a tourist guide to a place in which we were not tourists, a place of oil and dust and quiet optimism that one day the tourists might come.
It seems like an appropriate thing to mark a book with. Both are, in their own way, fundamental to human nature. The map takes a world, wild and free, and makes it small and neat and understandable; the book takes a story, wild and free, and does the same. It tames it, but just a little, just enough that in the reader’s head the spark of the wild story still lives.
February blows cold outside the window, and I am tired and old. But inside, in the warm, a bookmark remembers the place where stories live again.
-
A Most Productive Week
January, it seems, has become our decorating month.
This year it was the turn of our bathroom and bedroom, unwisely at the same time and with both sets of parents helping.
It was long overdue—both rooms had mould problems that we’d been ignoring for as long as we could. Our bathroom has no windows, and the paint was starting to come off the ceiling.
Attacking the mould in the bathroom
Our bedroom had problems along all the external walls, just like every other flat in this building, and the colour scheme of “new build magnolia” fading into “mould grey” had been around far too long.
Our grim-looking bedroom, after removing four bin bags and six large boxes of stuff
Three coats of paint later, plus three days of hosting and cooking for the in-laws, the bedroom was looking much better.
Bedroom after two purple coats
And with the furniture put back and new curtains up, it looks better still. The four bin bags and six large boxes of stuff that we excavated haven’t yet moved back in, and hopefully things will stay that way.
The finished bedroom
The bathroom also looks a lot better in mould-free blue. We bought some new cupboards in white wood to replace the primary coloured plastic drawers we had before, and at long last a bin with a top on it.
Mostly finished bathroom, minus the under-sink cupboard
We’ve even somehow found time to declutter the hallway, get rid of some old books, remove a patch of mould from the living room, and clean the kitchen too.
Togemura-san and his entourage on the newly clean kitchen window sill
In total decorating has taken eight days, involved eight people, 13 litres of paint, £240 of decorating supplies and £65 of fish and chips. It’s written off four rollers, three brushes and one step stool, because apparently I am just that heavy. I’ve cooked stew for six, plus bolognese, roast lamb and risotto for five.
Now we are finishing off the week with another six people around the table, with chicken pie and apple crumble all round. It’s been a most productive week—in all likelihood the most productive week of my life so far—and a rest has been well earned by us all.
-
Enforced Reading Time
Whilst faffing around with my blog the other day—in a regular incidence of “it ain’t broke but I’m going to fix it anyway”—I discovered some old half-written short stories that never made it to the web. (These two, if you’re interested.) Scrolling through the list of files that comprise my past attempts at fiction, it was immediately obvious that I’d not written even a scrap of a story since 2013. Worse, it’s been four years since I wrote anything complete—a paltry 342-word story called “Silence”, which my wife pestered me into writing. The last time I wrote something complete for myself was 2011.
More worrying was the train of thought that followed that—when was the last time I read a work of fiction out of preference over doing anything else? Not a book read in a holiday’s abundance of free time, not a bedtime story for my child, but a book read out of pleasure, when I could or should be doing other things? Probably Neal Stephenson’s “REAMDE”, also in 2011.
I received two books for Christmas, and I’m slowly making my way through one of them: “Trigger Warning”, a collection of Neil Gaiman’s short stories. Even though each piece is well written and at most 20 pages long, I’m finding it hard going. Every little thing is a distraction. Someone will talk, there’s my concentration gone for another five minutes. Another paragraph, and it’ll occur to me that the floor is dirty and I ought to hoover. Another two lines. I’m thirsty. I should make coffee.
Can it be that not only am I out of practice at writing, I’m actually out of practice at reading too?
It feels like I’m turning into a modern-day version of the parents of Roald Dahl’s Matilda; I read recipe books and Facebook shares and gadget blogs and clickbait articles and never once settle down with a real good book. Even now, Trigger Warning sits a mere two feet away from me, all is quiet and calm, and here I am ignoring it to tap away at a computer keyboard.
Perhaps the answer is to force myself, to set aside an enforced reading time every day, until I remember how to do it again—until I remember how to get so stuck into a good story that I stop caring about hoovering the floor or who might be commenting on my Facebook status.
Maybe with enough practice, I might even remember how to write again.
-
Blast From the Past: Dragon's Claw's Chromatic Skill System
Back in the dim and distant past of my school days, Dreaming Awake was called “Dragon’s Claw” and was going to be a video game rather than a book. As far as I can tell from trawling the Internet Archive, not much was posted about it online, but for some reason today I remembered the design work we did on its skill system.
To my knowledge no game since has implemented something like this — probably because it’s not a particularly great idea — but it has a certain elegance to it so I thought it worth documenting.
I think we called the skill system “Chromatic”, or maybe “Prismatic”. Something like that. It was based on the Hue, Saturation and Luminance method of specifying colours on a video screen.
Mechanics
If you’ve ever used a paint program on a computer, you’ve almost certainly encountered this style of colour picker before. There are three axes to it: Hue, which specifies the colour, Saturation, which specifies how ‘colourful’ (as opposed to grey) the colour is, and Luminance, which specifies the shade of the colour from black to white. (Some systems use Value instead of Luminance, the difference is somewhat technical.)
In Dragon’s Claw’s system, the Hue of the colour represents the elemental association of the skill, along a continuum. So for example, Fire-based skills have a red hue (approximately 0 on the scale), Water-based skills have a blue hue (approximately 170 on a 0-255 scale). Something like the diagram below — there were more elements to fill up the remaining space, but I forget them now.
The Saturation of the colour represents the transition between physical abilities and magical abilities, with the physical ones being less colourful and the magical ones more so. For example, the magic spell “Fireball” might be bright red, while “Flaming Sword” is still the same hue but more physical, so has a lower saturation.
Luminance is a continuum between white and black, and represents the balance between “good” and “evil” abilities.
If I recall correctly, while abilities were balanced fairly well across the hue and saturation spectra, the majority of abilities clustered towards the centre of the luminance spectrum as the abilities themselves could rarely be said to be good or evil.
Each character had an innate “colour”, which represented their central position within the three-axis ability spectra. At level 1, a character would be able to use an ability only if it was within 1 integer of their colour on each spectrum. For example, if Rosa has a colour of Hue 0, Saturation 255, Luminance 128 (primary red), she can use any ability with Hue 255-1, Saturation 254-255, and Luminance 127-129. This is a pretty restricted set, although each character would have been designed such that they started with at least one ability.
As each character increases in level, the “sphere” around their innate colour expands, and if any new abilities fall within that sphere, the character learns that ability. By level 100, each character can use a sizeable proportion of available abilities, but never the complete set.
As the character uses abilities, their innate colour changes by a fraction towards the colour of the ability used. In this way, characters’ ability sets can be customised however the player wants, simply by practicing abilities in the right “direction”.
Advantages
I always thought this was a pretty neat way of determining which characters can use which abilities, and the fact that characters get better at certain types of ability simply by practicing them or similar ones, is definitely appealing.
The concept of skills as a continuum also allowed for interesting benefits from the use of weapons. Swords, for example, might increase damage dealt by low-saturation (physical) skills, while staves might increase damage for high-saturation skills. A mace might benefit high-luminance (good) skills, while a dagger might benefit low-luminance (evil) skills.
Disadvantages
There are a couple of big disadvantages, not least that we never found a good way of representing a 3D cube of colours to the player — we were limited by the ability of 2D screens and human eyes to see all three axes at the same time.
Certain areas of the spectrum were also rather sparse — certain hues, saturations and luminance ranges had a lot of abilities in them, while others had fewer, and characters with innate colours in those more sparse ranges would find themselves without as wide a choice of abilities as others.
The system also scales badly with level as originally designed. Each increase in level expanded the “sphere” of a character’s potential abilities in three axes at once, so an increase of n levels results in an increase of n3 volume. The result of this is that characters’ rate of picking up abilities becomes exponential. A logarithmic increase in sphere radius would have been a better idea to control this.
Alongside the difficulty in displaying the colour cube, it would also be difficult for players to discover the locations (i.e. colours) of new abilities that they may want. A lot of work would be needed in suggesting to the player which abilities they might want to practice, and what new things they would learn if they did.
-
Exploiting Conde Nast Magazine Subscriptions (for fun and profit)
I have a pile of unopened subscription copies of Wired UK piling up in the hallway, so this evening I decided to try cancelling my subscription. It looks like you can only do that by email or over the phone, but for other subscription changes, such as change of address, the Condé Nast parent company offer a very helpful website. Rather too helpful.
The login page usefully notes that “you can find your customer number on the wrapper your magazine comes in.” And indeed it does — strip the letters off the beginning of that long number (as it helpfully doesn’t tell you to) and that’s the customer number.
The signup form asks for the customer number “(if known)”, leading me to suspect that even that may not be necessary, and all you actually need to know to manage someone’s magazine subscription is their name and address.
I tested this with my own details. Signing up sent me an email in which high-quality HTML character code skills are demonstrated.
After fixing the URL and pasting it into a browser, then logging in with my new details, I was given full control of my subscription account. This allows me to see my subscriptions, and to change the address to which they are sent.
So there you have it — non-intrusively viewing the outside of any Condé Nast magazine subscription packet (possibly UK-only) gives you the ability to view all the recipient’s subscriptions, and redirect them to the address of your choice!
-
Optimising for Download Size
If, by some vanishing small probability, you are a regular visitor to this website, you may have noticed a few subtle changes over the past few weeks. In part due to trying to access it from a slow mobile connection, and also in part due to a series of tweets courtesy of @baconmeteor which got me wondering how much data is required to load a simple page on my own website.
The answer, apparently, is just over quarter of a megabyte.
Not a tremendous amount in this world of 8MB rants about how web pages are too big nowadays, but still unnecessarily large given that it contains only about two kilobytes of useful text and hyperlinks. After 65ms (10% of total load time) and 1.59kB (0.5% of total data size), the content and structure of the page is done — the remaining 90% of time and 99.5% of data are largely useless.
Over the past few days I have made a few changes to improve the performance of the site.
Changes Made
- Web fonts have been removed. I was using three: one for body text, one for italic body text, and one for the menu. Together they comprised over 50% of the data that browsers were expected to download, and although I do like those fonts, it’s dubious for me to impose my font choices on others, let alone make them download 100kB for the priviledge. If you happen to have Open Sans and ETBembo on your system they’ll be used, otherwise the website will appear in something reasonably close.
- Font Awesome JavaScript is gone. I used the excellent Font Awesome to generate the menu icons on the site, but it pulls in 63kB of JavaScript to support 500+ icons, when all I use it for is static rendering of 12 of them. All major browsers now support inline SVG, so I took the relevant icons from the Font Awesome SVG set and used them instead. Aside from the Juvia commenting system and MathJax, there is no longer any JavaScript on the website.
- Reduced image size. Although my inner egotist is quite fond of people being able to put a face to the name on all my stuff, the 28kB JPEG could be compressed to 6kB with no discernable loss of quality.
The result has been a significant reduction in download size and load speed — the same page is now served in less than half the time and with less than 10% of the data usage.
One extra addition was to explicitly set cache expiry times in the HTTP headers for the website and associated files. Since the CSS and image files are unlikely to change, and in any case it wouldn’t matter much if a user used old ones, setting the cache timeout to a week and a month for various file types has helped speed up loading of subsequent pages after the first. I use the Apache server’s
mod_expires
module, which has some example config here.Changes Not Made
A couple of changes I considered, but eventually avoided making, were minifying the HTML and CSS of the site.
The Octopress 3 minify-html gem does what it says, but unfortunately increased the build time of the website by 150% — from around two minutes to over five. I already find the build time annoyingly slow on my mid-range laptop, so have decided to skip this one.
Another benefit would have resulted from minifying the CSS used for the site. This proved to be significantly more complex, involving configuration of the very capable jekyll-asset-pipeline module. However, the configuration seemed difficult for what would have been at most a 1kB saving, so I avoided this as well.
Useful Tools
Two tools were particularly useful in optimising the site for download size:
- Google PageSpeed Insights identifies speed issues, along with user experience issues and provides a simple display of how the site appears on mobile and desktop. In the case of the image & CSS optimisations it suggests, it automatically performs the optimisation and allows you to download the result.
- The Pingdom Website Speed Test was also useful as it picks up some issues that the Google tool doesn’t, such as the lack of explicitly-set expiry times on certain files.
I hope this post has offered some useful hints if you are seeking to “minify” your own website, and optimise it for the download size of each page.
-
Android Without Google
For several years, I’ve been considering whether I could—and should—dispose of my Google account. Since I wrote the linked post back in 2011, my use of Google services has declined anyway, and I no longer use GMail, Google+ or Google Calendar. At the same time, it has become apparent that users are at the whim of Google’s decision to close unprofitable services (even beloved ones like Reader), and to force us into using others against our will. “Don’t Be Evil” is starting to look hilariously naïve.
The last hold-out in my desire to dump Google is my Android phone. Without a Google account and the closed-source “Google Play Services” blob that sits at the core of an Android phone, the experience is diminished significantly. While I like my phone’s hardware, I am not fond of the Google integration that I no longer fully trust. So, for the last few months I have been experimenting with running Android without Google.
Here’s what I’ve learned.
I do Depend on Some Google Apps after all.
Aside from what’s provided in my AOSP-based CyanogenMod base software (much of which was written by Google, but is at least open source), I have two Google apps left on my phone—Maps and YouTube.
Maps features live traffic updates, a key feature when driving long distances to see friends and family. Although other apps have voice guided navigation (I also have OsmAnd installed), I’ve been unable to find a free live traffic offering that matches Google’s.
YouTube doesn't seem to have a decent open source client for Android, either due to legal problems or just that there's little desire for one. To cope with my kid's regular desire to watch the music videos for obscure pop songs on my phone, I've had to keep this installed too.EDIT: Check out NewPipe for a YouTube replacement!
That means Google Play Services stays.
Neither Maps nor YouTube works without Google Play Services installed, and so far that’s meant I have had to keep it installed on my phone.
However, my main trust issues with Google stem from their tracking and the amount of data they (want to) store about me. I can still prevent this another way—by removing the Google account from my phone. Play Services, Maps and YouTube continue working correctly, but my phone-based activities are no longer reported to Google in a way that connects them to me, and I can move one step closer to deleting my account.
You can Just About Survive on Open Source Apps
My replacement for the Play Store is F-Droid, a repository for open source apps, and in the spirit of trying to copy my laptop’s (mostly) open source software, I have decided to use it almost exclusively.
There are other app stores available, such as Amazon’s, but the “ditching Google” exercise is about trust, and I’m not sure I trust Amazon any more than Google when it comes to their ability to monitor my phone usage and try to sell me things. Aptoide is another possibility, but the user-hosted repositories are full of software the users don’t own, are pirated, or potentially full of malware; once again the trust is lacking.
Productivity
As far as standard productivity apps go, there has either been an open source equivalent that fulfilled all my needs, or I was already using an open source app anyway and could update it direct from F-Droid.
- K9 Mail was my default mail client anyway. It has a few failings, but in my opinion is still the best mail client on Android.
- Firefox was my default browser, and is open source as you would expect.
- Silence replaced TextSecure. It’s a fork that is identical in every way bar the name.
- WeeChat’s Android client is open source.
- VX ConnectBot is open source.
- DAVDroid replaced CalDAV-sync and CardDAV-sync. My self-signed SSL certificate had to be added to Android itself manually, but aside from that quirk this one app replaced two.
- For security, Google Authenticator and OpenKeyChain are open source apps that I was already using, and KeePassDroid replaced Keepass2Android with only a few little irritations.
- Ghost Commander replaced File Explorer and Turbo FTP Client together—I find its interface annoying to use, but it seems to be the only open source file manager with SFTP and certificate-based login support.
Web Stuff
Here again, I didn’t find much to change from my original apps, largely because I was using non-standard software anyway.
- OnoSendai is written by a friend of mine, and is my normal Twitter client. It has its own F-Droid repository.
- FaceSlim is a simple wrapper around the Facebook mobile website. Again, I have used this in preference to the permission-hungry “real” Facebook app for a long time.
- I was already using ownCloud and ownCloud News Reader for file sync and RSS reading; both are open source.
- Slide replaced Reddit Sync as my go-to Reddit client. There’s another service I ought to ditch one of these days.
Everything else, I already used my browser for on Android.
Games
Games have been the biggest difference between my phone before ditching the Play Store and my phone now. The number of games for Android—even closed source ones—outside of the Play Store is very limited. F-Droid has a variety of simple puzzle and arcade games, while past Android Humble Bundles have provided some high-quality indie titles as downloadable APKs, but on the whole the choice is bleak.
On the plus side, the exercise has given me a great excuse to dump a number of potentially evil mobile games that I seem to have picked up since my last purge.
How many hours have I wasted on improving pixel people and harvesting ephemeral bits?
The Gaps
There are a bunch of applications that I still use because there is no proper open source replacement. oandbackup is not yet a decent replacement for Titanium Backup, and try as I might, I cannot get my VPN server working in “OpenVPN for Android” while it works fine in the closed source “OpenVPN Connect”.
And there are the proprietary services that will likely never have open source clients that offer the full functionality—Spotify, Netflix, the apps for my mobile ISP and my bank. This is where the main problem lies: these apps that I can continue using but are no longer receiving security updates via the Play store.
Conclusion
The vast majority of apps on my phone either come preinstalled in AOSP or Cyanogenmod, or can be found in the F-Droid repository and successfully kept up to date there. It’s workable as an entirely open source platform (bar the separate issue of device drivers).
But dragging a few “essential” closed-source apps into the situation is a lot more difficult than on a desktop operating system. On my laptop I can install Spotify direct from the company’s website, and even add a repository to my package manager to get automated updates. But on Android, the Play Store dominates and the majority of app writers do not allow publishing anywhere else.
This is an unintentional lock-in that prevents users from having a choice of software sources.
It’s an almost useless fight, but I feel that we ought to continue fighting against the new operating systems’ desire to contain our purchasing and constrain what we can and cannot do with our devices.
The future’s good for me—I’m getting by without Google’s tracking features on my phone, which puts me in a good position for a potential switch to Ubuntu Touch, Sailfish or another phone OS that respects its users’ privacy. But not everyone would find it so easy to do without the proprietary blob at the middle of Android, and that’s worrying for the future of the general purpose computers we all could have in our pockets.