<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Categories on Game B.</title><link>https://mstruwig.com/categories/</link><description>Recent content in Categories on Game B.</description><generator>Hugo</generator><language>en-US</language><atom:link href="https://mstruwig.com/categories/index.xml" rel="self" type="application/rss+xml"/><item><title>Jev and an LLM try to roll a fair die</title><link>https://mstruwig.com/posts/thoughts-on-jev/</link><pubDate>Thu, 17 Sep 2026 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/thoughts-on-jev/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/thoughts-on-jev/thoughts-on-jev-title.webp"&#10;&#9;&#9;&#9;alt="intro" width="100%"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;Generated using ChatGPT Images 2.5.&lt;/p&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;script&gt;&#10;function renderProbabilityChart(target, values) {&#10; document.addEventListener("DOMContentLoaded", function () {&#10; const dark = window.matchMedia("(prefers-color-scheme: dark)").matches;&#10; const foreground = dark ? "#bbbbbb" : "#313a3d";&#10; const background = dark ? "#202124" : "#ffffff";&#10; const grid = dark ? "#50575a" : "#d8dddf";&#10; const reference = dark ? "#8e9699" : "#7a8386";&#10; const series = [...new Set(values.map(value =&gt; value.series).filter(Boolean))];&#10; const grouped = series.length &gt; 1;&#10;&#10; const x = {&#10; field: "option",&#10; type: "ordinal",&#10; sort: null,&#10; title: null,&#10; axis: {labelAngle: 0, tickSize: 0, domain: false}&#10; };&#10; const y = {&#10; field: "probability",&#10; type: "quantitative",&#10; title: null,&#10; scale: {domain: [0, 1.08]},&#10; axis: {format: ".0%", values: [0, 0.5, 1], domain: false}&#10; };&#10; const barEncoding = {x: x, y: y};&#10; const labelEncoding = {&#10; x: {field: "option", type: "ordinal", sort: null},&#10; y: {field: "probability", type: "quantitative"},&#10; text: {field: "probability", type: "quantitative", format: ".0%"}&#10; };&#10;&#10; if (grouped) {&#10; barEncoding.xOffset = {field: "series"};&#10; barEncoding.color = {&#10; field: "series",&#10; type: "nominal",&#10; title: null,&#10; scale: {range: dark ? ["#00b1ed", "#4fc3a1"] : ["#36c9cc", "#287a68"]}&#10; };&#10; labelEncoding.xOffset = {field: "series"};&#10; }&#10;&#10; vegaEmbed(target, {&#10; $schema: "https://vega.github.io/schema/vega-lite/v6.json",&#10; width: "container",&#10; height: 120,&#10; background: null,&#10; data: {values: values},&#10; layer: [&#10; {&#10; mark: grouped ? {type: "bar"} : {type: "bar", color: dark ? "#00b1ed" : "#36c9cc"},&#10; encoding: barEncoding&#10; },&#10; {&#10; mark: {type: "rule", color: reference, strokeDash: [4, 4]},&#10; encoding: {y: {datum: 1 / 6}}&#10; },&#10; {&#10; mark: {&#10; type: "text",&#10; dy: -7,&#10; fill: background,&#10; stroke: background,&#10; strokeWidth: 3&#10; },&#10; encoding: labelEncoding&#10; },&#10; {&#10; mark: {type: "text", dy: -7, fill: foreground},&#10; encoding: labelEncoding&#10; },&#10; {&#10; data: {values: [{probability: 1 / 6, label: "fair die"}]},&#10; mark: {&#10; type: "text",&#10; align: "right",&#10; baseline: "bottom",&#10; dx: -4,&#10; dy: -4,&#10; color: reference,&#10; fontSize: 11&#10; },&#10; encoding: {&#10; x: {value: "width"},&#10; y: {field: "probability", type: "quantitative"},&#10; text: {field: "label"}&#10; }&#10; }&#10; ],&#10; config: {&#10; axis: {&#10; labelColor: foreground,&#10; labelFont: "sans-serif",&#10; labelFontSize: 12,&#10; gridColor: grid,&#10; gridOpacity: 0.7,&#10; tickColor: grid&#10; },&#10; legend: {&#10; labelColor: foreground,&#10; labelFont: "sans-serif",&#10; labelFontSize: 12,&#10; orient: "top",&#10; direction: "horizontal"&#10; },&#10; view: {stroke: null}&#10; }&#10; }, {actions: false, renderer: "svg"}).catch(console.error);&#10; });&#10;}&#10;&lt;/script&gt;&#10;&lt;div class="bigfirstletter"&gt;&#10;There's been a lot of hype and discussion alongside &lt;a href="https://typesafe.ai/"&gt;TypeSafe&lt;/a&gt;'s new model, &lt;a href="https://docs.typesafe.ai/models"&gt;Jev&lt;/a&gt;.&#10;&lt;/div&gt;&#10;&lt;p&gt;Jev is &lt;em&gt;interesting&lt;/em&gt;:&lt;/p&gt;</description></item><item><title>An intuition for abstraction</title><link>https://mstruwig.com/posts/abstraction/</link><pubDate>Mon, 15 Dec 2025 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/abstraction/</guid><description>&lt;picture class="invertable"&gt;&#10; &lt;img src="https://mstruwig.com/images/abstraction/abstraction.webp"&gt;&#10;&lt;/picture&gt;&#10;&lt;div class="bigfirstletter"&gt;&#10; Building an intuition around abstraction in code can take a little bit of&#10; practice and experience to learn. Let's make it easier.&#10;&lt;/div&gt;&#10;&lt;p&gt;In South Africa, you need to renew your driver&amp;rsquo;s license card every 5 years.&#10;This is a rite of passage &amp;ndash; it involves forms, long queues, confusion, chaos,&#10;and eventually a new license card.&lt;/p&gt;&#10;&lt;p&gt;Here&amp;rsquo;s how it works:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;You queue outside of the entrance.&lt;/li&gt;&#10;&lt;li&gt;At the front door there&amp;rsquo;s a person (usually a security guard that&amp;rsquo;s been there for years, and learned&#10;the pattern) who tells you which form to fill out, and which queue to&#10;stand in.&lt;/li&gt;&#10;&lt;li&gt;While waiting in the queue, you fill out your form.&lt;/li&gt;&#10;&lt;li&gt;Once it&amp;rsquo;s your turn, you walk into a room, hand in your form and have your&#10;eyes tested by a machine being handled by an eye test person&lt;span&#10;class="num"&gt;&lt;/span&gt;.&lt;span class="sidenote-num"&gt;I have no clue what to call&#10;this person that handles the eye test machine.&lt;/span&gt;&lt;/li&gt;&#10;&lt;li&gt;You then get placed in a different queue by a clerk, hand in your form and your eye exam results to the teller, pay, and leave.&lt;/li&gt;&#10;&lt;li&gt;A few weeks later, you get an SMS, and go collect your new driver&amp;rsquo;s license card.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="building-intuition"&gt;Building intuition&lt;/h2&gt;&#10;&lt;p&gt;Let&amp;rsquo;s notice a few things:&lt;/p&gt;</description></item><item><title>Working with LLMs</title><link>https://mstruwig.com/posts/working-with-llms/</link><pubDate>Sat, 08 Feb 2025 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/working-with-llms/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/working-with-llms/working-with-llms.webp" alt="intro image"&gt;&lt;/p&gt;&#10;&lt;div class="bigfirstletter"&gt;&#10;When you're an LLM engineer building a product with LLMs in an org with&#10;other engineers who don't, you get a lot of the following on Slack:&#10;&lt;/div&gt;&#10;&lt;p&gt;&lt;strong&gt;User&lt;/strong&gt;: &amp;ldquo;I tried &lt;code&gt;X&lt;/code&gt; and it didn&amp;rsquo;t work.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;You&lt;/strong&gt;: *investigates*&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;You&lt;/strong&gt;: &amp;ldquo;Nothing looks obviously wrong, it might&amp;rsquo;ve just been bad luck with&#10;the completion. Does it happen all the time? What happens if you re-run the&#10;query?&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;User&lt;/strong&gt;: &amp;ldquo;It worked the second time I tried it.&amp;rdquo;&lt;/p&gt;</description></item><item><title>AI Friends</title><link>https://mstruwig.com/posts/ai-friends/</link><pubDate>Tue, 24 Dec 2024 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/ai-friends/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/ai-friends/ai_friends.webp" alt="intro image"&gt;&lt;/p&gt;&#10;&lt;div class="bigfirstletter"&gt;&#10;WHILE I write this, everyone is shocked by the death of a teen who was an&#10;obsessive user of Character.ai (bear in mind -- this post was largely written&#10;in October, when the news happened, before life got in the way). While details&#10;are still emerging, I think it's time to put to pen something that's been on my&#10;mind for a while now regarding the effect AI companions will have.&#10;&lt;/div&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been thinking about the repercussions of generative AI on our social&#10;fabric for quite some time now. And the stage seems to be set, and the potential&#10;issues are only now entering the public eye.&lt;/p&gt;</description></item><item><title>What makes an A player?</title><link>https://mstruwig.com/posts/a-player/</link><pubDate>Fri, 23 Aug 2024 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/a-player/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/a-players/a-players.webp" alt="intro image"&gt;&lt;/p&gt;&#10;&lt;div class="bigfirstletter"&gt;AT OpenBB, we've been thinking about the attributes of high quality employees&#10;over the last few weeks.&lt;/div&gt; &#10;&lt;p&gt;Talent density at OpenBB is particularly high&lt;span class="num"&gt;&lt;/span&gt;.&lt;span&#10;class="sidenote-num"&gt;The highest I&amp;rsquo;ve personally experienced in my professional&#10;career so far, in fact.&lt;/span&gt;This has largely come down to OpenBB&amp;rsquo;s philosophy&#10;of hiring slowly and firing fast when it becomes obvious someone isn&amp;rsquo;t a&#10;good fit. Because of how OpenBB functions, I generally agree with this approach&lt;span&#10;class="num"&gt;&lt;/span&gt;.&lt;span class="sidenote-num"&gt;OpenBB gives employees and&#10;extraordinary amount of flexibility, freedom, and autonomy, but this is paired&#10;with high expectations (rightfully so).&lt;/span&gt; And we&amp;rsquo;re currently rethinking&#10;what &amp;ldquo;good&amp;rdquo; performance looks like.&lt;/p&gt;</description></item><item><title>Life update</title><link>https://mstruwig.com/posts/life-update/</link><pubDate>Fri, 09 Aug 2024 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/life-update/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/a-life-update/quill.webp"&#10;&#9;&#9;&#9;alt="curve" width="100%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;div class="bigfirstletter"&gt;IT'S been a long, long time since I left Praelexis, and a lot has happened since then.&#10;&lt;p&gt;You can read my goodbye email I wrote &lt;a href="https://mstruwig.com/posts/praelexis-goodbye-email"&gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s been a very busy period in my life, with ups and downs.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve wanted to write about some of the things that have happened for a while&#10;now. But somehow, as the list of things I&amp;rsquo;ve wanted to write about&#10;grew, it somehow became more difficult to start. Kind of like what happens if&#10;you try to pour too much cereal at once &amp;ndash; everything just gets clogged up and&#10;nothing comes out.&lt;/p&gt;</description></item><item><title>Goodbye, Praelexis</title><link>https://mstruwig.com/posts/praelexis-goodbye-email/</link><pubDate>Fri, 14 Oct 2022 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/praelexis-goodbye-email/</guid><description>&lt;p&gt;Today marked my last day at &lt;a href="https://praelexis.com/"&gt;Praelexis&lt;/a&gt;, which has been&#10;my place of work for just shy of 6 years now. It&amp;rsquo;s been a wonderful journey, but&#10;it&amp;rsquo;s time for me to move on. Below I&amp;rsquo;ve attached my goodbye email that I sent&#10;out to the organization on my final day.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Hi there Praelexians,&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s finally time for me to say goodbye.&lt;/p&gt;&#10;&lt;p&gt;Writing this email reminded me of one of my favourite panels in Berserk. In this&#10;scene two of the central characters, Guts and Casca, stare out over the Band of&#10;the Hawk&amp;rsquo;s campsite from atop a hill. Casca likens each little flickering&#10;campfire to each of the soldiers&amp;rsquo; dreams and ambitions. She comments how all of&#10;the soldier&amp;rsquo;s have joined together to throw their own individual, little flames&#10;into the biggest bonfire of all, so that they won&amp;rsquo;t go out. Guts refers to this&#10;as the &amp;ldquo;campfire of dreams&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Why your technical documentation sucks</title><link>https://mstruwig.com/posts/why-your-documentation-sucks/</link><pubDate>Tue, 16 Aug 2022 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/why-your-documentation-sucks/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/why-your-technical-documentation-sucks/writing.webp" alt="technical documentation"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;This article was originally presented as a &amp;ldquo;brown bag talk&amp;rdquo;, an internal series&#10;of talks at the office where employees meet over lunch to share and discuss&#10;technical topics that interest them. It was also originally published &lt;a href="https://praelexis.com/9-reasons-your-technical-python-documentation-sucks/"&gt;as a post&#10;here&lt;/a&gt;,&#10;but I&amp;rsquo;ve slightly tweaked it to be a little more, ahem, &lt;strong&gt;opinionated&lt;/strong&gt;&lt;/em&gt;&lt;span&#10;class="num"&gt;&lt;/span&gt;&lt;span class="sidenote-num"&gt;I&amp;rsquo;ll know I&amp;rsquo;ve peaked&#10;when I can say &amp;ldquo;fuck&amp;rdquo; on the company blog.&lt;/span&gt;. &lt;em&gt;Enjoy!&lt;/em&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;In today&amp;rsquo;s post we&amp;rsquo;re going to (briefly) explore one of my favourite topics:&#10;technical documentation&lt;span class="num"&gt;.&lt;/span&gt;&lt;span class="sidenote-num"&gt;If&#10;you&amp;rsquo;ve ever interacted with &lt;em&gt;really&lt;/em&gt; good documentation, you&amp;rsquo;ll understand&#10;perfectly the kind of reverence that I have for it.&lt;/span&gt; More specifically,&#10;we&amp;rsquo;re going to look at some reasons why your technical documentation &lt;em&gt;sucks&lt;/em&gt;.&#10;Along the way, we&amp;rsquo;ll also (sort of) touch on how we can make things better. The&#10;post is a &lt;em&gt;bit&lt;/em&gt; hyperbolic and tongue-in-cheek, but the lessons aren&amp;rsquo;t — they&#10;remain useful whether you&amp;rsquo;re a team of one, or a team of one thousand.&lt;/p&gt;</description></item><item><title>Learning D3, Part One: Trial by fire</title><link>https://mstruwig.com/posts/d3-by-fire-p1/</link><pubDate>Fri, 31 Dec 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/d3-by-fire-p1/</guid><description>&lt;p&gt;I&amp;rsquo;ve been &lt;a href="https://mstruwig.com/learning"&gt;putting off learning&lt;/a&gt; D3.js for a while now, primarily&#10;because I&amp;rsquo;ve isolated myself from fun distractions to complete my PhD&lt;span&#10;class="num"&gt;&lt;/span&gt;&lt;span class="sidenote-num"&gt;A story for another day. But&#10;there &lt;em&gt;will&lt;/em&gt; be one.&lt;/span&gt;. Alas, I&amp;rsquo;ve been on leave for a week, before I start&#10;full-time work in 2022. After 3 or 4 days of thesis-induced, delirium-riddled&#10;&amp;ldquo;rest&amp;rdquo;, I feel slightly renewed. At least enough to where I can face something&#10;quasi-adjacent to writing or programming, anyway. Not being one to sit idle for&#10;long, I&amp;rsquo;ve rolled up my sleeves and slowly started peeling back the layers of D3&#10;as my motivation has ebbed and flowed.&lt;/p&gt;</description></item><item><title>On teaching</title><link>https://mstruwig.com/posts/on-teaching/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/on-teaching/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/on_teaching/intro.webp"&#10;&#9;&#9;&#9;alt="intro" width="100%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;A month or so ago, I helped teach a three-day introductory Python course to&#10;client&amp;rsquo;s employees who were directly involved in, or adjacent to, credit&#10;modelling. Of the 8 or so people who attended, everyone was interested in&#10;learning Python. What made this a fun course to teach is that almost no one had&#10;previous experience with the language, only SAS. It was a challenge for me &amp;ndash;&#10;teaching 8+ hours per day, three days in a row, is hard work. Anyway, I remember&#10;lying on the couch after the final day with a handful of takeaways from the&#10;experience, which I noted down and have shared here.&lt;/p&gt;</description></item><item><title>Adding videos in JupyterBook</title><link>https://mstruwig.com/posts/jupyterbook-video/</link><pubDate>Wed, 20 Oct 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/jupyterbook-video/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/jupyterbook_video/title.webp"&#10;&#9;&#9;&#9;alt="intro" width="100%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;A short post, hopefully to help out future fellow users who want to embed videos&#10;in their Jupyter Book.&lt;span class="num"&gt;&lt;/span&gt;&lt;span class="sidenote-num"&gt;Book&#10;&lt;em&gt;not&lt;/em&gt; Notebook. These are very different (albeit related) projects. It probably&#10;wasn&amp;rsquo;t the best idea to use this name, since googling for Jupyter Book only&#10;returns irrelevant results.&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;For a commercial endeavour, we&amp;rsquo;ve been using the &lt;a href="https://jupyterbook.org/intro.html"&gt;Jupyter&#10;Book&lt;/a&gt; project to compile a bunch of&#10;instructional material (in the form Notebooks and Markdown) into an easy-to-publish format&#10;(static HTML) that is easy to distribute (the internet) and that looks beautiful&#10;(JupyterBook).&lt;/p&gt;</description></item><item><title>Covid Psychosis</title><link>https://mstruwig.com/posts/covid-insanity/</link><pubDate>Tue, 07 Sep 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/covid-insanity/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/covid_psychosis/covid_psychosis_intro.webp"&#10;&#9;&#9;&#9;alt="intro" width="100%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;Not many things have been able to break me from my from PhD-fueled writing hiatus, but&#10;I&amp;rsquo;ll admit people losing their minds isn&amp;rsquo;t a bad place to start.&lt;/p&gt;&#10;&lt;p&gt;This is based this on my observations of friends and coworkers as we all attempt&#10;to navigate the COVID situation (now that vaccines are available for over-18s in&#10;South Africa). It&amp;rsquo;s also heavily fueled by an excellent &lt;a href="https://www.youtube.com/watch?v=PqjbvBa3XIQ"&gt;94th episode of the&#10;Darkhorse Podcast&lt;/a&gt;, where Bret&#10;Weinstein articulates something I&amp;rsquo;ve believed for some time now. Right now, the&#10;world seems to be suffering from a kind of COVID psychosis, where the so-called&#10;&amp;ldquo;adults in the room&amp;rdquo; have seemingly lost touch with reality.&lt;/p&gt;</description></item><item><title>If—</title><link>https://mstruwig.com/posts/if/</link><pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/if/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/if/if_picture.webp"&#10;&#9;&#9;&#9;alt="intro" width="60%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;pre class="poem"&gt;&#10;If you can keep your head when all about you&#10; Are losing theirs and blaming it on you;&#10;If you can trust yourself when all men doubt you,&#10; But make allowance for their doubting too:&#10;If you can wait and not be tired by waiting,&#10; Or being lied about, don't deal in lies,&#10;Or being hated don't give way to hating,&#10; And yet don't look too good, nor talk too wise;&#10;&#10;If you can dream—and not make dreams your master;&#10; If you can think—and not make thoughts your aim,&#10;If you can meet with Triumph and Disaster&#10; And treat those two impostors just the same:&#10;If you can bear to hear the truth you've spoken&#10; Twisted by knaves to make a trap for fools,&#10;Or watch the things you gave your life to, broken,&#10; And stoop and build 'em up with worn-out tools;&#10;&#10;If you can make one heap of all your winnings&#10; And risk it on one turn of pitch-and-toss,&#10;And lose, and start again at your beginnings&#10; ⁠And never breathe a word about your loss:&#10;If you can force your heart and nerve and sinew&#10; To serve your turn long after they are gone,&#10;And so hold on when there is nothing in you&#10; ⁠Except the Will which says to them: 'Hold on!'&#10;&#10;If you can talk with crowds and keep your virtue,&#10; Or walk with Kings—nor lose the common touch,&#10;If neither foes nor loving friends can hurt you,&#10; If all men count with you, but none too much:&#10;If you can fill the unforgiving minute&#10; With sixty seconds' worth of distance run,&#10;Yours is the Earth and everything that's in it,&#10; ⁠And—which is more—you'll be a Man, my son!&#10;&lt;/pre&gt;&#10;&lt;p&gt;&amp;mdash; &lt;a href="https://en.wikipedia.org/wiki/Rudyard_Kipling"&gt;Rudyard Kipling&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Experimenting with Scrollytelling as Knowledge Share</title><link>https://mstruwig.com/posts/scrollytelling/</link><pubDate>Thu, 13 May 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/scrollytelling/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/scrollytelling/personas.webp"&#10;&#9;&#9;&#9;alt="intro" width="80%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;&amp;ldquo;I&amp;rsquo;m in a hurry, just show me what you&amp;rsquo;ve made!&amp;rdquo;&lt;/strong&gt; Take a look: &lt;a href="https://mstruwig.com/other/experiments/buyer-persona.html"&gt;The Buyer&amp;rsquo;s Persona, a&#10;whirlwhind tour&lt;/a&gt;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been meaning to get back to one of my favourite pastimes: exploring&#10;different ways of telling stories using the web (especially when that story is&#10;involves &lt;em&gt;data&lt;/em&gt;). Between finishing up my PhD (something I&amp;rsquo;ll write about soon&#10;enough, I&amp;rsquo;m sure) and building products at work, exploration has been relegated&#10;to the backseat recently.&lt;/p&gt;</description></item><item><title>The tricky thing about selling to businesses</title><link>https://mstruwig.com/posts/selling_to_business/</link><pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/selling_to_business/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/selling_is_hard/selling_intro.webp"&#10;&#9;&#9;&#9;alt="intro" width="100%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;For the past few months, I&amp;rsquo;ve been part of a team that&amp;rsquo;s been tasked with&#10;building out a product and selling it to businesses. Our primary target market&#10;is large corporations in the financial sector. This has been a unique challenge&#10;for the team &amp;ndash; it&amp;rsquo;s near-impossible validating a product when it needs to be&#10;sold to a person who holds a managerial or department-head position. This kind&#10;of customer isn&amp;rsquo;t dime-a-dozen, so if you even&#10;&lt;em&gt;get&lt;/em&gt; a meeting, the feedback is often heavily biased to &lt;em&gt;that particular&#10;customer&lt;/em&gt;. I&amp;rsquo;m learning quickly how tricky this can be.&lt;/p&gt;</description></item><item><title>Who needs gradient descent? Getting to grips with Nevergrad.</title><link>https://mstruwig.com/posts/nevergrad/</link><pubDate>Sun, 21 Feb 2021 00:00:00 +0000</pubDate><guid>https://mstruwig.com/posts/nevergrad/</guid><description>&lt;figure&gt;&lt;img src="https://mstruwig.com/images/nevergrad_intro.webp"&#10;&#9;&#9;&#9;alt="intro" width="90%"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;Nevergrad is an interesting and quite wonderful Python library that I&amp;rsquo;ve grown&#10;fond of over the last few months. It provides tooling to run numerical&#10;optimization &lt;em&gt;without&lt;/em&gt; having to rely on computing the gradient of the function&#10;you&amp;rsquo;re optimizing (in stark contrast to the current algorithm &lt;em&gt;du jour&lt;/em&gt; of&#10;the deep learning world, &lt;a href="https://en.wikipedia.org/wiki/Gradient_descent"&gt;gradient&#10;descent&lt;/a&gt;). Think&#10;&lt;a href="https://en.wikipedia.org/wiki/Evolutionary_algorithm"&gt;evolutionary algorithms&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Particle_swarm_optimization"&gt;particle&#10;swarm optimization&lt;/a&gt;&#10;and so on.&lt;/p&gt;&#10;&lt;p&gt;I like a few things about &lt;code&gt;nevergrad&lt;/code&gt;, and it&amp;rsquo;s since become my go-to tool for ad-hoc&#10;optimization problems, mostly due to how easy it has been to drop into&#10;my code. So, today, I&amp;rsquo;d like to talk about &lt;code&gt;nevergrad&lt;/code&gt; for a bit.&lt;/p&gt;</description></item><item><title>Blisteringly-quick mocking when testing Jupyter Notebooks</title><link>https://mstruwig.com/posts/quick-mocking-jupyter-notebook/</link><pubDate>Tue, 01 Sep 2020 09:09:00 +0200</pubDate><guid>https://mstruwig.com/posts/quick-mocking-jupyter-notebook/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/mining-tools.webp" alt="mining-tool"&gt;&lt;/p&gt;&#10;&lt;p&gt;Notebooks are good for two things::&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Illustrative examples that provide code within the context of documentation&#10;(sometimes referred to as Literate Programming)&lt;/li&gt;&#10;&lt;li&gt;In-line plots.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;For everything else, you should be using a &amp;ldquo;proper&amp;rdquo; Python module that has some&#10;tests &amp;ndash; at least for the important bits.&lt;/p&gt;&#10;&lt;p&gt;This was the thesis of Joel Grus&amp;rsquo; hilarious talk &lt;a href="https://www.youtube.com/watch?v=7jiPeIFXb6U"&gt;&amp;ldquo;I don&amp;rsquo;t like&#10;notebooks&amp;rdquo;&lt;/a&gt;, which I happen to&#10;largely agree with. And I think it&amp;rsquo;s excellent advice&amp;hellip;&lt;/p&gt;</description></item><item><title>Building a product website in half a day with no web dev knowledge</title><link>https://mstruwig.com/posts/rolling-own-website/</link><pubDate>Tue, 18 Aug 2020 09:00:00 +0200</pubDate><guid>https://mstruwig.com/posts/rolling-own-website/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/vintage-horserace.webp" alt="horse race"&gt;&lt;/p&gt;&#10;&lt;p&gt;I had an interesting challenge at work a month or two ago. It went something&#10;like this, &amp;ldquo;Michael, while we&amp;rsquo;re waiting for the official website to get&#10;rebuilt, it would be great if you could build a website for our product as an&#10;alternative. Spend a day on it, let&amp;rsquo;s see what you can get.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; this kind of task or challenge.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m going to talk you through the process of how I did exactly that. I&#10;unfortunately can&amp;rsquo;t &lt;em&gt;show&lt;/em&gt; the final result (since the product hasn&amp;rsquo;t officially&#10;launched yet &amp;ndash; nor is it guaranteed we&amp;rsquo;ll be using this rapid-fire website),&#10;but I&amp;rsquo;ll be giving some general advice and my approach for getting a great-looking&#10;product page up &lt;em&gt;fast&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Lean Startup summary notes + some closing thoughts</title><link>https://mstruwig.com/posts/lean-startup-summary-notes/</link><pubDate>Wed, 03 Jun 2020 09:00:00 +0200</pubDate><guid>https://mstruwig.com/posts/lean-startup-summary-notes/</guid><description>&lt;p&gt;Over the last few days I finished reading and compiling my notes on &lt;em&gt;The Lean&#10;Startup&lt;/em&gt; by Eric Ries. The summary notes are available from the &lt;a href="https://mstruwig.com/learning"&gt;Learning&#10;page&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;I really enjoyed the book. I particularly like the &lt;em&gt;build-measure-learn&lt;/em&gt;&#10;feedback loop, and the concept of small batches. This has the potential to be&#10;tremendously influential in how I conduct my projects and work. I feel naturally&#10;drawn to hypothesis-driven development, and Lean Startup seems to provide a&#10;decent framework to execute this idea.&lt;/p&gt;</description></item><item><title>A short word about comments in code</title><link>https://mstruwig.com/posts/a-short-word-on-comments/</link><pubDate>Tue, 19 May 2020 22:40:28 +0200</pubDate><guid>https://mstruwig.com/posts/a-short-word-on-comments/</guid><description>&lt;p&gt;&lt;img src="https://mstruwig.com/images/hieroglyphs.webp" alt="hieroglyphs"&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;A common fallacy is to assume authors of incomprehensible code will be able&#10;to express themselves clearly in comments.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;— Kevlin Henney&lt;/p&gt;&#10;&lt;p&gt;I quite like &lt;a href="https://twitter.com/KevlinHenney/"&gt;Kevlin Henney&lt;/a&gt;, particularly&#10;his talks. Some people grumble about his information density being a little bit&#10;low, (as if optimizing for information density is a good proxy for optimizing&#10;for information transfer &amp;ndash; it&amp;rsquo;s not), but I find his talks both informative and&#10;entertaining. Above all though, I find them &lt;em&gt;accessible&lt;/em&gt;. Kevlin spends a lot of&#10;time talking about is the mindset of clean code, which we&amp;rsquo;ll briefly encounter&#10;today.&lt;/p&gt;</description></item></channel></rss>