Our thoughts on software engineering, product development, and cooperative workplaces.

Introducing Diggetal

Company  Diggetal 

We started Limeleaf to work with smart people on interesting tech projects that make a difference.

But we also did it to have fun, learn new things, and fall in love again with tech.

Today we launched Diggetal, an initiative dedicated to tinkering around with small projects.

Why Go and Rust?

Engineering 

I was about 80% finished with this post and I was going down the road of listing out all the great things both Go and Rust offer for us to build and maintain software for our clients and product, but then I threw it all out. I realized that posts like that are a dime a dozen and there are so many resources out there comparing, contrasting, and listing features of both languages, but none of that really explains WHY we, the humans Erik, John, and I, like using Go and Rust. So instead I thought it would be better to personalize this a bit and grab some quotes from each of us about why we like each of them, unedited, unfiltered, and raw!

We Are Changing Our Domain

Company 

This morning, Blain educated me about the history of the .io top-level domain. I didn't know that history when I bought limeleaf.net last year before teaming up with Blain and Erik.

limeleaf.net wasn't available then, but to my surprise and delight, it was this morning, so I bought it.

All Limeleaf site traffic and email now redirect from limeleaf.io to limeleaf.net, and I have donated $50 to Chagossian Voices.

Step 0 of Starting a Tech Worker Co-Op: Define Your Goals

Company  Co-Ops 

Worker cooperatives ("co-ops") are a growing alternative to traditional hierarchical tech company structures, which often rely on venture capital funding. Unlike conventional startups that take VC money in exchange for an equity stake, co-ops prioritize worker ownership, democratic decision-making, and profit sharing and strive to embody the 7 Cooperative Principles established by the International Co-operative Alliance.

Safer Binary Decoding in Go

Engineering 

Go is a popular language choice for building web services. Typically, when building those web services, we end up encoding/decoding JSON as the data format. The encoding/json package provides a safe way to turn JSON payloads into Go structs, and vice versa.

However, if we need to handle raw []byte that follow a binary encoding format that is not self-describing, we need to do a bit more work and implement the encoding.BinaryMarshaler and encoding.BinaryUnmarshaler directly. Since we're dealing with []byte, we need to respect slice bounds to avoid triggering a panic() and crashing our service.

Let's look at the two ways we can decode data into Go structs and compare how one way will be safer than the other while yielding the same result. As an added bonus, we'll end up with easier to understand code.