• +43 660 1453541
  • contact@germaniumhq.com

Tagged: development

How to Create Qt5 Python Applications Using PySide2

When doing GUIs in Python, I always see tutorials on either TkInter or PyQt5. Most people don't realize that "The Qt Company" (that's their name, really) has their own API, called PySide2, and it's trivial to use. Let's explore how.


Read more

Architecture, Customer Value, and Integration Tests

I had an interesting discussion today that I think is worth writing about. I mentioned having a problem with having a very fat component in a system since integration tests usually become a nightmare. The idea was raised that architecture should not be driven by integration tests, but rather by customer requirements and value. While at face value, this seems intuitively correct, is that so?


Read more

Errata on Better Closures

This article is an errata to the previous article I just wrote. Why? It turns out I was wrong in stating that ordinary objects would be better than nested functions. How do I know? Benchmarks. Let's see them now.


Read more

Better Closures in Python Using Regular Objects

If you remember, a while back, I've run into an issue regarding creating callbacks that were bound to the local context. Namely, the garbage collector pressure, and memory usage, since these functions are invisibly linking to the previous stack frames. I found an easy pattern to break these links down, using regular Python objects.


Read more

Vim Auto-Formatting for Asciidoc and Markdown

When writing a Markdown file, or an Asciidoc, you might want to use the vim formatter, to do automatic text wraps. You type gq to call the formatter, and the text splits and wraps correctly. Oh, wait a minute, now all the lists are broken. Now what?


Read more

Python: Fighting the Invisible Memory Thief

I noticed that when processing a lot of events, adhesive would significantly slow down. I always assumed it was because of the way the processing created the execution tokens - with new callbacks tied to each execution. It's all clear now what was going on.


Read more

Using Boundary Timer Events in Adhesive BPMN

When having a critical long running task, it's imperative we get immediate feedback on things that run longer than they are allowed. With the new Timer boundary events, that's trivial to model.


Read more

Force Named Argument Calling in Python Revisited

If you remember the last article on how to force function calling, by always specifying the argument names in our previous article, we were going with an *args argument that captured extra junk. Turns out there's an easier way. Simply use *. Unbelievable!


Read more

Creating REST Endpoints Using BPMN Messages in Python

Sometimes we just want to process events that arrive from an outside system, but still model these in an BPMN process. BPMN natively supports that representation in the form of input messages starting events. We'll be wiring Flask to stream messages directly into the process using the message_calback function.


Read more

Managing Microk8s and Regular Clusters by Merging Configs

After we install the snap of microk8s, we notice that the default .kube/config is not there, furthermore we need to use the microk8s.kubectl binary to access it. One option is aliasing the kubectl to microk8s.kubectl, but that has its own drawbacks, such as not being able to use it in scripts. Furthermore if we already have a .kube/config we'd want the configs to be merged. So how do we achieve that?


Read more