The Curious Engineer

All blogs / Distributed systems / cloud

Evan Jones

evanjones.ca

I'm a software engineer at Datadog in New York. I previously worked at Bluecore , fixed interesting bugs at Twitter, and taught a database class at Columbia as an adjunct. I was a co-founder and CTO of Mitro, a password manager for groups and organizations , along with Vijay Pandurangan and Adam Hil

Distributed systems / cloudPerformance / optimizationNetworkingDatabasesCEngineering blogs

’05’10’15’20’25
Posts
282 from 19 Apr 2001 to 19 Nov 2023
Posting
quiet since 2023
Kind
personal blog
Feed
https://www.evanjones.ca/index.rss

2023 6

  1. Setenv is not Thread Safe and C Doesn't Want to Fix It
  2. Random Load Balancing is Unevenly Distributed
  3. Nanosecond timestamp collisions are common
  4. How much does the read/write buffer size matter for socket throughput?
  5. The C Standard Library Function isspace() Depends on Locale
  6. Huge Pages are a Good Idea

2022 5

  1. Replicating Database Changes to a Message Queue is Tricky
  2. Go: Functional options are slow
  3. Postgres large sub-string query performance
  4. Postgres large JSON value query performance
  5. Getting $3300 from a casino promotion

2021 3

  1. Durability: NVMe disks
  2. Durability: Cloud applications
  3. gRPC is easy to misconfigure

2020 1

  1. Lessons from the AWS Kinesis Outage

2019 5

  1. Tech Content I Liked 2019-12-26
  2. Why databases use ordered indexes but programming uses hash tables
  3. Tech content I liked 2019-12-01
  4. Tech Content I Liked 2019-10-30
  5. Tech Content I Liked 2019-10-24

2016 2

  1. How both TCP and Ethernet checksums fail
  2. Fixing Java's ByteBuffer native memory "leak"

2015 3

  1. TCP Checksums Are Not Enough
  2. Naive Retries Considered Harmful
  3. How to Use UTF-8 with Python

2014 1

  1. The Four Month Bug: JVM statistics cause garbage collection pauses

2011 1

  1. Farewell to MIT

2005 3

  1. Python Memory Management
  2. The $100 Laptop Project
  3. Skype Rocks!

2001 1

  1. Datalinks User Interface

Undated 251

  1. Network Latencies in the Data Center
  2. TCP and gRPC Failed Connection Timeouts
  3. Advice on looking for a new software engineering job
  4. Valuing Stock Options for Startup Employees
  5. Durability: Linux File APIs
  6. To Update or Not to Update?
  7. Limit Work for Reliable Servers (with examples in Go/gRPC)
  8. Networked games: Playing in the past or future
  9. Saving Space by Mapping Big Objects to Small Integer IDs
  10. Debugging Go with stack traces
  11. Load Balancing gRPC services
  12. PProf Web: A public web UI for the PProf profiler
  13. You can use floating-point numbers for money
  14. Kube Web Proxy: Easy access to internal Kubernetes services
  15. Google Cloud E2 machines: Overselling (finally) comes to the cloud
  16. Inside your cloud bill: where is the money going?
  17. Auto scaling changes performance bugs from an outage into a cost problem
  18. Making Writers Read
  19. Computer Bits Episode 1: How does a CPU work?
  20. The Unreasonable Effectiveness of Linear Search
  21. A Portable Cloud Experiment: SFTP Cloud Storage Sync
  22. Code that debugs itself: Fixing a deadlock with a watchdog
  23. Preventing server overload: limit requests being processed
  24. Quick Hack: Terminal apps in your browser
  25. Serverless: Platform-as-a-Service done right?
  26. BigQuery Tools: Dataset and table size report
  27. Tracing a Python performance bug on App Engine
  28. fork() without exec() is dangerous in large programs
  29. Corrupt data over TCP: It was a kernel bug!
  30. Go Gotcha: Don't take the address of loop variables
  31. Debugging Java Native Memory Leaks
  32. Finding the Four Month Bug: A debugging story
  33. SQLite: A surprisingly good data analysis tool
  34. Frameworks: Necessary for large-scale software
  35. Dotfiles: Automating my software setup
  36. Visualizing Vector Clocks
  37. Correct incremental builds with Makefiles
  38. JavaScript modules in the browser, Node, and Closure compiler
  39. Go: It's about engineering, not type systems
  40. Real bugs found by the Closure JavaScript Compiler
  41. Chrome's developer tools are a competitive advantage
  42. Trouble with Transactions NE DB Summit 2014
  43. Required reading: Unlocking the Clubhouse
  44. Google Apps Directory API: Unofficial guide
  45. Dependency injection and Guice in two minutes
  46. Yext's build system ICBM: An example of "worse is better"
  47. Mitro: No longer stealthy
  48. Static type checking: More productive for large projects
  49. A quick and dirty guide to finding Java memory leaks
  50. Social networks: If you can't beat them, join them
  51. Databases should encrypt unique IDs
  52. Trouble with transactions
  53. New York State: Unfriendly to small businesses
  54. Integer division: Results are language-specific
  55. Builds are Complicated: Java
  56. Python Module Name Clashes
  57. Kill "Summary Paragraphs" in Academic Papers
  58. Builds are Complicated: C/C++
  59. Building Software is Hard (for good reasons)
  60. A TCP "stuck" connection mystery
  61. LMAX Disruptor: Fast Concurrent Ring Buffer
  62. Producer/Consumer Tasks and the Scheduler
  63. Making Writes Durable
  64. Intel Consumer SSDs: Not appropriate for databases
  65. Write Latency and Block Size
  66. More Than You Wanted to Know About Checksums
  67. Linux Write Caching
  68. Debugging with a Circular Buffer
  69. Ken Thompson's "Trusting Trust" Quine
  70. Buffer Overflows 101
  71. Weak Isolation in Relational Databases
  72. Building Reliable Storage on Virtual Infrastructure
  73. Open Cirrus: Open Source Cloud Infrastructure
  74. State of Toronto Espresso
  75. Deploying Distributed Applications
  76. Model Checking a Paxos Implementation
  77. Thread-Safe Random Numbers
  78. Opt-in Flash
  79. New England Database Day 2009
  80. Subversion Hooks Stored in the Repository
  81. Git Command Shortcuts (aliases)
  82. Random Ubuntu Tips
  83. A Quick Guide to Confidence Intervals
  84. Gigabit Ethernet Latency with Intel's 1000/Pro Adapters (e1000)
  85. Core Engineering Skill: Analyzing Data
  86. TCP Performance Gotchas
  87. Rvalue References: Because C++ is not Complicated Enough
  88. Yahoo Chubby Zookeeper
  89. Portable Linux Binaries
  90. Randomized Testing
  91. Python Code Coverage Tools
  92. Paper Password Tokens
  93. Hacking echod
  94. HOWTO Use User Mode Linux as a Normal User
  95. Versioning is Hard
  96. HOWTO Watch Technical Talks Online
  97. A Brief History of Concensus, 2PC, and Transaction Commit
  98. Policy-Based Data Structures
  99. How to Fix an Espresso Grinder
  100. Conditional Statements with C++ Templates
  101. Prediction: Sun is Building a Parallel Distributed File System
  102. Secure Email is Dead
  103. Use Atomic Operations for Updating Data
  104. High-Performance Server Architecture
  105. "Hitting Compiler Limits on Number of Methods Per Class"
  106. Finding Callers of Thread-Unsafe Functions
  107. Benchmarking on Hyperthreaded CPUs
  108. Patent Warfare: IBM vs. Amazon
  109. Syntax Trees, Parsers, and New Languages
  110. Buy Good Headphones
  111. Concurrency is Hard
  112. Dynamic Web Content is Bad
  113. Code Reviews Are Good
  114. Meld
  115. Billg
  116. Coding Standards
  117. Migrated to a New Computer
  118. Using Unicode in C/C++
  119. Python Memory Management Part 3: The Saga is Over
  120. Burn, Capacitor, Burn!
  121. Vector Graphics and Animation Formats
  122. Part Two: Things Java Got Wrong
  123. Part One: Things Java Got Right
  124. Frequency Allocation Posters
  125. Tim Bray: Hard Open Problems in Network Computing
  126. Improving GTK Text Performance
  127. High-Performance Server Architecture
  128. Lessons from the Jikes RVM
  129. VMware Player
  130. Spyware, Trusted Computing, Cheating, and Online Games
  131. Buying Movies Online
  132. Battle for Wesnoth
  133. New Web Server Performance Champion
  134. Debugging SSL Applications in Python
  135. Tips for Writing a Research Proposal
  136. "Secure" Booting the X-Box
  137. Atheros + Linux = Happy
  138. Google Map Hacks: Bike Route Distance
  139. Portable Byte-Swapping Functions
  140. Stupid Bugs: Implementing Comparators
  141. Context Free
  142. Python Memory Management Part 2
  143. Parallel Python
  144. Canadian Espresso Machine Vendors: Part 2
  145. CPU Architecture is Dead
  146. Implementing Python
  147. The Canadian Coffee Industry Sucks
  148. The Inventor of Ethernet
  149. Useful Python Modules: PyRSS2Gen
  150. Python Challenge
  151. Convex Hulls
  152. Schneier on Spam
  153. Dynamic Data Visualization
  154. Fallout 2
  155. NFS Shell
  156. IPv6 API Documentation
  157. Korean Python Documentation
  158. Speex and Open VoIP
  159. Interactive Python Command Completion
  160. EJ's Guide to Washington, DC
  161. Instiki
  162. iPhoto for Windows Part 2
  163. Using EPS Files in Microsoft Office for Mac OS X
  164. Mixing Digital Audio
  165. RSS Marketing
  166. Wikipedia Needs Help
  167. Getting Started With ns2
  168. The Computer Industry is Evil
  169. Quote of the Day
  170. Unicode Security
  171. Testing Memory: memtest86
  172. Laptop Batteries
  173. Skype Rocks Part 2
  174. Security ... What!?!
  175. First My Hard Drive, Now My iPod
  176. Fallout
  177. The Failure of Email Encryption
  178. Debian Linux and Gnome Revisited
  179. Women in Math, Science, and Engineering
  180. Net: A Horribly Addictive Flash Game
  181. Hard Drive Crash Part 3
  182. Essential Mac OS X Software
  183. SSHKeyChain
  184. Java 1.5 on Linux
  185. In Defense of Simple
  186. Hard Drive Crash Part 2
  187. Tips for Long Running Computations
  188. Doom 3 is Amazing
  189. Simultaneous Multithreading Performance
  190. Classic Games: Adventures
  191. ISP Traffic = BitTorrent
  192. AntiRSI
  193. Converting PDFs to Images on Mac OS X
  194. Inspiration and Human Achievement
  195. Python Pitfalls: Scope
  196. Beautiful Text
  197. Hard Drive Heart Attacks
  198. iPhoto for Windows?
  199. CarbonSketch: Great Mac OS X Example Application
  200. North American Cities Are Broken
  201. Gush: A Jabber Client
  202. Collected Mac OS X IPv6 Wisdom
  203. Location Service for DHCP
  204. Basic 802.11 Statistics
  205. Practical Versus Theoretical
  206. Hiding Email Addresses from Spammers
  207. Donations of Web Space and Technical Support
  208. The Future of Wireless Networks
  209. Using PAM Authentication With Jabberd
  210. I Love Wired's Writing Style
  211. Do it Yourself VoIP
  212. The Vatican's Astronomer
  213. Why Microsoft's Monopoly Depresses Me
  214. Linux Server Configuration
  215. Tools and Toys
  216. USB Debugging Tips
  217. StupidCMS Here We Come
  218. Tunnelling Through SOCKS Proxy Servers
  219. Locking Your Mac OS X Screen Before Sleeping
  220. Raytracer: Finished
  221. Raytracer: Polygons
  222. Raytracer: Cubes
  223. Raytracer: Phong Shading
  224. Raytracer: Adaptive Anti-aliasing
  225. Raytracer: First Iteration
  226. 0wnz0red
  227. Ubiquitous Home Entertainment Port
  228. Lessons from Dynamic Languages: Lookup Tables
  229. Towards a New Paradigm for C++ Program Development
  230. I love my graphics class
  231. Blosxom Content Management: Not going to happen
  232. Mac OS X Anti-aliasing
  233. Association Engines
  234. Modern Programming
  235. Coping with Change
  236. An Argument for Pervasive Computing
  237. The Hundred-Year Language
  238. Courses for 4th year
  239. Bloxsom Content Management
  240. Blind Melon - Walk
  241. You know you are turning into an adult when ...
  242. Books: Hacker's Challenge 2
  243. Books: Test-Driven Development by Example
  244. Data Emergence
  245. "Computers are useless. They can only give answers" - Pablo Picasso
  246. The Serendipitous Web
  247. More "intertwingly" search engines
  248. Joining the blog world
  249. database group
  250. Lookup tables.pdf
  251. Hstore cc final.pdf