18-bit RGB palettes are an old format used by VGA displays of yesteryear. These palettes use 6-bits for each of the red, green and blue channels and usually allowed a maximum of 256 colours from the 262,144 unique colours available. This article describes how to read and write 18-bit palette files.
2017 Blog Posts Articles and information on C# and .NET development topics
A short article on using IIS URL rewriting to force insecure HTTP requests to HTTPS when behind a load balancer that is configured to terminate the secure connection, including support for excluding LetsEncrypt challenge requests.
A short article on installing the optional URL Rewrite module into Internet Information services.
How to store data sent to an Azure Function in blob storage.
Recently I was looking for a way of display hierarchical information in a more compact form than the previous horizontal/vertical trees I was using. One of the concepts I looked into during this was the idea of arranging children radially around a central node. This article describes an approach for doing this using circular nodes.
A short article on using the ImageAnimator class to allow animated GIF's to be properly painted using System.Drawing and C#.
A review of the book "The C# Helper Top 100" by Rod Stephens
A short article which describes how to get a window rectangle without including offsets for drop shadows
I was recently updating some documentation and wanted to programmatically capture some screenshots of the application in different states. This article describes how you can easily capture screenshots in your own applications using the
BitBlt Win32 API call.
Markdig is an extensible Markdown processor built with performance in mind. This article details how to create a simple Markdig extension to extend the parsing functionality to create inline links for MantisBT issue numbers (or GitHub or similar).
I've released a new open source project named MantisSharp, a simple .NET client for working with the recently introduced REST API for Mantis Bug Tracker.
A short post which describes how to adjust .htaccess to enable the REST API in Mantis Bug Tracker to work.
Some time ago, I used the Bing Translator API to help create localization for some of our products. As Microsoft recently retired the Data Market used to provide this service it was high time to migrate to the replacement Cognitive Services API hosted on Azure. This article covers using the basics of Azure cognitive services to translate text using simple HTTP requests.
Recently I discussed using type converters to perform custom serialization of types in YamlDotNet. In this post I'll concentrate on expanding the type converter to support deserialization as well.
One of our internal tools eschews XML or JSON configuration files in favour of something more human readable - YAML using YamlDotNet. For the most part the serialisation and deserialisation of YAML documents in .NET objects is as straight forward as using libraries such as JSON.net but when I was working on some basic serialisation there were a few issues. This article describes how to use the
IYamlTypeConverter interface to handle custom YAML serialisation functionality.
A short follow up which demonstrates how to write a RIFF palette with ease.
At the start of 2014, I published an article describing how to read colour palettes from BBM/LBM files. At the end of that article I noted that Microsoft palette files used a similar format, but I didn't investigate that at the time. Since then I followed up with articles on reading and writing Adobe's Color Swatch and Color Exchange format files and I posted code for working with JASC, Gimp and other palette formats.
Now, finally, I decided to complete the collection and present an article on reading Microsoft's palette files.
Previously, I've described on this blog how to do a basic integration of NDepend with Jenkins pipeline jobs. The disadvantages of the previous post was it was essentially part of a series tailored to our build process and so not easy to view as a stand-alone article and it only covered pipelines. This complementary post covers how to perform the same level of integration with a freestyle project.
One of the security features of Jenkins is to send Content Security Policy (CSP) headers which describes how certain resources can behave. The default policy is extremely restrictive which can cause problems with content added to Jenkins via build processes. This post describes how to either temporarily or permanently change the CSP to be less restrictive.
After two posts regarding building and publishing Nuget packages with Jenkins pipelines, I now follow up with details on integrating NDepend with the pipeline job.
A follow up to my first post on Jenkins pipelines, by upgrading the script to work with parametrised builds, allowing one script to handle multiple pipeline jobs.
A fairly lengthy post which describes how to setup a Jenkins Pipeline to build, test and publish Nuget packages, along with some tips and caveats learned from working with pipelines.
I've recently been updating our series on dithering to include ordered dithering. However, in order to fully demonstrate this I also updated the sample to include basic color quantizing with a fixed palette.
While color reduction and dithering are related, I didn't want to cover both topics in a single blog post, therefore this post covers finding the nearest color via Euclidean distance.
StartSSL code signing certificates are crippled and your binaries no longer trusted once they have expired, even if they have been counter signed. Not to mention the other trust issues that StartSSL are experiencing.
A round up of the different software tools used by Cyotek over the past year.