Artikel zu Erlang und Elixir auf informatik-aktuell.de

von Martin Grotz, 2019-11-12

Heute ist ein Artikel von mir auf informatik aktuell erschienen:

Nebenläufigkeit ganz einfach mit Elixir und Erlang

Darin geht es um Erlang, Elixir, Nebenläufigkeit, das Aktor-Modell, und wie man damit Systeme strukturieren kann.

Verbesserte Variante des rerun-Skripts

von Martin Grotz, 2019-09-29

Meine ersten Gehversuche mit dem rerun-Befehl waren schon ganz gut. Mittlerweile habe ich mein Shell-Skript zum Starten davon noch ein bisschen verfeinert.

Während ich mit Elixir entwickle habe ich in einer Shell parallel jetzt eigentlich immer diesen Befehl laufen:

rerun --dir "lib" --dir test --pattern "**/*.{ex,exs}" --exit --clear --name "Tests" -- mix test

Dadurch ist das Ergebnis in den Notifications besser zu erkennen und man findet beim Reinschauen dann schneller, was genau das Problem ist.
Für die Typanalyse via Dialyizer nutze ich ebenfalls mittlerweile einen rerun-Befehl mit sehr ähnlichem Muster:

rerun --dir "lib" --pattern "**/*.ex" --exit --clear --name "Dialyzer" -- mix dialyzer

"rerun" statt "mix test.watch"

von Martin Grotz, 2019-08-24

Ich habe in der hörenswerten Podcast-Folge 63 Designing Elixir Systems With OTP von Elixir-Mix von einem kleinen Hilfsprogramm gehört, mit dem man beliebige Befehle ausführen lassen kann, sobald sich eine zu einem angegebenen Muster passende Datei ändert: "rerun". Allerdings ist es ein Ruby Gem, d.h. man benötigt Ruby, was ich auf meinem Linux-System erstmal installieren musste, denn ich mache eigentlich nichts mit Ruby.

Danach habe ich mir für meine jeweilige Elixir-Applikation ein kleines Shell-Skript "mix_test_watch.sh" geschrieben, damit ich das Datei-Muster nicht jedesmal auf's Neue eintippen muss:

#!/bin/bash
rerun --dir "lib" --pattern "**/*.ex" -- mix test

Anschließend noch ein chmod +x ./mix_test_watch.sh und schon habe ich einen startbaren, mitlaufenden Test-Watcher.

Alternativ gibt's als Test-Watcher für Elixir auch noch eine spezialisierte Mix-Erweiterung: mix_test_watch. "rerun" kann aber eben nicht nur als Test-Watcher verwendet werden, sondern z.B. auch, um bei jeder Änderung einen Dialyizer (Typ-Analyse-Tool für Erlang/Elixir) Durchlauf zu starten, oder aber in der Extremform mit Hilfe einer anderen Mix-Erweiterung, ex_check, gleich das volle Paket (Formatter, Linting, Statische Code-Analyse, Tests, Type-Checker). Wobei dann jeder Durchlauf signifikant Zeit braucht...

Eine Elixir Phoenix App in Apache auf einem vServer hosten

von Martin Grotz, 2019-06-23

ACHTUNG: Der nachfolgende Eintrag ist eher eine Gedächtnisstütze für mich als ein richtig ausgearbeiteter Blog-Post. Aber weil ich das selten mache, und es doch relativ viele Schritte sind, wollte ich sie einfach mal festgehalten haben.

Das verbreitetste Release-Tooling für Elixir heißt distillery. Die Installationsanleitung dafür findet sich hier.

Nach einem kurzen Blick in die nach der Installation mit mix release.init erzeugte Datei "rel/config.exs" kann ein erstes Probe-Release gebaut werden mit MIX_ENV=prod mix release

Anschließend wird gemäß der Anleitung das Phoenix Zeugs gebaut.

Dann muss noch gemäß Distillery mit Phoenix Walkthrough die Konfiguration von Phoenix angepasst werden.

Außerdem brauchen wir einen Ecto Migrations Runner, da wir das ja nicht einfach so machen können. Diese Anleitung hat mir dabei sehr geholfen.

Bei meinem vServer liegen die Webseiten alle in /var/www/html, also habe ich da einen neuen Unterordner erstellt. Da wird dann die von distillery erzeugte .tar.gz Datei reingelegt und entpackt. Die Datei wurde bei mir lokal unter "_build/prod/rel/run_for_your_lives/releases/0.1.0/" abgelegt. Auf dem remote Server kann das Release dann mit PORT=4002 ./bin/run_for_your_lives foreground probeweise gestartet werden. Erst, wenn da alles glatt läuft, kümmere ich mich um die Einbindung in den Apache. ACHTUNG: Für das automatische Starten später muss der Port in der "config/prod.exs" vor dem Distillery-Build hart kodiert werden!

In meinem konkreten Fall muss ich jetzt erstmal PostgreSQL installieren und konfigurieren (alles auf Debian buster): Hilfreich dabei war die Kombination von der PostgreSQL Anleitung für Debian und der Installationsanleitung aus dem Debian Wiki. Und dazu noch das Debian Paket pgadmin4-apache2, damit es direkt in den Webserver eingebunden wurde, so dass ich nicht mit den Kommandozeilen-Tools rumhantieren muss. Die SQL-Daten habe ich vorher aus den lokal angelegten Produktiv-DBs via "Backup" in pgAdmin4 exportiert und einfach als SQL direkt auf dem frisch installierten Server über das dort ebenfalls gerade erst installierte pgAdmin4 über das Query Tool wieder eingespielt.

Unter sites-available für meinen Apache musste ich dann noch zwei Dateien anlegen: Eine, die von http auf https weiterleitet, und eine, die die https Anfrage an den Apache dann an die Erlang-App weiterleitet. Für diese Weiterleitung brauchen wir noch zwei Erweiterungen (mods): mod_proxy_http und mod_proxy_wstunnel. Dann die erste Datei: "run_for_your_lives.conf" mit dem Inhalt:


                        ServerName run.finde-ich-super.de
                    
                        ServerAdmin martin.grotz@gmx.de
                        DocumentRoot /var/www/html/run
                    
                        ErrorLog ${APACHE_LOG_DIR}/error.log
                    
                        RewriteEngine on
                        RewriteCond %{SERVER_NAME} =run.finde-ich-super.de
                        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
                    
Und dann noch die mit den Weiterleitungen auf die Erlang-Application und dem eigentlichen Setup:

                        
                            ServerAdmin martin.grotz@gmx.de
                            ServerName run.finde-ich-super.de
                    
                            ErrorLog ${APACHE_LOG_DIR}/run_for_your_lives_error.log
                    
                            SSLEngine on
                    
                            ServerName	run.finde-ich-super.de
                            SSLCertificateFile 
                            SSLCertificateKeyFile 
                            Include /etc/letsencrypt/options-ssl-apache.conf
                    
                            ProxyPass /socket/ ws://localhost:4002/socket/
                            ProxyPassReverse /socket/ ws://localhost:4002/socket/
                            ProxyPass / http://localhost:4002/
                            ProxyPassReverse / http://localhost:4002/
                        
                    
Danach den Symlink setzen, damit in "sites-enabled" auch die passende Konfigurationsdatei aus "sites-available" eingebunden ist.

Jetzt noch einen Apache-Restart und dann mit "certbot" das Zertifikat um die neue Subdomain erweitern.

Am Schluss sollten wir unsere Erlang-Applikation noch direkt beim Hochfahren starten, sonst laufen die Apache-Requests ins Leere. Dazu muss eine Datei angelegt werden: "/lib/systemd/system/run_for_your_lives_phoenix.service", mit ungefähr nachfolgendem Inhalt:


                    [Unit]
                        Description=Run For Your Lives Phoenix App
                        After=network.target

                        [Service]
                        Type=simple

                        User=
                        Group=

                        Restart=on-failure
                        RestartSec=5

                        Environment=LANG=de_DE.UTF-8

                        WorkingDirectory=/var/www/html/run
                        ExecStart=/var/www/html/run/bin/run_for_your_lives foreground
                        RemainAfterExit=no
                        SyslogIdentifier=run_for_your_lives

                        [Install]
                        WantedBy=multi-user.target
                
Die müssen wir dann noch beim System bekannt machen: "systemctl enable run_for_your_lives_phoenix.service". Anleitung übrigens aus dem Elixir Forum

Lambda Lounge Meetup Anfang April & dotnet Day Franken

von Martin Grotz, 2019-04-07

Anfang April war es mal wieder soweit: Die Lambda Lounge hat sich in Erlangen getroffen, um über Daten und (Typ-)Klassen zu reden. Der Vortrag war sehr interessant und die Diskussion im Anschluss facettenreich. Ich freue mich auf die Fortsetzung des Meetups im Mai.

Außerdem hatte ich die Gelegenheit mit meinem Kollegen Patrick zusammen einen Workshop zum Thema "Funktionale Programmierung in C# und F#" abzuhalten. Dafür waren wir auf der lokalen Konferenz dotnet Day Franken. Die Konferenz war super - sowohl der Workshop-Tag als auch der nachfolgende Konferenztag. Nächstes Jahr werde ich da auf jeden Fall wieder dabei sein.

Und weil ich mit dem Meetup und vor allem mit der Vorbereitung des Workshops so viel zu tun hatte, gab's hier auch solange nichts Neues. Vermutlich wird das auch bis Mai so bleiben, da schon der nächste Vortrag (und die entsprechende Vorbereitung) ansteht.

Lambda Lounge Meetup Ende Februar

von Martin Grotz, 2019-03-06

Am Montag letzte Woche gab es wieder ein Treffen der Lambda Lounge - also des Functional Programming Meetups Nürnberg. Diesmal waren wir in den Räumlichkeiten der redheads Ltd. - vielen Dank dafür!

Thematisch ging es um Funktoren, Applicatives und Monaden - der Vortrag war sehr aufschlussreich. Auch die anschließende Diskussion hat mir viele neue Einsichten beschert. Beim gemütlichen Beisammensein ließen wir den Abend ausklingen.

Ich freue mich schon auf das nächste Treffen - ein Thema steht allerdings noch nicht fest. Updates gibt es als erstes auf der Meetup-Seite.

Elixir, Phoenix & Elm Vortrag auf der parallel Konferenz

von Martin Grotz, 2019-02-23

Am Mittwoch und Donnerstag war ich auf der parallel Konferenz in Heidelberg und habe dort einen Vortrag über Elixir, Phoenix und Elm gehalten. Die Konferenz hat mir insgesamt gut gefallen, auch wenn die Themenschwerpunkte nicht so meine sind. Dazu sind High Performance Computing und C/C++ einfach zu weit weg von meinem Arbeitsalltag. Trotzdem fand ich es total interessant, mal in eine "andere Welt" der Software-Probleme und -Problemlösungen reinschnuppern zu können. Jetzt geht es vortragsmäßig erstmal in ruhigeres Fahrwasser. Die nächsten Wochen werde ich mich auch erstmal wieder mehr F# zuwenden, um mich für den Workshop beim .NET Day Franken vorzubereiten.

Elm-Vortrag auf der c't webdev Konferenz

von Martin Grotz, 2019-02-19

Ich hänge weiterhin hinterher, aber: Vor zwei Wochen war ich als Sprecher auf der c't webdev Konferenz. Die Konferenz war in einem architektonisch sehr interessanten Gebäude, dem KOMED in Köln.

Organisation, Technik und Catering waren top, aber dadurch, dass die Konferenz ausverkauft war, ging es teilweise doch ziemlich eng zu. Keynotes und Speaker waren ebenfalls vom Feinsten.

Die Konferenz soll nächstes Jahr wieder stattfinden (in einer vergrößerten Location) - meiner Meinung nach eine klare Empfehlung. Wenn ich die Möglichkeit habe, werde ich auf jeden Fall wieder dabei sein.

Elm-Artikel auf heise-developer

von Martin Grotz, 2019-02-14

Der versprochene zweite Teil des Elixir&Elm-Artikels auf heise-developer ist online!

Und wie beim vorherigen Artikel gilt natürlich auch hier: Falls es noch Fragen oder Anmerkungen gibt, einfach melden.

Event-Seite & Elixir-Artikel auf heise-developer

von Martin Grotz, 2019-02-07

Aktuell hänge ich ein bisschen hinterher mit meinem Blog im Gegensatz zu den sonstigen Events. Deshalb gibt es jetzt der Übersichtlichkeit halber eine neue Unterseite: Events&Termine. Dort liste ich die Termine meiner Vorträge auf und auch, wenn ich mal irgendwo einen Artikel veröffentlicht habe.

Genau so eine Veröffentlichung gab es auch letzten Freitag, und zwar einen Artikel zu Elixir und Phoenix auf heise-developer. Falls es zu dem Artikel noch Fragen oder Anmerkungen gibt - immer her damit!

In den nächsten Tagen wird es auch den zweiten Teil dort zu lesen geben, in dem zum Elixir-Backend ein Elm-Frontend gebaut wird.

Die Lambda Lounge ist eröffnet

von Martin Grotz, 2019-01-31

Vorgestern war das erste Treffen der Lambda Lounge. Mir hat es eine Menge Spaß gemacht, was sicher auch an der enormen Breite von Hintergründen und FP-Erfahrung lag, die am Start war: Von Entwicklern ganz ohne FP-Erfahrung bis zu ausgewiesenen Profis, die sogar Vorlesungen zum Thema halten, war alles dabei.

Gleich zu Beginn gab es eine Selbsteinschätzung der Teilnehmer auf einer Klebetafel (die Idee zu den Klebepunkten habe ich von Marco Emrich übernommen). Mal sehen, wie das in 12 Monaten dann aussieht:

Selbsteinschätzung FP Wissen Teilnehmer Lambda Lounge beim ersten Treffen

Danach haben wir noch überlegt, wie wir in Zukunft weitermachen wollen: Mit einer Mischung aus theoretischen Impulsvorträgen und praktischer Anwendung des jeweils Gelernten werden wir in den nächsten Monaten an den Start gehen.

Zum Abschluss habe ich noch eine kleine Live-Coding-Session mit Elm gemacht.

Ich freue mich auf jeden Fall schon auf das nächste Treffen der Lambda Lounge, welches aller Wahrscheinlichkeit Mitte/Ende Februar stattfinden wird. Vielen Dank an dieser Stelle auch nochmal an Merlin Göttlinger für die Organisation des Raumes!

Quellcode zum OOP Vortrag

von Martin Grotz, 2019-01-30

Der Vortrag auf der OOP 2019 ist vorbei. Mir hat es Spaß gemacht und ich glaube, die Zuhörer fanden es auch ganz okay.

Den Quellcode zum Vortrag gibt es auf meinem github-Account. Bei Fragen, Anmerkungen oder Verbesserungsvorschlägen schreibt mir einfach eine Nachricht.

Vortrag auf der OOP Konferenz

von Martin Grotz, 2019-01-21

Nachdem es bedingt durch einen Server-Umzug und die Feiertage hier länger nichts Neues gab, gibt es nun doch mal wieder was:

Ich war nicht gänzlich untätig, sondern habe meine Elm-Kenntnisse mit einer passenden Server-Programmiersprache kombiniert: Elixir. Daraus ist ein Vortrag entstanden, den ich übermorgen auf der OOP 2019 halten werde. Die Details finden sich im Konferenzprogramm. Ich freu mich schon riesig drauf, und danach geht's hier auch wieder mit neuen echten Inhalten in Sachen Elm (und Elixir) weiter!