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 #131: Function over form.

Do you know what time it is?

It’s Sunday, which means it’s time for a new edition of the WHV!

GOU #2 has made what will probably be the most significant contribution to this week’s edition. I am happy that it’s in the form of an art piece, although I am slowly also growing quite excited at the prospect of one of my GOUs popping up here one day with an acerbic comment.

Our family through the eyes and hands of GOU#2 (age 7), also known as My Most Favourite Middle Child.

It was one of those really high intensity work weeks.

This is probably because a deadline is approaching at high speed. We are in good shape, but we wil have to work with an even slightly higher intensity in the coming week and a bit to deliver.

Water

Day Zero has been pushed out further to mid May, due to the generous contributions by farmers of the Groenland Water Association, and due to new calculations based on agricultural use tapering off slightly in the coming months.

This has had a very welcome positive effect on our stress level.

We continue with our household water saving efforts. On Friday, we were surprised by about 15mm of rain. Our various rain harvesting systems did an excellent job at further bolstering our emergency supplies.

No Fibre For You!

Last year in July, magical elves starting digging up my neighbourhood to install green trunking everywhere. As you all know, green trunking is for optic fibre. Anyways, “fast” forward 7 months, and the online fibre coverage map finally turned dark purple over my house. As you also all know, dark purple means my house can be hooked up to the giant net of laser conducting fibres encircling the whole earth.

Whilst the jocks never got any further than reminiscing monosyllabically about how awesome they were in high school 25 years ago, the nerds were busy wrapping our whole planet in a net of optic fibres to send exabytes of information everywhere at light speed.

On Saturday a gentleman from the telco was here to hook me up. I was understandably vibrating with excitement.

Unfortunately it turned out that this specific gentleman was sent too early.

He had come to hook my house up to the fibre which by then should already have been pulled into the building from the termination point on the street outside.

Anyways, he promised to arrange for the extending-fibre-from-street-into-house lady or gentleman to swing by, before he himself would come back again to wrap the whole business up.

I guess that when you work with things moving at the speed of light, time travelling faux pas are bound to happen.

What a tool

Speaking of nerds, I have finally found a multi-tool that is small enough to disappear into one of my pockets, yet enables me to make myself more useful at least once a day. After a long search (I’ve been walking around with a pen-sized screwdriver with 4 interchangeable bits in my pocket for the past time) I settled on the Gerber Dime.

It looks like this:

They say the best camera is the one you have with you. The same goes for tools.

My Leatherman Wave, recently replaced under the 25 year Leatherman guarantee with a Wave 2 because they didn’t have Wave parts anymore, is a brilliant tool, but it’s bulky and so it usually sits at the bottom of my back-pack, until I run into a problem which requires its steely persuasion.

In contrast, I can have the Gerber Dime out and pulling teeth, Ron Swanson-style, in a few seconds. The bottle opener is best in class, the blade is sharp, and the package opening blade makes short work of those irritating blister packs. I have not yet been able to test more extensively the pliers, the scissors, the screw-drivers and the tweezers, but the mere fact that this is the tool I always have with me means they will probably win the suburban leg of this contest.

Tool belts for humanity

One day, when I care even less about what strangers think, I am planning to start wearing a tool belt. Tool belts don’t have the best reputation, especially in sartorial circles, but they are amazing.

Along with hiking shoes and bulky multi-tools, they epitomise the philosophy that many engineers are born with, and a philosophy that could benefit the world at large:

Function over form.

To me this is an echo, or perhaps a specific case, of reason over emotion. Feels are certainly important, but if we are to advance as a society, rationality has to win.

Ok kids, I am about to push an unexpected side-project into production tonight. I wish you increased utility, and an exceptionally deliberate experience of life, at least until we see each other again!

Weekly Head Voices #125: Buddy.

Monday, July 30 to Sunday, September 3, 2017.

(This post has turned into a huge ramble. It starts with parking, makes a quick visit to Yurp, buys a new laptop, compulsively measures time to try and increase quality of life, and then bounces like a hyperactive pinball between a book, a video and a blog post, all three about either not being special, not being happy or both. ENJOY!)

Parking

Because I would prefer that you perceive the time that you invest in reading these posts as time also usefully spent, allow me to start with a visual exposition of the pleasantly straight-forward geometry of parallel parking.

In other words, if you’re like me and your parallel parking performance could do with some improvement (mine oscillates between “I am the best parallel parker in the world, wheels perfectly aligned 5mm from the pavement” and “ABORT ABORT!! Oh well, we will find parking another day.”), the following animation might be of assistance:

Parallel Parking

Yurp

In an astonishingly fortunate confluence of events, I ended up again in my other home country. Although time was short, business was executed, and a great deal of highly concentrated joy was artfully squeezed from every minute.

Thank you Dutch family. I hope to see you again soon!

New laptop

Back home, it was time for me to add another life year to my steadily growing collection.

My gracious employer thought that the big day was an as good moment as any to equip me with a brand new work machine.

Up to then, I had been working on all of three different machines: Linux-running i7 desktop (acquired in Feb of 2015), early 2015 13″ retina MacBook Pro (acquired in June of 2015) and my trusty old klunky i7 Acer Linux-running laptop (acquired around March 2013).

Data is kept in sync, but context switching between different projects with different development environments on different machines at home and at work does seem to take up more time than I would care to admit.

Having everything on a single powerful-enough laptop would indeed make the most sense from a time-efficiency perspective.

I’m typing on the thing now. The keyboard’s second-generation butterfly switches do take a little getting used to, but I believe I may have been converted.

Importantly, I’ve already started seeing the advantages of always having all my work (and all my computer-based hobby-related toys) with me. No more context-switching means more time available for what happens between the switches.

(My more nerdily inclined readers, you can probably guess exactly which laptop this is. Ask me in the comments why this and not the alternatives!)

Measure all the things

On the topic of time efficiency, in an attempt to better understand what I was doing with my free time, and how exactly I was spending time at work, I put in some extra effort to record more accurately every minute of my time awake. I dream about being able to squeeze out more value from each day by being able to measure and review.

This is an extension to establishing a cadence of accountability for deep work, where one looks not only at deep work performed, but general value contributed and derived.

Watching SNL or College Humor clips on YouTube is fun, but can’t really be considered high value. In terms of R&R, reading a book, writing a blog post, learning something new and spending time with your family are all of high value.

Recording time like this does seem ever so slightly OCDish, but it was really for science, and mostly for evolution (see rule #3 of WHV’s Two Rules for Achieving Great Success in Life, or Just Surviving, Whichever Comes First).

I did only manage to keep it up for slightly over two weeks.

What was interesting, was that the act of having to specify and record each block of time forced me to be much more deliberate about everything I did.

All of a sudden, even goofing off could only happen if I explicitly spent time deciding that goofing off was really justified. Furthermore, the fact that I knew exactly how many minutes I was goofing off, tended to keep these distractions short.

The problem with this experiment quite unsurprisingly turned out to be the overhead of mechanically having to record every minute. That being said, I think the availability of a practical, highly private and practical mechanism (unlike the one I tried) for the real-time and aggregated measurement and reporting of “time value” could be a substantial help in the continuous optimisation of one’s days.

Happy not happy

On the topic of quality of life, I recently read The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life by Mark Manson. I was involuntarily eye-rolling quite regularly through the first 3/4 of the book, but by that time either Manson had just worn me down, or his writing had in fact greatly improved.

Whatever the case may be, I think the message is an important one, especially for young(er) people: You’re not special, so make peace with that as soon as you can. Accept that life is really just a series of problems that you have to solve, so at least pick the interesting ones. You probably won’t ever be happy or content for more than a few moments (sounds familiar, doesn’t it?) because that’s quite logically been evolved out of us. Pick the few things that you really care about, and commit to them.

Derek Sivers, himself no slouch when it comes to modern survival, summarises the book with:

The opposite of every other book. Don’t try. Give up. Be wrong. Lower your standards. Stop believing in yourself. Follow the pain. Each point is profoundly true, useful, and more powerful than the usual positivity. Succinct but surprisingly deep, I read it in one night.

(Interestingly, the first of the four noble truths of Buddhism is that life is suffering. “Human beings are subject to desires and cravings, but even when we are able to satisfy these desires, the satisfaction is only temporary. Pleasure does not last; or if it does, it becomes monotonous.” see this BBC entry for more happy thoughts about Buddhism. In fact-checking my summary up above, I just saw in Manson’s book that he does in fact explicitly tell the story of Buddha, in chapter 2 already. Doh.)

On the topic of not being special, I recently stumbled upon this interview with Simon Sinek. It’s all about the phenomenon of millenials in the workplace. Many of us around here (hey, we read long form blogs, this means we’re probably old-school) don’t classify as millenials, but the points Sinek makes about the role of old-school patience and focus in the work-place as opposed to the millenial-era instant gratification attention economy resonated with me.

Also, we’re still not special. :)

Try and make time for the first 3 to 4 minutes of the video. That’s what I did, because I’m not a millenial and I don’t like watching YouTube videos of what could have been blog posts, but then I just had to finish the whole 18 minutes:

It would be remiss of me not to mention Wait but Why’s brilliant and complementary exposition of Why Generation Y Yuppies Are Unhappy.

Whatever shall we do with this information?

We’re not special (phew, that’s a weight off one’s shoulders!), and we can’t ever attain more than fleeting happiness or contentment.

What we can do is to make peace, and to savour with wide open senses the fractal infinity hidden in the moments that we are blessed with.

P.S. Buddha also had a number of great tips.

P.P.S. During the night I started worrying that readers, especially my mom (hi mom!), might think that I’m unhappy, and that this post is a cry for help. I would like to assure you all that I’m currently enjoying life more than ever before, at least as far as my failing old memory is concerned. I can personally vouch for the making-peace-and-savouring-moments approach.

P.P.P.S. Statistically, humans hit happiness rock bottom at around about 50, see the u-shaped graph below (thanks FM for sending). A number of us are hiding here in the we’ve-made-our-peace-thanks-for-all-the-fish long tails of the distribution, where we plan to ride this one out. Join us!

Weekly Head Voices #124: Ceci n’est pas d’ennui.

This edition of the Weekly Head Voices is a retrospective of the period from Monday June 26 to Sunday July 30, where with weekly I mean regular(ish), which is still better than absent. :)

We spent the first week of July about 100km to the south of Durban.

It was an epic winter break-away with the conditions so summery that we forgot that it’s technically speaking the middle of winter. Down to the beach every day, balmy evenings spent outside, brilliant runs through the KwaZulu-Natal hills and a holiday destination that has mastered the arts of happy-children-happy-parental-units all contributed to a brilliant week.

On the way back to the airport, we squeezed in a visit to uShaka Marine World, where we visited the dolphins, the aquarium and I joined the two oldest genetic offspring units zip-lining all over the water park.

The week after it was off to The Hague for mostly work and a few maximally cromulent social sessions with my besties.

Plans were made. Philosophical discussions were had. Fortunately, no planes were missed.

During all of this, OpenServe’s elves were busy digging up my neighbourhood installing these magical green tubes everywhere. They’re magical because soon they will be filled with super thin glass fiber, and then lit up with lovely lovely internet.

I really can’t wait.

On the evening before taking chances but not missing my flight home, the conversation spent a good amount of time on the topics of happiness, contentment and life goals.

As a reader of this blog, you will know by now that we’re not big fans of happiness. See the last bit of Weekly Head Voices #44 (6+ years ago…) which has what I think is a good summary of why we are not.

On the other hand, we have always thought that contentment is perhaps a more practical state to try and work towards.

There are however those who make the logical argument that contentment has been evolved out of us a long time ago, and that we are thus doomed never to find contentment for more than a few moments.

In WHV #64, following an old tradition of hiding backyard philosophy in arb blog posts, I suggested side-stepping the issue by not focusing on life goals, which are in essence a sort of end point which will invariably lead to post-achievement ennui, but instead focusing on setting and following a certain direction.

Life directions don’t have to have endpoints, but they can have waypoints. The difference is that you know that these are waypoints, and you accept that the journey continues until it finally stops forever.

Whatever the case may be, the conversation motivated me to start a new search for more scientifically-oriented literature on the topics of human happiness, contentment, life goals and so forth.

Up to now my search has not turned up very much. In a surprising turn of events, it seems that there is no shortage of people who are willing to sell you the literature-equivalent of snake-oil, in some cases knowingly but in most cases utterly oblivious.

Somewhere else during this same evening (it was a productive night), we provisionally added a third rule to the WHV’s Two Rules for Achieving Great Success in Life, or Just Surviving, Whichever Comes First.

The rules are now: 1. Be useful. 2. Be likeable. 3. Evolve.

I have been using rules 1 and 2 of the hitherto bi-ruled WHV’s TRAGSL-JS-WCF (pronounced TRAGSL-JS-WCF) as a central component in my GOUs education.

Rule 3 should be understood as actively and continuously upgrading oneself based on continuous introspection and retrospection.

I was initially hesitant to add a third rule to the previously perfect two-rule combo, but wise friend made good arguments for reminding system users of the important of deliberate and continuous self-improvement.

In 25 years I hope to be able to report back on the efficacy of this system based on a smallish but long-term study with N=3.

What do you think?

Weekly Head Voices #123: A semblance of a cadence.

Yes, we ended up in the mountains again.

In the period from Monday June 12 to Sunday June 25 we were mostly trying to get through the winter, fighting off a virus or three (the kind that invades biological organisms you nerd) and generally nerding out.

One more of my org2blog pull requests was merged in: You can now configure the thumbnail sizes your blog will automatically show of your uploaded images. Getting my own itch scratches merged merged into open source projects never fails to makes me happy, even although in this case there can’t be more than 5 other people who will ever use this particular functionality.

Anyways.

ASP.NET Core SURPRISE!

For a work project I was encouraged to explore Microsoft’s brand new ASP.NET Core. While on the one hand I remain wary of Microsoft (IE6 anyone?), I am an absolute sucker for new technology on the other.

You may colour me impressed.

If I had to describe it in one sentence, I would have to describe ASP.NET Core as Django done in C#. You can develop and deploy this on Windows, Mac or Linux. You model and query your data using Entity Framework Core and LINQ for example, or Dapper if you prefer performance and don’t mind the SQL (I don’t), or both. You write controller classes and view templates using the Razor templating language.

C# 7.0 looks like it could be a high development velocity language. It has modern features such as lambdas with what looks like real closures (unlike C++ variable capturing), as well as the null coalescing operator (??) and the null conditional operator (?.), the latter of which looks superbly useful. Between Visual Studio on Windows and the Mac, or the new Intellij Rider IDE (all platforms) or Visual Studio Code (all platforms), the tooling is top notch.

Time will have to tell how it compares to Python with respect to development velocity, a competition that Python traditionally fares extremely well at.

Where ASP.NET Core wins hands down is in the memory usage department: By default you deploy using the Kestrel web server, which runs your C# code using multiple libuv (yeah, of lightning fast node.js event loop fame) event loops, all in threads.

With Django I usually deploy as many processes as I can behind uwsgi, itself behind nginx. The problem is that with Python’s garbage collector, these processes end up sharing very little memory, and so one has to take into account memory limits as well as CPU count on servers when considering concurrency.

The long and the short of this is that one will probably be able to process many more requests in parallel with ASP.NET Core than with Django. With uwsgi and Django I have experimented with gevent in uwsgi and monkey patching, but this does not work as well as it does in ASP.NET Core, which has been designed with this concurrency model in mind from the get go. My first memory usage and performance experiments have shown compelling results.

Hopefully more later!

A cadence of accountability

Lately my Deep Work habits have taken a bit of a hit. At first I could not understand how to address this, until I remembered mention of a cadence of accountability in The Book.

Taking a quick look at that post, I understood what I had forgotten to integrate with my habits. Besides just doing the deep work, it’s important to “keep a compelling scoreboard” and to “create a cadence of accountability”.

Although I was tracking my deep work time using the orgmode clocking commands (when I start “deep working” on anything, I make an orgmode heading for it in my journal and clock in; when I’m done I clock out; orgmode remembers all durations) I was not regularly reviewing my performance.

With orgmode’s org-clock-report command (C-c C-x C-r), I can easily create or update a little table, embedded in my monthly journal orgfile, with all of my deep work clocked time tallied by day. This “compelling scoreboard” gives me instant insight into my weekly and monthly performance, and gives me either a mental kick in the behind or pat on the shoulder, depending on how many deep work hours I’ve been able to squeeze in that day and the days before it.

The moment I started doing this at regular intervals, “creating a cadence of accountability” in other words, I was able to swat distractions out of the way and get my zone back.

This is an interesting similarity with GTD (which I don’t do so much anymore because focus is far more important to me than taking care of sometimes arbitrary and fragmentary tasks) in that GTD has the regular review as a core principle.

Us humans being so dependent on habits to make real progress in life leads me to the conclusion that this is a clever trick to acquire behaviour that is not habitual: Work on an auxiliary behaviour that is habitual, e.g. the regular review, that encourages / reinforces behaviour that is perhaps not habitual, e.g. taking care of randomly scheduled heterogeneous tasks (GTD) or fitting in randomly scheduled focus periods (Deep Work of the journalistic variant).

As an aside, cadence in this context is just a really elegant synonym for habit. I suggest we use it more, especially at cocktail parties.