Windows Update Hell

I’m becoming a fan of Microsoft less and less. I’ve never been confident that Microsoft has paid a great deal of attention to details in the past, but the ‘new’ Microsoft has thrown any attention to detail out the window.

My current struggle revolves around Windows Update and whatever it is that Microsoft is doing in their new split system (desktop environment vs modern environment). I realize the single codebase, but I’m pretty confident that things that appear to be shared are definitely not shared instances. Windows Update being one where the modern interface’s update system has no clue what the desktop version is doing and vice versa.

It is now becoming all too common for me to get an error when running Windows Update from one interface or the other and then I jump to the other interface and see that it is already installing the updates itself or that it works immediately if I tell it to update things. Why are there two versions of Windows Update anyway? Let us pick a method and stick with it and not have two of everything. I don’t want two ways to access installed printers, run updates, uninstall programs, etc. I certainly don’t want to disparate versions of Internet Explorer running on my system. You can turn a lot of this crap off through group policy, but not everything.

If it’s confusing for an IT department you better believe it is going to be confusing for the end-user.

Windows 10 (1511) breaks VMware Horizon View linked clone pools

After upgrading a Windows 10 master image to build 1511 (November 2015 update) and recomposing a linked clone pool in VMware Horizon View 6.2 to use the build 1511’s snapshot, composition fails with the following error:

View Composer agent initialization state error (22): Failed to mount persistent disk. Please check the parent VM if an existing disk is using the same drive letter. (waited 0 seconds)

Reverting back to the previous build’s snapshot and recomposing provisions the VM as expected and without error. Note that I have not tried to re-install the agent on the build 1511 so it is possible that re-installing the View agent will resolve the issue.

UPDATE: Re-installing the VMware Horizon View agent seems to have resolved the issue. I typically never have an issue with the agent needing to be re-installed and don’t recall running into the issue when going between dev builds. Luckily this appears to be resolved and was an easy fix. Here’s hoping that build 1511 resolves the outstanding issues that we’ve had in testing with a small group of end users.

Todoist – Finally, a GTD app that works for me!

I’ve been on the hunt for a GTD app that works with my routine for years. For someone who hates paper, the best method for me is probably sticky notes…but again, I hate paper so I avoid using that method. I’ve given a lot of apps a great shot at being my go to GTD app, but all have failed. 2Do, Google’s own task manager, Evernote, Apple’s Reminders app, Things, OmniFocus and many more.

In the case of OmniFocus, because of the investment I made to purchase OF2 for the Mac, iPad and iPhone, I REALLY tried hard to make it work. Don’t get me wrong, it is an excellent application, but probably overkill for almost everyone unless your job revolves around project management or being involved in a complex project. I do have complex projects on occasion, but most of the time it is simple one-off tasks that I need to enter into the app quickly and be able to mark it as done quickly, otherwise it gets in the way.

For years I used email as my GTD method. I’m an avid Gmail user and I have all sorts of labels for all kinds of tasks and priorities. I also have my inbox setup where things are sorted according to priority so I see the most important things first. That is, until I met Todoist!

I have no idea how Todoist slipped through the cracks when I was on a GTD buying rampage, but I now have a premium subscription to their service. Since I really enjoyed using Gmail as my GTD but needed additional features, Todoist fit in really well as I can literally open the email, click to add it as a task to Todoist, and then archive the email (can anyone say inbox zero?). At any time I can maximize Todoist, click on the task and the original email opens up. I can even add additional linked emails to the task. I can assign priorities, attach files (even from Google Drive), setup labels, reminders (even via SMS), etc.

Background sync works amazingly well (OmniFocus can’t figure out how to do this for some reason) and the location reminders are spot on and timely! Todoist also has a very in-depth API that was just announced and has an app for almost everything (except for my Pebble watch unfortunately).

GTD apps are like pennies in a wishing pond and everyone’s needs are different, but for me Todoist has won me over. For the first time I feel like my GTD app is actually helping me get things done rather than getting in the way. GTD shouldn’t be added work, it should be seamless with your workflow. Todoist does this for me!

Disabling Google Chrome GPU hardware acceleration in a VM environment

I ran into an issue when setting up a Google Sheet recently. After loading the sheet on one of our VMware Horizon View linked clones with 1 vCPU I noticed artifacts on the spreadsheet that made it unusable. Reloading would give varying results and sometimes it would work properly.

Fast forward in time… adding the argument “-disable-gpu” to the end of the shortcut allowed the spreadsheet to load without error 100% of the time and remain usable.

I hadn’t imagined that Google would be using the GPU so heavily for such a simple thing like a spreadsheet, but in the end it was the pain point.


I’ve been through several major revisions of my original in-house mobile app that I developed for my day job (see original post) and wanted to give an update on the current state of the project.

I count a major revision (not a point release) based on the amount of code changed and aesthetics together. I’ve learned a great deal about employee usage and needs since my original implementation and have also enhanced my ability to create efficient code. Since so much of the application revolves around live data (real-time tracking of stock levels for example), the number of database calls that I can’t cache into memory is rather high. I also feel the need to match the aesthetics to what that employee may be used to when using apps on their own smartphone while retaining usability for this specific application.

The application now has lots of visual cues (e.g. color changes) to alert the user of low stock levels, out of stock items, etc. I also handle extremely large orders (or small orders should the user choose this option for those as well) by allowing the order puller to go into a single item mode. This gives all information that the puller needs for the next item in the queue, allowing them to manually bypass it if needed and come back to it. This way the database queries only pertain to that single item thus making the application perform much faster.

My ultimate goal aside from giving employees what they need for day to day operations has been to make this (mostly) web application look and behave like a native application. I’m pleased with the results and where the current version 6.2 stands…especially when compared to early versions.

2014-10-06 08.47.30 2014-10-06 08.47.20 2014-10-06 08.47.05 2014-10-06 08.46.24 2014-10-06 08.46.07


After having heard so many great things about OmniFocus, I decided to try it out for myself. After moving items from Apple’s Reminders app and from a couple of other apps that I use for GTD (Evernote and Notefile), I started exploring some more advanced use cases for OmniFocus…most notably Mail Drop.

Mail Drop will most definitely change my GTD strategy since I can now setup filters in Gmail, my various Google Apps accounts and IFTTT…but it has a severe limitation. Evernote is awesome in that it allows you to specify things like what notebook something you email your Evernote address should go into. This isn’t so with OmniFocus and a quick look at Omni Group’s forums doesn’t give me much hope that it will be added in the near future. I want to be able to have my prescription ready notices sent to OmniFocus and have the iPhone app automatically remind me the next time I’m around my local drugstore. This should be easy to implement but for some crazy reason it isn’t there.

Another ‘duh’ feature missing is the ability to pull to refresh in their app. in OmniFocus 2 for iPhone, you can pull and choose Sync (not quite pull to refresh, but almost as quick). With OmniFocus 2 for Mac, you can’t do anything in this realm. To force a refresh you need to do a Command+S. Not a big deal, but pull to refresh is becoming an instinct these days.

The sync is a little slow…not the syncing process itself, but the intervals for auto sync. I see no way to increase this interval.

Overall a nice product, but Mail Drop makes this sucker fly. Unfortunately it only lets you fly a few inches off the ground instead of letting you soar.

Using Gmail as a ticketing system

Working in IT, rarely does one email me to say “good job” or to just shoot the breeze. It is *almost* always to report a problem. I have tried traditional IT issue ticketing systems in the past, but users end up emailing anyway. Not resolving the issue just because they didn’t follow protocol isn’t really an option if I want to have a sustaining career with my employer.

For years I have used a method of a single tag/folder (back when we used Microsoft Exchange) for anything that needed follow-up. The issue with that method is everything that needed attention received the same label. If I had a long list of the same label, it was hard to categorize. When we switched to Google for email, I altered the system a little since they eventually allowed adjusting what you view first (priority inbox). I would star any critical/urgent items so they appeared first, followed by anything with the needs attention tag and ultimately followed by everything else.

For 2014 I decided to change up my method for weeding through outstanding issues. Since my inbox is basically a ticketing system, here is how things look:

Gmail GTD tickets method

I have four labels for tickets (Ticket [Urgent], [High], [Normal], and [Low]). All are color coded for how my brain expects to see the criticality. I’ve setup my priority inbox so that urgent labels appear first and foremost, followed by high labels and then everything else. Starring an email now does nothing with regards to my priority inbox which is probably a benefit as I can now use the oddball stars that Google provides (e.g. a question star).

Since I now have a Pebble watch and use the Gmail app on my iPhone, I also have a few filters setup so that emails from certain domains or individuals (or ones containing certain key words) get high importance thus get displayed on my Pebble watch.

I don’t care much for the only read email two or three times a day method. If I did that I would be royally screwed. I find that taking care of an email immediately allows me to work more efficiently and also makes the user happier as their issue is more likely to be resolved immediately.

My brain works like a big queue and I’m constantly re-prioritizing things in my head. What works when I’m in the office doesn’t work for when I’m at home though. I’m constantly on call since I’m in charge of all IT infrastructure and the primary point of contact for all IT related issues. When something goes wrong and I’m not in my office, it is my responsibility to take care of it if it is a high or urgent matter. That method is never a positive for my personal life and I have an *EXTREMELY* hard time switching methods on nights and weekends when things are less likely to go wrong at work.

I have yet to find a work/life balance that allows me to be productive at work but shut off at home. Since I am so connected for the majority of my week, asking to just shut things off simply isn’t in the cards. Oddly enough, I feel that having a Pebble watch has helped with that as I’m less likely to bring out my phone just to check in on something which typically leads to me checking in on other things while I’m at it. Having the info I need at a quick glance/notification on my wrist is the best method I’ve found yet of dealing with a work/life balance.

Using ChromeOS in a mid-sized company

While many Americans believe that the United States has all but stopped manufacturing goods on American soil, I’m charged with modernizing a facility that manufactures a majority of its products right here in North Carolina. Not just one or two products, but literally thousands and thousands of, in our case, automotive parts.

When I first came to the company where I’m currently employed, almost everyone had dumb terminals at their desk or near their workstation. We’re talking UNIX green screen dumb terminals that connected back to a RISC based mainframe. There were only a handful of PC’s, and those were mostly disconnected from any centralized system. Backups were made to ZIP disks (remember those?) and were the responsibility of individual employees.

I have had a tremendous amount of fun over the last 11+ years modernizing our facilities. We have close to half a million square feet of space. This includes administrative areas, but mostly warehouse and manufacturing spaces. You can’t expect to manage such a vast amount of space easily. Newer technologies that are expected from users, such as wi-fi, are among the hardest to get right in a facility this large. Once you do however, a whole new world opens up. What was previously a pipe dream is now possible.

With mobile devices and laptops now available for use company-wide, productivity is set to increase and so are expectations of how employees are allowed to do their jobs. Suddenly supervisors and users alike want the technology upgrades to benefit their departments directly. This means wireless (and real-time) inventory management for example (SEE THIS POST).

How does ChromeOS fit into all of this? A couple of years ago, ChromeOS wouldn’t have gained much traction and certainly not a decade ago. Today our environment is a mixture of devices. Some users have been assigned a mobile only device (order pickers or inventory managers for example) while others are assigned a traditional desktop/laptop running Windows. Within the traditional space, around half of our users are running a virtualized desktop environment (VMware Horizon View). Except for true power users (e.g. CAD applications), I expect to move all users to a virtualized desktop when they’re up for a system refresh.

Then we have a handful of employees that have been assigned a ChromeOS device (either a Chromebook or Chromebox). These are relatively light users and typically users with a specific task that does not require Windows to get the job done. I have a dozen or so applications that I’ve written that interface with our ERP system. This allows users to pull orders, manage inventory, do various types of lookups/reports, etc from a web only interface. Traditionally this applies to mobile users, but I’ve made the designs relatively responsive so they look great on a desktop environment as well.

If I have a choice to pay the Microsoft tax of ~$100/year per user for a VDI license (plus thin client hardware costs, VMware licensing, etc) or get a $250 Chromebook/Chromebox for the life of the device, what would logic tell me to do? This assuming apples are apples and that the user gets the same information either way and can get their job done as efficient (if not better) with the ChromeOS solution.

We’re a Google Apps house, several of our departmental applications live in the cloud per the software vendor’s offerings of a cloud-based solution, and we have the infrastructure to support cloud based devices (e.g. a 100Mbit egress/ingress pipe to the net with backup). Most users in our environment are a little resistant to any change in their workflow, but changes that I make are eventually embraced by most after users allow themselves time to get acquainted with the new.

The biggest obstacle to overcome has always been change (sometimes major) in the eyes of employees. Most have a routine…they wake up, brush their teeth, drive to work, clock-in, do the work that is expected of them, clock-out and go home to relax. Very few are in a position where creativity is key. We manufacture (largely) items that have been made before (we make restoration parts just like the original and in many cases using the same original tooling) and making those items require a certain degree of ‘routine’ mindedness. Those in creative positions, like myself, who are expected to drive have to make it a no brainer for employees to get onboard and ride with me.

For me, the future for IT is decentralized. Sure, there will always be physical infrastructure to some degree, but the support and the manner that users get work done will continue to decentralize. I’m betting my career on this notion and choosing to move our 150 or so employees so that they get on my bus. This, in my mind, is a no brainer move for both employees and the company. The cost savings alone are tremendous as is the ability to support such an infrastructure. Long are the days of having to be an expert at all things (e.g. Microsoft Exchange) as they have been replaced by ‘cloud’ providers like Google. It’s like hiring someone to be on-site with you. Big and small companies alike can understand the benefits of this, you just have to overcome any fear of privacy concerns…but then again, the NSA likely archives everything you and your company do anyway.

Creating a custom company dashboard

This isn’t really going to be a post about HOW to create a custom company dashboard, but just an insight into how I did this for the company I work for.

A couple of years ago we migrated from a UNIX based ERP system that was developed in the early 90’s to something MUCH more modern…one that used SQL meaning I could do anything I wanted with the information inside.

I sort of fell into becoming a programmer, and I’m still not sure I would call myself that. I spend over half of my time ‘programming’ now and every day is a day that I learn something new! Each day I get frustrated as I can’t get something to work…then eventually figure it out, giving me a programmer’s high…then I fall on my face again because I run into a new problem. The cycle loops day in and day out which is pretty much the norm for most non-ninja like programmers.

I am DEFINITELY not a ninja programmer, but I enjoy it and I get things done. I’ve made programs that surprised my employer, my peers and most certainly me. Each app that I build for the company I work for builds on the last. Eventually I ended up with the need group these into an easily viewed format. Lots of my programs are just links on our intranet site…things like ZIP code lookup, customer lookup, shipment tracking, and countless others. What makes up the rest are one’s that are nothing but glorified reports.

I’m a big fan of the paperless office. I’m paperless myself (unless the government requires me to keep a paper copy) and I do my best to force my paperless lifestyle on others. I’m in a position where I can wield my powers in that direction a bit, but I still get lots of opposition. One way to combat this is to make real-time reports available for certain levels of management. This is something that you can’t do with paper, but you can do when you’re viewing it on a screen.

Behold my creation (a never-ending work in progress):


I apologize for so much pixelation…I definitely want to protect my employer (and myself). There are more pages as you can tell by the links in the upper right-hand corner of the page, but I would have to blur out even more of those pages since they’re so data-driven.

90% of what I create is done in PHP. For good or bad, I try to avoid Javascript like the plague. Part of that is my lack of more than basic knowledge of it (I do use it, just sparingly) and part wanting to keep it structured to one language for performance, code-management, whatever.

With the dashboard above, I’m using ajax to poll for updates to certain blocks like orders shipped. You can just keep the dashboard open all day and watch shipments happen or the customer count get larger in real-time. I know ajax isn’t really new and lots of folks use it these days, but you can imagine my excitement (and amazement) when my non-ninja like programming skills made this work like clockwork.

I’m now garnishing some of my older apps with ajax and hope to eventually put it in my mobile inventory and order management system that was my first major creation (and is still my biggest).

I wanted the dashboard to be easy to look at and be color-coded in some manner (hard to tell from the pixelation, but there is a method to the colors). I’m also authenticating against Active Directory which simplifies the authentication process for those who use it. I also have modules grouped into type so that I can set permissions for each user. I have to do this by editing the database directly at the moment, but I’m fine with that since we’re a relatively small company (~150 employees with only a handful using the dashboard above).

The dashboard is completely responsive so you can view it on an smartphone or a 30″ display. I’m using a heavily customized Twitter Bootstrap 2.3 template. Looking back, I probably did a lot of things incorrectly when customizing it that will haunt me later, but for now I’m not worrying about it. I run into that a lot with my ever-evolving skills and have to constantly go back and make things better. I want my creations to be the best they can be. My work is a reflection of me and I want the best content cover to cover that is possible.

I’m definitely proud of this one and think it’s a good reflection of my style. Ultimately the data is what is important here and I think I’ve made a few folks happy by giving them what was not possible with paper and simplifying the process to obtaining the information they want to see the most. I want to give my employer the tools it needs to succeed so that I can ultimately succeed. It’s a good feeling.

Being a technology generalist

I get bored fairly easily, not bored by doing the same repetitive task for hours on end necessarily, but bored with the subject matter in the event that it doesn’t challenge me enough. This has led me to have a LOT of hobbies, or at the very least things that I am ‘into.’

Each year my list of hobbies seem to grow, but I’m not necessarily cultivating my skills on every one of those hobbies. I may play piano for a few months, do a small task one day, and decide that I want to pursue that small task as a hobby instead of piano. I don’t ‘ditch’ the piano hobby necessarily, but I just don’t give it my undivided attention.

The same principals apply to my career. I’m what you call a generalist. I’ve heard pros and cons of being a generalist with some adamant that it is wrong and instead someone would be better off being a specialist. A specialist may be great for some, but I could easily see myself burning out very quickly if I were constrained.

Luckily my current position allows me a tremendous amount of flexibility and I use that to my and my employer’s advantage. When I first took my current position over a decade ago, I saw myself as more of a systems administrator with some back-end networking skills (not the social type). I still have those skills and consider myself very good at them at this point. Group policy, AD administration, VLANs, etc all come fairly easy for me, but there are times when a problem occurs and I’m baffled. In many cases, if I were a specialist in Active Directory (for example), those issues would probably be resolved in a shorter time period. The problem for my employer is that they would need to hire a lot of specialists to get my job done at the end of the day.

The advantage being a generalist is that I almost always get the job done. It may take me 4 hours instead of 30 minutes, but I’m able to apply that across the board thus saving my employer the need for additional payroll expenses. I’m also better equipped to know the interoperability in our infrastructure and learn new technologies a little faster (just a hunch, no research to back that up).

In a large company, a bunch of specialists are likely much better since the workload is high and the company would be hiring several IT employees anyway. For the small (and even mid-size) company, I think a generalist is the way to go. You get an extremely high value from the employee and the work gets done. You may not get there as fast as a drag racer, but you also won’t be limited to driving on a drag strip.