<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>~/borba</title><description>Developer notes, ADHD-friendly systems, and field reports from a borrowed winter.</description><link>https://borba.io/</link><language>en-ca</language><item><title>Body doubling for one.</title><link>https://borba.io/posts/body-doubling-for-one/</link><guid isPermaLink="true">https://borba.io/posts/body-doubling-for-one/</guid><description>Borrowing other people&apos;s focus without borrowing their noise.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Body doubling — working alongside another person so your brain agrees to work at all — is one of the few ADHD strategies that has never once failed me. The failure is upstream: to be body-doubled, you need a body, and bodies have calendars, and coordinating calendars is exactly the kind of task my brain files under &quot;later, forever.&quot;&lt;/p&gt;
&lt;p&gt;So I&apos;ve spent a year testing the degraded modes. How much of the effect survives when the other person is recorded, virtual, or frankly imaginary? The answer: a suspicious amount.&lt;/p&gt;
&lt;h2&gt;What actually seems to do the work&lt;/h2&gt;
&lt;p&gt;The folk theory says body doubling is about accountability — someone will &lt;em&gt;see&lt;/em&gt; you slack off. But my slacking is invisible; nobody can tell whether I&apos;m writing tests or reading about 14th-century shipbuilding. The double never checks. It still works.&lt;/p&gt;
&lt;p&gt;What I think is happening, at least in my head: another presence gives the current moment a shape. Alone, time is a formless soup and every second is a fair moment to switch tasks. With someone there — even faintly, even on a screen — the room acquires a rhythm, and my brain borrows it. It&apos;s less &quot;supervision&quot; and more &quot;a metronome made of person.&quot;&lt;/p&gt;
&lt;h2&gt;The degraded modes, ranked&lt;/h2&gt;
&lt;p&gt;A year of self-experiments, from strongest to weakest:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A real human in the room, each doing our own thing.&lt;/strong&gt; Still the gold standard. My partner reading on the couch while I work is worth ninety minutes of focus, minimum.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A scheduled video call with one friend, cameras on, mics off.&lt;/strong&gt; Two check-ins: start and end. Retention is nearly as good, and the scheduling cost is one text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A pomodoro live stream or &quot;study with me&quot; video.&lt;/strong&gt; Shockingly effective for something so one-directional. The chat scrolling by reads as ambient other-people.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Café ambience plus a visible countdown timer.&lt;/strong&gt; The weakest form, but the always-available one. The timer matters more than the sound — it gives the soup a shape.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The gradient taught me the real lesson: presence is a dial, not a switch, and low settings still count. On a bad day I don&apos;t need the best mode. I need whichever mode requires zero coordination, because a strategy I can&apos;t start doesn&apos;t have a strength.&lt;/p&gt;
&lt;h2&gt;The one-person protocol&lt;/h2&gt;
&lt;p&gt;My current default, for days when no humans are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Timer on the desk, physical, facing me. Forty minutes.&lt;/li&gt;
&lt;li&gt;One task written on a sticky note in marker, stuck to the monitor bezel.&lt;/li&gt;
&lt;li&gt;Café sounds, low, the same playlist every time — the repetition itself has become a start cue.&lt;/li&gt;
&lt;li&gt;At the end: stand up, cross the note off, write the next one. The crossing-off is the paycheque.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Is a kitchen timer a person? It is not. But it watches me in the way I need to be watched — gently, without opinion, with a defined end — and some ancient part of my attention system accepts the substitute and settles down.&lt;/p&gt;
&lt;p&gt;Borrow focus wherever you can find it. Nobody&apos;s checking whether the double was real.&lt;/p&gt;
</content:encoded><category>brain</category><category>adhd</category><category>focus</category><category>systems</category></item><item><title>A quieter terminal, on purpose.</title><link>https://borba.io/posts/quiet-terminal-setup/</link><guid isPermaLink="true">https://borba.io/posts/quiet-terminal-setup/</guid><description>Fewer colors, fewer alerts, and a prompt that stops shouting.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I spent years making my terminal &lt;em&gt;more&lt;/em&gt; informative. Git status in the prompt, battery, weather, kubernetes context, a clock, all of it syntax-highlighted like a parrot in a paint store. Every glance offered me six things to think about. For an ADHD brain, that&apos;s not information — that&apos;s six invitations to leave the task.&lt;/p&gt;
&lt;p&gt;This year I went the other way. The goal: a terminal that answers questions when asked and otherwise stays quiet. Here&apos;s what actually moved the needle.&lt;/p&gt;
&lt;h2&gt;The prompt stopped shouting&lt;/h2&gt;
&lt;p&gt;My old prompt was a dashboard. My new prompt is a sentence:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# directory, git branch when it matters, and a cursor. that&apos;s it.
PROMPT=&apos;%F{6}%2~%f${vcs_info_msg_0_} %F{2}$%f &apos;

zstyle &apos;:vcs_info:git:*&apos; formats &apos; %F{8}(%b)%f&apos;
precmd() { vcs_info }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two colors: one for where I am, one dim one for the branch. No exit-code emoji, no timestamp, no language version — when I need those, I can ask (&lt;code&gt;echo $?&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;node -v&lt;/code&gt;). It turns out I asked about the kubernetes context roughly four times a year, and it interrupted me forty times a day.&lt;/p&gt;
&lt;h2&gt;Notifications went to zero&lt;/h2&gt;
&lt;p&gt;The real noise wasn&apos;t visual, it was interruptive: completion bells, &lt;code&gt;brew&lt;/code&gt; update nags, tools that print upgrade banners in the middle of your work. All of it got the same treatment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;unsetopt BEEP                     # no bell, ever
export HOMEBREW_NO_ENV_HINTS=1    # no lifestyle advice from my package manager
export DISABLE_UPDATE_PROMPT=true # update when *I* schedule it, not mid-thought
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The pattern I keep relearning: every tool believes its news is important. My attention is a shared resource they&apos;re all writing to without a lock. Muting them isn&apos;t ignorance — it&apos;s scheduling. Updates now happen Friday afternoon, batched, with coffee, on purpose.&lt;/p&gt;
&lt;h2&gt;One honest status line&lt;/h2&gt;
&lt;p&gt;I kept exactly one piece of ambient information: a tmux status line with the session name and the time. Not because it&apos;s pretty — because those are the two questions I actually ask mid-task (&quot;where am I?&quot; and &quot;how long have I been here?&quot;), and answering them without a context switch keeps me &lt;em&gt;in&lt;/em&gt; the task instead of orbiting it.&lt;/p&gt;
&lt;p&gt;Everything else earns its place by being silent until summoned. The terminal finally feels like the rest of this blog is supposed to feel: a quiet room where you can hear yourself think.&lt;/p&gt;
&lt;p&gt;If your setup works because it&apos;s loud, genuinely: enjoy it. But if you&apos;ve never questioned the noise, try a week with a two-color prompt. The silence has a surprisingly high signal.&lt;/p&gt;
</content:encoded><category>tech</category><category>terminal</category><category>adhd</category><category>tooling</category></item><item><title>Winter is a skill. I&apos;m levelling up.</title><link>https://borba.io/posts/winter-is-a-skill/</link><guid isPermaLink="true">https://borba.io/posts/winter-is-a-skill/</guid><description>Layers, light therapy, and the bus that never comes.</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My first winter in Canada, I treated the cold as a personality test. I lost. I showed up to a January bus stop in a fall jacket and &quot;good enough&quot; sneakers, and spent forty minutes learning that −18°C does not care how I &lt;em&gt;feel&lt;/em&gt; about it.&lt;/p&gt;
&lt;p&gt;Somewhere around February, a coworker who grew up in Winnipeg said the sentence that rewired me: &quot;You&apos;re not bad at winter. You just haven&apos;t practised.&quot; Practised. Like a scale on a piano. Like a keyboard shortcut. Winter is a skill, and skills have systems, and systems are the one thing my ADHD brain will actually maintain — as long as I write them down.&lt;/p&gt;
&lt;p&gt;This post is the write-down.&lt;/p&gt;
&lt;h2&gt;Layer like a config file&lt;/h2&gt;
&lt;p&gt;The mistake I made all of year one: buying one Very Warm Thing and wearing it for everything. One parka to rule them all, sweating on the metro, freezing at the bus stop. The fix is boring and beautiful: layers are configuration, not fashion.&lt;/p&gt;
&lt;p&gt;My base config now looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;base:      merino long sleeve     # always on, even &quot;warm&quot; days
mid:       fleece or wool sweater # -5°C and below
shell:     windproof parka        # the wind is the real enemy
extremities:
  head:    toque                  # non-negotiable, this is Canada
  hands:   mittens &amp;gt; gloves       # fingers heat each other, science
  feet:    wool socks + boots rated to -30
override:
  freezing_rain: swap toque for hood, add ice grips
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The point isn&apos;t this exact stack — it&apos;s that I stopped deciding every morning. I check the temperature, I apply the config. Deciding was the expensive part. On low-executive-function days, the difference between &quot;figure out clothes&quot; and &quot;run the script&quot; is the difference between going outside and cancelling my whole day.&lt;/p&gt;
&lt;p&gt;Merino base layers were the single biggest upgrade. Not because of the marketing — because they stay warm when I inevitably overdress and sweat on the way to the station. Cotton remembers your mistakes. Wool forgives them.&lt;/p&gt;
&lt;h2&gt;Light is a dependency&lt;/h2&gt;
&lt;p&gt;Nobody warned me that the hard part of a northern winter isn&apos;t the cold. It&apos;s the dark. Sunset at 4:30pm reads as a fun fact until you realize you haven&apos;t seen daylight on a workday in three weeks and your brain has quietly switched to power-saving mode.&lt;/p&gt;
&lt;p&gt;I now treat sunlight like a package my system depends on, with pinned versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10,000-lux lamp, 25 minutes, with breakfast.&lt;/strong&gt; Not negotiable, not &quot;when I remember.&quot; It sits on the kitchen table pointed at my cereal. The habit is stapled to an existing one, because new standalone habits and my brain are not friends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A lunchtime walk while the sun is actually up.&lt;/strong&gt; Calendar-blocked like a meeting, because it is one — with the only star we have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vitamin D, because my doctor said so.&lt;/strong&gt; Ask yours; I&apos;m a developer, not an endocrinologist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The lamp felt like snake oil for the first week. By week three the difference was embarrassing: I&apos;d been debugging my mood at the application layer when the problem was the power supply.&lt;/p&gt;
&lt;h2&gt;The bus that never comes&lt;/h2&gt;
&lt;p&gt;Transit in a snowstorm is an unreliable API. It returns eventually, but the latency is unbounded, retries are on you, and the error messages are lies. The schedule says 7 minutes; the sign says 3; the street says nothing for half an hour while your eyelashes freeze together.&lt;/p&gt;
&lt;p&gt;You cannot fix the API. You can only write a resilient client:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Check the real-time app before leaving, not at the stop.&lt;/strong&gt; Wait indoors; walk out when the dot is two stops away.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dress for the wait, not the ride.&lt;/strong&gt; The bus is tropical. The stop is the Arctic. The stop wins, because the stop is where the variance lives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always carry the failure mode:&lt;/strong&gt; a book or a podcast queued offline. If the wait is entertainment, a 20-minute delay stops being a meltdown trigger and becomes twenty pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is an ADHD-specific trap here: winter transit punishes the just-in-time departure style that I ran on my whole life. The system that saves me is padding every trip by ten minutes and officially declaring that time &quot;podcast time&quot; instead of &quot;wasted time.&quot; Reframing it was the fix; my brain won&apos;t protect a buffer, but it will absolutely protect an episode.&lt;/p&gt;
&lt;h2&gt;What levelling up feels like&lt;/h2&gt;
&lt;p&gt;It&apos;s mid-January of year two as I update this. This morning was −21°C with the wind, and the strangest thing happened at the bus stop: nothing. I was warm. I was on time. I stood there listening to a podcast in my correctly-versioned layers like some kind of local.&lt;/p&gt;
&lt;p&gt;I&apos;m not going to pretend I love winter now. But I&apos;ve stopped being afraid of the forecast, and on a good day — snow squeaking underfoot, sun out, mittens doing their science — I almost understand the people who claim to like this.&lt;/p&gt;
&lt;p&gt;Skill acquired. Next level: learning to skate without holding the boards. Field report to follow.&lt;/p&gt;
</content:encoded><category>canada</category><category>winter</category><category>adhd</category><category>systems</category></item></channel></rss>