<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>tildedave.com</title>
		<description>Website of Dave King, yet another software person.</description>
		<link>http://www.tildedave.com</link>
		<atom:link href="http://www.tildedave.com/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Reading as a Hobby</title>
				<description>&lt;p&gt;In 2024 I intentionally made reading one of my primary hobbies.  I often talk to people who are impressed by the amount I read (30+ books the last 2 years).  Having a young child has put all of my hobbies into a very constrained box; everything has to be justified.  So in this post I’ll justify how I manage this hobby and what I think of its particular virtues.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/read-list.png&quot; class=&quot;img-responsive pull-right&quot; style=&quot;padding-left: 10px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The primary way I manage reading is to maintain one very long recommendation list.  &lt;em&gt;Any time&lt;/em&gt; I get a recommendation that I might want to read some day I put it on the list.  When it’s done I take it off the list.  “Any time I get a recommendation” is pretty key.  Everyone who reads loves talking about the books they’ve just read (I’m in a Slack channel at work that’s basically everyone bragging about their “just reads” :-)).  If something seems marginally interesting at all, I put it on the list.&lt;/p&gt;

&lt;p&gt;When it’s time to find a new book, I put it on hold at the library.  Generally I get 2-3 at a time because once I’m done with a book, it’s time to read the next one.  Usually I just pull from the list in no particular order.  I try to not read too much from the same author or the same genre in a row - whenever I break this rule I tend to regret this (looking at you, Book of the New Sun).&lt;/p&gt;

&lt;p&gt;Running the whole system off this list leads to funny situations where I can’t remember &lt;em&gt;how&lt;/em&gt; I got a recommendation and so need to ask people if they recommended me a book.&lt;/p&gt;

&lt;p&gt;OK, so why is reading “worked” for me over the last few years?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s cheap.&lt;/strong&gt;  My local library has had almost every book I’m interested in reading.  I have ordered 1-2 books from Amazon over the last few years to either read them or complete them when I didn’t finish them in time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easily interrupted.&lt;/strong&gt;  I can usually do 5-10 pages while my daughter’s watching TV in the morning.  If I have to run off to do something, the book will be still there when I get back in the same state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pretty good quality-to-time ratio.&lt;/strong&gt;  One of my pet peeves with television dramas now is how much filler there is.  At their best, books can deliver stories that transcend anything that can be at TV; at their worst, the quality tends to be about the same.  Most books take me around 10 hours to finish; at the end of a book it’s usually &lt;em&gt;done&lt;/em&gt; (I don’t tend to read a lot of series) or has at least gotten its characters to a satisfying completion of the plot events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Books can be incredibly niche.&lt;/strong&gt;  It’s hard to imagine anything as unfilmable as &lt;em&gt;Perdido Street Station&lt;/em&gt; showing up on TV; the main antagonist are psychic moths that drink the dream essence from people.  It’s fun to inhabit a very specific world for a period of time.  Of course books are subject to commercial pressures too, but it seems a safe bet that binding a bunch of words on paper together will  &lt;em&gt;always&lt;/em&gt; be cheaper than telling a story through video.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading isn’t my only hobby.&lt;/strong&gt;  I set my “reading goal” every year at 30 books.  This is a relatively low target.  In 2026 I’ve finished 5 books in January and February; if I maintain this pace I’ll be done by early June.  I set it low so I can do other things: walking, video games, math, cooking.  When your to-be-read list feels like a burden and I’m not enjoying it, it’s time to do something else.  Keeping the goal low lets me take little breaks.&lt;/p&gt;

&lt;p&gt;OK, some recommendations from my reading over the last three years (mainly fantasy).  All wonderful worlds to inhabit that I enjoyed from start to finish.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/9265453-embassytown&quot;&gt;Embassytown&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/31122.I_Capture_the_Castle&quot;&gt;I Capture the Castle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/89717.The_Haunting_of_Hill_House&quot;&gt;The Haunting of Hill House&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/462196.hav&quot;&gt;Hav&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sofiasamatar.com/books/a-stranger-in-olondria/&quot;&gt;A Stranger in Olondria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sat, 28 Feb 2026 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2026/02/28/reading-as-a-hobby.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2026/02/28/reading-as-a-hobby.html</guid>
			</item>
		
			<item>
				<title>2025: In Review</title>
				<description>&lt;p&gt;Well, I certainly failed to write more here.  I did write a complainy post about OCaml; I’m doing 2025 Advent of Code in Haskell and having a much better time.  I did do 2-3 “meaty” posts on my work blog but didn’t really feel super compelled to port it over here.  This space seems better than that.&lt;/p&gt;

&lt;p&gt;Thinking about my hopes for 2025 in retrospect is sort of funny.  This was a very adult year.  My wife got cancer (stage 1, caught early, removed quickly).  Work stress really ramped up in June and hasn’t really settled back down.  I resumed therapy to try to get a handle on how I respond to that stress.  I got myself active and lost 20 pounds between August and December just by walking through my neighborhood and listening to the birds.  After all this, Maureen got pregnant again and we’ll be welcoming our second daughter into the family this May.&lt;/p&gt;

&lt;p&gt;I accomplished my reading goal but not by much.  My favorite books were The Secret History (of course), The Glory of the Empire (Byzantium reimagined), Hav (travelogue to an imaginary city), and Perdido Street Station.  I lost a bit of steam on reading this year due to going through &lt;a href=&quot;https://i18n-puzzles.com/&quot;&gt;i18n Puzzles&lt;/a&gt;, &lt;a href=&quot;https://everybody.codes/&quot;&gt;Everybody Codes&lt;/a&gt;, Silksong, and Balatro.  I replayed Final Fantasy 6 and was struck by how easy the game was.  I had a lot of fun drafting some Magic the Gathering sets for a few months in there.&lt;/p&gt;

&lt;p&gt;I didn’t spend that much more time in Rust (beyond &lt;a href=&quot;https://github.com/tildedave/rust-number-theory&quot;&gt;more number theory hacking&lt;/a&gt; at the start of the year) but I did learn Zig well enough.  I didn’t do much cross-stitch after February but I’ll get back into it doing the Christmas ornaments this year.&lt;/p&gt;

&lt;p&gt;Work has been more intense lately but I can’t imagine a better job in the world for me than being a principal engineer.  I get to keep driving change in our tech systems to better represent the needs of the business.  I love 85% of the work and the other 15%, eh, I’ll muddle through it well enough.&lt;/p&gt;

&lt;p&gt;In June, I was going to see Godspeed You! Black Emperor at a concern venue way out in the NC hinterlands.  I navigated my way there through my Android phone.  On getting there I found a long line to get into the venue; the band had arrived late and the concert that was supposed to start at 8pm had just unloaded the instruments.  I already had expected to do 1-2 hours of work after getting back from the concert (working for an Australian company sometimes forces work into odd corners of your life).  Then my phone died and kicked me to an error screen on reboot.  The idea of waiting an extra 3 hours for the concert and then trying to find my way back in the dark sans phone only to have to sign back into work seemed impossible.  So I made the adult choice and used the last few hours of daylight to get back home and do what I had to.  Both at the time and looking back it felt like the end of an era.&lt;/p&gt;

&lt;p&gt;Looking forward to 2026, I want my family to stay healthy, our new daughter to arrive safely, and to keep my head on straight without it spinning off.  I feel like I finally understand how difficult these things are, how little control I have over the details, and how lucky I am to be in this particular time and place.&lt;/p&gt;
</description>
				<pubDate>Sun, 07 Dec 2025 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2025/12/07/in-review.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2025/12/07/in-review.html</guid>
			</item>
		
			<item>
				<title>I'm Still Bad At OCaml</title>
				<description>&lt;p&gt;It’s been 10 years since I wrote anything serious in OCaml and going through &lt;a href=&quot;https://everybody.codes/&quot;&gt;Everybody Codes&lt;/a&gt; this year I figured I would give it another shot.  I’ve always been an “advanced beginner” at OCaml, where I was able to program in it but not particularly well.  I wrote one of my thesis projects in OCaml.  That project had some performance problems that sunk a paper acceptance back in the day; I rewrote it in C++ when we revised the paper.&lt;/p&gt;

&lt;p&gt;Unfortunately, I am still awful with this language.  I don’t like the way my code looks, I don’t like the syntax, and I don’t like where it sits in the functional programming landscape.&lt;/p&gt;

&lt;p&gt;Interacting with data structures is still horribly verbose and I never feel like I’ve written code that I enjoy to look at.  Here’s breadth-first search, adapted from Wikipedia.  Yes, it’s using the imperative data structures (more on this later).&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;n&quot;&gt;fold&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;init&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;neighbors&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;visited&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;acc&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;nn&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Hash_set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;
  &lt;span class=&quot;nn&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;enqueue&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_empty&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;next&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dequeue_exn&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Hash_set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mem&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;visited&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;next&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;p&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nn&quot;&gt;Hash_set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;visited&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;acc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;acc&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;nn&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;iter&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;~&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&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;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neighbor&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;n&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Hash_set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mem&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;visited&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neighbor&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;nn&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;enqueue&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neighbor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;neighbors&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;next&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;After using Clojure and its universal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conj&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assoc&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contains?&lt;/code&gt; idioms, it’s &lt;em&gt;so&lt;/em&gt; painful to have to type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Hash_set.mem&lt;/code&gt; around every hash set interaction.  Yes, it some places you can reduce the boilerplate with local opens, but no such luck here; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Queue&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Hash_set&lt;/code&gt; define conflicting members and the last one wins.&lt;/p&gt;

&lt;p&gt;Syntax-wise, I am never quite sure what level of precedence &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;;&lt;/code&gt; has.  Does &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if cond then stmt1; stmt2&lt;/code&gt; mean do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stmt2&lt;/code&gt; only when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cond&lt;/code&gt; is true or not?  Is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int * int list&lt;/code&gt; a list of int pairs or a pair of an int and an int list?  I am convinced that the language always chooses the opposite of whatever would be the prettiest code.  At least &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ocamlformat&lt;/code&gt; is a new addition to the dev chain.  I add parenthesis &lt;em&gt;everywhere&lt;/em&gt; I think there might be some ambiguity and it removes the unnecessary ones for me.&lt;/p&gt;

&lt;p&gt;After doing every Advent of Code puzzle in Clojure, I (finally) consider myself a competent functional programmer.  Clojure and its laziness force you to structure your code in very interesting ways, and I only fell back to mutability when there was no other way; some very specific dynamic programming or linked list requirements, basically.&lt;/p&gt;

&lt;p&gt;Lazy data structures let you do computation in a special way, where you define a function producing a value (forever) and then consume the first N cycles in another function.  In eager OCaml I’m sitting here doing computation in explicit for loops (essentially), just like any other language.  Because OCaml’s data structures are all eager, there doesn’t seem to be much of an advantage to using the functional ones.  I often just use the imperative stuff because it has fewer hoops to jump through.&lt;/p&gt;

&lt;p&gt;Positives: the type system is still fun, though any interaction with the module system required for hash tables is still dire.  If my code type checks, it probably works.  &lt;a href=&quot;https://github.com/ocaml/dune&quot;&gt;Dune&lt;/a&gt; is &lt;em&gt;finally&lt;/em&gt; a good toolchain.  &lt;a href=&quot;https://github.com/ocaml-ppx/ppx_deriving&quot;&gt;ppx_deriving&lt;/a&gt; lets you avoid writing a lot of really silly code for custom data structure equality.&lt;/p&gt;

&lt;p&gt;I’m going to stick with OCaml through the end of 2025’s Everybody Codes puzzles (I want to give the language a few more tries), but this is my last attempt to make the language work.  I can’t think of a thing that would be more fun to program in this language than some other alternative.  Now that the modern languages have adopted the type systems and cool syntax from ML,  one of the originals no longer has much of an edge.&lt;/p&gt;
</description>
				<pubDate>Wed, 19 Nov 2025 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2025/11/19/im-still-bad-at-ocaml.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2025/11/19/im-still-bad-at-ocaml.html</guid>
			</item>
		
			<item>
				<title>Hopes for 2025</title>
				<description>&lt;p&gt;I figured it would be interesting to write these down, and see how well I do (or don’t do, as it were).&lt;/p&gt;

&lt;h2 id=&quot;resume-a-consistent-exercise-schedule&quot;&gt;Resume a consistent exercise schedule&lt;/h2&gt;

&lt;p&gt;I de-prioritized running to focus on other things in 2024; mainly reading and completing Advent of Code.  I’m usually happier if I can find the time to run two to three times a week.  I don’t think this necessarily needs to be running; if this were a nice 45 minute walk every other day I think I’d be just as happy.&lt;/p&gt;

&lt;h2 id=&quot;read-30-books-again&quot;&gt;Read 30 books (again)&lt;/h2&gt;

&lt;p&gt;I read &amp;gt; 30 books last year, mainly newer science fiction / fantasy.  To read thirty books I will need to do a little over two per month which seems fairly realistic.  (During my “high periods” in October/November I was finishing 2-3 books a week.)  Inevitably work gets busy, Cora gets sick, or I get interested in something else, so thirty books also seems like a somewhat lenient goal.  (However, I have vaguely commited to getting caught up on The Stormlight Archive.)&lt;/p&gt;

&lt;h2 id=&quot;more-cross-stitch&quot;&gt;More Cross-Stitch&lt;/h2&gt;

&lt;p&gt;I began cross-stiching last year to do a Christmas ornament for Cora, following something my mom did for me and my brothers growing up.  I lost steam in January (consumed by Advent of Code) but was able to do two ornaments this year.  I enjoy it; it’s fiddly stuff and requires me to use my hands to create something physical, a bit different from any of my other hobbies.  The main thing I need is more practice.&lt;/p&gt;

&lt;h2 id=&quot;four-blog-posts&quot;&gt;Four blog posts&lt;/h2&gt;

&lt;p&gt;Let’s try to write four unique things for my blog (no, this doesn’t count).  Tech-focused, personal-focused, whatever.  It’d be great if some of this spilled over into my work blog, which I’d also like to update more.&lt;/p&gt;

&lt;h2 id=&quot;learn-rust&quot;&gt;Learn Rust&lt;/h2&gt;

&lt;p&gt;Working through Advent of Code last year really improved my skills in &lt;a href=&quot;https://clojure.org/&quot;&gt;Clojure&lt;/a&gt;.  The last new language I really learned was Go in 2013.  While I’ve deepend my understanding of JavaScript, Perl, Java, and Python in the last ten years, I’d like to learn a “better C++” as there are times I really enjoy operating at that level of abstraction.&lt;/p&gt;

&lt;p&gt;Some ideas for implementation:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://raytracing.github.io/&quot;&gt;Ray Tracing in a Weekend&lt;/a&gt; - Creative Commons ray tracing books; I did some of this in undergrad.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://craftinginterpreters.com/&quot;&gt;Crafting Interpreters&lt;/a&gt; - I bought this book last year; I certainly did enough of this programming in undergrad/graduate school, but it’d be nice to revisit the area.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.jmeiners.com/lc3-vm/&quot;&gt;LC3 VM&lt;/a&gt; / &lt;a href=&quot;https://github.com/Gyebro/synacor-challenge&quot;&gt;Synacor Challenge&lt;/a&gt; / &lt;a href=&quot;http://boundvariable.org/&quot;&gt;UM&lt;/a&gt; - virtual machines that’d be fun to implement.  I’ve already implemented UM in Clojure as a mess of Java array interop, and it’d be great to see what it looks like in Rust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don’t need to be an expert in it by the end of the year, but I would like to say, “yeah, this is a language I know”.&lt;/p&gt;

&lt;h2 id=&quot;find-a-new-personal-hobby-project&quot;&gt;Find a new personal hobby project&lt;/h2&gt;

&lt;p&gt;I’d like another programming project to occupy me certain nights / weekends.  &lt;a href=&quot;/2024/06/10/advent-of-code.html&quot;&gt;Advent of Code&lt;/a&gt; reminded me how wonderful having a project like this was.  It’s not going to be something I can do all the time, but it is something that I’d like to have as part of my hobby rotation.&lt;/p&gt;

&lt;p&gt;My last personal hobby project was my re-built chess engine &lt;a href=&quot;https://github.com/tildedave/ra-chess-engine&quot;&gt;Ra&lt;/a&gt;, a rewrite of my grad school chess engine &lt;a href=&quot;https://github.com/tildedave/apep-chess-engine&quot;&gt;Apep&lt;/a&gt;.  I rewrote Ra because I felt like Apep had too much copy/paste from &lt;a href=&quot;https://craftychess.com/&quot;&gt;Crafty&lt;/a&gt;, I wanted to try a different board representation (10x12 instead of pure bitboards), I felt like Apep crashed too much, and I wanted to learn &lt;a href=&quot;https://go.dev&quot;&gt;Go&lt;/a&gt; better.  A few years later, I’ve accomplished all those goals.  Ra is incomplete in the sense that it still is not very smart about what a good chess position is, but Stockfish sets a high bar, and I’m not too interested in continuing the project much beyond the goals I’ve already accomplished.&lt;/p&gt;

&lt;p&gt;When I think of my own experiences as a small child watching my dad program I could tell there was something interesting there, and I’d love a way to connect this hobby of mine with Cora when she get a little older.  Unfortunately a lot of my interests end up being fairly abstract.  I won’t really know what my next hobby project is without exploring (why did I even want to program computer chess in the first place back in grad school?).  I hope over the next year I can find something that can turn into a 2-3 year project for more occasional hacking.&lt;/p&gt;
</description>
				<pubDate>Thu, 02 Jan 2025 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2025/01/02/hopes-for-2025.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2025/01/02/hopes-for-2025.html</guid>
			</item>
		
			<item>
				<title>2024: In Review</title>
				<description>&lt;p&gt;&lt;img class=&quot;img-responsive&quot; style=&quot;max-width:35%;&quot; src=&quot;/images/me-2024.jpg&quot; alt=&quot;Me looking tired (I think I&apos;m waiting for tacos)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pretty good year:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Cora is a lot more of her own person, making parenting a lot more rewarding.  The “terrible twos” started around November last year (lots of “do it myself!”), but I enjoy the interactions and it’s really fun playing with her.  (Even when changing her stuffies’ diapers five times in one evening.)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/06/10/advent-of-code.html&quot;&gt;Advent of Code&lt;/a&gt; helped me re-discover that yeah, I actually do like programming.&lt;/li&gt;
  &lt;li&gt;Couples therapy has really strengthened my relationship with my wife.  We understand each other a lot better and it’s the best relationship of my life.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; style=&quot;max-width:35%;&quot; src=&quot;/images/dad-and-cora-2024.jpg&quot; alt=&quot;My daughter Cora and my Dad playing with a baby doll.  Cora looks intent, Dad looks stranded.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I made time to read over 30 books, my most in years!  Highlights were &lt;a href=&quot;https://emilytesh.net/some-desperate-glory/&quot;&gt;Some Desperate Glory&lt;/a&gt;, &lt;a href=&quot;https://www.arkadymartine.net/books/amce&quot;&gt;A Memory Called Empire&lt;/a&gt;, &lt;a href=&quot;https://www.goodreads.com/book/show/14891.A_Tree_Grows_in_Brooklyn&quot;&gt;A Tree Grows in Brooklyn&lt;/a&gt; (somehow avoided this one in high school), the first three Ripley books, most of the Murderbot series.&lt;/p&gt;

&lt;p&gt;I’m a year into a gluten-free diet (Celiac diagnosis in 2023).  Eating out on the road is the sketchiest (no more road trip spicy chicken sandwiches 😭) but for everything else, I’m pretty happy with my food options at breakfast, lunch, and dinner.  Thanks, gluten-free oreos and Haribo gold bears.&lt;/p&gt;

&lt;p&gt;Work is going well enough.  I feel pretty established at my role at Atlassian.  I like most of the stuff I do every day and then sign off.  Periodically I freak out a bit about “what’s next?”; but these are probably still the echoes of the chaotic life I had when I lived in San Francisco.  Weird things are happening in our industry but I’ll be retired by the time things have become fully consolidated, and my personal skillsets (Java, Python, JavaScript, AWS) still seem to be a reasonable backbone for a senior individual contributor.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; style=&quot;max-width:35%;&quot; src=&quot;/images/lucky-asleep-2024.jpg&quot; alt=&quot;My dog Lucky sleeping on the couch.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lucky passed away at the end of August.  She wasn’t able to walk any more and so it was time to say goodbye.  Lucky saw so many different versions of me - academic burnout, divorced guy in a college town, workaholic startup guy, startup burnout, new dad.  Throughout it all, Lucky was there.  I think about all the “what ifs” - the time when she ran after a bunny off-leash while visiting my parents, where she was out of sight while backpacking and I couldn’t find her for five minutes, the time she ran into the woods behind our apartment and I had to run into a thicket to find her.  Our story could have had a much worse ending, but it didn’t.  She passed away in the care of the veterinarian that helped her recover from her vestibular incidents and managed her pain and GI issues for the last 3 years of her life.  I miss her, but we had a lot of wonderful times together.&lt;/p&gt;

&lt;p&gt;Things don’t seem to going particularly well in the world, but I’m not sure how unique the post-millenial “late capitalism” dread that we’re experiencing is.  These information networks make it harder to hide the awful things that are happening across the world, and we have a front-seat view to it on our phones.  Between COVID and the last election, I can’t believe that this information is going to make things better by itself.  Maybe in 50 years the cycle of reaction and counter-reaction post-Internet will have worked itself out into a new normal, but for now we live in the chaos.&lt;/p&gt;

&lt;p&gt;When I blew up my “I’m a cool startup guy” blog for whatever’s replaced it here in 2018, I was at the end of a really rough year; got fired from a job (that I was planning to quit in a few months), had a relationship fail (for the better), and didn’t really feel very settled in the world of being a San Francisco techie (years of Web3/Crypto-currency/Tr*mpism from SV later, things make more sense!).  By 2021, I had decided to start a family and I moved to Durham to do that, but I ended up spending most of that year waiting for it to happen.  After Cora was born the first year was a rush, and new dads are in a place where they are simultaneously very important but also very unimportant (mom is always #1!).  I spent a good amount of time trying to “escape” into video games.  I think I’ve worked my stuff out appropriately and I again feel like an important part of the family.&lt;/p&gt;

&lt;p&gt;Nowadays I feel a big time squeeze.  My own personal interests have to fit into a few hours a day and I have to pretty explicitly rank them against each other.  I haven’t been able to consistently run without saying goodbye to reading or programming “after hours”.  What has changed is my sense of purpose.  If I didn’t know what I was doing or why I was doing things and had a tendency to wallow with an “is this all there is” prior to Cora’s birth, now I know what I have to do - I just have to fit it into the time I have!  When I do try to engage in interests I used to have (for example, going to concerts), I feel a real ambivalence.  Is &lt;em&gt;this&lt;/em&gt; what I should be using my finite time for?  Do even still like this?&lt;/p&gt;

&lt;p&gt;From talking to other dads I get the sense that this is a pretty common, but I still have to figure out how to feed the self enough that I’m still finding joy in what I’m doing.  Going into 2025, I’m not sure if I have any major expectations for myself.  Keep eating well, keep sleeping well, figure out how to resume an exercise routine, find more of a local social connection.  Maybe that’s enough.&lt;/p&gt;
</description>
				<pubDate>Tue, 10 Dec 2024 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2024/12/10/in-review.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2024/12/10/in-review.html</guid>
			</item>
		
			<item>
				<title>450 Stars!</title>
				<description>&lt;p&gt;Last year I joined some team members doing &lt;a href=&quot;https://adventofcode.com/&quot;&gt;Advent of Code&lt;/a&gt; puzzles in the month of December.  I finished all the 2023 puzzles and started working through 2019.  After I finished 2019 I started on 2022.  And so on.  I’m done with all of the older years; 450 individual puzzles, each with two parts.  I took me about 7 months in total, with work mostly being done in the hour after toddler dropoff and the hour or so after toddler bedtime.&lt;/p&gt;

&lt;p&gt;The “hook” of Advent of Code is that the starting days are pretty easy and can usually be done in 10-20 minutes.  The puzzles tend to be familiar computer science stuff: string parsing, navigating mazes, graph algorithms, though there’s usually an unexpected twist along the way.  It’s a great introduction to the coolest parts of our field.&lt;/p&gt;

&lt;p&gt;After day 15 of any particular year the puzzles tend to really ramp up in difficulty.  In the evenings, I’d drink a glass of red wine and either sloppily program out 2-3 of the easier ones or try to make a bit of progress on one of the later ones.  Of course, the point isn’t to solve these problems the fastest or best - there are people on Reddit doing these problems using APL!  I did most my problems on a 10 year old laptop, generally didn’t care about performance, and never really tried to use any kind of parallelism.  My goal was for the code to “feel good”, and I feel like I accomplished that … most days.&lt;/p&gt;

&lt;p&gt;Some of my favorite problems from the batch:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://adventofcode.com/2022/day/22&quot;&gt;Monkey Map&lt;/a&gt;; follow instructions along the surface of a 3 dimensional cube.  &lt;a href=&quot;https://github.com/tildedave/advent-of-code/blob/main/src/advent2022/day22.clj&quot;&gt;My solution&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adventofcode.com/2020/day/20&quot;&gt;Jurassic Jigsaw&lt;/a&gt;; lining up puzzle pieces and then finding sea monsters (an ASCII string) in the resulting image.  &lt;a href=&quot;https://github.com/tildedave/advent-of-code/blob/main/src/advent2020/day20.clj&quot;&gt;My solution&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adventofcode.com/2018/day/17&quot;&gt;Reservoir Research&lt;/a&gt;; “flood fill” with a bit of a twist - you have simulate water falling from the top to the bottom.  &lt;a href=&quot;https://github.com/tildedave/advent-of-code/blob/main/src/advent2018/day17.clj&quot;&gt;My solution&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adventofcode.com/2021/day/24&quot;&gt;Arithmetic Logic Unit&lt;/a&gt;; one of several reverse engineering problems.  This one took me the longest and was the most satisfying to eventually figure it out.  I spent a few days on an approach that didn’t work (trying to use symbolic execution + program flow to evaluate the result) and eventually just reverse engineered the assembly code.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adventofcode.com/2022/day/9&quot;&gt;Rope Bridge&lt;/a&gt;; essentially you implement the a game of snake with some twists.  This was one easier problems to code but there was just something really fun about getting it working.  &lt;a href=&quot;https://github.com/tildedave/advent-of-code/blob/main/src/advent2022/day9.clj&quot;&gt;My solution&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did most of the years in &lt;a href=&quot;https://clojure.org/&quot;&gt;Clojure&lt;/a&gt;, a language I can &lt;em&gt;finally&lt;/em&gt; say I’m comfortable in.  Along the way I got very familiar with &lt;a href=&quot;https://clojuredocs.org/clojure.core/reduce&quot;&gt;reduce&lt;/a&gt; (and its friends &lt;a href=&quot;https://clojuredocs.org/clojure.core/reduced&quot;&gt;reduced&lt;/a&gt; and &lt;a href=&quot;https://clojuredocs.org/clojure.core/reductions&quot;&gt;reductions&lt;/a&gt;), &lt;a href=&quot;https://clojure.org/guides/threading_macros&quot;&gt;threading&lt;/a&gt;, &lt;a href=&quot;https://clojure.org/guides/destructuring&quot;&gt;destructuring&lt;/a&gt;, and lazy infinite sequences, frequently created through &lt;a href=&quot;https://clojuredocs.org/clojure.core/iterate&quot;&gt;iterate&lt;/a&gt; and navigated with a reducer.  Clojure isn’t a perfect language for Advent of Code; every year tends to have a linked list problem that’s trivial using Python’s &lt;a href=&quot;https://docs.python.org/3/library/collections.html#collections.deque&quot;&gt;deque&lt;/a&gt; but ends up a giant pain in a language with immutable data structures.  But there’s really nothing like programming business logic in a Lisp, and before getting back into it this year I had forgotten how much I really loved Lisp.  I’ve really come a long way from struggling with alpha-beta search in the game &lt;a href=&quot;https://en.wikipedia.org/wiki/Mancala&quot;&gt;mancala&lt;/a&gt; back in UIUC’s Intro to Artificial Intelligence course.&lt;/p&gt;

&lt;p&gt;Finally, it’s been wonderful to feed the part of me that’s been dormant for a little while after the last two years of childcare.  The constant interruptions have forced me towards very atomic interests.  Read a book five pages at a time, watch &lt;a href=&quot;https://www.mtggoldfish.com/series/against-the-odds&quot;&gt;Against the Odds&lt;/a&gt; on YouTube 15 minutes at a time, or replay &lt;a href=&quot;https://celeste.ink/wiki/Farewell&quot;&gt;Farewell&lt;/a&gt; for the fiftieth time once she’s asleep.  Being able to find the time for this kind of hobby in the middle of the rest of my life has been wonderful.&lt;/p&gt;
</description>
				<pubDate>Mon, 10 Jun 2024 00:00:00 -0400</pubDate>
				<link>http://www.tildedave.com/2024/06/10/advent-of-code.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2024/06/10/advent-of-code.html</guid>
			</item>
		
			<item>
				<title>2022: In Review</title>
				<description>&lt;p&gt;Well, I became a dad this year.  We were very fortunate that Cora’s been a happy and healthy little baby; she arrived more or less when we expected it and the new parent experience has been easy enough.  My days revolve around her schedule.  It’s been a wonderful experience even if certain moments can be challenging.  I’ve just started three months of parental leave where I’ll move into the primary caregiver role.  Looking forward to being able to devote this kind of time and energy to my family, and I’m fortunate my work is so generous with leave.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-responsive&quot; style=&quot;max-width:520px&quot; src=&quot;/images/cora-7-months.jpg&quot; alt=&quot;My daughter Cora, aged 7 months&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Work-wise things are good.  I still work at Atlassian.  After a few years of trying out people leadership I realized I didn’t particularly enjoy it, but that left me with a bit of a hole as to what I want to be doing and how I want my career to grow.  I’ve leaning more into my principal engineering role and have been reading some books to try to get a sense of what the role looks like at different companies; &lt;a href=&quot;https://www.oreilly.com/library/view/the-staff-engineers/9781098118723/&quot;&gt;The Staff Engineer’s Path&lt;/a&gt; and &lt;a href=&quot;https://staffeng.com/book&quot;&gt;Staff Engineer: Leadership beyond the management track&lt;/a&gt;.  We’ve also managed to launch the &lt;a href=&quot;https://www.atlassian.com/platform/analytics&quot;&gt;Atlassian Analytics&lt;/a&gt; product into Open Beta.  Pretty good outcome from the Chartio acquisition.&lt;/p&gt;

&lt;p&gt;I was able to still read a bit this year, both before and after Cora’s arrival.  Highlights:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Brandon Sanderson’s &lt;a href=&quot;https://us.macmillan.com/books/9781250297143/oathbringer&quot;&gt;Oathbringer&lt;/a&gt;.  Probably my favorite of the Stormlight Archive so far.  This was a really intense fantasy experience.  Nine months after finishing it I’m still sort of amazed by the “twist” revealed in this book.&lt;/li&gt;
  &lt;li&gt;Timothy Synder’s &lt;a href=&quot;https://www.timothysnyder.org/books/bloodlands&quot;&gt;Bloodlands&lt;/a&gt;.  I don’t think I ever read a real history of the Holocaust before this.  (I’m not counting any of the “required reading” in high school.)  The cruelty of the Hitler and Stalin regimes is hard to imagine but important to still reckon with.&lt;/li&gt;
  &lt;li&gt;Christopher Clark’s &lt;a href=&quot;https://www.harpercollins.com/products/the-sleepwalkers-christopher-clark?variant=32121973735458&quot;&gt;The Sleepwalkers&lt;/a&gt;.  I’ve read the story of how World War I broke out a few times now but Clark’s book is the first time where the assassination of an Austrian archduke could plausily lead to continent war (vs being a pretext for actors who had decided what to do ahead of time).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other books: &lt;a href=&quot;https://www.goodreads.com/book/show/166997.Stoner&quot;&gt;Stoner&lt;/a&gt; (good), &lt;a href=&quot;https://us.macmillan.com/books/9781250062185/thesixthextinction&quot;&gt;The Sixth Extinction&lt;/a&gt; (magazine articles: the book), &lt;a href=&quot;https://www.goodreads.com/book/show/835458.The_Pursuit_of_Love&quot;&gt;The Pursuit of Love&lt;/a&gt; (alas, didn’t grab me), &lt;a href=&quot;https://www.goodreads.com/book/show/550931.Empire_of_Liberty&quot;&gt;Empire of Liberty: A History of the Early Republic, 1789-1815&lt;/a&gt; (fascinating), &lt;a href=&quot;https://yalebooks.yale.edu/book/9780300057522/the-tragedy-of-cambodian-history/&quot;&gt;The Tragedy of Cambodian History&lt;/a&gt; (didn’t know much going in, pretty horrifying), and &lt;a href=&quot;https://yalebooks.yale.edu/book/9780300240214/against-the-grain/&quot;&gt;Against the Grain&lt;/a&gt; (interesting but hard to imagine ever having a better picture of a time period without a historical record).&lt;/p&gt;

&lt;p&gt;Hobby-wise I played a bunch of Hades and Celeste, played through Bayonetta 2, Rain World, and Super Mario Odyssey.  I spent a little time re-learning Differential Geometry (20 years after I took a course in it) and worked through a bunch more algebraic number theory problems in Marcus’s Number Fields book, mainly Chapter 3 (the different ideal of a number field), Chapter 4 (ramification groups), Chapter 5 (the fundamental unit in real cubic fields).  Discovered new music in &lt;a href=&quot;https://www.beachbunnymusic.com/&quot;&gt;Beach Bunny&lt;/a&gt; and &lt;a href=&quot;http://charlybliss.com/&quot;&gt;Charly Bliss&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In these year in review posts that I try to summarize my life to provide a version of myself to look back on, but it’s pretty hard to know how to summarize this year.  Lots less time in my head, lots more making sure everything around me is still running.  I expect it’ll be a busy few years before I have time to really find myself again.&lt;/p&gt;
</description>
				<pubDate>Thu, 22 Dec 2022 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2022/12/22/year-in-review.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2022/12/22/year-in-review.html</guid>
			</item>
		
			<item>
				<title>Courage Revisited</title>
				<description>&lt;p&gt;Back in 2012 I wrote an article &lt;a href=&quot;/2012/08/08/courage.html&quot;&gt;Courage&lt;/a&gt; which was a typical example of a whole class of blog posts (once upon a time).  The team I was working on had just hit our launch goals and we were feeling pretty good.  We had previously worked on the legacy Rackspace Control Panel - a fairly typical project with long-QA cycles - and were finally getting to implement a lot of team processes that we had hoped for, mainly deploying straight to production with no QA gate.  I had just been promoted and it felt like everything was firing on all cylinders.  Easy to just fire off a blog post about how what made it all possible was our team processes.  Other teams who weren’t using our processes were missing out on how great things could be.&lt;/p&gt;

&lt;p&gt;Ten years later, it’s easier to understand the things that truly made our success possible.  Sure, we had some great practices, wrote some great code, and had great people.  But - green field development meant no technical debt.  Working on a pure JavaScript project reduced the number of failure states of the system.  QA didn’t &lt;em&gt;really&lt;/em&gt; matter since all the code was written in the last year - everyone on the team knew all the states of the system.  My team had either all been recently hired or selected as transfers from existing teams on our site - no glaring performance issues.  We were part of one much larger initiative (Rackspace Cloud) that itself was one VP’s project at a company that at the time prided themselves on their manual support processes, so while our project &lt;em&gt;mattered&lt;/em&gt;, the entire company wasn’t riding on it.  We had freedom to be a little less good and stuff would have probably been just fine.&lt;/p&gt;

&lt;p&gt;Since then I’ve come to understand that every well-running team operates within a delicate balance.  I worked two more years on my “everything is great” project and then &lt;a href=&quot;/2014/12/11/goodbye-to-all-that.html&quot;&gt;blew up my life&lt;/a&gt; to move to the San Francisco Bay Area, letting me be a part of a &lt;em&gt;lot&lt;/em&gt; more teams.  I worked on a project that I entered with that same fearless attitude (supposed to be a one month refactor) that turned into a 6 month on-and-off ordeal.  I worked on a project that was supposed to save a company that was on a limited runway - that we delivered mostly on time! - but that we couldn’t launch due to one of our vendors.  I got to see how tests could save a project from quality papercuts while at the same time added &lt;em&gt;so much&lt;/em&gt; extra time to feature development; it turns out writing tests for a non-trivial feature ends up being at least twice as hard as writing the code.&lt;/p&gt;

&lt;p&gt;So, on to “courage”.  I’d still recommend that young programmers cultivate a sense of brazenness.  It’s certainly still one of my defining traits as a programmer.  I’ll never write an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if&lt;/code&gt; conditional that checks for nullability if a field “can’t” be nullable, and I’ll point out every time I see this happen on your pull request.  But more than that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I’d recommend learning the fundamentals of your programming languages and the libraries they use - what are actually they doing under the hood?  What libraries do their rely on?  What’s their source code doing?  Could you learn something from it?&lt;/li&gt;
  &lt;li&gt;I’d recommend learning how to read code and seeing it as a communication mechanism from other humans, as opposed to just something that accomplishes a task.  Who wrote the code that you’re working on now?  What do they understand that you don’t?&lt;/li&gt;
  &lt;li&gt;I’d recommend really listening to what people are saying when they talk to you, express their opinions, or try to prioritize work.  Sometimes you might not agree but you’ll learn nothing if you don’t listen to them.&lt;/li&gt;
  &lt;li&gt;I’d recommend understanding how to make the best changes possible - uncontroversial, well-tested, and informed by best practices &lt;em&gt;both&lt;/em&gt; in the industry and in the codebase that you’re working in.  Can you avoid rewriting code that you don’t understand?  Can you write your code in a way to overall match project style and make it kind of difficult to tell that you were the one that wrote it?&lt;/li&gt;
  &lt;li&gt;I’d recommend understanding what your role is within the team and how you can best support the business through the act of writing code.  You’ve been (presumably) hired as a programmer; learn to bracket your product opinions, understand what your peers in product and design are trying to accomplish, and &lt;em&gt;truly respect&lt;/em&gt; the difficulties that come with their craft.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, there’s still a role for process, but no, process can’t create that great environment by itself.  I still look back at my previous team with a good deal of fondness, but I’m truly embarrassed that I ever thought the world was that simple.  Thankfully, things are much more complicated.&lt;/p&gt;
</description>
				<pubDate>Sun, 18 Dec 2022 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2022/12/18/courage-revisited.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2022/12/18/courage-revisited.html</guid>
			</item>
		
			<item>
				<title>2021: In Review</title>
				<description>&lt;p&gt;Three years ago I wrote a “year in review” post which capped off the end of a pretty intense year.  I had “blown up my life” in 2014 to move to California - sold my house in Virginia, got a new job (writing React at Tilt, then a payments startup), all to hopefully build a new life there.  2018 was really the first year where I realized I wasn’t happy with the life I had built - I was seriously burned out after putting myself through some intense work stress for the last three years - and I started to claim my life back to be the life that I really wanted.&lt;/p&gt;

&lt;p&gt;So here I am in 2021.  I moved back to the east coast this year, got married in the middle of the pandemic, and just bought another house.  My wife Maureen and I are expecting a daughter who will be born in May - name still unknown.&lt;/p&gt;

&lt;p&gt;On one level I find it hard to believe that this has happened, but on the other it feels very normal.  We moved in early March, after deciding to move September of 2020.  Being locked in the house during the coronavirus pandemic and then dealing with an abnormally bad wildfire season convinced us that it was better to be closer to family than it was to be our own little outpost in California.&lt;/p&gt;

&lt;p&gt;Durham doesn’t feel too different from Oakland.  By the time I left California I was more of a homebody.  Before the pandemic I thought I would miss the office and go crazy being home all the time, but this really hasn’t happened.  I love having time back in the morning and evenings where I don’t have to commute, and it’s much easier to step out in the middle of the day to exercise.  I’ve kept up the running - at least twice a week, though I had to take a break in the middle of the Durham summers.  I got hit pretty badly by allergy season so I’ve resumed allergy shots.  Hopefully next spring will be better.&lt;/p&gt;

&lt;p&gt;At work, Atlassian has acquired Chartio, so most of the year has been spent integrating the Chartio codebase into the Atlassian ecosystem.  I won’t lie and say this is my favorite type of work (I find API integration kind of a slog and most of my time has been in planning the work vs executing on it), but Atlassian has plenty of challenges that need my help and it’s a great place for me to spend the next few years.  Still doing Java, still doing Python, still doing a little bit of JavaScript.&lt;/p&gt;

&lt;p&gt;I haven’t had much time or energy for personal programming.  I got back into video games during the pandemic so my spare time has been Celeste, Hades, Bayonetta, some Magic Arena, and a lot of YouTube.  Last Christmas I spent some time working through Set 8 of Cryptopals - basically Elliptic Curve Cryptography.  I still have a few unsolved problems from that which I may revisit this holiday break.  (Already I’ve had to implement LLL lattice reduction and Cantor-Zassenhaus factorization, two “gold standards” of algorithmic number theory implementation.)&lt;/p&gt;

&lt;p&gt;In this year’s reading I tried to incorporate more fiction.  Mostly, I read a lot of books “in two”:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Too Like the Lightning / The Seven Surrenders - futuristic science fiction about a utopian society in the future where war has been abolished, and how war comes back to it again.  Incredibly unique.  I didn’t really “believe” this world and the characters in it as documenting the struggles of real human beings, but maybe this was part of the point.  I’m glad I read through these even if they left me kind of cold at the end.&lt;/li&gt;
  &lt;li&gt;The Way of Kings / Words of Radiance - very enjoyable fantasy novels.  I’d get sucked into them and just read hundreds of pages at a time like I was back in high school.  Great emotional payoffs for all the characters.&lt;/li&gt;
  &lt;li&gt;Master and Commander / Post Captain - Jack Aubrey and Stephen Maturin sail the Mediterranean during the Napoleonic Wars.  I was familiar with the characters from the Russell Crowe movie and the books were quite enjoyable.  Rather than treat the books as a  plot with a beginning, middle, and end, it felt more productive to view them as a series of chapters with loose themes connecting them.&lt;/li&gt;
  &lt;li&gt;I Capture The Castle / We Have Always Lived In The Castle - two books about sisters living a disconnected from the rest of the world, with two pretty different tones.  I loved both of these books.&lt;/li&gt;
  &lt;li&gt;The Invisible Bridge / Reaganland - Rick Perlstein concludes his dissection of the conservative movement with two books about Ronald Reagan.  Perlstein is the inheritor of Richard Ben Cramer (What it Takes) and Hunter S Thompson (Fear and Loathing on the Campaign Trail ‘72) in how we gets you inside a particular place in time, walks through some major players in the political landscape, and gives you a real sense of “being there”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After hitting so many life events in 2021 (and more to come in 2022), it seems hard to know what to expect.  All my friends who are fathers tell me that you really don’t know what it is until it happens, so I am trying to embrace the fact.  Sometime next year my life will be overcome by a singularity and I’ll just have to see who it is that comes out on the other side.  Hope everyone has been healthy and stay safe out there.&lt;/p&gt;
</description>
				<pubDate>Thu, 16 Dec 2021 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2021/12/16/year-in-review.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2021/12/16/year-in-review.html</guid>
			</item>
		
			<item>
				<title>Leaving California</title>
				<description>&lt;p&gt;I moved to California in the fall of 2014.  The main reason I moved here was that I felt like I wanted different experiences than I could get in a small college town, the kind of place I had lived for most of my life up until then.  I wanted work that was more challenging, I wanted a place that I could engage more deeply with, and I wanted some sense of longer-term purpose.&lt;/p&gt;

&lt;p&gt;Six years later I would give myself a mixed grade.  I got more challenging work but it came at the cost of some incredibly high stress years and I ended up burning myself out.  Even today, I’m not sure how to measure how “okay” I am.  I’ve certainly found enjoyment in work again, and I still love to program (yay!).&lt;/p&gt;

&lt;p&gt;If you’ve never lived in the San Francisco Bay Area, it’s hard to communicate how incredible it is.  There are so many people living in the area; you live packed in next to each other, the traffic is unbearable, and the place looks like an ant colony from the hills.  At the same time the infrastructure also supports you - great food, great weather, lots of public transportation options and ride-sharing services help you get around.  Worst case, since San Francisco is just this 7x7 mile postage stamp, you can always walk.&lt;/p&gt;

&lt;p&gt;Still, there’s a darker side of this.  There’s an incredible amount of income inequality.  As a tech worker I can’t really complain about my salary, but you really need to work in the city in a high-paying job in order to afford anything.  Many of the tech workers I talked to had no sense of how the companies where they worked were affecting society.  I’ve lived in a slowly gentrifying area and every year, the rent goes up.  If you want to buy a house here it’s north of a million dollars.  Wildfire season gets worse every year.  None of these issues were really unknown before I moved, but they’ve been background noise for my entire time here.&lt;/p&gt;

&lt;p&gt;Overall it’s been a great time.  I’m happy to have been here when I was.  I’m also happy that I’m moving on to the next thing.&lt;/p&gt;

&lt;h2 id=&quot;work-memories&quot;&gt;Work memories&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Rewriting the Tilt React rendering engine to use embedded V8; this let us render React components server-side while still using our legacy Perl application servers.  At the same time it totally removed the need for us to migrate from Perl to Node.JS.  A great outcome for the company (we didn’t need to spend nine months rewriting everything) and a less great outcome for the engineering team (we had to deal with the legacy application server code until the company shut down).&lt;/li&gt;
  &lt;li&gt;I investigated React’s Context feature for Tilt and ended up having the #1 SEO result for “React Context” for a long while, though my article on it wasn’t really very good.  Thank goodness they finally documented that feature so I could unlist that post.&lt;/li&gt;
  &lt;li&gt;I learned to write iOS code and ended up building out the “quick return” feed pattern in iOS for Tilt’s 2016 “back to school” push.  This was a technically challenging bit of pixel manipulation where scrolling down would hide a header, but scrolling up would cause it to reappear, no matter where you were in the feed.  While I did other stuff for the Tilt iOS app, that project was definitely the most fun.&lt;/li&gt;
  &lt;li&gt;Seeing two startup acquisitions from the inside - Airbnb’s acquisition of Tilt and Atlassian’s acquisition of Chartio.  Two really different acquisitions.&lt;/li&gt;
  &lt;li&gt;I got to implement a &lt;a href=&quot;https://chartio.com/blog/eliminating-duplicate-queries-using-distributed-locking/&quot;&gt;distributed locking system&lt;/a&gt; into the Chartio database query engine.  Just an incredibly fun distributed systems project where you get to use all that stuff you read about on Hacker News.  This project also had my favorite bug, where threads that I thought were doing nothing actually stayed alive and continued to execute distributed-lock related commands, in the process causing our Redis server to fall over.  (Just the first of many times that I ended up breaking that server…)&lt;/li&gt;
  &lt;li&gt;I built out a feature where we would use custom classloaders so that we could load multiple versions of JDBC drivers into the service so we didn’t have to force-deprecate any customers.  One of those places where the Java ClassLoader abstraction actually came in handy!&lt;/li&gt;
  &lt;li&gt;Identifying and fixing a &lt;a href=&quot;/2019/10/03/fixing-a-jni-crash-in-sqlite-jdbc.html&quot;&gt;stack explosion&lt;/a&gt; caused by a SQLite extension function.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-memories&quot;&gt;Other memories&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Going to a ton of concerts, mostly in my first year.  My favorite was seeing Dinosaur Jr at the Regency Ballroom.  One of those incredible live performances that I feel fortunate that I got to experience.&lt;/li&gt;
  &lt;li&gt;Sea to summit from Stinson Beach to the top of Mt Tam.&lt;/li&gt;
  &lt;li&gt;Getting a mountain bike … and having a pretty hard spill on it.  I fractured my ribs and it really hurt to walk for a month or so.  Ouch.&lt;/li&gt;
  &lt;li&gt;I did a bunch of backpacking trips (it seems like they give you a backpack when you move to California).  I probably did 10-15 trips in total, but the ones that stand out to me are my solo backpacking trips.  It did a very snowy trip to Lake Tahoe in April – this was really ill-advised … the Sierras really aren’t hikable before June, and really mid-July is your best bet.  At the same time it ended up being this wonderful otherworldly experience where I huddled in my tend by myself, read a little bit of Ursula Le Guin’s &lt;em&gt;The Dispossessed&lt;/em&gt;, and fell asleep early.  More productively, I did a four day trek around the Timberline Trail where I’d hike during the day and settle in to read &lt;em&gt;Dune&lt;/em&gt; for the first time in the evening.&lt;/li&gt;
  &lt;li&gt;I ran a sub-4 hour marathon as part of the Oakland Running Festival.  This fact would be pretty amazing to my out-of-shape high school self.&lt;/li&gt;
  &lt;li&gt;I learned to ski.  Never thought I’d do that.&lt;/li&gt;
  &lt;li&gt;Taught myself Galois theory, complex analysis, and algebraic number thoery.  Incredibly interesting stuff, especially because it isn’t really applicable to anything I do at work.&lt;/li&gt;
  &lt;li&gt;Programmed &lt;a href=&quot;https://github.com/tildedave/ra-chess-engine&quot;&gt;another chess engine&lt;/a&gt;.  It’s finally stronger than my old one.  At least, it crashes a lot less.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Personally I think my best accomplishment has been to chill out a little bit and hopefully have a bit more empathy for the rest of the world.  If I moved here as someone who thought I could change the world, I’m leaving as someone just content to exist in the world.  (Really, that’s hard enough.)  Work is still a big part of my self identity but it’s great to turn it off and just be Dave in the evenings.&lt;/p&gt;
</description>
				<pubDate>Fri, 26 Feb 2021 00:00:00 -0500</pubDate>
				<link>http://www.tildedave.com/2021/02/26/leaving-california.html</link>
				<guid isPermaLink="true">http://www.tildedave.com/2021/02/26/leaving-california.html</guid>
			</item>
		
	</channel>
</rss>
