A linestring is simply a sequence of two or more points (or zero points), where each pair of points defines a line segment. Thus the sequence can be thought of as string of line segments that define some curve. To interpolate along a linestring is, effectively, to walk along the linestring until we get to […]
As a consultant at Atomic, I evaluate or contribute to a lot of codebases. Over the last few years, as Redux and TypeScript have superseded the use of more object-oriented paradigms, I’ve noticed a common issue — tight coupling of all layers of the application state. Redux stores a single reference to an immutable global […]
The crossing numbers of graphs is an interesting topic in discrete geometry, graph theory, graph drawing, and computer science. Though simple at its core, it lends itself to ideas that are much more complex.
As many developers know, working with timestamps can be pretty terrible. But things weren’t always this way… They were worse. Clocks, and more specifically coordinated clocks are a modern invention. Getting the whole world to agree to a single, computer-friendly timekeeping system has been a pretty bumpy road.
Our team recently found itself in a situation where we needed to write a database query to: Union several tables together Filter out some rows Sort the unioned set different ways This was going to be a very expensive and slow query.
Applications with high performance requirements generally need ways to shed load from overwhelmed services. There are a couple of common ways to approach this, but which one is best for your current project?
I’ve been an advocate of the single-responsibility principle for a long time. I’ve used it effectively on several projects to make sure that each individual class or function has a singular purpose. It’s definitely kept me from making an unholy mess out of some of the more complicated projects I’ve worked on. However, particularly with […]
Genetic algorithms are a class of algorithms designed to explore a large search space and find optimal solutions by mimicking evolution and natural selection. Potential solutions are randomly found, evaluated, and bred with one another in hopes of producing better solutions.
Reasoning about a program’s behavior is extremely tricky in the best of circumstances. When you throw in asynchronicity, it is the absolute worst. It’s like your code is trapped in a convoluted time travel movie. You want to perform some operation, but that requires stepping into a time portal and coming out at some indeterminate […]