Race Conditions

One commit at a time

  • Team Antipatterns: Conflicting Priorities

    A side-channel attack on developer productivity. I’ve been around the tech industry block a few times now, first as a QA engineer, then a data engineer, then a software engineer and afterwards as an independent software contractor and consulting business owner. Although all of this has happened in the span of a bit over four years, I’ve learnt a lot about the different kinds of teams that develop software. In this “Team Antipatterns” series, I’d like to make notes and highlight some (perhaps obvious) things that I’ve encountered during my time in tech.

    Read more…
  • Building a Visual Lipcolour Search Engine

    Last April, I had an idea for a new kind of search engine that would help me solve a minor problem I’d had a few months before. Those who have seen me in person can probably guess that I am no stranger to outlandish and sometimes experimental lipcolours and so in my quest to create more and more outlandish liplooks (for funzies), I’d spend more and more time a) seeing pictures of cool liplooks and wonder ‘what lipcolour is that person wearing?

    Read more…
  • Notes About Decorators

    Decorators are one language feature in Python that I frequently use as a consumer of libraries and frameworks such as Flask but rarely implement myself. It’s time to revisit this feature! Thank you very much to Mark Lutz’s discussion in the 5th Edition of Learning Python. All mistakes are my own and feedback and comments are always appreciated. Decorators are a way to augment Python functions and classes. They do this by providing a syntax that allows us to associate code that should be run before/after a call to a function or a class.

    Read more…
  • Lessons From One Year of Bootstrapping

    If they don’t give you a seat at the table… Last July I decided to take a plunge and try to start a technology company. It felt like a idea good time: I felt that I had come to a standstill in my current software engineering role and needed a new challenge. While ‘needing a new challenge’ on its own is not a good enough reason to take the financial and career risk that is trying to create a company, I wanted to see if maybe trying to forge my own opportunities would be better than trying to knock down doors that were closed to me.

    Read more…
  • Blackhoodie18 Berlin Bootcamp Report

    In my previous post I wrote a few notes about the Blackhoodie18 Conference day. In this post, I’ll do a brief overview of some of the topics that were covered in the two day (intensive!) bootcamp. For some reason(most likely I did not read the track descriptions closely enough), I applied to track 3. The name (on my way to rock as hell) sounded super cool and I was really intrigued by the topics that were covered (intro to crypto, intro to Return Oriented Programming (ROP) and intro to Windows Kernel internals via building a keylogger).

    Read more…
  • Blackhoodie18 Berlin Conference Report

    Blackhoodie RE - a one day conference(which I’ll be talking about in this blogpost) and two-day intensive security topics bootcamp(next blogpost) - took place this weekend in Berlin and I was fortunate enough to be able to attend! Phew! The weather was cold (hi Berlin, you remind me of Helsinki!), but my braincircuits were still overclocked by all the great talks and the two day bootcamp in Track 3 - lots of crypto, Return Oriented Programming and exploits, and Windows Kernel internals.

    Read more…
  • What Makes a Good Technologist

    A recent job application asked me to reflect on the characteristics that define a good data scientists. I really liked the question and the kinds of thoughts it generated in my mind, so I decided to poke around this topic a bit more and think about the kinds of qualities that make a good technologist. The term technologist is quite broad in scope - indeed, most of the appliances we use in every day life (including writing - the applicance I’m using to communicate with right now!

    Read more…
  • Mobile Web App Prototyping With Flask

    A big chunk of traffic for any modern web application comes from mobile devices and so developing with smaller screensizes and touch screen controls in mind is imperative when building a startup MVP. This was my first mistake when I started developing the visual colour search engine lipcolourmatch.com. As a developer my work environment is the desktop and so naturally the first iteration of the Flask application was built with the desktop in mind.

    Read more…
  • Working With Kubernetes Deployments

    When I first started working with Kubernetes Deployments, the defacto way to create a deployment was to write up some configuration into a YAML file and run kubectl --namespace=<somespace> apply -f <file>. This made it easy to make changes to the deployment later. Simply, make the required changes in the file and run kubectl --namespace=<somespace> apply -f <filename>. However, recently after following some Google Kubernetes Engine tutorials, I’ve gotten into a habit of creating deployments using the kubectl --namespace=<somespace> run command.

    Read more…
  • On Trust

    At a recent retrospective, the team was asked to reflect on the Agile values: Trust, Focus, etc. I was interested to see that trust had come up. In particular, it made me think about the Code Review process and how we, as developers, are often extremely quick to jump to conclusions about a technical decisions that to us seems ‘silly’, ‘stupid’, ‘idiotic’, ‘why would you do that’ and how this manifests itself in the comments we give to each other during code reviews.

    Read more…