@gvrooyen@c.im avatar

gvrooyen

@gvrooyen@c.im

Founder of octoco.ltd, custostech.com & fanfire.ai. Innovation management & tech entrepreneurship as my day job, with software engineering & signal theory as guilty delights. Blockchain pragmatist. Extra-Ordinary Prof @ Stellenbosch University for fun & !profit. World's Best Dad by constituency vote. Avid trail runner. Reader.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

gvrooyen, to Travel
@gvrooyen@c.im avatar

I only recently upgraded to a phone new enough to support e-SIMs, but wow, it does make a lot easier.

Usually when arriving in a new country I'd scramble around to find a physical prepaid SIM to have data access. This can be tricky in some countries, and I'd be unable to whatsapp or Uber until I got it sorted.

On my recent trip to Tanzania I bought an e-SIM before the journey (I used airalo.com with which I was very happy). I paid online, scanned a QR code to install the e-SIM, and when I landed in Dar Es Salaam I had mobile data. Also, since this was a second SIM on my iPhone, my primary SIM continued to receive my SMSs through my primary provider. Data top-up was also an easy online purchase.

gvrooyen, to random
@gvrooyen@c.im avatar
  • Travelling for a few weeks, so #lifelog posts may be less frequent.
  • First day of proper leave without startup or pandemic or business angst in... at least 6 or 7 years? I slept in this morning and spent the day preparing for the trip in a haze. The relaxation washing over me is almost debilitating. I had a vague notion that I was stretched, but am only realising how much now.
  • The travel hiccups (18h flight delay, baggage misplaced) seem almost immaterial.
gvrooyen, to random
@gvrooyen@c.im avatar
  • Last workday of the year, PR review and merge, couple of meetings, email and admin.
  • A bit of time on the programming side project. I spent some more useful time on how to properly write docker files, and how they relate to GitHub actions. Routine stuff for many of my colleagues, but simply not something I got around to over the last few years – good to catch up.
  • Sat back a bit and reflected about how I spend my work time. A 40h work week remains a decent baseline which allows for bursts beyond that when you need to get something across the line, as well as the occasional day off. Based on my time spent on projects over the past year I set up a time budget for Jan-Feb, and plan to block off these times for focus on specific times in the new year.
  • Took the 14yo out for a short run on one of my regular trails. Boy, did he improve over the past few months. He won. I set 3 PRs on Strava trying to keep up 😆
  • Will go running with the lad more often, I think.
  • Cooled down by playing "For the King" with said lad in local co-op. Much fun. Decided to buy it for R32 (!!) on the Steam special for some remote time together when I travel.
  • Set up a Xiaomi Smart Band for the 12yo, which turned out to be somewhat tougher than anticipated. Apparently it's not a "Mi Fit" device anymore, but a device supported by the "Zepp Life" app on iPhone. It's a pretty little thing once you get it working, but caveat emptor in an age where manufacturers come and go.
  • I'm on holiday now. I anticipate those discomfortable few days to allow relaxation to creep in again. It's been too little time off for way too long 🏝️

#lifelog

regehr, to random
@regehr@mastodon.social avatar

very pleased with herself after locating the clean clothes

gvrooyen,
@gvrooyen@c.im avatar

@gwozniak @regehr As second reviewer I merely expressed concern that she chose to experiment on such a clean data sample. Why does she seem so displeased with me?

gvrooyen, to books
@gvrooyen@c.im avatar

Fred has nagged me to try out the series by @DennisETaylor for about 5 years. Fred is a great friend and business partner, but I may have been slightly dismissive of his book choices for too long (he listens to hip-hop and I'm more of a hard rock and metal guy; I might have generalized that). This year equally great friend and former colleague Mw also insisted I read it, so I gave in (I think Mw listens to everything, in case this data point matters).

O boy, is it good. I binged the audiobooks on Audible. They are narrated by Ray Porter, who also did the brilliant narration of Andy Weir's "Project Hail Mary". There's enough of an overlap in the pace, science, and deliciously geeky wit between these books that I've considered making a personal "Books Narrated by Ray Porter" reading list.

As sci-fi the series strikes a delightful balance between plausible rigor and a nerdy wackiness. A large part of the book's humor involves geek pop culture references from the past ~70 years, and perfect delivery of what can sometimes only be classified as Grade A dad jokes. The books are fascinating, fast-paced, and funny. I can strongly recommend this to anyone who enjoys light-hearted "adjacent possible" sci-fi (again, Andy Weir may be a good point of reference).

gvrooyen, to random
@gvrooyen@c.im avatar
  • Since I'll be travelling soon, I decided to get a Covid booster shot yesterday. I had a nasty case back in 2020, and since then my body goes DEFCON 1 when it sees something that looks like a spike protein. Woke up with fever and shivers at 2am and felt pretty bleh the rest of the day 🤒
  • Weekly 7am call with the Japanese client felt bleary 🥴
  • I recently started using #OCaml's utop REPL as my desktop calculator (I used ipython prior to my OCamlian epiphany). What I like is that I can create these little convenience functions and operators that make quick calculations easier. For example, when doing timesheet arithmetic I often want to work with times in hh:mm format. Ezpz! let ( /: ) h m = (Float.of_int h) +. ((Float.of_int m) /. 60.);; and now I can just do (19. * 8.) - 32/:20 - 4/:12 - 6/:46 - 16.;;
  • Tempted to do a fork of utop where Enter maps to ";;\n" and Shift-Enter is the plain "\n".
  • My trusty Garmin Instinct watch suddenly died, probably from water exposure in shallow ocean over the weekend. It has a 100m water resistance rating, but I suspect a seal somewhere had perished over time. I immediately replaced it with the Instinct 2; super amped to go running as soon as this stupid booster shot wears off.
  • Docker has been one of these tools where I've always just got along with the minimum knowledge to get something running. Today I invested some time to actually learn the principles and syntax.

#lifelog

cpbotha, to random
@cpbotha@emacs.ch avatar

Charl's log, Earth date Monday 2023-12-18:

Please see https://cpbotha.net/2023/12/18/daily-head-voices-on-monday-2023-12-18/

#lifelog

gvrooyen,
@gvrooyen@c.im avatar

@cpbotha So fewer primary posts on here? Ah well, I've long been a Voices reader and RSS/Atom is the original fediverse

gvrooyen, (edited ) to books
@gvrooyen@c.im avatar

My most profound read of the year was "The Making of the Atomic Bomb" by Richard Rhodes. Although I rarely check in on that other platform nowadays, I happened to see @mrnugget wax lyrical about the book. Since he personally recommended most of my other best reads of 2023 I knew I had to dig into it.

Occasionally a book, play, or film just reaches into your worldview and imposes a shift. This book did that for me; one of very few.

Atomic Bomb is not a new book – in two weeks it will be 38 years old. Nor is it a light read: The paperback weighs in at 896 pages. I read the excellent audiobook during runs and travels. The books are somewhat hard to get hold of.

"The Making of the Atomic Bomb" might be the greatest literary gesamtkunstwerk I have read. It's a historical work that reads like a novel. It's a collection of biographies that artfully dramatizes the subjects' lives. It's a book about science that makes much of nuclear physics wonderfully accessible. It's the best exposition of 20th century history I've found, including the Cold War. It presents political science in an accessible way. Towards the end, it confronts the reader with the terrible ethics of our capability, but without deigning to prescribe. Yet most of all, it is a beautifully philosophical work, and Rhodes has this Beethovian sense of pace where he can be describing an aspect of history in a scholarly tone for a while and then suddenly modulate into the philosophy of human nature.

Just picking a random example, here is Rhodes casually describing the young Niels Bohr's relationship with his brother, Harald:

"In my whole youth,' Bohr reminisced, my brother played a very large part ... I had very much to do with my brother. He was in all respects more clever than I.' Harald in turn told whoever asked that he was merely an ordinary person and his brother pure gold, and seems to have meant it."

In the very next paragraph, with a perfect sense of pace, Rhodes suddenly pulls the relaxed reader into philosophy, to segue into a scientific concept:

"Speech is a clumsiness and writing an impoverishment. Not language, but the surface of the body is the child's first map of the world, undifferentiated between subject and object, coextensive with the world it maps until awakening consciousness divides it off. Niels Bohr liked to show how a stick used as a probe – a blind man's cane, for example – became an extension of the arm."

From there the text flows from biography to science again.

I had read John Hersey's "Hiroshima" many years ago, but the latter part of "The Making of the Atomic Bomb" brought the reality home again much more deeply. I am left with that concern that as a society we are caught in Kundera's unbearable lightness of being, where the bloody events of the late 40s have turned into "mere words, theories, and discussions, have become lighter than feathers, frightening no one." There is an infinite difference between a Hiroshima that occurs only once in history, and a bombing that eternally returns.

Read this book.

gvrooyen, to random
@gvrooyen@c.im avatar
gvrooyen, to random
@gvrooyen@c.im avatar

20 years ago today, A & I tied the knot in a beautiful ceremony in #Franschhoek. It was a wonderful "kuier" with friends and family, and we've often looked back to the best celebration we've ever experienced.

Today, we met with family for a new celebration at the old #Vergenoegd estate. We enjoyed a slow lunch over a long table in the shade below centuries-old oak trees with amazing food and wine. We were blessed to have so many of our loved ones present (and dearly missed my dad-in-law who passed away several years ago).

And it was such a wonder to have the new guests – our two young teenagers; their wonderful cousin – that had not yet graced our lives in 2003. What a privilege to live this life ❤️

#lifelog

gvrooyen,
@gvrooyen@c.im avatar

@cpbotha Thank you, Charl!

gvrooyen, to books
@gvrooyen@c.im avatar

2023 was a good year.

Big shoutout to @mrnugget who recommended the best books I've read this year. #1 is the absolutely profound "The Making of the Atomic Bomb" by Richard Rhodes. Close follow-up is the incredible historical non-fiction novels by David Grann, and Krakauer's riviting first-person account of disaster on Everest. King's "11.22.63" was also a great read.

@last recommended the best professional development book I read this year, "So Good They Can't Ignore You". It's a book I now recommend to all my early-career friends, but it deeply affected my thinking about mid-career choices as well.

Fred and Mw eventually twisted my arm to read the Bobiverse series, which turned out to be the most fun you can have in SciFi and is an absolute nerdish delight. Highly recommended. Fred also recommended Goldratt's "The Goal" which is great for analysing productivity in an organisation, but REALLY upped my game.

I hope to post a bit more about some of these before I get quiet over the holidays. Thanks to everyone who made great recommendations 📚

gvrooyen,
@gvrooyen@c.im avatar

@andrewwade I read the audiobook (it's difficult to get hold of, though) and just let it flow over me. The details don't always matter; I loved the book for the way in which Rhodes could just suddenly - mid-exposition - dip into the most profound analysis or philosophy. I feel I really understand much of modern history and society better after finishing it.

lapcatsoftware, to random
@lapcatsoftware@mastodon.social avatar

I think I understand now why Hollywood produces endless sequels, prequels, remakes, reboots, spinoffs:

The same reason YouTube recommends 100 videos of the same thing you just watched.

The same reason Amazon recommends buying the same thing you just bought, despite the fact that you no longer need it.

This is what you get from analytics and algorithms, from being “data driven”: mindless repetition.

gvrooyen,
@gvrooyen@c.im avatar

@lapcatsoftware I think the faulty assumption here is that the problem is with the algorithms

mrnugget, to random
@mrnugget@mastodon.social avatar

Some personal news: this is my last week at Sourcegraph.

• 4.5yrs
• 1604 PRs
• 4 teams
• joined at ~20 people & saw us grow to ~300
• meetups in SF, San Diego, Berlin, Mexico, Amsterdam, Munich, ...
• reported to EMs, Heads of Eng, CEO

Now it's time for something new 🙂

I will forever look back at my time at Sourcegraph as life-changing in the best possible way and consider myself one of the luckiest bastards I know because Quinn and Beyang hired me.

gvrooyen,
@gvrooyen@c.im avatar

@mrnugget Congratulations on an incredible journey, Thorsten – and for the courage to embark on the next one. Thank you for the generosity with which you chronicle what you do and learn. It's an inspiration, and I really look forward to hear about the new adventures.

Enjoy the rest break! I hope it's a well-deserved chance to reflect and recharge.

gvrooyen, to random
@gvrooyen@c.im avatar
  • A wonderfully open day without any meetings in the morning. I spent some good time tinkering with the #OCaml full-stack web framework that I mentioned before, and most of the rest of the morning in code review for one of our larger projects.
  • Wanted to continue focusing, but had already bumped my weekly meeting with my assistant yesterday, so had to take it. 30 minutes so well spent, just helping to sort distractions out.
  • Secret Santa buffet at the office! Fun and some delicious food, but this would be a great finalé to the December corporate socials in the Cape, tyvm.
  • I spent a fair amount of time recently in Python with proper type annotations and Pydantic checks. I'm increasingly unsure about how to feel about languages that are so general-purpose that anything from duck typing to pedantic type specs are supported (often through extensions rather than the language itself).
  • Kids are on their summer holiday, so I'll have to pull back a bit longer days in the study. One more week before I can also take my own proper break.
  • Missing contributions by @cpbotha, who got me into this logging thing 🙂 #troll

#lifelog

gvrooyen, to rust
@gvrooyen@c.im avatar
  • Buzzing day in the office. has a hybrid work model, but for some or other reason Tuesdays have become the "everyone rocks up" day, so much so that we have to allocate a board room for extra hot-seat working space. I'm starting to enjoy the balance between office days and quiet working days in my study. It's a given that my billable client hours will tank on a Tuesday, but it's also where lots of the tacit knowledge transfer and hands-on problem solving happens. Also, spending in-person time with really cool and clever people.
  • My happy hacks in in have been diverted by another project in this language that I really like. Bandwidth for side pursuits is limited, so I have to be really picky.
  • In a couple of work projects we're dealing with architectures where third parties (sometimes the clients themselves) have made dubious database choices. It reminded me of a section (3.8.1) in Zero to Production in which says: "If you are uncertain about your persistence requirements, use a relational database. If you have no reason to expect massive scale, use . ... it is much easier to design yourself into a corner by using a specialised data storage solution when you still do not have a clear picture of the data access patterns used by your application."
  • Senior guys from a potential overseas client were in the area and came for a tour of the office and lab. First time we met outside vid calls. It was a fun meeting! The real human connection makes such a difference.
  • Watched half of Season 2 of the really lovely and silly "Fallout: Nuka Break" fan series with the 12yo (a huge [HUGE] fan). Despite having to endure the "did you know Luck / Claustrophobia / Lead Belly / Fat Man / Whatever is a perk/handicap/weapon?" thing EVERY 2 MINUTES, both seasons have been really good fun so far. This really sets a new bar for fan series for me.

gvrooyen, to fallout
@gvrooyen@c.im avatar
  • Tinkered a bit with #AdventOfCode, but @last distracted me with that much more interesting puzzle I mentioned before (an opinionated full-stack webdev framework in #OCaml). Work didn't allow me much tinker time today, but I hope I can poke around with this much more.
  • Had a good conversation with people who don't get paid by us to figure out team salaries and bonuses on our new independent remuneration committee. Thankful to have friends working at "open companies" that have really helped me calibrate my opinions about this.
  • Late afternoon glass of wine at the beautiful Hidden Valley with a good friend, talking about careers, software, AI, relationships, business, and people we love.
  • Watched a few silly and utterly enjoyable #Fallout fan series episodes with the tall spawn.
  • Wish I had more time in the day to just submerge myself in coding. Probably the biggest thing I need to start fixing.

#lifelog

gvrooyen, to random
@gvrooyen@c.im avatar

So here's a nice example of why I LOVE expect tests in , using today's puzzle as example (no spoilers).

The test input describes a map of pipe connections, with unconnected pipes all over the place, and a starting point (Fig 1).

I'd like to visualize the input, and check that I've read (or parsed, or manipulated) fairly complex input correctly. I can quickly slap together a pretty printer for the input (Fig 2).

My test code initially "expects" blank output from the pretty printer (Fig 3). It shows what it actually got; I can throw my human eye over it to confirm that, yes, it does indeed look correct. I run dune promote and...

My actual test code is automatically fixed to expect this output (Fig 4). This also nicely documents expected output of tests for future me and other people.

An OCaml function mapping 7-bit ASCII characters to their high-level ASCII equivalents.
The OCaml
Running

gvrooyen,
@gvrooyen@c.im avatar

@cpbotha I'm sorry, I got hooked on the original Rogue when I was 12 and those extended chars hold a special place in my heart ❤️

gvrooyen, to python
@gvrooyen@c.im avatar
  • Yesterday decided that I should probably check out #OCaml's regular expression syntax. It does make the #AdventOfCode input line parsing a lot less verbose, if more cryptic ("and now you have two problems", as the joke goes).
  • I really love the fact that OCaml has a toplevel REPL where you can interactively experiment (e.g. figuring out said regexes) like you do in #Python or #R. To quote the lovely first line from the relevant docs: "An OCaml toplevel is a chat between the user and OCaml".
  • Spent almost too much time hacking around; had to make my Saturday trail run a bit shorter than usual. Sunny but windy in the mountain. Current audiobook: "God Emperor of Dune" by Frank Herbert which I last read in high school.
  • Attended my bro-in-law's #SchoolOfRock band concert, an open-air show at Simonsvlei. He warned us that it was going to be "a school concert but with adults". That wasn't too inaccurate, but school concerts with adults still have craft beer in plastic cups and cheering and vibe – it was super enjoyable. BiL has become quite the drummer in just 3 years, and their cover of Muse's Resistance was the highlight.
  • Today I tackled some of my outstanding #AoC2023 puzzles. Had to smile when I saw Day 10, which is a twist on a classic (and favourite) maze-solving puzzle in competitive coding.
  • Asked the 14yo to handle the entire #braai for lunch, and he took control and eschewed advice like only a teenager who just finished their first year of high school can do. It turned out delicious.

#lifelog

flo1804, to rust

I have still not finished part 1 of day 7. Probably because I am not so good in

gvrooyen,
@gvrooyen@c.im avatar

@flo1804 It always is. It depends on what you want to achieve, I think. If you want to really hone your skills in solving hard problems, pick the tool in which you're most fluent. On the other hand, if you want to get better at a new tool, pick hard problems but don't be too hard on yourself if you fail many times.

prma, to rust
@prma@fosstodon.org avatar

Thinking of diving back into Ocaml – last time, I was chasing something more "pure" than Rust. Now, I'm on the lookout for a language with a speedy prototyping cycle and a Rust-like vibe. Does that click for you?

gvrooyen, (edited )
@gvrooyen@c.im avatar

@prma That clicks for me. I've been diving into OCaml over the past few months, and really enjoying it. I'm doing this year's in OCaml and looking at incorporating it into a couple of other projects.

Some impressions so far:

  • The core language is pretty tight. Much of what looks like syntax (such as the |> or <- operators) are simply defined in libraries through the core function definition syntax.
  • There are two main "dialects" of note: the Stdlib library that is available by default, and a wholesale replacement for Stdlib by Jane Street, Core (and its lighter subset, Base). It can be confusing at first when looking at documentation or examples that would work with the one but not with the other.
  • OCaml has all the type safety of a language like Rust, but the incredibly powerful type inference means that you seldom need to annotate variables or functions with their type. This can lead to really compact, readable code that almost looks like pseudocode.
  • This compactness, combined with a really mature toolchain (dune, ocamllsp, utop) leads to a very speedy feedback loop when prototyping. I find myself testing out ideas in the utop REPL before coding in my LSP-enabled editor. While you write a piece of code, the LSP's type checker constantly gives feedback on correctness. I find the "click" when the type checker is suddenly happy delightful. More often than not, once I run the code it just works.
  • "Expect tests" are a wonderful prototyping tool that allow you to "eyeball" output until it looks right, and then capture it as a formal regression test – and as in-test documentation of the expected output for a given test case. I love it.
  • In terms of "dialect", my personal preference is for the Jane Street libraries, which have extensive functionality and are battle-tested in a very demanding production environment.

The biggest downside to learning vs. is that it's hard to find and filter the right information. The ML languages have been around for decades, and advice from 15 years ago might not apply to your current libraries. There is no equivalent to the "Rust Book" that gives you the definitive, comprehensive overview of the language. The closest is "Real-World OCaml" (dev.realworldocaml.org) which is specific to the Jane Street libraries. I can highly recommend it.

gvrooyen,
@gvrooyen@c.im avatar

@dmbaturin @prma This looks great! I will most definitely take a deeper look 👏

gvrooyen,
@gvrooyen@c.im avatar

@dmbaturin Ohhh you're the "What I wish I knew when learning OCaml" guy! I loved that FAQ; it really helped me figure out aspects of the language that weren't always clear from the official docs. Thank you for writing that 🙏

  • All
  • Subscribed
  • Moderated
  • Favorites
  • megavids
  • thenastyranch
  • rosin
  • GTA5RPClips
  • osvaldo12
  • love
  • Youngstown
  • slotface
  • khanakhh
  • everett
  • kavyap
  • mdbf
  • DreamBathrooms
  • ngwrru68w68
  • provamag3
  • magazineikmin
  • InstantRegret
  • normalnudes
  • tacticalgear
  • cubers
  • ethstaker
  • modclub
  • cisconetworking
  • Durango
  • anitta
  • Leos
  • tester
  • JUstTest
  • All magazines