Hi, I'm Ray

I'm a software developer, full-time nerd and occasional human (while heavily caffeinated).

This is a website for my blog, projects and anything vaguely interesting I have to share.

Who am I?

Hi, I'm Ray.

I'm a software developer specialising in Windows desktop, Web and mobile devices.

I've also been known to manage servers (Microsoft and Linux), crimp some cables and change a light bulb. More about that over on LinkedIn.

In my spare time, I love to read. I seem to read mostly science-fiction, fantasy and young adult; more about books over on Goodreads.

I enjoy taking photographs but I have -so much- to learn. You can see some of my least-terrible photos on Flickr.

I love food. I offer no apologies for posting a lot of photos of food on Instagram.

I like working in coffee shops with my laptop, tablet and reMarkable. There's coffee, cakes and people-watching is fun.

That is me.




  • .NET Framework (C#)
    • Windows Services
    • WinForms
    • User Controls
  • Tizen.NET
  • Xamarin.Forms



  • Linux
    • CentOS
    • Ubuntu Server
  • MS SQL Server
  • MySQL/MariaDB



  • AngularJS (1.2)
  • ASP.NET Framework (C#)
    • MVC 4+
    • SignalR
    • Web Forms
  • ASP.NET Core Framework
  • Episerver (Commerce, Community and Find)
  • jQuery
  • PHP
    • LAMP (Apache, MySQL and PHP 4+)
    • LEMP (Nginx, MariaDB and PHP 5+)
  • Vue.js

Social Media


C#: Get files in directories (done wrong three ways)

09 May, 2020

This is another one of those operations that you'll find yourself doing at some point in your job, viz. getting a list files from a directory and its sub-directories. This should be easy. This should be one line of code. This is how to get-files wrong in three different ways.

Read more

Programming, .NET, C#

C#: Implementing simple wildcard string matching without regular expressions

29 Apr, 2020

In my previous post I walked-through how to use regex to perform string matching using "*" tokens. In that post I acknowledged that regex was slow and I inferred that native string operations are preferable for better speed. So, let's revisit the implementation again without regular expressions.

Read more

Programming, .NET, C#

C#: Implementing simple wildcard string matching using regular expressions

18 Apr, 2020

When programmers need to match text against a pattern I can't think of a more powerful tool than regular expressions (regex). But regex can seem complicated and has a steep (but short) learning curve. As much as we sometimes want to, we can't expect end-users to use (or know about) regex. A simple asterisk (*) wildcard, however, seems to be much widely understood. This is a walk-through of the way I implemented wildcard string matching using regular expressions.

Read more

Programming, .NET, C#

C#: Quick and easy generating a differential image

26 Feb, 2020

Take two images, compare them and generate a new image with just the differences. This differential image can be applied on top of the original to get the second image.

Read more

Programming, .NET, C#

CSS: Quick and easy toggle switch control

06 Feb, 2020

A switch is a user interactive control with an on/off state. They seem to have been based on the mechanical toggle switch. When switching back and forth (pun intended) between developing on Xamarin.Forms and websites, I've found that I much prefer the switch to a checkbox. This is my implementation of a switch for websites (CSS).

Read more

Programming, CSS

Xamarin.Forms: Quick and easy custom picker with a more traditional look

14 Oct, 2019

Xamarin.Forms has a control called a Picker, it's practically equivalent to a: ListBox, <Select> or a generic drop-down list. Here's my problem, it sucks. It's a freakin' nondescript line.

Read more

Programming, Xamarin.Forms

Software: Fizzy Launcher

Software: Fizzy Launcher

v0.1.1.108 alpha

Fizzy Launcher is an app' launcher for Windows! Start applications and open file shortcuts in fizzin'-style.
Bootstrap JS: BSDialog4

Bootstrap JS: BSDialog4


BSDialog4 is a Bootstrap 4 JavaScript helper for modals. Add (and remove) modals to a page dynamically and load content with jQuery-AJAX.
Bootstrap JS: BSDialog

Bootstrap JS: BSDialog


BSDialog is a Bootstrap 3 JavaScript helper for modals. Add (and remove) modals to a page dynamically and load content with jQuery/AJAX.
Chrome Extension: YouTube Watched

Chrome Extension: YouTube Watched


A Chrome extension to hide watched and partially-watched videos from your YouTube Subscriptions page.
Software: Bookmark Manager

Software: Bookmark Manager

v0.3.0.018 β

Bookmark Manager is a completely free utility for storing and organising your favourite Internet shortcuts.

Software: Visual Task Walker

07 Oct, 2017

Visual Task Walker is a task runner that uses graphical shapes (blocks) to represent tasks. You can configure these tasks and chain them together to pass data from one block to another. This is free open source software for Windows.

Read more

{{ item.title }}

Currently Reading

{{ item.title }}

{{ item.read_at_display }}


{{ item.display_date }}


Copyright © 2014-2020 Ray Lam. All Rights Reserved.