Here we are, four months into 2018 and I'm finally getting around to wrapping up 2017. I think I've been putting off for two reasons really: I've been swamping myself with side projects, which consume most of my time, and to be honest, with the exception of one Big Event, I don't really look back on 2017 as something really worth remembering. It's depressing frankly.
...but first, the good news.
We Got Married
I may have proposed back in 2015, but we finally made it happen in August of 2017. We decided that as this was our wedding, we didn't need to follow anyone else's conventions or demands. It was going to be that we wanted, and what we wanted was: cheap, low-stress, and as easy as possible.
The real problem was all of you people. You insist on living all over the world 😛. This meant that if we were going to have a wedding and have it be cheap & low-stress, we'd have to break it up over 3 countries. This way, the events could be small & simple, and we could still see as many of you as possible.
Wedding #1 was the legal ceremony. Having it in the UK means that our license is less likely to be a problem in other countries than it would have been coming from Greece. It also meant that organising something would be easier & cheaper, since we could do it ourselves and keep things simple.
Christina got all prettied up with nice hair & make up, I got a linen suit (who the hell wants to sweat like crazy in your wedding photos), we booked a slot in the Cambridge registry office, and reserved a hotel banquet room for the evening. That was it. Those who could make the trip saw the "I dos" and then we took pictures, ate a lot of food, and called it a day.
Wedding #2 took place about a week later just outside Athens at a beautiful restaurant overlooking Lake Marathon. Christina's family covered the cost of this event and did all of the organising. All we had to do was show up. Best Gift Ev-ar. Friends that couldn't make the Cambridge event, hopped a flight to Athens for this one, and that led to some nice siteseeing around town with people we love but don't get to see very often. Honestly, that whole week was wonderufl.
Wedding #3 is still coming and will be in Vancouver this Summer. I'll try to post about it later and include some pictures too.
My travel history for 2017 was really quote disappointing. Where in the past, I've managed to travel to more than 10 different places in a single year, 2017 consisted of only 6 -- all but one were places I'm already familiar with.
As is tradition, I made the trip out to Brussels for FOSDEM in February. The conference is getting crazy-popular, like, impossibly busy, and the resources available remain finite. Most of the rooms are full of people who showed up to hold a seat for the next talk, and the lines for food are just brutal. On the one hand, it's wonderful that Free software has garnered such interest and that a Free conference like this can draw so many people, but surely, there must be a way to raise money to expand the conference facilities without tainting the ideals that started it all.
In April, I made the trip out to Florence for DjangoCon. I have a special blog post devoted to the event in detail if you're interested. Florence is still beautiful, but a lot of the wonder seemed to fall away for me on this trip, and not just because all of the food I had was disappointing.
I guess that when you travel for work, you really do get a different feel for a place. I didn't feel like I was exploring so much as going somewhere new to then ignore that somewhere new in favour of doing what I do at home. Maybe I would have felt different if I'd never visited Florence, but I think the lesson here is that if I'm going to travel for work, I really should bookend the trip with some personal time.
The only new place I visited in 2017 was Prague in April. Christina was attending a conference in Brno, and did the smart thing: she added some personal days to the trip and met me in Prague so we could do a long weekend. It was only a short trip, but still well worth the time & money. Prague is as beautiful as they say, and the food wasn't bad either. It was nice to be somewhere actually foreign again, where English translations weren't immediately available everywhere, and wandering through the old city is an excellent way to spend a Saturday.
Vancouver & Kelowna
In May, I got news that my grandmother was fading fast and that she didn't have much time left. I decided to fly home to say a proper goodbye and to try and help out where I could. As it turns out, her body refused to give up, and she recovered, though her mobility was greatly affected. Still, it was nice that the trip didn't end up being as somber as I thought it would be when I boarded that flight.
This was also the week that Kelowna flooded though. The snow on the mountains melted faster than anyone was prepared for, and the water system that drains everything into the sea was not capable of handling the changes. As a result, all of the lakes in the Okanagan began to back up, and my parent's home (and those around them) was flooded. No amount of sandbagging would do, the water was literally coming up from under them as the water table rose.
On my last day in town, I were awoken at 1am by a police officer that had come to the door to evacuate us.
In the end, the damage for some was substantial, while others -- like my parents -- managed to avoid the worst. The water went under their home, but didn't create any structural damage. The worst of it was that their entire yard was lost and had to be rebuilt.
Other families weren't so lucky.
Athens & Ios
A few months later, my parents made the trip from Kelowna to Cambridge for Weddings 1 & 2. They were here for the ceremony (my dad was the Best Man) and then they came with us to Athens where we did some sightseeing for a week together. After that, Christina & I disappeared for a week to the island of Ios (Ιος) for our honeymoon, and my parents went on a mini-cruise through the Agean.
It was all very pretty. Pictures can be seen here.
I had a couple holidays left over as the year came to an end, so decided to take a long weekend in Amsterdam to see some friends. Mihnea was kind enough to put me up in his place for a couple nights, and when I stopped by the RIPE NCC office, they invited us both out to their annual Christmas party at Nemo!
I spent much of the night just catching up with everyone, chatting with Robert about Atlas architecture, and just plain enjoying my time there. That company really is a great place to work.
Oh, and the food. I did miss Hotel V & Albert Heijn. Burger Bar was a terrible disappointment though.
In terms of my day job, I'm afraid things haven't been too exciting, but at least the people I work with are great.
When I started at Money Mover, everything was running on an old version of Django and Python 2.7. I made it a priority from my first day there to bring everything up to date and it was about as difficult as you'd expect.
- The entire project had 200 unit tests, 50% of which were failing.
- It was running Django 1.6 and Python 2.7
In my year there, I increased those tests from 100 (working) to 1100, and leveraged that coverage to migrate us first to Django 1.8 (for a while), then to Python 3, then to Django 1.11. I also added a async subsystem (RabbitMQ + Celery) for bulk jobs and other heavy tasks.
If ever I wasn't sold on tests, I sure as hell am now. Migrations like these would have been so much more painful without adequate testing.
The truth about my job though is that the work isn't interesting. For business, this is good: you don't want interesting code, you want predictable, stable code. Experimental codebases make for bad banking platforms. However, as an engineer, I can get bored pretty fast with stuff like that, so 2017 saw a boom in my side projects.
It's still going strong. I started it way back in 2015 and at this stage, the community does more work on it than I do. Mostly I step in once or twice a week to answer questions in the issue tracker, or accept pull requests. I've done a little original work, but for the most part, I try to stay out of it as my interests are elsewhere.
There's also been a few cases of people inventing drama around the project, claiming that I somehow "stole" the project idea (or maybe the actual code, I'm not sure) from the much-more-polished Mayan EDMS, but I've done my best to stay out of that too. I mean, the code is Free and Open. Anyone who wants to know the truth can just look at it to know that the projects are clearly an example of simultaneous invention.
There've also been a few cases of companies & individuals contacting me about the project specifically. In most cases, they want to know if they can find a way around the GPL, but some just want pointers about technology used, or want to know if I want to co-found a company with them.
My Twitter-aggregator, Albatross was the code behind my Tweetpile project years ago. Unfortunately, when Twitter changed their API rules, I realised that it wasn't a feasible business model so I shelved the project. The domain lapsed and I forgot about it.
However when I moved to Cambridge, I met a woman doing a PhD that involved analysis of social media data and so I decided to try and repackage the project as a self-hosted thing. It let me expand my understanding of async and event-driven code as well as improve on my Docker-foo, and after a month or three of tinkering, it's now in a finished state. The latest release, codenamed Cersei Baratheon, can be installed and run with just a few clicks.
It started as a frustrated blog post, but one night I got it into my head that if no one was doing it yet, that I would start. Aletheia is an idea and technical spec, while pyletheia is the implementation. The gist is that this is a way for people to guarantee the source for a media file (image, audio, or video) and guarantee that that file hasn't been altered since it was released by that author.
At the moment, only JPEG images are supported, but I'm almost done hacking MP3 support into it as well (which opens the door for all sorts of audio & video). I also have a presentation that I'm just putting the finishing touches on. I hope to give this talk at the local Python meetup.
It's not a side project so much as a weekend-long event, but 2017 was also host to the Sudo:immerse hackathon here in Cambridge -- an event which my team won and that didn't suck.
2017 is also the year I joined Codebar. Think of it as a monthly meetup tutorial session where people who can code teach people who want to learn -- with one exception: straight, white, males aren't allowed. The thinking is that there's enough people like me in this field, Codebar is an attempt to balance the scales a bit.
To be honest, I'm typically not a fan of exclusionary tactics, especially when your goal is inclusivity, but the reality is that all my life, programming has been straight-white-male dominated and nothing else we've done has fixed that. I'm happy to give this a shot. Besides, it's fun!. I've already helped one woman with her potato science PhD, another with basics of server access and typical dev-ops, and my current pupil is learning basic Python skills so she can do that social networking PhD I mentioned earlier.
I did have a rather ugly disagreement with the mods in their Slack channel though, so my participation is limited to the in-person meetups. I don't have enough patience to deal with people obsessed with thoughtcrime (long story).
Along with the various bits of software I've written over the year, I also joined an online community of people aspiring to be better Python developers. Most of the members are very green, but a few are like me: happy to help and wanting to share what we know. I spend most of my time in the Slack group, but there's also a Github account with monthly challenges that the membership hacks on. For the most part, it's just nerds getting together to help each other out, and it's fun to be involved.
2017 has been very tech-heavy. Sure, we got married this year, but outside of that, my life has been largely tech-focused. I'm starting to feel like I've forgotten how to be anything else and it's freaking me out a bit. I may be a bit far into 2018, but my resolution for this year is to do something else with my life as well. That is to say, I'm not going to give up my various side projects or anything, but I need to get a handle on balancing this stuff out with having a life that doesn't involve code.