sykkelauksjon og politiet.no

Det er vår, og da pleier politiet å ha en sykkelauksjon. Jeg trenger en ny gammel sykkel, og derfor sjekker jeg på politiet.no. Det ser ut til å være en vanlig CMS med veldig lite tilpassing, og er fullt av innlegg om politiauksjoner fra diverse år og alle mulige fylker. Men ingenting om auksjonene som er planlagt i 2016.

Navigasjonen til politiet.no er helt håpløst. Ingen vei leder fra hovedsiden til informasjon om hyttegodsauksjoner uten at jeg bruker søkefeltet. Det stemmer at søk er mektig, men da leter jeg altså i hele korpus av CMS databasen, og får opp forslag om høst 2012 auksjonen i Trondheim, og diverse andere “treff” som ikke hjelper meg heller.

Til slutt er det eneste jeg kan gjøre å slå opp kontaktsiden, og ringe kontoret, eller sende en epost. De har i hvert fall det, det er ikke alle offentlige som forholder seg til noe annet en telefonen.

shopping hos vkt.no

Hvorfor er det så vanskelig å fylle på reisekortet på vkt.no? I en perfekt verden går jeg til vkt.no, taster inn kortnummeret, trykker på OK knappen, og betaler med bankkort på neste siden. Men slik enkelt kan vi ikke ha det.

Første siden jeg blir presentert med er ruteplanleggeren, og det er jo bra, fordi det er vel det folk bruker mest, spesielt siden ruteinformasjonene ikke finnes i Google Maps. Hvorfor egentlig? Etter noe leting på siden etter “fylle på” finner jeg en knapp som heter Nettbutikk. Kanskje jeg tenker feil, men en nettbutikk er for meg et sted jeg kjøper fysiske ting, som en I <3 VKT skjorte eller caps.

Men jeg trykker uansett

på knappen, og der kommer det opp en side med forklaringer.Dette er ikke noe god tegn. Må du forklare nettbutikken din med to siders instruks, er den sikkert katastrofal dårlig. Den vider meg bilder av en side jeg ikke har kommet til ennå, og minner meg om å trykke på “full på” vis jeg har tenkt å fylle på, eller “kjøp ny” vis jeg trenger ny kort. Dette klarer vi!

Det er to knapper her, begge to heter “Gå til nettbutikk”, og jeg antar at de gjør akkurat det samme. Jeg trukker på en av dem, og tenker at nå skal jeg komme til den siden som ble forklart. Men nei, det er vel for enkelt tenkt. Nå skal jeg først logge meg inn. Hvorfor trenger vi dette? Dere trenger jo ikke noen andre data enn kortnummeret mitt, og jeg skal helt sikkert ikke gi dere nummeret til en annen fyr, og betale for at han kan reise til Tønsberg, altså. Jeg husker ikke om jeg har brukt denne siden før, så jeg trykker på “glemt brukernavn”, prøver 3-5 forskjellige epost-adresser, og da ingen av dem er registrert forstår jeg at dette har jeg ikke brukt før.

“Lag ny brukerkonto”, da. Velg brukernavn og passord, og… jeg skal bekrefte epost-adressen min. Hvorfor det? Hva har dere egentlig tenkt å gjøre med adressen? Skal dere sende noe til den, og denne bekreftelsen er for å beskytte mot folk som lager kontoer for å få spammet sine ex-kjærester? Venter på epost, trykker på linken i den, og nå fortsetter vi.

“Du må knytte et kort til kontoen din”. Ja, dette har vi ventet på. “Er du sikkert at dette er nummeret ditt?” Joda. Er det mange som taster det feil? Da kan det lønner seg å ha dem gjenta det, som man gjerne gjør med epost-adresser (det gjør denne siden dessuten ikke, takk og pris). Eller ha en sjekksum i kortnummeret.

Og nå skal jeg laste opp kortet. Men det er en nettbutikk her som er litt pussig. Jeg skriver inn hvor mange kroner jeg vil ha, og så dukker det opp i handlevognen min. Handlevogn? Det er noe som vi bruker når vi skal flere ting. “først så skal jeg ha 100 kr på kortet mitt, og så 50 kr til, takk” said nobody, ever. Det er ingen “gå til betaling” knapp her, heller, men jeg er flink, og trykker på handlevognen. Da ser jeg gå til betaling knappen og “jeg aksepterer vilkårene rute, som jeg hadde ventet. Egentlig hadde jeg ventet at den dukker opp når jeg lage brukerkonto, da slipper man å gjøre det hver gang, når man nå må ha et konto, men skuffelsene har vært mange i dag, og det er ikke den verste.

Jeg betaler med VISA kortet gjennom PayEx, som vet hvordan betaling skal fungere, og det er ingen “lagre kortet til neste gang” knapp, som hadde vært en grunn til å ha brukerkontoer og passord. Jeg forstår det fortsatt ikke.

Til slutt blir jeg presentert med meldingen: “Din billett vil være tilgjengelig på billettmaskinen neste dag”

Jeg har aldri sett en billettmaskin til VKT. Skal ikke bruke den heller. Hvorfor er ikke pengene bare på kortet nå? Må jeg gjøre noe? Hvordan er en billett forskjellig fra mitt reisekort? Hva har dette med påfyll å gjøre? Forundring.

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.