Shell Overlay Icons – The Space Wars

For some of us there has been a quiet war raging inside the Windows registry. The fight is over your shell overlay icons and their priority. I fought back!

The Problem – Shell Overlay Icons Limit

Amazingly, even going into the modern era of Windows 10 in 2017 this is still an issue.  The issue is that many tools want to make use of shell overlay icons but Windows only has 15 “slots”.  It’s safe to assume that many of these tools would use this Windows feature for an “at a glance” method of displaying state.  This also means that a single tool wont just use one icon but many to display various states of files and folders.  For example the little screen shot below shows two shell overlay icons, one is green denoting a committed state and one red highlighting an uncommitted state.

an example showing shell overlay icons

As our ever-more digitally connected world evolves, more and more tools want to make use of this feature.  I’m sure most of you reading this have at least a couple of tools that do this.  However, the list for me goes on and on.  Tools like OneDrive, Dropbox, Git and SVN and … you get the picture.

Given that Windows only uses the top 15 entries in the registry, I have over 30 listed.  Dropbox alone brings 10 to the table, so what are we supposed to do?  As you can see 15 isn’t going to go particularly far given this scenario.  Whilst these shell overlay icons are useful in some scenarios they probably aren’t the best solution to the problem anyway.  There is a good discussion here on the problem from Raymond Chen who works on the Shell Team at Microsoft.

The Space Wars

What the hell am I on about anyway – Space Wars?  Many of these tool vendors, Dropbox I’m looking at you in particular, have started a kind of war inside your registry.  Aside from any chuckling ‘nix users chortling about the fact Windows even has something as insane as a registry we still have to deal with it.  Actually, to be fair a lot of the issues with the registry is down to my fellow developers abusing it but that’s a whole other story for another time.

So, what exactly is the problem?  When you take a registry entry key name like “DropboxExt01”  you’d expect that come before “DropboxExt02”, right?  Well, kinda.  If I rename “DropboxExt02″ to ” DropboxExt02″ (notice the leading space) ” DropboxExt02″ now comes before “DropboxExt01”.  And thus was born the space wars …

Each vendor thinks their tool is the most important, obviously.  So they’ve taken it on themselves to start appending their shell overlay icons key names with ALL THE SPACES, ARRRRR!!  Forcing their entries to top of the tiny selection that Windows will actually bother to use.

I Fought Back!

I’ve lost count of the number of times I’ve fired up regedit in order to fix this insane situation.  Countering a vendors update install that “fixes” that tools entries (read: appends more spaces).  “Why wouldn’t you want our icons to work”.  Well dear Dropbox your tool isn’t the center of my world, in fact I’ve nearly uninstalled you as this is such an annoyance.

Anyway, I’d just had enough yesterday.  So I wrote a tool.  Say hello to Overlay Ninja …

shell overlay icons - overlay ninja

Okay, okay it doesn’t look that great (yet) but I knocked it up in a few hours.  Now I can fix this problem easily in a couple of clicks and without going anywhere near regedit.  The source code for this is all up on my GitHub page.  It’s under GPLv3 so if you make any improvements please do submit a pull request so we can all benefit.

You can set priorities by application or by each individual shell overlay icons entry which adds a lot of flexibility.  I’ve tested this as far as I can and all is working as expected.  As ever, when doing anything in the registry make a backup first.  If you’re reading this and don’t even know what the registry is, what the hell are you doing reading this? 🙂  Go have a read of this before doing anything with the tool.

x86 or x64?

Inside the GitHub repository I’ve also uploaded pre-compiled versions of the tool so users without the required build tools can still use it.  Due to some architecture redirection foibles within the Windows registry you will need to use either the x86 or the x64 version of the tool for it to actually work as expected.  If your OS is 32-bit, use the x86 version, if it’s 64-bit use the x64 version (here’s how to check that).

Happy, er … Ninjaing, Ninjaning?  Ninjining?

Share

Docker + Windows + WordPress + MySQL + PHPMyAdmin = Nirvana

The last time I did any WordPress development was over a year ago so I no longer have PHP and MySQL installed.  I started marching off down my well beaten path.  Download PHP and MySQL, install on my machine, do dev work.  Just after clicking on the MySQL download I suddenly thought, what the hell am I doing?  DOCKER!!!!  I already have Hyper-V installed so all I need is a container and some YUMMY YAML.

I’ve used Docker once before, for around 5 minutes, so I’m a complete noob really.  So going through this process to work it all out for myself was initially extremely painful.  I failed on my first session and ended up having to walk away from it all as I just wasn’t getting it.

I did a lot of reading and Googling and just wasn’t finding the explanation I needed to grok it all properly.  There are lots of explanations of how to get this working but they all seemed to stop at the crucial point for me.  They covered off some yml to get MySQL and WordPress containers up and running but stopped there.  What about persistence?  Or deployment?  Where the hell are all the WordPress files?

Some of them seemed to demo the solution I wanted but seemed to miss out on how they achieved it, or were doing it on different platforms.  I needed a noobs Docker for Dummies walk through.  So I’m going to document what I’ve found out in the hope that it crosses some of the Ts and dots the Is for others getting started.

Docker is The New VM

Don’t get me wrong virtual machines are great and very necessary but they’re also a bit overkill a lot of the time.  This is where Docker comes in.  It still requires virtualisation technology under the hood but it’s now transparent and not directly controlled.

Microsofts own virtualisation technology is Hyper-V.  Docker on Windows uses this by default but it could be used with VirtualBox from Oracle as well.  I’ve had lots of success running virtualised OSes on top of Hyper-V and more or less utter failure using it for Microsofts own emulators, the irony here isn’t lost on me by the way.

Docker is a container technology that wraps up specific services, such as databases, runtime or any other dependencies tasks require.  It lets you run just what you need for a given task without installing these services on the host OS. Fantastic.  Lets dig in.

Installing Docker

Dead easy.  Make sure Hyper-V is installed on your Windows box (Home users you’re out of luck here btw).  Go here, download for your OS and architecture, install.  Done.

The Docker installation is a very painless process.

Check Installation

Once installed., open a command line (Windows + X -> Command Prompt (Admin)) and execute:

docker version

You should then see some version information:

Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:30:30 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:51:55 2017
 OS/Arch:      linux/amd64
 Experimental: true

If you see an error mentioning the daemon, Docker may well still be setting itself up in the background.  You can also create a Docker ID on the Docker site and configure your install to use this ID though I’ve not needed to so far so cannot comments on this aspect.

Next run this:

docker info

This gives you some useful info about your Docker environment, like so:

C:\WINDOWS\system32>docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 17.06.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.36-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.837GiB
Name: moby
ID: 3RBI:664X:UXGI:FB6Y:3K7K:LEMA:BWRR:6SLX:5M7J:P66D:T4XN:L7XH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 15
 Goroutines: 25
 System Time: 2017-08-06T15:06:13.8983022Z
 EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

Settings

It’s probably worth having a look over your Docker settings before doing anything else.  You can right click on the Task Tray Docker icon to see various options, Click on Settings first and have mooch about to see if things are setup as you’d like.

The General tab is pretty self-explanatory and controls how Docker starts up and some security settings.  You can probably leave most of these alone.

The Shared Drives page is also pretty self explanatory.  Using this page you can control which host machine drives are available to services running within containers.  Since I’m using my H drive for my projects I’ve shared this drive with Docker.  This allows processes running inside your Docker containers to access stuff on the host machine drives.

docker shared drives settings

The Advanced tab is worth reviewing.  If you have used Hyper-V before and have customised it’s setup you’ll find that Docker automatically picks up some of these settings.  I’d configured Hyper-V to put VM images on one of my large external drives so Docker will install it’s Moby Linux VM here.

docker advanced settings

I’ve also upped the available RAM Docker can use to 4Gb, my dev box has 24Gb so I’ve plenty to throw at Docker.  Since it’s running on Linux 4Gb RAM should be more than enough to keep things running at a decent speed.

The Network, Proxies and Daemon pages are fine in their default state for now.

My Requirements

I wanted a WordPress development environment with persisted data.  If Docker is restarted or the host machine reboots, I want the state of both stored.  Both in terms of the WordPress state such as themes, plugins and so on and the database.  I’m fast with WordPress development but not that fast!

So Docker should accept all the responsibility of hosting Apache, PHP, MySQL and phpMyAdmin.  Docker also takes care of all the networking and configuration of those services.  The host Windows machine exposes a drive and hosts the WordPress files and MySQL databases on it’s “normal” file system.  These files are stored in directories that are mapped into the containers which allows for simple deployment once the development is complete.

I’m sure in time and as I learn more about Docker I’ll find a lot of this can be handled better.  For now this is where I am in the learning curve and it’s working.

Yummy YAML & Docker Compose

The idea here is to produce a file that tells Docker what you want to do.  It specifies one or more images to use to create one or more containers that provide the services you need.  Images are templates for containers, much in the same way classes can be thought of as templates for objects in an OO sense.  There are some issues here in terms of terminology which I don’t get.  Although we are creating containers, in the .yml files they are called services.  It’s probably my limited knowledge here but it would be clearer to new users if they just stuck to using the same terms.

What I was struggling to understand and configure was volumes.  I’m still a little in the dark to be honest and I’m not entirely sure I have this configured in the best way.  But what I’m showing here is working and it suits the requirements I mentioned above.

Directory Structure

As I showed above I’ve shared the host machines H drive.  Within this drive I have the following directory structure:

H:\js2017
H:\js2017\database
H:\js2017\ui

In the root directory (H:\js2017) I have created a Docker compose YML file called docker-compose.yml.  This is where the magic happens.  The file contains this YAML:

version: '2'
services:
  wordpress:
    depends_on:
      - db
    image: wordpress
    restart: always
    volumes:
      - ./ui:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: p4ssw0rd!
    ports:
      - 8082:80
    networks:
      - back
  db:
    image: mysql
    restart: always
    volumes:
      - ./database:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: p4ssw0rd!
    networks:
      - back
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 8083:80
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: p4ssw0rd!
    networks:
      - back
networks:
  back:

So in this file we have 3 services defined.  We have wordpress, db, phpmyadmin.  We also have a network aliased back (backend).  You could almost certainly take this file, alter the ports if need be and the volume entries and have this up and running pretty quickly.

You can see the references to the database and ui directories in the volumes declaration for the wordpress and db services.  The “.” notation is the relative path from the docker-compose.yml file in the project root directory.  These are mapped by docker to the containers internal file system running on top of Linux within the Docker virtual machine.  So anything written to the /var/www/html directory within the container ends up in the ui directory on the host machine and the same for the /var/lib/mysql directory for the databases.

The port mappings for the services are mapping host machine ports to container ports (hostmachineport:containerport).  So to view the WordPress site, I navigate to localhost:8082 in my host machines browser and this is forwarded to port 80 in the container and serves the page.

Deployment

Going over the deployment of the MySQL database to a live server is beyond the scope of this article but to deploy the WordPress site it’s just a case of taking the contents of the ui directory and uploading it to the public html directory of your web server.

I’m sure there is a better way of managing this but for now with my limited understanding of the finer details of Docker and it’s container model this works for me.  Hopefully this has gotten you started and I’m sure I’ll revisit this again in the not too distant future with some better solutions and tips.

Happy Docking!!

Share

Oh Dear, Borked Your Registry Key Permissions?

I recently got so fed up with DropBox trouncing all over my shell icon overlays that I decided to attempt a drastic action.  Remove the write access to writing to the registry key that handles the shell icon overlays.  Specfically this one:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers

However, I was a tad overzealous with the ticking the deny checkbox and completely borked the access to the key for everything, including the Administrators group.  Even running RegEdit as Administrator wasn’t working.

So, how do you fix this on Windows 10?  SysInternals strikes again.  Pop over here and download PSExec.  Then basically we’re going to launch RegEdit, not as Administrator but as SYSTEM.  To do this CD over to the directory where PSExec is now living on your system and open a command window.  Run this command window as administrator.  The command you want to run is:

psexec -i -d -s c:\windows\regedit.exe

And Voilá, you can see all your stuff again. Yay!

Share
windows 7

Windows 7 Updates Roll-up

There’s really no doubt that Windows 7 updates have become a bit of a nightmare.  Microsoft have been aggressively pushing Windows 10.  Some of the stories that have been rolling around have clearly highlighted this to anyone watching.  Despite all the statements coming from Microsoft themselves they do seem to have employed a form of plausible deniability tactics to increase Windows 10 adoption.  It even drove Steve Gibson to write Never10.

Whilst I can understand getting as many people on the new Windows 10 OS has lots of advantages, for everyone.  It would make my development life easier so in some ways I have a vested interested but you can’t arbitrarily push a new OS on someone.  There are so many dependencies and potential issues in some scenarios it just isn’t smart to force this.  Someone with a fully working system that falls foul to these tactics and then has lots of issues is the worst thing you can do to a customer.

I can’t think of another situation where you can buy something from a company, use it successfully for years, then the company that you originally bought this thing from 5 years later comes to your house and breaks it.  Then, offers to give you the new all singing all dancing replacement “thing” vNext.  Can you imagine the builder who built your new dining room 5 years ago coming back and taking a wall down then offering you Wall V2?

Me neither …

It seems this happened more times that Microsoft would ever admit to.

Windows 7 Updates

With all the goings on Windows 7 Updates seem to be in a bit of a mess.  Installing Windows 7 updates has become a bit ridiculous and takes an incredibly long time.  To be fair we are dealing with 5 years (Windows 7 SP1 was released February 22, 2011) worth of OS updates on the most popular desktop OS on the planet.  In it’s defense Windows update is a complex piece of software doing lots of sophisticated dependency checking and wotnot.

Either way, it’s gotten to the point where applying Windows 7 updates has become really painful.  Urgh …

Good News! Update Roll-up

The Good news in that MS have done a Windows 7 SP1+ update roll-up.  They have taken all the updates applied to Windows 7 since SP1 in 2011 and packaged them up for easier deployment.  To make use of these packages you need to do a bit of manual stuff to a new install.

I was setting up a new VM in Virtual Box using my old Windows 7 license and got fed up with watching the indeterminate “progress bar” (that’s an Oxymoron if ever there was one) I decided to look for this update.

The New Windows 7 Updates Process

It’s actually really easy.  In my case, as I was going from fresh install to latest I did this:

  1. Created VM and installed Windows 7
  2. Applied updates normally to get Windows 7 to SP1
  3. Go and grab KB3020369 and install it
  4. Get the Windows 7 Updates roll-up here (requires IE) and update away!

Alas, even after going through this process the last check for updates process I ran took around 5 hours.

Share

Whitelist SSL Certificates in .NET for Xamarin / MvvmCross Apps

I have a fairly complex development environment for my current project and needed to allow some self-signed certificates to pass through the SSL certificate chaining process when calling from mobile platforms.  Obviously, this is potentially breaking a major security feature and need to be done safely.

In a ‘normal’ MvvmCross or Xamarin.Forms application you want to include as much in the core PCL project as possible for portability and code-sharing.  Unfortunately there is no PCL implementation of the ServicePointManager class, but this is defined in both Xamarin.iOS and Xamarin.Android.  Strangely, another instance where Windows Phone is problematic as this isn’t defined at all in WP.

Given that I have another shared library that hosts my API client that is compiled into a platform specific version I can do this here and have that shared.  Otherwise your best options are including this code in the platform specific projects somewhere in the Setup.cs class for instance.

Bypass Certificate Checking

#if DEBUG
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(
    (sender, certificate, chain, policyErrors) =>
    {
        if (policyErrors == SslPolicyErrors.None)
        {
            return true;
        }

        var certThumprint = string.Join("", certificate.GetCertHash().Select(h => h.ToString("X2")));
        var thumbprint = "<YOUR CERT THUMBPRINT>";
        if (certThumprint == thumbprint)
        {
            return true;
        }

        return false;
    });
#endif
Share

Reinstalling Windows 10 After Upgrade

So, shortly after upgrading my machine to Windows 10 I suffered a major fault with the installation of Windows on the OS SSD drive.  No fault of Windows = User Error … yes … me!

So, I took the opportunity to update the old OCZ Vertex 3 SSD to a Samsung EVO 850 250Gb SSD.  Really nice drive for £77 from PC World.  Surprisingly good price for a high street store as well.  Anyway …

Installed Windows 10 from the DVD I had burned and couldn’t get the OS to activate with the Microsoft Servers.  Very frustrating.  I ended up having several phone calls with Microsoft support (3 or 5 calls were cut off so this took a while).

A short conversation with the support peeps was a little annoying.  I was advised that I had to install Windows 8 (which I have a license for) then I have to upgrade that to Windows 8.1 and then upgrade that to Windows 10.

Painful?  Absolutely.  A day just to get the OS onto the machine … A DAY!!  All the updates have to be applied between the major version upgrades.

The problem I have is that other people have been given Windows 10 specific keys by Microsoft support which is a lot nicer.  I hope I don’t have to do this again, considering my day rate for work it’s significantly cheaper to simply buy a license …

Share

Upgrading to Windows 10

Crazy? I don’t know yet but I decided to go for the upgrade to Windows 10 on day 1 …

Most of the update motored through the process seemingly without a hitch. That is until it got to the “Configuring settings xx%” stage. It started to go through that process fairly quickly and then hit 21% … and sat there … and sat there … and … you get the picture.

It was long enough to make me get a little concerned that something was going wrong. So I started doing some searches and found that this is seemingly a common “problem” even with the technical previews.

I unplugged all the extras like external hard drives and wotnot and then it bumped up to 22% so it is actually doing stuff but it seems like this final stage might take a VERY LONG TIME indeed.

I’m going to bed and I’ll see what it’s like in the morning.

No sooner that I hit the publish as I typed the sentence above then it jumped to 26% and 81% overall update so it should be good but this is by no means a fast process and this machine has a fast SSD drive …

UPDATE 30 / 7 /2015

So the upgrade seems to have gone without a hitch.  The only problem I’m faced with at the moment is my MOTU Traveler.  MOTU haven’t yet updated their drivers to support Windows 10 so if you have mission critical use of MOTU Firewire hardware you should wait until that has been rectified.

One thing I did encounter on the first login was a notification telling me that I was using a temporary profile and that I didn’t have access to my files and folders.  A quick restart later and login and all was well again.

UPDATE 30 / 07 / 2015

Interestingly it appears that an update has been pushed out already as all my Firewire audio spontaneously started working today.  Very cool!

Share

Xamarin – The Baptism of Fire – Windows 7

So as I blogged a few days ago about the issues I was having with getting to grips with all the issues I was having (which you can read here) it appears I’m getting to grips with all the added complexities of working on cross platform .NET based solutions.  There have been some incredibly late nights involved, surviving on 5 hours sleep a night for nearly a week has taken it’s toll I can assure you.

If you look at the other posting on the site of late, chiefly the Windows 8 post, you’ll see that despite all the Profile hacking I did I still wasn’t happy (neither was ReSharper but that’s another story).  I did end up migrating away from Windows 7 onto the Windows 8.1 Pro platform.

I’m a simple developer at heart.  Although I love all the neat tricks of .NET and using advanced interface based abstractions and Mvvm I still like to stick to first principles – simple is always better.  I didn’t like the fact that when I was dealing with lots of other peoples code and libraries my basic setup around Windows 7 wasn’t dealing with it properly or reliably.  Most of the things you’ll find yourself looking at deal in some way with a profile that the Windows 7 OS isn’t compatible with.  Profiles that target Windows 8 or Windows Phone 8.1 just don’t like it.  You can’t even installed the required SDKs  Windows 7.

So, I have moved on.  I loved Windows 7, it served me very, very well.  Was rock solid for me and I had a complex machine with an even more complex Windows configuration and until the last couple of weeks it motored on and munched through all my work.

Anyway, if you’re thinking of getting started with mobile development and Xamarin and you’re on Windows 7, upgrade.  It’s as simple as that.  You’ll save yourself lots of hacking around, late nights and stress when things go odd, and from what I can tell they almost certainly will.

Share

Windows 8.1

Well I know, very late to the game on this one.  Problem is I loved Windows 7 as much as I did Windows XP and since I have a lot going on my development machine the priority is keeping that running not reinstalling every 5 minutes.

For various tasks I have had Windows 8.1 Pro installed in a Parallels VM on my Mac for about a year.   I rarely used it for anything meaningful though.  Other than to back up some SVN repositories and  some Café based code reviewing of my solutions so never really got to grips with it.  The only tablet I have is an iPad Mini running iOS for testing.

Anyway, after 4 years of hacking, slicing and dicing my Windows 7 box finally gave up the configuration ghost last week.  All hail Windows 7!  So seeing that I need to support Windows Phone 8/8.1 development I decided to migrate the VM OS onto my main development machine.

WOW!
What on earth everyone complaining about?  I’m actually really loving the Windows 8 experience.  Granted there was about 5 mins of “Eh?” moments but all in all I think this is a great OS.  Feels REALLY fast, yes I know this is a new installation but even my main tools like Visual Studio and ReSharper feel much snappier in response.

Just a month before Windows 10 appears … hmm …

Share

Get Windows 10 App & Skype Login Broken Fix

So yesterday a new icon appeared in my Task Tray.  A little Windows icon representing the Get Windows 10 App offering the free upgrade.  Great!  Er … not so fast.

I opened the UI and was presented with this monstrosity:

GWXEr, nice.  It appears to be thoroughly brokwn as well.  None of the links do anything at all.  A little message above the “Learn more on windows.com” saying “Please wait …” appears for a fraction of a second and then … nothing.  Apparently this is supposed to look like this:

yxNbNOU

I’m not feeling the love right now.  Also the idea of updated the OS on my main development machine feels me with a feeling of dread if I’m honest.  Updating major versions of Windows in the past has been problematic and my machines are all far from your avarage users machines.  Highly configured and rammed to the gills with all kinds of software powering my development processes and build environments.

I think I’ll be holding off on this for a while.

The Fix

To get these problems solved you need to make a change to the Windows registry.  If you aren’t familiar with regedit you need to be very careful.  Make a backup copy before you do anything in here.

  1. Launch regedit (click on start and type regedit and then press enter)
  2. locate this key HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.css
  3. The Content Type will be “application/x-css”
  4. Change this to “text/css”
  5. Close regedit

Problem fixed!

Share

Microsoft to Retire IE – Project Spartan

This is actually quite a momentus occasion!  Hearing that Microsoft is going to retire the IE brand is something I’ve been waiting to hear for years.  From recent surveys it seems apparent that many people still aren’t really aware of what a brower is let alone know much about them in detail.

IE started out it’s life in conflict and it seems that conflict followed it throughout it’s entire career.  The very reason for it’s existance in the early days was as a reaction to the release of Netscape Navigator.  It was born in order to crush Navigator.  I think the problem stemmed from Netscape also claiming that eventually the browser would be the main deal on the desktop, very forward thinking at more or less true already.  The move to “The Cloud” is certainly moving a lot of things that way, the release of the ChromeBook type machines attests to this fact as well.

The problem has been that IE has never really payed much attesion to standards.  The box model of page layouts for instance.  It’s just never played nicely really making cross-browser issues a full time job for a web developer.  Another major problem with this browser is the number of proprietary “bits” that have appeard through the years.  The idea of a web site that only works in IE is simply laughable but that really was a goal for a while in my opinion.  A hugely stupid motive.

Going back to the idea of conflict I always found it amazing that Microsoft could on one hand argue in court that IE was crucial to the working of it’s operating system thus trying to fend off the anti-trust rulings.  Whilst at the same time IE6 was kicking around as the latest major version for 5 years.  IE6 was released in 2001 and IE7 arrived in 2006.  5 years in the tech world is several lifetimes, 5 years in the interwebs is hundreds of lifetimes.  How they could argue this point is incredible. The conflict coming here in that the idea to split up Microsoft was a very real one, all that risk to crush a competitor …

After they release IE7 they started to slowly try to bring it inline with standards whilst it also had a major problem – backwards compatibility.  Any app that has to sport a compatibility mode had failed in my opinion.  Either the current architecture is wrong or it is having to support an aging set of fuck ups in it’s past.  So not only was IE born in conflict, it nearly killed the company and also creates conflict for the developers that have to work with it daily.  With the next few versions being so different the cross-browser nightmares of the past became the IE-version-cross-browser nightmares.  It actually became harder to cater with all the various issues and rendering modes of all the different versions of IE.  Utterly broken.

In my opinion IE is something Microsoft should have buried a very long time ago.

Lets hope they don’t do it all over again with Project Spartan!

Share

Anti-Virus – BitDefender

So it’s the best … or at least was the best. *ahem* …

I’ve used a LOT of virus applications in my time, free ones, commercial ones massive enterprise ones and every other little tool and app going. I had been using Avira for a few years and decided in March 2014 that I’d try out BitDefender as it seemed everyone was raving about it at that point in time. It had somehow managed to attain that hallowed 100% match rate in virus tests etc. So I thought I’d give it a try.

I went through the nasty process of removing my old anti-virus software (see notes below!) and installed BitDefender.  Holy crap, it took a powerful machine (you know, fast processor, SSD, GTX580, 24Gb RAM basically a beast of a machine) to it’s knees.  It literally bought my overpowered workstation to a grinding halt.  I tried all I could to get it working at a speed where I could also do some work … you know, that’s kinda important …

Anyway, I failed.  After trawling the forums I couldn’t get BitDefender to leave enough resources for me.  Doing some searches it seemed that this was a problem that was plaguing many, many other users.  Personally I think they turned the heat up on their searching algorithm to attain a higher match rate to boost their marketing.  It seemed the software in it’s default configuration was so aggressively looking for stuff that they forgot that someone has to actually use the machine at the same time.

No virus software should behave like that at factory defaults … ever …

Anyway, when I un-installed the software I then logged into MyBitDefender portal to ask for a refund.  I asked for that refund 6 times … never got a replies and never got the refund either … £20 lost.  I had better things to do with my time.

Fast forward to now … I got up this morning to find a nice email from PayPal saying that I’d just handed them another £44.96 for the new spangly version.  So, I go to login to my MyBitDefender in order to take action (I was even considering giving it another go) but low and behold … I have no account.  Eh?  Yup, none of my email addresses (even the payment email address) was recognised.

WTF??

Where did my account go then?  I downloaded the original installer using this account.  Which according to their systems should have been an active account because it had just been renewed.  So another support call …

BitDefender confirmed that I had no MyBitDefender account, none … nada.  WTF?

So I had renewed an application from a vender that didn’t have an account for me and I couldn’t log in to download the software.  Customer services at it’s most confusing basically.  Anyway, I’m not giving them the £45, so I’m waiting for that refund to arrive … Whilst their tech may be good I have little faith in anything else …

Will stick with Avira thanks …

Update:

Got the money back, well done BD!

Share

Cross Platform Development w/ Xamarin & SVN Source Control on OSX

Hmm, rather ambitious title there Jammer …

Anyway, I’ve just started looking at building some iOS and Android (plus others in the future) development and have so opted to use Xamarin as I’m primarily a C# developer and I have a LOT of custom .NET code in my arsenal it makes the most sense.  I can also share all the same business logic and class libraries across all the products I develop which is a massive win on many levels.

Anyway, I have a massive Subversion repository on my main development box running Windows 7 that contains the ASP.NET MVC web site and also the main WebAPI project that all the various components in the system essentially use as the data access layer.  Some of the more key security elements are initially only going to be available on the web site so there is a small sub set of data access portions of the solution coded directly in the web site project.

Now that I’m going to be working on the iOS and Android solutions I need to get the mac integrated into the work flow.  On the mac I also have parallels installed which is running Windows 8 in a VM, I also use this for some development so that checks in and checks out code from the main Windows 7 repositories using TortoiseSVN.  On the mac however the SVN client world seems a little more fragmented, the only direct analogies to TortoiseSVN are all commercial solutions with all the free tools really lagging on functionality or they seem to be in a abondonware state despite the fact that OSX actually ships with SVN already installed (see the SVN upgrading guide I posted a couple of days ago).

For my OSX client I’ve actually opted to SmartSVN as this seems like a well maintained and comprehensive solution that is also commercial but pretty well priced at $69 but thee foundation version is actually free but as you would expect it does lack some key features.  No real surprises there.

Anyway, the reason for this post was getting OSX integrated into the source control aspects of things.  The Windows 8 VM has no issues connecting to the Subversion repository on the Windows 7 box.  I have VisualSVN Server installed on the Windows 7 box to provide easy configuration of how SVN exposes the repositories over http and https.  The problem I had was getting OSX to play nicely with the windows 7 box.  Everytime I tried a checkout I would get this error:

svn: E120108: Error running context: The server unexpectedly closed the connection.

Basically OSX cannot resolve the Windows 7 box by name on the network (a Wi-Fi router).  To get around this issue I didn’t want to go through the process of installing Bonjour on the Windows 7 box so the only other option is to give the Windows 7 box a static IP address on the network and then map that IP address to the server name.  Considering all the machines get their IP addresses dynamically from the DHCP setup on the router I decided that the easiest way to deal with this was to actually setup an IP reservation in the router for the Windows 7 box.  That way I haven’t assigned any machines static IP addresses but the router will always apply the same IP address to the Windows 7 box.

Once this was setup up I edited the hosts file on OSX and added a line in like this:

192.168.0.3 jamhq

And voila, I can now checkout the repositories to my instance of OSX and get on with the development.  I’ll no doubt blog about this again if I find anything useful that others may benefit from.  I’ll also be writing up my experiences using Xamarin.

Share

Subversion Global Ignore Pattern

I’m slowly building up this default Subversion global ignore pattern for my Windows & Xamarin Development on Windows & OSX.  Nothing too fancy but I’m going to keep this one up to date so others may find this useful as a default pattern or as a base for their specific requirements.

*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store *bin *obj *_ReSharper.* *.user *.suo *.pdb *.svn *_dotCover.* *_TeamCity.* *.vs *.psess *.vsp *.vspx *.userprefs
Share
windows 7

Windows 7 Update

I have now completed the majority of the setup on my new PC.  All in all I’m seriously impressed with Win 7 Pro.  I have solved all the BSOD issues (Dodgy audio driver from MOTU) and I have migrated all my data accros to the new machine.

It hasn’t been completely painless but all in all it has been a real pleasure.  All my hardware is working as desired and the machine is blisteringly quick.

Absolute thumbs up from here.

Share
windows 7

Getting Aero Back

Whilst I was installing my various apps on my new system I suddenly noticed that the Aero theme had completely vanished.  I had previously installed my copy of Spore which also installed DirectX 9.0c and I assumed that this may be the reason.

The Desktop had switched back to classic mode and no matter how I tried I could not find anything related to getting it back.  Even selected one of the preinstalled Aero themes didn’t switch correctly.  After a long slog around the internet I had found a few things to try.

The first was the obvious system reboot.  Nothing changed.  I then checked that the two services that manage this in the background were running correctly.  The two services are:

  • Desktop Window Manager Session Manager
  • Themes

These were both correctly running and setup to start Automatically when the OS boots.  The next thing I tried was to run System File Checker,  to run this open a command prompt and execute this command:

Sfc /scannow

This performed a file system check on the machine but didn’t find any problems.  I then ran the Aero Troubleshooter and the online diagnostic tool both of which didn’t find any issues.  Still no Aero theme on my machine.

I then simple restarted the Desktop Window Manager Session Manager service and low and behold Aero returned!  That is very puzzling since I performed a reboot on the machine which would have obviously restarted this service when the OS rebooted.

Basically, I had installed an older application (pre-Vista) called Starry Night Pro 4.5, now when I launch this app Windows 7 turns off Aero as the application loads using OpenGL but now when I close this application Windows 7 correctly re-enables Aero.  Happy Days!

Share

Window 7 64 Bit / MOTU Traveler

Well, I’ve finally made the switch to a new computer running the latest 64 bit version of Windows 7. I have a new Intel Quad Core i7 920 based development machine and I have to say that so far I’m impressed. The whole OS feels really sharp and responsive, even with the full Aero theme running.

The first two apps to be installed were Firefox and Thunderbird. Both of these apps installed in less than a second!! The speed is literally staggering in comparison to my old single core 2.4Ghz Athlon 64 machine.

The new tweaks to the Windows UI are really nice, the jump menus are a really nice addition as are all the window docking options. I always disliked the way XP handled arranging multiple windows, feels much tighter and ‘thought through’ in Windows 7.

With all that said I have seen a few BSODs!! However, it is totally unfair to blame either than PC hardware or Windows 7 for this as it appears that my MOTU Travelers 64bit drivers are the source of these blue screens. I have just installed a newer set of drivers which were released on the 10th March so I’m about to give these a try and see it the systems behaves better.

All in all this is a very big thumbs up from here.

Share