The Curious Engineer

All blogs / C# / .NET

james mckay dot net

jamesmckay.net

because there are few things that are less logical than business logic

C# / .NETSoftware / engineering practiceDev tools / editors / IDEsEssays / personal

Posts
363 from 12 May 2005 to 24 Oct 2026
Posting
now and then (1 in the last year)
Kind
personal blog
Feed
https://jamesmckay.net/feed/

2026 1

  1. “Four plus seven plus three is not four”

2023 1

  1. Accurate and honest metric weights and measurements

2021 1

  1. The time I forgot about the speed of light

2020 3

  1. Light speed
  2. Finding bugs in your code quickly using git bisect
  3. On the “reproducibility crisis” in science

2019 5

  1. How not to stop Brexit
  2. Sorry, but I won’t watch your video
  3. The vagaries of humans and other living beings
  4. A must-watch talk for every .NET developer by Udi Dahan
  5. A brief history of pointless mappings

2018 15

  1. Which .NET IOC containers pass Microsoft’s tests?
  2. The state of IOC containers in ASP.NET Core
  3. Just how clean is Uncle Bob’s Clean Architecture?
  4. Productivity suggestion: stop using the mouse
  5. First impressions of JetBrains Rider
  6. It’s not just an opinion, it’s scar tissue
  7. An update on Lambda Tools
  8. Some thoughts on DevOps
  9. Your Repository is not a Data Access Layer
  10. The Great Shorts Debate
  11. To throw or not to throw? Non-exceptional error conditions
  12. Returning.To()
  13. To throw or not to throw? Doing something that has already been done
  14. Positive, negative, or error?
  15. Supergiant stars are hot vacuums

2017 18

  1. What is xkcd “Time” all about?
  2. Error handling is the one thing that puts me off learning Go
  3. You have to tell AWS CLI that your EC2 instance is not in Virginia
  4. Design refresh
  5. Introducing Lambda Tools: a new framework for deployment to AWS Lambda
  6. Necessary and sufficient conditions
  7. Programmatically starting an AWS instance with an encrypted EBS volume attached
  8. New blog on creation and evolution
  9. Continuous Retrospectives are not a substitute for retrospective meetings
  10. Ten things you need to know about the age of the earth
  11. What should a .NET renaissance look like?
  12. You probably only need a t2.nano instance for that
  13. An example of software development lab notes
  14. So you want to talk about creation and evolution…
  15. How to keep lab notes as a software developer
  16. SQL injection is the FizzBuzz of web security
  17. Some thoughts on CQRS and Event Sourcing
  18. Martin Fowler and feature branches revisited

2016 7

  1. Productivity suggestion: keep lab notes
  2. Sharing data between Terraform configurations
  3. Password hashing as a microservice with Docker Compose
  4. The Continuous Retrospective
  5. The three essential files required by every Git repository
  6. Fuzzy dates aren’t as good an idea as you think
  7. Signing Git commits with GPG on Windows

2015 3

  1. “I’ve never had a problem with it.”
  2. Check-in before code review is an antipattern
  3. Inseparable concerns

2014 15

  1. “That’s just your opinion” means “I’m not listening”
  2. Why you should use a general purpose scripting language for your build scripts
  3. Moving a problem from one part of your codebase to another does not eliminate it
  4. The Repository Facade
  5. Why feature switches?
  6. Dolstagis.Web 0.3 is out
  7. How not to do logging: catch-log-throw
  8. How not to do logging: unnecessary abstractions
  9. A maturity model for best practices
  10. Sorting out the confusion that is OWIN, Katana and IAppBuilder
  11. Query Objects: a better approach than your BLL/repository
  12. If your tests aren’t hitting the database, you might as well not write tests at all
  13. Interchangeable data access layers == stealing from your client
  14. The Anaemic Business Layer
  15. On dark matter developers and the role of GitHub in hiring

2013 8

  1. Mercurial is doing better than you think
  2. So I’ve built my own ALT.MVC engine
  3. Your best practices are (probably) nothing of the sort
  4. My choice of Git GUI tools
  5. Namespaces in JavaScript
  6. The writing is on the wall for Subversion as Git takes over
  7. Dolstagis: my pet project
  8. Reboot

2012 10

  1. Is ALM just a marketing buzzword?
  2. Your password hash algorithm is (probably) snake oil
  3. On Git’s growth and the reliability of the Eclipse survey
  4. You can no longer afford not to take Git seriously
  5. Arguments that annoy me
  6. Pigs and chickens
  7. In response to criticisms of CSS pre-processors
  8. How good is your JavaScript?
  9. What is Git’s market share?
  10. If you’re not using a CSS pre-processor, you’re doing it wrong

2011 27

  1. Reckless London cyclists
  2. We are the (Face)Borg. Resistance is futile.
  3. The two types of programmer
  4. :q!
  5. First impressions of MSpec
  6. Passion and pet projects
  7. Individuals and interactions over processes and tools
  8. Buying train tickets
  9. Feature branches versus continuous integration
  10. Why does Martin Fowler not understand feature branches?
  11. Keep the number of projects in your solution to a minimum
  12. No, WANdisco, Git does NOT promote anti-social development
  13. Tourists and residents, Visual Studio and vim
  14. Silverlight is dead. Long live HTML 5.
  15. Avoiding password re-use is not that easy
  16. Eight wrong reasons why you are storing passwords for clear text recovery
  17. Agile versus methodologies
  18. The purpose of auditing is to answer questions
  19. Why merges can (and should) be automated
  20. The great .NET productivity killer
  21. Abstracting your ORM is a futile exercise
  22. On named branches in Mercurial
  23. Google is not your doctor
  24. Team Foundation Server is the Lotus Notes of version control tools
  25. How often should you check in code?
  26. A photo a day
  27. Experimental photography

2010 31

  1. Finding bugs with a binary search of your source control history
  2. Understanding Planning Poker
  3. Programmer jargon: Blub
  4. How to host WCF services in ASP.NET applications without bloating your web.config
  5. The benefits of the command line
  6. Programmer jargon: Cargo Cult
  7. Why tabs versus spaces matters
  8. My driving instructor would shout at me
  9. Avoiding the sardine can
  10. Perforce Merge: a very nice free replacement for TortoiseMerge
  11. Solving the tangled working copy problem with hunk selection and Mercurial Queues
  12. Git
  13. On code generation
  14. Diaspora
  15. Why I like distributed source control
  16. Branching and merging in Subversion is worse than I thought
  17. Send patchbombs to the mailing list, not pull requests to the project lead
  18. Just how smart is Git?
  19. Phone faux pas
  20. TortoiseHg as a github client on Windows
  21. Someone must be wrong about solar weather
  22. The meaning of football
  23. Is Facebook really as essential as it’s made out to be?
  24. You have till Monday to talk me out of quitting Facebook
  25. Introductory videos on IOC containers
  26. On web deployment
  27. NAnt and MSBuild are completely pointless
  28. If part of your framework is not fit for purpose, don’t use it
  29. Command line instructions are not a good marketing strategy
  30. Catching Exception is almost never justified and almost always harmful
  31. Are deletionists harming Wikipedia?

2009 33

  1. Can your database versioning tool do this?
  2. Keep your passwords safe with KeePass
  3. A day of Stack Overflow
  4. How to validate a URL in .NET
  5. Book review: The Art of Unit Testing
  6. Joel Spolsky, cowboy coder
  7. If you are saving passwords in clear text, you are probably breaking the law
  8. Twitter through the eyes of a nine year old
  9. Why can't every call centre let you know how long you'll be waiting?
  10. Web development is hard, m’kay?
  11. Please untangle this great long conversation by COP today
  12. London Victoria’s sneaky back entrance
  13. Why SQL Server 2005 database projects in VSTS are a bad idea
  14. Keyboard switching in IE8 is insane
  15. Why would anyone not use source control?
  16. Inital SQL files breaking in Django syncdb
  17. Reinventing the wheel, badly
  18. Rear airflow rucksacks are a nice idea, but…
  19. Handling exceptions in assembly-level setup methods in MbUnit
  20. XsltArgumentList violates the Single Responsibility Principle
  21. Using jQuery? Check out jQuery UI
  22. Some thoughts on the role of open source experience in recruitment
  23. Beware of second hand contracts
  24. When technical debt becomes technical bankruptcy
  25. Continuous Deployment: radical idea or April fool?
  26. Django custom manage.py commands not committing transactions?
  27. OO: the lingua franca of modern software design
  28. Making the most of your source control summaries
  29. Sometimes, sweeteners can be a bit sour
  30. The case of the disappearing feeds
  31. Commercial flights are twenty-five times safer than private jets
  32. The top 25 most dangerous programming errors
  33. What did James McKay discover?

2008 48

  1. Django: ValueError: too many values to unpack
  2. Time for a new job
  3. Do antivirus scans really need to brick your computer?
  4. Del Boy versus Turing
  5. Another XSLT sweetener
  6. What to drink when you don't drink
  7. An XSLT sweetener
  8. A train of thought
  9. Unit testing URL generation and Html.ActionLink in ASP.NET MVC
  10. In defence of 24 hours
  11. ASP.NET MVC + jQuery – can things get any better for web developers?
  12. Why Stack Overflow’s reputation system is broken
  13. The leaf!
  14. Paths and file locations in ASP.NET
  15. Commenting your code for speed reading
  16. Internet Explorer painkillers
  17. A highly irresponsible metric for web hosting companies
  18. A first look at stackoverflow.com
  19. PHP gets closures. Rejoice!
  20. Don't stuff beans up your nose
  21. Comment Timeout and faulty WordPress themes
  22. Refactoring Databases
  23. What are valid reasons for hating a programming language?
  24. Trying out Python and Django
  25. Less is more
  26. What no night?
  27. Easy login recovery without compromising security
  28. How to become a better .NET developer
  29. The Church needs Creative Commons
  30. Productivity metrics: garbage in, garbage out
  31. What part of "no agencies" do you not understand?
  32. What is the difference between a web designer and a web developer?
  33. Where are all the passionate .NET developers?
  34. Code syntax highlighting in WordPress – take two
  35. How to match any character (including newlines) in a JavaScript regular expression
  36. Why I hate web.config
  37. The two golden rules of exception handling
  38. Code syntax highlighting in WordPress
  39. If you think you don’t need source control, you haven’t understood it
  40. Trying out speech recognition in Windows Vista
  41. Windows upgrades break Media Player 6.4
  42. Derailed
  43. Pro JavaScript Techniques
  44. 恭喜发财, now give me some Unicode
  45. Seventy-one
  46. Published
  47. Missing ASP.NET tab in IIS on Windows Server 2003
  48. On Colemak

2007 68

  1. Mrs Immery
  2. Making the "zoom" slider on the Microsoft Natural 4000 keyboard do something useful
  3. How to list the sizes of the tables in a SQL Server database
  4. Volta, GWT and leaky abstractions
  5. Britain's best motorway service station
  6. Is it time to kill off wikitext?
  7. Password Reminders Considered Harmful
  8. Procedural programming != functional programming
  9. Sorry, but who are you?
  10. Can we live without Wikipedia?
  11. How long does it take to unsubscribe from an e-newsletter?
  12. Make way for your MP
  13. Is your rudeness necessary?
  14. On ties
  15. Farewell to the Kinesis
  16. Is there a future for Rails?
  17. The future of my blog
  18. Church 2.0
  19. Is your code held together with bits of string?
  20. Where has all the disk space gone?
  21. Beginners' languages can have advanced features too
  22. On leaving Wikipedia
  23. You take the high road and I'll take the slow road
  24. Six weeks of Dvorak
  25. Selling domain names
  26. Comment Timeout 2.0 upgrade
  27. Yes, but what is the point of it?
  28. Blogging from the sheep shed — or maybe not
  29. I could have told you this would happen…
  30. Some thoughts on WordPress security
  31. Does the keyboard have a future?
  32. Ask the whole community, not just one of its members
  33. Facebook – the Swiss army knife of social networking
  34. My million dollar iPhone question
  35. Blogging offline
  36. Developers versus PR
  37. Another day, another OS reinstallation
  38. Case sensitivity is evil, but we still have to live with it
  39. Typing perfection?
  40. Another crack at Dvorak
  41. Bad Behavior does not like Windows Live Writer
  42. Comment Timeout 2.0 and friends
  43. Cycle helmets versus style and comfort
  44. The functional beauty of JavaScript
  45. .NET by day, Rails by night
  46. I am not as good at Trivial Pursuit as you think
  47. How to report issues with WordPress plugins
  48. The future of Comment Timeout
  49. Making website upgrades seamless: script the changes
  50. Mornington Crescent
  51. Whither blog?
  52. April MiniBar with Mark Shuttleworth
  53. Comment Timeout 1.3 beta 1
  54. Vertical monitors
  55. Dave 2.0
  56. Learning Rails
  57. On the rails
  58. Yes, it’s been snowing
  59. Bitten by PHP 4’s pass by value semantics
  60. Stopping the spam flood
  61. Hot drinks
  62. Comment Timeout 1.2 – with new features
  63. An evening in London at MiniBar
  64. Comment Timeout 1.0 release candidate 2
  65. Improving Akismet
  66. Comment Timeout on WordPress MU
  67. Replacing a spleen with something else
  68. I'm on your WordPress dashboard!

2006 36

  1. WordPress plugins update
  2. Comment Timeout: Automatically closing blog comments on WordPress
  3. Happy Christmelicious everybody!
  4. Firebug – the best Firefox extension ever?
  5. Firefox usage by country: the browser wars are back
  6. Pastors: get blogging!
  7. WordPress not notable?!!?
  8. Verrückte Idee vom Tage: die Deutschkentnisse mit Wikipedie verbessern
  9. The squawl^H^H^H^H^H^Hskirl of the pipes…
  10. The ultimate designer cat
  11. Windows Live Writer
  12. Online documentation pains
  13. Frame Buster update
  14. Dvorak update
  15. Roughing it – or not
  16. Apparently the in word is "blog"…
  17. Happy System Administrator Appreciation Day
  18. Ban Comic Sans
  19. Kinesis report at three months: Broken!
  20. Ready (or not?) meals
  21. Video blogs at Kingdom Faith
  22. Footy fever
  23. Errors in Wikipedia Considered Harmful
  24. Eolas v Microsoft and FlashObject (continued)
  25. Using Flash? Check out FlashObject…
  26. Will Ruby on Rails kill .net and Java?
  27. The Microsoft Time Warp
  28. Geeky but nice — my new keyboard
  29. So long qwerty, hello Dvorak
  30. iPod rebrand — by Microsoft?
  31. Why doesn’t C# have a synchronized keyword?
  32. New WordPress Plugin: The Frame Buster
  33. Gentoo
  34. MSN Spaces not working in Firefox?
  35. Root canal torture again
  36. A tie!

2005 33

  1. All change
  2. Alex in Wonderland
  3. Secure your contact form!
  4. Do you play the air guitar?
  5. IIS oddity
  6. Which programming language is the most popular?
  7. Sudoku
  8. Er … excuse me, I thought this was 2005 …
  9. The ongoing saga of my teeth
  10. Chain letters and hoax e-mails
  11. RSS? Why bother?
  12. Another anniversary
  13. Ergonomic keyboards
  14. Armchair physics!
  15. Quote of the day…
  16. Faith Camp so far…
  17. God is our refuge and strength
  18. It’s London!
  19. Happy birthday!
  20. Impenetrable Packaging of the Year Award
  21. Beeping Watch!
  22. The Way of the Spirit is on the move…
  23. The new KF website is about to go live
  24. All change at my blog
  25. Car update 1 @ 7 days
  26. Plagued by telemarketers? Try this…
  27. I’m mobile again!
  28. Busman’s Holiday!
  29. Gmail
  30. Mum on the radio and other matters
  31. Look out for…
  32. Fun with cookies
  33. Hello world