Luminescent Dreams

Tech Chaos for September 20th, 2019

January 01, 0001
That's No Moon!, 2019-07

TGIF, and welcome back, y’all!

I am currently struggling with some pretty severe mental health issues, so about the only thing I have the energy to do is write today. Worst part of this mental health issue is that it is mostly about anxiety, and fearing the worst in an upcoming event. But I cannot do anything to put the anxiety aside, and I cannot do anything to bring the event on faster so I can find out the results, so… sucks to be me at the moment.

I will try to keep it coherent today.

Fitnesstrax 0.0.3

Over the course of the weekend, I released Fitnesstrax 0.0.3 on my nix channel. Unfortunately, even though I thought I got this squared away last week, the channel actually does not work as a channel. You can instead use the channel by cloning the repository and including it like so:

  ld = import /Users/savanni/src/luminescent-dreams/luminescent-dreams-nixpkgs/nixpkgs/default.nix {};`

This release involves a rather significant overhaul of the edit interface in order to accommodate more workout types.

In order to add Pushups and Situps (part of my regular workout routine), and soon to also add things like Tai Chi that are based solely on the amount of time that I spend practicing, I really needed to look at the user interface for the application. When I started, I was thinking that it would be cool to just have a section for Time/Distance workouts and another section for Set/Rep workouts, and logically another section for Time-only workouts. And this is obviously absurd. People want to add workouts and get a relevant user interface for each.

Much of my efforts over the weekend involved overhauling the interface. Now, each record can be edited separately. Workouts get added from a drop-down menu. Workouts get rendered through dynamic dispatch of what workout type is there. You no longer get “sections” for each major workout category, but just get more of a record for the day.

Really, this should have been obvious from the beginning. But, now it is there and I can store all of my pushup and situp workouts in the app that I have been working on for ages.

An irony to this whole thing is that I want to swap the app out for a native application, and that is going to be a huge task. My goal here is to get all of my workout types into a coherent UI with the minimal amount of effort so that I can then really focus on building a native UI.

A New Machine

Speaking of a native UI (bear with me here), I have finally decided that I need to get a new machine. I strongly, strongly prefer to only have to manage one computer, but as a consultant, it is rather difficult to merge my work computer and my personal computer. I use tools such as Nix and Docker to keep my environments from colliding with one another. Unfortunately, not all of my clients are particularly okay with creating truly isolated environments. Also, I recently did work with Ruby, and there was, at the time, a problem with some of the derivations for Ruby gems in Nix. I had to install Ruby with RVM in order to move forward, and for a bit it looked like I had already irrecoverably corrupted my machine.

So, although my new client will be giving me a dedicated computer to work with, I have decided that I really need to have a personal computer that I can keep very well packaged and clean, a work computer that I can regularly wipe and reinstall, and a client computer when the client has more particular needs. In the third case, my work computer may actually go silent for months while I spend my work hours on the client.

In deciding that I need a new machine, I also decided that I really, really, really want to go back to Linux. This actually means that instead of recoding the Fitnesstrax UI for MacOS, and doing the Rust language binding work for the Cocoa libraries, I am instead going to recode for GTK. In some sense, though, this also makes sense. Apple really has fitness tracking cornered on MacOS, and I sincerely doubt that I would get many users there. By contrast, Linux only has the online services, so I expect to get some early users from privacy-minded demographics.

Specs for the new machine: super lightweight laptop, longest battery life I can manage, 16GB of memory, 1TB SSD. Turns out, this is being really hard to find. I have found a customized machine from Lenovo that fits the bill, but shipping time is something like 4 weeks from now. It looks like I can get a machine from System76, but I will have to research. My past experience is that their laptops are rather bulky and have very poor battery life.

React Hooks

While I was reading onboarding documents for my new client, I noticed that they use React Hooks through their code. I knew nothing about them, but I realized that Fitnesstrax already runs the correct version of React to use them. So, I overhauled one of my components. I am actually very pleased with the result. My stateful components remain stateful, but the useState hook hugely reduces the amount of boilerplate code that I have to set up in order to manage component state!

I am unlikely to do anything more with React Hooks in my open source work for the forseeable future since I intend to switch over to GTK work, but it is a new tool that I recommend that everyone looks at.

Licensing and Pulling Power back from Corporate Interests

I have been using a lot of BSD-3 licensed code for a long time, and I have also been distributing my code under the BSD-3 license. But, corporations love this license. Unlike the GPL, it allows them to make products cheaply without providing any benefit back to the open source developer who put their precious time into the software that their projects depend on. Further, I know that in recent years corporations want to see your Github work as a condition for hiring.

I feel that the situation here is very complicated. I want to be able to work on things that bring benefits to individuals. But it is very unlikely that anyone would actually pay me for my open source work. I am most interested in having software, such as Fitnesstrax and Emseries adopted by as many individual users and open source developers as possible, but I also want corporations to either unambiguously hire me or pay me for my work.

Realistically, nobody but me is currently using any of my work. So, let’s set that aside and simply consider class solidarity. Specifically, solidarity with marginalized tech workers who have difficulty getting employed, do not have the time to put into open source work, or who simply do not want to give their free time away to corporations.

The GPL of course comes to mind, but certain black developers that I follow have started evangelizing the Parity and Prosperity licenses and the License Zero method of licensing software for commercial and closed source use. I am trying to begin conversations with folks about what that really turns into and how that would affect my open source development model. I hope to share more thoughts here as soon as I understand.

Employment

Last topic: employment.

Recruiters come looking for me on a pretty regular basis, but they pretty much ignore that I’ve specifically requested to never be contacted about Python positions. I have over a decade of Python programming experience, and I categorically hate the ecosystem. I also fail to understand why anyone would not want type guarantees at the time that their program starts running. Tell me: why would you want to have to write extra tests to validate that you are always calling functions correctly? Do you really want to find out about these things when they fail in production? Get real, folks.

I have a really damned good job with Cloud City Development. Great co-workers, management that actually does behave in solidarity with the employees, and a variety of jobs. This includes a job that I did over the last two months to accelarate how countries improve their public health policies! I don’t like our tech platform, but the culture really tips the balance wildly in favor of the company.

I even vaguely think that my managers would secretly been pleased if I had gone on climate strike today instead of having a major anxiety breakdown.

So, if any recuriters read this, know that you have an incredible bar to cross to even get a response from me. And at this time, the bar looks like this:

  • Rust, Typescript, Haskell, Nix
  • Linux-first development environment
  • Combating global climate change, building products that safeguard customer privacy rights, or aiding public health.

As a quick hint: if the product must be connected to the cloud, it does not safeguard customer privacy rights. I don’t care how revolutionary you think you are. My data, especially my health and fitness data, should literally never leave my devices.

And that’s it for this week! I hope to make this a regular column, though perhaps I will have to keep it shorter when I am doing focused work.