Blog Archive
-
March 2024
3
- Mar 26, 2024 The Sisyphean struggle and the new era of data infrastructure Mar 26, 2024
- Mar 19, 2024 Tableflow: the stream/table, Kafka/Iceberg duality Mar 19, 2024
- Mar 13, 2024 The beauty of writing Mar 13, 2024
-
November 2023
2
- Nov 29, 2023 S3 Express One Zone, not quite what I hoped for Nov 29, 2023
- Nov 14, 2023 The Architecture of Serverless Data Systems Nov 14, 2023
-
October 2023
4
- Oct 10, 2023 The importance of liveness properties (with TLA+ Part 2) Oct 10, 2023
- Oct 10, 2023 The importance of liveness properties (with TLA+ Part 1) Oct 10, 2023
- Oct 9, 2023 A primer on formal verification and TLA+ Oct 9, 2023
- Oct 3, 2023 The advantages of queues on logs Oct 3, 2023
-
September 2023
1
- Sep 25, 2023 On the future of cloud services and BYOC Sep 25, 2023
-
August 2023
1
- Aug 17, 2023 Kafka KIP-966 - Fixing the Last Replica Standing issue Aug 17, 2023
-
May 2023
2
- May 15, 2023 Kafka vs Redpanda Performance - Do the claims add up? May 15, 2023
- May 9, 2023 Is sequential IO dead in the era of the NVMe drive? May 9, 2023
-
April 2023
1
- Apr 24, 2023 Why Apache Kafka doesn't need fsync to be safe Apr 24, 2023
-
December 2022
1
- Dec 28, 2022 Windows shortcut to invert colours that works Dec 28, 2022
-
June 2022
1
- Jun 9, 2022 Applying Flexible Paxos to Raft Jun 9, 2022
-
January 2022
1
- Jan 25, 2022 Write for others but mostly for yourself Jan 25, 2022
-
December 2021
2
- Dec 10, 2021 Tweaking the BookKeeper protocol - Unbounded Ledgers Dec 10, 2021
- Dec 8, 2021 Tweaking the BookKeeper protocol - Guaranteeing write quorum Dec 8, 2021
-
October 2021
3
- Oct 9, 2021 Learn about TLA+ and the formal verification of Apache BookKeeper Oct 9, 2021
- Oct 9, 2021 Posts I wrote on the RabbitMQ blog in 2020 Oct 9, 2021
- Oct 9, 2021 Kafka and RabbitMQ blog posts I wrote elsewhere in 2019 Oct 9, 2021
-
May 2020
2
- May 26, 2020 With Great Observation Comes Great Insight May 26, 2020
- May 14, 2020 Why I'm Not Writing Much On My Blog These Days May 14, 2020
-
September 2019
1
- Sep 6, 2019 A Look at Multi-Topic Subscriptions with Apache Pulsar Sep 6, 2019
-
February 2019
2
- Feb 10, 2019 Building A "Simple" Distributed System - It's the Logs Stupid Feb 10, 2019
- Feb 2, 2019 Building A "Simple" Distributed System - The Implementation Feb 2, 2019
-
January 2019
3
- Jan 28, 2019 Building A "Simple" Distributed System - Formal Verification Jan 28, 2019
- Jan 27, 2019 Building A "Simple" Distributed System - The Protocol Jan 27, 2019
- Jan 26, 2019 Building a "Simple" Distributed System - The What Jan 26, 2019
-
November 2018
3
- Nov 20, 2018 Quorum Queues - Making RabbitMQ More Competitive in Reliable Messaging Nov 20, 2018
- Nov 14, 2018 Why I Am Not a Fan of the RabbitMQ Sharding Plugin Nov 14, 2018
- Nov 2, 2018 Testing Producer Deduplication in Apache Kafka and Apache Pulsar Nov 2, 2018
-
October 2018
2
- Oct 21, 2018 How to (not) Lose Messages on an Apache Pulsar Cluster Oct 21, 2018
- Oct 3, 2018 Understanding How Apache Pulsar Works Oct 3, 2018
-
September 2018
4
- Sep 20, 2018 How to Lose Messages on a Kafka Cluster - Part 2 Sep 20, 2018
- Sep 18, 2018 How to Lose Messages on a Kafka Cluster - Part 1 Sep 18, 2018
- Sep 13, 2018 How to Lose Messages on a RabbitMQ Cluster Sep 13, 2018
- Sep 5, 2018 RabbitMQ vs Kafka Part 6 - Fault Tolerance and High Availability with Kafka Sep 5, 2018
-
August 2018
2
- Aug 31, 2018 RabbitMQ vs Kafka Part 5 - Fault Tolerance and High Availability with RabbitMQ Clustering Aug 31, 2018
- Aug 14, 2018 AWS Security - Securing Your Use of the AWS CLI and Automation Tools Aug 14, 2018
-
July 2018
2
- Jul 25, 2018 RabbitMQ Work Queues: Avoiding Data Inconsistency with Rebalanser Jul 25, 2018
- Jul 23, 2018 Creating Consumer Groups in RabbitMQ with Rebalanser - Part 1 Jul 23, 2018
-
May 2018
3
- May 26, 2018 Docker, .NET Core and Redshift Drivers May 26, 2018
- May 21, 2018 Event-Driven Architectures - Queue vs Log - A Case Study May 21, 2018
- May 20, 2018 Event-Driven Architectures - The Queue vs The Log May 20, 2018
-
April 2018
5
- Apr 28, 2018 SQL Server CDC to Redshift Pipeline Apr 28, 2018
- Apr 21, 2018 Processing Pipelines Series - Reactive Extensions (Rx.NET) Apr 21, 2018
- Apr 19, 2018 Processing Pipelines Series - TPL Dataflow - Alternate Scenario Apr 19, 2018
- Apr 18, 2018 Processing Pipelines Series - TPL Dataflow Apr 18, 2018
- Apr 17, 2018 Processing Pipelines Series - Concepts Apr 17, 2018
-
January 2018
4
- Jan 25, 2018 AgileTM vs Real Agility - The Constant Rush Jan 25, 2018
- Jan 16, 2018 AgileTM vs Real Agility - Truly Self-Organizing Teams Jan 16, 2018
- Jan 15, 2018 AgileTM vs Real Agility - The Fight Is On Jan 15, 2018
- Jan 4, 2018 Don't Believe The Hype Jan 4, 2018
-
December 2017
5
- Dec 26, 2017 RabbitMQ vs Kafka Part 4 - Message Delivery Semantics and Guarantees Dec 26, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 3 - Kafka Messaging Patterns Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 2 - RabbitMQ Messaging Patterns Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Part 1 - Two Different Takes on Messaging Dec 10, 2017
- Dec 10, 2017 RabbitMQ vs Kafka Series Introduction Dec 10, 2017
-
September 2017
1
- Sep 17, 2017 You don't need Scrum, you need Agility Sep 17, 2017
-
June 2017
3
- Jun 16, 2017 Kathryn McConkey - The Best Osteopath in Barcelona Jun 16, 2017
- Jun 12, 2017 How to Make Your Messaging System Reliable and Keep Your Support Engineers Happy Jun 12, 2017
- Jun 10, 2017 DSL Parser - Sample Code Jun 10, 2017
-
March 2017
10
- Mar 24, 2017 RabbitMq Delayed Retry Approaches (That Work) Mar 24, 2017
- Mar 20, 2017 Reliability - Custom Retries - NServiceBus with RabbitMq Part 6 Mar 20, 2017
- Mar 19, 2017 Reliability - Default Retries - NServiceBus with RabbitMq Part 5 Mar 19, 2017
- Mar 18, 2017 Custom Topology - NServiceBus with RabbitMq Part 4 Mar 18, 2017
- Mar 17, 2017 Custom Direct Topology - NServiceBus with RabbitMq Part 3 Mar 17, 2017
- Mar 16, 2017 Default Topologies - NServiceBus with RabbitMq Part 2 Mar 16, 2017
- Mar 16, 2017 Default Topologies - NServiceBus with RabbitMq Part 1 Mar 16, 2017
- Mar 12, 2017 How to Deal with Unroutable Messages - RabbitMq Publishing Part 3 Mar 12, 2017
- Mar 11, 2017 Sending Messages in Bulk and Tracking Delivery Status - RabbitMq Publishing Part 2 Mar 11, 2017
- Mar 11, 2017 Types of Publishing Failures - RabbitMq Publishing Part 1 Mar 11, 2017
-
February 2017
1
- Feb 22, 2017 Have you got chronic eye pain like me? Feb 22, 2017
-
November 2016
6
- Nov 15, 2016 new SqlConnection - The requested Performance Counter is not a custom counter Nov 15, 2016
- Nov 12, 2016 Building Synkronizr - A SQL Server Data Synchronizer Tool - Part 1 Nov 12, 2016
- Nov 9, 2016 Generating SQL from a Data Structure Nov 9, 2016
- Nov 8, 2016 How to Kill a Keep Alive with a Weak Reference (C#) Nov 8, 2016
- Nov 7, 2016 How Row Locking Makes Taskling Concurrency Controls Possible Nov 7, 2016
- Nov 6, 2016 Announcing Taskling.NET, a C# Batch Job API Nov 6, 2016
-
October 2016
3
- Oct 30, 2016 Too Busy to Create Your Own Visualizations? Just Leverage the Neo4J Console Oct 30, 2016
- Oct 27, 2016 Why You Should Understand Databases Oct 27, 2016
- Oct 24, 2016 Exploring the use of Hash Trees for Data Synchronization - Part 1 Oct 24, 2016
-
July 2016
1
- Jul 3, 2016 5 Tricks For People Who Are Hyper Sensitive to Computer Screens Jul 3, 2016
-
February 2016
6
- Feb 25, 2016 Optimizing Regex performance with RegexOptions.RightToLeft Feb 25, 2016
- Feb 24, 2016 A More Efficient Regex Tokenizer Feb 24, 2016
- Feb 11, 2016 Implementing a DSL Parser Feb 11, 2016
- Feb 4, 2016 Understanding Grammars Feb 4, 2016
- Feb 4, 2016 Creating a Simple Tokenizer (Lexer) in C# Feb 4, 2016
- Feb 4, 2016 How to Create a Query Language DSL with C# Feb 4, 2016
-
January 2016
11
- Jan 26, 2016 Detective Optimizers Jan 26, 2016
- Jan 19, 2016 The Freedom Quadrant Jan 19, 2016
- Jan 6, 2016 Logging Query Language (LQL) – a DSL for Log Analytics Jan 6, 2016
- Jan 4, 2016 Bitching will erode your team Jan 4, 2016
- Jan 4, 2016 "We" Jan 4, 2016
- Jan 4, 2016 Breaking your own code and designs Jan 4, 2016
- Jan 4, 2016 Make mini technical leads Jan 4, 2016
- Jan 4, 2016 Code analysis rules versus training and coaching Jan 4, 2016
- Jan 4, 2016 Code Analysis Rules and the Click Through Culture Jan 4, 2016
- Jan 4, 2016 Being Open, Sharing Your Knowledge Jan 4, 2016
- Jan 4, 2016 Stop time wasters and protect your knowledge sharing culture Jan 4, 2016