As of now, Google has yet to release an official backup/sync client for Linux, and as a frequent WSL2 user, I was after a solution that would allow automated backups to Google drive from the WSL2 Linux file system/distro.

I’m a big fan of both Windows & Linux, and the evolution of WSL2 (with an actual Linux kernel) is making it easier to work in an almost “real” Linux environment without the need for third-party virtualization software. …

The inspiration for writing this article came after reading the following on Airflow extensibility using CWL-Airflow:

The latest documentation, published by the above developer/s, can be found at,

With the documentation link above and concepts learned from, what follows is an outline of setting up a cwl-airflow Docker Compose stack.

A git repo containing the stack components be found at this link.

This stack is not intended for use on a public network. Windows 10 WLS2 running Ubuntu 20.0 LTS from the MS Store was used as the host environment, with WSL2 integration enabled via Docker for Desktop. …

Image for post
Image for post

In the space of Data Science/Analytics, we rely heavily on automation to drive insights from several data sources. Docker, Python, node, JSON and YAML are a amongst a wide range of technologies used as part of the automation.

I recently came across Rabix and Common Workflow Language (CWL) in the space of biomedical research. As a developer, and not having come from a biomedical background, I wanted to explore opportunities for using Rabix/CWL.

After looking into Cancer Genomics Cloud and signing up, I started to get a feel for Rabix/CWL. I decided to setup a local Rabix/CWL playground on my Windows WSL2 environment. …

Image for post
Image for post

The main objective of this article is to demonstrate a procedure for building a local DevOps mock environment on a Windows 10 Pro (version 2004) host using WSL2 & Docker.

The local environment we aim to build comprises the following containers/images:

Docker-compose will be used to network the containers using static IP addresses within a docker network.

Before running the network, each image/container will be discussed and configured in isolation (where required). This will hopefully provide an insight of each component.

Once the environment is up and running, a Jenkins pipeline will be setup to achieve the…

This write-up outlines methods of working with the AWS Secure Token Service (STS) and Federated user accounts, where Google has been established as the Identity Provider. It is based on a recent experience where AWS programmatic access was only permitted via STS temp credentials.

A summary of the scenario and what we aim to achieve are as follows:

  • Your organisation has enabled SSO via SAML, with Google as the Identity Provider.
  • Your Google account ( has been provisioned for access to AWS.
  • Access to AWS resources requires that you authenticate using your Federated user and request temporary credentials using the Secure Token Service (STS). You are advised that the role you need to “assume” to request the credentials is, arn:aws:iam::111222333444:role/saml-init. …

Image for post
Image for post

Going through my clutter of gadgets, I came across an old Android ZTE Axon 7 (A2017G) phone that was running Nougat. It’s been lying around for a while, and I was looking for (as usual) an excuse to kick off another one of my tech-discovery projects.

I was reading up on LineageOS — a fork of CyanogenMod. CyanogenMod’s roots originate from the Android Open Source Platform (AOSP).

I could just download an existing Lineage build zip and flash it onto the Axon…but that’s no fun.

What was more of an appealing option, was building the OS from source using base LineageOS 15.1 repo and the official ZTE Axon 7 git device-specific source branch (LineageOS 15.1 Axon Tree). There’d more satisfaction from installing a build I’ve generated vs somebody else’. It would also be a stepping stone into the sphere of Custom ROMs and Android tweaking. …

Amongst the different types of virtual disk images, we occasionally bump into the .img type.

There are various methods that can be used when analyzing or working with these virtual disks, and/or their respective partitions.

This article describes some of these alternative options using a combination of mount, losetup, kpartx and loop devices.

Packages Required

Installing kpartx for mapping partitions. Using apt on Ubuntu, kpartx can installed as follows:

sudo apt install kpartx

Virtual Disk Image Demo Details

For examples used throughout the article, we’ll be using the .img file, as listed below, consisting of 2 partitions. Our primary focus will be on manipulating/mounting the data partition (i.e. …

This article aims to:

  • provide insight into the behaviour of SuperSU/Magisk su binaries vs AOSP's default su binary
  • highlight constraints that have been implemented for Android Builds starting from 9 and onwards, particularly in relation to partition layouts and the init process
  • highlight the limitations of working with/installing Magisk/SuperSU using Android’s SDK emulator


Android Studio SDK Emulator & AVD

  • The Android Virtual Device (AVD) that will used, runs using the Android SDK with an Atom x64 Image. …

The following article describes the process for using libguestfs-tools to shrink an existing pre-allocated secondary VMDK, used by a VMWare Ubuntu guest OS.

The process will be performed from the host machine using a customised docker image. The image’s Dockerfile includes libguestfs-tools as part of the build.

The Virtual Machine needs to be offline/shutdown before proceeding. It goes without saying, make backups of any VMDKs before attempting to manipulate them.

Existing VMDK Details

For the purposes of the demonstration, an existing 5GB pre-allocated VDMK will be used for the shrink operation. …

Image for post
Image for post

This article describes some methods for capturing long/scrolling screenshots on Android/Windows.

When it comes to capturing scrolling web pages, you’ll find most modern web browsers allow you to save a page for offline viewing. This method doesn’t always produce the expected output. Some of the rendered content is occasionally omitted from the offline copy. You may also find that the layout format is not preserved.

Then we cross the topic of scrolling apps. What if we needed to capture the first few pages of an app’s display output on an Android phone (for example, the first couple of screens from within Facebook or Twitter app)? …


Tony Tannous

Primarily a Learner/Coder with interests in Python, Cloud Technologies, Security and Automation. Pandas munching on Bamboo sticks give me the “Giggles” :))

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store