RSSAmplifier

Blog

Martin Leitner-Ankerl

This website is a virtual proof that I'm awesome

martin.ankerl.comRSS feed ↗20 posts

Latest posts

A Broken Build Is Not a Bad Commit

I chased a regression through two months of history where half the commits wouldn't even compile. Here's the tool I wrote so it wouldn't happen again. - A few weeks ago I hit the kind of bug that ruins an afternoon: something that used to work didn’t anymore, and I had no idea when it broke. Not “yesterday”, not “in that one PR” — somewhere in the last month or two, buried in a stretch of history…

The Web Catastrophe That Kept Refusing to Happen

I tried three times to prove my old site was a disaster. I lost every time, with data. - Back in 2012 I made a keto calculator because I wanted exact macro numbers for my own diet, and all the advice online was too vague. I posted it on /r/keto, people liked it, Google ranked it well, and for years it quietly earned ad money while I worked on other things. It’s a single static HTML page. No…

Comprehensive C++ Hashmap Benchmarks 2022

Where I've spent way too much time creating benchmarks of C++ hashmaps - It’s been over 3 years since I’ve spent considerable time finding the best C++ hashmap. After several requests I finally gave in and redid the benchmark with state of C++ hashmaps as of August 2022. This took much more work than I initially anticipated, mostly due to the fact that benchmarks take a looong time, and writing…

Kindle Paperwhite Tips

Some helpful Tricks - I recently upgraded from my 8 year old Kindle Keyboard (2011) to a brand new Kindle Paperwhite (2019, generation 10). So far, it is a great upgrade. Here are some tricks that I found useful: Custom Fonts Connect the kindle with USB, you’ll see a folder fonts. I’ve tried a few fonts, and really like Literata. It’s very similar to Amazon’s Bookerly, and made for e-books. It’s…

Hashmaps Benchmarks - Conclusion

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1 –…

Hashmaps Benchmarks - Iterating

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1 –…

Hashmaps Benchmarks - Find 1 -- 1M std::string

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1 –…

Hashmaps Benchmarks - Find 1 -- 100k std::string

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string 👈 Find 1…

Hashmaps Benchmarks - Find 1 -- 500k uint64_t

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t 👈 Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Find 1 -- 2000 uint64_t

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t 👈 Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Insert & Erase std::string

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string 👈 Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Insert & Erase uint64_t

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t 👈 Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Insert & Access with Varying Probability int

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int 👈 Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Insert & Erase 100M int

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int 👈 Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Construction & Insert 1 int & Destruction

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction 👈 Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Construction & Destruction

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview Construction Benchmarks Construction & Destruction 👈 Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Hashmaps Benchmarks - Overview

Finding the Fastest, Memory Efficient Hashmap - Table of Contents Overview 👈 Construction Benchmarks Construction & Destruction Construction & Insert 1 int & Destruction Modifying Benchmarks Insert & Erase 100M int Insert & Access with Varying Probability int Insert & Erase uint64_t Insert & Erase std::string Accessing Find 1 – 2000 uint64_t Find 1 – 500k uint64_t Find 1 – 100k std::string Find 1…

Fast Random bool in C++

With lots of benchmarks - While playing around with fast random number generators, I’ve started contemplating what’s the fastest way to uniformly generate random boolean values. The correct solution is this (never mind the bad seeding of mt19937, but it’s just too cumbersome to do it correctly): std::mt19937 rng(std::random_device{}()); bool rand_bool = std::uniform_int_distribution<>{0, 1}(rng);…

Visualizing Bitcoin's Unspent Transaction Output

UTXO in all it's glory - About 5 years ago I’ve created a nice graph of all the bitcoin addresses. I got this: A year later I’ve tried to recreate it, but couldn’t because my PC at that time did not have enough RAM for znort987’s parser that I had used. Fast forward to September 2018, bitcoin now has an a fantastic simple REST interface! So I’ve tried again to create an updated graph of all…

Free Secure Web: Jekyll & Github Pages & Cloudflare

I have just finished moving my homepage from WordPress to jekyll + GitHub + Cloudflare. I must say this is really a fantastic setup! I have multiple reasons for that: GitHub Pages are free. Thanks to Cloudflare we get free HTTPS and caching support. Security: WordPress is a constant hassle: my website has been hacked multiple times due to old plugins or not running a recent enough wordpress…