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.



As you might have noticed, I’m still working on a few unfinished projects. Nevertheless, I needed to squeeze a new one in: The final homework for my visual computing class.

The instruction was simple: Use blender and model something. Sounds easy, but we are talking about a beginner’s class. Most students haven’t really used blender before, including me. So luckily, nobody expected amazing art from me. After all, the exercise was meant to help students to get to know the program a bit better.

I decided to model things I keep on my desk:

Continue reading “Homework”

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”

Time to Start Blogging.

Hi! I’m Mailea. About a year ago, I enrolled at TU Vienna to study informatics. In order to get more coding experience, I work on personal projects as well. Whenever I realize I’m especially bad at something, I try to find tasks to help me improve in that area.
That’s where this blog comes into play: I noticed that I’m having a very hard time writing descriptions for my projects. I really need to get better at writing English texts! For this reason, I’m starting to blog.

Blogging also offers another important advantage: By documenting my progress, I’ll be able to analyze what works for me and what doesn’t. Maybe this will help me avoid typical mistakes and improve faster.

What I’ll Be Writing About

Most posts will be about current projects, ideas and problems I run into. However, I also want to blog about a few other topics, e.g. my hobbies or interesting articles I find online.

Let’s get started!