Weekly Head Voices #133: Onder in my Whiskeyglas.

The legendary Koos Kombuis (aka André Letoit) performing with Schalk Joubert on bass and Vernon Swart on percussion in the Helderberg Nature reserve, eponymous mountain visible through the trees on the right. This was a surprisingly amazing end to the week.

What a week.

It was beautiful to see the whole team step up to the plate and engineer at about 110% throughput (software gets complicated quickly, and there’s always one more thing you need to get done before the deliverable is ready), all the while remaining calm and, most importantly, kind.

Pro-tip Special

I was of course the lucky winner of the manual-writing sub-project. I love writing code, but there’s also something quite satisfying about writing documentation for a technical product. Anyways, there are five tiny but hopefully useful lessons I extracted from this exercise which I would like to present here:

  1. I’ve lamented the sorry state of the Windows console before (in 2011 to be exact). In a surprise twist, the Windows console still sucks almost 7 years later. At least it’s reliable. Anyways, cmder is a great console replacement which makes some of the stupid go away, somewhat.
  2. The Windows 10 built-in screenshot facility … wait for it… sucks. When you’re writing documentation you need a tool that fits into your workflow. Keyboard shortcut – window or region – image ends up in a directory of your choice. Greenshot is an open source screenshotting tool that does this with aplomb.
  3. You need to show a CHM (Windows Help) file to the user of your wxPython application when they hit F1. How hard could it be? Well, you could spend a number of hours trying to come up with a wx-y cross-platform solution, or you could use that time for something else worth your while and just use the Python win32 package to call into the official Windows help API. (cross-platform does work, it’s just really ugly)
  4. Sphinx is a much better tool to write technical manuals than is Markdown and related tools. I briefly considered Markdown because I always have to look up reStructuredText syntax, but fortunately ran into enough other places warning against using Markdown for documentation. For the record, I prefer orgmode over all of these puny formats in most other cases, but the documentation story of Sphinx with reStructuredText is admittedly much better.
  5. Start writing the manual as early as possible. It was amazing to see how this helped me to see the software we are designing at a more integrated (user) level. This knowledge was useful in driving more valuable improvements. If you can’t explain the flow of some procedure in a manual, that’s a good sign the procedure might need some refinement.

Humble Book Bundle and Rust

I bought the Humble Bundle of (O’Reilly) Functional Programming Books for a super affordable $15. I was primarily interested in the Programming Rust book by Blandy and Orendorff, but the other titles on Scala, Clojure, Erlang, Elixir, Haskell, Javascript and general functional programming are welcome additions to my library. Speaking of which, I emailed O’Reilly to ask if the books in the bundle could be added to my member library, which they promptly did!

I have avoided Rust up to now due to natural hype suppression circuitry, and because I grew up with C++, but its zero-overhead memory safety and trustworthy concurrency story makes it hard to ignore any longer. Even although Andrei Alexandrescu once called Rust the language that skips leg day, it’s certainly interesting seeing the constructs the language designers have come up to build a really fast compiled language with the lowest number of foot-guns per line of code.

Anyways, when this blog gets published, you should still have about 22 hours to make use of the Humble Bundle deal if you too see something that you like.

Life is continuous practice

I wanted to conclude with something that I’ve been thinking about recently. It has to do with explicitly treating one’s life as continuous practice. As I’ve mentioned before on this blog and people much smarter than me have been pointing out since forever, goals are no good and (lasting) happiness is probably not attainable.

Discarding as many as possible of these sorts of fetters is liberating (you Buddhist), but can seem to leave holes in one’s  life narrative. However, treating your life as a super long practice session is an interesting perspective.

There is also no end point, and no real life goal.

The only point of the whole exercise (yes, I see what I did there) is to try to improve continuously. Every day, we try to become a little better at our jobs, or at running, or at being a good human, or a partner, or a parent.

Practice means that you have good days and bad days. It means that you sometimes look back and think that you were a better person then than you are now. Practice means that when you pick one activity, another will temporarily languish until you can make time for it again.

All of this is ok, because tomorrow you have a whole new day to try again.

Weekly Head Voices #127: Readers are leaders.

Betty’s Bay Beach impression by Genetic Offspring Unit #1, age 11.
  • This week I worked on automated email analysis and storage for side-project #38465 (more on this in future editions) and on bits of UI for a wxPython desktop app (yes desktop app! some of us fortunately still get to make them!) for my current main work project.
  • Had to make screencast to demonstrate milestone deliverable of above-mentioned main project. Making screencasts is an obscure but longstanding hobby of mine, but I needed to level up slightly, so the business bought me ScreenFlow 7.2. For the first time ever, I recorded the screencast in multiple segments and did the voice-over later. Soon these new skillz will trickle down to my publically available screencasts.
  • On that topic, having a good microphone is crucial, not only for screen recordings but also for video meetings. I recently acquired the Samson Go Mic to complement my larger Samson C01U. The Go is brilliant: Recorded voice quality comes close to the C01U in spite of the Go’s compact form factor, and it has a hardware switch to select either of the the built-in omni-directional, for meetings, or cardioid, for more dedicated voice recording, microphone elements.
  • Ironically, an ex-colleague posted “How to Fix Facebook—Before It Fixes Us” on Facebook, a long and worthwhile read on how FB is used to spread fake news that effectively manipulates public opinion, and what should be done to remedy this. Here is a choice quote to get you started:

We still don’t know the exact degree of collusion between the Russians and the Trump campaign. But the debate over collusion, while important, risks missing what should be an obvious point: Facebook, Google, Twitter, and other platforms were manipulated by the Russians to shift outcomes in Brexit and the U.S. presidential election, and unless major changes are made, they will be manipulated again. Next time, there is no telling who the manipulators will be.

  • In the same vein, I continuously try to spend as few as possible minutes on YouTube, but the one thing I will definitely continue watching is Károly Zsolnai-Fehér’s brilliant Two Minute Papers channel! Most recently, his treatment of Distilling a Neural Network Into a Soft Decision Tree, a paper by Nicholas Frost and Geoffrey Hinton, caught my interest. In this, they address the problem of neural network explicability (it’s hard saying at a higher level why a neural network makes a particular decision) by deriving a soft decision tree from that trained neural network. The tree is not as accurate as the network, but is able to give plausible explanations for the network’s decisions. See the 4 minute long two minute paper video (hehe) here:
  • I came across the following on reddit, again quite ironically, and I have since taken to saying it to my genetic offspring units (GOUs) at every possible opportunity:

Readers are leaders!

Have a great week readers, I hope to see you again really soon!

wxPython lovin’

In other news, I was able to put time in on Friday and do some
PyColourChooser hacking. Michael Gilfix (the author) has integrated my patches. You know it’s a good patch when it removes far more code than it adds, yet increases the functionality. :)

I’m still wondering why wxWindows doesn’t wrap the GTK colour wheel though. The wxWindows generic colour selector (used on GTK setups) isn’t worth the photons it was coded with. PyColourChooser alleviates this deficiency in wxPython to some extent, but that durn colour wheel would have been nice too!