Robert's blog

Why DIY is almost always better

I am usually talking about programming, but today I am going to write about something as mundane as home repair & maintenance. I am writing this, because everyone on the Internet seems to shun DIY (do-it-yourself) while in my experience DIY is clearly superior.

The immortal tech-savvy authoritarian state

Democratic revolutions might well be a history by now. Technology lets authoritarian states detect and suppress dissent before it gains any traction. Automated secret service monitors every word and every real-world action of every citizen. Prototype devices detect lies during interrogation and even monitor thoughts.

Secure messaging apps

Instant messaging (or chat) security has advanced considerably, but it's still hard to pick something really secure. Here I go through the available options as well as the reasoning behind their design. The good news is that secure messaging is finally an (almost) solved problem and you even get to choose an app by personal preference.

Scripting as a programming paradigm

Scripting is not a language feature. It's a programming style that may have some language support. Scripting is the opposite of software engineering. Script is designed for a single task, often a single run. It is used by its own developer and frequently relies on his manual intervention.

Why is the world crazy?

This is not your typical curiosity list. This stuff is deeply disturbing. I put it up here as a stark reminder. I don't want to offend you, but I probably will. You have been warned. I don't want to scare you. I am just documenting reality. If you would rather learn what's new in the royal family, go read one of the billion or so infotainment blogs instead.

26 productivity tips for software developers

Remember the saying about the chain being only as strong as its weakest link? When it comes to software projects, you can make the right choices most of the time, but the one thing you do wrong will still cost you an order of magnitude loss of efficiency. And people usually err more than once...

High productivity development stack

Too much code to write and too little time to spare? I was facing the same problem in my work and hobby projects. Take a look at how I do things today to save time and maximize value of my work.

Zero-knowledge file sharing

Times of shared folders in Windows are long gone, fortunately. DropBox was easy and Internet-wide, but then NSA spoiled the fun. A rainfall of zero-knowledge services ensued and today the problem is choosing the best one for the job at hand.

What's in a good software library?

High-level advice on API design from author of several opensource libraries and a seasoned developer.


Attempts to stop adblockers are futile. People, who attempt to do that, don't realize they are facing a determined enemy.

Can I trust your app?

If you are very paranoid about security, what can you really trust? Is there anything you can trust at all?

Who needs partition tolerance anyway?

So much effort is poured into partition tolerance in databases, it is worth stopping and thinking about alternatives.

How to kill high-frequency trading

High-frequency trading is not necessary. It's not even useful. There are ways to stop this waste of resources. Here's an example solution.

How to setup high availability configuration?

Short review of readily availablredirectse high availability options for enterprise developer, including cloud, HAProxy, keepalived, virtual IP, and DNS.

ColoredImage in JungleControls

Easily generate colored variations from grayscale mask using ColoredImage XAML control from JungleControls WPF library.

Anchor WPF Popup exactly where you need it with PrecisePopup

PrecisePopup is a smart popup for WPF that can open in multiple relative positions depending on how much space there is around it on the screen.

Server-side RIA framework

RIA doesn't need to be client-side. Server-side, if properly implemented, actually offers huge advantages to developers and end users alike.

DataPipe: Pushing read-only dependency properties to view model

Expose read-only WPF properties, especially ActualWidth and ActualHeight, to view model via DataPipe attached property.

Collection properties for Assisticant.Facades

New version of Assisticant.Facades lets you parameterize your WPF controls with collection dependency properties with the same ease as with scalars.

No more DependencyProperty with AutoDependencyProperty.Fody

Fody plugin that eliminates those verbose dependency property declarations in WPF controls and replaces them with single attribute.

Easy WPF control authoring with Assisticant.Facades

Gone are the days of painstakingly defining controls with dependency properties and event handlers. You can now use Assisticant in custom controls.

Expose WPF control to view model III

Gain access to WPF controls from view models where needed. While admittedly an ugly practice, it is sometimes easier that fixing the offending controls.

LazyControl in JungleControls

LazyControl lets you load WPF content on demand. It is an alternative to virtualizing panels for complex layouts.

DelayedContentControl in JungleControls

DelayedContentControl loads its Content lazily when required for rendering. It's more efficient and less noisy than standard ContentControl.

Expose WPF controls to view models II

Access controls from within view model by adding a bit of code into window constructor. It's ugly, but it's sometimes necessary.

SelectableTextBlock in JungleControls

WPF TextBlock doesn't support selection, which is needed in some applications. SelectableTextBlock control offers a workaround.

StatCounter in JungleControls

Nice, visually compact numeric stats control for WPF with support for labels and units. It can be used to build dashboards.

PropertySheet in JungleControls

PropertySheet WPF control implements traditional Windows property sheet with labels on the left and content on the right.

JungleControls: Free WPF controls for your app

Assorted WPF controls including property sheet, selectable text block, stat counter, intelligent popup, color filter, and technical controls.

Dynamic vs. static languages

Why everyone gets it wrong when arguing for dynamic or static languages. It's all about the tools, but it's not that straightforward.

Expose WPF controls to view model via attached property

Access WPF controls from view models by adding concise attached property to XAML. It's a bit hacky, but it does the job where necessary.

Numbers in fingerprint recognition systems

Beginner introduction to common fingerprint recognition terms like 1:1 and 1:N, FAR, FRR, and EER.

Speed of fingerprint recognition doesn't matter

A few back-of-the-envelope calculations show that overoptimizing fingerprint matchers is useless and brings no benefits to end users.

Userbase never grows quickly

Avoid optimizing for heavy loads. Actual service usage grows so glacially slowly, you will have plenty of time for optimizations later.

Business vs. engineering excellence

It's more accurate to speak about business through engineering excellence since the two go hand in hand. False 'tradeoffs' are a mistake.

Printable Montessori color cards

Downloadable Montessori color cards in PDF and SVG format. Print them and cut them to get budget alternative to the wooden Montessori original.

Pinpointing application security issues

'We will be careful' is a really inefficient and usually also ineffective approach to security. It's better to place focus only where it is most needed.

How to route server traffic through VPN

Short guide on how to connect to a server in the cloud via VPN without getting lost in details of setting up a full-blown enterprise VPN.

Which programming competitions are worth your time?

Veteran competitive programmer's advice on the best, not necessarily the most popular, programming competitions to invest yourself in.

What's wrong with The Lean Startup?

Startups as an optimization problem is a nice abstraction, but there are better ways to optimize than continuous fine-tuning through thousands of micro-optimizations.

How to publish self-hosted video

YouTube is not the only option. It's surprisingly easy to self-host your videos. Codecs are an annoyance, but there is a free solution here too.

Why are software libraries so bloody expensive?

Commercial libraries aren't necessarily (or even usually) better than their opensource equivalents. The difference is in support and in customer nature.

The surprising architecture of future applications

If you think the future is in JavaScript, you are mistaken. 'Downloading the universe' to the client is an old problem from the 90's that has a very simple solution.

Google search sucks or why creating better search engine is easy

Google is the new Microsoft. It's all about cash and remarkably unconcerned about customer experience. It's not that hard to launch an alternative.

Outbound firewall rules any good?

Inbound firewall rules are obviously useful, but is there any reason to setup outbound firewall rules, on client or server?

Creating perfect toddler games on Android

As a dad, I am a bit frustrated with the offering of toddler games on Android. The ideas behind the games are usually nice, but the games cannot survive 5 minutes of testing by children. You can use this checklist to audit usability of your Android game.

Why buying better hardware doesn't help anymore

If you are in the market for new hardware or software, it's efficiency you are looking for, not features or glamour.

How (not) to win CodeChef Long Challenge

Valuable advice from veteran competitor who almost won the 1st place. Every game has rules and there's always a way to win a game with rules.

Smartphones: 90s déjà vu‎?

There's a reason why the world dumped desktop apps in favor of the web in the 90's. It looks like smartphone app developers are repeating an old mistake.

Android child locks

Tech-savvy dad is testing and reviewing several Android child locks including Kids Place, Zoodles, Kid's Shell, and some unexpected alternatives.

How to write custom NLog time source

A short guide through building custom NLog time sources. We will build a time source with configurable time zone as an example.

How to configure NLog time source

A quick tutorial for the new NLog time sources, including XML and C# configuration. Overview of all four built-in time sources.

NLog timestamps with millisecond accuracy

What was wrong with the old NLog timestamps? Why was the new time source API needed? Because timestamps are important and not everyone was happy with them.

Open plan office scares away creativity, kills productivity

Damage to productivity by open plan office is a well established fact. My point is that open plan office has profound impact on creativity as well. And it's not caused by the noise.

Building awesome opensource projects

This is the story behind SourceAFIS in case you were wondering why would anyone build opensource fingerprint matcher. I happened to do many things right back then, so perhaps there is something to learn from the story.