Thursday, 1 March 2018

Suspicious Windows 10 Printer Update?

I’ve been seeing this in my Windows 10 update after receiving a notification that it failed to install:

Canon - Printer - 4/21/2000 12:00:00 AM - 10.0.17046.1000
Status: Awaiting install


It seems I’m not alone in spotting this rather odd and somewhat suspicious issue:


For now I am trying the “Show or hide updates” troubleshooter package from Microsoft which you can find here:

Monday, 27 November 2017

Elements of the Archimate 3.0 Application Layer

This post is a basic aide-memoire for me to remember the characteristics of the Archimate Application Layer model elements. For a detailed description refer to the main Archimate 3.0 documentation.

The model elements are divided into 3 categories:

  • Active Structure
  • Passive Structure
  • Behaviour

Active Structure






Encapsulation of application functionality aligned to implementation structure

Modular and replaceable

Encapsulates behaviour and data

Exposes services and makes them available through interfaces

A self-contained unit

Independently deployable, re-usable, and replaceable

Performs one or more application functions

Functionality is only accessible through application interfaces



An aggregate of two or more application components that work together to perform collective application behaviour

Specifies which components cooperate to perform some task

A logical or temporary collaboration of application components

Does not exist as a separate entity



A point of access where application services are made available

How the functionality of a component can be accessed

Exposes application services

The same interface may expose multiple services








Automated behaviour performed by a component

Describes internal behaviour of a component

Functions are exposed externally through one or more services

May access data objects



A unit of collective application behaviour performed by two or more application components

Collective behaviour performed by components that participate in a collaboration



A sequence of application behaviours that achieves a specific outcome

The internal behaviour performed by a component to realize a set of services

May realize application services

May access data objects

A component may perform the process



Denotes a state change

Does not have a duration

May be internal or external

May have a time attribute



An explicitly defined exposed application behaviour

Functionality is exposed through interfaces

Realised by one or more functions

Provides a useful unit of behaviour


Passive Structure






Data structured for automated processing

A self-contained piece of information

Clear business meaning


Sunday, 12 November 2017

Speed up real-time rendering in DaVinci Resolve with Optimised Media

This post refers to DaVinci Resolve 12.5.

Real-time rendering in DaVinci Resolve can be slow. One of the first things to try is optimising your media. As I understand it, Resolve will use optimised media – which is more efficient - as a proxy for the original format media in the timeline.

To optimise a media item you can right-click on it in the media gallery and select Generate Optimised Media.


The output will end up in the same place as other cached items (see my previous post for details).

Not surprisingly, generating optimised media can take quite a while and it appears that using this method you can only do one clip at a time.


Sunday, 12 November 2017

Speed up real-time rendering in DaVinci Resolve

This post refers to DaVinci Resolve 12.5.


OK, I don’t have a system that’s setup for video editing. As a result, playback in DaVinci Resolve is slow once I’ve added more than a few clips to the timeline, especially if I’m layering clips.

How can we speed up DaVinci Resolve so we get smooth real-time playback in the editor?


A solution might be to use the render cache in DaVinci Resolve. You can activate the render cache via the Playback > Render Cache menu item.


Note that the render cache has 2 modes: Smart and User. In short, using the Smart option allows Resolve to automatically cache items as it sees fit. In User mode clips are only cached when you indicate you want them cached. To do so, right-click on the clip and choose Render Cache Clip Source > On from the pop-up menu.


When you first add an item to be cached a red line will appear at the top of the timeline above the clip. Once a clip is cached you’ll see the line turn blue.


Tip: If you use the Smart mode and you already have a number of clips added to the timeline it might take a while to add to the cache. Your system might be slow for a while as the cache is built.

Changing the render cache location

Firstly, add the path you want to use to the Media Storage section of DaVinci Resolve > Preferences… screen. I had to restart Resolve after adding a new location or the next step failed.



Secondly, open File > Project settings… and go to General Options. The cache file location is at the bottom of the screen.


Sunday, 13 August 2017

Quick RabbitMq using Docker

I needed a quick RabbitMq installation so I could play with MassTransit, the free open-source .Net message bus framework. Docker to the rescue. I was using the Docker Toolbox on Windows 10 Home.

First things first - RabbitMq is available on the Docker Store as a Docker image called rabbitmq. The documentation is reasonable and I decided I wanted RabbitMq installed with the management plugin. For this test I decided to leave the default RabbitMq username (guest) and password in place. I also elected to expose the default ports for the management plugin (15672) and the standard RabbitMq port (5672) to the host.

Having scanned the documentation the following Docker run command would seem to be in order:

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

Note the two –p command line arguments exposing the ports to the host from the Docker container. So, time to crack open the Docker Quickstart Terminal and run the command.


With the Docker container up-and-running I can now go to my local machine and access the RabbitMq management UI running on port 15672.


Cool! Looks like we’ve got RabbitMq running in a container.

A quick test application

I decided to run a quick test using a console application to check everything was working. Firstly, I set up a virtual host for the test in the management UI remembering to add the guest user to the virtual host.


Then, using the RabbitMq .Net client I created the ‘Hello World’ application.

using System;
using System.Text;
using RabbitMQ.Client;

namespace RabbitMqTest
    class Program
        static void Main(string[] args)
                ConnectionFactory factory = new ConnectionFactory();
                factory.Uri = new Uri("amqp://guest:guest@");

                IConnection conn = factory.CreateConnection();

                IModel model = conn.CreateModel();

                var exchangeName = "console-test-exchange";
                var queueName = "console-test-queue";
                var consoleTestRoutingKey = "console-test-routing-key";

                model.ExchangeDeclare(exchangeName, ExchangeType.Direct);
                model.QueueDeclare(queueName, false, false, false, null);
                model.QueueBind(queueName, exchangeName, consoleTestRoutingKey, null);

                byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Hello, world!");
                model.BasicPublish(exchangeName, consoleTestRoutingKey, null, messageBodyBytes);
            catch (Exception e)

I ran the application and headed back into the RabbitMq management UI to check the results. Firstly, was the exchange created?


It was. And the queue?


Success again. You can see there’s one message ready too. By drilling in to the queue you can get messages in the management UI. Let’s see what we got.


Bingo! So, all is well with RabbitMq.

The Sample-ShoppingWeb application

MassTransit has a sample application called Sample-ShoppingWeb which you can get from GitHub.

Firstly, I created a new virtual host in RabbitMq and added the guest user to it. I then made simple changes to the configuration to change the RabbitMqHost setting in the App.config and Web.config files of the TrackingService and Shopping.Web projects respectively.


I ran the example and added a few items to the cart using the Shopping.Web MVC application. Watched as the TrackingService picked up the items via RabbitMq. An examination of the RabbitMq management UI showed a bunch of new exchanges and two new queues.


Docker recipes

This post is a quick aide-mémoire for basic command-line Docker operations. It’s well worth reading the Docker documentation for the real deal. I’ve been running Docker on Windows 10 Home – yes, Home – so I’ve had to use Docker Toolbox. I’ve run the commands listed here using the Docker Quickstart Terminal that comes with the Toolbox.

List containers

To list the all containers run the following command:

docker container ls


See the docker container ls documentation.

Run a Bash shell on a container

To get access to a container using a Bash shell run the following command:

docker exec –it <container-name-here> bash


Friday, 21 July 2017

Setting up SSH for BitBucket on Windows

Back to basics for me today. I’m rebuilding a machine and want to setup SSH to access my BitBucket account (I use BitBucket for my Git repositories). The new machine already has Git installed. I simply used Chocolatey to install Git.

You can skip to full instructions in the BitBucket help if you like.

Step 1 – Check the .ssh directory

The first step is to check that you’ve got an folder called .ssh in your home directory. If it’s missing you need to create it.


Step 2 – Create the default identity

Run ssh-keygen to create the key. If this is a fresh install there won’t be a default key so you can just hit enter to accept the default name or ender a new one if you want. Enter the passphrase when prompted.


Step 3 – Create an SSH config file

Create a config file for SSH.


Open the file and edit it. Add the following:

 IdentityFile ~/.ssh/id_rsa

Step 4 – Update the .bashrc file

Check you’ve got a .bashrc file in your home directory. Create one if you don’t. Open the .bashrc file and edit it. Add the following:

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa

See also Enter RSA passphrase once when using Git bash.

Close and reopen GitBash. You’ll be prompted for the passphrase.


Step 5 - Configure BitBucket to use the new key

Go to your BitBucket account and navigate to your settings. Adding the key is easy. Follow the steps here.



Check you can access BitBucket using the new key.