Posts

  • Creating a tiny C++ task library

    Tasks are a popular concurrent programming mechanism. It allows decomposing a computational problem into a set of isolated sub-problems, i.e. tasks. This decomposition exposes the underlying parallelism of the problem. Meaning that at least some tasks can be executed in parallel, and without any explicit synchronization.

    This post covers the design and implementation of a very simple yet useful task library.

  • Data Flow Analysis. The (homework) interview problem.

    This is another problem I was asked to solve at home. The company worked on a static code analysis tool and I were to work on the Data Flow Analysis (DFA) part. The problem was a miniature static analyzer with a very basic DFA diagnostic.

  • Receiver. The (homework) interview problem.

    I was changing jobs recently and in the process had quite a few technical interviews. In addition to the interview problems asked on the spot, several companies also asked to solve test problems at home. These problems required more time to complete, but were much closer to what programmers actually do at work, in contrast to the typical implement-the-quick-sort type of interview problems.

    Here I want to share one of such problems, together with a solution. It took me about 3 hours to complete, and I enjoyed solving it.

  • C# quirks

    No language is free of quirks. Here I have a few C# quirks that I came across recently.

  • Cryptography in license verification routines

    In the last post I touched upon the possible uses of cryptography in the license verification routine of shareware applications. In this post I will discuss the common use cases and give some recommendations.

  • PostScript and the bad IDEA

    The strength of cryptography doesn’t only depend on the algorithm selected. It is mostly how cryptography is used that is important. Here I examine an application that made use of a cryptographically strong algorithm in its license verification routine, but due to mistakes made during the implementation, it was possible to circumvent the cryptography.

  • Bit Swizzling

    Here I want to show how low-level bit manipulation can lead to curious results in the memory layout of 2D matrices.

subscribe via RSS