2019-1 Readings of the week

If you know me, you'll know I have.a very extensive reading list. I keep it in Pocket, and is part of my to do stored in Things3. It used to be very large (hovering around 230 items since August) but during Christmas it got out of control, reaching almost 300 items. That was too much, and I set myself a goal for 2019 to keep it trimmed and sweet. And indeed, since the beginning of the year I have read or canceled 171 articles (122 in the past week, 106 of which were read). That's a decently sized book!

To help me in this goal, I'll (hopefully) be writing a weekly post about what interesting stuff I have read the past week. Beware, this week may be a bit larger than usual, since I wanted to bring the numbers down as fast as possible.

NOTE: The themes are varied. Software/data engineering, drawing, writing. Expect a similar wide range in the future as well.

The Nature of Infinity, and Beyond – Cantor’s Paradise

A short tour through the life of Georg Cantor and his quest for proving the continuum hypothesis. In the end, he was vindicated.

Statistical rule of three

What is a decent estimate of something that hasn't happened yet? Find the answer here.

Apache Arrow: use of jemalloc

A short technical post detailing why Arrow moved to jemalloc for memory allocation.

Subpixel Text Encoding

This is... unexpected. A font that is 1 pixel wide.

Solving murder with Prolog

I have always been a fan of Prolog, and this is a fun and understandable example if you have never used it.

What Parkour Classes Teach Older People About Falling

Interesting. I'm still young, but I'll keep this in mind for the future.

Implementing VisiCalc

The detailed story about how VisiCalc (the first spreadsheet) was written.

The military secret to falling asleep in two minutes

I was actually doing something similar since I was like 12. It might be a stretch to say 2 minutes, but works.

Index 1,600,000,000 Keys with Automata and Rust

Super interesting (and long) post about how FSA and FST are used for fast search in Rust (I'm a bit into Rust lately). Also, BurntSushi's (Andrew Gallant, the author) cat is called Cauchy, something I appreciate as my cat is named Fatou.

How to Draw from Imagination: Beyond References

An excellent piece on gesture drawing and improving your technique.

Anatomy of a Scala quirk

All languages have their WAT, it's harder to find them in Scala though.

Chaotic attractor reconstruction

An easy example in Python of Takens' embedding theorem

Hello, declarative world

An exploration between imperative and functional, and how declarative fits the landscape

Python with Context Managers

Although I have written tons of Python, I never took the time to either write or understand how context managers work. This one was good.

Raymond Chandler's Ten Commandments For the Detective Novel

You never know when you may write a detective novel. Ruben and the case of the dead executor

Seven steps to 100x faster

An optimisation tour of a piece of code written in Go, from data structures to allocation pressure.

Writing a Faster Jsonnet Compiler

A semi-technical post by Databricks about Jsonnet and why they wrote their own compiler. Serves as an introduction to Jsonnet ("compilable JSON") as well.


Monoid font and Poet emacs theme Today I switched from solarized dark and Fira Code Pro to the above. It looks interesting

Written by Ruben Berenguel


2018: Year in Review

Note some links below are Amazon affiliate links. Buy at your own risk 🤣


During the first half of this year I have been leading a migration to Spark of several systems, one relatively straightforward and the other based on GraphFrames and a graph with ~1 billion nodes. The results so far seem excellent. The second half of the year has been mostly GDPR compliance improvements (I've read the whole law... twice!), looking for additional large-scale data providers and preparing our systems for global scale (around 6x event data capabilities). Has been fun and challenging.


  • In February I moved from East Finchley to Chiswick. This meant I became a Friend of Kew Gardens, and have been there almost every weekend I've been in London. And you could catch me a bit earlier at The Coffee Traveller, enjoying a latte with a carrot cake muffin.

  • In February, we spent a few days in Puigcerdà for my birthday. Not as nice as we expected. The food was good, though (as expected).
  • In March we visited Edimburg again, Laia was attending EdiYarn Festival. I spent the days at Waterstones, eating cupcakes and getting my reading list under control.
  • In May I attended AWS Summit in London. Was ok-ish. Lack of coffee made us grumpy.
  • In June I attended SoCraTesUK 2018 in Dorking, together with Carlos. I had an excellent time there, and will repeat next year if possible. We presented together Welcome to Apache Spark. I also learnt some Cobol.

  • At the end of June we visited Bath for Laia's birthday. Nice town, but a bit packed with tourists. We were lucky England was playing some soccer match and could visit the Roman baths without people.
  • In July we published the first podcast of PyBCN (in Spanish). It's not monthly, next one was in... December 😆
  • In August we roasted a bit under the heat wave hitting the UK by visiting Mayfield Lavender field.
  • In September I attended Scala Italy in Florence, where I got the opportunity to visit Osteria del Cinghiale Bianco again. Excellent.

  • In October we took a few days off so we could disconnect, and spent them on Hay-on-Wye, as some tradition we follow says. We bought a bunch of books (I think there are no books by Roger Zelazny left there) and I did nothing. Bliss. Also, best scones ever.
  • In November I helped a bit from afar with the organisation of PyDay 2018. I couldn't attend, but looked excellent. We also told the world PyBCN is now an organisation you can become a member of.
  • In December, I attended Scala Exchange for the third time, and gave a lightning talk about TLA+ (Formally Verifying Complex Systems Using TLA+). Looks like people enjoyed my talk, and I had an excellent time as usual.

I made minor contributions (typos, small fixes) to several open source projects (Spark, typeshed, Monix, bloop,...), and also created a couple for my enjoyment: experimenting with Processing in Scala, sbt-ifttt and rb-zsh-theme.


This year I got a bit deeper into functional Scala, using GraphFrames and (in general) graph operations on big data. Got acquainted and got to hate Apache Airflow. I improved my knowledge of Akka (adding clustering and sharding to the "could do"). I also learned TLA+ and I plan to dive deeper into this rabbit hole the coming year. Started learning Rust. Made some minor stuff using HyperApp, and have been considering learning PureScript so I can write something close to "enjoyable" Javascript. I have also started playing the ukulele.


My top pick for the year is without any doubt Thinking in Systems: A Primer among books I read this year (19 books). Didn't read much non-fiction, and can't recommend any this year. According to Pocket (which I started using around June, after the GDPR fiasco of Instapaper) I read the equivalent to 18 books in blog posts since then.


This year I attended a couple concerts, both in London: Hayseed Dixie and Steve'n'Seagulls. I ended the year listening to a lot of covers by Leo Moracchioli and progressive metal/instrumental metal like Polyphia (which eventually become boring) and Intervals (which are better). All the links in this section are good renditions by each on Youtube


Main one is that Apple finally upgraded the MacBook Air so I can have one with 16GB of RAM, so I got that one as soon as I could. It also implied getting a USB C hub and I also got a power brick, both from Anker, so I could simplify my desktop cable tangles (also several USB A to C and USB C-C cables). In no particular order, I also got
  • An acoustic ukulele (soprano) and soon after, I got this electric travel ukulele (concert). To go with it I got an AmPlug (clean)
  • A mountie very early in the year. Sadly it doesn't work with my new Air, but with the old one it was a blast.
  • A Brydge keyboard for my iPad (heavy, but excellent)
  • A SoundCore Motion Q speaker from Anker. We're getting another one soon to get stereo. Excellent.
  • A Microsoft Wedge Mouse. I saw a picture and when I saw the price (just 17€) I got one. It works very well, and is very small. And works with a rechargeable AA battery, which I like as form factor.
  • A eInk display for my Raspberry Pi Zero W.
  • An hourglass. I love hourglasses. You can hear the sand from this one.
  • A cardholder. I already had a wallet by  Bellrow, and they deliver quality.
  • A Luna Display (so far a bit disappointed with the inability to map correctly my keyboard layout between Mac and iPad, so can't type at all, but the stream quality is very good)
  • A bunch of twisty puzzles. I didn't have any 2x2 and I really like it now. Also, magnetic 3x3 are excellent.

  • An excellent compact fountain pen from Kaweco (the liliput)
  • To go with it, I got a 0.7mm pencil from them as well (the classic brass)
  • I got also a 2mm titanium pencil from Kickstarter
  • A knucklebone from AroundSquare. Excellent for manipulating while thinking
  • A new spinning top, the Rain Drop from NWTops (to join last years' Yakima)
  • Several (1, 2, 3, 4) cardistry decks. The Mandala is incredibly gorgeous, the Edge is a design I love (I have the deck as well) and when I saw the trainers I knew I wanted a couple, just because.
And mugs!

Written by Ruben Berenguel


Things3 Weekly Review mode shortcut(s)


Initial setup (around 10-30 minutes depending on the amount of projects you have)

Create a note in Drafts (you can put it in the note archive) with some text, does’t matter what you write. I used the letter a when I created these shortcuts and the weekly workflow.

Get the document id from the draft (with the draft open, press the i Information button, select UUID and press copy) and set it up on all the shortcuts, as the UUID in the action Get Draft Contents.

Run the shortcut Update weekly review hash. This will open your draft and add a new line below it, should look similar to 54f74fbfb94518a527a36474dc904c25 (this is the text you introduced, hashed). Copy this and add it to the end of the Notes section of any project (or, if you fancy, task) you want to be included in your weekly review in Things3. You only need to do this long manual part once. Note that you can’t add areas to review (since this is based on notes and areas don’t have notes).

Finally, add your Things3 authorization token to the Weekly Review shortcut.


When the time to review arrives, run the shortcut Weekly Review. This will open Things3, searching for any project containing the hash in your draft. Switch to selection mode, select a bunch of projects (I usually do it in blocks of 5-10), press the 3 dots ➡️ Share ➡️ Copy link. Then press the Shortcuts “go back” link at the top left of your device to go back to Shortcuts.

The Weekly Review shortcut will now work with your clipboard contents to modify these projects. First, you’ll get a notification telling you how many projects are going to be reviewed. Once you press OK, the first one will open in Things3. Adjust the project as needed (edit the title, schedule it, add tasks...) and then delete the hash from the end of the notes section (you can do this later, but I find it easier at this point). Once finish, press the Shorcuts “go back” button to go back to Shortcuts. This will bring you back to Things3, but at the end of the notes section you will have a different hash. This is as what it should be 😃 Press the Shorcuts “go back” again, and this procedure will repeat for all the projects you “shared” in the previous step.

Step wise it looks like:
  1. Run Weekly Review
  2. Select some projects
  3. ... -> Share -> Copy link
  4. Go back to shortcuts via the quick link
  5. Say OK to the amount of projects to review
  6. Review the project
  7. Delete the hash from notes
  8. Go back to shortcuts
  9. You are back on Things. You can still edit the project if you have anything to add or do
  10. Go back to shortcuts
And here’s a video so you can see it in action:

Weekly Review Shortcut from Ruben Berenguel on Vimeo.

By deleting the previous hash you ensure already reviewed projects don’t show again if you exit the workflow from Shortcuts and need to run Weekly Review again. Also makes the review process start-stoppable, so you can do a few projects today, a few tomorrow and then “finish”.

In writing, it sounds slow, but it’s super fast in practice (weekly review took me around 2 hours before, now takes me around 30-45 minutes, the amount of projects I have has increased, not diminished). The main advantage I have is that I can specify which projects are to be reviewed and which not beforehand (for instance, if I decide a Someday/Maybe project should move to action state, I just add current week’s hash to its notes and is ready to be reviewed).

Once there are no projects left to review, run Update weekly review hash, which will set you up for next week’s review.

Keep in mind though you need to remember to add this week’s hash to any new project you create. Usually this just means open another project, copy the hash from it and add it to the notes section. Usually I do this as part of my daily inbox purge: I create new projects outside of any area (or more like, in the area I consider to be the project inbox), and when I clean my inboxes I add the hashes.
Written by Ruben Berenguel