<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" >

  <title>Erik L. Arneson — Writer and Software Developer</title>
  <subtitle>Erik L. Arneson is a freelance writer and software developer with WordPress experience. He is located in Portland, Oregon.</subtitle>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="https://arnesonium.com/feeds/c.xml" rel="self" type="application/atom+xml" />
  <link href="https://arnesonium.com/" rel="alternate" type="text/html" />
  <updated>2026-06-18T15:03:10+00:00</updated>
  <id>https://arnesonium.com/feeds/c.xml</id>
  <author>
    <name>Erik L. Arneson</name>
  </author>
      <entry>
        
        <title>Arduino Planetary Hours library</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2017/05/arduino-planetary-hours-library/" rel="alternate" type="text/html" title="Arduino Planetary Hours library" />
        <updated>2017-05-01T18:30:35+00:00</updated>
        <id>https://arnesonium.com/2017/05/arduino-planetary-hours-library</id>
          <category term="arduino" />
        
          <category term="c" />
        
          <category term="planetary-hours" />
        
          <category term="programming" />
        <content type="html" xml:base="https://arnesonium.com/2017/05/arduino-planetary-hours-library/">&lt;p&gt;I am finally announcing my &lt;a href=&quot;https://bitbucket.org/arnesonium/planetaryhours&quot;&gt;PlanetaryHours library for the Arduino&lt;/a&gt;. This library uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun_rise()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sun_set()&lt;/code&gt; functions from the &lt;a href=&quot;http://www.nongnu.org/avr-libc/user-manual/group__avr__time.html&quot;&gt;avr-libc time.h&lt;/a&gt; library to calculate planetary hours.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;button&quot; href=&quot;https://bitbucket.org/arnesonium/planetaryhours/get/v1.0.zip&quot;&gt;Download v1.0 Here&lt;/a&gt;
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Planetary hours are an old method of figuring out which planets are “in charge” at any moment. For more information on planetary hours, check out these resources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.renaissanceastrology.com/planetaryhoursarticle.html&quot; target=&quot;_blank&quot;&gt;http://www.renaissanceastrology.com/planetaryhoursarticle.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.esotericarchives.com/agrippa/agripp2c.htm#chap34&quot; target=&quot;_blank&quot;&gt;http://www.esotericarchives.com/agrippa/agripp2c.htm#chap34&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can set up a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PlanetaryHour&lt;/code&gt; object by passing it a time zone offset in hours, a latitude, and a longitude. The following example might help.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define MYZONE -7
&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;PlanetaryHour&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;ph&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MYZONE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;45.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;122.7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, you can check the ruling planet of the current day and hour with an RTC or other time-keeping mechanism.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;time_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unixtime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UNIX_OFFSET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;uint8_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dayPlanet&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ph&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dayPlanet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;uint8_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hourPlanet&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ph&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hourPlanet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The return value of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dayPlanet()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hourPlanet()&lt;/code&gt; is a number from 0 to 6, corresponding to the Chaldean planetary order.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define SATURN 0
#define JUPITER 1
#define MARS 2
#define SUN 3
#define VENUS 4
#define MERCURY 5
#define MOON 6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I’ll be posting an article on &lt;a href=&quot;http://www.arnemancy.com/&quot; target=&quot;_blank&quot;&gt;the Arnemancy blog&lt;/a&gt; outlining a project I just installed using this library and some &lt;a href=&quot;https://www.adafruit.com/category/168&quot; target=&quot;_blank&quot;&gt;NeoPixels&lt;/a&gt;. I really look forward to seeing what others end up doing with this code!&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;button&quot; href=&quot;https://bitbucket.org/arnesonium/planetaryhours/get/v1.0.zip&quot;&gt;Download v1.0 Here&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>An English-language Stemmer for OCaml</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2014/12/an-english-language-stemmer-for-ocaml/" rel="alternate" type="text/html" title="An English-language Stemmer for OCaml" />
        <updated>2014-12-29T16:47:38+00:00</updated>
        <id>https://arnesonium.com/2014/12/an-english-language-stemmer-for-ocaml</id>
          <category term="c" />
        
          <category term="ocaml" />
        
          <category term="opam" />
        
          <category term="programming" />
        <content type="html" xml:base="https://arnesonium.com/2014/12/an-english-language-stemmer-for-ocaml/">&lt;p&gt;A stemming algorithm attempts to reduce words to their stem. For instance, “swimming” would be reduced to “swim”, and “avocados” would become “avocado”. This is useful in a number of situations, most especially in searching text. This library is a direct port of the Porter English stemming algorithm.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;It was one of my first OCaml projects. I wrote it back in 2003, when I was still new to the language. I had been spending a lot of time writing C libraries that were being called by Perl scripts for my day job. Perl has, or had, a cumbersome, messy interface to C that made such interfaces very difficult to write and maintain.&lt;/p&gt;

&lt;p&gt;When I discovered how easy it was to link C libraries into OCaml, I was overjoyed! This was my first attempt. Before reading further, check out my &lt;a href=&quot;https://github.com/pymander/ocaml-stemmer&quot;&gt;ocaml-stemmer library on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Updating the Code&lt;/h2&gt;

&lt;p&gt;Recently, while overhauling all of my publicly-available code, I decided to update my English-language stemmer for OCaml. It’s not a very large piece of code, but its age really shows. It wouldn’t compile cleanly with the latest version of OCaml. It looks like the code of somebody who hasn’t really grokked functional programming yet. Just look at this.&lt;/p&gt;

&lt;div class=&quot;language-ocaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;rec&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;replace_end&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;word&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rule_list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rule_list&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;hd&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;::&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match_rule&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;word&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rule&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hd&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rule&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apply_rule&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;word&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;replace_end&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;word&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;word&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ouch, right?&lt;/p&gt;

&lt;p&gt;I decided that the scary code would stand as a good message ((Or maybe I should say a good warning.)) to future functional programmers. For now, I just wanted to get this code to compile and not look messy. That ended up being easy.&lt;/p&gt;

&lt;h2&gt;Finding The Bug&lt;/h2&gt;

&lt;p&gt;Once I got it compiled cleanly, however, I found a bug. Back in 2003, I was big on test-driven development. I wrote tests for lots of code. The OCaml stemmer, it turns out, has been broken for quite a while. It doesn’t handle words with apostrophes correctly!&lt;/p&gt;

&lt;p&gt;I thought that fixing the bug it would be a challenge. However, I quickly I discovered in the OCaml manual that the &lt;code&gt;or&lt;/code&gt; operator was deprecated, and that &lt;code&gt;||&lt;/code&gt; should be used instead. Embarrassingly, the &lt;code&gt;or&lt;/code&gt; operator was deprecated back in 2002. That never should have been in the code! You can view the &lt;a href=&quot;https://github.com/pymander/ocaml-stemmer/commit/40cb816c4d97eea0d51de0f66533c09011f6cbd0&quot; target=&quot;_blank&quot;&gt;commit which fixed the bug here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;My Stemmer Library is Now on OPAM&lt;/h2&gt;

&lt;p&gt;This is my second library on &lt;a href=&quot;http://opam.ocaml.org/&quot; target=&quot;_blank&quot;&gt;OPAM&lt;/a&gt;, including my &lt;a href=&quot;http://arnesonium.com/2014/12/camlprime-now-on-opam/&quot; title=&quot;Camlprime Now on OPAM&quot; target=&quot;_blank&quot;&gt;prime number library&lt;/a&gt;. You can &lt;a href=&quot;http://opam.ocaml.org/packages/stemmer/stemmer.0.2/&quot; target=&quot;_blank&quot;&gt;view it on OPAM here&lt;/a&gt;.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Official Release of Libbucket 1.0.4</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2014/12/official-release-of-libbucket-1-0-4/" rel="alternate" type="text/html" title="Official Release of Libbucket 1.0.4" />
        <updated>2014-12-18T18:56:02+00:00</updated>
        <id>https://arnesonium.com/2014/12/official-release-of-libbucket-1-0-4</id>
          <category term="announcement" />
        
          <category term="c" />
        
          <category term="programming" />
        <content type="html" xml:base="https://arnesonium.com/2014/12/official-release-of-libbucket-1-0-4/">&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/release/pymander/libbucket.svg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’ve tagged &lt;a href=&quot;https://github.com/pymander/libbucket/releases/tag/v1.0.4&quot; target=&quot;_blank&quot;&gt;version 1.0.4&lt;/a&gt; of libbucket over on GitHub. You can download a tarball &lt;a href=&quot;https://github.com/pymander/libbucket/archive/v1.0.4.tar.gz&quot; target=&quot;_blank&quot;&gt;at this link&lt;/a&gt;. If you’d like to read more about libbucket, see &lt;a href=&quot;http://arnesonium.com/2014/12/modernizing-libbucket/&quot; title=&quot;Modernizing libbucket&quot;&gt;my post from earlier this week&lt;/a&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Very handy edit:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can download version 1.0.4 of libbucket and an OpenPGP signature here:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href=&quot;https://s3.amazonaws.com/arnesonium-downloads/libbucket-1.0.4.tar.gz&quot;&gt;libbucket-1.0.4.tar.gz&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://s3.amazonaws.com/arnesonium-downloads/libbucket-1.0.4.tar.gz.asc&quot;&gt;libbucket-1.0.4.tar.gz.asc&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;[caption id=”attachment_184” align=”aligncenter” width=”300”]&lt;img src=&quot;http://arnesonium.com/wp-content/uploads/2014/12/hakamairi-bucketflowers.png&quot; alt=&quot;I never realized how much bucket clip-art existed.&quot; width=&quot;300&quot; height=&quot;164&quot; class=&quot;size-full wp-image-184&quot; /&gt; I never realized how much bucket clip-art existed.[/caption]&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Modernizing libbucket</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2014/12/modernizing-libbucket/" rel="alternate" type="text/html" title="Modernizing libbucket" />
        <updated>2014-12-15T16:45:55+00:00</updated>
        <id>https://arnesonium.com/2014/12/modernizing-libbucket</id>
          <category term="c" />
        
          <category term="programming" />
        <content type="html" xml:base="https://arnesonium.com/2014/12/modernizing-libbucket/">&lt;p&gt;If you’re here to learn about my experience in software development, you’ve probably poked around &lt;a href=&quot;https://github.com/pymander&quot;&gt;my GitHub page&lt;/a&gt;. One the older projects on there is &lt;a href=&quot;https://github.com/pymander/libbucket&quot;&gt;libbucket&lt;/a&gt;, a very fast dynamic string buffer library. I originally wrote it while working for Musician’s Friend, and was given permission to release it as an open sourced library in 2005.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2014/11/bucket-303359_640-300x293.png#right&quot; alt=&quot;Metaphorically similar to this kind of bucket.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Recently I decided to update the build system in the library, which was using an old version of autoconf and automake. I haven’t worked with those tools in a number of years. They are solid and flexible, but they’re also a confusing tangle of m4 macros and crazy shell scripts. Also, they change a lot.&lt;/p&gt;

&lt;p&gt;A few important things had changed. For instance, &lt;code&gt;aclocal&lt;/code&gt; wanted to read from &lt;code&gt;configure.ac&lt;/code&gt; instead of &lt;code&gt;configure.in&lt;/code&gt;. In addition, the &lt;code&gt;AM_INIT_AUTOMAKE&lt;/code&gt; macro was completely different, but the tool was nice enough to point me to &lt;a href=&quot;https://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation&quot;&gt;the relevant part of the automake manual&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Building a library is also a little different now than it was in 2002. &lt;a href=&quot;https://www.gnu.org/software/libtool/&quot;&gt;GNU Libtool&lt;/a&gt; is a great program for building dynamic and shared libraries correctly for Unix systems, but its usage is different now. Luckily, it spit out all of the information I needed to update things.&lt;/p&gt;

&lt;p&gt;One thing I didn’t quite figure out is how to get automake to recognize the &lt;code&gt;README.org&lt;/code&gt; file as satisfying its README requirement. I ended up with an initialization block in &lt;code&gt;configure.ac&lt;/code&gt; that looked like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-m4&quot;&gt;AC_INIT([libbucket], [1.0.4])
AC_CONFIG_SRCDIR([src/bucket.c])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can see the unpleasant “cheat” on line 4. Sorry about that, world.&lt;/p&gt;

&lt;p&gt;After all of that mess, there were just a couple of small fixes to the documentation, which is written in GNU Texinfo, and the library compiled just fine.&lt;/p&gt;

&lt;p&gt;Unfortunately, I don’t have any tests. When I first developed libbucket, we had a proprietary test interface for C and C++ libraries at Musician’s Friend. That never got open sourced, so I had to remove it all before making the libbucket code public. Maybe tests are next.&lt;/p&gt;

&lt;p&gt;If you’d like to take a look at the changes I made, &lt;a href=&quot;https://github.com/pymander/libbucket/commit/6314493fb7c8397318ac4a8d10624159aab07204&quot;&gt;here’s the Git commit&lt;/a&gt;.&lt;/p&gt;</content>
      </entry>
    
</feed>
