Special place

That moment when you make a commit to the repository of the culmination of several days worth of grinding on a problem. This is me.

The extra special sauce being that it is one of the cornerstone modules so not only do I get to watch it build before I go home, I get to watch more or less the entire modular ecosystem build.

Tomorrow is integration day. I don’t think my heart can stand up to doing that tonight with no one around to help me support it.

Lessons learned

Learning lessons all day today it seems. Pretty sure I’ve learned these in the past…so obviously I’m not doing as well as I thought.

  1. When you write an MSI custom action that depends on stuff being there, make sure your custom action conditions are such that it doesn’t fire on an uninstall operation.
  2. Somewhat related: Don’t do your installer development testing on your workstation. It’s pretty much exactly what a throw-away virtual machine is for.

So here I am, trying to use MSIZap to clean up my workstation because I can’t uninstall a damn application.

[1] http://msdn.microsoft.com/en-us/library/aa370523%28v=vs.85%29.aspx

A two-fer

A banner day for overhearing in the cube farm:

  1. [That guy] must get offended at the very idea of a functioning system

  2. In re the Winter Classic

    Next year they need to go the next step and play that on an actual pond

I think watching two NHL teams battle it out that way would probably be transcendent. No boards and no bleachers. Just two teams, an open pond, and about a billion television cameras.

Funner than it looks

A thing I’m working on is supposed to interact with a Scheduled Task [1] if it exists. Instead of writing out my own parser for this backwater of the Windows operating system I found something lying about at CodePlex [2]. As far as documentation goes, this one is pretty decent [3]…for a CodePlex project. Then again, that bar is pretty low.

So this afternoon has been brought to you by the method Console.WriteLine()

Don’t know what a thing does? Console.WriteLine( THING ) is great. If it’s a string, it’ll tell you what it represents. If it is something else, it’ll give you a clue as to how that method/object reference is employed. It’s nowhere near as cool or useful as Python's dir() [4] which is what I was really jonesing for this afternoon. Still, half an hour of iterating over Console.WriteLine( THING ), compile, run test executable made quick work of finding a solution.

Eventually I found Microsoft.Win32.TaskScheduler.Task.Definition.XmlText and this all the bait I need to make this an XML-based solution. Why use an object wrapper with moderately unhelpful documentation when you can just do a simple XPath operation? Pretty sure about half of the solutions I come up with eventually dump into XML and then leverage XPath. It is the very best hammer because it can turn virtually anything into a nail.

[1] http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614%28v=vs.85%29.aspx
[2] http://taskscheduler.codeplex.com/
[3] http://taskscheduler.codeplex.com/documentation
[4] https://docs.python.org/3/library/functions.html?highlight=dir#dir

Therapeutic

My first stint of four weeks between INR readings turned out to be flawless. Despite my inconsistent diet and periodic consumption of alcohol my levels have stayed within the therapeutic range ever since the Great Blood Clot and Pulmonary Embolism Fest of 2014.

Best news: I get another four week reprieve before visiting the bloodsuckers again.

Bonus: I managed to remember to fast until the lunch hour so finally got the ol’ lipids checked too.