It's time for my annual self review. This has been a weird year. It was already turning out to be a weird year for me before the pandemic hit. In last year's annual review I wrote:

What are my goals for 2020? Unfortunately, I don't have any strong goals. After working on big projects in 2018, I ended up working on small projects in 2019. I would like to work on something bigger, but I think my focus will be on learning new things rather than explaining things I already know. I'd like to work on projects that last a month or two rather than a week or two, to really dig into them and learn a topic deeper than I can do in a week. Other than that, I feel kind of aimless right now. I'm ok with that. I'm in a wander-and-explore phase of my life.

Note the I feel kind of aimless right now. I had decided not to focus on tutorials in 2020. I was going to spend more learning things, traveling, and visiting friends. Then the pandemic arrived. So I dove into learning things, but put the rest on hold.

  1. I decided to spend some time learning Rust. It's the language I wanted back in the mid-1990s, when I was using both ML and C++ and wanted something that gave me a bit of both. I had also learned linear logic and thought it'd be neat to have a language with move semantics. Rust finally came along, so I spent some writing some Rust projects in Jan–Feb, and also in Oct–Dec by reading TheBracket's Roguelike tutorial, but writing my own code instead of using his.
  2. I wanted to learn about machine learning / neural networks. I had planned to do this in Mar–Apr, but the pandemic derailed me, and I made no progress on this.
  3. I wanted to write a small MMO, probably in May–Jun, but I was too distracted by the pandemic for this.
  4. I wanted to spend more time on math, so I read more geometric algebra papers, and also watched Prof Ghrist's videos about dynamical systems. I think I won't truly understand until I work on a project where I actually use these things, but that's ok. My strategy is to try to learn about lots of things just enough to know what the main ideas, what they might be useful for etc. Then when I work on a project I have a wide range of possible tools I can use, and then I dig into those topics more deeply.
  5. I wanted to spend some time learning the basics of biology, so I read David Goodsell's The Machinery of Life and took extensive notes. I started following some biology twitter accounts and I've been watching biology videos.
  6. Combining my desire to learn math and my desire to learn biology, I've started reading a textbook, Modeling Life: The Mathematics of Biological Systems, which looks absolutely fascinating. There's also a video series for the book, but since I already know some of the material, I prefer the book so I can skip ahead easily. For a quick peek at why I'm so interested in this topic, watch Veritasium's video about the logistic map.

I found it hard to concentrate once the pandemic arrived, so I put my learning projects on hold and switched to something that I knew how to do, improving my pathfinding pages. In trying to do this, I realized the way my code was written made it hard to make the changes I wanted. In 2018 I had rewritten my hex guide, leading to shorter code, faster loading, and easier to implement diagrams. I was quite happy with the rewrite and it led to my adding more content over time. It was time to do the same with the pathfinding pages. Due to the diagram structure, the same implementation techniques were not the best choice, so I spent some time trying several different approaches, and picked the one that worked the best. Then I decided even it was not the right approach, so I did something entirely different.

I rewrote the A* page, the tower defense page (flow field pathfinding), and the distance field page. The pages load much faster. I added several diagrams, improved most diagrams, improved the visuals, and made colors more consistent. I rewrote the algorithms on the all-pairs shortest paths page to make it 20X faster, now running at interactive speeds as you draw on the map. I added explanations and another diagram to the all-pairs page, moving it from "draft" status to "published". I added a new page about uses of early exit. Here's a list of improvements: part 1 and part 2.

I also took another stab at my "main loop" animation, an experiment in showing how the data structures change as you run the graph search code. In the previous version I was happy with the graph but not the code, and in this version I'm happy with the code but haven't implemented the diagram. It's something for another day.

I also worked on a few other things:

I'm happy with what I worked on this year. See my Notion page (previously Trello) for a full list. I had hoped for more though. More learning. More blogging. More projects. But I'm not going to beat myself up over it. The pandemic has reminded me that I need to be kind to everyone, including myself.

What are my plans for 2021? I think learning new things is the right thing for me right now. I'm most excited about biology and math, and want to write some simulations and publish some of my notes about what I'm learning. I'll continue to learn Rust but it's not been as exciting as I had hoped, mostly because it came 20 years too late for me, and I don't have a good use for it in my current projects. I don't have a “forever project” but I might try an “impossible project” and see where it leads me.

Labels:

1 comment:

Matteo Boffo wrote at December 31, 2020 12:48 AM

However, remember that all the guides and tutorials you wrote will remain in the history of computing. Happy 2021!!!