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.
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.
Following the rich tradition over here of year transition posts, having just rounded off a brilliant outdoorsy take-your-mind-off-of-everything vacation with friends, and also inspired by wogan.blog’s nicely personal 2016 review post, I decided that a farewell-2016 how-you-doin’-2017 post was in order.
Warning: This post is long (1800 words+), rambly and sometimes even a bit mushy. I hope you enjoy it!
2016: The Review
The bad, with a hopefully slightly positive outlook at the end
Let’s get the bad stuff out of the way as soon as we can…
For me the biggest disappointments of 2016 were the double-whammy of the Brexit followed by the Trumpocalypse.
I really did not expect either of these events to go the way they did.
This is probably because I was, ever the optimist, over-estimating the level of human development of British and US voters.
The exclusionist, nationalist, xenophobic and in many cases even white supremacist thinking associated with Trump’s support in the US and the Leave vote in the UK are truly abhorrent.
I understand that there were many other factors at play. However, these voters were either throwing out the baby with the bath water, or, much much worse, agreeing with the abhorrent sentiments mentioned above. Especially this second possibility depressed me greatly after the US election.
After such setbacks, one needs to look for solutions.
This is yet another strong indication that we should really be pouring every resource we have into the education of our people. (yes, correlation and causation, I know. hence the terms “strong indication”. discuss in the comments if you like.)
Human history has become, more and more, a race between education and catastrophe.
The way things are going now, that thought, and movements like #feesmustfall, are more important than ever. There can be absolutely no excuse for neglecting the highest quality and accessible education (basic up to tertiary) of future generations of humans whom we expect to further our civilization.
The running and the mindful
In 2016, I ran 440km.
There are a great deal of people who have run much more than that, but those are my 440 kilometers and somehow they brought me a great deal of deep satisfaction.
During the year, my per-run distance and speed have gradually increased.
Besides fitness gradually increasing, I discovered experimentally that shorter, quicker steps get me further and a higher pace. It took a biomechanical friend to explain to me that this was about muscles operating within the more efficient middle of their full extension/contraction ranges. I could probably just have read this somewhere, but doing it the hard way and then having a friend explain it on top of Table Mountain definitely added something to the experience.
With the surroundings over here being what they are, it does not take much to slip into a state of mindfulness.
No doing, no planning; just absorbing all of the surroundings, physical and mental, the music, and feeling how the meat-based machine that houses me propels us forward.
On the topic of mindfulness, for the last few months I added a repeat event to my todoist, helping me to spend five minutes every morning before work doing the breathing exercise. More recently I do this without any voice track, but previously Prof. Mark Williams at one point would say (original quote is due to Jon Kabat-Zinn, PhD):
Each breath a new beginning; each out-breath a letting go.
There’s a whole lot in there. I have spent quite some time with it and I am far from done.
The first rule of blogging: You don’t blog about blogging.
However, I hope you don’t mind me breaking that rule to mention that in 2016, this blog was viewed 133 thousand times. I already get happy when one other person reads a post. You can imagine how happy it makes me to know that there are even slightly more people who have come here to consume some of the words I have written, and even some who have taken the time to leave behind comments!
The lion’s share of those views were due to focused posts that got picked up by some of the more popular nerd sites. I have to admit that I derived the most enjoyment from the more personal posts that were only read by friends.
Whatever the case may be, this has to be my most satisfying hobby. Thank you for the crucial role that you who read play in it!
The new life
In early(ish) 2016, our third daughter, affectionately known as Genetic Offspring Unit #3 (GOU#3 for short) around these parts, was born.
This wonderful little cellular mega-cluster is currently making noises that have the primary purpose of being immensely cute, but are also slowly starting to make sense. Her ambulation capabilities have increased immensely, and she is on the verge of standing up by herself and so we will probably have to re-arrange our interior. Again.
I prefer making resolutions in secret, then carrying them out or not, and only then reporting on them. However, that would mean that I would have to wrap up this post right now, and for that I’m not quite ready yet.
Those of you who have spent more than 8 seconds in my or my blog’s vicinity know that I absolutely adore craft beer (this includes local, but also special beers of the Belgian type) and local wines, both of which are regularly consumed by me and “business partners” during “business lunches” in the not-unattractive local surroundings.
This decision was not taken lightly.
It is mid-morning of day 2 of Experiment Alcohol Zero (EAZ) as I write this. With the air full of smoke due to local vegetation fires, I have not been able to go running yet, but I am imagining that my energy lasted later last night, and I got up easier this morning. I have 29 more days to investigate.
I also remind myself to be grateful. It takes continuous practice to identify the many things one can be grateful for every day, but it is definitely worth it.
I often remind GOU#1 (#2 and #3 are not old enough yet for this lesson) that, besides the guidelines above, we have to keep on working on two more related characteristics: being useful, and being likable.
Being useful means continuously developing and refining skills that enable one to contribute value to one’s surroundings. Being likable means understanding and appreciating how we humans stick together. Kindness, see above, is an important component of this.
In 2017, I would like to write more (on this blog probably), and read more.
Rapidly morphing goalposts jumping randomly through even more randomly pulsating hyperspace, with a slightly positive outlook at the end
Yes folks, this is going to be my parting thought.
When I was much younger, I used to believe that one’s life could be “cracked”. That is, if you searched, and you worked really hard at understanding yourself, your people and your surroundings, you could come up with some kind of answer with which you would be able to attain contentment.
In the meantime I’ve come to the realisation that that Much Younger Me, although quite dashing, was of course utterly wrong.
Life is utterly dynamic. You Now are a different person from You Last Year. The same goes for people around you, and the same goes for everything around you.
The goal posts are not just moving all the time, they are an illusion flashing in and out of an hallucinogenic and especially dynamic perception.
Importantly, in this restless environment, some peace can be found by realising that a large part of the restlessness originates from within you. Fortunately, you have slightly more say in you than you have in your surroundings.
What one can do then, is nicely summarised by Prof. Mark Williams in the audio accompanying his mindfulness book:
The deep stillness we seek does not arise because the world is still or the mind is quiet. Stillness is nourished when we allow things to be just as they are for now, in this moment, moment by moment and breath by breath.
The End (for now)
Alright friends, that was it from me, for now. I hope that you have the best 2017 possible. I hope especially that your kindness and that of those around you flows deeply and freely.
As a parting gift, here is the high-resolution panoroma I made from the top of Table Mountain, after hiking up Platteklip Gorge with friends:
I thought that I had nothing for the two weeks from Monday January 18 to Sunday January 31, 2016, but my notes begged to differ. They suggested the following items for your reading, listening and viewing pleasure:
If you’re like me, you stop two to three chips short of finishing the packet so that you can explain to your conscience that you didn’t finish the whole thing. However, once or twice in my life, I’ve been faced with the terrifying conundrum of a partially finished packet of chips, but no way to seal the packet for later utilisation. Readers, agonise no more! Learn from this animated demonstration:
A musically inclined colleague recently suggested I try out In Colour, the 2015 studio album by Jamie XX. After multiple listens, I can only highly recommend that you too try this out on your favourite music source. I’m currently on Apple Music, because it is currently the best way for me and my whole family to get access to all the music we can eat. What a time to be alive! Below is one of my favourite tracks from the album:
Irrelevant miscellany, for my OCD
At Stone Three, as I have previously hinted, we have now switched to a self-hosted Mattermost. So far, this is going swimmingly, with some of the resident experts also getting the github integration going (when someone pushes to any of the linked github repos, we get a nicely formatted message on the relevant channels). If you’re curious about how exactly this compares to HipChat, Slack or Campfire (remember that?), let me know in the comments.
It turns out that millenials have introduced new forms like totes delish (most delicious), abbreviash (abbreviation), appreesh (appreciate) and many more brilliant inventions into the English language. It’s fantastic seeing a language evolve like this, especially now that the internet and the hyper-connected humans on it are acting as such a powerful catalyst, and simultaneously as an instrument of observation, or should I say observash?
Inspiring quotes that you can repost if you want
This is from Soderbergh’s Solaris, which I thought was brilliant (I did read Lem’s book when I was much younger, could be that that did the trick). The quote was brought to my attention by @ckritzinger on the twitters as follows:
There are no answers. Only choices.
Let’s broaden the quote slightly. Remember, this is the dialogue between one of the last living characters on a space station, and a flesh-and-bones version of one of the other crew members that was resurrected (you know, from being completely dead) by the utterly strange planetary intelligence that is Solaris (you can also read this fine analysis):
If you keep thinking there’s a solution, you’ll die here. There are no answers. Only choices.
That sounds like an even more apt bit of advice for most of us here on Earth, except that it’s only going to make the difference between dying, or dying with the disappointing belief that there must have been a solution or final answer somewhere that you were just unable to find.
The week of Monday June 15 to Sunday June 21 in bullets:
Ran around organizing all kinds of things for the new house. The various institutions have been cooperating very nicely.
Spent days trying first to fix an implementation of a GPU algorithm to simulate car paint, and then to implement an alternative algorithm by the clever boys and girls at NVIDIA. A team-mate finally got everything working by realising that the float16 texture coordinates (long story) we were using to sample a noise texture needed to be float32. Lesson learnt: If you’re seeing splotches when you’re supposed to be seeing snow, check your float precision!
Spent the rest of the week fighting with wkhtmltopdf, a tool that converts HTML into PDF. Unfortunately the tool is 50% webkit, and 50% black magic. Lesson learnt: wkhtmltopdf 0.12.2.1 renders internally at 74.8dpi. Accept it, calculate with it, and move on. The upshot of this is that the IP Dashboard is now 37% better at exporting charts.
For some time now, when I have to make decisions, I actively optimise for experiences and not for possessions. At some point in the past I read in the blogosphere that experiences make people happier than possessions, and since then I’ve been paying more attention to this. IT REALLY WORKS!(tm) Tonight I wanted to look up the sources of this idea for you (and for me). Here are the two academic papers causing most of that online discussion, and a summarising blog post::
Carter and Gilovich’s research (based on on a number of tests and questionnaires they did with a sample of Cornell students) demonstrated that experiences were more satisfying than possessions. Their results also support at least one explanatory mechanism: Experiences are more closely connected to the self. This makes sense: Anybody else can buy the same thing you bought, but, by definition, your experience of some event or adventure is quite unique to you. To my mind, the idea of focusing on the experience rather than the cake at the end is pleasingly complementary to the adage that Life is a journey, not a destination, which I have just learned is due to Ralph Waldo Emerson.
I’m still terrible at bullets, I know.
Dear reader(s), have a beautiful and experience-filled week!
Hey, it only took three weeks this time! I’ve been working quite hard, mostly programming (oh hi there C++, I never really stopped loving you. I really like what you’ve done with the autos and the lambdas), taking care of some admin (freeagent is approximately an infinite times better for running your business in South Africa than Sage One Accounting / Pastel My Business Online, which is a textbook example of how to torture your users with an almost hilariously terrible user interface which would have been funny were it not for the fact that it is so excruciatingly painful), gearing up for open source activism (if you’re in SA and you’re into open source, please join!) and spending as much as possible free time in the beautiful surroundings.
I made you this photo sphere of the waterfall at the top of the Leopard’s Kloof trail in the Harold Porter botanical gardens, one of our favourite outdoor hangouts:
This past weekend we had the privilege of going to a weekend-long double birthday party in a place called Boggomsbaai. The subjects of said party (I didn’t want to objectify them) are two of the most interesting people I know. In spite of this foreknowledge, I was still greatly (but extremely pleasantly) surprised by the number of exceptionally interesting friends that aforementioned party subjects had managed to surround themselves with, resulting in an ever-so-slightly mind-bending gathering.
Of the many things I learnt this weekend, I would like to share these two with you:
Lesson 1 – Weekend parties are the best parties.
… we should do even more of those! It seems like the Friday warm-up-party and the Saturday morning and afternoon socialising and more warm-up, combined with a willing group of party athletes, are good ingredients for a Saturday night awesomeness crescendo! (live band and copious amounts of beer not bad ideas either)
Lesson 2 – On being grateful.
At one point I was chatting with one of the guests, a person who has done quite a bit of travelling, and who seems to have settled nicely into the role of eternal foreigner here in this strange country. Their better living tip, based on much hard-won experience, was simply this: Be grateful.
Their advice immediately made a great impression on me.
Remembering to be explicitly grateful every day (go on, identify and articulate all of the things! if you are able to read this, chances are that you have much to be grateful for) is such an elegant yet practical path to mindfulness. To boot, it fits in very nicely with being kind.
(During looking up the etymology of “to boot” on this worldwide network that interactively gives us access to just about the sum total of human knowledge whenever we want it, I just discovered that “botha” is a Gothic word meaning “advantage”. Sweet!)