High Friction = Poor Documentation

High Friction development environments (JSON/ARM/PowerShell/VSTS) makes everything harder than needed. Difficulty leads to exhaustion rather than exhaltation. Exhaustion leads to poor or no post-completion documentation. Poor documentation + difficult environments = poor maintenance. Poor maintenance = terminal state.

2018/04/29 12:39 · skysigal


I take that back. I HATE ARM's “Lost While Debugging within Stupid Quotation Marks” approach more than PowerShell. But I still dislike PowerShell. A lot.

2018/03/27 21:50 · skysigal

Powershell and ARM

PowerShell has to be the most god awful language structure I've encountered in 30 years of development.

It even beats ARM on the WTF Scale.

2018/02/27 20:58 · skysigal

Dogs of War

“A frightened dog barks louder”

Src: kim-jong-un (regarding Trump).

2017/10/02 21:32 · skysigal

Code meets Madagascar

class MonkeyPoo extends Exception {}; ... throw new MonkeyPoo();

2016/10/24 11:18


static void Do(Action action, TimeSpan? timeSpan=null){
  if(!timeSpan.HasValue){timeSpan =TimeSpan.FromMilliseconds(100);}
  Task.WaitAll( new []{Task.Run(action)},timeSpan.Value);

2016/10/24 11:18

Version 4 Guids in Javascript


'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);


2016/10/24 11:18

To find Types using FullName, not FQN, nor partial

Just added to XActLib's XAct.Core AppDomain Extensions:

        public static Type GetTypeFromTypeFullName(this AppDomain appDomain, string fullTypeName)
            Dictionary<string, Type> cached = new Dictionary<string, Type>();
            Type result;

            if (cached.TryGetValue(fullTypeName, out result))
                return result;

            result = Type.GetType(fullTypeName) ??
                              .Select(a => a.GetType(fullTypeName))
                              .FirstOrDefault(t => t != null);

            cached[fullTypeName] = result;

            return result;


Note that I might have to add a WeakReference check to see what AppDomain we're talking about. TODO…

2016/10/24 11:18

Coffee And Robots

For example, your domestic robot sees you crawl out of bed in the morning and grind up some brown round things in a very noisy machine and do some complicated thing with steam and hot water and milk and so on, and then you seem to be happy. It should learn that part of the human value function in the morning is having some coffee.


2016/10/24 11:18

Enterprise's Resist Change

The sad truth is that the foundation of traditional enterprise infrastructure centers on resisting change.


2016/10/24 11:18


And that's the other thing: as a human-readable file format, JSON is better than XML, but it's worse than almost everything else. It doesn't even allow comments! It's an accidental format, absent-mindedly unleashed upon the world by a JavaScript developer who worked out a way to turn objects into strings that could be turned back into object using the built-in eval function. And then it turned out you shouldn't do that anyway, because security. The only reason it's become so popular as a configuration format is Node.js, which speaks JSON natively.


2016/10/24 11:18

Why we cache everything

Just a quick reminder that you should cache everything you possibly can.

If you're wondering how much it can help, the following is very informal comparison (YMMV).

  • 1343 Requests/sec to EF
  • 276672 Requests/sec to InMem cache (ie 206x faster).
    • Note:For data that has to be shared across servers, consider IT:AppFabric, which is generally between the two (nearer to the SQL Server side of things from my experience).
2016/10/24 11:18


Just added a half dozen intro pages on IT:AD:SoapUI. Hope it helps someone.

2016/10/24 11:18

My bet has paid off...

Two years ago I was faced with deciding which database access technology to use for Projects:XActLib.

EF? Lightspeed? LLBLGen Pro?

I bet on

  • patterns to allow me to switch later in case my choice was wrong,
  • a pattern that allowed multiple ORMs being used anyway…have to be wary of investing too much in any vendor, after all…
  • but personally, I made a choice of using EF (others can reimplement the contracts for other ORMs).

The reason I chose EF was….slow and stupid as MS was at the time (cf the Silverlight disaster) I was pretty sure they couldn't keep on being that fubar'ed without a) either the company tanking, and/or b) some people getting their pinkslip.

Turns out…EF was the right choice. We're pretty soon going to have a means to write code that works on all MS platforms – server to Phone:

2016/10/24 11:18


The Traceability Perspective of a SAD is to trace deliverables to back business value.

2016/10/24 11:18


Do you remember your first plane trip when you had a window? Do you remember taking off? We’re moving. We’re moving fast. We’re rising. Look at the world, it’s made of… little toy houses and cars. There’s a moment around a couple hundred of vertical feet where the world you knew suddenly becomes small and you realize there is an entire dimension of space right above you that you have not experienced.


2016/10/24 11:18


To deliver external quality (features, performance, reliability) in every release, software needs good internal quality (readability, maintainability, extensibility, testability).

2016/10/24 11:18