MoloVol is a software tool for a particular problem of theoretical chemists or biologist [1], that was released a year ago with a recent accompanying publication in the Journal of Applied Crystallography. It was developed by my friend Jasmin Maglic, whom I supported during the development. We just release the web version of that tool. One might ask since when I am working on chemistry software since my background nor my work is in the area of chemistry?

My work for many years on my game engine and game Caveland had a profound impact on me. It gave me incredible software engineering skills, but also showed me the amount of energy which can go into something, which does not last. I am hesitant to work on big projects now. I still have a deep desire to build things. This might be a personal thing but I think it is a trait that many men share. Many men also share the need to watch construction workers from the side and to the worker's suffering also comment on it and know everything better. I saw my friend build MoloVol and felt the same urge to comment and know everything better.

MoloVol was envisioned as an easily accessible cross-platform desktop-based application. I love desktop applications but I also have built my fair share of web tools and know the benefits of them (which is mainly no installation required). I saw the potential in MoloVol to become even easier to use, but just because I have some idea it is not going to become reality. Hence I went and created a proof of concept.

When I was in school I used the early internet in the 2000s for research to some homework. Sometimes you would find some tools that could help you do some calculations. They were simple HTML forms on websites with the aesthetics where a colourful pattern was repeated on the background, and the page was built using frames. This tool is my homage to this time and feeds on my nostalgia. I have worked in the area of web development before but it was always commercial, games and hobbies tools or university assignments. This tool should be used by real scientists. Hence we added some nice style sheets and added UX improvements. In that sense, we did a modernised version. We hope that the tools help scientists to do their work.

Bildschirmfoto%202022-08-15%20um%2019.48.55 The first challenge was making the GUI application work with the command line. Compiling was difficult because the GUI library wxWidgets was expected as a dependency and I had issues installing it. WxWidgets is responsible for handling the arguments so it could not be left out of compiling the application without it. Luckily docker solved the issue of reproducible builds. I managed to create a dockerfile that compiles the dependencies and then the application (more adventures with dockerfiles in my last article). With the docker file, you can compile it on every machine. Using a fake frame buffer the application can run in headless mode, meaning that there is no rendering to a screen. Now that I could compile the application and run it in headless CGI mode, the next step would be to create a REST endpoint. By wrapping Python flask around a call to the subprocess you can simply provide HTTP support without touching C++ code and embedding a Webserver. For serving you can use Nginx which talks to the development flask web server [2]. When the client sends in a request with the HTTP accept header that it accepts HTML I serve a simple HTML form and voila, the web tool is running in your browser. This deployment is cheap and can run on a virtual host compared to other options e.g. running it on a Kubernetes cluster.

[1]: calculating surfaces, volumes and cavities of molecules

[2]: For better scalability, security etc. a wsgi or asgi server like Daphne should be used instead of the flask development wsgi server. There might be a docker image that provides all this, where you just set the flask application path.

I was recently asked what I use my NAS for. Let me explain why it might become an essential piece for your home IT infrastructure. I recently bought a QNAP NAS (TP-231P3) to solve the issue of having multiple computers but no central place to save the data. The time machine backups run silently in the background without the need to plug in disks. Libraries like movies, picutres, music and book are centrally accessible. You also have a central source for extensions of your smart home. To put it in a nutshell, a NAS can be one central building block of your personal AI assistance . A typical and cheap solution for all this needs is to buy a raspberry pi. By default it uses the sd-card for storage which is not durable and has slow read and write performance. You can use an external drive but all in all it is much more confortable to use an existing system. I also thought that the option to have 2.5 Gbit/s ethernet would be future proof and I was about to lay down cables in my new flat anyways. First I thought that changing the cat 5e ethernet cables (max 1 Gbit/s) to cat 6 is enough. Turns out: 2.5 GB/s needs more power and also dedicated hardware which is quite expensive (cheapest options ca. 109 €, cf. 1 GB/s for 19 €). The unexpected thing is that wifi is potentially faster than Ethernet allowing 1.3GB/s with 802.11ac ("wifi 5"). Unless you really need the speed or plug your computer directly to the NAS save the money.

This mid-level model allows to run containers. Neat. So I can quickly deploy any software which has been put by others or me in an image. Docker is often advertised as a software which solves the problem of the developer saying 'works on my machine' but on another persons machine it does not work. Unfortunately this holds only for machines using the same instruction set. Docker is not a virtualization tool. Code runs directly on the kernel (on mac it needs a VM to emulate linux).

Unfortunately this comes with a catch. While arm processors a heavily used in mobile hones they are now used in server, desktop computers and other computers like NAS. The NAS is using an arm32 processor so images built on an intel computer won't run.

Here is a guide how to run your own containers.

1. Install "container station" on your NAS.


I tried loading the built image directly using the import tool. However it failed and there were not helpful error messages.

2. Running a hello world

I tried running the hello world image by importing it. I had previously loaded it on my machine and exported it using docker save hello-world -o helloworld.tar The import completes but when you then create a container from it, it fails with "exec format error". The same issue happened when you download it via the image browser. There is a platform specific image called "arm32v7/hello-world". However it does not appear when you search for that. By using docker compose with anystring: image: "arm32v7/hello-world"

and giving it a title without dashes you can run it. Bildschirmfoto%202021-11-22%20um%2013.34.22

3. Build your own image for ARM32

In my example I use the linux distribution ubuntu as the base image using the arm32 build.

As soon as you run the dockerfile if fails when executing RUN steps. Which was solved with sudo apt-get install qemu-user-static

This will make it run on an reactOs virtualization. Because of the virtualization compiling is super slow and it is only using one CPU core.

You can then use buildx, dockers experimental build tool to build for a different or even multiple platforms in one image. The software I built is based on ubuntu as the base image. The official ubuntu base image is not a multi-platform image, so I specified a different base image for arm32v7 in a second dockerfile. So now I have different dockerfiles (here Dockerfile_arm) which makes the command to build and deploy to dockerhub result in this: sudo docker buildx build --platform linux/arm32v7 -f Dockerfile_arm -t bsvogler/molovol:latest --push .

For my image I needed the wxwidget installed. AFAIK there are no wxwidget binaries for linux, so you have to compile them yourself in the image. Literally 2.1 hours later.... It needs the rust compiler to use python poetry. In the end I succeeded in running this a custom service on the qnap.

tl;dr: If the image supports arm32, and most popular images should support it, it is rather easy to deploy services at home. If not, it is still possible but you need some more time for building your own images.

In vorherigen Arbeiten skizzierte ich die Möglichkeit einer führenden Künstlichen Intelligenz (KI)-Assistenz und die nötigen technischen Voraussetzungen für eine persönliche Assistenz. Nun wollen wir diese Betrachtungen der KI um die Implikation für die Ideen der Aufklärung erweitern.

Mündigkeit nach Kant

Selbstverschuldet sei der Mensch unmündig, wenn er nicht den Entschluss und den Mut fasse, sich seines Verstandes zu bedienen, so Kant im Jahr 1784. Der Ausgang aus diesem Zustand sei die Aufklärung, führt der Philosoph in seinem, für ihn im leichten Stil geschrieben Aufsatz „Beantwortung der Frage: Was ist Aufklärung?“ aus.

Mündigkeit, also die Verwendung des Verstandes zur Selbstgesetzgebung, ist für Kant Freiheit. Allerdings erkennt er auch an, dass Menschen ihre Unmündigkeit und damit Unfreiheit lieb gewinnen können. Kant erklärt ausgehend von der Mündigkeit (als absoluten moralischen Wert a priori) diese zur Maxime. Es ist aber die Freiheit, auf deren Weg die Mündigkeit liegt. Mündigkeit ist kein absoluter Wert a priori, sondern ein Zustand, der bei Erreichen einen Freiheitsgewinn verspricht. Die Frage der Mündigkeit zielt auf die Gesetzgebungskompetenz. Die Aufklärung bringt mit der Mündigkeit daher auch die Voraussetzung für die Demokratie, denn herrschen kann nur der, wer mündig ist. Mündigkeit zu erreichen, ist allerdings nicht garantiert. Komfort und mangelndes Selbstbewusstsein können Ursachen sein, allerdings kann es auch rationale Gründe geben. Durch einen selektiven Verzicht der Mündigkeit kann der Verstand an diesen Stellen erweitert und damit individuelle Freiheit gewonnen werden.

Mündigkeit im neuen Kontext

Der Mut, sich auf die eigene Vernunft zu beziehen, beinhaltet den Zuspruch zu einer von uns für richtig befundenen Wahrheit, also eine Erkenntnistheorie. Am Anfang steht das Problem, dass die Welt „an sich“ nicht erfahrbar ist. Über unsere Sinne werden Informationen zu Vorstellungen, die wir dann durch Zuordnung beurteilen und denen wir einen Wert zuweisen. Durch diese Wertung erhalten die aus den Wahrnehmungen generierte Erkenntnisse Wahrheitswerte. Die Wissensbasis beinhaltet Dinge, die wir für wahr erachten. Wenn von Vernunft gesprochen wird, wird hier, insbesondere bei Kant, meist das Werkzeug der Inferenz gemeint, um neue Erkenntnisse, also Wahrheitswerte, auf dieser Grundlage der Wissensbasis zu generieren. Wahrheitswerte entstehen, wenn die Genese eines Prozesses beschrieben werden kann oder aus der Logik. Die Sicherheit über die Korrektheit unseres Wissens ist also, sofern von einer Korrektheit der Inferenz ausgegangen wird, entscheidend für den Wahrheitswert der generierten Erkenntnis. Das die empfundene Wahrheit nicht immer ein Abbild der Wirklichkeit ist, zeigen logische Trugschlüsse wie ad hominem, oder Cherry-picking. Genese Die Frage der Geltung, also ob das eigene Urteil besser (zu einer kleinen Betrachtung von Urteilen kommen wir später erneut) sei, ist für Kant nicht sehr relevant, da als Maxime sich diese Frage nicht stellt. Im Prozess der Regelfindung trennt Kant aber nach einer öffentlichen und privaten Funktion. Der private Bürger müsse gehorchen, während der öffentliche Gelehrte widersprechen darf. Hier spiele der Adressat der Kritik die Rolle: Wird öffentlich zur Welt gesprochen oder befindet man sich in einer Rolle, wo gehorsam Voraussetzung ist? Diese Unterteilung hat heute den veränderten Kontext, da mittels Social Media jeder öffentlich in die Funktion eines Gelehrten springen kann. Im Alltag ist die Frage der Mündigkeit die Frage, ob eine Ansicht oder Handlungsempfehlung übernommen wird, oder ob man sich auf seine Vernunft beruft. Kant bezog sich auf die empfehlenden Klassen der Gebildeten und Mächtigen.

Seit Kants Lebzeiten hat sich die allgemein verfügbare Wissensbasis verändert. Mit dem neuen Zugang zum Weltwissen führt der aufklärerische Gedanke zur Überschätzung der Vernunft. Etablierte Institutionen und Gelehrte verlieren an Wertschätzung. [1] Die freiheitsliebenden Leugner vom menschengemachten Klimawandel oder SARS-CoV-2 müssten nach Kant der aufgeklärte Mensch par excellence sein. Tatsächlich beruft sich manch ein Klimawandelleugner auf Kant. Die Entwicklung der Massenmedien und künstlicher Intelligenzen führten zu einem verändertem Kontext, in dessen Rahmen die Rolle der Mündigkeit erneut gestellt werden muss.

Effekte des Informationszeitalters

Im Informationszeitalter wuchs die Menge an verfügbaren Informationen so stark an, dass der Verstand diese nicht mehr verarbeiten kann und überfordert ist. Unter einer Spieltheoretischen Betrachtung ergibt sich aus einem Mehr an Informationen ein Vorteil gegenüber anderen Akteuren. Es siegen die Methoden, welche größere Informationsmengen verarbeiten können. Daher wird der Überforderung mit Hilfsmitteln begegnet. Aber auch aus der Aufklärung heraus entsprungen, beinhaltet der bürgerliche Bildungskanon die Lehre von den Methoden, wie wir Kognition externalisieren können, indem wir Schrift in Büchern und Heften sowie Taschenrechner, Skizzen und Diagramme nutzen. Wachsende Informationsmengen führen unausweichlich zur Entwicklung komplexerer und mächtigerer Werkzeuge, welche superieren, also Komplexitäten zusammenfassen und reduzieren können. So können wir rasch zu einer Vielzahl von Themen einen Überblick erhalten. Diese umfassende Informationslage ist oft nicht ausreichend erklärt und kann in der Interpretation auch überfordern wirken, da die benötigten Modelle eine gewisse Komplexität benötigen. Zusätzlich ist es möglich, zu Unmengen an Information zu Dingen außerhalb des des eigenen Einflussbereichs zu gelangen. Dies begünstigt das Erstarken des Populismus, da der Populismus einfache Modelle auf komplexe Themen anbietet. Die Psychologie zeigt uns immer wieder, wie anfällig wir für kognitive Trugschlüsse sind. Unser Erkenntnisgewinn ist voreingenommen von unserer Position in Herrschaftsverhältnissen (Standpunkt-Theorie), welche wir nach unserem Nutzen rechtfertigen oder kritisieren. Durch den Kontrast der vernunftgenerierten Beurteilungen mit aggregierten Daten kann das Urteil einer Prüfung unterzogen werden und Trugschlüsse aufgedeckt werden.

Das Individuum kann sich durch neue Technologien im transhumanen Sinne weiterentwickeln, allerdings bei parallel auftretenden gesamtgesellschaftlichen problematischen Nebeneffekten. Wenn der Mensch an seine Grenzen kommt und Maschinen hier übernehmen, können wir diesem Prozess aktiv zustimmen und unsere Mündigkeit bewusst abgeben? Was erwächst daraus?

Der Mensch legitimiert seine Sonderstellung im Universum durch seine kognitiven Fähigkeiten aus einem narzisstischem Bedürfnis heraus. Menschen sträuben sich deshalb gegen den Vorschlag, diese Fähigkeit anderen Lebewesen oder Maschinen zuzusprechen. Zusätzliche Unterstützung dieser Idee erfolgt durch die abrahamitischen Religionen, welche den Sonderstatus aus dem Buch Genesis, bzw. im Koran aus den Suren zur Schöpfung ableiten. Dies legitimiert Gräueltaten gegenüber nicht-menschlichen Lebewesen durch die qualitative Unterscheidung, obwohl dies dem herrschaftsauftrag in diesen Religionen widerspricht. Der Narzissmus befindet sich im anthropologischen Konflikt in der Umsetzung der Mündigkeitsaufgabe.

Warum Maschinen immer führen, aber immer einen Führer brauchen

Aus einer Intention heraus erschafft der Mensch Artefakte, wozu die Maschinen zählen. Maschinen können durch Informationsverarbeitung entscheiden und handeln. Da Maschinen qua Definition automatisch arbeitende Systeme sind, sind sie mit einem mehrheitlich unqualifizierten delegierendem Verhalten, ohne Existenzgrund, und daher innerhalb ihrer definierten Umwelt immer inhärent mündige Systeme. Kontextabhängig übernehmen sie so Arbeiten der führenden Klasse. Der Kontext ist und wird eine Frage der menschlichen Delegierung bleiben.

Die menschliche Urteilskraft benutzt Empathie – also das Lesen von internen Zuständen – und den Perspektivenwechsel. [2] Diesen können wir aufgrund gesammelter Erfahrungen durchführen. Dies ist uns durch die Ähnlichkeit der menschlichen Erfahrung und der Körperlichkeit ermöglicht. So teilen alle Menschen die Erfahrung der Geburt, Bindung zu einer Mutter, Aufwachsen mit Kindheit und Adoleszenz und alle Säugetiere teilen die Erfahrung der Körperlichkeit.

Alles Erkennen ist zugleich ein Werten. Die Wertung erfolgt auf der Wissensbasis, die im Falle des Perspektivenwechsels den menschlichen fern ist, aber zugleich auch auf der Überwindung der Limitierungen durch überlegende priors geschieht. Wie kann sichergestellt werden, dass die maschinellen Werte und die menschlichen übereinstimmen (human compatible AI)? Es benötigt also immer Menschen, die den Einsatz der KI-Systeme überprüfen. Erschwerend kommt hinzu, dass die Frage der richtigen Wertphilosophie auch für Menschen nicht abgeschlossen ist. Zusätzlich muss bedacht werden, dass, sofern nicht eingegriffen wird, ein KI-System nach positivistischen Prinzipien arbeitet und den Status quo repliziert. Dies unterscheidet sich nicht sehr von Demokratien, die mehrheitlich konservative Politik bevorzugen. Auch deshalb benötigt es Menschen in den Rückkopplungsschleifen.

Hinderlich kann dies jedoch sein, wenn die KI Systeme Entscheidungen treffen, die nicht nachvollzogen werden kann. Eine Entscheidung mag man nicht nachvollziehen können, sie ist aber die bessere – Ähnlich einem Kind, was lieber statt zur Schule zu gehen, den ganzen Tag fernsehen und Süßigkeiten essen will. Die Nichtbefolgung könnte dann wohlmöglich unethisch sein.

Der Nutzen der Mündigkeitsaufgabe

Der Nutzen der Mündigkeitsaufgabe ist auch ein pragmatischer, instrumenteller, wenn wir darauf vertrauen können, dass KI Systeme rationaler entscheiden, da mehr Evidenz superiert werden kann oder die Wissensbasis umfassender ist und damit die bayes’schen Wahrscheinlichkeitsverteilungen (priors) via transferierendem Lernen genauer sind. Dinge können sichtbar gemacht werden, die vorher unsichtbar waren. Neue Sensorik ermöglicht die Erfassung größerer medizinisch relevanter Datenmengen, was von Befürwortern unter dem Stichwort „quantified self“ beworben wird. Diagnosen sind durch KI-Systeme genauer, als ein einzelner Arzt sie erstellen kann. Behandlungsrichtlinien der Weltgesundheitsorganisation WHO erfassen häufig nur einen Parameter wie das Alter. Werden KI Systeme genutzt, können Diagnosen präziser erfasst werden, was einer Handlungsempfehlung gleich kommt, und direkter optimale Therapien erstellt werden. Die Nutzen durch die Mündigkeitsaufgabe erstreckt sich nicht nur auf medizinische Anwendungen. Mit dem Erreichen einer juristischen Altersgrenze ist die Bildung eines Erwachsen nicht abgeschlossen. Aus der Idee der Pädagogik entspringt die Erziehung des Menschen hin zur Sittlichkeit. Dies ist ein Prozess ohne Abschluss. Künstliche Intelligenz für die Massen bietet ein Werkzeug zur Ermächtigung und kann beflügeln.

Diese Idee, Technologie zur Überwindung der limitierten biologischen Natur zu nutzen, greift die die Kernidee des technologischen Transhumanismus auf.

Gesetzgebungsprozess im Informationszeitalter

Den Kontext der KI-Systeme und ihre Arbeitsweise benötigen eine gesellschaftliche Legitimation. Wir können Kant aufgreifen: Die öffentliche Debatte und Kritik soll an den KI-Systeme geschehen, privat sollte den Empfehlungen gefolgt werden. Um diese Öffentlichkeit für eine Debatte herzustellen, müssen die Algorithmen offen gelegt werden. Diese Anforderung gibt es zurzeit nicht. Die Schwierigkeit ist hier, Anreize zu Investitionen in die Entwicklung der Systeme bestehen zu lassen. Hierfür müssen neue Gesetze erlassen werden.

Statt das Individuum oder eine herrschende Klasse in die Verantwortung zu nehmen, über das eigene Leben zu verfügen, kann die Verantwortung auch auf das Kollektiv verteilt werden wie in der Sozialdemokratie oder anderen sozialistischen Entwürfen. Als Gegenentwurf zur Klassengesellschaft entwickelte man die sozialistische Theorie der Führung durch die Massen der Proletarier. Auch die Idee der autonomen Verwaltung versucht die Rolle der herrschenden Klasse aufzulösen. Die Mündigkeitsaufgabe wird durch den Massenentscheid bzw. des Basisentscheids legitimiert.

Neue Medien führen zu einem neuen Aggregationsprozess der Meinungen im demokratischen Diskurs. In der Moderne zeigte sich der starke Zuwachs der Bedeutung der massenpsychologische Effekte und der einhergehenden Reduktion der Rolle individueller Unterschiede im politischen Prozess. Mittels statistischer Methoden lassen sich solche Masseneffekte messbar machen und mittels kurzen kybernetischen Feedbackschleifen lassen sich automatisiert Umgebungen formen, die die menschliche Psyche ausnutzen. Propaganda lässt sich so mittels KI individualisieren. Auf die Vernunft der Massen im kybernetischen Kontext zu vertrauen, ist also falsch, da sie bereits den Effekten der KI-Systeme unterliegen.

KI Systeme im Kapitalismus

Auch zum Zweck der Machtsicherung werden in allen Ländern Möglichkeiten zur Überwachung der Bevölkerung gesucht (z.B. die US Crypto Wars). Intelligente kybernetische Systeme können hier als Regler der Meinung in der Bevölkerung in einem kybernetischen Stabilisierungsmechanismus dienen.

Im Kapitalismus ist Wissen eine Ware, die durch geistige Eigentumsrechte geschützt wird. Dieses Wissen umfasst die Architektur, Parameter und exklusiven Trainingsdaten der KI-Systeme. Die Systeme laufen aus Gründen der Anforderungen an die Hardware oft auf Firmenservern, aber auch um die gelernten Parameter vor Vervielfältigung zu schützen. Die Verwaltung der KI-Systeme durch private Unternehmen birgt Risiken aber auch Chancen. Hochwertige Aggregationen von Daten lassen sich oft nur durch einen erheblichen Aufwand erlangen. Frei verfügbare Daten reichen in vielen Fällen nicht aus oder können nicht von Individuen erlangt werden. Nur durch die kommerzielle Umsetzung ist dies möglich. Allerdings gelangen private Unternehmen so an intransparente Macht, ohne demokratische Legitimierung.

Die Frage nach der Kontrolle der KI-Systeme ist also vergleichbar zur klassischen Machtfrage im Kapitalismus. Der Sonderstatus der KI-Systeme als führende Entitäten fordert konzentriert den Bedarf zu eine demokratische Legitimation heraus. Neben einer teilweisen Offenlegung des Systems könnte eine Regulierung z.B. durch eine Zertifizierung der KI durch demokratisch legitimierte Menschen das Problem lösen.

Zusammengefasst lässt sich feststellen, dass die Machtfrage noch nicht abschließend geklärt ist und die Integration von KI-Systemen ein offener Prozess bleibt. Mit der zunehmenden Bedeutung dieser Systeme ist die Dringlichkeit in den nächsten Jahren gegeben.


Der Autor ist Backend & Machine Learning Engineer bei einem Medizinunternehmen (iATROS).


  1. Jean-Francois Lyotard untersucht den Vertrauensverlust im Informationszeitalter in seinem Werk „Das postmoderne Wissen"
  2. Zwei Fertigkeiten in verschiedenen Hirnarealen

After I implemented a dopamin based learning reinforcement learning (RL) algorithm with nest I saw some problems to use the software with machine learning (ML) algorithms. In my thesis I used the simulator software NEST. It is one of the most advanced neural simulatros and offers a lot of neuron models and has a welcoming community. Machine learning algorithms need rapid update cycles. Nest is designed to run big simulations for a long time and allows scaling to use supercomputers. I also used computing resoruces of the Leibniz Rechenzentrum, however I ran multiple jobs in parallel.

The tools people use are essential. Any good library or standard encodes design work eficciently and saves many hours. The sucess story of computing is the history of thounds of iterations improving designs. I believe that software should not expect users to be experts on it to use it. The mailing list often saw people with similar question to the problem I encountered in using it with rapid cycles. Many of the researches coming form neuroscience are not experienced developers. I believe that in the future more people will look into the intersection of ML and neuroscience. I felt compelled to act based on my knowledge. NEST is open source so I joined the fortnightly meetings and discussed my idea. I wrote a proposal, discussed it again. Then I submitted a pull request. Unfortuantely it is not a solution covering all use-cases and was at this point closed. I understand the decision from the perspective of neuroscientist but yet this is unfortuante for machine learning.

At this point I think it is reasonable to halt my advances in this area. The hurdle is too high to make NEST fit for machine learning do it on the side.

To research the application of building homegrown neuromorphic computers I started to put the SNN-RL framework into a custom C++ back-end with multiprocessing. Thus, skipping the inefficiencies of nest for this use case and enabling real-time processing. Once it has been show to work on von-Neumann computers I will showcase it on a real pole-balancing apparatus bringing the algorithm to the real world. The appparatus is almost constructed. This algorithm will be later extended to run on FPGAs allowing per-neuron multiprocessing/full neuromorphic computing. May approach will not be revolutionary but it proof that reinforcement learning with SNN can solve real world problem on custom hardware.

The new library will be open source and found here. The URL might break, as I may change the name. My wish is to work on this research in my free time. Altough my day-job includes machine learning this is yet too experimental to be applicable in industry. One potential use-case is real-time control for embedded devices. Since I now have my first experience with working prolonged 40h+ weeks I need me free time to keep my balance. On a weekend I am happy to do some other things for a while than thinking again about code and staring into screens. Updates on this topic will follow.

When Python is too limited or too slow you might want to write some code in C++. You can use the Python API to use it as an extension module.

Xcode comes with the Python2.7, which is deprecated. Below is a guide how to link python3. Note that in order to install a python module you need to run a small python script on your C++ code, so you can only use xcode for some part of the development.

I have python installed via brew but other sources should also work, when you adjust the paths.

Call python3-config --ldflags to obtain the path of -L/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/lib/python3.9/config-3.9-darwin -ldl -framework CoreFoundation

Open that file and drag libpython3.9.dylib to the framworks section. Confirm the dialog.

Screenshot showing xcode project with folder Frameworks

Open the Build Settings and search for "Header Search Paths". Fill in /usr/local/Cellar/python@3.9/3.9.1_3/Frameworks/Python.framework/Versions/3.9/include/python3.9

The path can be obtained by calling

python3-config --cflags

In your code include

#include <Python.h>

The compiler flags were different in the setup than in Xcode. Code compiled in Xcode but by calling the setup compilation failed. Set the compile flags in Xcode to "default" to have the same behavior.