Weeknotes #1March 29, 2019
Inspired by my friend Trys, I’ve decided to join into the weeknote craze and start chronicling what I get up to each week. My rough plan is to include a healthy mixture of the areas of my life: what I’ve been up to at work, developments in my personal life, things I’ve been pondering, projects I’m working on, and more trivial things like the videogames I’ve been playing, books I’ve been reading, and songs I’ve been listening to.
This Monday marked my first month at Limejump and that meant having my first official review. The consensus between my manager and I was that things are going well and we had a great discussion about how to manage change at an organisation like Limejump and how the technical team might be structured in the future. I’m keen to take on a leadership role as a part of the team and he confirmed my suspicions that Limejump has plenty of room for people with initiative to jump in and take on that mantle. As a result of that discussion I’m now tackling the scary bear of improving our platform authentication strategy! Expect a blog post where I examine micro-service architecture from the perspective of security.
Most of my week has been spent thinking as opposed to writing code. My current project is migrating our Customer Portal from an old Angular 1 project to a modern React stack. The move requires me to build a series of backend microservices to provide additional functionality the current portal doesn’t provide. Monday to Wednesday was mostly spent planning my next steps and toying with different micro-service frameworks. I eventually landed on Go Kit 2 which has a flexible batteries-included-if-you-want-them approach. During my research I caught wind of Twitch’s RPC framework, Twirp which I would’ve loved to include but without Go-kit’s support it doesn’t look like it’ll happen any time soon.
Finally, Limejump was recently acquired by Shell3 and so there’s been some ‘learning’ to do in the form of boring online courses!
Projects and Learning
This week I signed up to two email newsletters that curate interesting articles on development from across the web. I’ve only just signed up to Piccalilli so I can’t report much from that this week but I’ve been signed up to Morning Cup of Code for a few days now and I’ve loved the selection of resources it’s passed onto me, in particular this post on jump threading optimizations was fascinating. I’d heartily recommend signing up to both newsletters if you’re interested in learning a bit more each day - Piccalilli is focused on CSS whereas Morning Cup of Code has a much more general remit.
Inspired by a post on multi-threading sent to me by Morning Cup of Code 4, I implemented concurrency in my favourite toy Rust program HugoToJSON 5 - this isn’t my first encounter with Rust’s concurrency model but it has been a while since I played with it. It’s tough to get the feel for the performance gains I introduced because I haven’t implemented benchmarking yet but the process was worthwhile regardless. The concurrency came at no real cost of complexity to the program and undoubtedly had a positive effect on speed where it matters. The implementation itself turned out to be mostly painless aside from some lifetime issues related to the threads belonging to a function on a struct - in the end the options to solve the problem were either to enforce a static lifetime for the struct or move the functionality out of the struct; I chose the latter. I also migrated the project to CircleCI because Circle CI is significantly faster and more pleasant to use than Travis ever has been. I haven’t quite managed to get Github releases working yet - but I plan on digging a little into CircleCI workspaces next week and I think that’ll be the solution to my problems! Expect a blog post.
I also made some improvements to my Node.js based tool for generating a Hugo shortcode for a responsive image 6. My initial version of the tool simply took some HTML generated by responsivebreakpoints.com/ as input, parsed it, and wrote relevant pieces of data to a Hugo data template. Now the tool also takes a zip of images as input and performs the additional step of uploading the images to Amazon’s S3 storage so they become accessible at
https://files.arranfrance.com/images/2019/Mar/$FILENAME.jpg. The extra functionality removes an otherwise tedious step of uploading the images to S3.
This week I’ve continued my reading of the classic software developer text The Pragmatic Programmer. The more I read, the more I’m convinced that the book doesn’t have a lot to offer. The principles it covers are nothing fundamentally new (perhaps that’s why it’s a classic?) and the book uses enough outdated examples that at times it’s tough from me to unravel why the principles need to be applied. I intend to finish reading it but overall I feel like perhaps it was more relevant a decade ago. To fix my unhappiness with my reading material I impulse bought the Humble Bundle’s Coder’s Bookshelf because it contained the Rust Programming Language 7. I’ve skipped from section to section through it a few times, and even read a very early edition from start to finish in 2016, but now the language is developed to a point that feels more mature I felt it was a good point to sit down a read from cover to cover again. It’s become my go to book on the train so I’m hoping I’ll be finished with it in a month or so.
I’ve also been continuing work on the the startup I’m consulting with. I can’t say too much because I’m under an NDA but it feels good to be able to work with Catherine and Joel on a project and I’m feeling increasingly confident that we’ve picked the right technologies for the job.
Finally, I migrated my blog’s feed to FeedPress. Keeping a stable feed URL is tough (and probably deserving of its own blog post) - I reckon most people invisibly lose subscribers when the switch from one blog platform to another and so it feels good to avoid that by using a fixed domain. I initially was planning writing and hosting on deploying my own alternative to FeedPress but I realised hosting my feature-sparse MVP would be more expensive than the $4/mo FeedPress ask for.
Fun and Personal Bits and Pieces
On Tuesday I was subjected to a lengthy (and rather unpleasant) safeguarding training. The session was a case study in the importance of messaging and the perils of failing to frame negative things in a more positive light. Rather than opening up by discussing how safeguarding is an important part of the fantastic responsibility we get by working with children the discussion was framed around statistics like “1 in 8 kids are abused” and the names of high profile children who were abused. Not the most inspiring way to spend a Tuesday evening.
Catherine’s was/is away at the tail end of this week so I had to run the Thursday Club (a club we run for an hour every Thursday for the local children) by myself which turned out to be surprisingly easy aside from the cleanup job at the end. The kids are messy and we had several volunteers leave early which left me, and the two volunteers who were left, to do a herculean amount of cleaning.
As Catherine is away I spent some time hanging out with friends. We ended up watching some old Don’t Flop battles including the classic Shuffle-T vs Anton Murphy clash, which I consider to potentially be Shuffle’s best performance, warning - not safe for kids. I also have a Firefly marathon planned with Joel for tomorrow that I’m incredibly excited for. I watched the first episode earlier in the week and it was incredibly refreshing to see the faces of the crew again. Firefly captured something special in its characterisation and dialogue - it’s no wonder it’s a cult classic.
Finally, if you caught my upset outburst on Twitter a few months back after I learned my local Indian restaurant Megna Tandoori stopped doing my favourite curry 8 then I have some good news to share! We went back to Megna this Wednesday and after asking nicely they cooked it for me! 🎉
Video Games from This Week
- Super Smash Bros. Brawl
- I played my first Smashdown this week and in doing so I realised there’s a significant drop of in quality in my play between characters I’m familiar with and ones I’m not so I’m making an active effort to play characters I’m less comfortable with to reduce the skill gap
- I’ve been actively looking for moments where I can grab and I’m getting much better at taking advantage of them
- I started playing MegaMan and Toon Link, both of which feel very natural as part of my selection of characters
- Turns out I’m still reasonably good at this one! I had a crazy long win streak and I delivered some cracking goals in the couple of hours I played. I might try and work this title into my evenings a bit more
- The new expansion comes out April 9th (which I’ve pre-ordered!) and so this week was part of card reveal season. Tuning in every day to see the new cards has been incredibly exciting. This expansion is also the start of the new Hearthstone year, when old cards rotate out of the standard format, which makes it my favourite expansion of the year.
- I’m having a lot of fun playing this Rush Warrior deck before the rotation. It feels like a lot of people are playing quite greedy control decks and this deck has the ability to go toe to toe with those as well as handle the more mid-rangey and aggressive hunter decks that exist.
- I’m also enjoying playing this super greedy Amara priest deck built around gaining multiple copies of Amara and setting your health to 40 multiple times! In my first game I made three copies of Amara and two copies of Ragnaros. In standard!
- Sorry Trys, I did try it but I use several machines - let me know if you want sync built [return]
- I was heavily tempted by Gizmo, the New York Time’s riff on Go Kit [return]
- On my third day at Limejump – yep that was a big shock, and yes I still have a job [return]
- A gentle introduction to multithreading [return]
- If you’re curious about what this program does and why it does it then you can read more here [return]
- If you’re interested in learning more about this program then you can read about the motivation here [return]
- Specifically a
- The Chicken Malaya [return]