What I work on: Azure Monitor Workbooks

The last time i posted a “what i work on” was almost exactly 2 years ago.  And you know what?  I’m working on the same thing: workbooks!  but Workbooks has changed a ton since that last post.

Two years later…so much has changed!

Wait, first things first: what is “workbooks”?

a workbook

A workbook is a canvas.  The author can put all kinds of things in it that query data from various Azure data sources, present that data in interesting ways, arrange the layout to their liking, and configure how users can interact with them.

As users become more familiar with their data, the query languages, they can copy the workbook and customize it their own way and save it.

In general, workbooks is “monitoring focused”, but I like to say: “workbooks can’t do everything, but they can do almost anything.”


One big change is where workbooks appears.

Originally, workbooks was an Application Insights specific feature.  Once the Application Insights and Operational Insights teams merged into just one team, the Log Analytics (now just known as “Logs”, abbreviated here as “LA”) feature of the portal was changed to use the same database backend as Application Insights, and the same data access APIs and services to query it.  That allowed workbooks to query not only data from Application Insights resources, but also LA workspaces.  Log Analytics can collect log and information across almost every kind of Azure resource and from other sources outside of Azure.  So not only can you query AI and LA directly, but if you have Virtual Machines that are sending data to LA, you can also query the logs for that VM from a workbook.  Then we added other data sources than just AI, and Log Analytics: Azure Alerts, Azure Resource Graph, health information, arbitrary JSON blocks, (and coming soon, Azure Data Explorer, things in Microsoft Graph, and arbitrary https endpoints!) Workbooks can also query metrics on Azure resources, so you can see charts or grids of any metrics data your resources are already producing, even if you aren’t using Logs.

So now workbooks appears in the Table of Contents for Azure Monitor, Application Insights, Azure Active Directory, and many other resource types, with more being added while i’m writing this.

Another big change is how workbooks appears.

When i last posted, you always got a default workbook you could customize, but you could also open workbooks you’d saved.  But the initial experience was always a markdown step and a users step.

Today, when you open workbooks, you see a gallery of your most recent saved workbooks, and a set of templates you can use to create your own workbooks:

Figure 1: the workbook gallery

One of the cool things about the gallery is that text with the owl at the bottom:  the templates shown in the gallery (the purple items) come from a public github repo! Workbooks themselves are a JSON file describing the steps and layout, and another file of information about what/where it should show, loc info, etc.  If you look in the repo you can see all kinds of tools and features that are now using workbooks.  The blue items in the gallery are “built in” templates that apply universally that let you quick start a workbook, like the “empty’ template.  the green items are not templates, but are saved instances of workbooks that people have modified and customized and saved.

Another big change is how you interact with things in workbooks.

The last time i posted about workbooks, there wasn’t any interactivity. An author created the workbook where they set up all the steps and settings and filters and stuff, then they saved it.  Others then opened it and looked at it.  If you wanted to change anything, you had to go into edit mode in each step (there were always edit buttons everywhere!), and change the settings in that step, and then click “done editing” on the step to see what it looked like.

Today, a workbook is in “reading mode” or “edit mode”.  In reading mode, most of the toolbar items disappear, the edit buttons disappear, and things are a lot less cluttered.  In edit mode, an author sees all the edit buttons again, and can move things around and add more items.

reading mode edit mode
Figure 2: reading mode Figure 3: edit mode

But probably the most interactive thing in workbooks are parameters. 

Authors can make user configurable settings (we call them parameters), the values of which can be used in parameter markers in queries. This lets users change the behavior of a workbook without having to know how to edit queries or even ever see edit mode.  Authors can use queries to create drop-down controls and text boxes that users can then interact with to further filter data, or change the way things look.  Parameters can be used to control the visibility of sections of the workbook.  Selections in charts and grids can also generate parameters to create “drill in” kinds of experiences.  On time charts, time range brushing can be enabled to further filter other downstream charts to the same time range.

apdex with time brush
Figure 4: time brushing

The addition of parameters has totally changed what workbooks can do.  Originally they were reports with preconfigured settings.  With parameters, they can be full fledged interactive custom tools!

Probably the biggest change, though, is what data you can query, and the visualizations you can use to view that data.The generic query part of workbooks that was in its infancy in the last post is now the majority of the functionality of workbooks. The embedded usage tools were removed entirely, as they can be done as queries that are more customizable.

New data sources were added, and more are on the way.

Along with the data sources, the grid showing results of those queries now have tons of rendering settings to let you visualize the cells of the grids as heat-maps, bar charts, spark lines, timelines, icons, all kinds of things. Instead of grids you can use charts, tiles, graphs, and hive charts.   Individual cells of all of those can link out to other views in Azure, or arbitrary urls, or other workbook templates.

heatmap grid
Figure 5: heatmaps and sparklines


hive plot
Figure 6: hive plot in a workbook.  Super easy to find which VMs have high CPU at a glance

Predicting the past…

In the last post, i had a few bullet points about what might happen in workbooks in the future, and that future is now the past.

…we’re still trying to figure out what other Application Insights things to show inside a workbook, and now to clean up editing so you don’t need 100 gray edit buttons down the side, etc.

We mostly figured that out by removing the usage features and going just with Query, Metrics, Text, Parameters and Links steps in a workbook.  Reading mode makes all the edit buttons go away, so that’s a lot better than it was.  ✔ check!

…we’re trying to figure out a way to export the content and all the charts from the portal as a PDF or something, to make it easy to share…

On the export side, we’re still working with the portal team on some way of enabling exports.  There’s no easy way to do that yet, unfortunately, so no check mark here.On the sharing side, we added an easy way to generate links to saved workbooks, and are working on making it easy to generate direct links to templates, so like a tiny check?.

…Investigating Azure Notebooks (and Jupyter Notebooks) as well…

For a while, we had an experimental feature that could export some kinds of workbooks to a Jupyter/Azure Notebook as python.  But it was limited to only Application Insights, because the AI data access api had an easy way using API keys to retrieve data.  Log Analytics never had that, so any generated notebooks needed to have a lot of extra generated code to do auth.  I’m not entirely sure if there’s any easy way to query azure metrics from python, so those parts of a workbook wouldn’t work either.  Parameters could kindof be exported, but only as variables that someone had type in python to change values.  And generating all the charts and visualizations ended up being double or triple the amount of work, so the export to Jupyter code was all removed.  I haven’t looked at Jupyter lately to see if that’s easier, but we’d really need a python expert to do a bunch of work there to help us out.  And nobody from my team is a python expert.  So that item is like a ✔check and an 〰 uncheck?

Predicting the future…

So what’s next in workbooks?  A ton of stuff:

  • More data sources (like Azure Data Explorer!)
  • more visualizations (like maps!)
  • more customization and style options (Things like layout settings and tabs are already in progress!)
  • more integrations
  • more templates
  • hopefully the things i predicted last time that aren’t finished… Open-mouthed smile

There’s always more to be done in workbooks!

And we need people to do that work!  Do you want to come work on workbooks?

We’re hiring! See this posting: Software Engineer Redmond, Washington, or let me know if you are interested!

Posted in Work Tagged with:

What I work on: Application Insights Workbooks

Recently, I’ve been working on Usage features for Application Insights in the Azure Portal.  Our new usage features are still in preview mode, and include Users, Sessions, Events and Retention tools.  A person would normally use them to look at how users use their websites or app, what they click on, how often they come back, etc.

Users Tool

The users/sessions/events tools are very similar, showing you charts and grids and such about how users are using your website or app.  You can filter and slice and dice and split, and save them and share them and pin them to dashboards and everything.  (when you save them and pin them to the dashboard, they’ll show you a count matching your filters, so it’s possible to make a bunch of tiles on a dashboard that are like daily/weekly/monthly users of subsets of your site/app)


Retention Tool

The retention tool lets you see how many people come back to your app after a certain amount of time.



The newest feature I’ve been working on is called Workbooks, and kind of allows you to merge all of those other tools into a single live “report”.

When you create a new workbook, it has a markdown text area as the first section, and a default users section next, just so there’s something there.  You can add/move/remove/clone and put more markdown wherever you want.  The users/sessions/events/retention charts get you some built in things pretty easily, and for pretty much everything else, you can harness the full power of analytics queries.

Here’s a big huge example one I made from data from one of my windows phone apps (yes, windows phone is still a thing! 🙂 )

It starts with users/events tools split by country or what event was most common, then looks at overall retention (in this case,☹), and retention of people who actually use something in the app (🙂 but ☹ since there’s only 4 of those users), then a chart of users by device type, then since there’s a long tail, an analytics query that gets the full list of those devices and their counts as a table, then fun with an analytics query that predicts the future by using evaluate forecast. Anyone else who could log into Azure and normally see any of this data can now see this beautiful report I’ve made, and it will show them live data, and they can clone it and modify it however they want.

hyperion workbook

Speaking of predicting the future…

There’s more to be done in workbooks.

  • we’re still trying to figure out what other Application Insights things to show inside a workbook, and now to clean up editing so you don’t need 100 gray edit buttons down the side, etc.
  • we’re trying to figure out a way to export the content and all the charts from the portal as a PDF or something, to make it easy to share, either to give to people who don’t have access to the portal, or to keep historical records for extended periods of time.  Right now, there’s no good way to do that in the portal, you have to pretty much do what I did above, composite a bunch of screenshots, and trim out edit buttons. ☹
  • I’ve been investigating Azure Notebooks (and Jupyter Notebooks) as well, and some way of exporting from here to there, so that you can turn a workbook like above into python code and /or do even more stuff there.

If you use Application Insights, try out workbooks (and all the other usage features, there are even more coming all the time, so you might find things that aren’t talked about here!), and if you have any feedback, drop me a line, either sending me email directly or by using the feedback tool in the Azure portal!

Posted in Work Tagged with:

PKHunter Postmortem

After a long run, Asheron’s call has finally shut down for good. As such, I’ve also shut down the data processing for the 2 related site’s I’ve run for ~15 years:  TrophyHunter and PKHunter.  Here’s a post about statistics, info, and details about PKHunter.  At some point i might do a similar post about TrophyHunter.  There’s a little less stats involved there, but the final kill map looks a lot more like Dereth than the PK-only kill map Smile

Some stats

First processed update 10/20/2002 10:01:02 pm

First tracked kill: 10/18/2002 12:04 am Shrek-Pk killed Sigma Cubed (a test character I had on DT)

Last processed update 1/31/2017 10:00am

Last tracked kill: Elder Slug killed Plazma Infuzion on Darktide at 9:02 am on 1/31/2017

Total service time: 5218.5 days = 14 years, 3 months, 12 days, 12 hours

Downtime between eras: 565.66 days = ~1 year, 6 months, 16 hours

Active service time: 4652.84 days = ~12 years, 8 months, 12 days, 4 hours

Total submissions by users: 3,121,839

PKHunter had a very active first 3 years. Incoming data almost doubling each year.  Then?  World of Warcraft, and a delayed expansion (which broke 3rd party tools) decimated the player base.

submitted player kills

See that big dropoff starting after August of 2004? That’s when a lot of people seemed to get into World of Warcraft betas. WoW officially released in November of 2004.

Legacy PKHunter Era

The original plugin (C++) until the “Throne of Destiny” update in July 2005. Originally, PKHunter was envisioned as a “ladder” system, like in chess. In order to move up the ladder, you have to kill someone above you on the ladder. This didn’t work very well because of how AC tracks kills. One person might get the kill “shot”, but someone else might have done the majority of the damage and has “looting rights” to the corpse.

First tracked kill: 10/18/2002 12:04am Shrek-Pk killed Sigma Cubed (a test character I had on DT)

Last legacy kill (2): Mage of Cruor killed Heltik and Spiritual Frenzy II killed Lamir at 1:04 am on 7/18/2005.

After the ToD update occurred, the plugin system that PKHunter (and all the other plugins used) called Decal, was broken and unavailable for nearly a year. Even after it was available it took me a while to learn C# (which was relatively new at the time) and convert the plugin to the old C++ plugin to the new version of Decal.

legacy player kills

Modern PKHunter Era

The 2.0 plugin (C#) released after the ToD update was released on 2/3/2007. The scoring First modern kill: 2/3/2007 ~5:07 pm. In the new system, killshots were tracked separately from the kills according to looting rights on the corpse. A killshot alone was worth 1 point, looting rights worth 5. so you could get 6 total for a kill. The 2.0 plugin also recorded monarchy+patron information, location of kills, and kept track of who witnessed the kill. (everyone who submitted the kill), where the original one only kept the record of “x killed y” but didn’t track who submitted that. The website was updated to be able to show kills on a map. I stopped actively playing AC, and basically just kept the site running, never actually finishing a lot of the “todo” things that still show up on the website.

First tracked kill: Magic-Tcm killed Eggburt of holtberg at 5:07 pm on 2/3/2007.

Last processed kill: Elder Slug killed Plazma Infuzion on Darktide at 9:02 am on 1/31/2017

modern player kills

Character stats

PKHunter has a record of every kill that was witnessed by anyone running the plugin while playing. Because the scoring methods were different in the 2 eras, there is a “modern users” and “legacy users” table with statistics:

modern legacy
total characters 243,541 186,224
characters submitting updates 93,435 73,543
% characters submitted at least 1 update 38.4% 39.5%
distinct update sources 14,407 15,203
estimated characters/person 6.5 4.8

64,505 users were seen only in the modern era, and 7188 were only seen in the legacy era, leaving 179,036 characters that were seen over both the legacy and modern eras. That means ~73% of characters who’d played prior to ToD in the legacy era were also seen at some point in the modern era, even though there’s a gap of a year and a half between those eras! AC players were dedicated!

Interestingly, it appears that in both eras, nearly 40% of tracked characters were using the plugin at some time and submitted at least one update. By tracking submitted updates, it that most players were submitting data for 5-6 characters across servers.

tracked characters

The drop in users was a bugfix and cleanup of duplicated users that had slowly occurred over the lifetime of the service, see below.

modern legacy
total kills 508,197 3,334,239
total suicides 70,776 65,241
kills by “suicide” 2,372
suicide rate 14.4% 2.0%
total witnesses 669,224
average # witnesses 1.3
most witnesses of a single kill 38
suspect kills 889

Even though there were eventually more players tracked in the modern era, the legacy era players were a lot more active. There were 3.3 million kills tracked in that 3 year period, compared to 500k kills of the last nearly 10 years!

The suicide rate seems to be a lot higher in the modern era. This might be because of the kill/killshot distinction? Not sure. Strangely, it wasn’t until relatively recently that I realized that while I was tracking suicides from killshots, it appears that a player named suicide appears as a killer as well, as the “killer” that got kill credit as well, but wasn’t properly filtered out by server processing. On Darktide, the “suicide” character on that server ended up being the #17 overall rated player, with a lifetime perfect 1758-0 kill/death ratio.

In the modern era, most kills were submitted by more than one person, with an average of 1.3 witnesses for every kill. In many cases, this is probably from both the killer and victim submitting information.

The most witnessed kill was submitted by 38 people, when Rawrsticks killed Biffard R Nasty on 2/8/2007 on Leafcull.

Of all the data submitted, there were only 889 “suspect” kills, generally where submitted data had some kind of issue, usually when a player showed up as being killed twice (or more) in a period of time that shouldn’t have been physically possible given the time it takes in AC while a player is “safe” from being killed. I have an unconfirmed suspicion that some of these might have occurred during things like Daylight Savings Time, where that same hour occurs twice, and maybe kills during that time could get really confusing?

tracked kills

I believe that jump in kills in 2009 was a backlog of a couple weeks of unprocessed data due to hardware failures and rebuilding the database?

Patron / Monarchy stats

Asheron’s call had a very unique patron/vassal and monarchy system, where players pledged fealty to a higher level player (their patron) and fed a percentage of their own experience points up to their patron, based on leadership and loyalty skills. The patron player could pledge to another higher level player, creating another vassal:patron pair. This could continue up until someone who had no patron, and that person was the “Monarch” of a tree of players.

Since the modern era plugin collected vassal and monarchy information, with kills, we can see some statistics of that. This information is probably incomplete and possibly inaccurate. People could change patrons, etc, so this is just from some simple queries against the DB that don’t take any of that into account.

Player with most vassals: Drunk Al-Night had 52 vassals with 437 total kills

Player with most effective vassals: Imor had 2 vassals with 5866 kills!

Monarchy with most players (and kills): Ocom had 580 monarchy members with 12026 kills!

The most dangerous place in Dereth

It appears that the most dangerous place for PK players was near a lifestone up by the Empyrean Ice Propylaeum, in the north east corner of Dereth, which isn’t intuitive to me. There are some cottages and mansions nearby, so I’m not sure if that was a thing I never got into, or if the landblock+coordinates there are actually inside a dungeon, so it just shows there on the map. Some of the other hotspots are near starter cities, near Holtburg and Cragstone, which makes a lot of sense to me. Given that there is an amount of deaths shown in the water in the Inner Sea, I have a feeling a lot of those are actually landblocks that represent the inside of dungeons. If I find time, I really want to generate a higher resolution, more accurate version of this map. (or if you want to, let me know!)

most dangerous places

Technical Specs

The original Decal plugin was written in C++. The backend had a website written in PHP, with a mysql database, sitting on top of Apache on Linux, in the early days, making it an old school “LAMP” app for a time. Later on I moved to IIS when I moved from linux to Windows Server, which eventually I migrated all to a VM on Azure instead of running out of my home office or garage. The backend processing was done by an hourly script which invoked processing done in Java. The modern version of the plugin was written in C#, and lived and worked for almost a decade without any updates. Over the years the source was in subversion, then TFS (tfvc). I believe I also tried Perforce, but wasn’t a fan. I’d really wished git would have existed at the early days, but git didn’t show up until 2005, and wasn’t commonly popular until well after that. I moved from subversion to tfvc at some point because I was used to a centralized repo that could be backed up seperately than how I’d been doing subversion and copying repos around. I have many random versions of the code in various forms, but I’m almost positive that I couldn’t build any version of it today if I tried!

At some point (~June 2009) there was a massive hardware failure, which took out the machine hosting the site and the database. I had the code backed up, but had to build a new machine and rebuild the database from a backup. I even sent one of the hard drives off to a disaster recovery company to get what data off of it I could, as it had other things backed up on one that I wanted to save. At another point, an upgrade of PHP (December 2013?) introduced a method into the PHP built in runtime that had the same name as a method I had in code, (which actually did the same thing but subtly differently) that also broke things for several weeks until I figured out what was going on.

Over the 14 years, the service ran on various hardware: a linux box in my home office, then a couple different mini atx or then micro atx machines in my office, then later in the garage once my office became a nursery. For a while, the hardware was in a custom PC I’d built into an old Mac Plus, complete with an LCD screen where the original Mac CRT had been. After overheating / airflow issues, with that, I built a server machine in a standard case, and that lived in the garage until I moved everything to an Azure VM instead. I looked into converting from mysql and php to sql server and asp.net on Azure, but at the time there were limits on sqlazure that would have made it problematic.  That, and i wasn’t actively playing anymore, so even testing any of my changes would have been a problem.

The plugin submitted data regularly while playing, either every 5 minutes (iirc) or when a certain number of kills were seen, or when a user logged out of a server. These submissions were batched up and processed hourly. Unlike the “Trophy Hunter” service kills weren’t processed real time. In the legacy days, since things were a ladder, kills had to be processed in sequence, as killing a very high rated player could dramatically affect your score, so if someone else saw your death, and logged off (submitting that death) before you hit the 5 minute autosubmission of a kill you’d had 4 minutes ago, it could have drastic effects on the ladder. This was one of the reasons I went to a straight up point version in the modern era. Now that there’s no new data being submitted, someone could re-process the data using one of the real ladder algorithms and come up with a final ranking if they really wanted to. Batching things up also generally ensured that any duplicate submissions were processed together.

Random telemetry

In the early days, I had google analytics hooked up for tracking, and hooked up google adwords to try to cover hosting expenses or domain names or something. I believe I got one payout from google when I hit the $100 minimum payment value. I never got anything from google about my account after that payment. I believe at some point they “lost” my payment information and stopped attempting to pay me. At some point I got notification that my account was now “dormant” for too long, so all of the unsent money went to the State of Washington and I have to do work to collect it from them? How convenient, that they couldn’t get a hold of me by any means until that mail. I used google analytics every once in a while just to see usage, but that’s about it.

In late 2013, my group at work got re-orged and retasked with working on Application Insights, Microsoft’s publicly available telemetry solution. Eventually in early 2015 I added Application Insights telemetry to the service and the website using the PHP version of our sdk. Within a few days of doing that, I’d found 2 bugs that had apparently been in the backend processing for probably a decade.

  • One bug (2 characters in a php script) meant that there was a small race condition where a user with the same name could be created twice. After that user existed more than once, the bug ensured that forever after that, whenever that user attempted to use the plug-in, they’d get yet another user with their name created. Worst case, there was one character with 5067 duplicate entries! After fixing the bug, identifying the duplicates and deleting 19653 duplicates, the plugin started working for those 13 people who’d had random failures. This is the dip of users in the chart in Feb of 2015.
  • The second bug was people failing to authenticate, because their user was showing up as named “LoginNotComplete”, either an issue first logging in, or possibly upon logging out and attempting to send a submission? I’m not sure when this started happening, but it was probably some change in the AC client. Once I found it in failure telemetry, I found a way to work around it in most cases.

In Sept of 2015 telemetry also showed me that something was wrong as all submissions dropped to 0. I worked backwards through all my stuff, only to find out it was a massive AC server migration, so nobody could play, so nobody could submit updates.

The end of telemetry. There’s an interesting little uptick of PK activity the last day or so before the shutdown. end of processing

Posted in General Tagged with: ,

MetalCloak “Gold Standard” lift install

For a while, I’d been looking at options for a “small” lift for my jeep.  Nowadays, there are an infinite amount of options, from leveling kits, to suspension lifts, to body lifts, offered by tons of different vendors.  After setting a budget and evaluating all my options, I’d eventually settled on something.  And then a post on wranglerforum.com changed my mind.

MetalCloak adopts the “Gold Standard”

Every once in a while, MetalCloak has done this special package where if you pay with 1 ounce of gold, they’ll sell you a 2.5” – 3.5” lift kit at a pretty good discount and give you free shipping.

So I went on the local hunt for gold, and eventually found a 1oz. gold bar, and shipped it off.  A few days later, the lift was here in all its pieces and parts.  It came in 6 separate boxes delivered by 3 different UPS trucks on the same day.

A few weeks later I finally had time to install it, with the help of “the Garys” from the Northwest Jeepcast podcast.  I went over to Gary’s garage, which they call the “Mechan-hack shack”, where they had all the tools (and knowledge) to do the install.

pieces, parts, and tools before the install.  look how clean the floor is!


Work begins.  the front wheels are off, the front end is up on stands, and a jack to hold the front axel while we start taking things off.  a hilariously small amount of tools is out and on the ground so far…


by here, a bunch of things are out, and we’ve already replaced the brake lines on this side with the new (red) ones.  time to start putting things back together.


control arms comparison.  the new ones are much cleaner, much shinier, much heavier and adjustable.




springs and bumpstops are in, and the shocks are going in.  I swear every picture I got of Gary he looks like he is mediating.  He might be, I’m pretty sure Jeep things are where he finds his Zen.


most of the install was pretty straightforward.  I’d never done anything with brakes or suspension stuff myself before, but once you get things up off the ground and the wheels are off, most of the swapping out of parts is pretty self explanatory.  the only thing that’s really a pain is that on the passenger side there’s part of a plastic piece of trim and the battery compartment that block you from getting tools at the top of where the shock goes.  so that took a little while to dremel out just enough here and there to get everything out of the way enough to make room to get it all in.  The only other issue we had was trying to get the new track bar in.  the big bushings make it hard to just push into place, and lining things up wasn’t cooperating either. first we tried putting the bottom end in, then trying to align the top end, but we just couldn’t get things over far enough to get the bolt in.  so we took it out, started the top bolt, then used ratchet strap across the frame to the axel to pull that end over just enough to get the bolt started.  (I’ve seen some stuff online that the easier way is to actually do this step very last, with the wheels back on and with the full weight of the jeep on the suspension.  then you can rock/push the body of the jeep in the direction you need to go instead of trying to push the axel+suspension hanging up in the air?)


this is one of the few pics I got of the rear.  by this time, I think Gary is contemplating which order to do things.  the instructions have one order, but I’m pretty sure it turns out that if you do the track bar last, there’s a lot more room to get the springs in?  if you do things in the order MetalCloak has in the instructions, then I think there’s the bump stops and the track bar relocation bracket in the way on one side, and bump stops and the track bar in the way on the other side.


All done.  that’s a lot more space between the wheels and the fender than I had before!  all told, when we measured, we’d gained exactly 3.5” of height after the install, everywhere we’d measured.  (I measured from the center of the wheel to the bottom of the fender, and then Gary also suggested measuring from the frame to the ground right behind the front wheel and right in front of the rear wheel.)  We looked at the numbers stamped on the springs and the boxes to see if maybe we’d gotten the 3.5” lift parts instead.  There was also the possibility that it was the 2.5” springs intended for a 4 door JK instead of a 2 door?  The Monday following the install I called MetalCloak, and they told me that the numbers stamped on the springs are the 2.5” parts, that it would settle some, and that there was the possibility that the stock springs had already sagged some from having aftermarket bumpers+winch installed, and that the new springs were just probably handling that weight better.  That’s a good enough explanation for me 🙂

If you want to hear a discussion of some of the MetalCloak parts, and a mini interview with me while we were doing it, you can check out the MetalCloak Game Changer installation episode of the podcast.  (The kit I got isn’t quite the “game changer” kit they have, that comes with an additional set of replacement rear brake lines, and rear upper and lower control arms that the gold standard kit doesn’t come with. but we’d got the names wrong when we did the interview and they did the podcast.)


The one thing we didn’t get to when at the ‘shack was installing the brackets to hold the sway bar end links up out of the way when disconnected. it was something I could do in my garage by myself, and you don’t need to do it until you actually need to disconnect them. So a couple weeks later when I had some free time on a Saturday I decided to do them.

After disconnecting the sway bars, and getting the front wheels off, I started looking for the place to mount the brackets to hold them when disconnected.  in the picture, they show the sway bar tucked way up underneath out of the way.  so I tried to do that, and… it doesn’t go anywhere near that far:


The sway bar would only go up until it got to this pipe sticking through the frame.  When I moved the sway bars back down, I noticed this:

that shouldn't be shiny!

I’m pretty sure that tube sticking through the frame isn’t really supposed to be shiny! So over the last who knows when, apparently my sway bars have gotten up high enough to rub on that pipe, on both sides.  the bracket is intended to go forward of that, on the frame right on the other side of that mount.  without being able to move the sway bar up any higher, there’s literally no place that the sway bar end links will reach where I could mount the bracket.  so out came the dremel multimax and the little angle grinder I have.  on the driver’s side I had to cut off like 1/8” of an inch of the pipe.  on the passenger side, a lot less work, I really only had to grind it down a touch.  a touch of spray paint to cover it up, and then the actual work I intended to do could start. 

installing the brackets just requires drilling a couple holes and installing some self tapping bolts.  all done!


Posted in General Tagged with:

Fun with Spray Paint

In a random ad email from Extreme Terrain, i saw a star grill insert, and had an idea to go with the theme of my jeep. I thought: “We have red and blue spray paint…”


So i ordered one, and busted out the masking tape…


Can you see my silly mistake in masking?  i see saw it as soon as i finished spraying.  You’ll see it in a second when the masking tape is removed… 😐


My garage spray paint booth and heat lamp.


now can you spot the masking problem?  derrrrrrrrp.  i had to mask off the whole thing again just to paint a tiny blue part.  i thought about spraying some blue paint into a paper bowl or something and brushing it on, but i figured that would end up being worse than just painting that part again.


After re-doing part of the blue, and then doing the red, we have the final product, a start that looks (to most people!) like a Captain America shield. i thought about doing another white and red stripe, but it seemed like overkill.


The finished product, on the jeep.  the only “bad” thing is that the winch and bar hide a lot of the shield if your looking straight on.  But that’s ok, i wanted it to be somewhat subtle.

Fun with spray paint part 2

After how well the grill came out, a few months later i realized just how faded the shield on the spare was getting.  the red is almost pink!

So, given how the spray paint worked on the grill, i decided to try to paint the shield as well.  I’m looking for a better (metal) one, because the plastic costume one i have is both faded and cracked in a couple spots. 

masking circles is a pain

Masking circles is a pain.  Masking a really big circle like the silver ring and the center star is a giant pain.

it looks so red

Red goes on.  It looks really red compared to the pink that was there.  I’m not sure it was ever this red, even when i got it new..

needs a coat of clear

all done, masking removed.  now for a few coats of clear that will hopefully protect it some from the elements.  i’m still not sure if this clear coat has any kind of uv protection or not.  we’ll find out real fast.

done painting

the finished product, all good to go.  I was worried that the blue would look really faded after i did the red, but the blue looks pretty much fine. 

before! after!
WP_20151108_17_06_09_Pro_LI back on the jeep
Posted in General Tagged with:

What I (used to) work on: CodeMap debugger integration

Every once in a while, you run into one of those problems while debugging where you just don’t get what’s going on.  you’ve stepped through the debugger 10 times, and you see it happening, but you just don’t know why.

I ran into one of those a few weeks back, while porting one of my apps to windows 10, where sometimes, when you clicked the back button, nothing would happen.  if you clicked it a second time, it went back to the page you were on.  And when this state was occurring, there were some other strange things going on that weren’t quite right.  I’d been stepping through it over and over, and i got to a place where the same breakpoint was getting hit 2 times, with the same stack when i navigated to the page in the first place.  This seemed like a very strange thing.  i couldn’t for the life of me figure out how that was possible. did i find some strange subtle bug in the Win10 UWP framework?  I figured that to be highly unlikely, i was certainly doing something subtle myself.  So i thought, “Hey, self, you used to work on debuggermap, i wonder if there’s something i’m not seeing here..”

So i restarted the app, hit the breakpoint, and pressed “show on codemap”  my stack window was then shown as a graph:

debuggermap before

yes.  that’s the same thing i’ve been looking at the whole time.  the red dot is where the breakpoint is, the green chevron was where my cursor was in a file while i was looking through the stack when i took the screenshot.  i pressed F5 to go again, since i knew i was just going to end up right back here in a second when the debugger hits the breakpoint again, and…:


Waaaaaaaaaaaaaaait a minute!  there’s a triangle here! two different places are calling NavigateTo!  how did i not see this before? i had presumed earlier that it was the same exact stack twice, like i somehow had added a listener twice or something, so the event was occurring twice, or something like that.  i didn’t realize i had two paths through my own code that were doing this. one of those 2 arrows shouldn’t be there at all! the back button was working just fine: going back once went back to another copy of the page, so it just looked like nothing was happening when you pressed back.

Within 5 seconds of the graph updating, i knew exactly what the problem was.  i deleted the one extra call to NavigateTo, and the problem was solved. I’d been banging my head on this for like an hour up to this point, trying to figure out what the repro was, and then staring at the same stack window and code over and over and getting nowhere.

Sometimes you just need to look at the problem a different way!  DebuggerMap for the win!

Posted in General Tagged with:

What I’ve been working on: Open Live Writer

It was announced this morning that what used to be Windows Live Writer has been forked, modified, and open sourced under a MIT license as Open Live Writer.  Prior to Facebook, i used to post a lot more stuff here on my blog, and when i did, i did most of that posting using WLW.  Microsoft stopped actively developing it after the Windows Live Writer 2012 release and most of that team was moved to working on making apps for Windows 8. I still used WLW after that, but slowly over time the plug-ins i used stopped being supported, and it became a little bit harder to use.  And Facebook made it easy to post little things, and life always has a way of finding other things to do. I always mean to post more stuff here, and i probably have 10 or more unfinished drafts either as WLW .wpost files, or saved as drafts in WordPress.

So when there became a push inside Microsoft to see if Windows Live Writer could be open sourced, since Microsoft had no plans on reviving it, I volunteered to help.  I don’t have a ton of free time (kids!), but i still wanted to see what i could do to help.  I didn’t do a lot, and most of what I did commit was deleting massive swaths of obsolete code (one of my favorite things to do! :)) It was really interesting to be on Skype video conference things with internet / Microsoft celebrities like Scott Hanselman and Jon Galloway and Martin Woodward.  Fun fact: Scott Hanselman is king of meta. He’s 3d printing a 3d printer with a 3d printer, while using Open Live Writer to blog about Open Live Writer.  It’s hilarious to hear the 3d printer’s “i’m finished!” song while he’s on a call, and then shows you what fantastic thing just finished printing. 

Open Live Writer is open source on github, and people are 3d printing 3d printers.  Welcome to the future!

Posted in General Tagged with:

Random Review: Deadpool

I randomly got Deadpool for xbox 360 from my gamefly.com queue. I have no idea when I added it, I’m presuming a long time ago since this game was released more than 2 years ago.  But it finally came up to the top of the queue, so I played it.  Went in with low expectations, since it was so old…

It was hilariously awesome…for adults!

My kids love Deadpool in the Lego: Marvel Superheroes game; he has lots of funny animations, and quips like “I’m not dead.  I don’t have a pool.”, and so my children will just say that, for no reason at all while playing.  But there’s no way I would ever let them see me playing this game.  It is brutally violent, has tons of swearing, and lots of sexual innuendos, hence the Mature 17+ rating.  Playing this game made me super excited for the upcoming movie with Ryan Reynolds!

Posted in General Tagged with:

Random Review: Dragon Age: Inquisition

Simply stated: Dragon Age: Inquisition is the best game I’ve played in a long, long time. It was so good, that now that I’ve finished, (twice! After I finished the first time, I loaded a save from several days prior and did several companion quests, finished up some loose ends, and finished the main storyline a different way), I am kindof on a Dragon Age hangover.  I really just haven’t been in the mood to play anything. Since I’m not in the mood to play, I figure I better write about it!

I loved the original, Dragon Age: Origins. It is one of the few games I’d played where I really cared about the decisions I’d made, and in one case, one of the decisions haunted me; I’d been used, and by the time I realized it, it was too late to undo.  After completing the game, I’d started over, hoping to change that decision (and finish on nightmare mode or whatever), but I never finished the second time, there were other games to play.  To this day, I still feel bad about it.

And interestingly, in Dragon Age: Inquisition, I could change that choice.  Well, not in the game, but in a tool they created to let you set up the world, which they call “the keep.”


The Keep is amazing.  If you’ve played the previous 2 Dragon Age games, it can import your world state, bringing in every decision you made in every quest or plot point throughout the games.  It knows which companions you met, if they liked you enough to do their story quests, if you’d romanced anyone, who died, who became king, every little detail.  At Penny Arcade Expo I went to a session where the developers talked about the giant decision network that powered the whole thing, it tracked something like 200+ decision points, of which many had more than one possible outcome.  That makes like 2200+ possible world states, but was much more complicated, because depending on some decisions, entire subsections of the graph was impossible.  After PAX, I signed up for beta access, so I could finally fix that decision I’d made.  And going through the keep was so cool.  It shows you, in beautiful graphics all the decisions, what the choices are, what you’d chosen, and what other things in your world state might not be possible if you made that change.  There were a lot of things that I didn’t remember doing, or things that I never even got to.  There was even a companion I missed completely!  And once I looked at the decision I’d made, that I hated all that time, I realized I couldn’t change it.  I mean technically I could, I just couldn’t go through with it.  While it seemed like a bad decision at the time, as the world has continued on, my decision might have had bad short term repercussions, over the long term, I think it was the better decision.  If you hadn’t played the previous 2 games, the keep lets you make all those decisions as if you had, to customize the starting world the way you want it.  You then use the keep to mark that world state as the one you want to start with in the game.

All of that wall of text up there, and you aren’t even to the game  yet!  When you start a new game, you tell it to import your world state from the keep, and you start making decisions about your new character and this game!

Without giving away any spoilers, there were several characters that were awesome.  Many characters from the previous games return, some playable, some in “advisory” roles.  When you talk to them, you can learn about what happened to them in the time between the previous games, and how your previous choices had affected their lives.  This kind of engrossing story really makes the world feel like your world, and made me care about the decisions I was making.

In DA:I, there was one main choice, do something yourself, without knowing the effects, or let someone else in the party, who has volunteered, do it.  After finishing the main story line, I went back and looked at achievements I’d missed, and one of them is related to that decision.  So I had to find a save from before that point, and work forward again, making the alternate decision, just to get an achievement.  Odd.  But in this (now alternate) version of my universe, I also took the time to finish several other companions’ story quests, because I hadn’t done them in the first play through.  I really wish the character quests had been a little more obvious, there were some where you really had to pay attention to what someone said or did, or go to a specific place and buy something, etc.

All in all I thought it was one of the best RPG’s I’ve played, certainly the best in a long time!

Posted in General Tagged with:

Pretty, Pretty Quiet!

with gripsAlmost a decade ago, I posted my original review of my springfield 1911.  Over the years, little mods have taken place, like different grips, a different magwell, etc.  The newest piece is a modification to the gun to enable an addition.  I replaced the standard barrel with a threaded storm lake barrel, so that I could attach a suppressor!  And yes, silencers are legal!WP_20140920_16_47_59_Pro 1

The silencer here is a SilencerCo Osprey 45, which has a unique profile: it isn’t round like other silencers!  The effectiveness of a suppressor is directly related to the internal volume of the suppressor, which captures the expanding gasses as they escape from the barrel.  In order to maximize the volume, most silencers are cylindrical.  And the bigger the cylinder, in both radius and length, the better it works.  however, with a pistol silencer, you don’t want it to be too long, or it quickly becomes too heavy out there on the end of a pistol.  And you can’t increase the radius of the cylinder too much, or you’ll interfere with the pistol’s sights!  For rifles, neither of these are usually an issue, as overall length isn’t as big of a deal, and most rifles already have sights elevated over the height of the bore for other reasons.  But on a pistol, the only real way to increase the volume is to make the suppressor a shape other than a cylinder.  So the Osprey is an eccentric shape, basically a rectangle with rounded edges.  the flat top edge makes most pistol sights still visible, and because of the design of pistols and the location of recoil guides and springs below the barrel, the bottom edge generally doesn’t interfere with any lights or lasers that might be attached on a pistol’s bottom rail, if you have one.

But if the suppressor isn’t a cylinder, a new problem arises: it isn’t symmetric, you can’t just thread it onto a barrel and have it line up!  With cylindrical cans, you just rotate it until the suppressor stops, and it doesn’t matter which way the suppressor ends up.  But with the osprey, that wouldn’t work.  so there’s a locking cam mechanism. You rotate the osprey on normally until it stops, then unlock the lever, rotate the silencer until it is the right orientation, then lock the lever.  from then on, whenever you take it off and put it back onto the same host, it will line up!

At the range, the osprey definitely adds some weight to the front, but doesn’t make the pistol too front heavy, and the weight out front seems to help a little with muzzle rise.  As with any suppressor, the blowback in your face might be a little surprising, so make sure to wear your safety glasses!  And, again, like any suppressor, it does get hot fast, so remember to bring gloves!  I need to buy an ove-glove or something to put in my range bag!

Posted in General Tagged with:

XBox GamerCard

Recent Flickr