I've been building an SMTP server in Gleam lately. I won't say "From scratch" as I'm using Rawhat's wonderful Glisten 
 library, which provides the TCP transport layer,
but outside of that, I'm not (currently) using any other libraries. What I've actually implemented so far is rather small. I haven't touched IMAP or POP and have just focused
on reading TCP packets, parsing them as SMTP…

 Zig does not have an interface keyword — and that’s a feature, not a bug. 
 
 Zig’s design deliberately avoids baking object-oriented abstractions into the language. Instead, it gives you a small set of powerful primitives — structs, pointers, comptime, and function pointers — and lets you decide when abstraction is worth the cost. 
 Yet if you look closely at Zig’s standard…
Hey, everyone! Welcome to this tutorial where we'll explore one of Zig's most powerful features. Today, we're going to see how easy it is to use existing C libraries directly from Zig code. 
 Why C Interoperability Matters 
 One of the things that got me really excited about a different language, Clojure, when I was learning it was that although the Clojure ecosystem felt small, I had…
Blazingly fast. No hidden control flow. No hidden memory allocations. No preprocessor. No macros. Zig is a blessing to the programming language community. 
 General Zig 
 
 Zig's release modes 
 
 Multithreading in Zig 
 
 Add git dependencies with zig fetch 
 

One of the first things I bumped into when I started writing Zig was its release modes . At first I thought: do I really need four different ways to compile my code? But as I dug in, I realized that release modes are one of Zig’s most practical features. They let you explicitly choose between safety, speed, and binary size — depending on whether you’re prototyping, testing, or shipping. 
 In…
When building an embedded database, one of the most critical decisions is choosing the right data structure for storage and retrieval. After implementing a complete B+ tree from scratch in Zig for LowkeyDB, I want to share the journey, the challenges, and the (hopefully) elegant solutions that emerged. 
 What is a B+ Tree and Why Should You Care? 
 A B+ Tree is a self-balancing tree data…
In this article, we’ll explore how to implement zig multi-threading to speed up an integration test runner by leveraging thread pools, mutexes, and wait groups. If you’re looking to enhance your Zig projects with efficient parallel processing, this step-by-step guide will walk you through the entire process—from refactoring your code for thread safety to running tests concurrently. If you'd just…
Building a Soil Moisture Sensor in TinyGo with Arduino 
 If you're a Go developer and want to dip your toes into the world of hardware, I’ve got good news: you can absolutely build cool stuff—like a soil moisture sensor—without switching to C or C++. Thanks to TinyGo 
, you can write Go code for microcontrollers like the Arduino. And yes, it’s as fun and straightforward as it sounds. 
…
When I landed my first programming job, I was contracted to help an interactive agency during the mobile app rush of 2010. Android Cupcake had just launched and mobile phones as we know them today were becoming commonplace. They needed a developer to help make sure they remained a dominant player in this space as the landscape changed -- I got to be that person. 
 The times were different back…
Boy, does this feel like a weird blog post to write. I had to dig into the source code for the Zig cli to figure out how to do this, so I'm going to write about this and hopefully spare others from that pain. 
 Zig is a fun language and there's something sexy powerful dangerous enjoyable about having control of how memory is allocated. However, as with any language that I'm learning in my…
gRPC (Remote Procedure Call) is a powerful tool for building robust and scalable communication between server applications. It offers several advantages over traditional REST APIs, including type safety, performance optimizations, and a cleaner development experience. In this blog post, we'll explore how to leverage gRPC with Go to establish communication between servers. We'll build a simple…
A few weeks (months? Has it been that long?) ago, I was listening to an episode of the Go Time podcast 
, in which Jon Calhoun (made famous by the esteemed Calhoun.io 
) mentioned that he had removed all of his analytics tracking from aforementioned website. I'm just going to share the quote here: 
 
 I think I've told this on Go Time before, but I used to have Google Analytics on…
Welcome back to the blog! I'm excited to share a tip that I've found incredibly valuable for managing my projects, both personal and professional: the tool directory . 
 What is a tool directory? 
 It's a dedicated space within your project repository that houses commonly used scripts and utilities. These scripts automate repetitive tasks, manage the codebase, and ensure consistency in…
In the world of Go programming, logging is an essential aspect of any application. It helps us track down issues, monitor the behavior of our code, and gain insights into how our software is performing. While the standard library provides a basic logging package, it's time to step up our logging game with log/slog . In this blog post, we'll explore why you should embrace log/slog 
 in your Go…
Introduction to Go's WaitGroup and its Importance in Concurrent Programming 
 Go's WaitGroup, concurrency in Go, goroutines synchronization, concurrent programming 
 When it comes to concurrent programming in Go, the WaitGroup plays a crucial role in ensuring synchronization and coordination among goroutines. Go's WaitGroup is a powerful tool that allows developers to manage and control…
For me, embarking on a software development journey can take two distinct paths - the Journey Development Path and the Destination Development Path. Each approach brings its unique set of goals, challenges, and rewards. In this blog post, we will explore the key differences between these two development philosophies and discuss how they influence us as developers. By the end of this article, my…
Streamline Your Development Environment: Organizing .rc Files and Custom Executables 
 Introduction 
 As a programmer, maintaining an organized and efficient development environment is crucial for productivity. In this article, we'll explore effective techniques to organize your .rc files, regardless of the programming language you're using. We'll cover breaking them out into separate rc…
Welcome to another exciting blog post on learning the Go programming language! Today, we're going to dive into one of the core features of Go: channels. Channels serve as the superhighways of communication in Go, allowing different goroutines to exchange information efficiently and safely. So, fasten your seatbelts, and let's embark on an educational journey through the world of Go…
As a Flutter developer, you may have encountered the challenge of restoring the state of an application after it has been closed or suspended. Flutter state restoration is a feature that allows you to preserve and restore the state of your application. This feature is particularly useful for applications that require persistent state, such as games or productivity tools. 
 In this article, we…
If you're looking to add some reactive frontend elements to your simple blog without having to resort to more complex frameworks like React or Vue, web components might just be the answer you're looking for. In this blog post, I'll walk you through how I added web components to my Hugo blog using Lit components and Vite as a simple build system. 
 What are web components? 
 Web components…
I have been writing blog posts for almost ten years now. Ten years is a long time. My personality has changed, my aspirations have changed, and my knowledge and area of focus has changed (See: Why I'm switched from Python to Clojure 
 and I haven't written a single line of Clojure in years). 
 When I first started my blog, I wanted a platform to share knowledge with other developers. I was…
The use of ASDF can be an incredibly useful tool for managing your development environment. ASDF is a version management syste for tools, which ensures different versions of programming languages, libraries and other tools are used in the right places. Ultimately, ASDF makes it easier to develop and deploy applications and helps keep everyone on your team developing against the same tool versions.…
A few years back I wrote a Naive Bayes classifier in Clojure 
 and haven't done much with any form of machine learning (regardless of how rudimentary) since. To be honest, I was struggling to see practical applications for machine learning outside of things requiring massive neural networks. I've been able to spend some time digging deeper into machine learning and am finally starting to get a…
Let's start by clearing the air. Rust has cows. These cows don't moo, can't be milked (or can they?), and can't even be tipped (please don't tip cows). In fact, theses cows aren't cows at all -- they're Cows (Clone On Write). 
 pub enum Cow < 'a , B > where 
 B: 'a + ToOwned + ? Sized ,{
 Borrowed( & 'a B),
 Owned( < B as ToOwned > ::Owned),
 }
 The Cow type is a smart…

 PRIVACY POLICY Last updated August 28, 2023 This privacy notice for BradCypert.com ( ' we ,' ' us ,' or ' our ' ), describes how and why we might collect, store, use, and/or share ( ' process ' ) your information when you use our services ( ' Services ' ), such as when you: Visit our website at http://www.bradcypert.com , or any website of ours that links to this privacy notice Engage with…
This is the 2nd year that my wife and I have hosted a chili cookoff. We invite friends and family, some of them bring chili, and everyone participates in a democratic vote for the 1st, 2nd, and 3rd best chilis (and this year, we're doing hottest and most creative, too). Last year, we assigned the chilis a number and gave three scraps of paper to each cookoff-goer on which they'd write the number…
What is a team charter 
 A team charter is a document that defines the purpose, scope, and objectives of a software engineering team. It is important for teams to have a charter because it helps to ensure that everyone is on the same page and working towards the same goal. Having a charter also makes it easier to hold team members accountable for their actions and performance as well as…
The Drop trait in Rust only has one method but it's extremely important. The drop method on the Drop trait is called automatically when an object goes out of scope. This means that when an object's lifetime ends, drop will be called on that object. 
 The main purpose of the Drop trait is to give developers a place to free up resources when an object is no longer in scope. If your object claims…
Mentoring software engineers can be a rewarding experience. It can also be challenging, as there is no one-size-fits-all answer to the question of how best to mentor someone in this field. In this article, I'll explore some of the different options available for mentoring software engineers. I will also provide some tips on how to be an effective mentor. 
 What is Mentoring for Software…
Rust's trait system is like a breath of fresh air when compared to some of more recent language forays. One of my favorite things about Rust and it's trait system is how the From and Into traits work. 
 The From trait is a trait that you can implement on your own types, but its also implemented on a few existing types 
, too. From allows you to specify code to generate something of type X…
A fantastic user experience is a powerful tool for your application. It can help market your application (everyone loves a pretty app), can help with user engagement and can even be a competitive advantage in certain contexts. Flutter gives us so many tools to help us build fantastic user experiences - Hero, LayoutBuilder, Snackbar and more. Most of these are fairly well documented and are rather…
Code Coverage helps you identify how much of your code is covered via test cases. Coverage itself is an interesting idea. People are largely divided on it but coverage can be a useful metric if used for objective information and not used to measure success. In this post, we'll cover generating coverage for flutter and dart (each individually), formatting that coverage if needed, and then uploading…
Command Line Interfaces (CLIs) are some of the simplest program interfaces to build, but some of the most difficult program interfaces to build well. CLIs have been around longer than I have and, over my career, I've really grown to love them. CLIs can be written in many different languages (I've recently written some in Go and Rust to name a few), but today I want to talk about writing CLIs in my…
Unfortunately the documentation around isolates is not very good, but they're a very powerful feature. If your goal is to avoid jank, you need to keep your main thread's UI responsive, and you need to make sure your main thread is not blocked by long-running tasks. Isolates help you achieve this. 
 Isolates are a way to run long-running tasks in a separate, isolated thread. They are useful for…
Rust's memory management can feel a bit intimidating for most developers. Rust gives you some control over whether you're allocating data on the stack or the heap and its up to you to decide where memory should be allocated. 
 When you allocate memory for values in Rust, that memory is allocated on the Stack 
. Memory on the Stack is allocated in a "stack frame" which contains information…
Flutter's LayoutBuilder Widget is a widget that allows you to adapt children widgets based off the constraints that the LayoutBuilder is contained in. This allows you to layout widgets differently in different sized containers (like a phone screen vs a tablet screen), but LayoutBuilder also allows you to change how widgets render based off the container that they're rendered within. A good example…
There are a lot of alternatives to inheritance. Abstract classes, interfaces, some languages have "traits", and in Dart,
we have Mixins (and abstract classes and implicit interfaces, too). Mixins are a way to reuse class code in multiple class hierarchies. 
 How do you declare a Mixin in Dart? 
 Mixins require using 2 different keywords to fully make use of them in Dart. 
 First,…
There are several differences between junior and senior developers, but one of the most noticeable differences is around how they communicate. In development, questions are one of the most common forms of communication. Here are some tips that I have to help you ask senior-level questions. 
 Ask a question. 
 This one might seem obvious, but if you're looking for an answer, start by asking…
SimpleDialogs are an insanely simple way to display immediately actionable items while conforming to the Material Design specification. They're recommended for use when you need a flexible dialog that doesn't leverage text buttons. Take a moment to familiarize yourself with the Material Spec for SimpleDialogs 
 and once you're back on this tab, we'll dive into their implementation specifically…
One of the key selling points for building Flutter applications is the framework's options for building responsive mobile applications. However, it's easy to find yourself overwhelmed by the many options that are available. Often times, you'll want to leverage BoxConstraints, LayoutBuilder, AspectRatio, FittedBox or maybe even the rare FractionallySizedBox. You might even be able to keep things…

 
 
 In 2015, Google announced that the Dart VM would not be built into chrome . This was an impactful day for me because from Dart's inception, I had hope that we'd have a first class alternative to JavaScript for web clients. 
 Don't get me wrong, I have written a ton of JavaScript, but that doesn't necessarily mean that I like the language. TypeScript, although not something a…
Well, It's been a long time coming, but I've finally migrated off of wordpress and onto something I'm a
a little more comfortable regularly working with. What did I choose (Spoiler: It's Gatsby)? How did I migrate
everything? Read on to find out more. 
 
 This is a early revision of a living document. I am still working on pieces of
 my Gatsby migration and will update this…
I was talking with a friend the other day about Flutter for Web’s SEO, which… is not very good. He asked if I was concerned about search engines not being able to find my app to which I said “No.” My Flutter app is behind a login, so Google wouldn’t be able to index anything behind the login anyways, but that’s not why I’m not concerned. I still want people to find my app, but I handle how they…
If you look back at any of my blog posts, you’ll likely find an introduction like “Recently I was exploring…” This time is no different. I’ve been exploring Dart 
 (and have dreams of a frontend framework written in Dart) as well as Github Actions 
. At work, we recently migrated TeamSnap UI 
 (our open source component library) from our internal CI pipeline to use Github actions and…
JSON 
 is, as of 2020, the communication standard for most web applications (comon gRPC 
! You can do it!). Naturally, if you’re building a Dart application, you’ll likely want to work with JSON. Dart’s built-in dart:convert package 
 is just the tool that you need! 
 Creating a Model 
 One of the first things that you’ll probably want to do is to create a model for your JSON…
Asynchronous programming in Dart is an absolute blast. Dart offers a couple of different options when writing asynchronous code: namely Futures 
 and Streams 
. You can use both Futures and Streams to solve a lot of the same problems, but each serve their own purpose as well. 
 Futures are a type that models a computation who’s value may or may not be available. If you’re unfamiliar…
Last night, as I was writing code in a Flutter app, I came across an interesting dilemma. I wanted to throw a custom exception if I was unable to sign in with Apple on the login screen — nothing too crazy. Naturally, this lead me to creating a custom exception. I tried something along the lines of: 
 class PlatformException extends Exception {}
 // ^ does not work!
 However, I found…
If you’re coming from React Native to Flutter, one of the first things you’ll likely ask is “How do I do routing?” First, I’d ask you to consider if you actually need routing. Instead, could you just have a global state that determines which screen to show? In most cases, probably. But if you want things to feel right when building Flutter for Web (or want decent deep linking support), you’ll…
TypeScript offers a plethora of types 
 for developers to leverage, but some of the types may be ones that you’re unfamiliar with. Take the tuple, for example. JavaScript doesn’t have a concept of tuples 
, so figuring out how and when to use one might feel tricky. Thankfully, Tuples are pretty simple and are used by popular frameworks, like React. 
 What is a tuple? 
 Tuples allow…
PHP is finally getting arrow functions (also known as Short Closures)! I know, I know. I’m just as excited as you are. Here’s everything you need to know about arrow functions in PHP. 
 First, arrow functions are an approved RFC for PHP 7.4. If you’re using a version of PHP that’s lower than 7.4, you won’t be able to use arrow functions. 
 Second, arrow functions can only contain one…