Menu

Melbourne-based SDET focussing on Automated Browser, API and Data testing. I deliver well-designed, robustly implemented, intentional test automation.

Values

  • Giving respect to all
  • Preserving wonder
  • Asking better questions

Favourite Things

  • Test-Driven Development
  • Continuous Deployment
  • Functional Programming
Featured posts: software-engineering

The Consultant Utility Belt

Spending most of my career in tech companies, I enjoyed working with technologies largely of my choosing. I have always been of the Open-Source bent, so monetary cost has seldom been a factor. The tools I use are familiar - there is a level of comfort - but I choose them for their functionality - I am substantially faster and more productive with them.

The technology I tend to use to describe this is the json processing library - jq. Free, lightweight, well designed and - in its small way, kind of life changing. Once you become accustomed to it as part of your dev/testing process, it's pretty hard to do without.

When I made the switch to consultancy I quickly learned not to become too attached to my favourite tools. You never have full say over which contract you'll be on next - and the Standard Operative Environment may differ radically from one to the next. Security and vendor lock-in means you largely use the tools you're given.

It's here that I drew inspiration from the greatest technical consultant of all time - Batman. When confronted with a novel set of difficulties, Batman can rely upon the toolkit only Wayne Enterprises could provide, his Utility Belt. So, here are some of the portable toolkit items that keep me productive wherever I was deployed.

Browser Extensions**

If you have access and permissions to the chrome or edge extensions libraries, you're pretty much set.

  • toby is an excellent tool for tab/history management
  • JSON Formatter is essential for API querying
  • Omnibug is a super powered floodlight for marketing and analytics in-browser events, ski-goggles provides SnowPlow events insight
  • Markdown Viewer is great if you are a die hard markdown note-taker

But if you don't, creating your own browser extensions is pretty accessible these days. In chrome, navigate to chrome://extensions/, enable Developer mode, and then click "Load unpacked" - you'll be able to load extension scripts downloaded from github.

VS Code Extensions

There's not a lot you can't do with VS Code and access to the extensions library - ssh into remote servers, interact with GitHub, but my favourite rather anachronistic extension is VSCodeVim - at first I tried it as a joke, I've now been using it daily for 5 years.

In-Browser Scripts

So let's just say you have next to no access, and you need some kind of computing tasks done. My execution environment of last resort is Google Dev Tools -> Console. If I have nothing but notepad and chrome, there's a reasonable amount you can do with a javascript execution environment.

As an example, I found myself needing to test the limits of how many times an in-page task could be completed - with no testing tools and no permissions to install any. I could either sit there and modify details and click 'submit' 180 times over the course of 10 minutes, or I could request jquery in the console and voila - pseudo-automation.

Github Dev

If you've no IDE at all, there are many web-based IDEs, but github.dev takes my vote - all you need is a repository, and you've got a fully featured, free editor. This is my now my go-to as a travelling note-taking tool.

Adding on the batcave

If you do have install privileges to your machine, Windows Subsystem for Linux is a way to leverage a world of open-source developer tools. Or if that's not an option - if you have git bash, you may not have a full distro but a decent text processing engine.

Julian's AWS Dollar Dazzlers

Studying for my Solution Architect Associate Certification I got a re-education in the constantly updating AWS product line. These are my latest dollar dazzlers - cheap, exceptionally useful product offerings to help having your cloud computing costs take less of a bite out of the old hip pocket. Because the only thing I love more than petabyte-scale computing is an old fashioned bargain

S3 Select

From deep storage archiving to budget web site serving, S3 is for me the most versatile and cost effective AWS product. With S3 Select you can run simple queries against CSV or JSON objects - so if you aggregated and dumped a very large log file for instance, you can query it later from within S3. No Athena, no Cloudwatch, no setup at all.

EventBridge

EventBridge is a swiss army knife of event driven systems. Now offering scheduling, event filtering and fan-out, it can be a simple replacement for a complex chain of SQS/SNS/MSK pipes. The ease of which it is configured is the driver for me because time is money

Hibernated EC2 Instances

Likely a pattern as old as the hills but - especially for small enterprises with on-prem - hibernated instances are one cheap way to have ready disaster recovery. Hibernated instances charge only the EBS storage - so are a cost effective way to do fast and furious failover.

This one comes with caveats - you could achieve the same thing with Fargate, and this solution could easily fall victim to 'out of sight, out of mind' neglect - you would need to keep the machines up to date.

IPv6 EIP

Now that Elastic IPs set you back a cool $3.60 a month whether attached or not, it's well worth updating to use IPv6, the plentiful, free alternative. You can manually assign an IPv6 address out of a CIDR to an ENI, pocketing the savings.

Jekyll and Hyde: the emotional rollercoaster of technical adoption

Originally posted on github.io

If you can read this it means that I'm successfully running jekyll on my macbook air m2, which means I have around 60 open tabs, the fruits of searches such as:

  • Failed to install ruby 3.2.2 on M2 Pro with macOS Ventura 13.3
  • RVM - Error running '__rvm_make -j8' rvm install 2.5.5 ...
  • Error running '__rvm_make install'

I kept my old intel macbook air as long as I could hold out, and in my last position working on OSX, held out on moving to an m1 macbook to forestall just this kind of sanity-draining pitched battle. I find the emotional rollercoaster of encountering issues wrangling a new or newly-required technology follows the arc:

  • Naive optimism: perusing the set of features you'll soon be able to enjoy
  • Excitement: beginning the installion and configuration process
  • Moderated enthusiasm: dealing with the first issues
  • Frustration: as each solution to the issues encountered are fruitless
  • Incredulity: as it seems there is just no way to perform this seemingly routine task that hundreds of thousands of users seem to have no issue with
  • Blind rage: in which caution is thrown to the wind and any and every possible fix is attempted with little regard for future consequences

From there, we have three possible outcomes:

  • Realisation: the fix is discovered, it's pretty obvious in retrospect, but the payoff is nowhere near the effort of finding it
  • Tolerance: a workaround is reached that allows us to progress, and the annoyance of accepting a suboptimal solution will last around a day and never be thought of again
  • Bitterness: nothing worked, and forever will this framework/technology be tainted by this experience

I eventually abandoned up installing rvm and went with Homebrew ruby which means I'm limited to the latest version, and no gemsets unfortunately. However, jekyll is installed and happily serving away.

Anyway, through the frustration of rvm hell, it all made me somewhat nostalgic. I used to love ruby. I'd recently joined REA Group, going to work meant working with incredibly talented, personable people in a truly agile fashion. From Java, and Rational Functional Tester I moved to ruby, Cucumber, and the dizzying cornucopia of gems that made just about anything achievable in a few lines of code. I did the koans and marvelled at the more than one way mantra. I wrote a synching file management utility in ruby that tackled my growing .mp3 problem. I wrote a to-do list manager in ruby. I parsed and generated spreadsheets and scraped websites. I essentially wrote my own single serving 'myfitnesspal', coupled with garmin and fitbit scrapers, and dealt with the ensuing hair loss wrangling the rails assest pipeline.

Well. From perl to ruby to javascript - it's exciting, blazing fast and bleeding edge one day, then legacy the next. I can recommend attempting to revive an old dev environment to temper the excitement of technical adoption.