Custom WndProc Handlers in WPF • Oleksii Holub
WndProc is a callback function that takes care of system messages sent from the operating system. Unlike WinForms, in WPF, it’s not directly exposed to you as it’s hidden beneath…
WndProc is a callback function that takes care of system messages sent from the operating system. Unlike WinForms, in WPF, it’s not directly exposed to you as it’s hidden beneath…
Almost a year ago, I started developing YoutubeExplode, a library that scrapes information on YouTube videos and lets you download them. Originally, my main motivation for developing it was simply…
I’m sure that everyone with at least some background in C# is aware of extension methods — a nice feature that lets developers extend existing types with new methods. This…
So if we can’t use regular expressions to build these syntax trees, what should we do? Parser combinators There are many approaches for writing parsers for context-free languages. Most language…
Two months ago I wrote an article about Monadic Parser Combinators in C# and how you can use this approach to express complex recursive grammar. To extend this topic a…
Expression trees is an obscure, although very interesting feature in .NET. Most people probably think of it as something synonymous with object-relational mapping frameworks, but despite being its most common…
Above everything else in software development, I really enjoy building frameworks that enable other developers to create something cool. Sometimes, when chasing that perfect design I have in mind, I…
The importance of testing in modern software development is really hard to overstate. Delivering a successful product is not something you do once and forget about, but is rather a…
Two months ago I published an article detailing why I think that Unit Testing is Overrated, which seemed to resonate quite a lot with readers, prompting very involved and interesting…
The primary purpose of software testing is to detect any potential defects in a program before it reaches its intended consumers. This is typically achieved by establishing functional requirements which…