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.

 

Weekly Head Voices #85: Gone south.

From now on I’m going to try a more fluid weekly blogging schedule. My approach up to now was to try and write up the weekly right after the weekend, at which time,however, I’m usually caught up in the usual start-of-the-week storm of, uhm, possibilities, and hence let the blog writing slip, and once you start slipping it’s a challenge to stop. So now, instead of focusing on the when (the failed after the weekend) I’m going to focus on the how often. Maybe this works better.

This past weekend, we visited Cape Point, the almost-southernmost tip of Africa, and the spot where the Atlantic Ocean and the Indian Ocean crash together for a part of the year. It’s quite beautiful, and always great to have visitors that we can take there. I took this photo of the Cape of Good Hope from the Cape Point side:

Emacs nerdery.

My first significant Emacs Lisp hacking was first blogged by Sacha Chua (Emacs goddess!) and then accepted into the org2blog upstream repository. Nerd-adrenaline-rush!

On this topic, I also published deft-turbo, my fork of the original Deft to support recursive directory searching and now also multiple file types. If you’re into Notational Velocity style note-taking and into Emacs you’ll love this.

I now use Emacs Org mode for my daily note-taking, for blogging (this post is being written in Org mode in Emacs) and since yesterday also for generating beautiful presentation slides using the fantastic org-reveal. (As you might recall, I also use Emacs with mu4e as my email client.)

It’s crazy to think that GNU Emacs was first released in March of 1985, which makes it almost 30 years old, which is practically immortal in software terms, and yet it’s still the most powerful text editor in the world today.

Finally: The cracked phone screen.

After a great number of years using smartphones without covers of any kind (they’re so beautifully designed, why cover that up?) I finally dropped my Nexus 4 from about a metre height because a WhatsApp message arrived and I thought that I could easily fumble my digital friend out of my pocket whilst typing with my other hand.

Apparently I couldn’t.

The screen acquired an impressive new crack, and the digitizer is completely dead. I’m having it repaired, because it’s still a great phone, and Android 5.0 (Lollipop) is being pushed to Nexi 4 worldwide as we speak! (Fortunately I could factory reset the phone using only the hardware buttons.)

In the meantime, I’m using a backup Motorola Atrix 4G. Thanks to Android and much open source hackage, I was able to install Android 4.4.4 (KitKat) on it, in spite of it being a 2011 phone that was practically abandoned by Motorola at the Android 2.3 (Gingerbread) stage.

The end.

If you run into me in CYBERSPACE, and I’m late with a blog post, I give you permission to badger me about it.

Have a great half-week and weekend kids!

Weekly Head Voices #73: Keystroke megaphone!

In week 23 of 2014 I nerded out by writing two Emacs-related blog posts over at the vxlabs, and hacking org2blog to support WordPress image thumbnails:

Conserving keystrokes

Besides the general Emacs frenzy I’m going through at the moment, there is some method to my madness, especially the org2blog part. Through Emacs and org2blog, it has become significantly easier for me to publish a blog post. I’m in Emacs the whole day in any case (email and text notes database), so turning any piece of existing text into a blog post now takes no more than a minute or two.

Why is that interesting?

Well, in 2007, Jon Udell (we’ll forget for a while that he works for the enemy, because the man talks sense) wrote a blog post urging his readers to count their keystrokes. Here are three selected paragraphs:

When people tell me they’re too busy to blog, I ask them to count up their output of keystrokes. How many of those keystrokes flow into email messages? Most. How many people receive those email messages? Few. How many people could usefully benefit from those messages, now or later? More than a few, maybe a lot more.

From this perspective, blogging is a communication pattern that optimizes for the amount of awareness and influence that each keystroke can possibly yield. Some topics, of course, are necessarily private and interpersonal. But a surprising amount of business communication is potentially broader in scope. If your choice is to invest keystrokes in an email to three people, or in a blog entry that could be read by those same three people plus more — maybe many more — why not choose the latter? Why not make each keystroke work as hard as it can?

[converting an email to a blog post] can have powerful network effects. To exploit them, you have to realize that the delivery of a message, and the notification of delivery, do not necessarily coincide. Most of the time, in email, they do. The message is both notification and payload. But a message can also notify and point to a payload which is available to the recipient but also to other people and processes in other contexts. That arrangement costs hardly any extra keystrokes, and hardly any extra time. But it’s an optimization that can radically expand influence and awareness.

I’ve reproduced the same paragraphs that Jeff Atwood (co-creator of Stack Overflow, together with Joel Spolsky, I’M NOT WORTHY) extracted in his blog post on the matter, where he exhorted us with the question:

The next time you find yourself typing more than a few sentences on your keyboard, stop and ask: are you maximizing the value of your keystrokes?

(Scott Hanselman, like Udell also with the enemy but again a source of internet wisdom (hey, what’s up with that?!), is a strong proponent of this idea, see for example his 2010 post on the matter.)

Normal human stuff

I haven’t felt this cold in a long long time. Because winter here is usually short and/or mild and the summers are long and, err, summery, houses are not really well geared for the cold season. At night, the temperature inside my house approaches that of outside.

That’s why I’m counting down the days until June 21 (sorry Northern Hemisphere friends). It might be the middle of winter over here, but it’s also the point after which the days starting getting slowly longer and warmer.

While me wait, there are sunsets like this one on Friday, at the Stone Three company braai:

Sunset, seen from the Strand Yacht Club on Friday June 6, 2014.

… and lovely beers like this one:

Look how the sun sets ever so artfully on my Johnny Gold!

… to keep me busy.

Have a great week kids!