The Curious Engineer

All blogs / Testing / QA

David R. MacIver's Blog

drmaciver.com

Testing / QAEssays / personalSoftware / engineering practice

Posts
1,092 from 1 Oct 2005 to 15 Sep 2026
Posting
monthly (10 in the last year)
Kind
personal blog
Feed
https://drmaciver.com/feed.xml

2026 8

  1. Come work with me on Hegel
  2. I understand humour (insert caveats and footnotes)
  3. Generating provably solvable instances for testing solvers: Do you wanna test a SAT solver? (It doesn't have to be a SAT solver)
  4. How I've been using Claude Code
  5. Hello
  6. On Mediocrity
  7. The hard problem with hard problems
  8. How to be less box-shaped

2025 10

  1. Making connections
  2. Reduce the need for active stabilisation
  3. How to find things (an intro to binary search)
  4. How pen caps work
  5. COVID is doing the rounds again
  6. Yes you can hum while holding your nose
  7. How to say what you're good at
  8. Have you tried not having the problem?
  9. How I clean my kitchen at the end of the day
  10. Behaving as if you were trying to succeed

2024 22

  1. Setting up my new blogging engine
  2. Meditations on taste
  3. How to read more books
  4. what you have determines what you make
  5. My post about looking for new projects last year
  6. Losing yourself in an audiobook
  7. Creative fury
  8. Larger selves
  9. Nice problems to have
  10. How to rest
  11. Using a list to manage executive function
  12. Words and bodies
  13. Carving up clouds
  14. the real vs fake thing
  15. This is important
  16. The mundanity of magical practice
  17. Turning paid subscriptions back on
  18. My (no-longer-)secret magical practice
  19. The Manual that solves all your problems
  20. Emotional and physical therapy
  21. Heterogeneity
  22. the cheeseburger threshold

2023 13

  1. Why to explain things you already know
  2. Decisions depend on the decision maker
  3. Completing completable projects
  4. Two types of work
  5. You can't "solve" procrastination
  6. In praise of turning people into dinosaurs
  7. What's stopping you?
  8. Why do you do the things that you do?
  9. Starting from where you are
  10. you end up with a sort of bland sameness of every result being close to identical
  11. Reading philosophy for the examples
  12. The problem shows you how to solve the problem
  13. Cohering and decohering

2022 25

  1. Learning to exercise agency
  2. How to think about estimation strategy
  3. What is it like to read LitRPG?
  4. Estimation is inseparable from planning
  5. How to pick a number for any purpose
  6. How to think about task estimation
  7. Learning and teaching practical wisdom
  8. A good start
  9. Parts of you haven't grown up yet
  10. Learning to walk through walls
  11. I’m on the record as thinking it’s important to acknowledge and talk about intelligence
  12. some abandoned writing on luck that I never finished off
  13. victim of metonymy problem
  14. How do we treat unique talents?
  15. Quick fixes to your code review workflow
  16. Learning from others' stories
  17. Delight in the imperfect
  18. Describing imaginary experiences
  19. Education by punishment
  20. Ubj gb ernq EBG13 (How to read ROT13)
  21. Looking for dragons drives progress
  22. How to understand groups of people
  23. People don't work as much as you think
  24. Peer one-on-ones
  25. Daily writing in January

2021 46

  1. Labelling Feelings 101
  2. The first hard choice
  3. Whoops, email is hard
  4. Discontinuing paid subscriptions
  5. How to make easy decisions
  6. Why is it hard to choose what to do?
  7. Current thinking 2021-08-22
  8. Current thinking: Play and self-improvement
  9. If you're stuck, try something different
  10. How to give good advice
  11. How does good taste work?
  12. Telegraph your moves
  13. Relaxing the newsletter schedule
  14. Unscheduled Hiatus
  15. Some thoughts on ethics and narrative
  16. How to use thought experiments
  17. Ethical decision-making and life patterns
  18. Communities construct a sense of purpose
  19. Parts of you haven't grown up yet
  20. How to teach the local style
  21. Some notes from behind the scenes
  22. How to triage your inboxes
  23. Notes towards planning the future
  24. Record yourself to coach yourself
  25. How do we treat unique talents?
  26. How to do everything
  27. Understanding your health is hard
  28. Life is a Series of Events
  29. How to be weird
  30. Being Disappointed in People
  31. Returning to the World
  32. Stop Telling People What To Do
  33. Choosing what to do
  34. Mathematical Cranks, Information Overload, and Predicting the Pandemic
  35. I Quit my PhD
  36. Difficult Problems and Hard Work
  37. Intellectual DIY
  38. Pandemic Moods
  39. Unplanned Break
  40. A Fractal of Lies
  41. Believing That You Can Stop
  42. Starting Again
  43. Temporary Hiatus
  44. A Few Book Recommendations
  45. The Habit Cycle
  46. Reflections on 2020

2020 37

  1. Life-Complete Problems
  2. Trust
  3. Decoupling
  4. Shameless Self-Promotion
  5. Emotional Health
  6. Have you tried just being good at it?
  7. Costing Up Solutions
  8. Don't just try harder
  9. Common Knowledge of Feelings
  10. How to Become Smarter
  11. Monocropping
  12. Self Curiosity
  13. A Brief Introduction to Shadow Work
  14. Refusing to Learn
  15. In Defence of Half-Arsing
  16. Overthinking Overthinking
  17. Overthinking Overthinking (Resend)
  18. Positively Deviant
  19. Distributing blame
  20. The Usefulness of Bad People
  21. Being, Acting, and Feeling Responsible
  22. Here's Some I Made Earlier
  23. Writing to Understand
  24. Fascination Procrastination
  25. Being Deep in an Abstraction Stack
  26. Maintaining Niche Interests
  27. What do you do?
  28. No Newsletter This Week, AMA
  29. Unusual Foundations
  30. You should complain about it
  31. Why am I not working on my PhD?
  32. Burnout as Acedia
  33. Life as Nonproductive Act
  34. How to do hard things
  35. Writing Elsewhere
  36. There's no single error rate
  37. A Crash Course in Having Feelings

2019 17

  1. Open to Interpretation
  2. Advice to new speakers
  3. Vocabulary Building: Satisficing
  4. Being an example to others
  5. Gendering
  6. Jiminy Cricket Must Die
  7. The missing social technology sector
  8. I last wrote notes on this subject a good seven years ago
  9. The Ethics of False Negatives in Interviewing
  10. How to do hard things
  11. The One Weird Word Rule
  12. The Inner Sense of Gender
  13. Two types of viewpoint
  14. How do you nurture your imagination?
  15. You should be stockpiling food for Brexit
  16. Conferences Should Publish Menus
  17. Notes on Test-Case Reduction

2018 36

  1. Situated Software
  2. Nonspecifically Neurodivergent
  3. FAQ: How do you read so many books?
  4. Reaching into the Whirlwind
  5. Local Goal Setting
  6. How to Explain Anything to Anyone
  7. My Position on Functional Programming
  8. More blogging over there
  9. The Can Opener Principle
  10. Research Is A Lot Like Sex
  11. Quieting your Dell XPS 13's Loud Fan
  12. D&D Characters I Have Known And Loved
  13. Test-Case Selection and Choice Theory
  14. Notes On Eating More Vegetables
  15. DFA Minimization as a Fixed Point
  16. Dis-Integrating the (Public) Self
  17. On Not Quite Fitting
  18. Doing the Two-Step for Efficient Reversible Deletes
  19. Cooking on Easy Mode
  20. Statistical vs actual lives and ethical intuitions
  21. Taking (Part Of) My Self Offline
  22. Monads as an interface for composition
  23. Block First, Ask Questions Later
  24. Trashy Fiction Recommendations
  25. (Some of) my problems with correctness research
  26. An Unkind Question about Software Correctness Research
  27. Refining L* search
  28. Novelty Requires Explanation
  29. Times to exhaust finite distributions when sampling with replacement
  30. Can you write correct software in a statically typed language?
  31. Why does everybody in the galaxy speak English?
  32. Selection pressures on company behaviour
  33. An algorithmic puzzle
  34. A pathological example for test-case reduction
  35. Lazy fisher-yates shuffling for precise rejection sampling
  36. The Clarke Gap

2017 63

  1. The Great Asshole Filter
  2. Lets talk about sets
  3. Non-fiction
  4. Shaping the World
  5. Reality is a countably infinite Sierpiński cube
  6. A statement of philosophical principles
  7. The politics of "I don't know"
  8. Truth and/or Justice
  9. Python Coverage could be fast
  10. Programmer at Large progress report
  11. Surgery recovery update
  12. Programmer at Large: Why aren't you laughing?
  13. A trick for getting to sleep
  14. Dispatches from the War on Sleep
  15. Programmer at Large: Why didn't they see this coming?
  16. On Efficiency
  17. There are no hidden rules
  18. New Fiction
  19. Shutting down my Patreon
  20. A time and a place for work
  21. Talking to people at conferences
  22. Thoughts on the election
  23. Adaptive delta debugging
  24. Older women as protagonists in SFF
  25. Programmer at Large: Can we speed that up?
  26. Auction Update
  27. A hybrid voting system for scheduling
  28. Programmer at Large: Does that work?
  29. The other half of binary search
  30. Linear time (ish) test case reduction
  31. Startup Life
  32. Life Changes Announcement: Academia Edition
  33. Programmer at Large: Can we not?
  34. Ordering and mapping regular languages
  35. An epistemic vicious circle
  36. A worked example of designing an unusual data structure
  37. Programmer at Large: Didn't you notice?
  38. The Easy Way to Compile Automata to Regular Expressions
  39. My time: Now available to the highest bidder
  40. Fully Automated Luxury Boltzmann Sampling for Regular Languages
  41. Programmer at Large: How old is this?
  42. How and why to learn about data structures
  43. An untapped family of board game mechanics
  44. Programmer at Large: Who wrote this?
  45. Looking into doing a PhD
  46. Laziness is better when it's visible
  47. How likely are Condorcet cycles in supermajorities?
  48. Programmer at large: How did people come up with this?
  49. Adding a threshold to random ballot
  50. Coin tossing and adversary resistant priors
  51. Rigging elections with integer linear programming
  52. Programmer at Large: How do you do?
  53. Thinking through the implications
  54. Avoiding conferences in the USA for now
  55. Programmer at Large: Are you serious?
  56. Determinism is topologically impossible
  57. Programmer at Large: What's that noise?
  58. Upcoming reduced publishing rate and Patreon
  59. Programmer at Large: What's your name?
  60. How to make good things
  61. Programmer at Large: What is this?
  62. Convergence of alternating sums
  63. Faster random sampling by handling rejection well

2016 97

  1. On persuasion and anger
  2. Proving or refuting regular expression equivalence
  3. Randomized exhaustive exploration of a many branching tree
  4. Aligning incentives
  5. A simple purely functional data structure for append and forward traversal
  6. Randomly productive
  7. Voting theory and practice infodump
  8. Updating in favour of two-round delayed runoffs
  9. The worst election
  10. Small elections comparing Majority Judgement, Range Voting and Condorcet winners
  11. 2017 Goal: Recurring Revenue
  12. The littlest infinity
  13. Democracy for lunch
  14. Metric space completeness is a restricted form of topological compactness
  15. Generalized Single Transferable Vote
  16. Deterministic Hare-Clarke STV voting, take 2
  17. A deterministic improvement to Hare-Clark Single Transferable Vote
  18. A Small STV Election for Meek's Method
  19. A failure mode of single transferable vote
  20. I still believe in democracy
  21. Road Trip Day 5
  22. Road Trip Day 2
  23. A reset protocol for my body
  24. I like short books
  25. Dividend paying sovereign wealth funds and decoupling effects
  26. Review of a book that reviews (code) reviewing
  27. Road trip!
  28. Why you should use a single repository for all your company's projects
  29. Underestimating the inductive step
  30. Some things that might help you make better software
  31. Giving up on giving up on caffeine
  32. Static typing will not save us from broken software
  33. Declaring code bankruptcy for the rest of 2016
  34. Some small single transferable vote elections
  35. On racist intermediaries in hiring processes
  36. Two extremes of problem solving
  37. A Conference Survival Kit
  38. My standard dinner meta-recipe
  39. Nasal experiments
  40. The Caffeine Alarm Clock
  41. Better Sleep Data through pulse oximetry
  42. What makes someone real?
  43. Against Dutch Book Arguments
  44. Why I'm in favour of proportional representation
  45. Ain't nobody here but us survivors
  46. Trading influence: A half-baked parliamentary design
  47. How to not be late
  48. Making taxes progressive through redistribution
  49. It might be worth learning an ML-family language
  50. First Past The Post is not the problem, districts are
  51. Seeking recommendations for better sleep data
  52. Contributors do not save time
  53. Against Virtue Environmentalism
  54. Fuzzing through multi-objective shrinking
  55. Doing less by doing more
  56. An experiment in breaking a caffeine addiction
  57. Occasional Reading Post #8
  58. How to navigate goal directed learning
  59. Weekly Reading Post #7
  60. Three thought experiments on majority voting
  61. Weekly Reading Post #6 (Bi-Weekly Edition)
  62. Windows Progress Report
  63. Weekly reading post #5
  64. L* Search and Inference of Deterministic Finite Automata
  65. How to read a mathematics textbook
  66. Weekly reading post #4
  67. The Derivative as an Alternative Minimal Deterministic Automaton
  68. The Myhill–Nerode theorem and the Minimal Deterministic Automaton
  69. Weekly reading post #3
  70. You're now all on commission
  71. Weekly reading post #2
  72. Charitable donations
  73. Hello from Windows
  74. The Borda Count as a Randomized Limit of Approval Voting
  75. Randomizing Lean Coffee
  76. Filibuster, the game
  77. Weekly reading post #1
  78. New group: "Making Work Better"
  79. A random sample of what I read last week
  80. An estimation game for sprint planning
  81. Buy me books, redux
  82. Writing libraries is terrible
  83. In defence of developer exceptionalism
  84. Brand split
  85. Language reconstruction based fuzzing without reconstructing languages
  86. Self-optimizing boolean expressions
  87. Shrinking failing input using a SAT solver
  88. Delta debugging with inferred separators
  89. Gerrymandering take two
  90. Optimal gerrymandering with Z3
  91. Buy me books!
  92. Augmenting shrinkers by inducing regular languages
  93. The easy way to get started with property based testing
  94. Hypothesis progress is alarming
  95. Superposition values for testing
  96. Commons: A board game
  97. Automated patch minimization for bug origin finding

2015 138

  1. 2015 in review
  2. On criticizing programming languages (without criticizing their users)
  3. Mentors as a service
  4. Effectiveness of personal greenhouse reduction vs donation
  5. How to help your favourite open source project
  6. Direct proofs from the well ordering theorem
  7. Zorn's lemma is what happens when you get bored of transfinite induction
  8. Let's help people go to PyCon Namibia
  9. The DRMacIver survival kit
  10. Anyone want a speaker?
  11. Conjecture, parametrization and data distribution
  12. Services that won't buzz off
  13. Free work is hard work
  14. Notes on headache self-care
  15. My favourite language feature
  16. So who wants a Hypothesis port?
  17. Let Hypothesis making your choices for you
  18. Having another go at a vanity IRC channel
  19. A whirlwind tour of the Hypothesis build
  20. New improved development experience for Hypothesis
  21. In praise of incremental approaches to software quality
  22. The economics of software correctness
  23. Mergeable compressed lists of integers
  24. There is no single acceptable defect rate
  25. Future directions for Hypothesis
  26. Finding more bugs with less work
  27. Hypothesis: Staying on brand
  28. The repr thing
  29. Designing a feature auction
  30. Soliciting advice: Bindings, Conjecture, and error handling
  31. Structure aware simplification for Conjecture
  32. Conjecture WIP: Simplification isn't simple
  33. A new approach to property based testing
  34. A survey of Quickchecks
  35. Mighty morphing power strategies
  36. The two voices of progress
  37. Apparently I'm still doing this fanfic thing
  38. Notes on London flat hunting
  39. Hypothesis 1.10.2 and 1.10.3 are out
  40. What if we had more finished libraries?
  41. Fuzzing examples from the ground up
  42. How to generate a list plus an element of it
  43. A vague roadmap for Hypothesis 2.0
  44. New release of hypothesis-pytest
  45. Book review: Smarter than you think, by Clive Thompson
  46. Throwing in the towel
  47. Hypothesis 1.10.0 is out
  48. New Patreon page for work on Hypothesis
  49. Massive performance boosts with judicious applications of laziness
  50. Hypothesis 1.9.0 is out
  51. A terrible/genius idea
  52. Two new Hypothesis releases and continuous deployment of libraries
  53. Notes on Hypothesis performance tuning
  54. Making Hypothesis sustainable
  55. Heuristics are for learning, not for teaching
  56. Hypothesis 1.8.0 is out
  57. A wish list for programming languages
  58. Hypothesis 1.7.2 is out
  59. Properties for testing optimisation
  60. Using z3 to try to solve Feedback Arc Set for Tournaments
  61. Want to take a weekend to write tests?
  62. Hypothesis 1.7.1 is out
  63. Back-pedalling on Python 2.6
  64. Some stuff on example simplification in Hypothesis
  65. Thinking with the machine
  66. Pydata London 2015
  67. Hypothesis continues to teach me
  68. We made this
  69. Hypothesis for Django
  70. Using Hypothesis with Factory Boy
  71. Thoughts on Strangeloop and Moldbug
  72. Large scale utilitarianism and dust motes
  73. Using tmux to test your console applications
  74. The era of rapid Hypothesis development is coming to an end
  75. New discussion groups for randomized testing
  76. Constraint based fixtures with Hypothesis
  77. If you want Python 2.6 support, pay me
  78. Speeding up Hypothesis simplification by warming up
  79. Notes on the implementation of Hypothesis stateful testing
  80. On Haskell, Ruby, and Cards Against Humanity
  81. The #1 reason I don't write Haskell
  82. Getting Google Analytics on readthedocs
  83. How to improve your Quickcheck implementation with this one weird trick
  84. Some empirically derived testing principles
  85. Why I am no longer #YesToAV
  86. Tests are a license to delete
  87. Notes on pilling a cat
  88. Things that are not documentation
  89. Important things I have learned about Twitter on Android today
  90. Revising some thoughts on test driven development
  91. The war cannot be won, yet still we must fight our little battles
  92. Surprise! Feminism.
  93. Interviewing: Test, don't sample
  94. It's OK for your open source library to be a bit shitty
  95. Stargate physics 101
  96. Honey I shrunk the clones: List simplification in Hypothesis
  97. 27 bugs in 24 hours
  98. How to make other people seem like humans
  99. Hypothesis 1.0 is out
  100. What I would do with the Stargate program
  101. A sketch of a new simplify API for Hypothesis
  102. I can dream, right?
  103. Simplify starts from the wrong end
  104. ##computer-enthusiasm, an experiment in liking things again
  105. Stable serialization and cryptographic hashing for tracking seen objects
  106. An alternate timeline for Stargate SG1
  107. The downside of making accurate inferences about people
  108. Topological compactness is an induction principle
  109. Continuous functions are those which preserve approximate measurements
  110. Software I actually like
  111. Commodity futures trading! In space!
  112. The beginning of a novel that I'll doubtless never write
  113. How to stop Hipchat beeping at you.
  114. Triangular Beeminding; Or, Drink Less, Using the Power of Triangles
  115. Monadic data generation strategies and why you should care
  116. What are developer adjacent skills?
  117. The three stage value pipeline for Hypothesis generation
  118. What is the testmachine?
  119. Some books I have enjoyed recently
  120. Some thoughts on open source
  121. Revised Hypothesis 1.0 plan
  122. Changes to the Hypothesis example database
  123. Better prediction of probabilities through auctions
  124. A plan for Hypothesis 1.0
  125. On taking the ideas in Hypothesis
  126. Using multi-armed bandits to satisfy property based tests
  127. Anatomy of a bug hunt
  128. The things you forget to test
  129. The pain of randomized testing
  130. I just want to brag a bit about the Hypothesis test suite
  131. Hypothesis now has a mailing list
  132. Testing the installer for your python library
  133. On the new data generation in hypothesis
  134. Hypothesis short term road map
  135. Extending a preorder efficiently and correctly
  136. It turns out integer linear programming solvers are really good
  137. Optimal solutions to FAST
  138. Using voting systems for combinatorial optimisation problems

2014 79

  1. A genie brokers a deal
  2. Punishing people for improving the situation
  3. A new plan for Christmas 2015
  4. Field notes from last night's recipe
  5. The questions you should ask when starting a project
  6. So what happens now?
  7. A small tactical voting example
  8. Should you join Google?
  9. Some more small elections
  10. An interesting hypothetical election
  11. A patch for quadratic voting
  12. Well that didn't last long
  13. So you want to read some Fantasy
  14. Fallacies programmers believe about credit cards
  15. Asymptotic behaviour of max(Z_n)
  16. Another take on high variance strategies
  17. A Martian makes a bet
  18. Order dependence in preference elicitation
  19. A game concept for learning about SPRs
  20. Relaxing some assumptions from the "high variance strategies" post
  21. The virtue of high variance approaches
  22. What I'm doing to improve my sleep
  23. Reading code without running it
  24. The role of certainty in behaviour change
  25. Majority judgement by hand
  26. I don't trust motivation
  27. Strategies, not promises
  28. Definitely not a Mexican recipe
  29. A satisfying resolution to trolley problems
  30. David seeks app for fun and exercise logging
  31. Exercise for people like me
  32. Backpressure 2: Backpressure harder
  33. I should edit more
  34. You should write more
  35. Why mathematics makes you better at programming (and so does everything else)
  36. A system for coordinating groups
  37. Playing beeminder on hard mode by adding backpressure
  38. Richman Scrabble: A play report
  39. A mod for a large class of board games
  40. Gnocchi with Courgettes and Sundried tomatoes
  41. Another example of a compact convex set
  42. Some examples of compact convex sets
  43. How to learn a new city
  44. My algorithm for deciding what to cook
  45. GO. VOTE. DAMMIT.
  46. Go vote, dammit
  47. How hard can it be?
  48. Correlation does not imply correlation
  49. How UK MEP elections work
  50. Putting word counts into beeminder
  51. Printing, a status report
  52. MacIver: A pronunciation and spelling guide
  53. The man who named the stars
  54. A culinary option you may have overlooked
  55. We are borg
  56. Locally compact Hausdorff spaces and the Riesz Representation Theorem
  57. Paying attention to sigma-algebras
  58. I think I might have a book problem
  59. Write libraries, not services
  60. Chickpea and vegetable stew
  61. Sketch design for a sort of housing co-operative
  62. What is good code?
  63. More book recommendations
  64. Notes on a randomized variant of majority judgement
  65. A two person agreement protocol
  66. A class of games I wonder if exists
  67. My kitchen has a new toy
  68. Open data and fair elections are incompatible
  69. Etiquette for the devil's advocates
  70. New testmachine release
  71. How to write good software
  72. Different types of overheads in software projects
  73. Reading code by asking questions
  74. Revisiting an old voting system design
  75. Coinpocalypse
  76. Now you too can have a magic bug-finding machine
  77. Improving code coverage with testmachine
  78. Compressed ranges for intmap
  79. Introducing THE TEST MACHINE

2013 143

  1. A potentially fun game mechanic
  2. Report on a scrabble variation
  3. A personal history of interest in programming
  4. Reevaluating some testing philosophy
  5. Domain specific evaluation orders
  6. Updates to intmap
  7. New project: IntMap implementation in C
  8. Experimenting with python bindings to jq
  9. A sketch-design for a type of non-profit organisation
  10. Binary tournaments
  11. The geometry and optimisation of tournaments
  12. Lets play a game
  13. Consider the tournament
  14. Chicken breasts in red wine and caramelized onion sauce
  15. It's like Intrade meets OKCupid
  16. Examining bias in non-majoritarian random pair
  17. Stating the probabilistic Gibbard-Sattherthwaite Theorem
  18. A technical lemma I am finding surprisingly useful
  19. The other randomized voting system
  20. Ordinal and cardinal numbers
  21. Well orderings, comparability of cardinals and aleph_1
  22. Maybe I'm doing it wrong
  23. An amusing problem to solve
  24. The false proxies of mirror images
  25. Designing a tech meet-up for inclusiveness
  26. How learning Scala made me a better programmer
  27. Some things that are the same size as each other
  28. An introduction to infinity
  29. How to submit a decent bug report
  30. I think I don't think like I think I think. I think
  31. Notes on instrumentalist reasoning
  32. Other ways to improve democracy by picking your politicians at random
  33. Notes on aspirational mental models
  34. Warning: This blog has secret mind control powers
  35. How to get free tea from Pret a Manger
  36. Blog editorial guidelines
  37. I am angry too
  38. With enough context, everything makes sense
  39. Towards a more perfect democracy
  40. Valid arguments from my opponent believes something
  41. Best of drmaciver.com
  42. Hammer Principle back online
  43. More tinkering with auction games
  44. How to quickly become effective when joining a new company
  45. Thesis: Job hopping is good for companies
  46. More on labels and identity
  47. Things you can do to scrabble
  48. Some webcomic recommendations
  49. A curated feed of stuff I found interesting
  50. A case study in bad error messages
  51. You are not your labels
  52. I suppose it's not terribly surprising that Wordpress are bad at security
  53. Venison stew
  54. Report on some initial playtesting of the auction game
  55. Updating my dietary policy
  56. Arguments I am unlikely to listen to
  57. Boycotting kickstarter
  58. More linux wifi hilarity
  59. The long RSS winter may be over
  60. The cult of the giant global brain on moral philosophy
  61. Problems with Linux wifi on an Intel network card
  62. Customers who read this blog might also like...
  63. But enough about me...
  64. How to hard "boil" an egg, redux
  65. A refinement to the auction game
  66. Problem solving when you can't handle the truth
  67. Bayesian reasoners shouldn't believe logical arguments
  68. An amusing financial instrument for creating a common currency
  69. Collaborative coin flipping
  70. A manifesto
  71. Chesterton's patch
  72. A crude voting simulation
  73. When does one normal distribution dominate another?
  74. Come join the cult of the giant global brain
  75. Another group interaction experiment I'd like someone to perform
  76. An auction game design
  77. Terra: A brief review
  78. A simple example of non-VNM total orders
  79. A theorem on dominance of random variables
  80. A sketchy and overly simplistic theory of moral change
  81. Another model for bribing MPs
  82. Comment moderation
  83. How to legally(?) and efficiently bribe a democracy
  84. Some simple theorems about dominance of probability distributions
  85. More on infinitary decision strategies
  86. Using two level discourse as a tool of thought
  87. The moral argument for rationality
  88. A theorem about certain families of random variables
  89. An infinitary extension to the previous theorem about random variables
  90. An amusing conceit for a sci-fi story
  91. On vegetarians who eat chicken
  92. On the Von Neumann Morgenstern Utility Theorem, Part 1
  93. Objections to the VNM utility theorem, part 2
  94. A magic system with consistency and depth
  95. An interesting experiment that no one seems to have performed
  96. An announcement and a brief retrospective
  97. The winning strategy for random ballot is not what I thought it was
  98. How to stop Android's fucking profanity policing bullshit
  99. Percentages of the popular vote in UK elections
  100. Value functions lead to non-transitive preferences
  101. Book review: What The Best College Teachers Do
  102. Some ill thought out musings about identity
  103. I've been stealing recipes from my mother: Ice cream pie
  104. Deterministic voting is just too random
  105. Now with added Flattr
  106. A bugfix for my queuing business model
  107. A freemium model for scheduling
  108. A proposal for electoral reform
  109. The horror lurking at the heart of the new hypothesis
  110. Another new hypothesis feature: flags
  111. A possible more principled approach to generation and simplification in hypothesis
  112. Stateful testing with hypothesis
  113. You probably shouldn't do this, but it works really well
  114. My personal dietary policy
  115. Nontransitive dice are unsurprising
  116. Yesterday Was Change Everything Day
  117. Quickcheck style testing in python with hypothesis
  118. Blasting patents for fun and profit
  119. Falsifying hypotheses in python
  120. An interview question
  121. An audible experiment
  122. A (rewritten) manifesto for error reporting
  123. A parable about problem solving in software development
  124. A manifesto for error reporting
  125. A meta-recipe
  126. Now syndicating drmaciver.com to twitter
  127. A heuristic for problem solving
  128. Exploring your twitter archive with unix
  129. What are developers bad at?
  130. A file that should exist in all your ruby projects
  131. So I accidentally designed a voting system
  132. Different ways of defining topologies
  133. Update on voice recording in interviews
  134. A discussion on free time and hiring and employment practices
  135. Questions for prospective employers
  136. An election protocol for implementing random ballot in an accountable manner
  137. Why random ballot is a good idea
  138. New blog look
  139. Implementing find_or_create correctly is impossible
  140. Interviewing companies
  141. Majority Judgement implementation in python
  142. Update on resampling voting systems
  143. A resampling statistic for voting systems

2012 52

  1. Twitter as the death of blogging
  2. Ignorance is bliss for whom?
  3. So I accidentally wrote a monad tutorial
  4. How do you interview people without a programming background?
  5. Constructing the negative numbers
  6. Hello there, who are you?
  7. Calvin and Hobbes, gocomics and dotjs
  8. If Programming Language Articles Were People
  9. Committing to calling out sexism
  10. Gluten and dairy free brownies
  11. Teach me how to hire a diverse team, please
  12. A non-transitive tournament
  13. Saturday night madness
  14. Playing to your strengths can be a weakness
  15. Two column morality
  16. Sieving out prime factorizations
  17. Come work with me!
  18. Randomly exploring github
  19. How to do expertise search without NLP
  20. How to hard "boil" an egg
  21. A heuristic for detecting expertise
  22. Salad for breakfast
  23. Against Human Readability, Part 2 of Many: The toolchain argument
  24. Against human readability, ongoing discussion
  25. An interesting game mechanic
  26. Against human readability (part 1 of many?)
  27. The proper approach to fixing bugs
  28. OpenVPN repeatedly losing connections with inactivity timeout
  29. The DDGHF policy on prostitution
  30. Turning deterministic strategy games into nondeterministic games of voting
  31. Greetings from the Ministry for Dancing, Getting High and Fucking
  32. An interesting experiment in social choice
  33. pageme: A gem for invoking pagers from ruby
  34. Feeling tired? You should read this
  35. Constraints inspire creativity
  36. Converse results: Approximability implies certain topological properties
  37. The odd topology of uncountable cardinals
  38. Generalizing local approximations to global ones
  39. Advance warning of advanced mathematics
  40. Radii in function spaces
  41. A nicer way to complete metric spaces
  42. The power of fixed point theorems in Set Theory
  43. New, more principled, hammers
  44. "Agda is now mainstream"
  45. A green build on my weighted FAS solver
  46. Integer sets with O(1) range allocation and O(log(n)) deletion
  47. An algorithm for incrementally building separation graphs
  48. Butternut squash, coconut and chickpea curry
  49. A cute algorithm for a problem you've never cared to solve
  50. Story concept: Dead man walking
  51. I don't write Scala
  52. Really simple spatial indices

2011 39

  1. And now for something completely different
  2. Keeping track of the Kth smallest element
  3. A Vantage Point Tree implementation in (shudder) Java
  4. A cute lower bound for weighted FAS tournaments
  5. PeCoWriMo derail
  6. Notes on design of a Haskell API
  7. Personal Code Writing Month (PeCoWriMo)
  8. Generating random spheres
  9. Constraints for wish construction
  10. Ethical Calculus
  11. New Blog: Imbibliotech
  12. Gin
  13. Miso-Sake Quinoa with Tofu and Vegetables in a Peanut-Sesame Sauce
  14. Hey guys, we're hiring!
  15. If This Then That, a neat little service
  16. The (Programming Language) Hat
  17. Dietary rearrangement
  18. The Other Hammer Principle
  19. World, whim, etc. Part 2
  20. The World as I Would Make It
  21. Judgement and Asymmetric Errors
  22. Sleep as an Droid export data
  23. Drinks from the weekend
  24. Maximum entropy methods for single-winner elections?
  25. On the value of helpful error messages
  26. My Brownie Recipe
  27. Ha ha, only serious
  28. (Runtime) Cost-free abstractions in clay
  29. New Comment Policy
  30. What books have made you a better person?
  31. A plan for not failing
  32. I'm mentioned (and misrepresented) in the New Scientist
  33. How to turn AV into a Condorcet system
  34. Some yes2av links
  35. A less perfect system for which I will nevertheless be voting
  36. A "perfect" voting system
  37. An open letter to thames clippers
  38. Because ten just wasn't enough
  39. Playing with a new language: Clay

2010 28

  1. Reading video frame by frame with ffmpeg
  2. Dear Commenters: Frankly, I'm tired of you
  3. Removing silent tracks from a video: A bug and the hack that killed it
  4. When you have a hammer: Squish usage example
  5. An interesting idea for authentication
  6. A possibly new unix-style utility
  7. On hiring (developers)
  8. Northpaw, part 1
  9. Teaching
  10. The role of a CTO
  11. Sweet and spicy roast aubergine
  12. What did you study?
  13. Irrelevant alternatives aren't
  14. Rank aggregation basics: Local Kemeny optimisation
  15. Chakchouka, of sorts
  16. Databases for cooccurrences?
  17. The Right Data
  18. Rank Aggregation in The Right Tool
  19. The right tool for the job
  20. The best way to handle exceptions
  21. DataMapper: A (partial) retraction
  22. DataMapper is inherently broken
  23. Roasted Gnocchi with Butternut Squash and Cashews
  24. On the perils of PostgreSQL rules
  25. Sequential compactness and the splitting number
  26. Dark Lord
  27. You Might Not Know...
  28. Understanding timsort, Part 1: Adaptive Mergesort

2009 63

  1. I want ONE MEELYUN sentences
  2. Shaving yaks and finding feeds
  3. Filtering deleted documents with PostgreSQL rules
  4. Potato and butternut squash "pizza"
  5. Dear lazyweb: A problem on cached string searching
  6. Experiments on the theme of cauliflower and cheese
  7. Am I being boring?
  8. Creative cooking on half a brain
  9. It's all the same, really
  10. Join me on IRC
  11. Rube Goldberg 2.0
  12. A story, and an oft overlooked point
  13. Open source term extraction
  14. A delicious way to use up stale bread
  15. How to start the week
  16. Open source nostalgia
  17. Crowding the trampoline
  18. How packages work in Scala
  19. reddilicous: Automatically import your links from other sites into delicious
  20. Axioms, definitions and agreement
  21. Making my life more difficult
  22. Some useful scripts
  23. Lessons learned: Are you solving the right problem?
  24. Many eyes make heavy work
  25. Food discovery of the day
  26. Cashew and butterbean non-mous
  27. A problem of language
  28. Interest bandwidth
  29. Hug the frog
  30. A hectnical digression
  31. Command line tools for NLP and Machine Learning
  32. Determining logical project structure from commit logs
  33. A reminder: Planet Scala move
  34. Open sourcing Pearson’s Correlation calculations
  35. Gates
  36. Pulling the plug on old planet scala feeds
  37. More kittens: Improving edge weight calculations
  38. Segmenting kittens: Experiments with clustering image contents
  39. More fun with xsel
  40. Scala trivia of the day: Traits can extend classes
  41. planet scala now on github
  42. A workaround for misbehaving X citizens
  43. From Objects to Agents
  44. Exceptions for control flow considered perfectly acceptable, thanks very much
  45. Left folds with early termination
  46. We don't need anonymous inner classes? Bollocks to that.
  47. Planet Scala gets its own domain
  48. Filtered feed to Planet Scala
  49. How do you talk about Scala?
  50. Spam
  51. Planet Scala now running on venus
  52. New site design
  53. Not really LÖVING it
  54. Criticizing programming languages
  55. Porting Pearsons to Postgres. Performance?
  56. Cleaning up a set of tags, part 1
  57. Importing work posts
  58. Yet another MySQL Fail
  59. Old mathematics posts
  60. Computational linguistics and Me
  61. Writing things right
  62. Planet Scala: By Scala programmers, usually about Scala
  63. Planet Just Scala

2008 60

  1. Living on the edge of academia
  2. Pearsons in the database, part 2
  3. Calculating Pearson’s correlation coefficient in SQL
  4. Posting elsewhere
  5. Computing connected graph components via SQL
  6. A cute Scala hack
  7. A curious fact about overloading in Scala
  8. A glorified to do list
  9. New collections in Scala 2.7.2
  10. A follow up to yesterday's article
  11. Functional code != Good code
  12. Reusing Java's tools: Cobertura and Scala
  13. Unsigned comparison in Java/Scala
  14. They called me mad
  15. Removing myself from planet haskell
  16. java.lang.String#hashCode
  17. Lessons learned in class
  18. Planet Scala
  19. Code generation for structural proxies
  20. Scala arrays
  21. Random linear algebra hackery in Scala
  22. SBinary 0.2
  23. Book Review: The Art of Assembly Language
  24. A cute hack: Changing the scope of System.out
  25. GUI interpreter frontend coming along nicely
  26. Trampoline Systems and Scala
  27. Code move
  28. Request for help: Numerical linear algebra
  29. Not really an announcement: GUI frontend to Scala Interpreter
  30. A reminder of how Wordpress handles RSS feeds
  31. Removing myself from Artima Scala Buzz
  32. Baked parmesan and tomato polenta
  33. Make your menu definitions less irritating
  34. QDBM Bindings
  35. Code for you to play with
  36. SBinary progress
  37. Monadic card shuffling
  38. "Object Main extends Application" considered harmful
  39. New Blog
  40. Scala syntax change proposal
  41. Sbinary performance and Buffered IO
  42. SBinary backends
  43. An introduction to implicit arguments
  44. Existential types in Scala
  45. Hector's Reminder Service: QT Jambi and Scala
  46. Open source project breakdown.
  47. Formatting
  48. Wait, you believed them when they said "Write once, run anywhere"? That's so cute.
  49. Anyone willing to put a word in for Groovy?
  50. Tell us why your language sucks
  51. Easy binary serialization of Scala types
  52. More penne and cheese
  53. Food hacks
  54. Learning Scala
  55. Java collections and concurrency
  56. More Asus hilarity
  57. Minor revelation about Scala existential types
  58. Dereferencing operators
  59. Why not Scala?
  60. Variance of type parameters in Scala

2007 71

  1. Amusing discovery of the day
  2. Hardware vendor shit list
  3. Random thoughts on OO
  4. Type classes in Scala
  5. No, seriously, why Scala?
  6. Open sourced range types
  7. Statically checked range types in Scala
  8. Minor irritations
  9. Don't forget to fly
  10. Dependency injection in Scala
  11. Java performance tip: Think about your container sizes
  12. Turn your toString methods inside out
  13. Best error message ever
  14. Ooooooh. Shiny!
  15. I Aten't Dead
  16. Lisp tutorial
  17. How to create sealed classes in Java
  18. Tail call optimisation in Scala
  19. Good APIs
  20. Testing, testing. Is this thing on? (Also, Cheesebread)
  21. Looking through other peoples' code is fun
  22. Birds of a Feather and AMQP
  23. The world has gone mad
  24. Data structures in Java
  25. Playing with Arrows
  26. Where lies the problem?
  27. Perversity
  28. A quick check
  29. Beating StringBuilder? Hell no.
  30. I fail miserably at performance testing
  31. Lazy strings for Java
  32. Javascript
  33. What's a monad?
  34. Functional programming lies
  35. JTypeBuilder and APT
  36. Equal opportunities oriented programming
  37. Tail call optimisation in Javascript
  38. Viral XKCDing
  39. Blatant and malicious evil
  40. More JTypeBuilder
  41. Job applications
  42. Static vs. Dynamic Typing
  43. Concision
  44. Yet more JTypeBuilder
  45. Baby's first open source project
  46. re·cur·sion –noun: See recursion
  47. What's in a syntax?
  48. Unexpectedly popular
  49. From the jargon file: Bogosort
  50. fix f = let x = f x in x
  51. Speling is important
  52. Cool Gadget of the Day: JTidy Servlet
  53. Javascript 'with' clause
  54. Cool gadget of the day: Chickenfoot
  55. Enforce your invariants damnit
  56. Parsers, Parsec and Haskell
  57. Build scripts
  58. Whoops, there goes another one
  59. Factoid of the day: Javascript command line
  60. It's Groun... err. Pancake Day!
  61. Factoid of the day - CSS trivia
  62. Goto
  63. Word definitions
  64. Testing, testing
  65. Code Snippets
  66. Java Packages
  67. Coding standards
  68. Desperately Unenterprise
  69. What don't you eat? (How to feed anyone)
  70. What do you eat? (How to feed a vegan)
  71. Guacamole and playing with new toys

2006 28

  1. Quick American style pancakes
  2. Sweet and Spicy Peppers with Bulgur Wheat
  3. Silly Proofs 3
  4. A New Theorem?
  5. Mushroom and Chickpea Balti
  6. Brown rice in an egg and tomato sauce
  7. Journal of Obscure Results 1: Nedoma's Pathology
  8. Quick update
  9. I suck
  10. Boolean to C* algebras II: The Noncommutative Version
  11. Boolean to C* Algebras
  12. Sequential compactness and minors
  13. More finite topological spaces
  14. Topology, Separation and finite combinatorics
  15. A Mathematician's Scratchpad
  16. The pressing down lemma
  17. Silly proofs 2
  18. Silly proofs 2
  19. The Glory of Salads
  20. Cooking lessons 3
  21. Cooking lessons 2
  22. Cooking lessons 1
  23. Stone duality rocks
  24. Sweet carrots and chickpeas
  25. Latkes
  26. Spicy pumpkin and bean stew
  27. Silly proofs 1
  28. Chains of null sets

2005 17

  1. Badass garlic lentils
  2. Pseudo-malaysian rice and lentils
  3. Spicy Egg and Potatoes
  4. Persian Rice and Lentils
  5. Announcement
  6. Vegetarian Mole
  7. Pseudo-African Peanut and carrot stew
  8. Mombasa Pumpkin Desert
  9. Butternut squash risotto
  10. Super-real fields 3: Artin-Schreier theory of ordered fields
  11. David's Mole Brownies
  12. A Mathematician's Scratchpad
  13. Super-real fields 1: Basic background material
  14. Super-real fields 2: Hyperreals and Ultrapowers
  15. Fried Pasta
  16. "Playing with your food" begins
  17. Roast pumpkin with a spicy potato and squash filling