The Instant Messenger Balkanization

I am sure much has been written about the fact that we all have a dozen IM clients installed on our phones, and every one of our contacts uses a different one. I’ve mostly not bothered to trim that down, installed all of them, and had an account with each, whether it’s Hangouts, Twitter, Facebook, Threema, SMS or IRC. But this last week makes me think that we need to get out of this situation.
I have been in hospitals for the past 6 days. That’s a time when people want to get in touch, get updates on my status, but also a time of bad Internet access. The first hospital had barely any patient WiFi to speak of, and this second one has an unsecured AP. I have an Android phone and no computer. The phone’s storage is nearly full, and I’m going to have to cut down on the number of installed apps, but can’t really kill any one of these messengers yet, except for Skype, because it really doesn’t work well on mobile devices. SMS is overall the most reliable form of communication, because it is the most democratic and widely distributed, and will always stick around as long as we have phones. I also need to keep it for my sister, who still doesn’t have a smart phone, and hardly checks messages on her laptop more than once a week. Facebook chat is the one where all of my friends are, but it lacks encryption. Almost all messengers fail on the encryption, so it’s nice that I can at least use these VPN functions in Orbot to route all of the internet traffic on my phone through Tor! Threema has end-to-end encryption, but literally no adoption. The latest offering in this space is Signal, which bills itself as an SMS client, and sends SMS when necessary, but encrypts messages over the Internet if both parties have it installed, and keeps everything inside a single app. A desktop client is in beta, too, which makes this more attractive than Threema. Given a choice, I would prefer that all of my friends ditch the text messaging clients on their phones for Signal, and ubiquitous encryption just happens eventually, but inertia is a terribly difficult thing to overcome.

Cloud Backup

I have kept meticulous backups of every turn from the three games I run. Before and after each turn, the data file, orders file and summary are zipped up into a .tar.bz2 file. This is essential for fixing bugs weeks later, because it lets me re-run a turn with the old data and watch what went wrong in my debugger “as it happens”.

The problem with these backups is that they sit on the machine in Germany that hosts the game, and I tend to do my debugging at home. Also, storing the current game data and the backups on the same hard disk is hardly redundancy. A weekly rsync between my home machine and the server would solve this, but my home machine runs Windows for a number of reasons, and so that’s not really an option. I could rsync to another machine in the house (I have a few Raspberry Pi for similar purposes) but then I still have to move the files from there to my desktop PC when I actually want to debug something.

Today I finally solved that problem, with a free Box (previously box.net) account. Box supports webdav, so it’s as easy a single curl request to upload my file to a shared folder, and the Box app on Windows will sync it to my desktop. Backup and local debug copies solved!

For future reference: to store the eressea.db sqlite database in a Box folder named Eressea, this is the curl command to do the HTTP PUT request:

    curl -n

-T eressea.db

https://app.box.com/app/Eressea/eressea.db 

Authentication with Box is done through a .netrc file on the host, because I don’t want to check the account password into github along with my backup script. cat ~/.netrc:

    machine dav.box.com login box@eressea.de password swordfish

Standards are great, and WebDAV support really makes the decision for which cloud storage service I want to use an easy one. The free account gives me 10 GB storage, enough for approximately 460 turns at today’s size of the game, so if I move them to CD backup frequently enough, I should never have to pay for storage. Nice!

Memory Leaks

Eressea has a pretty simple memory usage pattern. It allocates a bunch of memory during startup, when it loads the current game data file and creates all the regions, factions, units, etc. and the new orders, then stays pretty much flat while it executes the turn, only allocating more memory for messages and auxiliary structures. Then, after the report is written, it exits and the death of the process cleans everything up nicely.

There shouldn’t be a lot of memory leaks in a situation like that, but the code is written with the intention of being able to load and unload data files from the console, for operations like building statistics over time, repairing one file based on data in another, etc. A recent example was “link every familiar in turn X to the same mage they were familiars of in turn X-1″. So while programmatic cleanup is usually not required, it is in a situation like this (after analyzing turn X-1, we should free it before reading turn X to apply the fix).

Another reason for working cleanup code is testing. Unit tests work best when running from clean state, so anything that gets created in one test should be destroyed at the end of it, so it won’t interfere with the next test. My favorite tool for finding leaks like this is valgrind, and recently it was reporting almost 1,000 leaks when run on the full unit test suite. I started a new feature branch to eliminate them, and after a couple of evenings of hard work, I have pared them down to one final leak in the parser that is really hard to track, and a bunch of static variables that are the bane of this code base. As can be expected when doing work like this, I found a number of small errors that were more than just leaks, and added a lot more test coverage, so this should cause overall code stability to go up. The work ended up in one giant pull request, and will be part of the 3.7 version of the code.

Plans Change

Last time I regularly updated this site,  my plans were to use my copious free time to create a mobile version of Eressea, or at least a game based on the same principles. That’s no longer the plan.

Eressea is less a game than it is a world simulation. In this, the original designers were correct. There isn’t very much good strategy game-play at its core, and many of the game’s elements are not in support of a war game, but for world-building and to give players other, self-defined, goals to strive for.

With that said, I don’t have a lot of existing game to build on. Building a mobile client was fun as long as I did it, but the total time required to build what I had in mind was going to be enormous. I was also having more fun just working on successive new releases of Eressea itself.

So the mobile project is dead. Long live the original game!

Some former players have started new factions this years, eking out a living in the ruins of fallen empires, trying to hold their own against the zombie hordes and finding some resources that they can mine, or older factions they can cooperate with. It’s a different way to play, but it seems to be working for some, and for the original game, it’s a better way to maintain the active player base than new recruits and growing the map.

That means my development work is now defined by bug fixing, new features, and occasionally tools for creating new worlds. When I’m asked, I try to support anybody who wants to run a game of their own. And those are the topics that this site is likely going to cover in the future.

HTTPS Everywhere und spiegel.de

Seit einer Weile schon habe ich das Problem, dass auf spiegel.de Teile der Artikel fehlen. Gelegentlich sehe ich nur die Einleitung eines Artikels, und alle interaktiven Inhalte, ob Infografiken oder Sporttabellen, sind kaputt.

Zuerst habe ich natürlich den Adblocker als Schuldigen vermutet. Ein schneller Blick auf die Seiten im Inkognito-Modus von Chrome, wo alle Extensions deaktiviert sind, zeigt den vollständigen Artikel. Also nach und nach alle Erweiterungen abgeschaltet, bis der Artikel lesbar war, und siehe da: Es war HTTPS Everywhere.

Nun will ich auf keinen Fall die Erweiterung abschalten müssen, also habe ich mir die Liste der Regeln vorgenommen, und auch hier eine nach der anderen deaktiviert. Schuldig waren am Ende zwei Regelsätze (siehe Bild). Ich werde die mal komplett abschalten, statt herauszufinden, wie man die Regeln ändert, und hoffe, dass das kein zu großer Hammer ist. Am schönsten wäre natürlich, wenn man bei SPON in der Technik ohne diese Mengen an IFRAME Elementen in den Artikeln auskommen würde, aber das ist wohl zu viel verlangt?

Korrektes Webdesign ist schwer.

About this TIDAL win-back campaign

WiMP sent me an email telling me that they are now called TIDAL, and as one does as a startup, they tried to win me back as a user by offering a three month free trial. I’m unhappy enough with the state of music streaming that I was going to give this a shot, but their campaign ultimately failed to win me over, for several reasons.

1. The link in the email goes to a registration page, with no mention of the email campaign. As a customer, I already feel like I’m in the wrong place, but as a developer, my guess is that this is just laziness. Someone probably added a parameter to the URL to track the campaign, but was sloppy on copy writing and custom code, especially in a foreign language (I browse in English).

2. I should be a registered user, because I had a WiMP account once that should have gotten transferred in the TIDAL rebranding. Since I used my Twitter account to register, I clicked the Twitter button on that page to gain access, but that ultimately results in an error message telling me that this account already exists. This is why you don’t recycle the general registration page for your win-back campaign.

3. I go through the email plus password process, where I have to enter my email twice, and then get an error message stating that “This email address is already registered”. Guessing that what it really wants to tell me is that my password did not match (that training as a developer comes in again), I try another password, and I am in. Or am I?

4. The next step immediately asks me for payment information. And this is where you’ve finally lost me. I’m here for a free trial, not to give somebody my credit card info, before I’ve even seen what the service is. If you want to run a free trial in this day and age, then you must not ask for credit card info until the trial is up, or users won’t even give your product a chance. I can’t believe I am seeing this.

5. Your only payment methods are VISA, Mastercard, Amex and Paypal? That’s bold. When I was at IMVU, we implemented several dozen payment options, and even in Norway I get a menu with at least three additional non-CC options. And while Paypal and VISA make up the the bulk of the payment, can you really say no to the additional revenue from SMS payments, bank transfers or prepaid cards?

6. Trying to send this rant to a human being at TIDAL leads me to their support page, and in roundabout steps to a Google Docs feedback form (more signs that there are no developers) which allows no more than 1000 characters. I understand that database storage space costs money, but WTF? This post is way above 2000 characters already. Are you sure that you 

“appreciate you taking the time to share your feedback with us”? I’ll send them a link to this post instead, and hope that they go through the trouble of clicking through.

Overall, I suspect that this

campaign

has not been properly A/B tested, and that the TIDAL business development team is not aggressive enough about chasing new opportunities. Sure, all of this requires implementation resources, and developers are expensive, but your competitors are willing to make that investment, and if you continue to leave money and opportunities on the table, they will be happy to take up your slack.

The GIF arms race is disturbing to watch

At first, some users added big GIFs to imgur etc. Next, imgur et al  re-code GIF back to videos, for better bandwidth, especially on mobile.
In response, people create sites that turn entire youtube videos into GIFs, because imgur etc “can handle” GIFs that size. And suddenly, imgur is just a shitty copy of youtube with better navigation and social features, but no sound.
Someone done fucked up, and if I’ve learned one thing in this business, you cannot blame users.
My guess: someone’s hackweek project to reduce bandwidth requirement has completely changed what their site is about.
Mow they are a silent video hosting site. I bet you that nobody in management decided that this was the strategic direction they wanted to go in.

Success Story: Sony Xperia Z3

Earlier this year, my trusty and much beloved Nexus 5 broke, and I suddenly found myself in the market for a new phone. I knew I did not want a Samsung, for reasons that are mostly related to the additional malware installed on them, and I could not get a new Nexus through the office’s vendor. A friend seemed happy with her Z1, and the Z3 was getting good reviews, so I decided to put my dislike of all things Sony aside, and got an Xperia.

I must say, I don’t regret this. The Z3 runs Lollipop, and has some Sony bundleware on it to push their media empire, but it is mostly unobtrusive and feels almost like a stock Google phone.

My worries about the quality of Sony hardware were also unfounded. It seems that the Ericsson engineering is showing in this device, with a great touch screen and far superior battery life than my Nexus had. I get almost 5 days of standby or two says of active use from a charge. That is after disabling mobile data, since I am on WiFi at least 80% of any given day anyhow, so YMMV on this, but I sure like not having battery anxiety towards the end of every day like I did with virtually all previous Android phones that I have owned.

Success Story: Pocket Reader

I have recently discovered Pocket Reader, and I am getting a lot of value from it. I noticed that I tend to have a lot of open tabs, both on my phone and in Chrome, that are “I will read this later”, and now I just store that into Pocket for later reading. It makes those pages available offline on my phone, so I can catch up on my reading on the bus or plane when I don’t have a network, which is great. Also, when I read something good, it’s always there in the archived posts for me to find later. So this app has conveniences that RSS readers don’t, and in fact supplements feedly for me, especially for wordy posts. Whenever I think “this is interesting, but too long for my bathroom break”, I just shove it into Pocket for later.

What offline reading does not deal well with is video content. So all the lazy-ass web journalisms that talk into their webcam instea of writing, you suck! The same goes for websites that break every article into several “pages” as if there was a limit to how long an HTML document can be, just to get more ad impressions. Stop doing that, or at least add a “full article” view.