Russell Innovator Software, DevOps, Management, Systems, Radio

Supporting multiple simultaneous Python versions

Until recently I had been able to specify a Python version and work with it. Here’s a brief outline of some work I did recently to support a language feature that changed across a few Python versions.

Discovering Python mutmut

A colleague recently highlighted mutmut for helping improving tests. This post is a walk-through of my experience getting started with mutmut on a simple project that I’ve discussed previously

Applying the five User Experience specification planes to Behavior Driven Development

Through my recent User Experience course through Algonquin College I was exposed to the five elements of User Experience (UX) described in 1. This note proposes how to apply these planes to a Behavior Driven Development (BDD) feature system implemented using Gherkin syntax.

  1. The Elements of User Experience, Jesse James Garrett, 2nd Ed., 2011 

User interface design for command line utilities

Conventional thinking has it that “user interface design” references a graphical user interface such as a desktop, web or mobile application. But over the last few years I’ve become increasingly aware of how important it is to consider user interface design for command line utilities as well.

Gitlab CI/CD pipeline for open source Python projects, part 2

Part 2, presenting a pattern for a CI/CD pipeline implementation using Gitlab CI for Continuous Integration and Continuous Deployment of Python projects distributed as wheel packages using PyPI.

Gitlab CI/CD pipeline for open source Python projects, part 1

Part 1, presenting a pattern for a CI/CD pipeline implementation using Gitlab CI for Continuous Integration and Continuous Deployment of Python projects distributed as wheel packages using PyPI.

Announcing the `download_3gpp` utility

Announcing a CLI Python package to more easily download individual 3GPP standards documents, or to bulk download sets of documents, as necessary.

A TDD hello world

One of the things that I have observed both in my own practice of software development, and from what I can see of others is that the concepts of Test Driven Development (TDD) are so counter intuitive and it takes considerable self-discipline, self-restraint and self-awareness to ensure that tests are constructed before code is written. So what does it take to overcome this barrier?

A pattern for unit testable Python argparse implementation

Python argparse is a standard library for a Python script to extract command line arguments. It’s pretty useful, but unfortunately most tutorials and even the documentation itself don’t assume unit testing of your argument parsing. I present here a pattern for argparse usage that enables and facilitates unit testing, along with a nice encapsulation of a “user options” concept for maintaining the user options specified from the command line.

TDD implies higher quality code

I don’t mean just fewer errors, although that is definitely a happy side effect of TDD. I mean that the code is easier to read, maintain and has fewer leaky abstractions.

Scaling Gitlab runners

Gitlab documents a method for auto-scaling a gitlab-runner. But what if you are not able to apply Docker Machine concepts to your cluster, or don’t need autoscaling and are content to scale manually? Read on for my solution to simple, manual scaling of Gitlab runners in a Docker swarm.

Charting the multiport black box parameters of linear, time invariant electrical networks

This tutorial gives an overview of multiport black-box model theory and how it relates to commonly used parameters of linear, time invariant electrical networks. Expressions are also derived for the conversions between the various multiport parameters.

Combining principles; Theorem 3

When each of the \( M \) branch networks and source resistances are identical there is an equivalence between the multiport combiner with source resistance below and the single branch network also shown below, comprised of an effective source resistance \( R_{e} \), a scaled branch network \( \mathbf{Y_{e}} \) and the original trunk network \( \mathbf{Z_{t}} \).

Combining principles; Theorem 2

A combining network driven by multiple voltage sources as shown in the figure of Theorem 1 is equivalent to the same network driven by a single voltage source as shown below.

Combining principles; Theorem 1

Let there be \( M \) branches in the arbitrary combining network shown below. The output voltage \( v_{load} \) of the network is proportional to the source voltages \( v_{src}^{\langle k \rangle} \) scaled by the arbitrary networks interconnecting the branches to the combining node and the combining node to the load.

Two port parameter definitions

Since there are numerous valid definitions of two parameters depending on the reference point used, the reference currents and voltages used as the basis of further work will be described here. The diagram below shows the orientation of reference currents and voltages.

Two port reference diagram

Relating admittance and scattering parameters

By returning to the original S-parameter definitions by Kurokawa 1 and taking some care to preserve the noncommutative properties of the matrix expressions then relatively simple expressions valid for an arbitrary number of ports may be derived.

  1. K. Kurokawa, “Power waves and the scattering matrix,” IEEE Trans. Microw. Theory Tech., pp194-202, 1965. 

Windows 10 Hibernate option in power menu

Have you noticed that the Hibernate option is missing from the Power options in the start menu?

Hello World

Testing. 1. 2. 3.