Clojure Cup 2015 (Mailhead)
TL;DR:
Der Clojure Cup findet seit drei Jahren im Dezember statt. Die Aufgabe ist, in Clojure eine Webanwendung zu entwickeln. Ein Thema gibt es nicht. Die Zeitvorgabe sind 48 Stunden. Es wird eine VM bereitgestellt, auf der die Webanwendung deployed werden muss. Auch dieses Jahr habe ich wieder mitgemacht und ein Tool zur Analyse von E-Mail Headern entwickelt. Ich habe dabei den Platz 10 belegt.
Das Tool hilft bei der Analyse von E-Mail Headern. Es zeigt auf, welchen Weg die E-Mail vom Sender zum Empfänger geht und wo die Engpässe sind. Zudem werden interessante Informationen wie verwendete Software oder wie lange die E-Mail insgesamt unterwegs war dargestellt. Der Benutzer kopiert den E-Mail Header in die Textbox und klickt auf analysieren.
Das Ergebnis der Analyse ist ein Graph, der den Verlauf der E-Mail aufzeigt. Darunter sind die nützlichen Informationen zusammengefasst.
Durch die Visualisierung werden interne Strukturen, Probleme und unnötige Wege sichtbar, die man so aus dem Header nicht direkt herauslesen konnte.
Der E-Mail Header ist im RFC822 definiert, leider hält sich daran so gut wie kein MUA bzw. MTA. Speziell die Formatierung des Zeitstempels variiert extrem stark. Leider gibt es bis heute keinen E-Mail Header Parser, der zuverlässig funktioniert. Für dieses Projekt habe ich die bekannteste Bibliothek verwendet und diese etwas robuster gemacht. Leider funktionieren immer noch viele Header nicht korrekt.
Ich hatte natürlich noch viele weitere Ideen, dafür war aber keine Zeit mehr:
- Eine Flagge an jede Box, so könnte man direkt sehen, welche Länder die E-Mail auf ihrer Reise durchquert. Das Land lässt sich über die IP ermitteln.
- Den Host anpingen um an die IP zu gelangen. Mit dieser dann den ARIN REST Service nutzen, um den Firmennamen auszulesen.
- Den MTA auslesen (wenn gegeben) und in jeder Box anzeigen.
- Zusatz-Marker für durchgeführte Anti-Virus-Checks oder Spam-Checks am MTA
Der Contest-Server wurde schon abgeschaltet, deshalb gibt es keine Live-Demo. Der Code ist aber auf Github zu finden und kann mit lein run
ausgeführt werden.