<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title></title>
    <link rel="self" type="application/atom+xml" href="https://3b.nz/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://3b.nz"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-28T00:00:00+00:00</updated>
    <id>https://3b.nz/atom.xml</id>
    <entry xml:lang="en">
        <title>I really like Manifold library.</title>
        <published>2026-04-28T00:00:00+00:00</published>
        <updated>2026-04-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              3bnz
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://3b.nz/posts/manifold/"/>
        <id>https://3b.nz/posts/manifold/</id>
        
        <content type="html" xml:base="https://3b.nz/posts/manifold/">&lt;p&gt;Is it me or is it just a fantasy? With &lt;code&gt;let joke = 67;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; f64&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; f64&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; f64&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  a&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Let&#x27;s quote an author:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Who is right here &lt;strong&gt;bold&lt;&#x2F;strong&gt; &lt;em&gt;italic&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;subtitle&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#subtitle&quot; aria-label=&quot;Anchor link for: subtitle&quot;&gt;Subtitle&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This is a table:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Product ID&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Item Name&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Price&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Stock Status&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;#1024&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Wireless &lt;code&gt;Mouse&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;$25.00&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;In Stock&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;#1025&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Mechanical Keyboard&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;$89.99&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Low Stock&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;#1026&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;USB-C Cable (1m)&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;$9.50&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Out of Stock&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;paragraph&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#paragraph&quot; aria-label=&quot;Anchor link for: paragraph&quot;&gt;Paragraph&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;If you are designing a mobile app or website and want to use Figma’s native
Variables feature to automatically flip your UI mockups from light to dark mode
with a single click, this is locked behind a paid plan.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;spf&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spf&quot; aria-label=&quot;Anchor link for: spf&quot;&gt;SPF&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;sender policy framework&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Is this server allowed to send for this domain?&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Lists valid send servers for the domain&lt;&#x2F;li&gt;
&lt;li&gt;Format: &lt;code&gt;v=spf1 [mechanisms] [qualifier]~all&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;dkim&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dkim&quot; aria-label=&quot;Anchor link for: dkim&quot;&gt;DKIM&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;domain keys identified mail&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Is this email authentic and unmodified?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Contains sending servers public key, which is used to sign mails&lt;&#x2F;li&gt;
&lt;li&gt;Can be pointed to via CNAME record&lt;&#x2F;li&gt;
&lt;li&gt;Format: &lt;code&gt;v=DKIM1; k=rsa; p=[base_64_public_key]&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;dmarc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dmarc&quot; aria-label=&quot;Anchor link for: dmarc&quot;&gt;DMARC&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;domain-based message authentication reporting and conformance&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What to do, if it fails?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Contains policy for handling failures&lt;&#x2F;li&gt;
&lt;li&gt;Format: &lt;code&gt;v=DMARC1; p=[none|quarantine|reject&amp;gt;; rua=mailto:abuse@example.com&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Forbid &lt;code&gt;user@subdomain.example.com&lt;&#x2F;code&gt; for &lt;em&gt;SPF&lt;&#x2F;em&gt; and &lt;em&gt;DKIM&lt;&#x2F;em&gt; by setting
&lt;code&gt;adkim=[s|r]; aspf=[s|r]&lt;&#x2F;code&gt; to strict &lt;code&gt;s&lt;&#x2F;code&gt;. Default is &lt;code&gt;r&lt;&#x2F;code&gt; - relaxed&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Color Naming</title>
        <published>2025-10-05T00:00:00+00:00</published>
        <updated>2025-10-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              3bnz
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://3b.nz/posts/color-naming/"/>
        <id>https://3b.nz/posts/color-naming/</id>
        
        <content type="html" xml:base="https://3b.nz/posts/color-naming/">&lt;blockquote&gt;
&lt;p&gt;Naming colors should should be easy right? You&#x27;d be surprised how much time
and brain-power is spent figuring this out.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;While theming might appear simple at first glance a fair bit of complexity can
appear once full context is taken into account. Some common challenges include,
but are not limited to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Theme&#x27;s target changing over time i.e. handling deprecation&lt;&#x2F;li&gt;
&lt;li&gt;Inability to assume theme authors having full context of the software&lt;&#x2F;li&gt;
&lt;li&gt;Accessibility requirements like
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;WCAG21&#x2F;#dfn-contrast-ratio&quot;&gt;contrast&lt;&#x2F;a&gt; or color
blindness&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As the project grows in scale (and age) I&#x27;ve seen theming going through often
predictable stages with &lt;strong&gt;Stage 0&lt;&#x2F;strong&gt; being copy-pasting &lt;code&gt;#HEX&lt;&#x2F;code&gt; codes from the
design into the codebase.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stage-one&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stage-one&quot; aria-label=&quot;Anchor link for: stage-one&quot;&gt;Stage One&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Referencing by &lt;strong&gt;WHAT&lt;&#x2F;strong&gt; color is used&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;color-naming&#x2F;pantone.webp&quot; alt=&quot;Pantone&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A common practice to ensure consistency is limiting colors to a finite set
called &lt;strong&gt;palette&lt;&#x2F;strong&gt;. The palette colors often come with a &lt;em&gt;marketing name&lt;&#x2F;em&gt; like
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;margaret2.github.io&#x2F;pantone-colors&quot;&gt;Pantone&#x27;s&lt;&#x2F;a&gt; &lt;strong&gt;Seashell Pink&lt;&#x2F;strong&gt; or
&lt;strong&gt;Ruby Wine&lt;&#x2F;strong&gt;. While these names do a great job at conveying the artisanal color
picking and evoke abstract associations, they often fall short at being used as
references for few reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Having reference that leaks information about the color itself restricts what
it can reasonably point to&lt;&#x2F;li&gt;
&lt;li&gt;Its easy to &lt;em&gt;&quot;theme yourself into a corner&quot;&lt;&#x2F;em&gt; where you will end up doing a lot
of &lt;code&gt;find &amp;amp; replace&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;These names carry &lt;strong&gt;no information about how they are used&lt;&#x2F;strong&gt; in the project
making it trivial to use them in an inconsistent way&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Great example of direct palette usage is present in terminal emulators, which
allow &lt;em&gt;theming&lt;&#x2F;em&gt; the first
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ANSI_escape_code#Colors&quot;&gt;16 ANSI Colors&lt;&#x2F;a&gt;. Some
fascinating historical accounts can be found on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;invisible-island.net&#x2F;xterm&#x2F;xterm.faq.html&quot;&gt;xterm&#x27;s FAQ&lt;&#x2F;a&gt; where the
maintainers answer questions such as:
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;invisible-island.net&#x2F;xterm&#x2F;xterm.faq.html#dont_like_blue&quot;&gt;I don&#x27;t like that shade of blue&lt;&#x2F;a&gt;
with &quot;Nobody Does...&quot; 😀.&lt;br &#x2F;&gt;
Additionally, if we look at the wide variety of interpretations of color
&lt;em&gt;Yellow&lt;&#x2F;em&gt; over the years,&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;color-naming&#x2F;yellow.webp&quot; alt=&quot;Yellow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stage-two&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stage-two&quot; aria-label=&quot;Anchor link for: stage-two&quot;&gt;Stage Two&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Referencing by &lt;strong&gt;WHERE&lt;&#x2F;strong&gt; a color is used&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The next logical step to solve Stage 1 issues is to name colors by where they
are used instead. Think of references like &lt;code&gt;scrollbar&lt;&#x2F;code&gt;,
&lt;code&gt;modalPopoverBackground&lt;&#x2F;code&gt;, &lt;code&gt;loginBorder&lt;&#x2F;code&gt; etc. For smaller projects and&#x2F;or
projects that don&#x27;t change too much this approach actually works quite well. For
large or dynamic projects I have experienced of two main issues:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1. Maintainability&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Size of the theme grows &lt;strong&gt;linearly&lt;&#x2F;strong&gt; with the project which might still be
manageable.&lt;&#x2F;li&gt;
&lt;li&gt;The time it takes to create a new theme can see a &lt;strong&gt;quadratic increase&lt;&#x2F;strong&gt;
though, since for every color themes author has to find, where it&#x27;s used.&lt;&#x2F;li&gt;
&lt;li&gt;When adding new features to the software there are now &lt;code&gt;n!&lt;&#x2F;code&gt; 🙀 possible color
transitions. This makes it almost impossible not to break existing themes
without increasing reference count even further.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;2. Barrier of Entry&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This tight coupling also means that the theme authors are required to have
&lt;strong&gt;full&lt;&#x2F;strong&gt; understanding of the software. Let&#x27;s look at
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ableton.com&#x2F;en&#x2F;live&#x2F;what-is-live&#x2F;&quot;&gt;Ableton LIVE&lt;&#x2F;a&gt; - a fairly complex
audio workstation, which has a thriving theming community. Creating themes for
it is not trivial. Good luck finding where colors like
&lt;code&gt;ViewCheckControlDisabledOff&lt;&#x2F;code&gt; is used in the software within 160 other
references. To mitigate the issue people have been creating tools like
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.livethemes.co&quot;&gt;livethemes&lt;&#x2F;a&gt; with an online GUI theme editor, but
that is not ideal either as the tool has to be constantly maintained. Looking at
their &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.livethemes.co&#x2F;faq&quot;&gt;FAQ&lt;&#x2F;a&gt; the issues become more apparent:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Will these themes work in Ableton 11?&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Early tests show are they do work in Ableton 11 but are not fully optimized
for it. As soon as the final version of Ableton 11 gets released we&#x27;ll get
working on a &#x27;Download for Ableton 11&#x27; option.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I can&#x27;t find {insert element here} to customize.&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
There are lots of elements you can customize within a theme, and unfortunately
we haven&#x27;t been able to map all of them to the preview yet...&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As we can see, this approach starts to fall apart when number of colors approach
triple digits due to the non-linear nature of growth in complexity. The tricky
part is that the issues only reveal themselves after the project is already
large and refactoring has become a significant effort.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stage-three&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stage-three&quot; aria-label=&quot;Anchor link for: stage-three&quot;&gt;Stage Three&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Referencing by &lt;strong&gt;HOW&lt;&#x2F;strong&gt; a color relates to other colors&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This approach introduces an abstraction layer between the software and palette.
The colors are named by how they are used &lt;strong&gt;in relation to other colors&lt;&#x2F;strong&gt;. Like
&lt;code&gt;foreground&lt;&#x2F;code&gt; being used to draw text on &lt;code&gt;background&lt;&#x2F;code&gt; or &lt;code&gt;accent&lt;&#x2F;code&gt; being used
sparingly to guide user&#x27;s attention. The color names ideally do not leak any
implementation details from the software itself or exact colors used. The format
of the theme only defines a set of requirements like minimum contrast or
matching perceived luminance. This approach also makes themes portable and
enables them to be used across various applications, which is why this approach
is often used UI Frameworks and operating systems.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;example&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#example&quot; aria-label=&quot;Anchor link for: example&quot;&gt;Example&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;As an example let&#x27;s imagine that we are building a CLI application and that we
would like to use the existing 16 ANSI colors for compatibility. While we can&#x27;t
anticipate every color palette it would be very helpful to precisely define what
our expectations are using a graph. This can be done in few steps:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Rename the main colors to reflect their usage like
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bright-black&lt;&#x2F;code&gt; → &lt;code&gt;primaryBackground&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;normal-red&lt;&#x2F;code&gt; → &lt;code&gt;error&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;etc...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Create an undirected graph that describes the contrast requirements
&lt;ul&gt;
&lt;li&gt;I&#x27;ve grouped the colors to reduce the number of connections required&lt;&#x2F;li&gt;
&lt;li&gt;The connections describe minimum perceived contrast requirement for drawing
text&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;color-naming&#x2F;graph.svg&quot; alt=&quot;diagram&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With this abstraction in place:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Graph can now serve as an interface between creators of the theme and software
authors.&lt;&#x2F;li&gt;
&lt;li&gt;It enables colors to be applied consistently when adding new features.&lt;&#x2F;li&gt;
&lt;li&gt;Themes can now also be validated without explicit knowledge of current as well
as future software implementations.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;Conclusion&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;In this article I outlined three ways of referencing colors:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Approach&lt;&#x2F;th&gt;&lt;th&gt;Description&lt;&#x2F;th&gt;&lt;th&gt;Example&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;By &lt;strong&gt;WHAT&lt;&#x2F;strong&gt; color is used&lt;&#x2F;td&gt;&lt;td&gt;naive approach&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;burgundyRed&lt;&#x2F;code&gt;, &lt;code&gt;paleBlue&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;By &lt;strong&gt;WHERE&lt;&#x2F;strong&gt; a color is used&lt;&#x2F;td&gt;&lt;td&gt;works, but has scalability issues&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;buttonTitle&lt;&#x2F;code&gt;, &lt;code&gt;scrollbar&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;By &lt;strong&gt;HOW&lt;&#x2F;strong&gt; a colors relate&lt;&#x2F;td&gt;&lt;td&gt;recommended&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;background&lt;&#x2F;code&gt;, &lt;code&gt;accent&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;I discussed how theming progresses from basic copy-pasting to more sophisticated
approaches with each stage addressing specific challenges, with the ultimate
goal of simplifying theme management and ensuring consistency and scalability
across projects.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Atreus Keyboard</title>
        <published>2024-01-01T00:00:00+00:00</published>
        <updated>2024-01-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              3bnz
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://3b.nz/posts/atreus/"/>
        <id>https://3b.nz/posts/atreus/</id>
        
        <content type="html" xml:base="https://3b.nz/posts/atreus/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;atreus&#x2F;front.webp&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A keyboard with 42 key &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;atreus.technomancy.us&quot;&gt;Atreus&lt;&#x2F;a&gt; layout. Uses
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.kailh.com&#x2F;en&#x2F;Products&#x2F;Ks&#x2F;CS&#x2F;&quot;&gt;Kailh Choc&lt;&#x2F;a&gt; low profile switches with
hot-swap sockets. Compatible with ProMicro type controllers, but designed to be
used with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nicekeyboards.com&#x2F;nice-nano&quot;&gt;Nice!Nano&lt;&#x2F;a&gt;. Capable of n-key
rollover. There is enough spacing between keys to fit all of the commonly
available keycaps - transparent, flat and concave. PCB and case exports
available in the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;levitatingpineapple&#x2F;atreus&#x2F;tree&#x2F;main&#x2F;export&quot;&gt;github repo&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;materials&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#materials&quot; aria-label=&quot;Anchor link for: materials&quot;&gt;Materials&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;&#x2F;th&gt;&lt;th&gt;Part&lt;&#x2F;th&gt;&lt;th&gt;Size&lt;&#x2F;th&gt;&lt;th&gt;Amount&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Switch&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;..switch.pdf&quot;&gt;CPG135001D0X&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;42&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Socket&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;..socket.pdf&quot;&gt;CPG135001S30&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;42&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Diode&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;..diode.pdf&quot;&gt;1N4148&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;SOD123&lt;&#x2F;td&gt;&lt;td&gt;42&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Controller&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;..controller.png&quot;&gt;nice!nano&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Battery&lt;&#x2F;td&gt;&lt;td&gt;XZK 301230&lt;&#x2F;td&gt;&lt;td&gt;30x12x3.0mm&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bolt&lt;&#x2F;td&gt;&lt;td&gt;M2 Hex&lt;&#x2F;td&gt;&lt;td&gt;4mm&lt;&#x2F;td&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Machine Headers&lt;&#x2F;td&gt;&lt;td&gt;Mill-Max&lt;&#x2F;td&gt;&lt;td&gt;13p 3mm&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;pcb&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#pcb&quot; aria-label=&quot;Anchor link for: pcb&quot;&gt;PCB&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;atreus&#x2F;pcb.webp&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;⚠️ No power switch for the battery&lt;&#x2F;li&gt;
&lt;li&gt;For every switch has a diode, soldered where an backlight LED would normally
be located, providing n-key rollover.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;sockets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sockets&quot; aria-label=&quot;Anchor link for: sockets&quot;&gt;Sockets&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;atreus&#x2F;battery.webp&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The PCB has 1.5mm wide holes for mounting the controller socket. This allows
soldering machine headers flush with the board. The nice!nano controller
originally ships with low profile headers, which won&#x27;t fit the battery
underneath the controller, if soldered in this manner. Therefore a pair of 3mm
tall headers had to be separately ordered.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;case&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#case&quot; aria-label=&quot;Anchor link for: case&quot;&gt;Case&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;atreus&#x2F;exploded.webp&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All 3d printing was done with 0.4mm nozzle at 0.2mm layer height from PETG.&lt;&#x2F;li&gt;
&lt;li&gt;The bottom case is attached using eight 4mm long M2 bolts.&lt;&#x2F;li&gt;
&lt;li&gt;Added feet using 1mm thick rubber tape&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;led&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#led&quot; aria-label=&quot;Anchor link for: led&quot;&gt;Led&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;3b.nz&#x2F;posts&#x2F;atreus&#x2F;leds.webp&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In the nice!nano&#x27;s cover there are two openings for the LEDs. They can be filled
with a dab of hot-glue before the print is removed form the bed to get a more
diffused look &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;p7GDyWs1uLk&quot;&gt;&lt;em&gt;...for science, you monster.&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
