Ray Bradburry once said, “love what you do and do what you love”. For me, work was love at first sight. It came to me as a kid, out of scarcity, and I was smitten. I was a 13-year-old immigrant kid with a passion for reading and computers but unable to afford the latter, being a child of a single mom who was barely making ends meet. Finding a job was a way not only to gain financial means but to also assert myself in the world, to prove my own worth. It was a struggle though; I spent weeks…

Selenium is a fantastic tool for automating your browser — and it can be used not only for writing functional tests, but also to automate mundane tasks such as downloading bank statements. However, very often, automating a web page involves a complex sequence of tasks (often including signing in) which makes traditional iterative development (code, test, repeat) cumbersome.

This article demonstrates how one can leverage the power of Python combined with Selenium to allow to quickly explore web automation by dynamically running code on-the-fly.


  • Python 3 (tested with 3.8 but should work with other versions as well)
  • Selenium for Python…

Do you have a fidelity card you use often? How about a credit card? Did you ever wish you didn’t have to take both cards out whenever making a purchase? Here is a low-tech way to combine the two together so that you can leave your fidelity card at home.

This guide assumes that you:

- Have a plastic credit card (chip, tap or strip is irrelevant)

- A barcode-based fidelity card (it’s okay if it has a magnetic strip, but this approach won’t work if you mostly use it with the strip)

What you need:

- A printer (you could technically draw a barcode yourself, but I…

CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. With over 60 thousand libraries, it is the most popular repository of its kind, impacting over 3 million apps (quoting the official site).

Traditionally, the CocoaPods only targeted macOS, which made sense as it was meant to work with Xcode and the related toolchain. However, the success of cross-platform development frameworks such as Flutter or React Native gave rise to demand for CocoaPods to work on non-macOS platforms such as Windows (for example, some folks have reported issues #8055 and #8077).

Starting with CocoaPods 1.7 (in Beta as of…

Launching activities on Android is complicated. What makes it more complicated is the fact that they are asynchronous by nature, with results being handled elsewhere, namely in the onActivityResult() method.

Here is an example (in Kotlin) of how one can launch an activity that picks an image file, and handle the result:

companion object {
const val RC_GET_IMAGE = 0
fun getImage() {
val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
type = "image/*"

if (intent.resolveActivity(packageManager) == null) {
startActivityForResult(intent, RC_GET_IMAGE)
override fun onActivityResult(requestCode: Int,
resultCode: Int, data: Intent?) {
if (requestCode == RC_GET_IMAGE…

I love Wikipedia. I might go there to read up on a fact, and stay for hours browsing linked articles. I respond to Jimmy Wales’ appeals and donate every year. I correct mistakes when I see them. In short, I’m a fan.

Wikipedia has a cool little feature for exploring it — Random article. Simply navigate to https://en.wikipedia.org/wiki/Special:Random and learn all about moths, homeostasis, Republic of South Africa’s decorations and many, many, many more things. Naturally, I wanted to get it on my iPhone’s home screen. It definitely beats browsing Facebook!

Surely, this must be easy? Let’s see, open Safari…

David Air

Write code for fun and living

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