<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
  <title>Matthew Tolman</title>
  <link>https://matthewtolman.com</link>
  <description>Personal Blog and Portfolio</description>
  <language>en-us</language> 
  <category>Programming</category><category>Web Development</category>
  <item>
<pubDate>Sat, 25 Jan 2025 22:15:00 Z</pubDate>
<title>Generics in C</title>
<link>https://matthewtolman.com/article/2025-01-generics-in-c.html</link>
<description>As part of my recent tour of languages, I have started using C again. Particularly, I've been using C11 and have been exploring the new additions. One such addition is Generics. I decided to try to use Generics to see how far I could push the feature to find its limitations. To do this, I chose implementing some data structures - in my case porting over Zig's slices. While there was some benefit, there were also quite a few headaches and limitations.</description>
</item><item>
<pubDate>Thu, 12 Dec 2024 22:15:00 Z</pubDate>
<title>Why I Stopped Using Go (For Now)</title>
<link>https://matthewtolman.com/article/2024-12-why-i-stopped-using-go.html</link>
<description>I used go for several months for all of my side projects. I began rewriting different projects in Go. I was amazed by how quickly I was able to get things done in Go.
                Go as a productivity tool began to click. But suddenly, I stopped and moved on to a language that wasn't mature, or stable, or had an ecosystem. What happened?</description>
</item><item>
<pubDate>Thu, 07 Nov 2024 17:12:00 Z</pubDate>
<title>Fast CSV parsing in Zig</title>
<link>https://matthewtolman.com/article/2024-11-fast-csv-parsing-in-zig.html</link>
<description>I started off trying to create a streaming CSV encoder in Zig. Once that was done, I thought "that was easy, how hard could a parser be?" I then started trying to make it faster and faster, and ended up creating several parsers (some that are zero-allocation parsers, some that aren't). This post covers my journey into optimizing Zig code.</description>
</item><item>
<pubDate>Thu, 31 Oct 2024 00:00:00 Z</pubDate>
<title>TigerBeetle and NASA reliability</title>
<link>https://matthewtolman.com/article/2024-10-tigerbeetle-and-nasa-reliability.html</link>
<description>Last time I posted I talked about Erlang and how it has built-in error recovery to maintain reliable systems. Since that post I've been digging into Zig after learning about how TigerBeetle and NASA maintain reliable systems. Their approach is the polar opposite of Erlang's approach, yet the results were impressive. The reason for the different approaches stems from different definitions and needs of "reliability."</description>
</item><item>
<pubDate>Fri, 28 Jun 2024 20:00:00 Z</pubDate>
<title>Venture into Erlang</title>
<link>https://matthewtolman.com/article/2024-06-28-foray-into-erlang.html</link>
<description>Recently I've been exploring Erlang and the OTP. As I've been trying things out, some aspects of the design Erlang and the OTP have finally started to click. I'm writing this blog post about my experiences with Erlang and the OTP so far.</description>
</item><item>
<pubDate>Sat, 15 Jun 2024 20:00:00 Z</pubDate>
<title>A return to Clojure</title>
<link>https://matthewtolman.com/article/2024-04-a-return-to-clojure.html</link>
<description>Recently I started using Clojure again. It's been a while since I've used it. I'm recording my thoughts and impressions as I get back to using it. The experience doesn't feel like it changed much over the past few years, which is both good and bad. This is more of a post of my thoughts rather than having a clear direction.</description>
</item><item>
<pubDate>Sat, 17 Feb 2024 20:35:00 Z</pubDate>
<title>A journey across editors</title>
<link>https://matthewtolman.com/article/journey-across-ides-02-2024.html</link>
<description>Often I hear developer journeys through the programming languages they used or the companies they worked for. Sometimes it's told through frameworks learned or projects released or mistakes made. I'll probably tell my story a few times using some of those common methods. But today I thought I'd do something different.</description>
</item><item>
<pubDate>Thu, 01 Feb 2024 17:10:00 Z</pubDate>
<title>A site for my experiments</title>
<link>https://matthewtolman.com/article/a-site-for-my-experiments.html</link>
<description>I recently created a website which holds a lot of my experiments. Some of these experiments either make it into my blog or they form the basis of some of my blog posts. Many of them don't make it into my blog posts. Instead of just letting them sit in the dark, I decided to put some of them on my experiments site.</description>
</item><item>
<pubDate>Sun, 07 Jan 2024 22:50:00 Z</pubDate>
<title>C++ to JavaScript with Cheerp</title>
<link>https://matthewtolman.com/article/cpp-to-javascript-with-cheerp.html</link>
<description>Emscripten is great, but it only compiles to WASM. With WASM, we often need to ship our own memory management, libraries, and communication layer to interact with the DOM. That can lead to a lot of code being created. However, Cheerp is able to compile C++ directly to JavaScript which greatly lowers the amount of outputted code. So I decided to give Cheerp a try and see how well it works translating C++ to JavaScript.</description>
</item><item>
<pubDate>Wed, 13 Dec 2023 09:30:00 Z</pubDate>
<title>Creating a WASM library with Embind</title>
<link>https://matthewtolman.com/article/creating-a-wasm-library-with-embind.html</link>
<description>I've been working on my Test Jam project for a while. I had previously tried to do a WASM wrapper around my C/C++ build, but I ran into a memory leak which existed outside the C/C++ code. Instead of reading the manual, I rewrote the code in TypeScript. After the rewrite, I read the manual and learned what was the source of the leak. I then rebuilt my WASM wrapper and ended up with a TypeScript and WASM implementation. I then decided to start comparing the two implementations to see what the benefits and drawbacks are. I also wanted to test some well touted claims about WASM (e.g. performance, code reuse) in the context of a library.</description>
</item><item>
<pubDate>Sat, 02 Dec 2023 23:12:00 Z</pubDate>
<title>Overview of globally unique identifiers</title>
<link>https://matthewtolman.com/article/overview-of-globally-unique-identifiers.html</link>
<description>Recently I saw that CUID, a way to generate unique IDs, had been deprecated due to security concerns.

                That got me really curious. I haven't ever thought of IDs as being "secure." Instead, I've always treated them as untrusted, public-knowledge values. I've always built access controls around my IDs, even when they were randomly generated GUIDs. So I started looking at a lot of ID generators to see if this concept of "secure ids" really did exist, what meant, and what other properties IDs had.</description>
</item><item>
<pubDate>Thu, 30 Nov 2023 23:00:00 Z</pubDate>
<title>Unsigned Integers in JavaScript</title>
<link>https://matthewtolman.com/article/unsigned-integers-in-javascript.html</link>
<description>Lately I've been experimenting with creating random data generators in TypeScript. I wanted to avoid using the global random number generator `Math.random` since I wanted my generators to be fully determinitic (i.e. if you give them the same input, they will always return the same output). I also wanted a seed to be passed in every time, which meant that I'd be creating a new generator every time.

                I started looking at alternatives and found TinyMT, which is a memory-friendly version of Mersenne Twister written in C. I decided to port it over to TypeScript, and I ran into a lot of issues due to the differences between C and JavaScript/TypeScript when it comes to numbers. Specifically, I had a lot of issues with unsigned integer arithmetic. After I got it all working, I decided to write this blog post about my journey with unsigned integer arithmetic in TypeScript/JavaScript.</description>
</item><item>
<pubDate>Tue, 28 Nov 2023 23:08:00 Z</pubDate>
<title>Writing a property test library</title>
<link>https://matthewtolman.com/article/writing-a-property-test-library.html</link>
<description>My journey creating a property testing library, including the mistakes and learnings I had along the way. I go over my requirements for a framework, and my attempts at designing the core generation and simplification aspects. It also covers my progress as I switched between programming languages to get different perspectives.</description>
</item><item>
<pubDate>Mon, 23 Oct 2023 07:00:00 Z</pubDate>
<title>What is property testing?</title>
<link>https://matthewtolman.com/article/what-is-property-testing.html</link>
<description>Property testing is a developmental approach to writing tests (both unit tests and integration tests) which
                helps developers find the limitations of their software. It isn't an all-encompassing set of principles
                or practices which impact the development lifecycle, unlike Test Driven Development.

                Instead, property tests focus on giving developers more tools for the actual test implementation, regardless
                of the testing practices which exist. Additionally, these tools aim to provide far better coverage and depth
                to testing than simple "line coverage" and "branch coverage" metrics can provide.</description>
</item><item>
<pubDate>Sun, 10 Sep 2023 07:00:00 Z</pubDate>
<title>Error Handling Across Programming Languages</title>
<link>https://matthewtolman.com/article/error-handling-across-programming-languages.html</link>
<description>An overview of many different error handling paradigms in programming. Covers some of the advantages
                and pitfalls of each method. More of an overview rather than a comparison or opinion post.</description>
</item><item>
<pubDate>Sat, 09 Sep 2023 07:00:00 Z</pubDate>
<title>Stateless Logic</title>
<link>https://matthewtolman.com/article/separation-of-logic-from-data-storage.html</link>
<description>Coupling any form of shared state with business logic causes lots of issues, both for the maintainability
                of the code and sometimes the performance of the code as well. In this article, we dive deep into what
                problems state can cause, how to remove state from methods, and the benefits that can come from state.</description>
</item><item>
<pubDate>Mon, 28 Nov 2022 07:00:00 Z</pubDate>
<title>Separating SQL from code with files: Initial thoughts</title>
<link>https://matthewtolman.com/article/separate-sql-from-code-with-files-initial-thoughts.html</link>
<description>Some initial thoughts after experimenting with separating SQL from code using SQL files.
                Comparing it against inline SQL as well as views and stored procedures.</description>
</item><item>
<pubDate>Fri, 11 Nov 2022 07:00:00 Z</pubDate>
<title>Predictions in Tech: Looking Forward from 2022</title>
<link>https://matthewtolman.com/article/predictions-tech-2022.html</link>
<description>Some predictions of mine looking forward, focused mostly on the tech industry.
                Made in 2022.</description>
</item><item>
<pubDate>Thu, 20 Oct 2022 07:00:00 Z</pubDate>
<title>Why Care About Web Accessibility</title>
<link>https://matthewtolman.com/article/web-accessibility-basics-2022.html</link>
<description>Anyone with an internet connection can access the internet.
                But not everyone with access to the internet can use the internet.
                Millions of people are excluded from using large parts of the internet,
                and at no fault of their own.
                Instead, it's the fault of websites and the people who build them.</description>
</item><item>
<pubDate>Tue, 27 Sep 2022 07:00:00 Z</pubDate>
<title>Introduction to Localization and Language</title>
<link>https://matthewtolman.com/article/introduction-to-localization-and-language.html</link>
<description>Localization is important to reach a global, international, and interlingual audience.
                To do that, one of the first major hurdles is to design localization code and best
                practices to be able to handle the diversities of human languages.

                In this article, we cover the common unknowns of human langauges and how to adapt
                code to handle them. We also talk about why avoiding certain sentence structures
                and phrases can help.</description>
</item><item>
<pubDate>Tue, 20 Sep 2022 07:00:00 Z</pubDate>
<title>Chains, Buckets, and Iteration</title>
<link>https://matthewtolman.com/article/chains-buckets-and-iteration.html</link>
<description>Why does it matter what types of iterators we have?
                Because it dictates how code can be written and how well code performs.

                Our iterators constrain what kinds of abstractions we can put around our data structures.
                Without nuance in our iterators, we can run into a "slowest common performance"
                problem when we try to make generalized libraries and solutions.</description>
</item>
</channel>

</rss> 