One was looking forward to using third party running apps on the watch, such as iSmoothRun which does real-time reporting of cadence, which can be shown together with a number of other stats on a number of configurable screens a la Garmin . One has had to cancel these plans, because Vitality, the shadowy organisation responsible for the FOR FREE(ish) nature of the watch, only recognises runs submitted by the built-in Workouts app.
The September watchOS update will include runtime (haha) cadence, which is great. However, some technical system for the support of third party apps would have been even better. I’ll live.
Runs logged with the built-in Workouts app can be easily and automatically submitted to other platforms, such as Strava, where many of my running peeps hang out, and even to one’s own Dropbox in FIT format, with the HealthFit iOS app, a very reasonable once-off purchase.
On Friday, we shipped a new version of the most important work project I am currently involved in.
Again I feel that two points are worth mentioning:
We now also have deep learning, albeit a humble example, out in actual production. I was starting to feel a little left out. Anonymous shout-out (because top secret) to the team members who made this happen!
They say one should never deploy or ship on Friday. Because I come from the I-won’t-do-what-you-tell-me generation, I cut the final release on Friday evening after the traditional weekend-starter braai.
To be honest, this was only necessary because I had promised our client that we would release, and it was only possible because we have a fairly good test-suite, with end-to-end being most crucial in this specific scenario, and a checklist-style release procedure.
As part of my chaotic but ever-evolving constellation of systems for maintaining work focus, I have renamed the shorter focus blocks approach to the short-but-specially-defined-so-that-completion-is-possible-within-one-block focus blocks approach (SBSDSTCIPWOB-FBA).
This adds the incentive of a small but probable shot of dopamine at the end of the focus block, and sometimes even leads to its unwitting extension by the woefully undersized (not to mention super lazy) rider sometimes sitting atop my mental elephant.
It sometimes feels like I’m slowly reinventing GTD.
(This blog post is an emotional roller coaster ride for me. This is the first time I’m feeling something.)
I used to be a fan of GTD when I still believed that my function in life was to answer emails really quickly, and master multi-tasking.
Since then however, I’ve slowly had to come to the realisation that, at least in my case, the amount of email processed is more or less exactly inversely correlated to the actual value that I produce.
The impotence of proof-reading
The following poetry reading made various subsets of my neurons fire in extremely pleasant ways.
I hope that you experience similar effects. See you next time!
This post covers the week from Monday July 9 to Sunday July 15.
The business part of my week was unfairly dominated by far too much after-work obsessing over programming languages, with which I seem to have an unhealthy (or perhaps not) obsession.
I will externalise some of these thoughts further down in this post.
I’m starting with a weekend / running update, which should be reasonably safe for non-nerds to read. However, after that, the nerd dial will go up to 11 with stuff about tools and programming languages right up to the end of the post.
I would have wanted to use the adjective “face-melting”, but I’m not sure if any intensity of nerdery could ever reach that level.
We can dream.
Weekend running update
Most fortunately the weekend had other plans and supplied us with at least 2.5 parties, the first of which even culminated in a ridiculously fun trail run in the mountains on the winter morning after.
The winter morning sun was just perfect, the company was great, and I had forgotten all forms of performance tracking devices at home.
Readers with bionic eyes might notice the Lunas on my feet.
I have now ran just over 260km in them, but, in a surprise twist to the regular readers of this blog, my biological equipment has still not yet completely adjusted to the new style of locomotion.
They currently have to work extra hard to stabilise my feet while running, because, you know, no shoes.
Because doing this thing was not hard enough already, and because the Lunas are perhaps still a bit too cushiony, and because my friend the Very Flat Cat forgot that I’m very suggestible after 11:00 in the morning when my prefrontal cortex takes the rest of the day off, I am now also the very shy owner of a pair of Xero Genesis running sandals:
The soles are only 5mm thick, and quite hard, being rated for a few thousand miles and all. The upshot of this is that one’s feet have to work even harder than in the Lunas.
My first run in these was amazing: I could feel my feet reacting to every little pebble, and my running style having to adapt even more to the terrain.
However, there was a price to pay for all of that additional terrain feel (and the fact that I took a much longer maiden run than I should have): The next day, the tendons in my feet felt even more (ab)used than usual.
WITH GREAT POWER COMES GREAT RESPONSIBILITY, it seems.
Due to these shoes being so powerful, I have had to resign to introducing Xero running far more gradually than I had initially thought.
Vacation-based-thinking-driven tool sharpening aka The WVV 2018 Data Science Toolbox(tm).
During the previously blogged-about Mpumalanga vacation, the lack of alarms, devices, and other work accoutrements, resulted in there being ample time for staring-into-space-grade thinking sessions.
During one of these thinking sessions, I realised that I had somehow neglected my data science toolbox for a while.
At some point a few years back, I was so into ipython notebooks (what has now become jupyter) that I used them as my main work lab notes modality.
However, in the meantime I had fallen slightly out of love with the computational notebook style of data programming, because I had begun to develop doubts about their role in the analysis pipeline.
interlude 1:jupyter notebooks are nice for initial data exploration, and they’re especially useful for remote computation with embedded graphics. However, that initial momentum of discovery risks devolving into an unwieldy monolith of code snippets, data transformations and experiments. There’s a fine line to be walked between flexible experimentation on the one hand, and version-controlled, time-stamped, permutational and scientific rigour on the other.
interlude 2:I have to apologise for using the term “data science” in a non-comedic context. In spite of the inherent humour, it has turned into a usable blanket term for computational data understanding.
Due to my growing doubts in the order of Jupyter, and due to being occupied with less traditionally data sciencey work projects, I had unfortunately let my data science toolbox gather perhaps a bit too much dust.
Slightly more worrying than falling out of love with the Jupyter Notebooks (I still like them, I’m just not that madly in love anymore), was the more specific issue that I’d even let the datavis parts get a bit dusty.
Although I should probably write a more complete post about this, here is the list of ingredients of the official 2018 WHV Data Science Toolbox(tm):
Programming language and library ecosystem: Python.
This language, in spite of its shortcomings, dominates the data science / machine learning world thanks to its STELLAR ecosystem.
numpy, pandas, scipy, scikit-*, tensorflow, pytorch, keras, cython… this snowball has turned into a pretty sizeable planet.
For this reason, it would be hard to justify any other choice for data science.
However, since I’ve been seeing more of Lisp and the rest of the ever-expanding programming language landscape, I can see (Python’s shortcomings as a programming language) clearly now.
In terms of interactive programming, Python beats the majority of practical programming languages, with Common Lisp being one notable exception.
However, it’s not functional enough, which engenders unnecessarily imperative, side-effecting code. More specifically, it’s not expression-oriented.
More about this slightly further down. Maybe.
Datavis: Anything, as long as it’s Vega or Vega-Lite.
I spent a few years of my life wrangling d3.js, down to INNARD-LEVEL.
Mike Bostock’s idea of data-element-joins is genius, and internalising it was intellectually satisfying.
(if it’s any consolation, the new kid can be considered the grand-child of d3.js.)
vega and vega-lite are so-called visualization grammars, or visualization DSLs (domain specific languages).
The upshot is that one codes up a chart, or a whole set of linked charts and their interactive behaviour, using a language that was designed for this purpose.
This chart code can be easily shared, or converted into interactive visual representations that can be embedded in applications, online or in print quality documents.
With Altair, you can even send your pandas dataframes to vega and vega-lite charts all from the comfort of your slightly defective Python armchair.
Development Environment: PyCharm.
You knew it was not going to be Jupyter Notebooks, but you probably expected it to be Emacs.
Well it’s not. Surprise!
The remote interpreter support in PyCharm enables me to connect to a Python virtual environment anywhere on the planet, which I often do.
The JetBrains wizards have optimised the remote communication of code intelligence, so completion, documentation and general code understanding is almost indistinguishable from that on a completely local project.
Two notable drawbacks are visualization and long-running jobs.
For the long-running jobs I do tend to use Jupyter Notebooks or when at all possible mosh, which is amazing. However, because the primary modality is not the notebook, my code is versioned and organised into separate libraries which I can call into from notebook or mosh.
For visualization, it’s either connecting to the altair chart server via SSH pipe, dumping the chart to the unison-synced project, and/or a Jupyter Notebook.
Of course you use Postgres on an SSD for your data, and of course you know enough SQL to make short work of most of the heavy-weight transformations often required at the start your data crunching pipeline.
For all of my lab notes, reports, books, papers and blog posts, I use Emacs Org mode.
LaTeX math with live preview, live code snippets, SVG graphics, bibtex references, export to anything. This is one of the best ways to document your science.
Programming language addiction update.
I spend far too much obsessing over programming languages, old and new.
For the past two weeks, I wasted even more precious time than usual reading up about programming languages.
Because I would really like to spend more of my time on other, perhaps more valuable activities, I’ve been trying to better define what it is I’m actually looking for.
Of course there is no single best programming language, but a whole set of good languages that map in intricate ways to different problem domains.
In spite of this, I have been pining for a language with, in order of importance:
A Functional Programming DNA, with which I’m referring to a) expression-orientedness, b) a preference for pure functions, and at a higher level, c) the modelling of reality as more or less explicit dataflows.
Interactive programming, with Common Lisp being the textbook example of this.
Great tooling and IDEs, meaning first-class support by something from JetBrains, Microsoft or Emacs.
Great concurrency and parallelism stories.
A great library ecosystem.
Modest memory use.
Having just explicitly written this down for the first time (!! – it was consuming so much glucose just being kept amorphously swirling around in my brain) I can now mentally map some of my most recent language dalliances to these points.
This language is far too simple for my taste, but probably really great for teams.
I did recently take a more serious look when setting up a telegram bot using tbot and being amazed at how simple it was building web services like these using goroutines and channels.
Go satisfies points 3 to 6 from the list above. Makes sense that I decided to file this experiment away under “check when you need to put a webservice together REALLY QUICKLY”.
When I saw up that rust, surprisingly, is an expression-oriented language, I flew through the O’Reilly Programming Rust book I had bought previously as part of a bundle.
Evaluating rust by the list above, we award it a fractional 1 because expression-oriented, 3 due to jetbrains plugin amongst others, 4(ish) – great memory safety, but compared to clojure, concurrency and parallelism stories still have much room to grow, a solid 5 thanks to cargo and a very strong 6.
I filed this one away under “re-evaluate whenever you reach for your trusty C++”. (also, actix-web looks amazing for super high performance microservices.)
This post covers the period Monday June 11 to Sunday June 17. Read it to become rich, yawn at Lisp and Emacs, yearn to run free on the wide open plains and to learn Kung Fu. Not ambitious at all.
Social Democracy FTW
It turns out that your chances of becoming rich are the greatest if you had the good fortune to have been born in one of the Nordic social democracies, such as Norway, Sweden or Denmark.
The US trails these countries, at position 13, in terms of per capita individuals with net worth over $30 million.
Being a proponent of social democracy as the most humane form of currently practical human government, and often infuriating conservatives by pointing out that many crucial aspects of social democracies can be described as socialistic, I really enjoyed the linked TEDx talk by Norwegian Harald Eia.
This material will serve me well as the source of future mischief.
My inconvenient but uncontrollable infatuation with Common Lisp also seems to be pulling the strings. I should study a real language which is not 60 years old, like Rust or something.
What attracts me about Common Lisp is the liberated and pragmatic way in which it enables one to mix functional, object-oriented and procedural programming, and, perhaps most importantly, how it was designed from the ground up for iterative and interactive programming.
Tweak the defun, eval the defun, watch the system adapt. This is what I always imagined programming would be like. Except for the Lisps, it really turned out perhaps a bit more boring than it really needs to be.
interleave-mode for working through PDF books
For the fellow Emacs users, I also wanted to mention the utility of interleave-mode for working through such a programming book, if you can find it in PDF format.
In my Emacs I have the PDF on the left, and my interleave-mode-linked orgfile on the right. On any page of the PDF I hit the i-button to add a note in the orgfile, where I can of course insert and execute live code snippets.
The sections in the orgfile remain linked to the correct pages of the PDF.
For programming books this is an amazing combination. For studying other books, having your orgfile notes linked will probably also be quite useful.
On the topic of note-taking: This past week, on Friday June 15 (I made a note of that), I was able to help a colleague solve a technical problem by searching for and retrieving an org-file note, including detailed configuration settings, that I made on May 13, 2014.
Ether as currency
Although I acquired a small amount of the Ether cryptocurrency for the first time in July of 2016, I’ve never had the opportunity to actually transact with it.
Up to now, it has functioned solely as a pretty volatile store of value.
On Saturday, I used some ether for the first time to straight-up buy something on the internet, which was a pretty exciting but in practice an uneventful procedure, fortunately.
The vendor used a payment processor which presented me with an address and corresponding QR code. I scanned the QR code with the relevant mobile app (Luno in this case), paid the requested amount, and waited for a few minutes for it to be multiply confirmed by the blockchain. The sending fee was about 0.04% of the transaction.
Barefoot-style running update
On Sunday I went for a long(ish) run, bringing my total on the Luna sandals to just over 200km.
My feet, ankles and calves are much stronger than they used to be, but the barefoot conversion is clearly still has some ways to go. I have to take at the very least two rest days (instead of one) between runs to give my feet some extra time to recover.
What I have recently started doing, is that instead of trying to micro-manage my form (put your foot down like this, bend your ankle like that, let your achilles tendon shoot back like this, and so on), I am following the advice of some new random person on reddit/r/BarefootRunning who gave the advice, often echoed elsewhere by barefoot-runners, to try and maintain a cadence (steps-per-minute) of at least 180.
That sounds pretty high for a normal person like me, but it turns out that when I do that, and I try at the same time to run as silently as possible (I often just APPEAR right beside someone, hehe), my legs and feet figure out their elastic bio-kinematics all by themselves.
As yet another random reddit expert (I wish I could find the post) quipped:
You can’t overthink proprioception.
(that’s a running nerd joke)
I know Kung Fu
Do you remember this scene from The Matrix (1999)?
The other day at the Old People Reunion, friend T. Monster, a highly capable pragmatist but also backyard theoretician, talked about how often it happened these days that you had to deal with some DIY issue, tapped or spoke the question into youtube, watched a video or two, and then fixed the issue like a pro.
This, along with my recent pseudo-expert repair of a number of stripped cabinet hinge screw holes with tooth picks and cold glue (this works, I kid you not), made me think that, although The Matrix version was perhaps far more spectacular, we in fact now find ourselves in a real, shared reality where a large subset of skills can be acquired a la carte.
Some may take longer than a few minutes, but it still is pretty amazing how far YouTube has managed to democratise so many different forms of modern Kung Fu.
PyTorch (my favourite deep learning tool by far) and Caffe are merging. This is amazing because while PyTorch is some of the most dynamic and flexible deep learning software you can pay with, Caffe runs on your telephone. You’ll be able to fine-tune your deep network on PyTorch, and then click a button (or type some obscure incantation, probably) to get that network in a highly efficient compiled form on any embedded device or scaled up to run on your cloud. Although apparently not possible, this really does feel like free lunch!
In Weekly Non Nerd News (WNNN), an old friend came to visit all the way from Omaruru, an occasion which served as the happy excuse for a mini-reunion at my place.
It’s strange to think that some of the university stories we recounted are now more than 20 years ago.
In that time, humans go from birth to fully formed adult human beings with opinions, and relationships, and stories of their own.
Thank you Omaruru Friend for bringing us all back together again.
The flu and/or cold virus that managed to enter through the cracks left by my immune system being under pressure from above-mentioned celebrations caused a week-long period of man flu, a period that I was only able to conclude today with a lovely winter morning run.
As one does, I continued searching until I found evidence confirming my belief that running with some remaining flu symptoms would not be irresponsible.
Thanks to the internet, and lab mice, I had confidence that I was probably not going to die due to my run.
Confirmation bias aside, or not, based on more reading it looks like moderate exercise is not the worst thing you can do during or after cold or flu. The secret is to keep it relaxed, and to keep a very close eye on your heart and your temperature.
It can get preachy at times, but the core message is really good, and especially timeous in this era of hyper distraction.
Below is Leonard’s message, sent at least once through the old washing machine that is my brain.
Learning is a lifelong process.
More specifically, the path to mastery of any worthwhile skill usually consists of short bursts of novelty exhilaration (you often start with one of these) followed by long and seemingly boring plateaux of never-ending practice with no kick.
No kick means that many learners decide to quit, and switch to something exciting, only to repeat their cycle of not-mastery there.
If you are able to make peace with the plateaux, and keep on trudging along, you are on the path to mastery.
In a decidedly Buddhist twist, being on the path to mastery means that you are in fact an eternal learner, and you will never become a master.
The author of the book is an Aikido sensei. I especially loved the story he told of the beginners and the senseis.
When beginners practise, they ask the sensei for a new move to practice every few minutes. They try to get through as many moves as possible during their 2 hour training session.
When senseis practise, they practise the same basic move over and over for many hours, losing themselves in the universe of that single apparently straight-forward form.
The Four Truths express the basic orientation of Buddhism: we crave and cling to impermanent states and things, which is dukkha, “incapable of satisfying” and painful. This keeps us caught in saṃsāra, the endless cycle of repeated rebirth, dukkha and dying again. But there is a way to liberation from this endless cycle to the state of nirvana, namely following the Noble Eightfold Path.
… and then later:
…. and finally passing through the gate of wishlessness (apranihita) – realizing that nirvana is the state of not even wishing for nirvana.
To the contrary, it seems people even increased their usage, post-scandal. FB share price is back where it used to be, and as an interesting data point, Deutsche Bank reports that their FB-based advertising reach was unaffected by the removable of more than 500 million fake facebook accounts.
Should we deduce anything more from this than the usual 1. humans, even outraged ones, have really short memories and/or 2. most people don’t have the energy to resist, or the presence of mind to avoid, the deeply-seated social desires that are being exploited to varying degrees by the large social networks?
My personal strategy for a while now has been to make liberal use of the unfollow and the mute functions. It’s far from perfect, but with this it is possible to reduce drastically the stream of incoming information, and to make sure that what does come through has to do with friends that you have made the deliberate choice to connect with actively.
Shorter focus blocks work better
In my eternal and sometimes decidedly Sysiphean quest for more and better work focus, I recently started using Focus App (see Pro Tip #2 in WHV #126).
In short, when you activate the app’s focus mode, it kills off and then blocks anything that is remotely fun or even slightly distracting on your computer. This includes websites and applications.
In the beginning, I was enjoying longer (1 to 2 hour) focus blocks.
However, more recently I started noticing a certain recalcitrance in my focus-starting hand.
Especially late in the afternoons (prefrontal cortex GONE by then, remember?) the knowledge of that mega-block of mental exertion would result in highly undesirable procrastinatory behaviour. (Big words for “oh, I can probably fit in one more /r/emacs post!”)
Anyways, it turns out there’s another really good reason that pomodori are only 25 minutes long.
It’s much easier to start a 25 minute block of no-fun-focus, and then get stuck in the zone, than it is to start what your brain expects to be a multi-hour block of mental exertion.
Friend PK introduced me to the tiny rider trying to control the giant elephant as a metaphor for the conscious and unconscious mind (this is from the book The Happiness Hypothesis). The shorter focus block idea seems like it could be filed away under “tricks to control your stubborn elephant”.
But, along the way, I wrote a text editor, Emacs. The interesting idea about Emacs was that it had a programming language, and the user’s editing commands would be written in that interpreted programming language, so that you could load new commands into your editor while you were editing. You could edit the programs you were using and then go on editing with them. So, we had a system that was useful for things other than programming, and yet you could program it while you were using it. I don’t know if it was the first one of those, but it certainly was the first editor like that.
When an experienced user interacts with Emacs, they change it, and it changes them.
The opposite of instant gratification
On Friday I started on a slightly longer than usual run.
It usually takes a kilometre or two before all of my running subsystems come on line, and I find my rhythm.
Not this time.
The acclimatisation discomfort in my ankles and calves didn’t fade away as it usually does. My breathing and running cadence stubbornly refused to lock on to their usual correct settings.
My legs felt tired.
It really felt like I was not supposed to be running at all, but I pressed on because at that point there was not much else I could do.
At the turn-around point (the bridge at the entrance to Vergelegen, with beautiful trees all around) I decided to try out some youtube advice from the evening before and do a few deep squats to freshen up my legs.
I started running back on legs and calves and feet which suddenly felt like they had all been replaced with brand-new rested versions of their 2-minute-ago return-to-manufacturer selves.
The rest of the run was of the floating over the ground how-is-this-possible my-smile-might-break-my-head variety.
I don’t think the squats did it. That was just a sort of thought-process punctuation which somehow distracted the mind-elephant for long enough to get me running again.
Anyways, as I was floating home, I could not help but see the whole occurrence as a fairly physical but in this case fortunately quite compact reminder that some of the most worthwhile experiences simply require perseverance with initially no gratification in sight.
Life is a marathon
… so sleep well, eat as healthily as you can, exercise, and try not to stress too much.