Algorithms
The first entry on this page should be a link to Nick's damn cool algorithms. Because algorithms can be damn cool. The rest of links on this page come in no specific order (for now).
-
CORDIC efficient calculation of trigonometric functions. Easy to implement on hardware as it only requires shift and add operations and is way simpler than for example Taylor Series. Some scientific calculators still implement this algorithm today. (mentioned in Analogrechnen) Comparison of different implementations of Cosine, including CORDIC and Taylor Series
-
Zsh and Fish’s simple but clever trick for highlighting missing linefeeds Terminals do not provide a lot of options to work with missing linefeeds. One reason is that shells do not read processe's output
-
Conflict-free replicated data type for example for Etherpad. I read someone suggesting Firebase but for conflict-free data, which makes sense considering syncing between mobile apps and the web. In addition a practical guide for data syncing on iOS
-
Normalizing Unicode If strings look the same, they do not necessarily have the same byte representation, so normalization is required
-
How random can you be? Game to predict user inputs, because human behaviour is (usually) not random. The algorithm behind is rather simple. Every possible sequence of five user choices is in a database. Under each sequence, there are two counters, one for "user choice 1", the other for "user choice 2". Whenever the user chooses between two options, the software takes the last five entries, looks that sequence up in the database, and updates the counter according to the user's choice. Before the next user input, the algorithm can look up the sequence of the last five button presses, check which counter is higher, and based on the higher counter, predict which choice the user is likely to make.
-
JMAP (is not IMAP) new e-mail protocol
-
Negative base number system without the (positive/negative) sign, but with increased complexity for calculations
-
Fallacies of distributed computing false assumptions programmers have, collected by Sun Microsystems
-
Magnetic ink character recognition is still a thing when it comes to automatic character recognition, for example my amateur radio club uses it for paper mail processing
-
QR-Codes explained step by step and because you will need it: Explanation of Reed-Solomon
-
Book Review: A Philosophy of Software Design contains a good summary, which is good, because I never found time to read the book
-
The Illustrated TLS Connection Step by step walk-through the protocol
-
Let’s talk about PAKE which stands for Password Authenticated Key Exchange. Could be a handy way of web authentication, as people agree on a pre-shared key with almost every authenticated web service. Sharing the secret is not required for this protocol, so phishing would get a lot harder
-
High Density Wi-Fi Deployments almost complete guide for an industrial wifi network and another article on the same topic
-
Functional programming with the most popular functional programming language: JavaScript
-
Image Discovery on Netflix How Netflix automatically generates preview images for movies
-
Eller's Algorithm for perfect mazes
-
Thinking for programmers talk by Leslie Lamport
-
Choosing random points inside a sphere is harder than you think, as spheres are hardly linear
-
How Not To Sort By Average Rating Websites like to present public user inputs in some sort of rating. The best solution I know is explained here.
-
HyperLogLog — A probabilistic data structure Count distinct elements in a set in an efficient (but not exact) way
-
Mann–Whitney U test Check if two samples are from the same distribution
-
Zero knowledge proofs link collection
-
Rendezvous hashing for agreeing from a set of options
-
Heap's algorithm for all permutations of a set
-
Statistics about billionaires and how to become one
-
Sussman anomaly and the quirks of planning in artificial intelligence
-
Union find data structure how social networks solve "You and your friend both know person X"
-
Traveling Salesman solved not really of course, but a self-organizing map helps
-
Bresenham's Algorithm explained. Drawing straight lines on pixelated displays
-
The tricky nature of formatting a programmer's jouney on a seemingly simple task
-
Floyd-Warshall Algorithm to find the shortest path between two nodes in a graph
-
Zooko's Triangle the law that came across my programming journeys most often I think. For names in a network, you can only pick two: Human-Meaningful; Secure; Decentralized
-
Observed Failures by NASA. All of them in the category "that can't happen". All of them could have been found by formal analysis
-
Detection and handling of state flapping, a common problem mainly in monitoring
-
Exactly once approach Doing things exactly once in a distributed system is easy and sometimes inevitable, for example when billing customers
-
Surprising statistical effect when sharing money randomly in a group
-
Allen's interval algebra event start times and their relations
-
Closest pair of points problem one of the first problems treated in computational complexity
-
Fisher-Yates Shuffle or, how to efficiently shuffle a playlist