Metro style for ILSpy


First, there was ILDASM, and it was good. Then there was Anakrino, and it was better. Then, there was Reflector and it seemed as if the world of .NET class browsing and decompilation had reached its zenith. From time to time I found something new to surprise and delight me. Reflector was fast, useful and showed a depth of features and progressive refinement that meant I never had to think twice about what tool to use for a .NET class browser (like the one in visual studio? You’ve got to be kidding!) Then red-gate bought reflector from Lutz (the original author) and I was a little un-easy. Red-Gate were (and are?) well regarded in the SQL Server tools space, and their head honcho Neil Davidson was often doing good things in the microISV community. Bugs started to creep in (like one time it perpetually wanted to update, and then crashed on update), and it tried to up-sell me to the ‘Pro’ version, with features I didn’t really think I needed. Then on February 2nd 2011 Red-Gate announced that reflector would no-longer be free. The developer reaction was as swift as it was vehement. To paraphrase a friend of mine (who was talking about timesheets at the time I think) it wasn’t so much the money that he objected to, but the lying. Some people say you can’t put a price on trust, but red-gate did – $35. Red-Gate had said quite clearly when they took over the reigns of reflector that they intended to continue to make it available for free, and had reneged on that commitment. There were some dissenting voices that pointed out that I spend more than $35 on coffee some days (which is completely untrue, the most I’ve ever spent on coffee in one day has got to be only about $30…totally fucking different).

I, like many other developers started canvassing around for a replacement to reflector. In the ensuing weeks a number of free and commercial applications were announced looking to step into the power vacuum left by reflector, many of them based on the excellent work done by the MONO project with their Cecil decompiler.

In no particular order we have:

and many others

Shortly afterwards red-gate reversed some of their decisions regarding reflector, but the damage had been done, the cat was out of the bag, wheels had been set in motion, and a million other clichés that you’d normally avoid like the plague meant that the whole house of cards was ready to fall like dominoes, or something like that.

ILSpy Goes Metro

In case you hadn’t guessed from the title I chose ILSpy, figuring that I was less likely to find myself in the same predicament I currently found myself in if I chose something that I could hack on myself. ILSpy works much like reflector does, and I was soon browsing inheritance hierarchies with glee, except for a few small UI warts that kind of annoyed me with ILSpy. No matter, I thought, I have the source code, I know C# and have some familiarity with WPF. I’m sure I can manage.

This is what the main-line official build of ILSpy looks like


One thing led to another, and this is now what my custom build of ILSpy looks like.


The great thing about ILSpy is, it is really easy to hack on. The other developers (which I’ve never spoken to or communicated with, so I’m basing this purely on the source code) seem more interested in building real features than adding UI accoutrements and pushing pixels (which is really my strong suit). Special thanks must go out to Paul Jenkins and his MahApps.Metro control templates (I see now that I should upgrade to 0.3). Thanks also to Derek Orr and Mike Wise for some UI suggestions, some of which I haven’t had time to implement yet. The Metro Design Language may not be to everyone’s tastes, and to those people I say “sod off”.

Pingback from


Chemistry is Hard, Let's get Coffee

I know a thing or two about Microsoft, and have a complete and total physiological addiction to passing acquaintance with coffee. I was doppio disappointed when I spotted this item in the Microsoft store.


I’m prepared to look past the fact that the picture has been strangely taken with a weird reflection that makes the cup look striped when it is not, but I’m not prepared to forgive the fact that they got the molecular structure of caffeine wrong on the cup. Or is this part of an elaborate biochemical joke? The title of the item in the company store is “Caffeine Coffee Cup 11oz Chocolate” (emphasis added). Apart from the missing nitrogen (which could just be a syntax thing – my organic chemistry is a little rusty) this looks like Theobromine, the delightful xanthine alkaloid found in…chocolate. Either way they should change the advertising copy, which clearly says “the molecular formula for caffeine on the other”.


Helen Emerson
Nerd :)
18/10/2011 9:42:53 PM
Mateusz Loskot
You may consider submitting a bug reporting to


On the danger of doing things when you don’t understand why–No ‘Best Practices’.

I’m a firm believer in the idea that there are no best practices in software development. There are practices that are known to be good under certain circumstances. Sometimes those circumstances are near-universal (or at least you think they are), but context is king and when the context changes maybe that practice you were touting as ‘best’ doesn’t look so crash hot anymore. Rather than just spouting ‘best practice’ it is much more important to understand the pros and cons of a particular approach, and WHY it might be considered a good practice. When you do something without understanding the rationale for doing it you’re liable to look silly when circumstances change, or if you work in the medical field you’re likely to put someone’s life at risk. I was reminded recently of the importance of knowing WHY something is being done by a story I heard about a family friend.


This family friend is as tough as old boots. He’s a veteran of the Second World War. Now in his mid eighties his body is wearing down and he suffers from a number of health problems, the worst of which is (or was) intense crushing pain in his lower legs caused by peripheral arterial disease. He described the pain as like having your lower legs put in a vise. Although he underwent a number of treatments including Aspirin (commonly given to patients in low dosages to prevent heart attacks, strokes and formation of blood clots such as Deep Vein Thrombosis or DVT) the pain was so intense doctors decided to take the drastic measure of amputation. The operation was a success, but a short time later he suffered an unrelated injury – intestinal bleeding which forced him back to hospital. While in hospital the staff put him back on….Aspirin, because that is what he’d been previously prescribed for the pain in his lower legs. Never mind that he didn’t have any pain in his lower legs anymore, or any lower legs at all. And never mind that Aspirin is exactly the thing you don’t want to be taking if you’re suffering from internal bleeding because of its antiplatelet effect (in layman’s terms they prevent your blood clotting). He suffered more serious internal bleeding and nearly died.

For my family friend the context had changed – the Aspirin which had previously been a ‘best practice’ for treating peripheral arterial disease was now actively harmful. The hospital staff didn’t understand why Aspirin had been prescribed in the first place, and didn’t think through the consequences of resuming taking Aspirin again given the changed context. Next time you hear of a ‘best practice’ ask yourself what assumptions about the context are implied. Are these assumptions valid? What things would need to change for this practice to become dangerous or harmful instead of beneficial?


Increased Presentation Impact with BigNote

Leon Bambrick and I recently came up with an idea for a tool to use during presentations  – essentially a big floating textbox that takes up as much room as possible on the screen. We also gave it a name – BigNote. The idea with BigNote is that instead of switching between on-screen subject matter (like visual studio, a web site or whatever) into PowerPoint and back you just ‘live annotate’ what is going on screen. This is similar in spirit to other tools like ZoomIt, which allows you to draw shapes over the top of things on the screen, but with the focus on text rather than images. A tool like this obviously isn’t going to suit every presenter, or every style of presentation, but since it was a really simple idea I went ahead and built it. I built it in WPF, and the first version was about 5 lines of non-generated code. After a few refinements like a global keyboard hook (so you can bring focus back to BigNote) and an animating viewbox to animate the re-sizing of the text. Here is a video of BigNote in action.

BigNote In Action


First Check-in Comments from Popular Open-Source Projects

Some time ago a former colleague of mine tweeted ‘if your first check-in comment is something like “initial check-in” you’re doing it wrong’. To which my immediate reply was that I had been doing it wrong repeatedly since I personally have no problem with ‘initial check-in’ and had used it as a comment multiple times. I wish I could post you a link to the tweet but twitter’s search…sucks. This got me wondering what ‘good’ first check-in comments looks like. Thanks to the wonders of publicly hosted revision control systems I started looking at the initial check-in comments of some of what I considered the more well-known pieces of open-source software. Did they know they were destined for greatness from the outset?  Here’s the list I came up with, with some commentary where applicable. If there are any projects with first check-in comments that are worth adding (or there is a better source than the one I’ve cited) leave me a comment and I’ll fix it up. The ‘Go’ one is probably the most interesting.


Project Check-In Comment Notes
Knockout.js Initialising  
Ruby Initial Revision Looks like Ruby was migrated from CVS to SVN so I can’t be sure if this is the ‘original’ commit message.
OMQ initial commit Judging by the # of files this might be from a different revision control system, or earlier branch.
Hibernate initial upload There are some earlier revisions starting here that look to have come from CVS.
Iron Python this is a test  
Postgres Postgres95 1.01 Distribution - Virgin Sources Obviously migrating from a previous codebase, with 868 files changed.
FreeBSD Initial import, 0.1 + pk 0.2.4-B1 According to their ‘history’ page FreeBSD was an outgrowth of 386BSD, and started in 1993, so this looks like the real deal.
node.js add dependencies  
Orchard Populating initial tree  
NuGet Initial commit  
TightVNC Initial revision Migrated from CVS
Go hello, world

This is a particularly weird one….according to the Go repo this is from 1972. The first couple of commits from this page seem to chronicle some of the steps in the evolution of C (presumably culminating in ‘Go’) with ‘commits’ in ‘74, and 1988. Either that or Brian Kernighan has a really good backup strategy.

Update - Jason Sirota tracked down this wikipedia entry that explains more of the history behind this check-in. Pretty much what we expected B -> C -> ANSI C -> GO

SQLite ? I really like SQLite, but their funky fossil revision control system only shows me the 20 most recent commits.
Apache initial check-in to set up Apache Commons This is the oldest commit in their SVN repository, but apache is ~8 years older than this, so presumably they didn’t keep history when they ported.
Ruby on Rails Initial Always the minimalist, wasn’t he.
Mono Initial revision Wow,  mono is 10 years old.
jQuery Initial Import The history of jQuery goes back a little further than this early 2006 check-in, so presumably this was a migration from SVN.

Add back links from file revisions to changeset revisions
Add simple transaction support
Add hg verify
Improve caching in revlog
Fix a bunch of bugs
Self-hosting now that the metadata is close to finalized

Their first SELF HOSTED check-in
Python Initial revision From August 1990.
CoffeeScript Unfancy JavaScript  

fixed compiler warnings, changed some gints to gbooleans
cleaned up namespace and documentation
updated libgimp documentation

GIMP is a little bit older than this check-in from 1997. This looks like around the time it moved to being a GNU project. Strangely almost a year later there is one labelled ‘initial revision
»–rapid customization resource

I just put the finishing touches on the CSS for my new site, a rapid customization resource for windows. I want to put some effort over the next couple of weeks into further refining the customizations that are available. Thanks to Rhys and Leon for testing this out for me, as well as a few co-workers who inadvertently tested it also. Also thanks to Craig for his vote of confidence, and helping fix some typos.



Dean Gartley
Great stuff, : ).
11/03/2011 8:18:20 PM


Test Post on EC2

Lets see if my new blog running on EC2 is working correctly? »