Mike’s Place

Home

I am Michael Trausch, a computer programmer and father of three kids, who is
stuck in Georgia. Some people like reading
books; I like making computers do things, so that’s my preferred method of
escapism.

I live with from chronic pain and discomfort as the result of a
surgery gone wrong, combined with an
inherited condition which became
worse because of the poor outcome of the surgery. I’m also extremely
limited in my ability to leave home—particularly on the worse days.
Therefore, I no longer work full-time, instead taking on work when and
where I can. When I cannot do that, I try my best to fill the rest of
the time with distraction.

In other words, while I am looking for work
(résumé), I am only looking for work
that is a decent fit. I’m certainly not interested in wasting anyone’s time.

I also post a lot of content on this site which is available for free to all,
and I would greatly appreciate donations.

Blog

This is the first part in a series, the length of which is unknown. Since I
have decided to resume working on AllTray again, it’s also become clear
that in order to modernize it, I need to learn Wayland.
It has also become clear, just in my cursory research and what I already know,
that the methods that AllTray uses under X11 simply won’t work with
Wayland.

The primary point of these posts is to provide personal reference material,
as well as help to solidify what I’m learning. Hopefully it’s also useful
to you.

This is a follow-up to my Minimal C++ article.
It might be helpful to read that article first, in order to understand the
context better.

Here, I present a relatively refined—and featherweight—method for
using C++ in “micro” environments: think 16- or 32-bit microcontrollers with memory
on the order of 64–256 KiB of storage, usually split between the program and
runtime memory (RAM).

There are several popular choices when it comes to which protocol to use for
Web service backend software. In this post, I take a look at the available
options and—spoiler alert—come to the conclusion that HTTP is the
winner. Yes, HTTP. The one and same protocol used to actually communicate with
the Web browser, should also be the one used to communicate between the
Web server and the application itself.

Well, this is the “first post,” in the sense that it is the first thing that
is published on this version of this site. It is, of course, far from the
first thing that I have written… and I hope it won’t be long before it is
lost in a long shuffle of posts soon to be written. I’ve missed writing.

As is probably implied, posts which are older than this one are imported
from either superfloppies.tk or previous incarnations of my blog here.

First off, I’d like to say that this document, while more or less finished, has not been fully proofed for typographical errors. Be kind, thanks.
This aims to be generally useful for anyone coming from a background that is not Unix. I do assume herein that you’re coming from something else, but not what that something else is. To put it differently: the information in this page will be absolute gobbledygook if you’re not familiar with analgous concepts in some other multiuser environment.

I keep talking about—and getting asked about—something that I refer to as “Minimal C++”. To be clear, there are a few points I should start of by stating explicitly:
This is not—as far as I’m aware—a term used elsewhere. It is not a new, different, or distinct language from C++. It is simply a model for using C++ that is different from the traditional heavyweight model using the C++ standard runtime and standard template libraries.

One of the more formative moments in my career as a programmer and as a coder, was the insight that I gained when I truly understood what an event loop is. In fact, until I did, I thought the same thing as some others out there do: that glib, Qt, APR, etc. all provide “event loops”. But, they do not. What they do do, is provide a useful abstraction of the underlying event loop so that programmers can focus on their logic without mucking about the system.

Computer programs are only as “smart” as they are made to be. This is something that you already know if you’ve written even a single computer program. This is a fact that is often exploited by people, used against programs which are connected to the public network.
The Spectrum As with anything, with programmers, you have a spectrum. Most people fall somewhere in the middle of it, but at the edges you have two types of people:

We all know it: nobody does backups. At least, most people don’t, anyway.
But everyone—and probably you, too—has important data.
What to do? If you’re on something other than Windows (or you’re using Cygwin on Windows) and you don’t mind a little bit of copy & paste, there is an easy answer here.
Check out xorriso The xorriso command makes this easy. Well, “easy”, meaning once you have learned how, you can put it in a shell script and life is happy.

This writeup was inspired by a conversation on Mastodon.
The Problem It is really easy to do something silly with an ELF file, such as accidentally create a dynamically-linked one as opposed to a statically-linked one. This is incredibly easy to do because in nine out of ten situations, you want to create an ELF program that uses shared libraries.
Also, perhaps counter-intuitively, when linking a PIE binary, it is an ELF shared object with an entrypoint, not an ELF executable.

Software

AllTray is a program that allows the user of an X11-based desktop environment
to “dock” any program into the system tray/notification area. It has been
unmaintained for a few years now, due to overwhelming health and life issues,
for which I apologize.

I hope to remedy this: as of April 2019, I am officially resuming maintenance
of AllTray. Of course, you can help speed things up
by donating, which helps me to cover
expenses and not only devote time, but devote more relaxed time, which
makes things happen faster.