The Dark Art of DevOps (and how Azure DevOps fits in)

Here is a Post n wrote for my Companies blog, originally posted here.

DevOps has become a hot topic in organisations over the past year or so. However, there seems to be a lot of confusion regarding what DevOps actually entails. So, what is DevOps?

If you asked a more sales-inclined individual, you may get a response along the lines of: DevOps digitally transforms an organisation’s development department by bridging the gap between development and operations, resulting in higher quality solutions, fewer bugs, quicker delivery times, shorter recovery times, and controlling scope creep.”

This sounds amazing! However, it does not answer the question as to what DevOps really is. So, I will be taking a different approach to delve into what DevOps entails.

DevOps is based on the principal of continuous improvements in the Software Development Lifecycle, and consists of principles, practices and tools that allow an organisation’s development department to deliver projects at a high velocity, while maintaining quality and continuously improving the process associated with delivery. This is where Azure DevOps comes in. Azure DevOps is a selection of tools that facilitate the implementation of DevOps within an organisation.

DevOps consists of five main pillars (which are supported by processes, practices and tools), namely:

1. Plan and Track

This involves planning what development work needs to be completed and tracking progress against that. The tool Azure DevOps offers here is Azure Boards.

2. Develop

This is where your software developers write code and store that code. In the Azure DevOps ecosystem, the tools that used here are Visual Studio, Visual Studio Code and Azure Repos as a source code repository.

3. Build and Test

Automated builds and testing are a very important part of DevOps, as this automation frees up valuable resource time to focus on more imperative tasks. Automated builds can be set up to trigger new builds (compiling source code into executable programs) based on certain criteria (for example, “once a day”), and automated tests can then be run to verify that everything is working as expected without the intervention of a person.  Azure Pipelines and Azure Test Plans are the tools utilized here.

4. Deploy

The next step is Automated Deploy – first to a UAT\Test environment and eventually to production. Doing deploys in this manner prevents unwanted changes being accidentally deployed from a developer’s machine and introduces additional controls to only deploy what is wanted and limiting the introduction of problems.  By automating the deployment of systems deployment times are also drastically reduced and thus system down time is reduced. Azure Release Management is the Azure DevOps tool used to automate deployments.

5. Monitor and Operate

After a system has been deployed, it needs to be monitored and operational activities need to be performed to ensure it is up and running and running optimally. Azure Monitor and Application Insights are the tools available in the Azure DevOps tool-belt for this.

With the tools provided by Microsoft Azure DevOps, as well as industry tried and tested principles, the above five pillars can dramatically improve the operations and output of a development department while driving down operational costs.

Now that we understand what DevOps is and how it works, what outcomes can we expect from mastering the 5 pillars?

  • Better quality solutions
  • Quicker delivery times
  • Fewer bugs
  • Shorter recovery times to resolve bugs
  • Prevents uncontrolled scope creep
  • Improved collaboration and agility in teams
  • Better cross-skilling in teams
  • More automation
The Dark Art of DevOps (and how Azure DevOps fits in)

GETTING STARTED IN 3D PRINTING

Over the last few years various 3D printers have entered the market at significantly lower price points than ever seen before, making 3D printing more accessible to a much larger group of people. One of the companies producing these lower cost 3D printers is Wanhao and I have been using one of their printers, the Wanhao Duplicator i3 Mini, over the last two months.

The Duplicator i3 Mini is a compact PLA optimized 3D printer, weighing just 7kg, with a print volume of 120mmx135mmx100mm. The i3 Mini is extremely easy to get up and running and setup, it comes completely assembled and all the user needs to do to start printing is plug it in and manually level its print bed which takes a few minutes following the included instructions.

The printer ships with an included 1GB SD card with various printable models preloaded on it, so the user can simply insert the SD card and print as soon as the printer is setup. Below are a few photos of one of these models, a little dragon.

The little dragon was printed using CCTree 1.75mm PLA filament.

I use Cura for 3D print slicing, which is the process of converting 3D models into 3D printable formats. Configuring your slicing application correctly for your 3D printer is extremely important and getting this wrong will result in failed prints. Configuring your slicing application involves setting values inside the slicing application that relates to the characteristics of your 3D Printer, for example print volume, nozzle size, filament diameter, print speed and so on. The values for these settings can be found in the printers’ documentation or by simply googling the printer in question and the splicing application that needs to be configured.

Here are some lessons I have learnt so far in 3D printing which might help anyone new to the process:

– Make sure filament diameter is configured correctly, getting this wrong will result in prints failing rather spectacularly.

– Infill is important, but far less is required than most people think, reducing the infill percentage of a print not only reduces the amount of filament used, but also drastically reduces print times.

– When orientating a model for printing in a splicing application, experiment with different orientations and support configurations, sometimes much better results can be achieved with a few minor changes.

– 3D printing is a slow process and takes much longer than most people think.

– Don’t be scared of getting things wrong and having prints fail, it is inevitable and great learnings can be gained from failures.

I will be posting more in the future about my experiences and learnings in 3D printing, but for now I will leave you with a few photos of something else I printed, a USB\SD card holder, which came out great.

GETTING STARTED IN 3D PRINTING

REVIEW – X-RITE COLORMUNKI SMILE

The ColorMunki Smile is a basic monitor calibration tool that works with both LCD and LED monitors. Most monitors do not show colors accurately with their out of the box settings and this tool is used to configure monitors so that the colors shown on the display is as accurate as possible.

This is very important for people who work professionally with photos and video, such as professional photographers and video editors, as they need know exactly what the content they are working on looks like.

My interest in the ColorMunki Smile is for a slightly different reason, I use two 27-inch Dell monitors on my computer, the S2716DG and the SE2717H, and as they are positioned right next to each other the difference in their color calibration was very apparent and abrasive to look at.

Using the ColorMunki Smile is very simple, you plug the device’s cable into a USB port and then start the included software that guides you through the configuration process. The device has sensors on its one side that need to be placed in an area in the center of the screen (as indicated by the ColorMunki Software) and the USB cable is long enough and equipped with a counter weight, so it can easily be hung over the top of the screen and positioned correctly. The software will then start the calibration process that takes several minutes to complete and when done a reference image will be shown comparing the before and after results. This comparison showed me that one of my monitors leaned more into the yellow spectrum while the other leaned into the blue spectrum. This process completely rectified the color discrepancy between my monitors.

At the time of this post the ColorMunki Smile costs $85(USD), making it one of the least expensive monitor calibration tools. It is however a very basic and entry level solution that is most probably not appropriate for professionals who are extremely dependent on their monitors being perfectly calibrated, but for everyone else it greatly improves the color accuracy for most monitors compared to their default configuration.

REVIEW – X-RITE COLORMUNKI SMILE

TIME FOR AN UPGRADE

About a month ago I upgraded from my old Faithful 3770k, running on the Z77 MSI MPower motherboard with 32GB DDR3 1866Mhz ram to the following:

  • Intel i9 9900k
  • MSI MEG Z390 GODLIKE
  • 32GB HyperX 3466Mhz DDR4 RAM
  • Samsung Evo 970 500GB NVME
  • Intel Optane for my Primary Spinning Disk (a Seagate Barracuda 4TB)
  • Corsair Obsidian 750D
  • Corsair H150i All-In-One Water-Cooling Loop
  • Corsair RM1000x PSU

I have 13.5 TB of storage in total of which 500GB is NVME and 1TB is SSD.

The below CrystalDiskMark results show the difference Intel Optane makes, both benchmarks were run on Seagate Barracuda 4TB Drives, one with Optane enabled and one without:

Without Optane:

Seagate

With Optane:

octane

The difference in performance between the two drives is actually astounding.

IMG_6849

I am still running my GTX 1080 for the time being, however I did upgrade my Primary monitor to the Dell S2716DG, a 1440p 144Hz G-Sync monitor.

This was really a worthwhile upgrade and the new PC is performing great.

Here are some photos of my new setup:

TIME FOR AN UPGRADE

BOOK REVIEW – EXPLORE/CREATE MY LIFE IN PURSUIT OF NEW FRONTIERS, HIDDEN WORLDS, AND THE CREATIVE SPARK BY RICHARD GARRIOTT WITH DAVID FISHER

IMG_6577

Explore/Create is the memoirs of Richard Garriott, it tells the story of his life, from being the creator of the Ultima Games and starting Origin Systems with his brother, to his adventures in the arctic, visiting shipwrecks under the sea, and even his trip to space when he visited the International Space Station.

I am a huge fan of the Ultima games, a series of truly revolutionary PC role-playing games that were released between the early 1980s to the late 1990s. Each iteration in the Ultima series bought about something brand new, not only to the series but quite often to electronic gaming as a whole, for example the concept of morals and consequence that was introduced in Ultima 4, and to my knowledge this was the first time these kinds of topics had every really been addressed in a video game.  Or Ultima 7 that had the most realistic and immersive game world at the time, it is the first game I had ever seen where you could pick wheat in a field, grind it in a mill, then add water and bake a bread.

The Book also covers Richard’s many adventures, going places like the arctic, the amazon and even visiting the wreck of the Titanic.  And how he eventually followed in his father’s footsteps, astronaut Owen K. Garriott, when he traveled into space as a private astronaut with Roscosmos, becoming the second second-generation astronaut in history.

This book is a truly enjoyable and inspiring read and shows the full and rich life of a true polymath. I cannot recommend this book enough, so do yourself a favour and pick it up.

BOOK REVIEW – EXPLORE/CREATE MY LIFE IN PURSUIT OF NEW FRONTIERS, HIDDEN WORLDS, AND THE CREATIVE SPARK BY RICHARD GARRIOTT WITH DAVID FISHER

MOVIE REVIEW – BATMAN: GOTHAM BY GASLIGHT

IMG_6536

Batman: Gotham by Gaslight is a 2018 animated movie produced by Warner Bros Animation and DC Entertainment and is based on a one-off graphic novel by Brian Augustyn and Mike Mignola (originally published in 1989). The story forms part of the DC Else World series which places known characters in different timelines or realities and does not form part of the main DC universe continuity.

The story takes place in a Victorian era Gotham city sometime in the 19th century, which is strongly styled after London during the Victorian times. The story revolves around a killer, Jack the Ripper, who is terrorizing Gotham city and how the Batman is trying to apprehend him.

Various familiar characters make an appearance such as Poison Ivy, James Gordon and Hugo Strange, but they all take on different roles than the ones we know them for. For example, young Tim Drake, Dick Grayson and Jason Todd are in a street gang known as the Robins.

The movie is beautifully animated as with most DC animated movies and the voice acting is outstanding, Bruce Wayne\Batman is voiced by Bruce Greenwood, who does an exceptional job, however I do always find it slightly jarring when Batman is voiced by anyone other than Kevin Conroy.

This movie is immensely engaging and does a great job of bringing the graphic novel to life. It does have a major plot twist, that I will not spoil, that adds a real sense of surprise to how the story ends.

It is a great movie for Batman and DC Animated Universe fans and is a really enjoyable watching experience.

MOVIE REVIEW – BATMAN: GOTHAM BY GASLIGHT

BITE SIZE C# – LINQ

LINQ or Language Integrated Query is part of the Microsoft .NET Framework and it adds native data querying capabilities to .NET languages.

LINQ allows the user to query:

  • Objects in Memory (i.e. collections such as lists) using LINQ to Objects
  • Databases using LINQ to Entities
  • XML using LINQ to XML
  • ADO.Net Datasets using LINQ to Datasets

LINQ can either be implemented using predefined extension methods or alternatively using LINQ Query Operators.

Below are three examples utilising LINQ Extension methods:

In this example a list of Book objects is filtered to return only the Objects where the price is less than 10.

List<Book> cheapBooks = books.Where(b=>b.Price < 10);

 

In this example a list of Book objects is filtered to return only the Objects where the price is less than 10 and additionally the newly created list of Book objects is sorted alphabetically based on the Title field.

List<Book> cheapBooks = books.Where(b=>b.Price < 10).OrderBy(b.Title);

 

In this example the cheapBooks list is filtered to only return the Titles of the books therein and these Titles are then inserted into a new list of strings.

List<string> cheapBooksTitles = cheapBooks.Select(b=>b.Title);

 

Multiple extension methods can be combined to ascertain the desired results, for example:

List<string> cheapBooksTitles = books.Where(b=>b.Price).OrderBy(b.Title);
                                   .Select(b=>b.Title);

 

LINQ query operators tend to be slightly more verbose, and the above example can be implemented with query operators as follows:

List<string> cheapBooksTitles = from b in books
                         where b.Price < 10
                         orderby b.Title
                         select b.Title;

 

Some common extension methods are:

Single

var book = books.Single(b=>b.Title == ”Building Robots”);

Returns a single object that matches the defined criteria. However note that in the event that none or more than one book matches the criteria specified an exception will be thrown.

 

SingleOrDefault

var book = books.SingleOrDefault(b=>b.Title == ”Building Robots”);

Returns a single object that matches the defined criteria, if more than one book matches the criteria specified an exception will be thrown, however if no books match the criteria the default value defined will be returned.

 

First

Returns the first object that matches the criteria, however if no matches are found an exception is thrown.

 

FirstOrDefault

Returns the first object that matches the criteria and if no match is found the default value will be returned.

 

Last

Returns the last object that matches the criteria, however if no matches are found an exception is thrown.

 

LastOrDefault

Returns the last object that matches the criteria and if no match is found the default value will be returned.

 

Max

var maxValue = books.Max(b=>b.Price);

Max is used with numeric values and will return the highest value that is contained in the Price field in the Book objects.

 

Min

var minValue = books.Min(b=>b.Price);

Min is another operation used with numeric values and will return the smallest value that is contained in the Price field in the Book objects.

 

Sum

var totalPrice = books.Sum(b=>b.Price);

Sum is used to add up all the values in a numeric field.

 

There are many other methods available to filter and manipulate data in LINQ and the possibilities for the utilisation of LINQ are nearly endless, for example

var bookSelection = books.Skip(2).Take(3);

The above example will skip the first two books in the books list and take the next three placing them into the newly created bookSelection list.

The best option to gain a better insight of what is possible with LINQ is to give it a try.

BITE SIZE C# – LINQ