Hi, I'm Timothy Klenke

I am a software developer in Edmonton, Canada.

I like Simple Design, Test Driven Design, Domain Driven Design, Pair Programming, Automated Testing, Continuous Delivery, and long walks on the beach. Well maybe not that last one (sand gets in the keyboard).

I primarily work on on the C# and Python stacks. I'm skilled in TDD, SQL Server, code reviews, mentoring.

Projects include web applications, SaaS applications, business to business interfaces (e.g. SAP & ERP Interfaces), developer tooling libraries.

Bachelor's of Computing Science, University of Alberta. MCSA Web Applications

Hobbies include camping and poker.

The Blog

I've been blogging since 2013. It started as a New Year's resolution to blog twice a month for 2014. I made it to September, which is better than most of my other New Year's resolutions.

Now I just blog when I get the urge. Usually a couple times a year. The tag line for the blog is "Code Monkey Projectiles".

The Code

This is a code generator that takes a standard C# enum code and outputs a strongly typed enum class.

The strongly typed enum design pattern is an derivative of the Singleton and Multiton design patterns. A Singleton allows for a single instance of a class. A Multiton allows for a very limited number of instances of a class.

An enum is very much like a Multiton where only a very few possible values exist. But C# enums are primitive values, not classes. The strongly typed enum pattern creates Multiton classes that can be used like enums. However they have the full power of classes: supporting static and instance methods, properties, operator overloads, inheritance, and anything else true classes can do.

This is a handy little utility that can be installed with the Windows Explorer Send To menu. It copies the full path to the clipboard in both plain text and HTML formats. If pasting into an HTML or rich text editor the path is a clickable link for both the path and file. This is very handy for emailing a colleague a path to a network share.

Retail

Architecture Example

This is companion code to my The 17-Layered App blog post. It is a full example of how to implement fully separated data and business layers.

It is not my only repo with examples of how to separate concerns. Also check-out my Hitchhiker's Guide repo. That is some code I used to present at the .NET User Group for my presentation on Dependency Inversion Principle. In the presentation I take a very badly designed ball of mud application and refactor it to separate out the UI, then the business and data layers. The data layer is a simple file system.

I used the same Hitchhiker example (different branch) in another presentation I did on Seq and analytics. I wanted to show how easy it is to merge log messages from a client, server, and other layers of a distributed architecture. Because of the separation I already did in Hitchhiker it was very easy to swap out the file system data layer with a client/server.

These are the code examples that accompany my 5 part blog post on implementing notification patterns using Reactive Extensions (Rx).

Tic Tac Toe

Kata

One of the things I do when learning a new programming language is to implement a familiar problem, namely Tic Tac Toe.

Available in:

My Code

My Values Statement

  • I will empower all those whom I work with, which will foster trust and respect.
  • I will provide value to my customers and employer.
  • I will deliver software with the utmost quality.
  • I will continue to improve and learn.
  • I will do all of the above in a sustainable way.

My Passions

I love Test Driven Development. Time flies when I'm working on TDD; it's when I feel I'm at my most productive. I love developing code to Kent Beck's Four Rules of Simple Design:

  1. Tested. It works. Read More...
  2. Single Source of Truth Read More...
  3. Expressive
  4. Small Read More...
I love to mentor people on writing clean, simple code. This includes code reviews and discussion forums. I enjoy discussing optimal coding practices to yield software that is the lowest cost to maintain.

I also love working on software design. I enjoy the collaboration working with my colleagues and clients. I find it very energizing working together explore the best design possible.