Image for post
Image for post

If you are using mathematics in your work or studies and you are interested in developing your own math-related software, then this article is for you. Typically, most people versed in the formal sciences can write some code. Nevertheless, the path from writing some code to developing functional, sharable software solutions is not always straightforward. I am hoping this guide will help you on your journey.

The Operating System

Let’s start with the decision that is probably the least worth sweating about. Unless you are a micro-electronics aficionado, there are just three broad choices: Mac, Windows, or Linux. …

Identify the best weapons in Far Cry 4 using Partial Orders

Image for post
Image for post

When the lockdown started, I found myself with some extra time which I judiciously invested in playing video games. One of them is Far Cry 4 (FC4), an action game in which as you progress you accumulate various weapons. The catch is that you can carry a limited number of weapons at a time, so you need to choose carefully.

Needless to say, there are numerous websites and YouTube videos arguing which are the “best” weapons in FC4. Although a lot of it comes down to personal preference, the weapons do come with numerical statistics that can be used to…

Image for post
Image for post
Euclid, the father of geometry

In part I of this post, I showcased some features of the Kotlin language by implementing a library for complex number arithmetic. My interest was to develop an intuitive notation to work with, so instead of writing an expression that looks like this

Complex c = new Complex(1, -1).times(new Complex(0, 2)
.minus(new Complex(1, 0)));

we can simply write

val c = (1-i)*(2*i-1)

Complex arithmetic packages are of course all too common. To keep things interesting, I went on to implement arithmetic of polynomials with complex coefficients, which one encounters less frequently.

Representation of Polynomials

My goal is to be able to write arithmetic…

How to execute GitHub CI when your code needs secret tokens

Image for post
Image for post

Here is the set up:

  1. I need to use a 3rd party API in my code which requires a personalized secret token
  2. My code is in a GitHub repository
  3. I run Continuous Integration to execute unit tests

And here is the problem:

  • How to execute tests that require this token without storing the it in the GitHub repository?

The Solution:

GitHub gives you the ability to store secrets as key/value pairs at the organization or the repository level. You can pass these secret values in the CI build as environment variables or program arguments.

GitHub Actions

GitHub Actions is GitHub’s built in…

Image for post
Image for post

When I first encountered Kotlin, I was excited that it was completely inter-operable with Java and it supported operator overloading. Operator overloading is essential in making a language more palatable to a programmer implementing mathematical operations.

Consider for example, this simple equation in Java

Even such a small equation looks awkward and confusing. What we really want to say, and see is:

My first impulse was to write a library for complex arithmetic in Kotlin and in the process of doing so, I discovered other cool Kotlin features, like extensions, destructuring, and infix notation, which I can exploit…


Image for post
Image for post

One way or another, I always end up with duplicate songs or pictures in my digital libraries, as well as duplicate contacts in my address book. For music, two songs having the same title does not necessarily make them the same song, so a more complex relation is required. I have developed some techniques for deduping and what they all have in common is that they are looking for equivalence relations. In this article I will introduce equivalence relations and apply them to the simple example of deduping a music library.

The Equivalence Relation

Relations are extensively used in Computer Science. For example…

A Book Review

Arthur Storr made his modest debut in the literary world with works such as the “Silent Soufflé”, the “Unbearable Tightness of Beans”, and other works of Food Fiction, which left critics largely unimpressed and gained him only a small following of readers. What brought him to the spotlight was his controversial book “The Dream Schnitzel” which afforded him, if not fame, at least a respectable degree of notoriety.

I should warn the possible but improbable readers of this review that it contains spoilers, but this should not overly concern them, as it is highly unlikely they will ever read the…

We often need to resize images to upload them, share them, or print them. However, occasionally we need to reduce the image size only in one direction. For example, if I want to post a panoramic picture in my blog, like the one below, the disproportionate length makes the details hard to see.

Image for post
Image for post

Standard image manipulation tools do not offer many choices. I can crop, thus losing detail on the edges or resize in one direction making everything look distorted.

Image for post
Image for post

Everybody knows that the sandwich was invented by the Lord of Sandwich and the Salisbury steak by Dr. Salisbury, but most people ignore that we owe the invention to the Jigsaw Puzzle to the Marquis de Puzzle. That deeply disturbed noble used to buy expensive paintings of famous artists, cut them into small pieces, mix them up, and then reassemble them and glue them on a canvas. The assembly was a laborious task that used to take hours, sometimes days, and often took longer to complete than the original painting had taken to paint. For this, he was rightfully proud…

Image for post
Image for post

Software development is a highly creative process. Engineers need to combine technical knowledge, experience, and fresh ideas in order to produce effective code and designs. A development organization cannot be modeled and operated as a factory line. Nevertheless, there are well established, highly evolved development practices, that can significantly boost the efficiency of a software team. In this article, I review what I consider the most essential of these practices.

  • Document Coding and Development Standards — Have you seen a codebase so packed with diverse programming styles and formatting that it looks like a quilt? Have you ever ventured into…

Dimitri Papaioannou

I am a software engineer and applied mathematician. My passion is to develop solution in the intersection of software and mathematics.

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