Dirty Code – An Update

You might remember my little hack to sort list elements by their values:

TreeMap<Double, Integer> tree = new TreeMap<>(Collections.reverseOrder());
for (int i = 0; i < customerNumber; i++) {
    tree.put(requirement(i) + Math.random(), i);
List<Integer> orderedCustomers = new ArrayList<>(tree.values());

After a lot of research, I finally found a more elegant solution. First of all, I’m using a PriorityQueue instead of a tree. PriorityQueues allow duplicates, which is preferrable in this case since values are not guaranteed to be unique. Secondly, implementing a custom Comparable ensures a clear and readable structure.

class Element implements Comparable<Element> {

    private final int key;
    private final int value;

    Element(int key, int value) {
        this.key = key;
        this.value = value;

    public int compareTo(Element anotherElement) {
        return compare(getValue(), anotherElement.getValue());

    private int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);

    public int getKey() {
        return key;

    public int getValue() {
        return value;

That’s it. This solution is still too complicated for my taste, but at least it’s easy to understand.

Understanding Algorithms

I’m currently taking a class on algorithms. While practising a bit, I found a cool trick: Most algorithms are easier to read when written in Python instead of pseudocode.

Why? Pseudocode doesn’t follow exact rules. Python’s syntax is very similar to pseudocode, but strictly regulated. Also, most style guides and best practices focus on readability. Python code is predictable; you get exactly what you expect. That’s why Python is perfect for studying algorithms.

You don’t believe me? Take a look at the Euclidean algorithm:

function gcd(a, b)
    while b ≠ 0
       t := b;
       b := a mod b;
       a := t;
    return a;

Here’s the same algorithm in Python:

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

The second one requires less thinking, doesn’t it?

Of course, this trick also works on complicated, less famous algorithms. Continue reading “Understanding Algorithms”

Setting Up a Python Web App

Python is very well documented, but there are still some tricky parts when it comes to setting up a web app. This simple step-by-step guide might help you.

Step 0: Make a Project Folder

This one should be obvious.

Step 1: Create a Virtual Environment

Virtual environments allow you to install things for one project only, so you can easily keep track of all requirements for your app. Additionally, you avoid installing stuff globally.
You don’t have to use a virtual environment, but it is strongly recommended. It’s also very easy to set up:

  • If you haven’t done so before, install virtualenv with the command
    pip install virtualenv 
  • Create a virtual environment with the command
    virtualenv virtual_environment_name 

    There are two different recommendations where to create a virtual environment and how to call it:

    • call it venv and put it in your project folder
    • call it the same as your project and put it in a hidden .virtualenv folder in your home directory

    Just choose the method you like best.

Continue reading “Setting Up a Python Web App”

My First Web App

The holidays are here! This means that there is finally enough time to develop my first web app. Knowing how bad I still am at debugging weird errors and how little experience I have with frameworks, I prepared myself for a nerve-racking experience full of apparently insurmountable obstacles.

First of all, I researched a few popular python frameworks, services and tools to find the best options for me. Since I prefer lightweight and modern frameworks, Flask was an obvious choice. Flask also supports Jinja2 Templating out of the box, which is great. For deployment, I picked Heroku because it seems to be quite beginner friendly.

Continue reading “My First Web App”

MVC and Observer Pattern

Since I’m working on a rather small project, I decided to implement a simple version of the Model-View-Controller pattern. Here’s the basic idea:

\_ model
:  |_ app.py
:  |_ data.py
\_ view
:  |_ res
:  |_ view.py
|_ main.py

In the package model there are two modules: data, which knows relevant data (e.g. letter codes), and app, which contains logic. The class app.App should be used for requests from other modules.
Code related to the look of individual views can be found in view.view. Image resources are saved in the subfolder view.res.

The program is started by executing main.py, which contains the Controller. It loads app and view, instantiates classes and connects Observers with Observables.

Continue reading “MVC and Observer Pattern”