Making Unicode things fast
By “Unicode things” I mean programs that process UTF-8.
The basic logic of such programs is typically:
Recent content on clipperhouse.com
By “Unicode things” I mean programs that process UTF-8.
The basic logic of such programs is typically:
I like to reduce or eliminate allocations in my projects ,
which use garbage-collected languages (Go and C#). Like you, I want efficiency –
both in CPU cycles and memory.
So, I am working on this rate limiter .
It’s in-process and in-memory. I look at other fine rate limiters, and many
offer the ability to store the state in a shared system, such as Redis. Should
I offer that?

 A follow-up to So, you’re splitting strings on the hot path 
 
 I have enjoyed optimizing my Go library for splitting (tokenizing) words according to the Unicode standard.
Having used rate limiters a few times, I’ve observed that they must be thoughtfully designed. In particular,
they are typically comprised of several policies which we wish to stack on one another. It can get messy.

 Motivated by this Twitter post by Craig Kerstiens 
 
 CDC ( change data capture ) tends to surprise in terms of expense on the production database. Each write becomes two writes — once to the system of record, and once to the changefeed.
Can we make it less expensive? Probably yes. We’ll talk about Go and C# in this post.
I had a physics professor who said the most important skill in science was to be able to characterize a system quickly. Be approximately right instead of precisely wrong. This has stuck with me.
Background: I move between Go and C# a lot, and like to compare them
Recently, I’ve implemented a Unicode tokenizer in in Go and in C# , and my career has been ~equally divided between those languages. Here are some tips moving between them.
I move between Go and C#, and one idiom I like in Go is tests living alongside the things they are testing, right in the same project. In addition to style preference, it (IMHO) more easily allows testing internal functions. In the .Net world, having a separate test project is traditional.
It’s expected that Apple will be improving Siri in the upcoming iOS 18, exploiting the progress that Large Language Models (LLMs) have made over the past year or so. How might they do it?
In the spirit of Go’s ‘good enough’ type system, here’s a thought experiment for ‘good enough’ generics…
I think the replication & open science movement is great. I come from an epistemological, first-principles sort of mindset, and so I find this very encouraging:
Stack Overflow Talent aims to connect the right company with the right developer. We call this a two-sided market – developers on one side and recruiters on the other.
I have a theory that the use of TypeScript de facto makes for more performant JavaScript, by making the runtime’s “type prediction” more accurate.
One characteristic I see in accountable managers is having the courtesy to be wrong .
This is a follow-on to my introductory post on championship , please give that a read for background.
Engineering and product managers often talk about “ownership” of features, when what we want is championship . When we orient ourselves around assignment of tasks, we ship a worse product.
On the occasion of reading Nassim Taleb’s latest book , an anecdote about how he influenced a career decision of mine.
The combination of Hugo & Netlify to host my blog has turned out to make easy things easy, and hard things possible .
A tool to discover correlations between tags on Stack Exchange sites. Start typing a tag name below, or click one of the popular ones.
I recently moved my blog from Medium to static generation with Hugo & hosting with Netlify. I prefer static hosting for performance reasons, and because Markdown is so nice.
Jargon is a Go package with tokenizers and lemmatizers. Source & docs . 
 
 
 Examples:
 
 
 
 
 Text
 
 
 
 HTML
 
 
 
 JSON
 
 
 
 CSV
 
 
 
 Click to lemmatize
A product process is typically something like Strategy → Discovery → Specification → Build → Delivery.
Here’s a habit that may help to reduce the complexity of your dependency injection tree. Ask yourself: how much of an injected dependency are you actually using?

 Thank you 
 As of December 2016 we have shut down Alikewise.com. We are thrilled with the response to the site and we hope you found romance, or at least a good read.
It’s easy to think of key performance indicators as a task to be tacked on to the end of a project. Rather, KPIs should be understood as a product like any other, and so:
Critical to developer and company success is the idea of time well spent . Optimistically, the company’s and the dev’s incentives are aligned in this regard.
I made a Chrome extension which makes Twitter.com’s UX more tolerable, called decker . It:
Code has a user experience. Our methods have a UX. Our data models have a UX.
Nulls are a notorious source of bugs in many programming languages. Here, I sketch out a way to avoid them, using C# for illustration.
Versioning is, right now, merely a human label. We have helpful conventions like semver , but one still relies on human judgment as to the definition of a “notable” change.
Apple’s ad blocking API is good for users and bad for Google, in 3 ways:
It appears that Internet advertising is going through a bit of a shakeout. Ad blocking is becoming more pervasive ( perhaps 30% of users), and a study by Google indicates that as many as 50% of ad “impressions” are never actually put in front of a human being.
I like seeing Google Fiber prompt incumbent dinosaurs into boosting speeds . It’s great.
Jeff has a thoughtful post about open source, security and incentives. A few points stood out to me.
I got trolled by a facetious article on Go on April 1. But it did trigger a conversation about why Go doesn’t do certain things other languages do.
I’ve become adamant about making internal initiatives opt-in for the following reason: it brings more information to bear.
We think of bugs as flaws in code. This is incorrect, or at best, banal.
I was recently directed to a couple of papers on browser ad-blocking software ( here and here ). They are not so much alarmist as they are self-serving and hindered by status quo bias.
Here’s a nice little technique I came across in developing gen . 
 Say you have a text template, and that template is intended to output Go code. You’d like to pass a data structure into the template, and have the structure appear in the template as its own value literal.
As recruiter pitches show up in my inbox, it’s clear there’s a lot of “fake it til you make it” when it comes to tech terminology.
Fred Wilson makes the argument ( here and here ) that net neutrality is a conservative idea. That’s correct, and that’s the problem.
A quick list of the things I use to improve my web experience:
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. — Greenspun
Prompted by this question I got to thinking about methods in C# and Go. It’s another example, I realized, of Go’s (logical) insistence on orthogonality and (stylistic) insistence on flatness/lack of hierarchy.
I was directed to a thread about a poor soul who started a project in Go, eventually had to hand it off to the community, and discovered that his original source no longer compiled, due to third-party dependencies having changed. Key quote:
Not even the original programmer, with the original files on his original dev machine, can compile the source anymore.
Here’s a smart and funny bit about culture fit. I think it’s brutal and by and large true. [1]
Megan McArdle describes the understandable discomfort that some tenants and property owners have about Airbnb’ers coming into their buildings.