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.
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. …
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…
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.
My goal is to be able to write arithmetic…
Here is the set up:
And here is the problem:
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 is GitHub’s built in…
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…
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.
Relations are extensively used in Computer Science. For example…
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.
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.
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…
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.
I am a software engineer and applied mathematician. My passion is to develop solution in the intersection of software and mathematics.