Category Archives: Coding

Life at a Start-up : Exploring the Microsoft HoloLens

Over the last week we have been working on something quite exciting. At BuyingButler and RightIndem we pride ourselves on being a very technology focused company, and we love looking to see where we can use the latest technology to solve real problems. We have been doing just that with Microsoft new HoloLens Mixed Reality headset.

On Thursday 12th Jan 2017 we had a good friend and fellow Pluralsight author Lars Klint fly over to the UK for the NDC London conference. Before the conference he came up to Nottingham  for a couple of days to work with us around some use cases for the Hololens for RightIndem. I can’t discuss what those use cases are at the moment openly, but they are quite exciting and complement one of our project modules nicely.

First though, what is the HoloLens. Below is the brief description taken from the HoloLens website.

Microsoft HoloLens is the first self-contained, holographic computer, enabling you to engage with your digital content and interact with holograms in the world around you.

When wearing the headset, you still have an unrestricted view of your surroundings, but you also see holograms that are placed in the room that you can only see with the HoloLens attached. These holograms are aware of their surroundings and can be placed on walls and tables. This is achieved by the HoloLens doing spatial mapping of the environment around it. You can then interact with these holograms directly whilst walking around your environment.

The HoloLens is a Windows 10 device which is untethered, which means you do not need a cable running between the headset and a powerful computer like you do with a Virtual Reality headset like the Oculus Rift.

Lars Klint Demonstrating the HoloLens

Lars Klint Demonstrating the HoloLens

With Lars visiting our offices we had 2 goals to achieve over 2 days. On the first day Lars facilitated a brain storming session with myself and the rest of the companies management team. We already had some ideas of where the HoloLens could be applied, but the purpose of this session was to work through different ideas and walk away with a rough plan for a series of minimum viable products we could build. This session went very well, and everyone involved had the opportunity to try the HoloLens for a good amount of time. This was important as people need to understand what the experience feels like in order to understand the constraints posed. Off the back of the session we have an idea for 2 technical spikes we want to try and a prototype product to build with it. The cool thing is, we already have a company we are talking too about partnering with us to deliver a HoloLens solution.

Continue reading

My Cryptography Talk at NDC London

The Video recording of my talk at NDC London is now available to watch on-line. This was my first major conference so it was a little scary, but I really enjoyed the experience. The room was about 2 thirds full and I got an excellent speaker rating at the end so I must have done something right.

Code Metrics and Static Code Analysis Talk

The Perils of Not Writing Good Unit Tests?

The Perils of Not Writing Good Unit Tests?

Yesterday I did a new talk on Code Metrics and Static Code Analysis at my usergroup Derbyshire DotNet. The talk seemed to go down well and there were some interesting discussions about code quality and the meaning of quality to people in different industries.

I have made the slides available from this link to anyone that wants them for reference.

RabbitMQ Series Part 7: Getting Ready for Some Code Examples

Now that we have covered a lot of the introductory material for RabbitMQ, this part of the series will look at developing software to interact with the message broker as both a producer and a consumer. First we will take a look at the RabbitMQ client library. Then we will introduce the business scenario used for the sample applications. Before we start looking at the individual examples we will take a quick look at the common code shared between them. Then we will move onto the actual code examples themselves.

The code for this series can be found here.

These example will include:

  • Basic queues
  • Worker queues
  • Publisher and subscribers
  • Direct routing of queues
  • Topic based publisher and subscribers
  • Remote procedure calls

RabbitMQ client library

To develop software against RabbitMQ you will need to install the RabbitMQ client library for .NET.  Before we look at how to install the client library, let’s take a brief look at what it is. This series will not serve as an in-depth guide to the whole client library API. You can read a more in-depth document for the client library that explains the full library from the RabbitMQ site. This section will serve as an introduction to the library and the examples in the rest of this series will help you cement your understanding further.

What is contained in the Client Library?

The RabbitMQ .NET client is an implementation of an AMQP client library for C# and other .NET languages. The client library implements the AMQP specification 0-8 and 0-9. The API is closely modeled on the AMQP protocol specification with little additional abstraction, so if you have a good understanding of the AMQP protocol, then you will find the client library easy to follow.

The core API interfaces and classes are defined in the RabbitMQ.Client namespace. The main API interfaces and classes are:

  • IModel : This represents an AMQP data channel and provides most of the AMQP operations.
  • IConnection : represents an AMQP connection.
  • ConnectionFactory: constructs IConnection instances.

Some other useful interfaces and classes include:

  • ConnectionParamters: configures a ConnectionFactory.
  • QueueingBasicConsumer: receives messages delivered from the server.

Continue reading

RabbitMQ Series Part 6: Basic Queuing and Message Example

In the previous article we looked at administering RabbitMQ from the command line. In this next article we will set-up a basic queue and also send and receive a basic message via the management portal.

Before we go and dive into some code and look at our samples, let’s work through a very simple scenario where we create an exchange and a queue and bind them together via the management portal. We will then send a message to the exchange and pull it from the queue. It is a very simple example, but it serves as a good introduction before we tackle some real world scenarios.

First of all go to the management portal and click on the exchanges tab. Once you are on the exchanges page, open up the ‘Add a new exchange’ section and fill it in as shown in the following screenshot. You will then need to click on the “Add exchange” button to add the exchange.

RabbitMQ Basic Queue and Message Example

RabbitMQ Basic Queue and Message Example

This will add a new ‘direct’ exchange to the list of exchanges. Now click on the Queues tab at the top of the page to go to the queue list. Open up the ‘Add a new queue’ section and fill it in as per the following screenshot. Now click the “Add queue” button.

Continue reading

RabbitMQ Series Part 5: Administration via the Command Line

In the previous article we looked the Rabbit MQ management portal in more detail. In this article we will look at configuring RabbitMQ from the command line.

As well as using the web based management portal to administer RabbitMQ you can also use the command line (rabbitmqctrl.bat) interface. In this chapter we will demonstrate some of the basic features that you may need to use most frequently, but for a more exhaustive list of commands you can read the RabbitMQ manual page for the rabbitmqctrl.bat tool.

At a high level rabbitmqctrl lets you manage the run state of the message broker, manage your RabbitMQ clusters, administer users and permissions, manage policies and list exchanges, bindings, and queues.

Let’s work through a simple example of stopping and starting the RabbitMQ broker and checking the broker status.

Open up a command prompt and navigate to “C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.4.4\sbin

From the command prompt type:

 Rabbitmqctl status

You will see the following output in the command line window.

Configure RabbitMQ from the Command Line

Configure RabbitMQ from the Command Line

To stop the RabbitMQ broker from running you type the following into the command line:

 Rabbitmqctl stop

This will give you console output that looks as following:

Configure RabbitMQ from the Command Line

Configure RabbitMQ from the Command Line

If you run the status command line again by typing:

 Rabbitmqctl status

You will see that the RabbitMQ service has stopped. This will mean RabbitMQ will stop receiving and processing messages. If you have not setup durable queues and messages you will lose any messages already in the system.

Continue reading

RabbitMQ Series Part 4: Overview of the Management Portal

In the previous article we looked at the installation and basic configuration of RabbitMQ. In this article we will look in more detail at the Management Portal.

The RabbitMQ management plugin provides a browser based user interface to administer the message broker as-well as a HTTP-based API for management and monitoring of your RabbitMQ server.

The management plug-in features include:

  • Declare, list and delete exchanges, queues, bindings, users, virtual hosts and permissions.
  • Monitor queue length, message rates globally and per channel, data rates per connection, etc.
  • Send and receive messages.
  • Monitor Erlang processes, file descriptors, memory use.
  • Export / import object definitions to JSON.
  • Force close connections, purge queues.

The management portal is split into different screens that are selectable with the menu bar at the top of the screen. The first screen you will see is the overview page. This acts as a dashboard view showing you how many messages are in the broker, and the message throughput rate.

RabbitMQ Management Portal Overview Screen

RabbitMQ Management Portal Overview Screen

This screen is useful to have up on a large display so you can see at a glance how RabbitMQ is performing. If, for example, any of your message consumer applications go down, you will start to see a large buildup of undelivered messages which is a good indication that something has gone wrong.

In the image above, you can see on the overview screen that 1 messages was placed onto the queue at 10:49.00. In the chart below this you can see the message rates which is split into Published messages, Delivered messages, Redelivered messages, Acknowledged messages and Delivered messages where no acknowledgement was required.

Continue reading