
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Anna Liberty</title>
    <link rel="self" type="application/atom+xml" href="https://gracefulliberty.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://gracefulliberty.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-07T00:00:00+00:00</updated>
    <id>https://gracefulliberty.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Friction is an Anti-Feature</title>
        <published>2026-07-07T00:00:00+00:00</published>
        <updated>2026-07-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/notes/friction-is-an-antifeature/"/>
        <id>https://gracefulliberty.com/notes/friction-is-an-antifeature/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/notes/friction-is-an-antifeature/">&lt;p&gt;Writing is &lt;em&gt;hard&lt;&#x2F;em&gt;. I want to express my thoughts in a way that is helpful for other people, but also makes me proud. I want to be correct. I want to be informed. I don&#x27;t want my writing to contain blatant errors caused by poor editing.&lt;&#x2F;p&gt;
&lt;p&gt;This pressure adds inherent friction. So I reduce that friction. I write in Markdown, which is comfortable for me. I use a simple static site generator that gets out of my way. I push updates directly a repository which is built and published automatically. This is complicated for some people, but is comfortable for me.&lt;&#x2F;p&gt;
&lt;p&gt;I think others are in a similar place. While some people are comfortable throwing their words out there, others are concerned about their thoughts being perfect. More friction is the last thing we need.&lt;&#x2F;p&gt;
&lt;p&gt;For Philip, adding friction brings him to balance. For me, reducing it does.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>LLM Statement</title>
        <published>2026-06-30T00:00:00+00:00</published>
        <updated>2026-06-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/llms/"/>
        <id>https://gracefulliberty.com/llms/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/llms/">&lt;p&gt;I do not use LLMs or other &quot;Generative AI&quot; for prose or code, nor do I accept it from others as open source contributions.&lt;&#x2F;p&gt;
&lt;p&gt;I do not discuss my prose or code with LLMs.&lt;&#x2F;p&gt;
&lt;p&gt;I do not consult LLMs for projects, contributions, assignments, research, or anything else.&lt;&#x2F;p&gt;
&lt;p&gt;As far as possible and practicable, I have disabled LLM-integration in my tools and replaced tools that don&#x27;t let me do so.&lt;&#x2F;p&gt;
&lt;p&gt;Requests for me to use LLMs or read content generated by LLMs will be met with disappointment and gentle refusal.&lt;&#x2F;p&gt;
&lt;p&gt;I want to use my skills and engage with other people in the process.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;For programming, I write code myself, or generate it deterministically from higher-level instructions.&lt;&#x2F;p&gt;
&lt;p&gt;For writing, I use my brain and write it myself, revising it as needed.&lt;&#x2F;p&gt;
&lt;p&gt;For proofreading, I ask my friends.&lt;&#x2F;p&gt;
&lt;p&gt;For searching, I use domain-specific search tools and specific websites.&lt;&#x2F;p&gt;
&lt;p&gt;For learning, I seek out books, tutorials, and other educational material made by people.&lt;&#x2F;p&gt;
&lt;p&gt;For extra support, I ask experts in forums, chatrooms, or via email.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;publicdomain&#x2F;zero&#x2F;1.0&#x2F;&quot;&gt;CC0&lt;&#x2F;a&gt;: This work has been marked as dedicated to the public domain.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ambiguity in Natural Programming</title>
        <published>2026-06-27T00:00:00+00:00</published>
        <updated>2026-06-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/notes/ambiguity/"/>
        <id>https://gracefulliberty.com/notes/ambiguity/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/notes/ambiguity/">&lt;p&gt;I am once again thinking about programming in natural language.&lt;&#x2F;p&gt;
&lt;p&gt;For most programming languages, you can parse them according to strict grammars that eliminate their ambiguity. These can get ugly, especially for languages like C++ where one symbol can mean many different things depending on its context, but the code is, in theory, able to be parsed.&lt;&#x2F;p&gt;
&lt;p&gt;One of the biggest barriers for programming in natural languages, however, are their inherent ambiguity. Natural languages were optimized for efficiency and convenience in communicating between people. They were not designed for clearly communicating with machines.&lt;&#x2F;p&gt;
&lt;p&gt;This means that computer programs that try to understand natural language must do so stochastically. It is &lt;em&gt;likely&lt;&#x2F;em&gt; that the text means this. It is &lt;em&gt;possible&lt;&#x2F;em&gt; that a text means that. It&#x27;s impossible to work with certainty, even if we had a language model with perfect knowledge of a language and the surrounding cultures.&lt;&#x2F;p&gt;
&lt;p&gt;One answer is to embrace the probabilistic nature of language and use Large Language Models (LLMs) for natural language programming. After all, they can already write code that seems statistically likely based on natural language prompts. This approach embraces the chaos.&lt;&#x2F;p&gt;
&lt;p&gt;The other answer is to describe a strict subset of a language and use that. Instead of trying to let the computer understand the entirety of what a user is saying, make the user explain it in language the computer will understand. This is still a computer language, but something more like the user&#x27;s native language. This approach clings to rigidity.&lt;&#x2F;p&gt;
&lt;p&gt;Neither of these options are ideal, in my opinion. LLMs require a large amount of resources to use, shackling access to natural language programming to those who can pay to rent from large corporations or can afford an expensive GPU while costs are rising. Another computer language might ease new programmers into the concepts of programming, but they are still forced to describe their problems in a rigid language that punishes straying from its parser.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d like to propose a combination of the two. A language model that parses natural language but checks back in with the user to see if it has understood. This can be done by converting high-ambiguity sentences to low-ambiguity ones when appropriate and storing the latter as source. When the interpretation program is confused, it can check back in with the user to ask what they meant.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few important differences between this and programming with an LLM. First, the source is unambiguous natural language, not prompts. This means we can retain deterministic pipelines and reproducible builds. Second, the language model needs to parse, not generate. This should mean that we can use models that are less expensive to run, opening it up to be used more wildly.&lt;&#x2F;p&gt;
&lt;p&gt;The goal is &lt;a href=&quot;&#x2F;articles&#x2F;towards-understandable-software&#x2F;&quot;&gt;understandability&lt;&#x2F;a&gt;. A system that produces consistent output based on given input is more understandable than one that doesn&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;In summary, there would be three main layers:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Natural language (parsed by a language model)&lt;&#x2F;li&gt;
&lt;li&gt;Computer language (subset of a natural language)&lt;&#x2F;li&gt;
&lt;li&gt;Language-agnostic IR&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The computer language is still considered the &quot;source code&quot;. It is a common-ground understanding between both the user and the machine. It is expected that such a programming environment convert between the natural language to the computer language live to provide immediate feedback.&lt;&#x2F;p&gt;
&lt;p&gt;Once this is done, the computer language can be compiled into a language-agnostic IR that can then be compiled or interpreted. I say language-agnostic because the top-level natural language should be any language the user desires.&lt;&#x2F;p&gt;
&lt;p&gt;I haven&#x27;t made a proof of concept yet, because this is outside of the realm of my current expertise. The current state of Natural Language Processing (NLP) is focused on LLMs and generating text, not interpreting it. I don&#x27;t know if there are robust solutions for machines to understand human text beyond simply transforming it directly.&lt;&#x2F;p&gt;
&lt;p&gt;If anyone reading this has any suggestions or knows of any existing research in this area, please contact me! I&#x27;d love to hear your thoughts.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Returning to Zig</title>
        <published>2026-06-10T00:00:00+00:00</published>
        <updated>2026-06-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/articles/return-to-zig/"/>
        <id>https://gracefulliberty.com/articles/return-to-zig/</id>
        
        <summary type="html">&lt;p&gt;Zig is rising in popularity. It hasn&#x27;t yet seized the space occupied by even Rust or Go, much less C, but it has been adopted by a few major projects and countless smaller ones. As such, it&#x27;s becoming an important language for the future. having been interested in Zig for several years, I decided to check back in on the language and see how I feel about it today.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A Pragmatic Approach to LLMs</title>
        <published>2026-06-08T00:00:00+00:00</published>
        <updated>2026-06-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/articles/pragmatic-llms/"/>
        <id>https://gracefulliberty.com/articles/pragmatic-llms/</id>
        
        <summary type="html">&lt;p&gt;I don&#x27;t vibecode. I don&#x27;t use LLMs willingly. Every line of code I write is my own or generated deterministically through a process I fully understand. Considering the world is divided over LLMs these days, I wanted to share my particular perspective on why I chose the path I have, as well as some of the places I do think LLMs are appropriate.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Ditch LinkedIn. Make a Website</title>
        <published>2026-06-05T00:00:00+00:00</published>
        <updated>2026-06-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/articles/linkedin/"/>
        <id>https://gracefulliberty.com/articles/linkedin/</id>
        
        <summary type="html">&lt;p&gt;I have never been an active user of LinkedIn. I created an account a couple of months ago after a professor told me I should have a presence there. I was skeptical, but decided it was important enough to have access to any opportunities and connections I would have otherwise be missing.&lt;&#x2F;p&gt;
&lt;p&gt;I no longer have access to my account. I recently tried to log in and was met with a friendly greeting.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Scheme is a Hoot</title>
        <published>2026-05-21T00:00:00+00:00</published>
        <updated>2026-05-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/notes/scheme-is-a-hoot/"/>
        <id>https://gracefulliberty.com/notes/scheme-is-a-hoot/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/notes/scheme-is-a-hoot/">&lt;p&gt;Lately I&#x27;ve been spending time learning Scheme and using it to implement the concepts I&#x27;m learning in my physics classes as time permits. One of the most exciting things I&#x27;ve been doing with this is getting my Scheme to compile to the Web thanks to Hoot.&lt;&#x2F;p&gt;
&lt;p&gt;One of the biggest challenges has been the fact that Hoot is unstable. It&#x27;s currently at version 0.9.0. The documentation is decent, but it could be better. The error messages can be cryptic. But it&#x27;s a massive accomplishment to see Scheme code running on the Web via WASM. It&#x27;s even more incredible to know that it&#x27;s running on a stack the team created themselves, not relying on Emscripten.&lt;&#x2F;p&gt;
&lt;p&gt;My initial understanding of Hoot was that it could compile any Guile program to the Web. I quickly learned that I was mistaken when my code wouldn&#x27;t compile. I then ported my code to use the Hoot versions of all of the functions, causing my code to be unable to run independently from Hoot. I then realized that Hoot actually supported &lt;em&gt;more&lt;&#x2F;em&gt; of Guile than I thought. I just had to manually import a lot of the stuff I previously took for granted.&lt;&#x2F;p&gt;
&lt;p&gt;Now I have set up my code to run on native Guile and on WASM via Hoot, with tests automatically running in both to make sure everything&#x27;s set up correctly for both environments. It&#x27;s a bit of a pain, but it works now. Most of my code is agnostic to whether it&#x27;s running with the system&#x27;s Guile interpreter or if it&#x27;s been compiled to WASM and being run in the browser. I think that&#x27;s amazing.&lt;&#x2F;p&gt;
&lt;p&gt;Currently, most of the work I&#x27;ve done has been on the backend. Working on getting this whole setup to work at all has been a hassle. I&#x27;ve also been working on getting the more fundamental physics logic working, which is especially difficult as a someone new to Scheme. But I&#x27;ve been making progress, and I&#x27;ve published a small prototype &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gracefulliberty.com&#x2F;physics&#x2F;&quot;&gt;on a new page on my website&lt;&#x2F;a&gt; and have &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;liberty&#x2F;physics&quot;&gt;published the source code&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In the future I&#x27;m curious to see if it&#x27;s reasonable to compile Zig + Scheme programs to the Web with Hoot. I&#x27;m starting to feel more and more that Zig + Scheme is the perfect combination and I want to do more experimentation in that direction. That may be too complicated! I don&#x27;t know yet. There&#x27;s a lot for me to learn in the WASM world, and that&#x27;s a large part of the fun.&lt;&#x2F;p&gt;
&lt;p&gt;This has been an insightful exploration into the depths of Scheme. I can&#x27;t wait to do even more.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Is it time to use Zig?</title>
        <published>2026-04-16T00:00:00+00:00</published>
        <updated>2026-04-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/notes/time-for-zig/"/>
        <id>https://gracefulliberty.com/notes/time-for-zig/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/notes/time-for-zig/">&lt;p&gt;Is it time for me to finally start writing Zig? I used to use it (and make minor contributions) years ago but got demoralized by constantly rewriting my code with updates.&lt;&#x2F;p&gt;
&lt;p&gt;But it seems like a solid language and one that will only increase in prevalence in the coming years.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Teaching Kids Forth</title>
        <published>2026-04-14T00:00:00+00:00</published>
        <updated>2026-04-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/articles/teaching-kids-forth/"/>
        <id>https://gracefulliberty.com/articles/teaching-kids-forth/</id>
        
        <summary type="html">&lt;p&gt;Forth is uncommonly used to teach programming to kids. Scripting languages like Python and visual environments like Scratch are far more popular options. But when I got the opportunity to introduce middle and high school students to programming, I chose the stack-oriented concatenative language from 1970.&lt;&#x2F;p&gt;
&lt;p&gt;I was ecstatic about this opportunity. I&#x27;m passionate about giving people just a bit more control over the potential locked up in the devices they carry with them every day. When people know more about computers in general and about making their own software in particular, whole worlds open up. This gave me the chance to pry the door to that world open for people who likely would have never discovered it otherwise.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Learning Special Relativity</title>
        <published>2026-04-13T00:00:00+00:00</published>
        <updated>2026-04-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/notes/relativity-excitement/"/>
        <id>https://gracefulliberty.com/notes/relativity-excitement/</id>
        
        <content type="html" xml:base="https://gracefulliberty.com/notes/relativity-excitement/">&lt;p&gt;The number of ah-ha! moments I&#x27;ve had when learning about special relativity is incredible (at the cost of the constant pain of &quot;how on earth is this possible&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;I knew how to do Lorentz transformations before and even wrote some code to represent them, but now I&#x27;m finally building an intuition for special relativity instead of primarily relying on the equations.&lt;&#x2F;p&gt;
&lt;p&gt;Can&#x27;t wait for general relativity to mess it up once again!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Towards Understandable Software</title>
        <published>2026-03-07T00:00:00+00:00</published>
        <updated>2026-03-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Anna Liberty
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gracefulliberty.com/articles/towards-understandable-software/"/>
        <id>https://gracefulliberty.com/articles/towards-understandable-software/</id>
        
        <summary type="html">&lt;p&gt;Programming sucks. Code sucks. It&#x27;s hard to read, hard to test, and hard to maintain. Only a handful of people can understand any particular software project. These are major problems. I&#x27;m here to explain how we can fix them.&lt;&#x2F;p&gt;</summary>
        
    </entry>
</feed>
