Bitboards in Chess Engines
17 June 2024The first time I came across bitmaps was when I was looking into writing a chess engine. A chess board is 64 squares in a 8x8 grid. The…
The first time I came across bitmaps was when I was looking into writing a chess engine. A chess board is 64 squares in a 8x8 grid. The…
Using a mock filesystem can help reduce test flakiness and speed up tests. A regular filesystem introduces two problems for tests. The first…
It can be hard to accept feedback. Feedback typically involves information about us that we might not want to hear. I have sometimes found…
Giving feedback is a thing we are supposed to do often, and ideally be good at it. Feedback used to be a thing I had though as a dial to be…
How do you go about deciding how big services should be when using service oriented design or micro-services? Software Architecture the…
Bazel is an open-source build system created by Google, that can provide fast builds for Go projects though incremental builds and remote…
Contexts in Go live for the duration of a request and can contain an arbitrary set of values. This can be convenient because frequently used…
Tracing gives a detailed breakdown of where time was spent, typically an HTTP request. We can do the same for shell scripts. If you find…
Dependency metrics for architecture improvements We can use dependency metrics to design our code to be built and test faster. As a codebase…
Parallel processing in bash is easy with the command. There is a small gotcha to watch out for. To use it will wait until all child…
Can you concurrently write to slices in GO? The short answer is yes. The Language Specification for GO describes different behavior for…
We are going to be building 3 docker images in search of the smallest Golang docker image. A while back I reduced the size of a Golang…
This is part 3 of a 3 about creating an Actions Per Minute (APM) tracker for playing video games on windows. Part 1, Keylogger Part 2, UI…
This is part 2 of a 3 about creating an Actions Per Minute (APM) tracker for playing video games on windows. Part 1, Keylogger Part 2, UI…
This is part 1 of a 3 about creating an Actions Per Minute (APM) tracker for playing video games on windows. Part 1, Keylogger Part 2, UI…
If you sit with an engineer and ask them to show you their commit-to-production workflow, it is staggering how tolerant engineers are of…
A growing software department usually means creating a dedicated ‘platform team’ to take care of the non-feature components, but what should…
How do organizations end up with so many rules that get in the way of getting work done? Well-intentioned decision-makers are often victims…
Leveling up in video games is easy. As a gamer, I often wish more things like career improvements could be as easy as playing games and in…
This is a write-up of a small SaaS app cloudleaderboard.com I had built, deployed, marketed, and since shut down. In my professional career…
Meetings are generally not good in startups. This is not because meetings are inherently bad, but the organization processes around meetings…
A SMART goal if you are not familiar is an acronym that stands for: specific, measurable, achievable, relevant, and time-bound. The purpose…
This is based on the talk ”Mistakes and Discoveries While Cultivating Ownership” by Aaron Blohowiak What is ownership? Ownership is a shared…
The RED method is a set of three metrics, Requests, Errors, Duration, that act as a good place to start for monitoring our microservices…
With Golang we can inject build-time variables into our binary. This can help provide users with a quick way to gather more information…
Coming from a world of containers managed by Docker, systemd lets us do that for binaries on a host. We will be setting up a small webserver…
The idea for a 5x5 method for coming up with an engineering strategy in Write five, then synthesize - which I recommend reading. The gist is…
We can make significant gains in space efficiency by reducing our accuracy from exactly 100% to approximately 100%. Most data structures I…
If multiple teams are struggling and need hires but you don’t immediately have hires for all of them, what do you do? I was in a situation…
If you are doing bulk inserts into Postgres you may have hit a message like this , You may be tempted to rewrite your query into chunks and…
1) Hoots law https://blog.boomsupersonic.com/the-astronauts-guide-to-problem-solving-5eafdca29fd7 No matter how bad things are, you can…
A pattern I have observed in projects falling behind is not a lack of output - but a lack of desired output. For example, a team is working…
Will microservices sharing a database prevent them from being autonomous? If you are not sure, then the answer is most likely yes. The…
Effective monitoring for microservices requires an architecture that extends beyond the success rate of incoming HTTP requests. Coming from…
An inefficient meeting taught me a lesson about leadership and building consensus. There was a change I wanted multiple other teams to adopt…
Linux kernel modules are pieces of code that can be loaded and unloaded into the kernel without rebooting the system. Running code inside…
Go provides support for heaps as part of the language. What we have are interface and module methods, these can be a little intimidating if…
Its 2 AM alarms are going off that your microservice system, designed to be resilient to failure is now failing. After looking at your…
Originally I was looking at buying one from OhMyKeycaps but after spending some time in Reddit ErgoMechBoards I decided this would be a fun…
A single question to improve the overall quality of meetings: Is a decision needed?. If ‘no’, then consider alternatives. If ‘yes’, then…
My hope is that this answers a few questions about my thought process and adds a set of conversation starters. This does not replace getting…
Presentations are sometimes inadequate ways to communicate information. Introducing information for the first time verbally and without a…
It is easy to jump into a new project and either accidentally fail by trying to change everything at once. The better strategy is to make…
A good habit for the success of large projects is getting ‘buy-in’ or alignment from peers prior to starting. One of the challenges is that…
We need a quick way to set up a daily job that will be posting to Twitter. Today is the day we use serverless.com and see how fast it is to…
You need to tune Postgres auto-vacuum settings, but per-table can be hard to manage. Postgres auto-vacuum and auto-analyze settings are…
Catchphrases can create vivid and memorable scenarios that act as heuristics for behavior and decisions. In The Culture Code, Daniel Coyle…
After watching a talk on eBPF Superpowers, I wanted to give writing a program myself a try. Thanks to BCC BPF is pretty easy to get started…
OKRs hierarchy: how do you set goals and keep alignment from company to department?
Uh-oh! something just happened One of these queries might quickly narrow down a problem with your Postgres database. With a little luck, the…
After watching this talk from Luke Hoban, I wanted to give it a spin. Hoban’s analogy of current tools as Assembly language of the could…
We will be speeding up our JSON processing by 11x with a few tricks: reusing allocated memory the Flyweight pattern JSON parsing without…
Both Uber and Lucidchart have detailed breakdowns of gains by compressing JSON payloads and I wanted to give high compression a try with…
So you have a Docker container running locally and you want to run it in the cloud. Terraform makes it easy to quickly set up the cloud…
We are going to cut our write payload down by 95% for our very specific example. What happens when you frequently receive a payload for an…
You might have a use case to dynamically add environment variables to docker containers. If you have ephemoral hosts and using something…
What could go wrong with transferring money between two accounts? I have written about how easy it is to get wrong (giving away or losing…
WASM has been making a lot of progress recently so I was looking for a small project to run through and tetris with rust came to mind. Its…
Take a screenshot, blur it, and use it as the screensaver with a little lock icon on top.
Adding too many indexes has a cost, we are going to run through some example data and what size of an impact it looks like A common rules of…
Casbin is an authorization library that supports ACL, RBAC, ABAC permissions on resources. If you are not familiar with those terms, we will…
If we imagined better tooling around managing flaky tests what could we come up with? One thing I have noticed in working with polyglot that…
So maybe you upgraded our authentication logic to no longer be a system bottleneck but now find authorization slowing you down, or have…
Golang error handling is fun because it is a first class citizen in the language, but the built in behavior is bare bones. But there are two…
If you are building an effective team, do you know what you are building towards? Is it more than just putting smart people in a room…
‘What makes a great engineering manager?’ This is a question that I get asked a lot by both new and experienced managers. On the new manager…
If you find yourself doing lots of work constantly but seemingly unable to get the things done that you planned to, categorizing work may…
There is a really good chance you are not getting effectively coached, and you are not giving effective coaching. Has a peer come to you…
By default GKE does not use SSD for Persistance Volumes (PV), which is a little annoying since that is usually what I am looking for. I…
We are going to look at finding memory leaks in golang using a tool called pprof. As a quick refresher, a memory leak is when an application…
We are doing to be building a docker from scratch, and I do not mean a Dockerfile from scratch, I litterally mean the container. Getting…
Prolog is a declarative language around logic programming, where we can specify the rules and facts of a problem and let the language…
Sidekiq is a great library for getting asynchronous library for quickly moving work into background jobs in Rails/Ruby apps, but it can drop…
If production is on fire from slow queries, the quick command to identify them is: The above command will output any queries that have been…
Neo4j uses a declarative language called Cypher, that lets us easily make graph style queries that return some pretty cool data. We will be…
Neo4j has a csv import tool that makes importing large datasets pretty easy, especially if you happen to be exporting data out of postgres…
Leaderboards can be cumbersome to build, especially building one that can scale past millions. Fortunately Redis has built-in data type that…
PostgreSQL has a useful function called that makes selecting ‘has many’ data associations pretty easy. In our example we have contacts who…
If you have dropped messages after introducing RabbitMQ (or another messaging tool) then this is for you, a quick example on the most common…
Ever struggled with where where to stick your Rails app logic? or had controllers and models getting big? When I first started with rails…