27 Mär 2020

# The Value Proposition of Open Source Software

Open Source Open-source software (OSS) is a type of computer software in which source code is released under a license in which the copyright holder grants users the rights to study, change, and distribute the software to anyone and for any purpose.

In practice, this generally means software developed by hobbyists in their free time, as opposed to professionals at a company.

But why should such software be preferable to commercial products? I shall ignore price, for the moment. While open source software generally does not cost money, I have no qualms about paying money for software, and can easily afford to, as well. So if it's not price, what then?

Richard Stallman makes an argument that it's all about Freedom. But I have a suspicion that he really wants the code to be free, not its users1. He argues that "free" licenses make the program's source code available to users. Presumably, to read it and change it. However, I don't do that, generally. And neither do I redistribute software, which is another "freedom" granted by Stallman-style free software. Also, you don't need access to the source code to change a software. But I still prefer Open Source Software to commercial software, in most cases.

And the reason is, that in my experience, Open Source Software is generally better software. And I believe the reason for this is incentives:

Open Source Software is generally created to scratch an itch. One single developer was sufficiently disgruntled to throw all caution into the wind, and solve the problem him/herself. Which means that at least one person was dissatisfied with the commercial offerings at the time.

And there are plenty of reasons to be dissatisfied with commercial software. Commercial software needs to make money. And to justify recurring sales, it must keep adding features, often beyond the usefulness to users. Thus, big changes and new features are incentivized, while continued refinement and bug fixing are merely cost centers.

Contrast this with Open Source Software, which is quite content to simply work. No new features need to be added if the software is complete as it is, and no new effort needs to be invested if there aren't any bugs remaining. Such software is a joy to use.

In the commercial world, such software is not stable, but stagnant. A sign of death, not maturity. And when commercial software dies, it is buried, never to be used again. And all the work its users have created with it over the years, becomes inaccessible and obsolete with it. In the same way, today's online-only subscription-based software distributions are essentially protection rackets that require a monthly ransom just to keep access to your existing work. The moment you stop paying, all your previous work becomes inaccessible. Such moves are indeed Stallman-worthy invasions of freedom that are unacceptable to me2.

Of course, Open Source Software allows users to contribute to the product. But In my own projects, I have found this to vary greatly between cultures. Some communities seem to be naturally tinker-friendly, such as Emacs or Darktable. Others, such as Python's or Matlab's, are strangely reluctant to help one another, with more users creating bug reports than contributors creating pull requests.

Funny enough, price does not enter this equation. Because what you need to use Open Source Software is often not money, but time. And only rich people have that. If you're poor, and paying for software is a problem, you're far more likely to pirate "professional" software with a known value proposition, than to spend time on an unknown quantity. Open Source Software is a toy for the rich, and paradoxically unattractive to people in need3.

So in summary, I have generally found Open Source Software to be better than commercial software in most circumstances. Perhaps as a next step, we should try to figure out how to get payed for creating it, and how to keep monetary incentives from ruining products.

## Footnotes:

1
See this link for an exhaustive discussion of that topic. It's an amazing article!
2
Except for video games, which I only consume once, and which result in experiences, not artifacts. Strange, how this distinction is surprisingly hard to justify.
3
User-facing software, that is. Linux web servers are for everyone
20 Mär 2020

# Qt for Python Video Tutorial

This video series was produced in the spring of 2020, during the COVID19-pandemic, when all lectures had to be held electronically, without physical attendance. It is a tutorial, in German, for building a small Qt GUI that visualizes the ongoing pandemic on a world map.

If the videos are too slow, feel free to speed them up by right-clicking, and adjusting play speed (Firefox only, as far as I know).

## 1 Intro

Prerequisites: A basic understanding of Python, and a working installation of python ≥3.4.

An overview over the topics discussed in the rest of the videos, and installation of Qt for Python and Pandas.

## 2 Hello World

Our first GUI program, a window with a text label.

Code: map2.py

## 3 Main Window

Create a QMainWindow, and build some structure for later episodes.

Code: map3.py

## 4 Layouts

Position a QLabel and a QPushButton side by side, using layouts.

Code: map4.py

## 5 Signals and Slots

Make the button change the label's text if clicked.

Code: map5.py

Load the data required to draw a map.

Code: map6.py

Data: countries_110m.json

## 7 Drawing the Map

Draw a world map into a QGraphicsScene.

Code: map7.py

## 8 Pens and Brushes

Make the map pretty, using QPens and QBrushes.

Code: map8.py

## 9 Resize Event

Resize the map when the window size changes, by overloading resizeEvent.

Code: map9.py

## 10 Mouse Tracking

Highlight the country under the mouse.

Code: map10.py

## 11 Custom Signal

Respond to clicks of a country.

Code: map11.py

Improve the code by cutting out a middle man.

Code: map12.py

## 13 Pandas

A quick introduction to Pandas.

Data: covid19.csv

## 14 Pandas Integration

Load the COVID19 dataset and print some stats.

Code: map14.py

## 15 Model View Tables

Display the COVID19 dataset in a QTableView.

Code: map15.py

Fill in the table headers from the dataset.

Code: map16.py

## 17 Country Selection

Show only a subset of the dataset when a country is clicked.

Code: map18.py

## 18 Cleanup

Summary, and a few finishing touches.

Code: map18.py

11 Mär 2020

# Books of 2019

## Sapiens

More than any other book this year, Sapiens changed my view of the world. Or at least that's what it felt like while reading. It seemed as if every page contained a new and mind-blowing shift in perspective, such as casting money, democracy, and capitalism as "religions", and questioning the value of civilization in terms of individual human experience. My mind was reeling from the implications of these viewpoints, in a very good way.

On the other hand, my memory of the book is marred by the author's second book, Homo Deus, which highlights just how little the author's knowledge of history is worth when extrapolating into the future. It is, essentially, boring and shallow science fiction, with seemingly no knowledge decades of previous writing on the topic.

Come to think about it, this might reveal more about me than the author, for my own expertise is clearly more in science fiction than history; I might simply be much easier to please in the latter than in the former.

## The Boat Who Wouldn't Float

This is the partly-fictional account of the author, Mowat Farley, and his boat. That leeks. And stinks. And doesn't sail well. And that is still entirely endearing.

Or maybe it is really about the humor with which the author recounts his misadventures on the Canadian shore. I stuck with this book even though my terrible digital library loaner had whole corrupted pages every chapter or two. But I could neither put it down, nor stop laughing. This might be the funniest book I have read in a decade. I must read more Mowat Farley!

## Ninefox Gambit / Raven Stratagem / Revenant Gun

I did not like the first book in this series. It had a certain spark, but there was so much jargon and confusion, I just couldn't keep up. Yet. I kept coming back to it. That spark.

And in 2019, I bit the bullet, and picked up the sequel. And as with many things in life, it was better the second time around. Even though I still didn't quite get this particular sciency-fantasy-space-opera thing; I now felt at home in it, and could enjoy the story unraveling before me. At which point I couldn't put it down any longer. The two weeks I had to wait after finishing the second book before the third one released were harrowing. A masterpiece!

## The Murderbot Diaries

Sometimes I don't want to think. Sometimes I like a simple bit of escapism, like chocolate. Sometimes, I need to read about the Murderbot.

I love how the Murderbot Diaries cast humanity as uncaring and somewhat dim animals, with the most humane characters invariably being artificial intelligences. And the character of Murderbot itself is just so plain delightful, how it simultaneously wants to get away from, yet deeply cares for, us silly, childish humans.

## Brains vs. Bullets

This is an odd one. It's about soldiers, and how they fight. Or rather, what keeps them from fighting. Because every one has a breaking point, and soldiers are often quite close to it when they fight.

And as it turns out, humans are by and large pretty bad at killing each other. Even professional soldiers apparently are often unable to do so, despite years of training and propaganda. Which is a heartening message indeed, for a book on warfare.

09 Feb 2020

# Editing Fuji Photos on Linux

Darktable is my favorite RAW editor. It's a program for developing digital negatives ("RAW files") to JPEGs. But, I've long struggled with matching the quality of the out-of-camera JPEGs of my Fuji camera. Let me explain.

Today's cameras capture an astounding amount of detail, far more than monitors can display or printers can print. And then they crush it down to a printable and viewable JPEG file. But that crushing operation is idiomatic for each camera, irreversible, and not always appropriate to the image. And at those inappropriate times, when you want a wider dynamic range or different colors, a RAW editor like Darktable can take a digital sensor dump ("RAW file"), and render it differently. The challenge is that the camera's own JPEGs are already very, very good, and it's a fine line to walk between fixing a particular flaw with the image, while retaining as much detail as possible.

Fuji cameras produce notoriously difficult RAW files, as their internal processing is (said to be) particularly elaborate, and they use an unusual image sensor. This post is about matching the quality of Fuji's JPEGs in Darktable, while maintaining the fidelity and malleability of the RAW files.

Here are a few renditions of a photograph I took, the first created with my revised process, the second is Fuji's JPEG, and the third is Darktable's default rendition. First the entire picture, the a zoomed view so you can see each pixel:

While contrast and saturation don't match 100% in my version and Fuji's, the colors are close enough for further processing. Darktable's default version does not match those colors at all. The zoomed-in version highlights even worse problems with sharpness and detail retention. After working with Fuji files in Darktable for about a year, and editing about 3500 Fuji files, I finally found a workflow that reliably produces results on par with Fuji's JPEGs:

1. Use the Iridient X-Transformer to convert Fuji's RAF RAW-files to DNG RAW-files, and have the X-Transformer do the "More Detailed" demosaicing, and the full lens correction.
2. Use Stuart Sowerby's LUTs instead of Darktable's Base Curve or Filmic RGB.

My first gripe with Darktable's rendering of Fuji files is that the demosaicing and lens corrections are not particularly great. Pictures simply come out softer than with other tools, and chromatic aberrations remain an issue. The Iridient X-Transformer completely fixes this issue for me. The X-Transformer can also do sharpening and denoising, but I find those are better relegated to Darktable where needed. "But… that's proprietary Windows software!!!". Yes, it is. And it works beautifully in Wine.

My second issue is colors. Darktable needs a lot of massaging to produce Fuji-like colors. The Base Curve module (shown above) really does not do Fuji files justice most of the time. And while Filmic RGB is much better, it requires a lot of tedious adjustments even in simple cases. So instead, I use LUTs extracted with a color chart and some fancy math to replicate Fuji's colors. At the moment (v3.0), Darktable understands only .cube and .png LUTs. But Stuart Sowerby's website has them in .3dl. So for now, you need to install a 3D LUT converter, and convert them to .cube manually. On Windows.

With these two steps you can develop your Fuji RAFs better than your camera, and with relatively little fuss. I'll leave you with a finished render of the image above:

21 Jan 2020

# I Miss My Mac

There was a time, maybe from 2009 to 2011, when Apple computers were glorious. They were elegant devices, beautiful to me, and powerful. Never before, or since, have I loved a machine as I loved that MacBook Pro early 2011.

I miss that, being able to love the elegance and power a machine.

Nowadays I mostly use KDE Linux, which I can tolerate. Things occasionally break, stuff sometimes doesn't work as intended, but I can generally work around these quirks, so they don't bother me too much. Today, off the top of my head, Firefox crashed, Thunderbird couldn't display one folder, Zotero had to be re-installed, one monitor had to be power-cycled when waking the computer, and the laptop battery died way too quickly again.

I also use a Windows Surface tablet, which is a wonderful little device. It currently shows an error message every time it boots that I can't get rid of, has to be rebooted every few days to stay fast, and sometimes just won't react until restarted. And it always wants to install some update, and just refuses to do it overnight as intended. But generally it works pretty well.

And yesterday, in a bout of nostalgia, I opened my macOS laptop again and endeavored to write a bit on it. There were no updates, then there were updates but they couldn't be installed, then they could be installed, then the download stalled, and hat to be un-paused for some reason. Then my project files randomly couldn't be downloaded to the laptop, and the window management in macOS is a horrid mess. Also the update took a full hour, and didn't change anything noteworthy. I didn't end up actually getting to write on it.

In the evening, my camera corrupted its file system, as it sometimes does if I forget to format the SD card as FAT instead of its default exFAT. The recovery process was tedious but worked. I've done it a few times now and I know what to do.

My phone, meanwhile, can't use its fingerprint reader any longer ever since I "up"graded to Android 10. It's a Pixel 2, as google as Google can be. And apps are sometimes unresponsive and have to be restarted to become usable again. And it still can't undo text edits in the year 2020, and probably spies on my every move.

My amplifier nominally supports Bluetooth, but it only works some of the time. Currently it doesn't, so we use a portable Bluetooth speaker instead. Its Spotify integration has never worked even once. But at least it now reliably sends an image to the projector ever since we vowed to only ever touch the one reliable HDMI port on the front of it.

And as much as I love my ebook reader, it sometimes crashes when there's too much stuff on the page. One time I even had to completely reset it to get it to work again. And every time I install an update, the visual layout changes. Most of the time, mostly for the better. But it just erodes trust so much, to be at the mercy of the whims of an obviously demented software designer somewhere.

As I said, I miss my Mac, back when technology was magical, and just worked. And any error could be clearly explained as user error instead of terrible programming. When I was young and foolish, in other words.

I should go play with my child now, and run around in the yard, or maybe read a paper book. There's no joy in technology any more.