David R. MacIver's Blog
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
- Come work with me on Hegel
- I understand humour (insert caveats and footnotes)
- Generating provably solvable instances for testing solvers: Do you wanna test a SAT solver? (It doesn't have to be a SAT solver)
- How I've been using Claude Code
- Hello
- On Mediocrity
- The hard problem with hard problems
- How to be less box-shaped
2025 10
- Making connections
- Reduce the need for active stabilisation
- How to find things (an intro to binary search)
- How pen caps work
- COVID is doing the rounds again
- Yes you can hum while holding your nose
- How to say what you're good at
- Have you tried not having the problem?
- How I clean my kitchen at the end of the day
- Behaving as if you were trying to succeed
2024 22
- Setting up my new blogging engine
- Meditations on taste
- How to read more books
- what you have determines what you make
- My post about looking for new projects last year
- Losing yourself in an audiobook
- Creative fury
- Larger selves
- Nice problems to have
- How to rest
- Using a list to manage executive function
- Words and bodies
- Carving up clouds
- the real vs fake thing
- This is important
- The mundanity of magical practice
- Turning paid subscriptions back on
- My (no-longer-)secret magical practice
- The Manual that solves all your problems
- Emotional and physical therapy
- Heterogeneity
- the cheeseburger threshold
2023 13
- Why to explain things you already know
- Decisions depend on the decision maker
- Completing completable projects
- Two types of work
- You can't "solve" procrastination
- In praise of turning people into dinosaurs
- What's stopping you?
- Why do you do the things that you do?
- Starting from where you are
- you end up with a sort of bland sameness of every result being close to identical
- Reading philosophy for the examples
- The problem shows you how to solve the problem
- Cohering and decohering
2022 25
- Learning to exercise agency
- How to think about estimation strategy
- What is it like to read LitRPG?
- Estimation is inseparable from planning
- How to pick a number for any purpose
- How to think about task estimation
- Learning and teaching practical wisdom
- A good start
- Parts of you haven't grown up yet
- Learning to walk through walls
- I’m on the record as thinking it’s important to acknowledge and talk about intelligence
- some abandoned writing on luck that I never finished off
- victim of metonymy problem
- How do we treat unique talents?
- Quick fixes to your code review workflow
- Learning from others' stories
- Delight in the imperfect
- Describing imaginary experiences
- Education by punishment
- Ubj gb ernq EBG13 (How to read ROT13)
- Looking for dragons drives progress
- How to understand groups of people
- People don't work as much as you think
- Peer one-on-ones
- Daily writing in January
2021 46
- Labelling Feelings 101
- The first hard choice
- Whoops, email is hard
- Discontinuing paid subscriptions
- How to make easy decisions
- Why is it hard to choose what to do?
- Current thinking 2021-08-22
- Current thinking: Play and self-improvement
- If you're stuck, try something different
- How to give good advice
- How does good taste work?
- Telegraph your moves
- Relaxing the newsletter schedule
- Unscheduled Hiatus
- Some thoughts on ethics and narrative
- How to use thought experiments
- Ethical decision-making and life patterns
- Communities construct a sense of purpose
- Parts of you haven't grown up yet
- How to teach the local style
- Some notes from behind the scenes
- How to triage your inboxes
- Notes towards planning the future
- Record yourself to coach yourself
- How do we treat unique talents?
- How to do everything
- Understanding your health is hard
- Life is a Series of Events
- How to be weird
- Being Disappointed in People
- Returning to the World
- Stop Telling People What To Do
- Choosing what to do
- Mathematical Cranks, Information Overload, and Predicting the Pandemic
- I Quit my PhD
- Difficult Problems and Hard Work
- Intellectual DIY
- Pandemic Moods
- Unplanned Break
- A Fractal of Lies
- Believing That You Can Stop
- Starting Again
- Temporary Hiatus
- A Few Book Recommendations
- The Habit Cycle
- Reflections on 2020
2020 37
- Life-Complete Problems
- Trust
- Decoupling
- Shameless Self-Promotion
- Emotional Health
- Have you tried just being good at it?
- Costing Up Solutions
- Don't just try harder
- Common Knowledge of Feelings
- How to Become Smarter
- Monocropping
- Self Curiosity
- A Brief Introduction to Shadow Work
- Refusing to Learn
- In Defence of Half-Arsing
- Overthinking Overthinking
- Overthinking Overthinking (Resend)
- Positively Deviant
- Distributing blame
- The Usefulness of Bad People
- Being, Acting, and Feeling Responsible
- Here's Some I Made Earlier
- Writing to Understand
- Fascination Procrastination
- Being Deep in an Abstraction Stack
- Maintaining Niche Interests
- What do you do?
- No Newsletter This Week, AMA
- Unusual Foundations
- You should complain about it
- Why am I not working on my PhD?
- Burnout as Acedia
- Life as Nonproductive Act
- How to do hard things
- Writing Elsewhere
- There's no single error rate
- A Crash Course in Having Feelings
2019 17
- Open to Interpretation
- Advice to new speakers
- Vocabulary Building: Satisficing
- Being an example to others
- Gendering
- Jiminy Cricket Must Die
- The missing social technology sector
- I last wrote notes on this subject a good seven years ago
- The Ethics of False Negatives in Interviewing
- How to do hard things
- The One Weird Word Rule
- The Inner Sense of Gender
- Two types of viewpoint
- How do you nurture your imagination?
- You should be stockpiling food for Brexit
- Conferences Should Publish Menus
- Notes on Test-Case Reduction
2018 36
- Situated Software
- Nonspecifically Neurodivergent
- FAQ: How do you read so many books?
- Reaching into the Whirlwind
- Local Goal Setting
- How to Explain Anything to Anyone
- My Position on Functional Programming
- More blogging over there
- The Can Opener Principle
- Research Is A Lot Like Sex
- Quieting your Dell XPS 13's Loud Fan
- D&D Characters I Have Known And Loved
- Test-Case Selection and Choice Theory
- Notes On Eating More Vegetables
- DFA Minimization as a Fixed Point
- Dis-Integrating the (Public) Self
- On Not Quite Fitting
- Doing the Two-Step for Efficient Reversible Deletes
- Cooking on Easy Mode
- Statistical vs actual lives and ethical intuitions
- Taking (Part Of) My Self Offline
- Monads as an interface for composition
- Block First, Ask Questions Later
- Trashy Fiction Recommendations
- (Some of) my problems with correctness research
- An Unkind Question about Software Correctness Research
- Refining L* search
- Novelty Requires Explanation
- Times to exhaust finite distributions when sampling with replacement
- Can you write correct software in a statically typed language?
- Why does everybody in the galaxy speak English?
- Selection pressures on company behaviour
- An algorithmic puzzle
- A pathological example for test-case reduction
- Lazy fisher-yates shuffling for precise rejection sampling
- The Clarke Gap
2017 63
- The Great Asshole Filter
- Lets talk about sets
- Non-fiction
- Shaping the World
- Reality is a countably infinite Sierpiński cube
- A statement of philosophical principles
- The politics of "I don't know"
- Truth and/or Justice
- Python Coverage could be fast
- Programmer at Large progress report
- Surgery recovery update
- Programmer at Large: Why aren't you laughing?
- A trick for getting to sleep
- Dispatches from the War on Sleep
- Programmer at Large: Why didn't they see this coming?
- On Efficiency
- There are no hidden rules
- New Fiction
- Shutting down my Patreon
- A time and a place for work
- Talking to people at conferences
- Thoughts on the election
- Adaptive delta debugging
- Older women as protagonists in SFF
- Programmer at Large: Can we speed that up?
- Auction Update
- A hybrid voting system for scheduling
- Programmer at Large: Does that work?
- The other half of binary search
- Linear time (ish) test case reduction
- Startup Life
- Life Changes Announcement: Academia Edition
- Programmer at Large: Can we not?
- Ordering and mapping regular languages
- An epistemic vicious circle
- A worked example of designing an unusual data structure
- Programmer at Large: Didn't you notice?
- The Easy Way to Compile Automata to Regular Expressions
- My time: Now available to the highest bidder
- Fully Automated Luxury Boltzmann Sampling for Regular Languages
- Programmer at Large: How old is this?
- How and why to learn about data structures
- An untapped family of board game mechanics
- Programmer at Large: Who wrote this?
- Looking into doing a PhD
- Laziness is better when it's visible
- How likely are Condorcet cycles in supermajorities?
- Programmer at large: How did people come up with this?
- Adding a threshold to random ballot
- Coin tossing and adversary resistant priors
- Rigging elections with integer linear programming
- Programmer at Large: How do you do?
- Thinking through the implications
- Avoiding conferences in the USA for now
- Programmer at Large: Are you serious?
- Determinism is topologically impossible
- Programmer at Large: What's that noise?
- Upcoming reduced publishing rate and Patreon
- Programmer at Large: What's your name?
- How to make good things
- Programmer at Large: What is this?
- Convergence of alternating sums
- Faster random sampling by handling rejection well
2016 97
- On persuasion and anger
- Proving or refuting regular expression equivalence
- Randomized exhaustive exploration of a many branching tree
- Aligning incentives
- A simple purely functional data structure for append and forward traversal
- Randomly productive
- Voting theory and practice infodump
- Updating in favour of two-round delayed runoffs
- The worst election
- Small elections comparing Majority Judgement, Range Voting and Condorcet winners
- 2017 Goal: Recurring Revenue
- The littlest infinity
- Democracy for lunch
- Metric space completeness is a restricted form of topological compactness
- Generalized Single Transferable Vote
- Deterministic Hare-Clarke STV voting, take 2
- A deterministic improvement to Hare-Clark Single Transferable Vote
- A Small STV Election for Meek's Method
- A failure mode of single transferable vote
- I still believe in democracy
- Road Trip Day 5
- Road Trip Day 2
- A reset protocol for my body
- I like short books
- Dividend paying sovereign wealth funds and decoupling effects
- Review of a book that reviews (code) reviewing
- Road trip!
- Why you should use a single repository for all your company's projects
- Underestimating the inductive step
- Some things that might help you make better software
- Giving up on giving up on caffeine
- Static typing will not save us from broken software
- Declaring code bankruptcy for the rest of 2016
- Some small single transferable vote elections
- On racist intermediaries in hiring processes
- Two extremes of problem solving
- A Conference Survival Kit
- My standard dinner meta-recipe
- Nasal experiments
- The Caffeine Alarm Clock
- Better Sleep Data through pulse oximetry
- What makes someone real?
- Against Dutch Book Arguments
- Why I'm in favour of proportional representation
- Ain't nobody here but us survivors
- Trading influence: A half-baked parliamentary design
- How to not be late
- Making taxes progressive through redistribution
- It might be worth learning an ML-family language
- First Past The Post is not the problem, districts are
- Seeking recommendations for better sleep data
- Contributors do not save time
- Against Virtue Environmentalism
- Fuzzing through multi-objective shrinking
- Doing less by doing more
- An experiment in breaking a caffeine addiction
- Occasional Reading Post #8
- How to navigate goal directed learning
- Weekly Reading Post #7
- Three thought experiments on majority voting
- Weekly Reading Post #6 (Bi-Weekly Edition)
- Windows Progress Report
- Weekly reading post #5
- L* Search and Inference of Deterministic Finite Automata
- How to read a mathematics textbook
- Weekly reading post #4
- The Derivative as an Alternative Minimal Deterministic Automaton
- The Myhill–Nerode theorem and the Minimal Deterministic Automaton
- Weekly reading post #3
- You're now all on commission
- Weekly reading post #2
- Charitable donations
- Hello from Windows
- The Borda Count as a Randomized Limit of Approval Voting
- Randomizing Lean Coffee
- Filibuster, the game
- Weekly reading post #1
- New group: "Making Work Better"
- A random sample of what I read last week
- An estimation game for sprint planning
- Buy me books, redux
- Writing libraries is terrible
- In defence of developer exceptionalism
- Brand split
- Language reconstruction based fuzzing without reconstructing languages
- Self-optimizing boolean expressions
- Shrinking failing input using a SAT solver
- Delta debugging with inferred separators
- Gerrymandering take two
- Optimal gerrymandering with Z3
- Buy me books!
- Augmenting shrinkers by inducing regular languages
- The easy way to get started with property based testing
- Hypothesis progress is alarming
- Superposition values for testing
- Commons: A board game
- Automated patch minimization for bug origin finding
2015 138
- 2015 in review
- On criticizing programming languages (without criticizing their users)
- Mentors as a service
- Effectiveness of personal greenhouse reduction vs donation
- How to help your favourite open source project
- Direct proofs from the well ordering theorem
- Zorn's lemma is what happens when you get bored of transfinite induction
- Let's help people go to PyCon Namibia
- The DRMacIver survival kit
- Anyone want a speaker?
- Conjecture, parametrization and data distribution
- Services that won't buzz off
- Free work is hard work
- Notes on headache self-care
- My favourite language feature
- So who wants a Hypothesis port?
- Let Hypothesis making your choices for you
- Having another go at a vanity IRC channel
- A whirlwind tour of the Hypothesis build
- New improved development experience for Hypothesis
- In praise of incremental approaches to software quality
- The economics of software correctness
- Mergeable compressed lists of integers
- There is no single acceptable defect rate
- Future directions for Hypothesis
- Finding more bugs with less work
- Hypothesis: Staying on brand
- The repr thing
- Designing a feature auction
- Soliciting advice: Bindings, Conjecture, and error handling
- Structure aware simplification for Conjecture
- Conjecture WIP: Simplification isn't simple
- A new approach to property based testing
- A survey of Quickchecks
- Mighty morphing power strategies
- The two voices of progress
- Apparently I'm still doing this fanfic thing
- Notes on London flat hunting
- Hypothesis 1.10.2 and 1.10.3 are out
- What if we had more finished libraries?
- Fuzzing examples from the ground up
- How to generate a list plus an element of it
- A vague roadmap for Hypothesis 2.0
- New release of hypothesis-pytest
- Book review: Smarter than you think, by Clive Thompson
- Throwing in the towel
- Hypothesis 1.10.0 is out
- New Patreon page for work on Hypothesis
- Massive performance boosts with judicious applications of laziness
- Hypothesis 1.9.0 is out
- A terrible/genius idea
- Two new Hypothesis releases and continuous deployment of libraries
- Notes on Hypothesis performance tuning
- Making Hypothesis sustainable
- Heuristics are for learning, not for teaching
- Hypothesis 1.8.0 is out
- A wish list for programming languages
- Hypothesis 1.7.2 is out
- Properties for testing optimisation
- Using z3 to try to solve Feedback Arc Set for Tournaments
- Want to take a weekend to write tests?
- Hypothesis 1.7.1 is out
- Back-pedalling on Python 2.6
- Some stuff on example simplification in Hypothesis
- Thinking with the machine
- Pydata London 2015
- Hypothesis continues to teach me
- We made this
- Hypothesis for Django
- Using Hypothesis with Factory Boy
- Thoughts on Strangeloop and Moldbug
- Large scale utilitarianism and dust motes
- Using tmux to test your console applications
- The era of rapid Hypothesis development is coming to an end
- New discussion groups for randomized testing
- Constraint based fixtures with Hypothesis
- If you want Python 2.6 support, pay me
- Speeding up Hypothesis simplification by warming up
- Notes on the implementation of Hypothesis stateful testing
- On Haskell, Ruby, and Cards Against Humanity
- The #1 reason I don't write Haskell
- Getting Google Analytics on readthedocs
- How to improve your Quickcheck implementation with this one weird trick
- Some empirically derived testing principles
- Why I am no longer #YesToAV
- Tests are a license to delete
- Notes on pilling a cat
- Things that are not documentation
- Important things I have learned about Twitter on Android today
- Revising some thoughts on test driven development
- The war cannot be won, yet still we must fight our little battles
- Surprise! Feminism.
- Interviewing: Test, don't sample
- It's OK for your open source library to be a bit shitty
- Stargate physics 101
- Honey I shrunk the clones: List simplification in Hypothesis
- 27 bugs in 24 hours
- How to make other people seem like humans
- Hypothesis 1.0 is out
- What I would do with the Stargate program
- A sketch of a new simplify API for Hypothesis
- I can dream, right?
- Simplify starts from the wrong end
- ##computer-enthusiasm, an experiment in liking things again
- Stable serialization and cryptographic hashing for tracking seen objects
- An alternate timeline for Stargate SG1
- The downside of making accurate inferences about people
- Topological compactness is an induction principle
- Continuous functions are those which preserve approximate measurements
- Software I actually like
- Commodity futures trading! In space!
- The beginning of a novel that I'll doubtless never write
- How to stop Hipchat beeping at you.
- Triangular Beeminding; Or, Drink Less, Using the Power of Triangles
- Monadic data generation strategies and why you should care
- What are developer adjacent skills?
- The three stage value pipeline for Hypothesis generation
- What is the testmachine?
- Some books I have enjoyed recently
- Some thoughts on open source
- Revised Hypothesis 1.0 plan
- Changes to the Hypothesis example database
- Better prediction of probabilities through auctions
- A plan for Hypothesis 1.0
- On taking the ideas in Hypothesis
- Using multi-armed bandits to satisfy property based tests
- Anatomy of a bug hunt
- The things you forget to test
- The pain of randomized testing
- I just want to brag a bit about the Hypothesis test suite
- Hypothesis now has a mailing list
- Testing the installer for your python library
- On the new data generation in hypothesis
- Hypothesis short term road map
- Extending a preorder efficiently and correctly
- It turns out integer linear programming solvers are really good
- Optimal solutions to FAST
- Using voting systems for combinatorial optimisation problems
2014 79
- A genie brokers a deal
- Punishing people for improving the situation
- A new plan for Christmas 2015
- Field notes from last night's recipe
- The questions you should ask when starting a project
- So what happens now?
- A small tactical voting example
- Should you join Google?
- Some more small elections
- An interesting hypothetical election
- A patch for quadratic voting
- Well that didn't last long
- So you want to read some Fantasy
- Fallacies programmers believe about credit cards
- Asymptotic behaviour of max(Z_n)
- Another take on high variance strategies
- A Martian makes a bet
- Order dependence in preference elicitation
- A game concept for learning about SPRs
- Relaxing some assumptions from the "high variance strategies" post
- The virtue of high variance approaches
- What I'm doing to improve my sleep
- Reading code without running it
- The role of certainty in behaviour change
- Majority judgement by hand
- I don't trust motivation
- Strategies, not promises
- Definitely not a Mexican recipe
- A satisfying resolution to trolley problems
- David seeks app for fun and exercise logging
- Exercise for people like me
- Backpressure 2: Backpressure harder
- I should edit more
- You should write more
- Why mathematics makes you better at programming (and so does everything else)
- A system for coordinating groups
- Playing beeminder on hard mode by adding backpressure
- Richman Scrabble: A play report
- A mod for a large class of board games
- Gnocchi with Courgettes and Sundried tomatoes
- Another example of a compact convex set
- Some examples of compact convex sets
- How to learn a new city
- My algorithm for deciding what to cook
- GO. VOTE. DAMMIT.
- Go vote, dammit
- How hard can it be?
- Correlation does not imply correlation
- How UK MEP elections work
- Putting word counts into beeminder
- Printing, a status report
- MacIver: A pronunciation and spelling guide
- The man who named the stars
- A culinary option you may have overlooked
- We are borg
- Locally compact Hausdorff spaces and the Riesz Representation Theorem
- Paying attention to sigma-algebras
- I think I might have a book problem
- Write libraries, not services
- Chickpea and vegetable stew
- Sketch design for a sort of housing co-operative
- What is good code?
- More book recommendations
- Notes on a randomized variant of majority judgement
- A two person agreement protocol
- A class of games I wonder if exists
- My kitchen has a new toy
- Open data and fair elections are incompatible
- Etiquette for the devil's advocates
- New testmachine release
- How to write good software
- Different types of overheads in software projects
- Reading code by asking questions
- Revisiting an old voting system design
- Coinpocalypse
- Now you too can have a magic bug-finding machine
- Improving code coverage with testmachine
- Compressed ranges for intmap
- Introducing THE TEST MACHINE
2013 143
- A potentially fun game mechanic
- Report on a scrabble variation
- A personal history of interest in programming
- Reevaluating some testing philosophy
- Domain specific evaluation orders
- Updates to intmap
- New project: IntMap implementation in C
- Experimenting with python bindings to jq
- A sketch-design for a type of non-profit organisation
- Binary tournaments
- The geometry and optimisation of tournaments
- Lets play a game
- Consider the tournament
- Chicken breasts in red wine and caramelized onion sauce
- It's like Intrade meets OKCupid
- Examining bias in non-majoritarian random pair
- Stating the probabilistic Gibbard-Sattherthwaite Theorem
- A technical lemma I am finding surprisingly useful
- The other randomized voting system
- Ordinal and cardinal numbers
- Well orderings, comparability of cardinals and aleph_1
- Maybe I'm doing it wrong
- An amusing problem to solve
- The false proxies of mirror images
- Designing a tech meet-up for inclusiveness
- How learning Scala made me a better programmer
- Some things that are the same size as each other
- An introduction to infinity
- How to submit a decent bug report
- I think I don't think like I think I think. I think
- Notes on instrumentalist reasoning
- Other ways to improve democracy by picking your politicians at random
- Notes on aspirational mental models
- Warning: This blog has secret mind control powers
- How to get free tea from Pret a Manger
- Blog editorial guidelines
- I am angry too
- With enough context, everything makes sense
- Towards a more perfect democracy
- Valid arguments from my opponent believes something
- Best of drmaciver.com
- Hammer Principle back online
- More tinkering with auction games
- How to quickly become effective when joining a new company
- Thesis: Job hopping is good for companies
- More on labels and identity
- Things you can do to scrabble
- Some webcomic recommendations
- A curated feed of stuff I found interesting
- A case study in bad error messages
- You are not your labels
- I suppose it's not terribly surprising that Wordpress are bad at security
- Venison stew
- Report on some initial playtesting of the auction game
- Updating my dietary policy
- Arguments I am unlikely to listen to
- Boycotting kickstarter
- More linux wifi hilarity
- The long RSS winter may be over
- The cult of the giant global brain on moral philosophy
- Problems with Linux wifi on an Intel network card
- Customers who read this blog might also like...
- But enough about me...
- How to hard "boil" an egg, redux
- A refinement to the auction game
- Problem solving when you can't handle the truth
- Bayesian reasoners shouldn't believe logical arguments
- An amusing financial instrument for creating a common currency
- Collaborative coin flipping
- A manifesto
- Chesterton's patch
- A crude voting simulation
- When does one normal distribution dominate another?
- Come join the cult of the giant global brain
- Another group interaction experiment I'd like someone to perform
- An auction game design
- Terra: A brief review
- A simple example of non-VNM total orders
- A theorem on dominance of random variables
- A sketchy and overly simplistic theory of moral change
- Another model for bribing MPs
- Comment moderation
- How to legally(?) and efficiently bribe a democracy
- Some simple theorems about dominance of probability distributions
- More on infinitary decision strategies
- Using two level discourse as a tool of thought
- The moral argument for rationality
- A theorem about certain families of random variables
- An infinitary extension to the previous theorem about random variables
- An amusing conceit for a sci-fi story
- On vegetarians who eat chicken
- On the Von Neumann Morgenstern Utility Theorem, Part 1
- Objections to the VNM utility theorem, part 2
- A magic system with consistency and depth
- An interesting experiment that no one seems to have performed
- An announcement and a brief retrospective
- The winning strategy for random ballot is not what I thought it was
- How to stop Android's fucking profanity policing bullshit
- Percentages of the popular vote in UK elections
- Value functions lead to non-transitive preferences
- Book review: What The Best College Teachers Do
- Some ill thought out musings about identity
- I've been stealing recipes from my mother: Ice cream pie
- Deterministic voting is just too random
- Now with added Flattr
- A bugfix for my queuing business model
- A freemium model for scheduling
- A proposal for electoral reform
- The horror lurking at the heart of the new hypothesis
- Another new hypothesis feature: flags
- A possible more principled approach to generation and simplification in hypothesis
- Stateful testing with hypothesis
- You probably shouldn't do this, but it works really well
- My personal dietary policy
- Nontransitive dice are unsurprising
- Yesterday Was Change Everything Day
- Quickcheck style testing in python with hypothesis
- Blasting patents for fun and profit
- Falsifying hypotheses in python
- An interview question
- An audible experiment
- A (rewritten) manifesto for error reporting
- A parable about problem solving in software development
- A manifesto for error reporting
- A meta-recipe
- Now syndicating drmaciver.com to twitter
- A heuristic for problem solving
- Exploring your twitter archive with unix
- What are developers bad at?
- A file that should exist in all your ruby projects
- So I accidentally designed a voting system
- Different ways of defining topologies
- Update on voice recording in interviews
- A discussion on free time and hiring and employment practices
- Questions for prospective employers
- An election protocol for implementing random ballot in an accountable manner
- Why random ballot is a good idea
- New blog look
- Implementing find_or_create correctly is impossible
- Interviewing companies
- Majority Judgement implementation in python
- Update on resampling voting systems
- A resampling statistic for voting systems
2012 52
- Twitter as the death of blogging
- Ignorance is bliss for whom?
- So I accidentally wrote a monad tutorial
- How do you interview people without a programming background?
- Constructing the negative numbers
- Hello there, who are you?
- Calvin and Hobbes, gocomics and dotjs
- If Programming Language Articles Were People
- Committing to calling out sexism
- Gluten and dairy free brownies
- Teach me how to hire a diverse team, please
- A non-transitive tournament
- Saturday night madness
- Playing to your strengths can be a weakness
- Two column morality
- Sieving out prime factorizations
- Come work with me!
- Randomly exploring github
- How to do expertise search without NLP
- How to hard "boil" an egg
- A heuristic for detecting expertise
- Salad for breakfast
- Against Human Readability, Part 2 of Many: The toolchain argument
- Against human readability, ongoing discussion
- An interesting game mechanic
- Against human readability (part 1 of many?)
- The proper approach to fixing bugs
- OpenVPN repeatedly losing connections with inactivity timeout
- The DDGHF policy on prostitution
- Turning deterministic strategy games into nondeterministic games of voting
- Greetings from the Ministry for Dancing, Getting High and Fucking
- An interesting experiment in social choice
- pageme: A gem for invoking pagers from ruby
- Feeling tired? You should read this
- Constraints inspire creativity
- Converse results: Approximability implies certain topological properties
- The odd topology of uncountable cardinals
- Generalizing local approximations to global ones
- Advance warning of advanced mathematics
- Radii in function spaces
- A nicer way to complete metric spaces
- The power of fixed point theorems in Set Theory
- New, more principled, hammers
- "Agda is now mainstream"
- A green build on my weighted FAS solver
- Integer sets with O(1) range allocation and O(log(n)) deletion
- An algorithm for incrementally building separation graphs
- Butternut squash, coconut and chickpea curry
- A cute algorithm for a problem you've never cared to solve
- Story concept: Dead man walking
- I don't write Scala
- Really simple spatial indices
2011 39
- And now for something completely different
- Keeping track of the Kth smallest element
- A Vantage Point Tree implementation in (shudder) Java
- A cute lower bound for weighted FAS tournaments
- PeCoWriMo derail
- Notes on design of a Haskell API
- Personal Code Writing Month (PeCoWriMo)
- Generating random spheres
- Constraints for wish construction
- Ethical Calculus
- New Blog: Imbibliotech
- Gin
- Miso-Sake Quinoa with Tofu and Vegetables in a Peanut-Sesame Sauce
- Hey guys, we're hiring!
- If This Then That, a neat little service
- The (Programming Language) Hat
- Dietary rearrangement
- The Other Hammer Principle
- World, whim, etc. Part 2
- The World as I Would Make It
- Judgement and Asymmetric Errors
- Sleep as an Droid export data
- Drinks from the weekend
- Maximum entropy methods for single-winner elections?
- On the value of helpful error messages
- My Brownie Recipe
- Ha ha, only serious
- (Runtime) Cost-free abstractions in clay
- New Comment Policy
- What books have made you a better person?
- A plan for not failing
- I'm mentioned (and misrepresented) in the New Scientist
- How to turn AV into a Condorcet system
- Some yes2av links
- A less perfect system for which I will nevertheless be voting
- A "perfect" voting system
- An open letter to thames clippers
- Because ten just wasn't enough
- Playing with a new language: Clay
2010 28
- Reading video frame by frame with ffmpeg
- Dear Commenters: Frankly, I'm tired of you
- Removing silent tracks from a video: A bug and the hack that killed it
- When you have a hammer: Squish usage example
- An interesting idea for authentication
- A possibly new unix-style utility
- On hiring (developers)
- Northpaw, part 1
- Teaching
- The role of a CTO
- Sweet and spicy roast aubergine
- What did you study?
- Irrelevant alternatives aren't
- Rank aggregation basics: Local Kemeny optimisation
- Chakchouka, of sorts
- Databases for cooccurrences?
- The Right Data
- Rank Aggregation in The Right Tool
- The right tool for the job
- The best way to handle exceptions
- DataMapper: A (partial) retraction
- DataMapper is inherently broken
- Roasted Gnocchi with Butternut Squash and Cashews
- On the perils of PostgreSQL rules
- Sequential compactness and the splitting number
- Dark Lord
- You Might Not Know...
- Understanding timsort, Part 1: Adaptive Mergesort
2009 63
- I want ONE MEELYUN sentences
- Shaving yaks and finding feeds
- Filtering deleted documents with PostgreSQL rules
- Potato and butternut squash "pizza"
- Dear lazyweb: A problem on cached string searching
- Experiments on the theme of cauliflower and cheese
- Am I being boring?
- Creative cooking on half a brain
- It's all the same, really
- Join me on IRC
- Rube Goldberg 2.0
- A story, and an oft overlooked point
- Open source term extraction
- A delicious way to use up stale bread
- How to start the week
- Open source nostalgia
- Crowding the trampoline
- How packages work in Scala
- reddilicous: Automatically import your links from other sites into delicious
- Axioms, definitions and agreement
- Making my life more difficult
- Some useful scripts
- Lessons learned: Are you solving the right problem?
- Many eyes make heavy work
- Food discovery of the day
- Cashew and butterbean non-mous
- A problem of language
- Interest bandwidth
- Hug the frog
- A hectnical digression
- Command line tools for NLP and Machine Learning
- Determining logical project structure from commit logs
- A reminder: Planet Scala move
- Open sourcing Pearson’s Correlation calculations
- Gates
- Pulling the plug on old planet scala feeds
- More kittens: Improving edge weight calculations
- Segmenting kittens: Experiments with clustering image contents
- More fun with xsel
- Scala trivia of the day: Traits can extend classes
- planet scala now on github
- A workaround for misbehaving X citizens
- From Objects to Agents
- Exceptions for control flow considered perfectly acceptable, thanks very much
- Left folds with early termination
- We don't need anonymous inner classes? Bollocks to that.
- Planet Scala gets its own domain
- Filtered feed to Planet Scala
- How do you talk about Scala?
- Spam
- Planet Scala now running on venus
- New site design
- Not really LÖVING it
- Criticizing programming languages
- Porting Pearsons to Postgres. Performance?
- Cleaning up a set of tags, part 1
- Importing work posts
- Yet another MySQL Fail
- Old mathematics posts
- Computational linguistics and Me
- Writing things right
- Planet Scala: By Scala programmers, usually about Scala
- Planet Just Scala
2008 60
- Living on the edge of academia
- Pearsons in the database, part 2
- Calculating Pearson’s correlation coefficient in SQL
- Posting elsewhere
- Computing connected graph components via SQL
- A cute Scala hack
- A curious fact about overloading in Scala
- A glorified to do list
- New collections in Scala 2.7.2
- A follow up to yesterday's article
- Functional code != Good code
- Reusing Java's tools: Cobertura and Scala
- Unsigned comparison in Java/Scala
- They called me mad
- Removing myself from planet haskell
- java.lang.String#hashCode
- Lessons learned in class
- Planet Scala
- Code generation for structural proxies
- Scala arrays
- Random linear algebra hackery in Scala
- SBinary 0.2
- Book Review: The Art of Assembly Language
- A cute hack: Changing the scope of System.out
- GUI interpreter frontend coming along nicely
- Trampoline Systems and Scala
- Code move
- Request for help: Numerical linear algebra
- Not really an announcement: GUI frontend to Scala Interpreter
- A reminder of how Wordpress handles RSS feeds
- Removing myself from Artima Scala Buzz
- Baked parmesan and tomato polenta
- Make your menu definitions less irritating
- QDBM Bindings
- Code for you to play with
- SBinary progress
- Monadic card shuffling
- "Object Main extends Application" considered harmful
- New Blog
- Scala syntax change proposal
- Sbinary performance and Buffered IO
- SBinary backends
- An introduction to implicit arguments
- Existential types in Scala
- Hector's Reminder Service: QT Jambi and Scala
- Open source project breakdown.
- Formatting
- Wait, you believed them when they said "Write once, run anywhere"? That's so cute.
- Anyone willing to put a word in for Groovy?
- Tell us why your language sucks
- Easy binary serialization of Scala types
- More penne and cheese
- Food hacks
- Learning Scala
- Java collections and concurrency
- More Asus hilarity
- Minor revelation about Scala existential types
- Dereferencing operators
- Why not Scala?
- Variance of type parameters in Scala
2007 71
- Amusing discovery of the day
- Hardware vendor shit list
- Random thoughts on OO
- Type classes in Scala
- No, seriously, why Scala?
- Open sourced range types
- Statically checked range types in Scala
- Minor irritations
- Don't forget to fly
- Dependency injection in Scala
- Java performance tip: Think about your container sizes
- Turn your toString methods inside out
- Best error message ever
- Ooooooh. Shiny!
- I Aten't Dead
- Lisp tutorial
- How to create sealed classes in Java
- Tail call optimisation in Scala
- Good APIs
- Testing, testing. Is this thing on? (Also, Cheesebread)
- Looking through other peoples' code is fun
- Birds of a Feather and AMQP
- The world has gone mad
- Data structures in Java
- Playing with Arrows
- Where lies the problem?
- Perversity
- A quick check
- Beating StringBuilder? Hell no.
- I fail miserably at performance testing
- Lazy strings for Java
- Javascript
- What's a monad?
- Functional programming lies
- JTypeBuilder and APT
- Equal opportunities oriented programming
- Tail call optimisation in Javascript
- Viral XKCDing
- Blatant and malicious evil
- More JTypeBuilder
- Job applications
- Static vs. Dynamic Typing
- Concision
- Yet more JTypeBuilder
- Baby's first open source project
- re·cur·sion –noun: See recursion
- What's in a syntax?
- Unexpectedly popular
- From the jargon file: Bogosort
- fix f = let x = f x in x
- Speling is important
- Cool Gadget of the Day: JTidy Servlet
- Javascript 'with' clause
- Cool gadget of the day: Chickenfoot
- Enforce your invariants damnit
- Parsers, Parsec and Haskell
- Build scripts
- Whoops, there goes another one
- Factoid of the day: Javascript command line
- It's Groun... err. Pancake Day!
- Factoid of the day - CSS trivia
- Goto
- Word definitions
- Testing, testing
- Code Snippets
- Java Packages
- Coding standards
- Desperately Unenterprise
- What don't you eat? (How to feed anyone)
- What do you eat? (How to feed a vegan)
- Guacamole and playing with new toys
2006 28
- Quick American style pancakes
- Sweet and Spicy Peppers with Bulgur Wheat
- Silly Proofs 3
- A New Theorem?
- Mushroom and Chickpea Balti
- Brown rice in an egg and tomato sauce
- Journal of Obscure Results 1: Nedoma's Pathology
- Quick update
- I suck
- Boolean to C* algebras II: The Noncommutative Version
- Boolean to C* Algebras
- Sequential compactness and minors
- More finite topological spaces
- Topology, Separation and finite combinatorics
- A Mathematician's Scratchpad
- The pressing down lemma
- Silly proofs 2
- Silly proofs 2
- The Glory of Salads
- Cooking lessons 3
- Cooking lessons 2
- Cooking lessons 1
- Stone duality rocks
- Sweet carrots and chickpeas
- Latkes
- Spicy pumpkin and bean stew
- Silly proofs 1
- Chains of null sets
2005 17
- Badass garlic lentils
- Pseudo-malaysian rice and lentils
- Spicy Egg and Potatoes
- Persian Rice and Lentils
- Announcement
- Vegetarian Mole
- Pseudo-African Peanut and carrot stew
- Mombasa Pumpkin Desert
- Butternut squash risotto
- Super-real fields 3: Artin-Schreier theory of ordered fields
- David's Mole Brownies
- A Mathematician's Scratchpad
- Super-real fields 1: Basic background material
- Super-real fields 2: Hyperreals and Ultrapowers
- Fried Pasta
- "Playing with your food" begins
- Roast pumpkin with a spicy potato and squash filling