Posts
-
Herbst
Ein Blick aus dem Fenster genügt.
-
Zionskirche 1
Manchmal muss man sich die Motive ganz in der Nähe suchen um dran zu bleiben.
Die Zionskirche in verschiedenen Jahreszeiten gibt es in einem Album:
-
Pflanzenportraits
In der Pandemie fingen ja viele Leute an, sich mit Sachen zu beschäftigen die man sonst ignoriert. Mir ist zum Beispiel aufgefallen, dass (Zimmer-) Pflanzen wunderbare Fotomotive abgeben, wenn man nur will.
Jetzt hab ich begonnen eine Reihe daraus zu machen. Das erste Bild hängt schon an der Wand weil es mir so gut gefallen hat.
-
Jekyll Pipeline mit Github Actions
Seit einer ganzen Weile läuft dieser Blog mit Jekylls und ist mit git versioniert. Immer wenn ich einen neuen Post veröffentlichen möchte, muss ich
bundle exec jekyll build
ausführen und dann mit
rsync
die neuen Dateien auf meinen host kopieren. Dafür habe ich mir ursprünglich mal ein kleinesRakefile
geschrieben um das einfacher zu machen. Das Problem an der Sache ist dass ich das eigentlich nur auf meinem Mac machen kann und auch immer manuell starten muss. Früher™️ hatte ich meine eigene gitlab installation laufen und damit auch mein eigenes CI/CD. Der Aufwand die Installation zu pflegen war mir aber zu hoch und so bin ich nun doch bei einem privaten Github Repository gelandet. Da gibt es ja Github Actions die eine rudimentäre build-pipeline ermöglichen und das nutze ich nun um meinen blog einfacher zu aktualisieren.Im wesentlichen funktioniert das genau wie lokal:
- ich baue die website mit jekyll
- ich kopiere die dateien mit rsync auf meinen host
nur passiert das jetzt immer, wenn ich einen neuen commit in einem bestimmten branch pushe. Das kann ich von fast überall - sogar meinem Telefon.
Mal sehen ob ich damit jetzt öfter was poste oder nicht.
Das Github Action Format ist relativ simple und leicht anpassbar: Man legt sich ein yaml-file in
.github/workflows/jekyll-build.yaml
name: Build and deploy Jekyll site on: push: branches: - production jobs: jekyll: name: Build and deploy Jekyll site runs-on: ubuntu-latest steps: - name: Install ImageMagick run: | sudo apt-get update sudo apt-get install imagemagick libmagickwand-dev - name: Install ruby 3 run: | sudo apt install ruby-full ruby --version - name: add gem bin to env run: | echo "/home/runner/.gem/ruby/2.7.0/bin" >> $GITHUB_PATH - name: debug PATH run: | echo "$PATH" - name: Install bundler run: | gem install bundler --user-install - name: Install Rake run: | gem install rake --user-install - name: Checkout uses: actions/checkout@v2 - name: Install GemFile run: | bundle install - name: Build Page run: | rake build - name: Deploy to host uses: up9cloud/action-rsync@v1.1 env: HOST: blog.kanedo.net USER: user KEY: $ TARGET: virtual/blog.kanedo.net/ VERBOSE: true ARGS: -rtzh --delete SSH_ARGS: '-p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' SOURCE: ./_site/
Der letzte Schritt, rsync, ist eine externe action vom marketplace aber sonst sind alles einfache bash commands die im ubuntu image laufen. Nett ist, dass man mittels secrets einen private SSH Key hinterlegen kann, der dann von rsync benutzt wird. Cool wäre es jetzt noch, dem rsync SSH Key nur Zugriff auf das eine Verzeichniss zu geben… wenn jemand ne Idee hat?
-
Visualisierung von Neuronalen Netzwerken
Um genau zu sein, Visualisierung vom Attention-Mechanismus von Attention-based Encoder-Decoder Architekturen 1 2. Darum soll es allerdings nicht vordergründlich gehen. Ich arbeite schon seit einer ganzen Weile mit neuronalen Netzen (NNs) um maschinelles Übersetzen zu verbessern. Damit jeder eine grobe Vorstellung hat, von was ich schreibe, ein super-schnell-crash-kurs Neural Machine Translation. Wenn eine Übersetzung generiert wird, passiert das in unserem Fall Wort für Wort. Bei jedem Wort stellt sich die Frage, welche Quell-Wörter sind relevant und welche nicht. Es gibt verschiedene Möglichkeiten dieses Problem zu lösen. Die aktuellen State-of-the-Art Architekturen benutzen einen sogenannten Attention-Mechanismus wie er in den beiden Papern vorgestellt wird. Dabei lernt man für jedes Zielwort eine Wahrscheinlichkeitsverteilung über die Quellwörter. Diese werden dann entsprechend gewichtet als Eingabe für das Netzwerk benutzt (Es ist ein bisschen komplizierter als das, aber das sollte erstmal reichen).
Ein großes Problem mit NNs ist es, dass deren gelernte Parameter nicht auf den ersten Blick interpretierbar sind. Letztlich sind NNs nur eine Ansammlung von verdammt großen Matrizen… Bei den Attentions ist das aber anders, denn sie sind normiert (Summe ist Eins) und man kann sie daher als Wahrscheinlichkeitsverteilung interpretieren und dementsprechend auch visualisieren.
Es gibt ja Menschen, die auf eine Kolonne von zwanzig Zahlen zwischen 0 und 1 schauen und direkt sehen was Sache ist. Ich gehöre nicht dazu. Bisher habe ich mich immer so weit wie Möglich von allem Ferngehalten habe, was auch nur annähernd mit Frontend und Visualisierung zu tun hat. Als ich noch einen Nebenjob als Webentwickler hatte, habe ich es gehasst, wenn ich das CSS anfassen musste oder irgendwas “noch mal hübscher” machen musste. Einfach Text reicht doch, oder? Bei der Arbeit mit NNs habe ich meine Meinung dann doch schnell geändert und es sehr zu schätzen gelernt, wenn jemand eine Visualisierung für die Probleme bereitstellt.
Um nun zum eigentlichen Punkt zu kommen: ich habe angefangen mir kleine Tools zu bauen, die mir die Zahlenkolonnen die unser Übersetzer erzeugt in verständliche Visualisierungen zu bringen.
Ein Tool was dabei herausgekommen ist visualisiert einfach als Overlay welche Wörter wie stark gewichtet worden sind. Fährt man mit dem Cursor über ein Wort im Zielsatz, dann sieht man, welche Wörter aus dem Quellsatz dafür verwendet wurden:
Dieses Tool war sehr hilfreich um eine Intuition dafür zu bekommen, welche Dinge das Model lernen konnte und wo es noch Probleme gibt.
Ein zweites Tool generiert aus den gleichen Daten eine Matrix-Ansicht.
Die zweite Ansicht habe ich vor allem implementiert, damit wir die Grafiken später in Papern benutzen können und daher gibt es einen Download-Button der ein SVG exportiert. Das kann dann in Inkscape o. ä. angepasst werden (auch wenn das wirklich weird ist und auf unterschiedlichen OS unterschiedliche Grafiken erzeugt, anyway… Anderes Thema).
Diese Art von Grafik wird zwar auch von sockeye 3 erzeugt, aber nur als png und dann ist die Auflösung Mist und die Schriftart ist im PDF unterschiedlich. Außerdem kann man an denen nichts mehr verändern. Also habe ich mir vorgenommen, es neu zu implementieren.
SVG Grafiken per Hand zu bauen fand ich irgendwie nicht geil. Also habe ich mich nach Projekten umgesehen, die das vereinfachen. Für dieses Grid habe ich d3js benutzt. Ich war sehr positiv überrascht. Ich muss zugeben, das letzte was ich in JS entwickelt hab war irgendwann 2015 mit jQuery und das war nicht besonders angenehm. Abgesehen von der manchmal etwas lückenhaften Doku von d3js bin ich davon sehr begeistert. Die ganze Entwicklung hat mich nur wenige Stunden gekostet und ich habe von d3js noch nie gehört vorher.
Beide Tools habe ich auf Github liegen. Das Repository ist ein Fork den ich angelegt habe um eine Beam-Search Visualisierung nach zu implementieren und jetzt sammle ich darin alle meine Visualisierungen. Alles ist immer noch Work-in-Progress, weil ich nur genauso lange daran arbeite, bis es gut genug für den aktuellen Anwendungsfall ist. Alles ist irgendwie schnell zusammen-gehackt und nicht besonders hübsch. Andere nennen es Research-Code. Dafür, finde ich, hat sich die Arbeit aber gelohnt und ich freue mich immer wieder, wenn ich nicht auf Zahlenkolonnen schauen muss, sondern eine interaktive Grafik habe.
-
Bahdanau, D., Cho, K., & Bengio, Y. (2015). Neural Machine Translation by Jointly Learning to Align and Translate (pp. 1–14). San Diego, Calefornia, USA. Retrieved from http://arxiv.org/pdf/1409.0473v6.pdf ↩
-
Luong, T., Pham, H., & Manning, C. D. (2015). Effective Approaches to Attention-based Neural Machine Translation. Emnlp, 1412–1421. ↩
-
Hieber, F., Domhan, T., Denkowski, M., Vilar, D., Sokolov, A., Clifton, A., & Post, M. (2017, December 15). Sockeye: A Toolkit for Neural Machine Translation. https://arxiv.org/abs/1712.05690 ↩
-
-
macos Service - csv zu Multimarkdown
Für die kommende Masterarbeit habe ich mir vorgenommen, gründlichere Notizen zu schreiben. Das bedeutet vor allem die Ergebnisse von Experimenten immer direkt aufzuschreiben und nicht erst am Ende wenn alles fertig ist. Aus meiner Bachelorarbeit habe ich gelernt, dass man dann viele Feinheiten schon vergisst. Als Format habe ich einfache Text-Dateien in meiner Dropbox gewählt und ich benutze Markdown zum formatieren. Markdown lässt sich schnell schreiben und hilft auch ohne konvertierung Struktur in den Text zu bringen.
Einzig Tabellen sind (in jeder Auszeichnungssprache) unfassbar nervig. Um das ganze etwas schnner zu gestalten, habe ich ein Skript angepasst, dass ursprünglich von Chris Brandow geschrieben wurde.
Das ganze funktioniert als Service und in meiner Notiz schreibe ich die Tabelle als CSV:
-, old beam, new beam with empty, 30.2, 29.84 without empty, 30.45, 30.42
dann markiere ich die drei Zeilen und lasse den Service via Keyboard-Shortcut laufen und dieser erzeugt:
| - | old beam | new beam | | :-----------: | :-------: | :-------: | | with empty | 30.2 | 29.84 | | without empty | 30.45 | 30.42 |
Das angepasste Skript habe ich als gist auf github gelegt. War mal wieder eine nette Übung in Swift und ist sicher weder besonders elegant, noch effizient. Aber es funktioniert und war schnell erledigt.
-
MergePDF: Duplex-Scan für Arme
Kurze Notiz weil ich es sonst nirgends gefunden habe und wieder brauchte. Mein Scanner kann kein Duplex-Scannen. Daher habe ich irgendwann mal ein Automator-Service gefunden (weiß leider nicht mehr woher) mit dem man zwei PDFs die jeweils die geraden und ungeraden Seiten enthalten miteinander kombinieren kann.
Das Script basiert im Wesentlichen auf der
CombinePDFPages
Aktion und dortShuffling Pages
.Den Workflow kann man sich hier runterladen: mergePDFs Workflow
-
Sonnenaufgangstour zu den Schrammsteinen
Wie ging der Spruch? Einmal ist Zufall, zweimal ein Trend und ab drei ist es eine Tradition? Damit ist die Fahrt in die Sächsische Schweiz zu Weihnachten ein Trend, den ich definitiv zur Tradition machen möchte.
Letztes Jahr war es die Bastei. Auf der Suche nach dem klassischen Postkartenmotiv haben wir uns früh aus dem Bett gequält und haben stattdessen nebelverhangene Tristheit bekommen (Im Fachjargong “moody”). Das gesuchte Motiv habe ich dann übrigens im September gefunden.
Dieses Jahr also wieder: 4:30 Uhr Weckerklingeln, Kaffee kochen (diesmal zumindest mit Thermoskanne) und ab ins kalte Auto Richtung Osten. Wir wollten zu den Schrammsteinen. Eine der bekanntesten Steinformationen würde ich mal behaupten und im Sommer wimmelt es dort von Wanderern und Kletterern. Im Dezember 6 Uhr Morgens ist man da allerdings alleine. Temperaturen um die null Grad lassen einen die Daunenjacke wertschätzen. Komoot, verantwortlich für die Routenplanung, führt uns direkt den steilsten Weg nach oben, den es gibt. 13% Steigung zeigen einem auch schnell, was der Stollen im Advent angerichtet hat und die anschließenden Treppen und Leitern sorgen dafür, dass man das auch so schnell nicht vergisst. Immerhin friert man nicht mehr.
Leitern und Treppen sind der einzige Weg nach oben.
An der Schrammsteinaussicht angekommen weht uns so ein heftiger Wind entgegen, dass wir erst einmal zurück in den Windschatten gehen und frühstücken. Ein Hoch auf warmen Kaffee. Wir suchen uns geschütztere Orte für Fotos und finden glücklicherweise einen Felsvorsprung an dem man nicht nur auf die Schrammsteine, sondern auch in die andere Richtung des Elbtals schauen kann. Dadurch hatten wir einen wunderbaren Blick auf die Zschirnsteine und den Schneeberg
Elbtalpanorama mit Blick auf die Zschirnsteine und den hohen Schneeberg.
Der Sonnenaufgang der danach folgte war phänomenal. Selten so einen epischen Himmel gesehen. Da stört es dann auch nicht, dass der Vordergrund voll mit Buchen steht, die laubfrei sind (Auch wenn das bedeutet, dass wir im Herbst auf jeden Fall noch mal hin müssen).
Layers.
Zschirnsteine im SonnenaufgangWer hätte gedacht, dass in die Sonne fotografieren auch gut aussieht
Und weil’s so schön war, noch mal näher ran
Als die Sonne dann endlich oben war, sind wir dann doch mal zum eigentlichen Ziel unserer Wanderung gegangen und haben die Schrammsteine fotografiert. Zu dem Zeitpunkt war ich etwas enttäuscht von der Komposition, aber im Nachhinein, finde ich, verfehlt das Bild doch nicht seine Wirkung.
Die Schrammsteine
Samuel wollte gerne, neben den großen Vistas, auch die intimeren Landschaften im Wald fotografieren. Im Winter bietet sich dafür natürlich ein Nadelwald an und so sind wir auf dem Rückweg noch Richtung Kirnitzschtal gelaufen. Auswahl an “schönem” Waldboden (Ja, ich klinge auch in meinem Ohr wie ein baumknutschender Öko aber hey ¯\(ツ)/¯ ).
Wie zu erwarten, gestaltetete sich die tatsächliche Bildwahl dann schwierig, aber interessant.
Alle Fotos als Gallerie
-
The new Macbook Pro
Ich kann mich noch ziemlich gut daran erinnern, wie ich am 4. Oktober 2009 (Ja, das war ein Sonntag), in den Mediamarkt in Dresden gefahren bin um mir endlich mein erstens Macbook Pro zu kaufen. 1700€ hat das damals gekostet und war die mittlere Ausstattung.
Dieses Jahr, also 8 Jahre später, hat der Rechner doch ziemlich das zeitliche gesegnet. Bluetooth funktioniert gar nicht mehr, WLAN nur ab und an und man muss den rebooten damit es wieder kommt.
Es war also Zeit Magrathea in Rente zu schicken und einen neuen Rechner zu kaufen: Das mid-20017 Macbook Pro mit Touchbar. Was zuerst mal auffällt ist, dass die Preise ziemlich in die Höhe gegangen sind. Habe ich damals für das mittlere Model rund 1.7k€ ausgegeben hat mich dieser Rechner (mit upgrade auf 16GB RAM) mit Studentenrabatt 2k€ gekostet. Naja – anscheinend kann ich das ja später von der Steuer absetzen 🙄.
Im Vorraus dazu habe ich mir viele Gedanken gemacht. Ich mochte ja meinen alten Rechner. Die Tastatur, die Auswahl an Ports, den Fakt, dass ich RAM, Festplatte und Batterie noch selbst tauschen kann. Das hat vieles einfacher gemacht und definitiv dazu beigetragen, dass ich so lange mit dem Rechner ausgekommen bin. Im neuen MBP geht nichts mehr. Deswegen auch sofort das upgrade auf 16GB RAM – früher oder später werde ich sie brauchen. In meinem alten Rechner hatte ich eine 100GB SSD und eine 1TB HDD im FusionDrive und damit eine Menge Speicher (den ich auch fröhlich voll gemacht habe). Die Upgrade-Preise für Speicher sind absurd. Also nicht, dass man die großen SSDs mit diesen Geschwindigkeiten sonst irgendwie billiger kaufen könnte, aber 750€ für das Upgrade auf eine 1TB SSD sind einfach nicht drin. Auch der Wechsel auf USB-C hat mir ein wenig sorge bereitet, denn ich gehöre noch zu der Gruppe Menschen die eine FireWire Festplatte besitzt 👴. Um es kurz zu machen ich hatte Angst das mein aktueller Workflow so nicht mehr funktioniert.
Bisher hat sich die Angst aber nicht bestätigt. Ja die Tastatur ist laut, aber sie Tippt sich finde ich fantastisch. Die ESC Taste existiert nicht mehr, aber ich langsam aber sicher erschrecke ich mich auch nicht mehr, wenn ich das Gefühl habe ins nix zu tippen und trotzdem ESC zu treffen. Die Touchbar ist nett: nicht bahnbrechend, aber ich habe schon einige Anwendungen gesehen in denen ich mich über die individuellen Shortcuts gefreut habe (Kalender, Messages und so). TouchID ist fantastisch und das Trackpad….also das ist ja um Welten besser, als das alte (und das war schon fantastisch). Was man auch bedenken muss: Ich komme von einem 2009er Model. Das Display hatte eine Auflösung von 1440x900 Pixel. Retina ist da definitiv bemerkbar 😀.
Was USB-C angeht: Bisher habe ich keine Probleme. Mein Monitor hat Display Port und einen USB Hub. Für DisplayPort habe ich mir ein neues Kabel gekauft und für das USB-Kabel einen Adapter. Damit habe ich fürs erste alle alte Peripherie (mal abgesehen von FireWire, aber die hat auch USB) angeschlossen bekommen. Wenn ich Unterwegs bin, habe ich noch einen zweiten USB-A zu USB-C Stecker dabei (da Kosten 2 Stk 6,30€. Das finde ich OK). Lediglich für Projektoren und Fernseher habe ich noch nix. Aber da musste man auch mit Mini-DisplayPort schon immer Adapter rumschleppen. Leider gibt es, zumindest meines Wissens nach, noch keinen Adapter der alles nötige zu einem bezahlbaren Preis beinhaltet. Ich hätte gern: USB-A, USB-C Passthrough-Charging, HDMI und Gigabit Ethernet. Extra Bonus wäre noch Mini-DisplayPort. Dann könnte ich nämlich meine alten VGA und DVI Adapter weiter benutzen. aber der einzige der in die Nähe kommt ist der HooToo Hub (Was für ein beschissener Name) und der kostet auch gleich 60€.
Außerdem brauche ich jetzt noch eine externe Platte die ich mitnehmen kann. Meine Knapp 400GB Fotosammlung passt ja nicht mehr auf die interne SSD. Im Moment liegen all diese Daten auf einer großen 3.5” Platte mit extra Netzteil – nicht gerade portabel. Externe Platten mit nativ USB-C haben momentan auch noch den du-hast-dir-für-2k€-einen-Rechner-gekauft-du-hasts-ja-Aufschlag den ich nicht bereit bin zu zahlen. Mein aktueller Plan ist mit eine USB-A 3.1 Platte mit wechselbarem Kabel zu kaufen – und dann einfach zwei Kabel rumtragen. Aber dafür muss mein Konto erstmal wieder Luft holen 😉
TL;DR: Neues Macbook Pro ist Arsch teuer aber geil. Hoffentlich hält es jetzt wieder 8 Jahre.
-
Milchstraße in der Eifel
Freilandkaffee
Das Wetter am langen Himmelfahrtswochende versprach fantastisches Wetter und wir haben uns spontan entschieden Campen zu gehen. Ohne weiter zu recherchieren habe ich den Campingplatz Rursee ausgesucht. Wasser kann bei diesen Temperaturen ja nicht schaden. Ich habe wie immer, neben dem ganzen Camping-Gear auch meine Fotoausrüstung dabei gehabt; ohne aber ein spezielles Foto im Sinn zu haben. Einfach aus Gewohnheit. Ehrlich gesagt war überhaupt nicht klar, was wir dort eigentlich machen wollen. Nicht einmal eine Wanderroute hatte ich rausgesucht.
22.5kg Camping- und Fotogear
Unser kleines
Das Wochenende war dementsprechend gemütlich und ohne viel Aktivität. Fotografisch ist die Umgebung leider nicht direkt ein Hingucker; da muss ich noch mal länger hin. Ein glücklicher Zufall aber war, dass nicht nur wolkenloser Himmel, sondern auch Neumond in der Nacht die Sterne funkeln lies und da die Eifel ein Dark Sky Park ist, hatte man sogar die Sicht frei auf die Milchstraße.
Ich habe mir also einen Wecker auf 1:30 Uhr gestellt, das 12mm Samyang aufgeschraubt und habe mich einfach faul vor mein Zelt gesetzt und den Sternenhimmel fotografiert.
überwältigend, wenn man zum ersten mal so viele Sterne sieht
Unsere Nachbarn saßen noch am Feuer (und ich war froh, das wir Ohropax dabei hatten… ) und so hatte ich auch direkt noch ein bisschen Vordergrund für mein Motiv. Wie praktisch.
Zeltplatzromantik
Dieses Motiv war das erste mal, dass ich mich an der Milchstraße versucht habe, aber wenn das so einfach ist, muss ich da unbedingt noch mal ran. Vielleicht ein anderer Ort mit einem besseren Blick auf das Zentrum der Milchstraße (das liegt auf der rechten Seite hinter den Bäumen).