T3EE in Cluj: Teil 1

Diesmal nehme ich Sie mit auf meinen Besuch der T3EE. Eine Veranstaltung, die das von der Bergischen Universität Wuppertal verwendete Content-Management-System TYPO3 im universitären Umfeld promotet.
Der Ablauf ist dicht gepackt und ich bin gespannt, wen ich kennen lerne und was ich alles so berichten kann.

zug_faellt

Gestern in Düsseldorf: Kein guter Beginn für eine Dienstreise

wuerstchen

Heute in Cluj: Ein guter Start in den Tag

 

Teil 2


Ein Blog als Lerntagebuch in Mahara…

In diesem Semester (WS16/17) setze ich erneut das E-Portfolio System Mahara ein. Die Studierenden in meinem Blended-Learning Seminar „Wissenschaftliches Arbeiten“ führen in Mahara ein Lerntagebuch. Zu den verschiedenen Themen der Veranstaltung gibt es jeweils die ergänzende Aufgabe den eigenen Lernprozess zu dokumentieren und zu reflektieren. Mit dem E-Portfolio Mahara (https://mahara.uni-wuppertal.de) kann man dazu die Funktion „Blog“ nutzen. Die steht jedem Studierenden nach der Anmeldung automatisch zur Verfügung.

Weiterlesen Ein Blog als Lerntagebuch in Mahara…


Webmail Kalender mit Outlook synchronisieren

Ansicht EinstellungsdialogWer wie ich den in Webmail integrierten Kalender nutzt, stößt schnell auf die Problematik, das Kollegen, welche Outlook nutzen, diesen nicht abfragen können.

Dies ist im Einzelplatzbetrieb natürlich völlig egal, wenn man aber seinen Kalender freigeben möchte, dann ist die Mischung dieser Welten ziemlich hinderlich. Entweder man steigt auf Outlook um 😡 oder man sucht nach Wegen, wie man denn seinen aufwendig gepflegten Kalender in Richtung Outlook/Exchange synchronisiert bekommt. Letzteres habe ich gemacht und bin dabei auf dieses Tool gestoßen, welches aktiv entwickelt und ziemlich gut funktioniert:

https://sourceforge.net/projects/outlookcaldavsynchronizer/

Der Outlook CalDav Synchronizer erlaubt verschiedene Arten der Synchronisation (Merge, Replicate, Two-Way) mit mannigfaltigen Einstellungsmöglichkeiten. Weiterhin kann er verschiedene Profile (=Kalender) verwalten und spricht nicht nur generisches CalDav (das wird beim Webmailkalender „gesprochen“) sondern hat voreingestellte Profile für Google, GMX und Co.

Ich synchronisiere damit nun von Webmail nach Exchange, wobei der Webmail-Kalender nur gelesen wird und der Outlook-Kalender nur empfängt. Meine Kollegen können sich somit also immer einen Überblick meiner Termine verschaffen und ich muss kein Outlook zur Mailverwaltung nutzen 😉


Moodle 3.1 – neue Version mit neuen Funktionen

Zum Semesterbeginn konnten wir Moodle auf die Version 3.1 aktualisieren. Neben neuen nützlichen Funktionen, hat sich das Auswahl-Menü im oberen Bereich marginal geändert. Nach der Anmeldung erscheint nun der eigene Nutzername im oberen Bereich neben dem Moodle-Logo. Wenn man darauf klickt erhält man eine Auswahl, um zum Dashboard, Profil etc. aufzurufen. Bisher gab es das an dieser Stelle nicht. Das ist mit der neuen Version 3.1 hinzugekommen. Dadurch wird der Menü-Bereich „Für Studierende“ überflüssig. Man findet diese Informationen nun als Auswahl hinter seinem Namen.

Etwas Ärger bereiten noch Listenpunkte, die in Moodle (CSS-Einstellungen), daran wird aber gearbeitet. Insgesamt ist die neue Version jedoch erfreulich, weil es einige sehr nützliche Funktionen gibt, wie z.B. den Studierenden-Ordner, den sich viele Lehrende und Studierende gewünscht hatten.

Im folgenden haben wir eine kurze Übersicht der Neuerungen in Moodle 3.1. zusammengestellt: Weiterlesen Moodle 3.1 – neue Version mit neuen Funktionen


Twitter Cards für tt_news

Lösung einer Twitter Cards Implementation für TYPO3 und tt_news.

Einzubinden beispielsweise als Extension Template auf der Single-View-Seite von tt_news.

### Twitter Card:
page.headerData.500 = TEXT
page.headerData.500.value (
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@" />
)
 
 
temp.twitterTitel = COA
temp.twitterTitel {
 10=CONTENT
 10.table= tt_news
 10.select {    
   selectFields = title
   pidInList = {$news_pid.value} # set constant or insert PID
   andWhere {
     # grab the querystring vars and assign it to uid
     data = GP:tx_ttnews|tt_news
     wrap = uid = |
     intval = 1
   }
 }
 #10.orderBy = sorting
 10.renderObj =COA
 10.renderObj {
   10=TEXT
   10 {
     field = title     
     stripHtml = 1
     crop = 70 | ...    
   }
 }
  wrap = <meta name="twitter:title" content="|" />
}
 
page.headerData.505 < temp.twitterTitel 
 
temp.twitterDescription = COA
temp.twitterDescription {
 10=CONTENT
 10.table= tt_news
 10.select {    
   selectFields = bodytext
   pidInList = {$news_pid.value} # set constant or insert PID
   max = 1
   andWhere {
     # grab the querystring vars and assign it to uid
     data = GP:tx_ttnews|tt_news
     wrap = uid = |
     intval = 1
   }
 }
 10.renderObj =COA
 10.renderObj {
   10=TEXT
   10 {
     field = bodytext     
     stripHtml = 1
     crop = 200 | ...    
   }
 }
  wrap = <meta name="twitter:description" content="|" />
}
 
page.headerData.510 < temp.twitterDescription

Wichtig ist, dass <meta name="twitter:site" content="@" /> noch mit einem Twitteraccount gefüllt werden kann, der als Ansprechpartner dient. Dies ist jedoch nicht mehr zwingend erforderlich. Daher kann die Zeile 5 auch einfach entfernt werden, so denn kein Account angegeben werden soll.

Eine Erweiterung um die Bilder, die in der News benutzt werden, wäre relativ einfach nach o.a. Schema umzusetzen. Das META-Tag, welches hier von Twitter erwartet wird, ist <meta name="twitter:image" content="" />.


Wir bekommen ein Büro geliefert

Da wir hier auf T.11 einen neuen Kollegen haben, braucht dieser natürlich auch ein Büro.
Wir haben durch eine kleine Veränderung der Mediothek noch Platz auf unserer Etage, so dass das Dezernat 5 uns dort ein neues Büro einbauen kann. Aber dafür muss es ja erstmal geliefert werden.

Hier befindet es sich sprichwörtlich noch auf Achse und wird dann per Luftweg zugestellt. Wusste gar nicht, dass das so einfach geht 🙂

Lieferung Bürobaumaterial per Kran Lieferung Bürobaumaterial per Kran Lieferung Bürobaumaterial per Kran Lieferung Bürobaumaterial per Kran

 


Umlaute im E-Mail-Header

Um einen Text mit Umlauten zu verschicken reicht i.d.R. die Angabe des Charsets UTF-8 aus:

MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8

Die From-Zeile dieses Headers wird dennoch nicht korrekt dargestellt:

MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
From: Geräteausleihe <mail@domain.tld>

Umlaute im Header sind von der Charset-Angabe nicht betroffen und müssen über eine UTF-8-Codetabelle mit Unicode-Zeichen direkt codiert werden:

MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
From: =?UTF-8?Q?Ger=c3=a4teausleihe?= <mail@domain.tld>

Erst auf diese Weise wird das ä im Header beim Empfänger korrekt dargestellt.


Fiese Bots, Crawler und sonstiges Getier

Darstellung der varnish ArchitekturDann und wann werden unsere Webserver von fiesem Getier genervt. Spam-Bots, durchgeknallte Crawler und Vulnerability Scanner fallen von Zeit zu Zeit über die Webseiten her und produzieren eine Menge unnötiger Requests und damit Last auf dem Maschinen. Sucht man danach im Web, so findet man eine Menge Anleitungen, wie man den auch bei uns genutzten Webserver Apache so konfiguriert, dass er diese Anfragen ausfiltert und abweist.

Das kann man so machen, ist aber meiner Meinung nach nicht der beste Weg, da noch immer die „böse Anfrage“ direkt an den Webserver gerichtet ist und dieser sich trotzdem damit auseinandersetzen muss. Das wiederum bedeutet immer noch Last auf den Maschinen. Viel besser ist es, diese Art Anfragen gar nicht erst zum Webserver durchzulassen, sondern vorher abzufangen. Da wir den Webbeschleuniger varnish verwenden, ist das relativ einfach.

Jede Anfrage wird von varnish beantwortet. Dieser entscheidet, ob er eine zwischengespeicherte (gecachte) Version der Webseite hat, die er dem Anfragendem zurückgeben kann, oder ob er TYPO3 fragen muss, um eine aktuelle Version zu erhalten. Das ganze macht er mit einer atemberaubenden Geschwindigkeit, so dass wir ihm auch getrost noch weitere Aufgaben übertragen können. Nämlich die „bösen Anfragen“ direkt zu verwerfen und gar nicht erst weiterzuleiten.

Das ganze geht nun mit folgendem Codeschnipsel:

if (
    req.http.user-agent == "^$"
    # UA enthält…
    || req.http.user-agent ~ "^boeserFinger"
    # UA ist exakt gleich…
    || req.http.user-agent ~ "WebVulnCrawl.blogspot.com/1.0 libwww-perl/5.803"
    ) {
      # Frei konfigurierbare Fehlermeldung, beispielsweise entsprechend
      # RFC 2324 (Hyper Text Coffee Pot Control Protocol, HTCPCP)
      return (synth(418,"I'm a teapot"));
    }

Erklärung:

Varnish prüft nun bei jedem eingehenden Request im HTTP Header ob dort ein bestimmter User-Agent (also eine Kennung, die der Anfragende mitsendet) vorhanden ist. Auf dieser Basis lässt er die Anfrage entweder zu oder verwirft diese. Näher beschriebene Zeilen des Codes wie folgt:

  • Zeile 2: Anfragen, die gar keinen User-Agent enthalten
  • Zeile 4: Anfragen, deren User-Agent mit boeserFinger beginnen
  • Zeile 6: Anfragen mit einem ganz bestimmten User-Agent

All diese Anfragen werden direkt durch varnish mit dem HTTP Status 418 beantwortet und damit verworfen. Das Ganze wird in die vcl_recv gepackt und schon sind wir die bösen Jungs los. Das ganze kann man natürlich relativ einfach erweitern und sich so vor fiesen Bots, Crawlern und sonstigem Getier ganz gut schützen.

Und ja, ich weiß, dass man den User-Agent sehr einfach manipulieren kann. Aber 95% der Skriptkiddies lassen sowas out of the Box laufen. Und um die anderen 5% müssen wir uns dann persönlich kümmern.