Einträge über Computer (Ältere Einträge, Seite 22)

I had my first computer with 5 and started C programming when I was 13. Then I made some simple websites using PHP which grew into ever more complex ones. In 2007, I created some Java applications, some of them are still among the portfolio on this page. While I was an intern at the DLR, I started to learn Python and IDL, which introduced me to matrix based languages. For the numerical methods lecture and especially my bachelor’s thesis I used C++. During my master’s thesis I have learned Haskell for fun. Later on for my PhD thesis I also learned R and the Wolfram Language.

See my portfolio of programming projects.

My most popular hobby project is the Vigilant Crypto Snatch, a little program that buys crypto currency whenever the prices fall.

This section of my site is for articles about programming practices and performance tests. Also various stuff about computer hardware and software.

Markdown Headings and Titles

Markdown is a great way to format notes, blog posts, a diary, articles, forum posts or even dissertation chapters. There are many tools out there to convert Markdown into other formats like HTML, LaTeX, DOCX or BB-Code.

There is also agreement that a heading with # should be converted to a <h1> tag, a ## heading to <h2> and so on. Markdown has its roots in HTML, so it makes perfect sense. For LaTeX one has to specify whether # is supposed to be a \section or rather a \chapter.

What creates most friction for me is the handling of document titles. Markdown likely wasn't thought of as a whole-document markup language, but it is widely used like that. There are three dominant ways to specify the title of a document.


Jira Isn't as Bad as I Thought

I used to hate Jira with a passion. And I still dislike Confluence, see my rant. But lately I have realized that most of my hate actually comes from my misunderstanding of it. It turns out to be quite the useful tool, but you need to have the right use case for it. Otherwise it will be plain agony.

For all my open source projects, I just use GitHub to host them. And there I also have the “Issues” feature, where one can track bugs and ideas. GitHub Issues are really simple, they just have two states, “open” and “closed”. They don't have much metadata, they have a free-form Markdown field. You can optionally add tags, add a milestone and assign multiple people to each issue. When it is done, it gets closed. There are two tabs, one for open, another for closed issues. In the search one can also include the closed tickets.

This makes GitHub Issues really easy to start with. One can just create an issue, write a single sentence for the body and leave it there. There is no need to assign it to somebody, no need to triage. For small projects, the number of open tickets is very small, so there is great overview. And because the closed tickets get hidden in the “closed” tab, they don't clutter the main view. It is easy to figure out what to do next.


Vendor Lock-In bei EPOS Headset

Für Videokonferenzen habe ich ein Headset bekommen, und zwar ein EPOS IMPACT SC 75 USB. Sennheiser hat seine Headsets an EPOS verkauft, die machen das aktuell im Co-Branding. Das Headset selbst hat einen Klinkenstecker, und dabei ist noch eine USB-Soundkarte, die unten eine Klinkenbuchse hat. Irgendwann hatte das Headset dann einen Kabelbruch, ich wollte dann ein anderes Headset anschließen. Das ging aber nicht, der Stecker wollte nicht so richtig.

Dann habe ich mir die Buchse mal ganz genau angeschaut:

Die hat extra so dreieckige Verengungen, damit da nicht einfach jeder normale runde Stecker reinpasst.


Störungsserie bei Unitymedia mit verblüffender Ursache

In meiner alten Wohnung war ich 2014 bei Unitymedia. Damals hatte ich eine Störungsserie, die ich bisher noch nicht hier im Blog geteilt hatte. Es war eine Geschichte, die sich über Monate hingezogen hatte. Ich hatte einige Technikereinsätze, und am Ende konnte nichts gefunden werden. Dann bin ich von Unitymedia weg und habe Internet per DSL bezogen. Jahre später wurde etwas in der Wohnung an den Coax-Kabeln erneuert und der Elektroker stellte verblüfft fest, dass die Verkabelung nicht für Hochfrequenz ausgelegt war. Aber der Reihe nach.

Unitymedia hatte damals so einen Modemrouter von Technicolor ausgeliefert. Das Teil sah schon nicht sonderlich seriös aus. Dann war die Software darin extrem beschnitten. Es gab zwar eine Option für einen Bridge-Modus, man konnte die Einstellung nicht speichern. Da die Dual-Stack-Lite nutzen, und das Modem jedem DHCP-Client nur ein /64 Subnetz rausgibt, konnte man auch keinen weiteren Router dranpacken. Das war schon alles ziemlich unbefriedigend.

Dann kamen immer wieder Ausfälle. Der Modemrouter war noch an, man konnte auch die interne Konfigurationsseite aufrufen. Man kam aber nicht ins Internet. Wenn man das Gerät aus- und wieder eingeschaltet hat, ging es aber wieder einige Zeit. Diese Störungen hatte ich dann einige Zeit dokumentiert.


Adding Fear & Greed to Vigilant Crypto Snatch

In my Vigilant Crypto Snatch project I have spent quite some time in improving the architecture of the software such that further changes would be much simpler. At the time I did not have a backlog of new features, so I just tried to add more tests. This then forced me to separate a few things, improving the overal design.

Today somebody has asked whether the Fear and Greed Index could be used as an additional decision element. And given the clean architecture of the software, it certainly is possible! In this article I will show how it easy it was to include.


Making Adapter Code More Testable

Part of my Vigilant Crypto Snatch project are the marketplaces. The most popular is the Kraken one. I use the krakenex Python library to interface with that. In the UML diagram you can see how the KrakenexMarketplace directly uses the krakenex library:

In order to instantiate the KrakenexMarketplace, one needs to supply the API key. One does this via the KrakenConfig, which is just a data class that contains the API key and associated secret.


Component Facade without Incomplete Imports

My current hobby Python project is the Vigilant Crypto Snatch. This has grown to a size which made me refactor it a few times by now. Recently I've refactored it towards the clean architecture. I have introduced a two-level module structure such that I have components like configuration, marketplace, telegram and so on.

In a very reduced way, each of these components contains interface classes, concrete implementations and factory functions. They are then used from outside. This is what the dependency graph looks like (made with PlantUML), although I cannot show free functions in UML:

There are a few ways that one can do the import statements in Python. And I have been bitten by cyclic imports and got frustrated about that. When searching the web for cyclic imports in Python, one will find many articles about dumb incarnations of the problem. Somebody really has a cyclic dependency in their components, and then there is no way to get it right. But with Python one can get cyclic imports even when one doesn't have cyclic dependencies. And this is what this post is about.