The cycle of change

I've done quite a few cycling trips, but three clearly stand out as the major ones: Tokyo to the southernmost point of Kyushu, Tokyo to the northernmost point of Hokkaido, and Kyushu back to Tokyo. As far as the Japanese coast line goes, the last bit that I haven't done yet is from the northernmost point of Hokkaido back to Tokyo via the east coast.

Next year is the ten year anniversary of that first trip, the one from Tokyo to Kyushu all by myself. Inevitably, I find myself thinking about my life in terms of "before the trip" and "after the trip", about what kind of person I was before, and what kind of person I was about to become. That first trip is the marker for the biggest change in my life. I moved back from Japan to Europe. One life ended, and another one began. I was young and naive and full of a hope and a freedom that I will never ever regain. The term 'cycling trip', to me, is about that feeling of youth and freedom. But it's a feeling I've gradually lost over time.

Europe taught me some harsh lessons about what it's like to actually be an adult. I really had just been playing around in Japan, and I was not quick to change my ways after moving to the UK. I landed a job with a lot of freedoms, and I used it to become the most physically fit that I ever was. By the time I took three months off for the second cycling trip, I was in my prime. I challenged myself by cycling routes that I'd never even have consided before. The second trip to the North of Hokkaido was definitely my best physical achievement. I was never 'not fat', but I was definitely fit.

Between the second and the third trip something changed. I started becoming a different person again. It became hard to think of cycling in the same way as before. After the first trip I had never experienced life in that way before, and there was nothing better to me. The second trip continued on that feeling, but at the same time my life back in the UK was starting to come together.

My moment of 'cracking' came during a smaller trip, a few years after the big trip north. I had taken a two-week holiday from my job to do a shorter cycle from Hiroshima to Kyushu, to repeat a few of my favorite bits from past cycling trips, and to fill in a bit of coastline I hadn't cycled yet. I was cycling along the coastline with a perfect blue sky, not too warm, not too cold. It was a nice, wide, road, with a cycling area to the side and not too much traffic. Mountains on one side, and some small islands visible along the Japanese inland sea. It should have been perfect. I should have been enjoying myself beyond belief. But all I could think of was: "Why am I not enjoying this?"

I didn't understand the feeling, or where it came from. I stopped by a convenience store, bought some food and sat on a seawall for quite some time, feeling unhappy and trying to make sense of my emotions. Whenever I think about my trips nowadays, it is that moment that stands out for me as the turning point, the point where I realized I was becoming someone else. I didn't understand or accept it at the time, and it vexed me for years. It kind of still does. I still want to be the person I was back when I undertook that first cycling trip, but I can't. I can never go back to that. My life experience won't let me.

That trip was in Autumn. The next spring, I quit my job and went cycling again, to do it properly this time. I figured that the previous trip left a bad feeling because I had a job to get back to. It's hard to reproduce the feeling of freedom if you're only on a two-week break, so so I thought at the time. The third 'I quit my job and I'm going cycling' trip went from Kyushu back to Tokyo. It started at the point where I left with a bad feeling the previous autumn, and I felt vindicated when I made it back to Tokyo along the northern coast. I still had it.

But my exit from my job was a soft exit, with the opportunity to come back, which I did. Soon I was living the same life as before the cycling trip, which is why in the long term I think about this third trip differently than the previous two. Every cycling trip I see my options in life decreasing. Every trip I get older, more settled down. And that's not a bad thing at all. I'm quite happy with the direction my life is going. I'm creating options in one area, but as a consequence, options in another area are disappearing. Cycling trips remind me of a freedom I can't ever have back, and that's why I started feeling bad when I think about cycling trips. More and more it feels like escaping from life rather than creating opportunities in life.

There's one more trip left before I can finally say that I've cycled all of the coast of Japan, and I'm dreading it more and more every year. I've chosen my life in the UK, so I won't get the sense of freedom I got from the first trip. I'm getting older every year, and I'm definitely past my physical prime, though I reckon I'll have no real trouble as long as I don't injure myself. I'm pretty good at not injuring myself. Lastly, the bit of the coast I didn't do yet is the coldest, longest, most desolate, un-Japanese part of all of Japan: the east and north coasts of Hokkaido. Long stretches of nothingness with cold temperatures and strong winds. None of it is what I like about Japan, and it feels like a chore to do it at this point.

2020 seemed like the perfect 'I quit my job and I'm going cycling' year. Exactly ten years after the first trip. A perfect opportunity to evaluate what I was then and what I am now. But the truth is: I do that all the time. It's not like I turn my brain off for ten years and then wake up and wonder where I am. I chose to come here and I was conscious for all of it, no excuses. I'm no longer the same person I was ten years ago, and the person I am now has different priorities. I wouldn't have grown as a person if that statement turned out not to be true.

The legendary fourth trip will have to wait a little longer. I've not given up, but I need to create the right opportunity for it. Life goals allowing, I intend to make this happen in the next five years.

Let's see what will happen in the next decade. 2020, bring it on.

Posted in Cycling , Thoughts

Ears, motherboards and DACs

I love listening to music at home. My preferred place to do that is usually at my desk, where I play it through my PC. I've been using a Beyer Dynamic DT770 for about 10 years now. I'm on my second pair. I've gone through a lot of peripherals in-between; I used to hook up the headphones to whatever pair of crappy PC speakers I had at the time, but a few years ago I bought a small headphone amp and after that I had been using a small mixpanel. Neither of those were strictly necessary, but they provided easily accessible volume controls and were able to drive my headphones at higher volumes than the motherboard could (I have the 250 ohm version). This all worked great, up until the end of last year, when I convinced myself I was going deaf.

From January onwards, for some reason, music started sounding.. 'duller', to my ears. I really don't know how to describe it accurately. I didn't even realize that something was 'wrong' until weeks or months later. It just seemed like I didn't get my usual enjoyment from listening to music, and I couldn't figure out why. For a while I just thought it was my ears, accepted it, and thought I'd lost one of the things in life that I really enjoyed. For a while. And then I started experimenting.

I thought that maybe it was my headphones. So I tried some other (pretty decent) headphones we had lying around the house and hooked those up to my PC for a while, but all I could tell was that the audio quality was worse, not better. There was nothing wrong with the headphones.

My next suspicion was the speakers. I had been using the cheapest Logitech speakers in the past, but because they did not allow me to control the headphone output's volume with the volume control knob, I always had the headphones plugged in separately via a mixpanel. Last December I bought a new PC with new speakers: they were the second-cheapest Logitech speakers, which did allow headphone volume control using the volume know. So I ditched the mixpanel and connected my headphones up to the new speakers directly. But could that be the difference?

In order to find out I enlisted the help of my wife to do a blind test (or should it be a deaf test in this case?). I hooked up both the speakers and the mixpanel to the PC, normalized the audio, and got my wife to swap the outputs while music was playing, while I tried to guess which one was which. I had tried doing this just by myself without the blind part of the test, but I wasn't confident that it made a difference. But the blind test proved fairly conclusively that there was a difference, and that we both preferred the sound through the mixpanel, albeit only very slightly.

I ran with this for a while, but ultimately still felt like I was missing something. I really ran out of ideas for what could be causing my lack of enjoyment of music, other than my own ears.. but there was one other variable that I had changed and not tested yet: the PC. With the PC came a new motherboard: the MSI B450M Mortar, with an on-board sound card, as all motherboards have these days. I've been using on-board audio for years and never had issues with the audio experience, so it seemed very unlikely to me that the motherboard could be causing this. But it was the last thing I hadn't tested yet.

One other thing that made me wonder if it was the motherboard is that I sometimes play racing games with a separate app playing music in the background. My old motherboard used to mix these just fine, but after switching PCs the new one always seemed to cut out the volume of one app or the other at certain input levels, which sounded extremely frustrating. For a long time I suspected Windows 10 of causing this (antoher variable change: my old PC ran Windows 7), with it's "mute background apps" functionality, but I had made very sure that that was turned off.

In order to test if the motherboard audio made a difference, I bought an external DAC: the Sabaj Da2 USB DAC. It's an external USB digital-to-analog converter, which turned out to be easily powerful enough to drive my 250 ohm headphones without an amplifier in-between.

Before buying the Sabaj Da2 I had been planning to set up another blind listening test, but it took me less than an hour of using it to realize that I wouldn't have to. The sound is subtly but unmistakeably better than the motherboard audio I had been putting up with for so long. It's hard for me to articulate exactly what makes it better though. It's as if I am much better able to focus on the smaller, subtler aspects of the music, rather than just being bombarded with just the main instruments. The music seems fuller, I guess. It's a small difference, but it's impossible to not notice once you've spotted it. and then you'll never want to go back. I now wish I had tried this a lot sooner..

The Sabaj also solved the issue I was having with music not being played at equal volumes when I have more than one app playing sound at the same time. I don't know if that's just crappy drivers or crappy hardware on the motherboard, but I don't care. I'll stick to dedicated hardware for audio from now on. Side note: the Sabaj gets really hot, I'm tempted to slap a small heatsink on it.

(Disclaimer: I did not get paid to write this article. I haven't tried any other USB DACs so I don't know how the Sabaj compares with similar DACs. All I know is that it's detectably better than motherboard audio.)

Posted in Tech | Tagged , , , ,

Grown-up life and blogs don't mix

In the recent years I've begun to think very differently about the 'free' time I have available to me. Back in my mid-twenties my free time was truly free. My commute was short, my responsibilities were little, my social life was not very active, so I ended up having more than enough time to spend on all the things that interested me at the time. Now, ten years later, my social life is still not very active, but everything else has gotten a lot more busy. I lose two to three hours every day in my commute. I am fortunate enough to be able to worry about what the most efficient way is to mortgage our apartment, how to invest our savings, and so on. Once those things enter your life you have to prioritize them accordingly. Just keeping up with this took some adjusting for me. And I don't even have kids! I can only imagine how busy people are when they have kids to take care of. The free time in my life has gone from 'mostly unplanned' to 'fully planned', with almost no exception. I probably first had this thought years ago. I just didn't have time to blog about it.

What does "I don't have time" even mean? In this context it doesn't mean that I am so busy 24/7 with things that utterly vital to my life that I don't have time for anything else. I still spend lots of time playing games, watching movies, cycling, editing photos, and so on. What it means is that, after I'm done with the things that are vital to my life (social obligations, researching decisions that will affect me for the next decades, daily-life churn like laundry, dishes, commutes) I end up with very little time and 'active brain time' left, that I choose to spend it on other (less creative) activities.

Today is an exception, though. Today is the first day in months in which my to-do list has finally shrunk enough for me to feel like devoting some time to blogging. In retrospect I think it was probably a mistake to switch away from Wordpress those few years ago. Yes, my blog is now statically hosted, way faster, and fully managed by me, but the scope creep in getting the little features that I need in means it ends up taking literally years before I have something that even does the bare-minimum that Wordpress does. If I had to make this decision again, I probably would've stayed with Wordpress and moved to more expensive hosting. It's a wonderfully hands-off ecosystem. The reason I wrote my own static blog system and did not use an off-the-shelf solution is because I believe I would be locked in to someone else's solution if I used an off-the-shelf library or framework. My own system minimizes dependencies and lines of code. The actual meat of the system (template rendering, page generation, publishing) is less than 600 lines of code. Sadly, the Django app that I'm writing this in is proof that I still have dependencies and need to write hundreds more lines of code before I actually have something I can use from any random device or location. I think this solution is the right solution for someone who has the time to work on it. What I should have done is just buy more expensive Wordpress hosting, which would've gotten me a lot more happiness, time-savings and features.

One thought keeps popping back into my head over the past few months: "Efficiency/Productivity is the enemy of Creativity". That's one way to phrase it. Another way would be "Efficiency and Creativity are two sides of the same coin". The more efficient I work, the less creative I am. The most efficient people I know are people I would not rank very highly on creativity, and the opposite seems to hold true as well. I find the consequences of this interesting for someone (like me) whose professional role is "web developer". The 'developer' part is something you can improve by being more efficient/productive, but the 'web' part has a very strong element of creativity in it that is sometimes overlooked. Trying to satisfy both elements is an interesting challenge. Building my own blog is something I thought would be helpful for creativity, but in my attempts to keep the amount of work to a minimum I think it ended up being an exercise in productivity rather than creativity. Building things is not fun if you don't enjoy doing it. And (at least in the case of hobbies) if you don't have joy in what you do, why are you doing it?

Use it or lose it.

Posted in Daily Life , Thoughts | Tagged

A modern-day Dokkōdō

Prioritize mental, physical and financial health.

Use all of the day. Don't spend all your time in virtual worlds.

Accept inconvenience. Don't complain.

Think about what, ten years from now, you will wish you had gotten out of life now.

Spend some time in the sun every day.

Eat in moderation. Don't eat bad things.

Throw away things you don't need.

Meditate every day.

(Inspired by the original Dokkōdō).

Posted in Daily Life , Thoughts | Tagged

Raspberry Pi powered Legobot: latency

I've blogged before about my neverending attempts to build the perfect robot to drive around my apartment remotely. I've gone through a lot of mechanical designs, and had a lot of failures. Eventually I settled on something that was very much simplified compared to my initial ambitions, but it works alright now. It's been serving as my remote camera every time we go on holiday, so it's doing its job. Here's a writeup on the software latencies involved.

At the core of this contraption is a Raspberry Pi that controls a whole bunch of Lego motors, and one set of lights. I wrote my own Python+Django web app to control access to the device from the internet. It uses Django Channels to send the user input to the server-side, where the web app controls the Raspberry Pi's GPIO ports directly. This means it's not very thread-safe, but then it was never really meant to be controlled by more than one user at a time anyway.

For the video stream, I tried a lot of different solutions, but all of them had terrible latency. The problem is that the Raspberry Pi just does not have enough CPU power to encode the video into a stream and send it over a websocket. However, after a long search, I did eventually find a solution someone else developed that's pretty nifty: it uses the native Raspberry Pi video tool to stream the raw (H264-encoded) camera stream directly to a websocket, hosted by a Node.js webserver. This means that the video stream has to be decoded client-side, in the javascript executed by the client's browser, using a nifty js library. (I'll eventually get around to placing links to these libraries, once I remember where I got them from). Turns out this works pretty well!

Here's a really terrible video that shows the latency of the controller software, as served from a web page on my mobile phone, over the phone's 4G connection, so not on the wifi.

This video was taken on my old Canon S110 camera, which has a super slow-mo mode which records at 240 frames per second. So, counting the frames between events, I get these results (averaged over a couple of different videos):

  • Time between pushing the 'lights on' button in the mobile phone browser and the UI registering the event (client-side-only lag): ~31 frames = ~129ms.
  • Time between the button being pushed, and the lights turning on in the video: ~12 frames = ~5ms. I'm guessing this is very short because the actual action is being sent to the Raspberry Pi well before the UI update begins, so it'll overlap with the first action. Time between finger push and real-life consequence: about 135ms.
  • Time until the mobile phone video stream shows the lights being turned on (since the lights actually turned on): ~55 frames = ~229ms.

All in all it's close to half a second between requesting the action, and actually seeing confirmation of the action on-screen. And that's on a fairly reliably mobile connection close to my home. It's a different story altogether on crappy hotel wifi halfway across the world, although I've also been to some amazing hotels in Japan where the speed was very similar to the speeds in this test.

Still to do: open-source the Raspberry Pi software I wrote for this. More to come!

Posted in Tech | Tagged ,

Moving the goalposts

This blog is finally on https! It's been a while in the making. I first tried this over a year ago but couldn't get AWS from generating an infinite redirect loop. In the end I think it was a combination of the Cloudfront distribution doing redirects and the S3 bucket that this blog is now served from also doing redirects. I think I may have actually solved it at the time, because I did the same thing again this week and it worked, but it turns out the changes take quite a while (over a day from what I've seen) to propagate, so I never knew that my fix worked the last time I tried it.

So, 2019 now. Middle age has definitely struck. I've found myself very busy last year. Busy enough to not have enough mental energy for side projects or hobbies. My major peave of the year is definitely my commute. My commute to work is, by my own standards, way too long. It's one of the things I'd like to improve on this year, if at all possible. Currently I've got perhaps 3-4 hours of free time after work, which, after dealing with all the adulting (house chores, mortgages, that sort of thing) leaves me with no time during the week where my brain is actually functioning. While I'm unhappy about that, it's also a path I've chosen for myself, and the benefits (which I won't go into here) outweigh the costs. And there's things I can do to optimize that.

One thing I definitely should reflect on when thinking about last year is the concept of moving the goalposts. I keep perceiving my life in a way that makes it seem that I haven't accomplished what I wanted to accomplish, but I forget that I had very different goals a few years ago. While I was kind-of-sort-of aware that I had been doing this over the past year, lack of free time and preoccupation with other things left me until the December holidays to really realize how much my life has changed in the past few years. Whilst all of the world around me was going to shit in 2018, for me things have improved massively in terms of knowledge, financials, living quality, and all kinds of other things. When I'm busy living the daily life it's easy to overlook that and just focus on optimizing the next thing that's not quite perfect yet, without realizing that I've already dealt with 99.9% of the biggest worries I could be having. I think it's ridiculous to value the remaining .1% of quality of life as high as the 99.9%, but that's naturally what my brain does, and it needs conscious effort for me to stop thinking that way. My goal is to try and be more aware of that in 2019.

Here's to a good 2019. May your goalposts be moved ever further.

Posted in Daily Life , Tech , Thoughts

Hello blog!

Hello, blog. It's been a while.

Last year, after the previous blogpost, I felt a good sense of closure for the blog, so I decided to take the plunge and turn the entire site into a static site. No more wordpress, no more new comments, no more new posts. This turned out to be pretty easy to do: all I had to do was scrape all the pages on the domain and upload them to S3. I had been meaning to get an https certificate set up, but ran into some snags that I couldn't be bothered to work out. It's still on my to-do list, but at the time it was just yet another thing that prevented me from continuing the blog.

Continuing? But why? Didn't I say that I was done blogging? Well, yeess.. but..

Everything I said in the Goodbye post holds true, and I stand by what I said. The internet is not the same place it was when I first started blogging. Compared to 10 years ago I still feel quite strongly that it's way less appealing now to to put content online. The second argument, about my own life, also still holds true. I really do have way less things I want to blog about, and way less time to write blogposts. It compounds, of course: because the internet feels less inviting to me now, I feel the need to structure new blogposts better, more coherently. That costs more time. It all compounds.

But despite all that, during the past year I did find myself occasionally having the desire, the inspiration and the time to blog. Even if the amount of things I write is cut down ten-fold, there will still be the occasional blogpost. So, while the desire to blog was occasionally there, I was blocked by having made the site static: with no wordpress interface it's just a major pain to manually write something: I'd have to manually edit HTML files, update the index page, update the category pages, tag, pages, archive pages.. It's simply a non-starter. I had to make this easier.

There's a bunch of static blog generators out there. Some of them look nice. I'm willing to bet that there's a very large change that whichever one I pick won't be maintained any more ten years from now, and if there's one thing I hate it's dealing with someone else's codebase in my free time. Big nope. Since I'm a web developer anyway, I decided to build something myself. That was in January..

I got pretty stuck on doing something simple. If there's ever a second thing I hate, it's dealing with my own codebase in my free time, so I wanted to make things as simple as possible. This often meant that, as soon as I wrote something, I immediately discarded it for being too complicated. Perfect is the enemy of good, and nothing got done for months. I had decided that I wanted a flat file format consisting of a yaml section for each post's metadata, and markdown(+HTML) for the post content. But I really didn't get further than that, because I desperately tried to pretend that it was just a small project and could be contained in one simple file. I finally found myself with a lot of free time this week and decided to tackle the problems head on.

The result-for-now is that I ended up with more code than I wanted, but nothing too crazy. Since I'm the most familiar with Python, I ended up writing a template renderer using jinja2, a generator which gathers all the pages that need to be updated for each article, and a publisher that uploads to Amazon S3 using boto3. No other dependencies, although I did write a little preview site in Django just so I could get instant gratification as I was doing all the template and CSS tweaks.

I ran into major issues with transforming my original blogposts from Wordpress to the new yaml+markdown format. At first I was working on a scraper-like tool that would read my old blog's static HTML files and do some parsing. Then I found out that for some reason my old static blog was missing all posts before 2007. So I had to deal with the Wordpress SQL backup. I wasted an hour trying to import the bloody thing into SQLite, but ran into countless SQL dialect errors. Eventually I gave up and installed MySQL and ended up wasting another hour getting all the settings right and connecting to it from Python. In the end I did manage to extract all the posts from the database and into happy little human-readable flat files.

Then I hit another snag: turns out a lot of posts on this blog use special [block] tags for extra functionality, and that of course wouldn't work as-is. So I had to convert those to HTML. Since I was doing some search-replaces anyway I decided to do some anonymization as well: my goal for this blog is for it to be a one-way street: if you already know me it should be easy for you to discover this blog, but if you don't know me already, searching my name should not bring up this blog as the topmost hit. I realize I am completely failing at this at the moment by having a Github link in the header. That'll probably go away at some point.

Another snag was the post count: since each page shows the number of posts in each category, I'd have to update very single page every time I add a post for a category, just so the counts are updated. What a pain. I decided to remove the counts from the HTML entirely, and I added a separate stats.json file that adds the counts in through javascript. No javascript required for this blog, but it does do enhancements.

It was at this point that I realized that I was getting very carried away with everything and that I had to put a stop to this: I ended up spending the better part of five days rather than the two or three mornings I had estimated. But finally I am in a state where I can relatively easily write a new post and publish it. I need to have the python code and the raw blog contents on the machine that I'm writing from, and it currently only works via a command line one-liner, but it works. I intend to make a very basic front-end for it at some later point in time so I can publish from any machine using a Django app. Another thing I'd like to add back is the comments section. Who knows, perhaps I'll get around to that before 2020..

There's a lot of things I want to do, both in terms of adding features as well as things to write about. I still want to write down in detail what the Lego Raspberry Pi project ended up becoming, and I also want to publish the static blog generator on github after I'm done cleaning up the code. Who knows, I might even be tempted to write about my personal life again at some point. In any case, stay tuned for more exciting content.

More to come!

Posted in Daily Life , Tech , Thoughts

Goodbye blog

It's time for me to acknowledge that this blog is becoming less and less of a priority in my life. I've tried to re-motivate myself for blogging by attempting to open a Patreon account last year, but that hasn't been very successful. For good reasons, I should add, because if you're going to spend money on Patreon there's a lot better places to spend money on than this silly place. I'm not intending to wipe this blog off the internet or completely stop posting, but the content of this blog has definitely changed from "I am posting at least weekly about important experiences in my life that have affected me deeply" to "I am posting once every few months about stuff that I have trouble motivating myself for". So I guess some closing words are in order.

There have been some major changes in my life lately. I got married. Bought an apartment. Bought and sold a car. Changed jobs. But I think the one major change that is a constant throughout everything is: I got older. I continue to get older. And as I get older, the amount of importance I place on my own life only decreases with time. I believe this is strongly correlated with intensity of experience. Ten years ago I experienced everything for the first time and was amazed at what life could be like. It was something that I felt I had to record, not even necessarily for others, but at least for myself. Formative experiences. The internet was a more innocent thing at the time, and a blog seemed like the right place. The internet was full of friends, not of crackers.

On all these fronts the zeitgeist has moved on. I am at a point in my life where I don't have many truly 'new' experiences any more. There's still loads of stuff I've never done, but I've done enough similar things often enough to be able to relate and use my experience in new areas. For example, my experience in touring cycling gives me a broader knowledge that can be applied to backpacking. It also gives me a starting point if I ever wanted to venture into speed cycling. My experiences in traveling to various countries means I've learned how to get started on exploring other new countries. My experiences in learning several programming languages and countless frameworks-du-jour means that it's pretty easy for me to pick up other new software technologies. It's a kind of meta-experience: it's the experience you need to be good at experiencing new things.

Having meta-experience is nice, but also not nice. It definitely seems easier for me to start any random new thing at this point in my life compared to ten years ago, but also, I could not possibly derive the same kind of enjoyment, the same kind of 'new-ness', from it. Less intense experience means less desire to blog about it.

Another thing that's changed since I started this blog is 1) social media, and 2) my relationship with my friends. When I started this blog Facebook was only just becoming popular. Video calls existed but kind of sucked, especially if you had to explain to non-tech-savvy people (my parents) how to do them. This blog was a great means of staying close to the friends that I made in Japan after we all went our separate ways. That was ten years ago though, and the amount that I communicate with my friends today seems to be a better fit for Facebook than for blogging. Even my un-tech-savvy parents figured out how to use Facetime, so there's no shortage of communication methods.

It's definitely worth mentioning here that the internet has changed. If you're applying for a job, companies you apply for will without fail find out everything about you that's publicly available. That's only rational. I've had a negative experience once where a potential contact called me out on something I wrote on my blog. That's fair game, but if, like me, sometimes you write things that could be taken negatively out of context, then you need to consider that your online presence can only have negative consequences for you in real life.

There's also the hacker angle. The more you put up online about yourself for anyone to find, the easier it is for someone to impersonate you, or to find out starting points that they can use to find out more about you. This was something that you only vaguely had to be aware of ten years ago, but is becoming way more important lately. There's probably already web crawlers out there whose sole purpose is to crawl information on the internet and group it by person.

I'm sad to write this, but I'm even worried about what governments can find out about me. Imagine you're on a plane to some country, go to passport control and get taken aside for a 'random' check. Then you're confronted with some silly blogpost that you wrote ten years ago that casually mentions "but country X is a shit country anyway and president Y is an asshole". This is not a far-fetched scenario. I have read reports of this happening to other people online. All it takes is for one person to jump on one silly thing that you wrote years ago and you're in for a terrible experience. You could argue "but then you should think a bit more about what you write on the internet", which is a totally valid argument, but also that's kind of what makes blogging fun for me and (hopefully) for the few people in the world who are actually reading my blog, so if given that choice I'd rather just quit blogging.

I am coming to terms with all of these things. The meta-experience/getting older thing in particular has caused me to review parts of my life that I always took for granted, that I am now starting to feel that I could live without. Cycling is one of those areas. It fitted my bohemian persona from ten years ago, but nowadays I find that I've got some direction in life. With that direction, my cycling hobby has been reduced to 'staying fit', which is something I can actually do indoors. It doesn't help that the UK is a lot less cyclograph-friendly that Japan either. Blogging is on the list of things that used to matter a lot to me but are just not having any effect on my life lately. So it's time to cut them out. Spring cleanup. I have gained (meta-)experience from all of these activites, but now it's time to let it go.

See you later, perhaps.

Posted in Daily Life , Thoughts

How to find out if your phone is spying on you

<tinfoil-hat>

I browse 9gag a lot during my commute. Sitting shoulder-to-shoulder with my fellow commuters I find it uncomfortable to do something on my laptop, and at least in the mornings I'm not awake enough yet to properly enjoy a book or audiobook. So instead, I turn to 9gag for my cheap entertainment. As such, I see quite a lot of ads.

Over the past few months I've managed to convince myself somehow that the ads that I'm seeing are targeting things that I've only ever mentioned verbally, but never digitally. It's just extremely suspicious to see an ad for one particular brand the day after you've spoken about it to someone. This kept happening to me, so I thought of a way to try and 'prove' that my phone is indeed listening in. My wife and I had a running joke for a while where we'd shout odd terms ("ARNE JACOBSEN CHAIR!", "NISSAN MICRA!") at my phone to see if ads for them would show up. (No for the Arne Jacobsen chair, yes for the Nissan Micra, but cars in general are already a natural search term for me and there's a digital trail showing that I like cars, so no solid evidence there).

To take it one step further I devised an experiment. For a few days my wife and I brainstormed about topics that we would never ever look up naturally; topics that are so far removed from our daily (digital) lives that it would be very unlikely for us to see targeted ads for them. We tried to focus on popular topics that people or companies would actually buy ads for. All this was done offline, on a small piece of paper, and to the best of my knowledge neither of us ever uttered one of these topics out loud or typed it in digitally until the experiment was over.

While we were devising the list of topics I took screenshots of all the ads I saw on 9gag, as well as a few on Facebook and in my browser. The idea is to compare these to the ads I got served after uttering each of these topics out loud.

With the list of topics finished, rather than manually conversating through them in the vicinity of my phone, I instead prepared an old laptop of mine with a text-to-speech script which I ran overnight. I downloaded PyTTSx, made sure that it worked, then disconnected the laptop, which had a clean Windows installation with no personal information about myself, from the network, and uninstalled the network drivers. Then I wrote a Python script to run some plausible conversations about the topics we had written down on paper thought the TTS engine, and set it to loop. I had to listen through each topic several times to make small adjustments to the spelling because the TTS didn't quite pronounce all the words right unless you spelled it slightly wrong. I added in a few voices and a few speeds and ran the script overnight with my phone charging right next to the laptop, far far away from the bedroom. Because listening to a computer having a fake conversation about topics you couldn't possibly be less interested in does get boring after a while.

At this point the topics did exist digitally, but only on a laptop that was disconnected from the internet. I continued my daily routines as usual and again took screenshots of all the ads that I saw. I kept this up for 2 days before I got bored of taking screenshots, after which I categorized all the ads I saw into one or two categories and tallied up the results. 

The Topic column contains whether the category would be something I'd expect to see naturally anyway, or one of the "highly unlikely taboo topics" that I would otherwise never search for or would never even come up in my daily life. The rows highlighted in yellow are where the taboo topics overlap with the ads I saw, and the rows highlighted in red are the particularly suspicious rows of topics of which I suddenly got served a lot more ads after running the taboo topic script. There were also a whole bunch of taboo topics that I never saw ads for, presumably because no company paid for ads for those topics, or because I'm a crazy tinfoil-hat guy who's just a bit too paranoid.

I'll try and be generous and explain away both the medical category and the pets category. I was already served one ad in the medical category before running the script (which uttered some new and much more.. un-science-y medical keywords), so a slight increase is not entirely unbelievable. The same goes for pets: although the keywords in the taboo script were very heavily focused on dogs (whereas my wife and I are very much of the cat persuasion), we do have a pet and it's not unlikely that this information could have crept up in our digital life during the course of the experiment, outside of the TTS script.

Then there's the third red category that shows a sharp increase, for which I just can't find a reasonable explanation: loans. The ads in this category were for 1. credit ratings, 2. leasing cars, and 3. short term loans. I've been employed pretty much continuously over the past 12 years, have never searched for or had a loan (other than my mortgage, which is a very specific loan category that hasn't popped up either before or after the experiment). The TTS script contained several passages about wanting to buy or build (expensive) DIY things as well as the actual term "pay day loan", and some other words that could perhaps imply increased gullibility to these kind of ads. When I was categorizing the ads I saw a very clear distinction between ads that focused on investing capital (category 'Investing' in the image) and ads that focused on how to loan things or improve one's ability to loan things.

I can think of several explanations of why the ads changed after the experiment:

  • Coincidence. Ads change over time. Maybe the loan companies just didn't buy any (targeted) ads until in the middle of my experiment. I didn't run the experiment anywhere near long enough to rule this out.
  • Leaks. Maybe I changed something about my online behaviour that changed the ads I was served.
  • Something on my phone or in my house is listening in. Could be the phone OS, could be an app on the phone, could be a nearby TV or PS3.
It would be possible to go one step further and intercept the network traffic coming from my phone, but I don't think I would be able to conclusively prove anything one way or another. If the speech recognition happens client-side then I wouldn't see any speech data over the network. Or it could be encrypted. It might be worth a try, but I suspect I won't find anything obvious.

Is this enough evidence for me to say that my phone is definitely listening in on me? Definitely not. But this, combined with earlier incidents of ads matching conversation topics over the course of the past few months, I think is more than enough reason for me to be suspicious. It would be interesting to see other people try the same experiment. If they find the same results then we could start comparing phone OS, installed apps, other nearby electronic devices, etc.

For now, since I hardly ever speak on my phone anyway, I've put a little bit of blu tac over the microphones. I tested this with by calling my wife to confirm that no audio is heard on her end when I speak. If, over the course of the next few weeks, I find myself not noticing a single instance of an ad matching a conversation topic, I would consider that pretty strong proof that something on my phone is listening in. No matter the outcome, it's probably worth a followup experiment. Time to think of new categories.. (Don't send ideas for new categories to me, obviously! Unless it's a handwritten letter..)

</tinfoil-hat>

Posted in Daily Life , Tech | Tagged , , , , , ,

Sofia

We did a city trip to Sofia, the capital of Bulgaria. Things we learned:

  • Stamp your bus tickets. We took a but into town from the airport and didn't (know to) stamp our tickets. A stop later a bus conductor came in and charged us an 80 lev fine for not stamping them. Some websites describe this as a scam, but it technically isn't. Those are the rules of the country and the transport service which you should abide by. Counterpoint to that is that the driver knew we had just bought the tickets from him so were not reusing them on multiple trips, and the conductor knew we came straight from the airport and clearly didn't speak the language or knew anything about the country. If it were any other country the people would be reasonable enough to just let us stamp the tickets and let us off, but nope. Our first impression of Bulgaria was that people want to fine you.
  • Don't take pictures in museums. Your standard ticket does not include taking pictures. No one will tell you this until after you've taken a picture so that they can charge you extra money and you have no way to back out since you've already taken a photo.
  • Not personally experienced by us, but after the two experiences above we researched some more potential fines/scams, and apparently taxi scams are quite common too. I'm not surprised. The taxis looked extremely dodgy. Pickpockets are reported to be quite common too, although we had no issue with that.
  • Our hotel, one of the better ones on booking.com, somehow was unable to regulate room temperature to be below 28 degrees C, even though it was 10 degrees outside. Complaining about it didn't help.
  • Not many tourists on the streets. Or people. 
  • Graffiti everywhere. Broken potholes everywhere.
  • Hot spring steam coming up from the ground!
  • Beautiful mountains in the background.
  • The food was pretty good. Amazing desserts. Excellent fish. Lots of pork.
What a 'fine' country.

 

Posted in Travel | Tagged ,