Blog Archive 2019 Using phantom types to associate static values and generic types Jan 17 2019 2018 Quick, hacky truth tables in Haskell Dec 05 2018 For sale: Several tonnes of yak hair, going cheap Oct 20 2018 StandaloneDeriving to fix forgetfulness in GHCi Jul 03 2018 2017 Aggregation Nov 04 2017 Specifying FAKE targets Feb 05 2017 2016 Pondering a prescription for pattern matching prevalance Feb 16 2016 Currying vs. partial application Feb 10 2016 Reading type annotations Feb 09 2016 2015 The Apply pattern Jul 27 2015 Git tidbit: Comparing different paths across branches or commits Apr 22 2015 F# type signature gotchas Jan 22 2015 F#: Pattern matching on field literals Jan 14 2015 2014 D3 newbie updates a bar chart Sep 01 2014 A simple circuit, an Arduino, and Haskell Aug 12 2014 Reasoning with more than evaluation Jul 24 2014 F# assertion libraries Jul 22 2014 Digitising hand drawn sketches May 21 2014 Haskell without the Haskell Platform May 10 2014 Some regex help from the F# compiler Apr 19 2014 A hasty introduction to the Either type Apr 03 2014 Stayin’ alive with .NET GC Mar 06 2014 Aristotle and parametricity Feb 18 2014 Splitting responsibilities by abstracting type details Feb 08 2014 2013 Terminal IO example in Haskell Nov 11 2013 More freedom from side-effects (F#) Nov 11 2013 String calculator with Parsec Jul 31 2013 filterM Jun 04 2013 Why not try F#? May 26 2013 A mad Haskeller runs the same input through a list of functions Apr 10 2013 Side-effect free programming in C# Apr 05 2013 Reasoning and mutability Mar 11 2013 A ‘Hello World’ introduction to testing in F# Mar 08 2013 From two functions to tuples with a mad Haskeller Feb 26 2013 2012 Lazy<T> monad instance in C# Dec 13 2012 Threading and Lazy<T> Dec 12 2012 Some optional, functional goodness in C# Dec 02 2012 Catamorphisms Nov 15 2012 Fold for free Oct 26 2012 State monad Oct 02 2012 It’s an imperative, mutable world out there Sep 11 2012 Reader monad Aug 12 2012 Composition via scary-sounding maths terms Jul 23 2012 Composing multiple functions Jul 18 2012 Left-to-right function composition Jul 18 2012 FP newbie learns a little about monads Jun 01 2012 FP newbie learns a little about applicatives May 15 2012 Towards point-free redux May 13 2012 Towards point-free in C# May 12 2012 A lengthy approach to Haskell fundamentals May 06 2012 FP newbie learns a little about functors May 03 2012 Design via minimum code May 01 2012 Working out function types: map map Apr 16 2012 Associativity Apr 16 2012 Function strictness Mar 30 2012 Folds Pt 3: Left fold, right? Mar 24 2012 Folds Pt 2: From loops to folds Feb 25 2012 Goals for software developers Feb 19 2012 Haskell newbie attempts a Haskell quick start guide Feb 09 2012 Folds Pt 1: From recursion to folds Feb 05 2012 Goodbye Blogger Jan 29 2012 2011 What do you enjoy about programming? Dec 16 2011 Dave’s not so excellent typing adventure Dec 13 2011 Documentation via automation Nov 26 2011 Some mocking opinions Nov 22 2011 Odd problem with Git, Windows and virus-checkers Oct 22 2011 Unhelpful flaming is unhelpful Sep 20 2011 Functional programming newbie and something something monad something Aug 16 2011 Technical debt Aug 12 2011 Bash newbie starts to learn his shell for git and profit Jul 27 2011 Abstraction and OO Jun 09 2011 Random software dev thoughts (June 2011 edition) Jun 03 2011 An Rx newbie observes property changes May 21 2011 Don’t mock types you don’t own Apr 28 2011 Why learning TDD is hard, and what to do about it Mar 21 2011 Changing previously stubbed calls with Rhino Mocks Feb 05 2011 Rules Jan 28 2011 Finding functional neatness with Haskell Jan 13 2011 New Year’s resolution Jan 01 2011 2010 Revisting replacing a Ruby instance method with a closure Dec 18 2010 Four years Dec 18 2010 Continuing adventures in adding methods to Ruby instances Nov 13 2010 Replacing a Ruby instance method with a closure Nov 13 2010 Git pre-commit hook to help with multiple identities Nov 10 2010 Interesting documentation Oct 24 2010 Wrap up from TDD and OOO at Sydney ALT.NET Sep 29 2010 NSubstitute on Talking Shop Down Under Sep 02 2010 Calling your shots Aug 29 2010 Quality vs. shipping Aug 28 2010 Continually running a script with Ruby and Watchr Aug 23 2010 Building native extensions for Ruby Gems on Windows Aug 20 2010 There is no U in Collective Ownership Aug 14 2010 Essence and ceremony, Ruby and C# Jul 12 2010 Announcing NSubstitute Jun 30 2010 TDD, not UTDD Jun 04 2010 WPF newbie and ContentPresenter solve the case of the disappearing content May 20 2010 On design and missing the forest for the trees May 07 2010 Friends don’t let friends test-drive while refactoring May 06 2010 The worst class in the world: OneOrMany Apr 14 2010 An easier way to set up diff and merge tools for Git on Windows Mar 26 2010 A WPF newbie battles the StackPanel Mar 23 2010 Using conventions and StructureMap to wire up Views and View Models Mar 15 2010 StructureMap gotcha: IEnumerable instance registered but not injected Mar 08 2010 A WPF newbie styles a ListBox Mar 02 2010 Improving TDD skills via treatment of test infection Feb 24 2010 What exactly is TDD driving? Feb 23 2010 An attempt at simple MVVM with WPF Feb 15 2010 Refactor or redesign? Feb 06 2010 Lessons learned from an Agile project Jan 31 2010 2009 The “http://www.” key Dec 17 2009 Mocking delegates with Rhino Mocks Dec 16 2009 3 years of Davesquared Dec 12 2009 Dynamically creating a generic list Nov 27 2009 The impact of mocking framework limitations on design Nov 13 2009 Favour test driving logic over data Nov 04 2009 Keeping a change out of our master repository with Git Oct 30 2009 Calculators and a tale of two TDDs - Pt 3: Finishing up our BDD kata Oct 22 2009 Calculators and a tale of two TDDs - Pt 2: BDD-style Oct 21 2009 Calculators and a tale of two TDDs - Pt 1: a traditional approach Oct 21 2009 Using Privoxy to block net nasties and ads in Chrome [Windows] Oct 02 2009 Configuring dependencies’ dependencies with StructureMap 2.5.1 [.NET,C#] Sep 10 2009 An example of driving design through top-down testing Sep 01 2009 Coding tiger, hidden responsibility Aug 21 2009 Nothin’ but .NET, Sydney 2009: Final thoughts Aug 21 2009 Nothin’ but .NET, Sydney 2009: Day 5 Aug 12 2009 Nothin’ but .NET, Sydney 2009: Day 4 Aug 10 2009 Nothin’ but .NET, Sydney 2009: Day 3 Aug 08 2009 Nothin’ but .NET, Sydney 2009: Day 2 Aug 05 2009 Nothin’ but .NET, Sydney 2009: Day 1 Aug 04 2009 Enumerables, LINQ and speed Jul 24 2009 ReSharper Live Template for Dependency Properties (C#) Jun 27 2009 Occasional trouble mocking generic methods Jun 17 2009 Scenario-based unit testing post in PDF format Jun 11 2009 Moving to scenario-based unit testing in .NET Jun 10 2009 Dynamic disappointment Jun 03 2009 Setting up Git difftool on Windows May 20 2009 Basic .NET builds using Rake Apr 02 2009 Explicitly test what you are trying to test Apr 02 2009 Too LINQy? Mar 19 2009 Garden Race Pt 3: It’s GUI time! Mar 15 2009 Testing a class for making asynchronous calls Feb 27 2009 Testing legacy code when simple threading’s involved Feb 10 2009 Git-aware PowerShell prompt Feb 04 2009 Setting up diff and merge tools for Git on Windows Feb 03 2009 An introduction to the SOLID principles of OO design Jan 21 2009 2008 Happy 2nd Blogoversary Dec 09 2008 System.BadImageFormatException on 64-bit OS Dec 02 2008 Bookmarklet to get commit message for JIRA integration Nov 26 2008 Unusual formatting with test-first extension method abuse Oct 28 2008 Learning C# lambda syntax from delegates Oct 22 2008 The (very) basics of AAA with Rhino Mocks 3.5 Oct 01 2008 Sydney ALT.NET group Sep 09 2008 NHibernate mappings using xml, attributes, and Fluent NHibernate Sep 04 2008 Getting both item and index during C# enumerations Aug 30 2008 Modifying the SQL generated by NHibernate Aug 26 2008 Rhino Mocks and multidimensional arrays Aug 26 2008 Configuration changes in NHibernate 2.0 Aug 25 2008 Why can’t I access static members from instances using C#? Jul 28 2008 Dodgy .NET memory measurements using counters Jul 25 2008 Brackets, braces, parentheses, and other such creatures Jul 25 2008 Getting results from Oracle procedures for TSQL people Jul 18 2008 Full disclosure: Bought off with a ReSharper licence Jul 04 2008 Write out the fields of a JavaScript object Jul 02 2008 @ prefix for C# names Jun 23 2008 Yet another way of raising events from mocks Jun 21 2008 Subversion 1.5.0 released Jun 20 2008 DI and cross-cutting concerns Jun 19 2008 Attempting to understand Dependency Injection Jun 12 2008 Nothin’ but .NET heading down under May 28 2008 BDD test naming with AutoHotKey May 28 2008 Top-down vs. bottom-up design May 27 2008 Disable theming for an empty ASPX May 21 2008 ReSharper 4.0 beta May 20 2008 LINQ To SQL crippled prior to RTM May 20 2008 Garden Race Pt 2: Adding multiple players May 18 2008 Authorisation rule precedence in web.config May 16 2008 Garden Race Pt 1: Snakes, ladders and iterations May 16 2008 Garden Race Series: Basics of iterative development and TDD May 15 2008 Enabling tracing for WCF (then making sense of the output) May 07 2008 Adding IPrincipal to the list of known types in WCF May 02 2008 When Vista won’t read a Microsoft DVD… Apr 29 2008 Faking WCF authentication for integration tests Apr 21 2008 An assortment of basic TDD tips Apr 18 2008 Getting the current identity in WCF Apr 17 2008 Lambda signature autocomplete with ReSharper 4 Apr 03 2008 99 problems with Python (1-10) Mar 29 2008 IEnumerable and ForEach() Mar 20 2008 Implicitly typed arrays in C# 3.0 Mar 19 2008 Tweaking your Blogger blog Mar 12 2008 TDD is easy! Feb 25 2008 To var or not to var… Feb 25 2008 Cheat’s way to show an indicator while images are loading Feb 22 2008 Emacs key bindings everywhere Feb 11 2008 A brief look at the logic of TDD Feb 06 2008 Using LINQ to XML to migrate blog posts Feb 04 2008 Moving up, moving out, moving back… Feb 03 2008 Viewing the SQL generated by NHibernate Jan 16 2008 The contentious myth of Waterfall development? Jan 12 2008 Take a break Jan 11 2008 Implementing Python-like Range in C# Jan 11 2008 Search Results Jan 11 2008 Messing around with Castle ActiveRecord Jan 08 2008 Messing around with ADO.NET Entity Framework Beta 3 Jan 03 2008 2007 Messing around with various ORMs Dec 31 2007 Messing around with LinqToSql Dec 21 2007 Messing around with NHibernate Dec 21 2007 Messing around with SubSonic Dec 20 2007 Launchy 2.0 – now with QT! Dec 19 2007 Which Visual Studio version do you use? Dec 18 2007 Syntax highlighting for blogged code snippets Dec 17 2007 Developing for a non-software company Dec 14 2007 Lexical scope for closures in JavaScript Dec 13 2007 ALT.NET manifestos Dec 12 2007 ASP.NET 3.5 Extensions CTP is here! Dec 10 2007 The cultural divide Dec 05 2007 VS 2008 and Dreamweaver templates Dec 03 2007 Reflecting on JavaScript objects Nov 30 2007 Plans for IIS 7.0 web app deployment framework Nov 30 2007 Link: Mounting ISO images in a virtual CD-ROM drive Nov 21 2007 Happy anniversary to me! Nov 19 2007 “There are no smart guys, there’s only us” Nov 19 2007 Links to LINQ: Writing custom providers Nov 16 2007 The Illustrated Catalog Of ACME Products Nov 15 2007 Locating NHibernate Mapping Files Nov 14 2007 LINQ-to-SQL logging via DataContext.Log Nov 08 2007 Windows Live Writer out of beta Nov 07 2007 Enterprise-scale Reuse - An Illustrated Example Nov 07 2007 LINQ, deferred execution and closures Nov 07 2007 Getting SubSonic talking to Oracle Nov 01 2007 Double dispatch Nov 01 2007 Fluently constructing test objects Oct 30 2007 Generics and overriding Oct 30 2007 ALT.NET Wiki Oct 24 2007 More on learning ReSharper Oct 23 2007 Link: Refactoring walkthrough Oct 19 2007 Link: Tutorial on ASP.NET MVC Oct 18 2007 Getting to grips with ReSharper Oct 17 2007 I had a nightmare like this once… Oct 17 2007 BPM tools vs. developers Oct 17 2007 Forms Authentication and sliding expiration Oct 16 2007 Fight the Bull! Oct 12 2007 Link: Speed up Visual Studio 2005 Oct 12 2007 The importance of being Mort Oct 11 2007 ScottGu on templating, and using AJAX without UpdatePanels Oct 08 2007 ASP.NET MVC framework Oct 08 2007 Passing an arbitrary number of arguments to a JavaScript function Oct 05 2007 ScottGu on releasing the source code for .NET 3.5 Oct 04 2007 A GridView CommandField of type Image causes a double submit Oct 03 2007 Coalescing delegates Oct 03 2007 Confirm delete for GridView’s CommandField using JavaScript Oct 02 2007 Free articles every developer should read Sep 28 2007 Oracle PL/SQL’s maximum identifier length Sep 28 2007 The art of structured procrastination Sep 28 2007 Everything about dynamic search conditions in T-SQL Sep 25 2007 Learning from project failures with Raganwald Sep 25 2007 Guard against SQL injection in dynamic PL/SQL Sep 25 2007 Go the Cats in 2007! Sep 25 2007 Managing multiple monitors with DisplayFusion Sep 24 2007 xUnit.net announced Sep 21 2007 Comment roundup: SharePoint as a development platform Sep 21 2007 Rob Conery on text mining and analysis Sep 14 2007 Writing beautiful tests (from Beautiful Code) Sep 13 2007 Dustin Diaz’s JavaScript, CSS and XHTML site Sep 12 2007 Committing using the keyboard in TortoiseSVN Sep 12 2007 Misusing fluent interfaces Sep 12 2007 Refactoring your life? Sep 06 2007 Opening a VS item’s directory in Explorer Sep 04 2007 UltraExplorer, a Windows Explorer alternative Sep 04 2007 Get the name of the method that threw an exception Aug 31 2007 Groups post on writing a CSV generator using TDD Aug 28 2007 Example of deploying web apps using WiX Aug 22 2007 Example of deploying web apps using MSBuild Aug 21 2007 First impressions of Vista Aug 20 2007 Handy list of open source software in C# Aug 20 2007 Automating releases with WiX and MSBuild Aug 17 2007 dpreview.com: Digital camera reviews and news Aug 17 2007 LINQ enumeration gotcha Aug 17 2007 Web Deployment Projects Aug 16 2007 Currying (not vindaloo) Aug 16 2007 MSBuild task library links Aug 14 2007 Excluding your own visits from Analytics reports Aug 03 2007 Moving on… to programmier pastures Jul 31 2007 JavaScript essentials for ASP.NET developers Jul 20 2007 Note to self: Learn Go Jul 20 2007 The impact of testing on coding conventions Jul 18 2007 Firefox keyword searches Jul 17 2007 Map, Filter, and Reduce in .NET Jul 14 2007 Scott Adams’ guide to writing funny Jul 14 2007 10 minutes to run every Windows app on your Ubuntu desktop Jul 13 2007 Data Access Guidance Package - DAL generation Jul 12 2007 Test driving JavaScript code Jul 12 2007 Privacy Policy Jul 12 2007 Matching a business entity without using the address book Jul 11 2007 Anders NorĂ¥s on DSLs with C# Jul 11 2007 Sending an email to a group with a SharePoint workflow Jul 10 2007 XSD for .ACTIONS file Intellisense Jul 10 2007 SharePoint DLLs (WSS 3.0 / MOSS 2007) Jul 10 2007 SharePoint aware workflow activities Jul 10 2007 Agile chopping or mindless hacking? Jul 09 2007 The joy of pessimism Jul 09 2007 Becoming a better developer Jul 09 2007 Custom SharePoint Designer Actions using VS 2005 Jul 09 2007 Jeremy’s technical reading list Jul 05 2007 The Blogger WorkShop: Creating a Blogger Template Jul 05 2007 June CTP of the Entity Framework Jul 04 2007 Creating a photo album for printing Jul 03 2007 Rob Conery on using LINQ to query just about anything Jul 03 2007 Porting ASP.NET Applications to Mono Jul 03 2007 Emailing form links using SharePoint Designer Jul 02 2007 Business Data Catalog blog post series by Sahil Malik Jun 27 2007 A workbook for practicing test-driven design Jun 27 2007 MVP and SharePoint Web Parts Jun 20 2007 The Ivory Tower of effective development practices Jun 18 2007 Domain Centric Validation with the Notification Pattern Jun 14 2007 NUnit 2.4+ constraint-based assertion syntax Jun 13 2007 Persistence ignorance and TDD with LINQ to SQL Jun 11 2007 Windows Live Writer (Beta 2) Jun 07 2007 Explaining good code to non-geeks Jun 05 2007 Predictions of a static universe Jun 01 2007 TDD and unit testing misconceptions May 30 2007 Launchy application launcher May 24 2007 ScribeSonic: Example of a blog written with SubSonic May 19 2007 Environment Variables for Windows XP May 09 2007 RAD or Refactor? May 08 2007 TaskSwitchXP - Alt-Tab replacement for Windows XP May 07 2007 ADO.NET Entity Framework dropped from “Orcas”/.NET 3.5 Apr 30 2007 The Way of Testivus Apr 27 2007 A re-introduction to JavaScript Apr 26 2007 Information Schema views in SQL Server 2005 Apr 23 2007 How many lines of C# does it take to change a light bulb? Apr 23 2007 SubSonic 2.0 webcast on sonic.exe command line tool Apr 18 2007 Execution context for SPs using dynamic SQL in SQL Server 2005 Apr 18 2007 WinMerge Apr 17 2007 Considering a View’s Get/Set Roles with MVP Apr 16 2007 Design Patterns in ASP.NET 2.0 Apr 16 2007 Hibernate Best Practices with ASP.NET on CodeProject.com Apr 15 2007 Hotfix Patch for ASP.NET Compilation Issues Apr 12 2007 Example of querying collections in C# 2.0 and 3.0 with LINQ Apr 11 2007 Converting values for a DataColumn to an Array Apr 10 2007 Ray Tracing in C# 3.0 Apr 10 2007 My favourite Firefox add-ons Apr 10 2007 IIS 7 overview Apr 04 2007 iTunes on-screen display for Windows Apr 03 2007 The Humble Dialog approach to MVC Apr 03 2007 Knights of the Round Table Mar 31 2007 Enterprise Library for .NET Framework 2.0 Mar 30 2007 Agile is soooo 2005… Mar 29 2007 SubSonic - instant data access layer Mar 28 2007 Lessons from professional life Mar 23 2007 NHibernate Plugin for Visual Studio 2005 Mar 21 2007 Linq for Entities: MVP impressions from MVP Summit 2007 Mar 20 2007 101 LINQ Samples Mar 19 2007 Blog series on building an object-relational layer using TDD Mar 19 2007 Linq for NHibernate Mar 17 2007 Application launchers Mar 16 2007 Removing chrome from SharePoint page Mar 16 2007 Office Ergonomics - Ergonomic Setup Tips Mar 15 2007 More MVP with TDD goodness Mar 09 2007 Tool to remove noise from images (and other processing) Mar 06 2007 Javascript Closures article Mar 04 2007 MonoRail and the Castle Project Feb 23 2007 Free online book: Essential Skills for Agile Development Feb 21 2007 Walkthrough of writing a Model View Presenter in ASP.NET Feb 21 2007 XP resources at xp123.com Feb 15 2007 Learning GTK+ 2.0 Feb 08 2007 AutoHotkey Feb 05 2007 .NET Cheat Sheets Jan 30 2007 AnkhSVN 1.0 released Jan 24 2007 ASP.NET AJAX 1.0 released Jan 24 2007 Learning from newbie TDD mistakes Jan 19 2007 Version Tolerant Serialisation in .NET Jan 19 2007 Getting the default value of some value type Jan 19 2007 Writing MS AJAX compatible custom controls Jan 18 2007 Generic method type inference in C# Jan 17 2007 Custom Web Controls Demystified - Composite controls Jan 17 2007 VS.NET fonts and colours Jan 16 2007 Everything you ever wanted to know about ViewState and more Jan 16 2007 Why Wii? Jan 11 2007 Jeremy Miller on Orthogonal Code Jan 10 2007 More Patterns: Enterprise Integration Patterns website Jan 10 2007 Covering drop down elements in IE Jan 04 2007 MartinFowler.com - articles and pattern catalogues Jan 04 2007 Refactoring Catalogue Jan 04 2007 Testing with Mocks and Stubs Jan 04 2007 Microsoft’s XML Notepad 2007 Jan 04 2007 2006 Ubuntu packages for current software versions - getdeb.net Dec 31 2006 Creating Debian Linux Packages Dec 31 2006 The Case Against XP Dec 27 2006 Namespaces and JavaScript Dec 21 2006 IBM DevWorks introduction to JS language features Dec 21 2006 Model View Presenter pattern for ASP.NET Dec 19 2006 Image viewers on Linux Dec 18 2006 ASP.NET AJAX RC1 released Dec 15 2006 Private class members in Javascript Dec 14 2006 Quirksmode.org: Reference site for JS and CSS Dec 14 2006 Trac: minimalistic project site Dec 14 2006 NHibernate: Object persistance for .NET Dec 13 2006 Label cloud in Blogger Beta Dec 13 2006 ASP.NET AJAX Beta 2: Changes from CTP Dec 13 2006 Resharper 2.5 released Dec 13 2006 Microsoft’s site for official VS.NET extensions (released and CTP) Dec 13 2006 LINQ, Lambda expressions and maths Dec 13 2006 Sandcastle: .NET documentation generation ala NDoc Dec 13 2006 SQL Prompt final beta Dec 13 2006 Sysinternals and Process Explorer Dec 13 2006 Anders Hejlsberg presentation on C# 3.0 language enhancements Dec 12 2006 NMVP: Model View Presenter for .NET Dec 12 2006 Implementing Continuous Integration: With and Without Team System Dec 12 2006 First post Dec 12 2006