<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://ktbarrett.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ktbarrett.github.io/" rel="alternate" type="text/html" /><updated>2026-03-18T20:19:57+00:00</updated><id>https://ktbarrett.github.io/feed.xml</id><title type="html">grin ‘n barrett</title><author><name>Kaleb Barrett</name></author><entry><title type="html">Replacing Makefile-based Project Automation</title><link href="https://ktbarrett.github.io/2026/03/18/dexter-project-automation.html" rel="alternate" type="text/html" title="Replacing Makefile-based Project Automation" /><published>2026-03-18T00:00:00+00:00</published><updated>2026-03-18T00:00:00+00:00</updated><id>https://ktbarrett.github.io/2026/03/18/dexter-project-automation</id><content type="html" xml:base="https://ktbarrett.github.io/2026/03/18/dexter-project-automation.html"><![CDATA[<p>cocotb and coconext have a need for a project automation, as do so many other projects.
Right now they are using <a href="https://github.com/wntrblm/nox">nox</a> but it’s showing it’s deficiencies.
So I decided to try to find a proper replacement.</p>

<p>This new tool needs to…</p>
<ul>
  <li>Work cross-platform.</li>
  <li>Not do anything but exactly what I tell it. Namely, it shouldn’t attempt to build venvs or try to make everything appear like a test when most project automation <em>isn’t</em> a test; or at least have a way to turn all that off.</li>
  <li>Support passing options.</li>
  <li>Support running commands in an easy way.</li>
  <li>Ideally not require learning anything new.</li>
  <li>Ideally support reuse by allowing tasks to mark other tasks as dependencies, or at least call out tasks in a recursive manner.</li>
</ul>

<p>There are a bunch of tools that are typically recommended for project automation:</p>
<ul>
  <li><a href="https://github.com/casey/just">just</a></li>
  <li><a href="https://github.com/tox-dev/tox">tox</a></li>
  <li><a href="https://github.com/wntrblm/nox">nox</a></li>
  <li><a href="https://github.com/pyinvoke/invoke">invoke</a></li>
  <li>make (as in Makefiles)</li>
  <li><a href="https://github.com/pydoit/doit">doit</a></li>
</ul>

<p>There are a number of issues with these tools however that cause them to not meet the requirements.</p>

<p><code class="language-plaintext highlighter-rouge">make</code> is not cross-platform, there’s no native support on Windows without a POSIX environment like msys2.
Next <code class="language-plaintext highlighter-rouge">make</code> simply runs shell commands, so whatever you do write is tied to the shell environment and shell language features.
This makes even cross-platform support even between Unixes like MacOS and Linux difficult, as the shells and common tools like <code class="language-plaintext highlighter-rouge">grep</code> have different features.
<code class="language-plaintext highlighter-rouge">just</code> has the same issues, as does <code class="language-plaintext highlighter-rouge">invoke</code>.</p>

<p><code class="language-plaintext highlighter-rouge">make</code> and <code class="language-plaintext highlighter-rouge">just</code> also don’t necessarily respect ordering requirements.
In the below <code class="language-plaintext highlighter-rouge">make</code> example, <code class="language-plaintext highlighter-rouge">c</code> needs <code class="language-plaintext highlighter-rouge">b</code> to run then <code class="language-plaintext highlighter-rouge">a</code>, but <code class="language-plaintext highlighter-rouge">b</code> depends on <code class="language-plaintext highlighter-rouge">a</code> so <code class="language-plaintext highlighter-rouge">a</code> must run first.
<code class="language-plaintext highlighter-rouge">make</code> silent ignores the conflict and runs <code class="language-plaintext highlighter-rouge">a</code> first.
Perfectly fine for a build system, but not necessarily for a task system where side effects mean the order matters.</p>

<div class="language-makefile highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">a</span><span class="o">:</span>
    <span class="err">@echo</span> <span class="s2">"a"</span>

<span class="nl">b</span><span class="o">:</span> <span class="nf">a</span>
    <span class="err">@echo</span> <span class="s2">"b"</span>

<span class="nl">c</span><span class="o">:</span> <span class="nf">b a</span>
    <span class="err">@echo</span> <span class="s2">"c"</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">make</code> and <code class="language-plaintext highlighter-rouge">just</code> also have the downside of being bespoke languages for scripting the tasks themselves.
And <code class="language-plaintext highlighter-rouge">tox</code> is declarative and is simply not capable of being a very flexible project automation tool without leaning on the shell or Python scripts.
why should I ever have to learn what the following line means?</p>

<div class="language-makefile highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nl">print-%</span><span class="o">:</span> <span class="nf">; @echo $*=$($*)</span>
</code></pre></div></div>

<p>Python is fine, which is what makes <code class="language-plaintext highlighter-rouge">nox</code>, <code class="language-plaintext highlighter-rouge">invoke</code> and <code class="language-plaintext highlighter-rouge">doit</code> the standouts.
They are distributed via <code class="language-plaintext highlighter-rouge">pip</code> which runs everywhere;
are implemented in Python which runs everywhere;
the tasks are described in Python which runs everywhere;
and Python is an incredibly capable language.
Being implemented in Python and writing tasks in Python is a goodness.</p>

<p><code class="language-plaintext highlighter-rouge">tox</code> and <code class="language-plaintext highlighter-rouge">nox</code> are Python-focused and run every “environment” in its own virtual environment.
This is what is currently getting in the way in cocotb and coconext.
I need automation to be able to run in the current global environment and not isolated ones to maintain flexibility.
The venv isolation can be great for things like isolated dev tests for CI and isolation package builds,
but I’d rather develop out of a single persistent development environment.</p>

<p>I haven’t complained about <code class="language-plaintext highlighter-rouge">doit</code> yet.
It’s task are generators which yield bespoke dicts for describing dependencies without any typing support, so it just feels weird and kinda bad.
Otherwise, its technically good.
I’m allowed to make decisions based on aesthetics!</p>

<p><code class="language-plaintext highlighter-rouge">nox</code> can call out other sessions in a recursive way, and you can pass options;
but it does not support declarative and de-duplicated dependencies like Makefiles.
<code class="language-plaintext highlighter-rouge">invoke</code> does support this, but task arguments must be bound when declaring the dependency relationship
rather than just joining the argument namespace like Makefiles do conceptually by hvaing all options be globals.</p>

<p>Of all the options, <code class="language-plaintext highlighter-rouge">nox</code>, <code class="language-plaintext highlighter-rouge">invoke</code>, and <code class="language-plaintext highlighter-rouge">doit</code> are the closest to the mark, but all have at least one issue…</p>

<p>So I’ll make my own.</p>

<h1 id="dexter">Dexter</h1>

<p>I started <code class="language-plaintext highlighter-rouge">dexter</code> (name subject to change) to fill these needs.</p>

<p>It will…</p>
<ul>
  <li>Be implemented in Python</li>
  <li>Be distributed via PyPI</li>
  <li>Tasks will be written in Python</li>
  <li>Tasks will be able to list out other Tasks as dependencies</li>
  <li>Task Flows will be checked to ensure a serialization order is possible where all ordering constraints are satisfied, or fail</li>
  <li>All Tasks in a Flow will share arguments</li>
  <li>Tasks will be easy to write, using decorated functions much like <code class="language-plaintext highlighter-rouge">nox</code> or <code class="language-plaintext highlighter-rouge">invoke</code></li>
  <li>Tasks will have access to special “session” object to contain session-wide environment variables, and simplified run functions like <code class="language-plaintext highlighter-rouge">nox</code> or <code class="language-plaintext highlighter-rouge">invoke</code></li>
  <li>Tasks will run commands with <code class="language-plaintext highlighter-rouge">execve</code>, not shell scripts</li>
</ul>

<p>It will reach a minimal viable product in a couple weeks.
It’s housed <a href="https://github.com/ktbarrett/dexter/">here</a>.
Feel free to suggest names in a Github issue.</p>]]></content><author><name>Kaleb Barrett</name></author><summary type="html"><![CDATA[cocotb and coconext have a need for a project automation, as do so many other projects. Right now they are using nox but it’s showing it’s deficiencies. So I decided to try to find a proper replacement.]]></summary></entry><entry><title type="html">Internal Monologue is Sooooo 21st Century</title><link href="https://ktbarrett.github.io/palaver/2025/11/27/internal-monologue.html" rel="alternate" type="text/html" title="Internal Monologue is Sooooo 21st Century" /><published>2025-11-27T00:00:00+00:00</published><updated>2025-11-27T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/11/27/internal-monologue</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/11/27/internal-monologue.html"><![CDATA[<p>It’s an old discussion, a couple years old at least (guh does time pass quickly these days),
but I’m a slow processor and an even slower writer.
But it came up recently in a conversation so I felt I should revisit it.</p>

<p>The premise:
You aren’t cool or better because you have an “internal monologue.”
In fact, you are probably worse for it.</p>

<p>So what is this “internal monologue?”
It’s that voice you hear in your head.
No, not the one reading this out to you.
It’s your own voice reflecting upon things as they are happening and conveying them back to you in prose.
It’s your brain narrativizing your experience as it happens.</p>

<p>This is not a good thing.
Self-narrativization is self-harm.
Narrativization of reality is always unethical.
It’s a violence against the plural of experience towards a singular.
That singular is always shaped by valuation.
Since we cannot escape value standards imposed by our society,
we are destroying our experiences, selves, and others to match up with the standard of narrative of the society.</p>

<p>It’s very strange that I see therapists and some in the mental health advocacy realm recommend this practice.
In fact, they frame journaling as a ritual in narrativization.
“Making sense of the world around you and yourself” is how they frame it.</p>

<p>So we should do this to make the world make sense?
So we can self-craft our place in it?
This seems like caving into the lesser parts of the self:
the neurotic (“I cannot handle a world that isn’t rational and thus predictable”),
the external validation seeking (“I must fit into socially accepted narratives”),
and the hopelessly idealistic (“I wish my life to be meaningful by approximating it to that which myself and others find beautiful”).</p>

<p>What is lost in the process?</p>
<ul>
  <li>The experiences and motives leading to behavior that don’t fit the narrative. Perhaps those things deserve <em>even more</em> consideration than typical things do.</li>
  <li>Understandings of others that lie outside of our own worldview. You will misunderstand others and you will mistreat them if you can only approach them from your own point of view.</li>
  <li>A whole lot of meaningless fun.</li>
</ul>

<p>To bring this back:
I don’t think an internal monologue is indicative of intelligence, but personality defect.
The world isn’t a book; maybe you should visit it some time.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[It’s an old discussion, a couple years old at least (guh does time pass quickly these days), but I’m a slow processor and an even slower writer. But it came up recently in a conversation so I felt I should revisit it.]]></summary></entry><entry><title type="html">A Metric Fuckton</title><link href="https://ktbarrett.github.io/palaver/2025/11/23/megagram.html" rel="alternate" type="text/html" title="A Metric Fuckton" /><published>2025-11-23T00:00:00+00:00</published><updated>2025-11-23T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/11/23/megagram</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/11/23/megagram.html"><![CDATA[<p>I recently perceived, for the first time, the phrase “metric fuckton.”
Language is often parroted, as is behavior, and without constant self-examination we will forget that everything we’ve ever said and done was at one point the conscious decision of some - probably now-deceased - person.
Something we’ve accepted without reflection as there is far too much shit in the world to be in a constant state of reflection on every new thing.
Sometimes that examination is serious and meaningful; other times its silly.
For example, imagine the phrase “metric fuckton.”</p>

<p>A “metric” ton is a real unit of weight; I knew this, but not really what it was.
I’d guess since it’s called a “ton” it’d be close in weight to an “Imperial” ton.
Since there’s a hair over 2 pounds to a kilogram and metric is all based on powers of 10, I’d guess it’d be 1000 kilograms…
I’d be correct.</p>

<p>“But isn’t that just a megagram?”</p>

<p>No sooner had the words left my mouth when I realized what an absurdity that word is.</p>

<p>(Please read in circus announcer voice)</p>

<blockquote>
  <p>You’ve heard of the gram.
Smallest unit of weight you’ll measure on any given day.
Now… let me introduce to you, it’s <em>MUCH</em> bigger cousin…
Larger than any human can lift..
<em>the MEGAGRAM!!</em></p>
</blockquote>

<p>Even folks back in the 19th century people were familiar with the colloquial meaning of the “ton” and snake oil salesmen,
and would arrive at the same decision that maybe “metric ton” was a bit more linguistically appealing.</p>

<p>Finally, I saw this on Colfax today.
I like weird, but this might be a stretch.</p>

<p><img src="/assets/20251123_140819.jpg" alt="Supplies included!" /></p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[I recently perceived, for the first time, the phrase “metric fuckton.” Language is often parroted, as is behavior, and without constant self-examination we will forget that everything we’ve ever said and done was at one point the conscious decision of some - probably now-deceased - person. Something we’ve accepted without reflection as there is far too much shit in the world to be in a constant state of reflection on every new thing. Sometimes that examination is serious and meaningful; other times its silly. For example, imagine the phrase “metric fuckton.”]]></summary></entry><entry><title type="html">“My House Was Surrounded By Cornfields and I Was Depressed”</title><link href="https://ktbarrett.github.io/palaver/2025/11/06/midwest-emo.html" rel="alternate" type="text/html" title="“My House Was Surrounded By Cornfields and I Was Depressed”" /><published>2025-11-06T00:00:00+00:00</published><updated>2025-11-06T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/11/06/midwest-emo</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/11/06/midwest-emo.html"><![CDATA[<p>So I live in Denver now, which is basically the Midwest if you ask the Californians that keep move here for some fucking reason.
I was joking around with an old friend from Alabama about Midwest Emo songs being titled either extremely specific and nonsensical full-ass sentences,
e.g. “We Made Love On The Sheets I Rubbed My Cheetos-Stained Fingers On” or just single words which are people’s names like “Rudy” or “Carissa.”
This of course reminded me of <a href="https://youtu.be/BSaUXsaBnI8?si=46pVi0hyv46f7gEQ">Carissa - Sun Kill Moon</a>.</p>

<p>This friend of course had to look through Mark’s disco and found the song “This Is My First Day and I’m Indian and I Work At a Gas Station” which is <strong><em>THE</em></strong> Midwest-est song title of all time.</p>

<p>Anyways, this all went down at my local bar which was hosting a Karaoke night after the Broncos game.
It was a small gathering mostly inhabited by the servers/bartenders who had some interest in belting ABBA at the top of their lungs on company time (no shame).
I was asked if I wanted to sing and I declined because “I don’t know anything but sad songs.”
I don’t think they’d love to hear <a href="https://youtu.be/05njPSdMRzE?si=yWS65HwlJdfoJ4FR">The Anvil Will Fall by Harvey Milk</a>
or <a href="https://youtu.be/FSZxJpf1IHI?si=P64aTx-3OPKDkfah">Tango Till They’re Sore by Tom Waits</a>.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[So I live in Denver now, which is basically the Midwest if you ask the Californians that keep move here for some fucking reason. I was joking around with an old friend from Alabama about Midwest Emo songs being titled either extremely specific and nonsensical full-ass sentences, e.g. “We Made Love On The Sheets I Rubbed My Cheetos-Stained Fingers On” or just single words which are people’s names like “Rudy” or “Carissa.” This of course reminded me of Carissa - Sun Kill Moon.]]></summary></entry><entry><title type="html">“Otrovert”: Classifying Relationships With The “Other”</title><link href="https://ktbarrett.github.io/palaver/2025/10/20/otrovert.html" rel="alternate" type="text/html" title="“Otrovert”: Classifying Relationships With The “Other”" /><published>2025-10-20T00:00:00+00:00</published><updated>2025-10-20T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/10/20/otrovert</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/10/20/otrovert.html"><![CDATA[<p>I recently learned of the term “otrovert” which Gemini Overview defines as:</p>

<blockquote>
  <p>An otrovert is a term for a personality type, coined by psychiatrist Dr. Rami Kaminski, that describes individuals who do not seek to belong to groups but instead embrace their sense of “otherness” and independent thought.</p>
</blockquote>

<p>The main difference between an “introvert” or “extravert,” and an “otrovert”
(I will leave the parenthesis out from now on, but please read it as if they are still there =)
is that an otrovert may enjoy social contact, but does not orient their social behavior towards the group.
This is opposed to both introverts and extroverts, which, while having different focuses, still orient their social behavior towards the group.</p>

<p>An introvert may eventually grow tired of socializing and prefer personal time,
but when they are socializing they interact with other individuals via their group identity and shared values.
Otroverts will interact with other individuals as Unique (capitalization on purpose), disregard group identity, and give little importance to what is shared.</p>

<p>I can think of a couple such people, myself included.</p>

<p>While, this is fine an all, but just adds another arbitrary species in an incomplete taxonomy.
We should instead create species from conjunction of criteria and not simply ad-hoc.</p>

<p>So what are those criteria?
What is being classified by introvert, extrovert, and otrovert?</p>

<p>Well the answer is one’s relationship to the various “others.”
Give me a second to dig through a couple years worth of diary entries…</p>

<p>Now, lets enumerate the “others” an individual can come into relation with:</p>
<ul>
  <li>their material being</li>
  <li>themselves, spiritually</li>
  <li>themselves, through the lens of the group (religiously)</li>
  <li>themselves, through the lens of another individual (introspectively)</li>
  <li>another individual</li>
  <li>the group</li>
  <li>the god</li>
</ul>

<p>The introvert will prioritize relation with themselves, their material being, and possible the god both externally and internally reflective;
with the group and other individuals as secondary.
The extrovert will prioritize their relation with the group and god, both externally and internally.
The otrovert will reject the group and god and prioritize their spirituality, being, and possibly individual relations.</p>

<p>There are possibly more and better criteria for otherness and I’m simply unaware,
or it hasn’t been reasonably studied.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[I recently learned of the term “otrovert” which Gemini Overview defines as:]]></summary></entry><entry><title type="html">Zoology</title><link href="https://ktbarrett.github.io/palaver/2025/10/19/zoology.html" rel="alternate" type="text/html" title="Zoology" /><published>2025-10-19T00:00:00+00:00</published><updated>2025-10-19T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/10/19/zoology</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/10/19/zoology.html"><![CDATA[<p>It’s very weird to me that people are depicted as having dreams when they were younger that is somehow an indication of who they “truly” are.
There’s some Socratic stink there.
And some of the American Progressive obsession with innocence, Tabula Rasa, etc.</p>

<p>You know what I wanted to be when I was younger?
Well I was obsessed with dinosaurs like every white boy.
I was actually the only white boy I knew who was obsessed with them, but IYKYK.
So I wanted to be a student of the dinosaur, but not the extinction dinosaur, not the archeologist,
but the study of the alive-again dinosaur, a zoologist.</p>

<p>That’d still be cool.
Eh… maybe next year.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[It’s very weird to me that people are depicted as having dreams when they were younger that is somehow an indication of who they “truly” are. There’s some Socratic stink there. And some of the American Progressive obsession with innocence, Tabula Rasa, etc.]]></summary></entry><entry><title type="html">Palavering</title><link href="https://ktbarrett.github.io/palaver/2025/10/18/palavering.html" rel="alternate" type="text/html" title="Palavering" /><published>2025-10-18T00:00:00+00:00</published><updated>2025-10-18T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/10/18/palavering</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/10/18/palavering.html"><![CDATA[<p>I started up this section of the blog for small daily posts which can be kept separate from the long-form regular blog posts that deserve editing and thought.
This section is for drunken rambling and sharing fragments of ideas and experiences.
It’s better to spew and share any and all random thoughts and experiences than live a life unsaid and wonder what exactly you did with your time once its all passed.
Now I’ll have a long record of pointless crap I can proudly point to, “See I was alive!”</p>

<p>This section is titled after how Bohumil Hrabal described his style of writing.
Read “Too Loud A Solitude” if you haven’t.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[I started up this section of the blog for small daily posts which can be kept separate from the long-form regular blog posts that deserve editing and thought. This section is for drunken rambling and sharing fragments of ideas and experiences. It’s better to spew and share any and all random thoughts and experiences than live a life unsaid and wonder what exactly you did with your time once its all passed. Now I’ll have a long record of pointless crap I can proudly point to, “See I was alive!”]]></summary></entry><entry><title type="html">Aging</title><link href="https://ktbarrett.github.io/palaver/2025/10/17/aging.html" rel="alternate" type="text/html" title="Aging" /><published>2025-10-17T00:00:00+00:00</published><updated>2025-10-17T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/10/17/aging</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/10/17/aging.html"><![CDATA[<p>I decided to re-listen to an oldy but a goody: Nick Cave’s The Boatman’s Call.
It was what I used to listen to (and sing-along to) back in the day while grinding for that 100% in the Ratchet and Clank PS3 remakes
all while trying to ignore my un-ironic Neo-Nazi roommate’s mid-“sleep” rambling of beating people up
and my girlfriend-at-the-time’s attention-seeking texts.</p>

<p>It all made me quite nostalgic for the olden days,
so I pulled my PS3 out of storage to replay the Ratchet and Clank series
only to be met with disk-read issues and the now-defunct PSN activity message on all of my friend’s profiles “Last seen 10 years ago.”</p>

<p>Holymotherfuck. 10fuckingyears?</p>

<p>One of my friends who was the longest AFK was one I met playing on the PS2 and I randomly ran into during a game of S&amp;D on Array on BOps 1 on the PS3 before re-adding him.
His name was Chaos; we first met when I was 12 or 13. 19 years ago…</p>

<p>And of course a flood of people came back from that experience: Sheri, Aaron, Ghost and his wife, Maddog, JMan…</p>

<p>“Last online 10 years ago”… “19 years ago”…</p>

<p>I truly cannot fathom the fact I was alive and interacting with the world at large so long ago.
It was a very different world too: flip phones, Christian youth groups where everyone fucked and did PCP, queer was just a passing fad, my pet rabbit Spencer (female, lol, rabbits are hard to sex) was my best friend, driving random fuckheads all across the shore in my (dad’s) truck so I could make friends, being suicidally depressed most of the summer and only awakening from staring-at-the-ceiling catatonia to ensure my AP summer work was done, blowing off classes and walking around the zoo and park, reading webcomics, or trying to break into the school’s computer system.</p>

<p>There are multiple lifetimes of my own I could go on about, but I don’t even remember enough to do so.
Every time I go home I hear about shit I used to do when I was young and I can only just nod along and suggest “Yeah, that sounds like me, lol.”</p>

<p>There’s something to be said there about self-narrativization,
about distilling experience into an easily digestible form for others (and now I’m realizing, my own) benefit,
but that’s a multi-pager when I’m a bit less drunk.</p>

<p>There’s yet another post about nostalgia, oblivescence, and the meaning making of lost consciousness that me and Jaime had conversations about a couple years ago now that I should transcribe before I lose them.
“I Will Not Forget That I Have Forgotten.”</p>

<p>But what’s more interesting to me is the lifetimes of the people I’ve missed out on.
What have they done since middle school?
Yeah, you hold the world record in downhill derby times,
you struggled fitting in at the new school,
then you became popular and dropped me, but then what?
Special Ed teacher? Animal Crossing enthusiast?
You hurt me, but I still want more for you.
Even if it’s not “more”, I want to know its enough for you.</p>

<p>Anyways, I’ve been listening to <a href="https://youtu.be/Eam0GnzlfjU?si=1qc7syqdm5uvQj42">Man’s Gin - Smiling Dogs</a> a lot recently and it’s a great album for a Denverite to get into.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[I decided to re-listen to an oldy but a goody: Nick Cave’s The Boatman’s Call. It was what I used to listen to (and sing-along to) back in the day while grinding for that 100% in the Ratchet and Clank PS3 remakes all while trying to ignore my un-ironic Neo-Nazi roommate’s mid-“sleep” rambling of beating people up and my girlfriend-at-the-time’s attention-seeking texts.]]></summary></entry><entry><title type="html">Congress Park</title><link href="https://ktbarrett.github.io/palaver/2025/10/16/congress-park.html" rel="alternate" type="text/html" title="Congress Park" /><published>2025-10-16T00:00:00+00:00</published><updated>2025-10-16T00:00:00+00:00</updated><id>https://ktbarrett.github.io/palaver/2025/10/16/congress-park</id><content type="html" xml:base="https://ktbarrett.github.io/palaver/2025/10/16/congress-park.html"><![CDATA[<p>I just moved to Congress Park in Denver from Broomfield (Boulder-ish) recently.
The people here are quite a bit nicer.</p>

<p>I randomly bumped into someone when picking up my keys for the new place and told her I was moving in and we petted each other’s dogs.
She sent me a welcome letter and invited me to a community clean-up event on Sunday.
I never got anything like that at my last place; they would often just ignore you if you gave them a friendly “hi.”</p>

<p>Then yesterday went to the neighborhood bar and talked to the bartenders a bit and got free tickets to the concert going on down the street.
I had no idea who was playing, it was sold to me as “folk,” and why not? I didn’t have anything better to do…
But Willi Carlisle is the kind of folk people are talking about when they say “American Folk Music,”
it’s bluegrass and old country mixed with old union songs. Think Woody Guthrie or Pete Seeger.
It’s not really my thing, more my dad’s thing, but it was a cool experience never the less.</p>]]></content><author><name>Kaleb Barrett</name></author><category term="palaver" /><summary type="html"><![CDATA[I just moved to Congress Park in Denver from Broomfield (Boulder-ish) recently. The people here are quite a bit nicer.]]></summary></entry><entry><title type="html">What’s Next For cocotb</title><link href="https://ktbarrett.github.io/2025/04/26/whats-next-cocotb.html" rel="alternate" type="text/html" title="What’s Next For cocotb" /><published>2025-04-26T00:00:00+00:00</published><updated>2025-04-26T00:00:00+00:00</updated><id>https://ktbarrett.github.io/2025/04/26/whats-next-cocotb</id><content type="html" xml:base="https://ktbarrett.github.io/2025/04/26/whats-next-cocotb.html"><![CDATA[<p>I suppose it’s time for a state of the union, at least with respect to my own involvement in the cocotb project.</p>

<h2 id="history-of-cocotb">History of cocotb</h2>

<p>cocotb started in 2013 as a part of a startup by the original authors (Chris Higgs and Stuart Hodgson).
They worked on it until after the dissolution of the venture (date unknown) and a bit longer into 2016.
During that time they released the 1.0 version.
Then there was a period of no activity, prompting the popular issue originally posted by Patrick Lehmman <a href="https://github.com/cocotb/cocotb/issues/513">“Is Cocotb dead?”</a>.
But it was not dead yet…</p>

<p>In late 2018 the project was taken over by FOSSi, under the stead of Philipp Wagner.
He added the first new maintainers: Tomasz Hemperek, Colin Marquardt, and Eric Weiser.
Finally adding me and Marlon James in 2019 and 2020, respectively.
Since then, the cocotb maintainers have done 9 major releases in 7 years, with a tenth (2.0) looming.</p>

<p>The new ownership brought a new development/maintenance system: the shared maintainer model,
where the maintainers share responsibility for reviewing and merging contributions from other users rather than directly developing the code.
This was fine as the project had reached the limit of its scope,
it had hit 1.0,
it just needed bug fixes, documentation improvements, etc.
“Maintenance.”</p>

<p>Not to speak ill of the original authors,
they had great a great idea and developed a fairly complete prototype to prove that idea worked.
But as I said, they developed a prototype.
The new maintainers have spent the last 7 years fixing bugs and refactoring the code to increase the code quality, usability, and re-usability of the code,
all while trying not to break the ever-increasing user base.</p>

<p>We are very much trying to be a mature project that doesn’t need to massive rewrites that inadvertently break things.
2.0 is well over-due in that regard.
I’ve wanted to work on an API breaking change for years now,
but haven’t been in a good enough place to accomplish that,
nor have the other maintainers.</p>

<p>But now the future looks bright. Well, almost…</p>

<h2 id="the-future-of-cocotb">The Future Of cocotb</h2>

<p>If you asked me “Is cocotb the future?” I’d say “No. cocotb is <strong><em>now</em></strong>”.</p>

<p>“But will cocotb also be the future, say, 10 years from now?” “Almost certainly not in its current form.”</p>

<p>It already fails to do what many users need it to do.
People need performance and that comes in the form of moving more into the simulator with DPI and RTL Drivers and Monitors.
People need reuse of existing testbench infrastructure, such as UVM agents and TLM-based Drivers.
People need better reusability for with hardware testing.
People need a more featureful regression system.
And while all of that is currently <em>possible</em>, it isn’t readily available.
And cocotb is not “developing” any more.</p>

<p>cocotb will someday die, but it will live on, and not just in memory, if it’s up to me.
This will be accomplished by making the cocotb codebase more extensible and modular.</p>

<h2 id="against-prevailing-sentiments">Against Prevailing Sentiments</h2>

<p>EDA tooling hasn’t quite escaped the monolithic design style that is often valuable in commercial tools
(“please become dependent on our walled garden!”).
Even some FOSS EDA tools fail to escape that mental box.
But open source <strong>software</strong> hasn’t operated in that way in decades.</p>

<p>Modern open source software is built to do one thing and do it well.
And it does this by reusing and extending existing libraries.
Tools fall out of favor,
but the useful pieces will live on and mature.
Over time the useful pieces will ossify and become “core libraries/tools”.
That is how I see cocotb surviving into the next decade.</p>

<p>There are useful reusable pieces of cocotb like
the GPI and PyGPI in any other Python-based cosimulation framework,
and the scheduler, tasks, triggers, etc. in shared HW/simulation testing.
And there are less useful pieces, like the Makefiles and Python runner that most serious cocotb users have already ditched.</p>

<p>However the useful pieces aren’t in a state to be reusable right now.
Putting cocotb into that state will be the focus of my efforts on cocotb going forward.
I would hate to see useful software and tens of thousands of hours of development time go to waste.</p>

<h2 id="change-in-attitude">Change In Attitude</h2>

<p>As I mentioned cocotb uses a shared maintainer model, which is best fit for a post-main-development project.
However, if you ask me the cocotb of <strong><em>now</em></strong> still has a lot of improvement potential.
To me, how cocotb is maintained and and what I’d like to do with it don’t really align.
So I decided early last week that I was going to change how I was going to work on cocotb.</p>

<p>I started <a href="https://github.com/ktbarrett/coconext"><code class="language-plaintext highlighter-rouge">coconext</code></a> with the idea that it would be where I would develop new cocotb features;
where “massive rewrites that cause inadvertent changes” that are necessary for new development would be done.
All while letting the cocotb repo do what it should be doing and maturing.</p>

<p>Of course I will need to do changes to cocotb still, but I will do so even more judiciously than I already have been.
My current modus operandi has been to focus on refactors, bugs fixes, and new features to create improvements over existing functionality.
But I will no longer focus on developing new features in the cocotb repo;
that will be reserved for <code class="language-plaintext highlighter-rouge">coconext</code>.
The majority of my work going forward will be the necessary changes to cocotb to support features in <code class="language-plaintext highlighter-rouge">coconext</code>,
as well as refactoring changes to make cocotb more extensible and modular
(plus the obvious bugfixes, documentation improvements, etc.).</p>]]></content><author><name>Kaleb Barrett</name></author><summary type="html"><![CDATA[I suppose it’s time for a state of the union, at least with respect to my own involvement in the cocotb project.]]></summary></entry></feed>