Nach intensiven Gesprächen denke ich oft daran, dass ich bestimmte Argumente oder Perspektiven, die das Gespräch bereichert hätten, nicht angebracht habe, weil ich im passenden Moment einfach nicht daran gedacht habe. Aber auch wenn ich mich dann ärgere, so ändert das nichts daran, dass solche Gespräche einfach nur gut und wertvoll sind.

Ursprünglich mochte ich NetworkManager nicht. Grundsätzlich machte er mehr Probleme bei der Handhabung von Netzwerkverbindungen unter Linux, als er löste. Das ist allerdings schon einige Jahre her und spätestens seit der grandiosen Integration von WWAN-Hardware ist er ein richtig brauchbares Hilfsmittel geworden.

Eine Sache, die mir nun fehlte, war die Möglichkeit nach dem verbinden in ein WLAN eine Authentifizierung via Browser zu automatisieren. Nach einer kurzen Suche stellte sich heraus, dass es mit NetworkManager ein leichtes ist, auch das zu automatisieren. Dazu reicht es ein Shell-Skript in /etc/NetworkManager/dispatcher.d/ abzulegen, dass als ersten Parameter den Namen der betroffenen Verbindung und als zweiten Parameter die Statusänderung der Verbindung (up oder down) erwartet. Daraufhin war es ein leichtes, ein kleines Skript zu basteln, dass die Authentifizierung via HTTP übernimmt, nachdem eine bestimmte Verbindung aktiviert wurde:

#!/bin/sh

# network manager connection name
CONN_NAME="sample_wlan"

# check if this script is triggered for the wlan interface
if [ "$1" != "wlan0" ]; then
    exit 0;
fi

# check if the action is the enabling of the interface
if [ "$2" = "up" ]; then
    # check if the connection we want to automate, is active
    if [ "$(nmcli con status | grep -o $CONN_NAME)" = "$CONN_NAME" ]; then
        wget -q --post-data="username=john&password=123456&possible_other_post_parameters=xyz" https://fqdn-of-the-captive-portal.tld/login.html -O - > /dev/null
    fi
fi

Finde den Fehler:

#!/usr/bin/env python

import sys
if sys.version_info.major < 2 or (sys.version_info.major == 2 and sys.version_info.minor < 7):
    print "python <2.7"
else:
    print "python >=2.7"

Auflösung:
Der Ansatz ist eine nette Idee, funktioniert allerdings erst ab Python 2.7, da Python erst seit dem die benannten Parameter .major und .minor kennt. Damit der Code auch mit Python-Versionen kleiner als 2.7 funktioniert, müsste er wie folgt aussehen:

#!/usr/bin/env python

import sys

if sys.version_info[0] < 2 or (sys.version_info[0] == 2 and sys.version_info[1] < 7):
    print "python <2.7"
else:
    print "python >=2.7"

Siehe auch: http://docs.python.org/library/sys.html#sys.version_info

Das sind Kleinigkeiten, auf die man stößt, wenn man versucht ein auf einem System mit Python 2.7 geschriebenes Skript mit Python 2.6 auszuführen. Wäre ja aber langweilig, wenn alles auf Anhieb glatt laufen würde.

Innerhalb der letzten paar Wochen hatte ich das Vergnügen mehrere ejabberd-Instanzen mit vollkommen unterschiedlichen Use-Cases aufsetzen zu dürfen. Abgesehen davon, dass das Format der Konfigurationsdateien von ejabberd ein wenig gewöhnungsbedürftig ist und ejabberd in diversen Fehlerfällen keine sonderlich aussagekräftigen Fehlermeldungen produziert, waren das sehr gute Erfahrungen. Ich war jedes Mal wieder erstaunt, mit wie wenig Anpassungen an der Konfiguration ejabberd das tat, was er tun sollte.
Die Use-Cases will ich euch natürlich auch nicht vorenthalten. Das waren grob die Folgenden:

  • Instanz mit LDAP-Authentifizierung und Shared-LDAP-Roster
  • Instanz ohne S2S, dafür mit HTTP-Binding nach XEP-0124
  • Instanz mit virtuellen Hosts und Authentifizierung über ein externes Skript

Im Jahr 2007 war ich PHP und all die damit verbundenen Nachteile satt und stieß auf der Suche nach einer Alternative zur Webentwicklung auf Python und das damals noch recht junge Webframework Django. Es war Liebe auf den ersten Blick. Während ich mich in Django einarbeitete und die ersten kleinen “Apps” schrieb, hatte ich regelmäßig aha-Effekte, wenn ich sah, wie einfach sich verschiedene Funktionalitäten implementieren ließen und das wievielfache an PHP-Code man für die gleiche Funktionalität gebraucht hätte.
Doch nicht nur für Webentwicklung lässt sich Django wunderbar nutzen. Wie ich damals recht schnell feststellte, lassen sich aufgrund der Modularität von Django, einzelne Komponenten wunderbar eigenständig nutzen.
Zwei Möglichkeiten möchte ich im Folgenden kurz vorstellen.

Für ein Projekt brauchte ich die Möglichkeit statische Webseiten aus einem via Cron laufenden Skriptes zu generieren. Was bot sich also mehr an, als die Templateengine von Django zu verwenden?
Für ein simples Beispiel reichen sogar schon acht Zeilen Code:

#!/bin/env python

from django.conf import settings
from django.template.loader import render_to_string

settings.configure(TEMPLATE_DIRS=('/home/john/project/templates',))
rendered = render_to_string('template.html', { 'foo': 'cookie' })
print rendered

Das dazugehörige Template könnte wie folgt aussehen:

This is a simple template with {{ foo }}.

Das Ganze lässt sich natürlich nicht nur für HTML-Dateien, sondern für jede Art von Textdateien verwenden.
Ein anderes Anwendungsbeispiel ist die Nutzung des Object-Relational Mappers (ORM) von Django, für hübschen Datenbankzugriff aus beliebigen Python-Anwendungen:

#!/bin/env python

from django.conf import settings

settings.configure(DATABASES={
                    'default': {
                        'ENGINE': 'django.db.backends.sqlite3',
                        'NAME': 'database.sqlite'
                    }
})

from django.db import models

class Animal(models.Model):
    species = models.CharField(max_length=32)
    name = models.CharField(max_length=32)
    
    class Meta:
        app_label = 'animals'

Animal(species='dog', name='rex').save()

for i in Entry.objects.all():
    print i.name

Zu obigem Beispiel seien ein paar Punkte angemerkt:

  • Dass der Import der Models nach dem Konfigurieren der Einstellungen kommt ist Absicht. Django benötigt die Einstellungen zum Laden der Models.
  • Die Meta-Klasse mit der Option app_label muss explizit angegeben werden, sofern man den ORM ohne den Rest von Django nutzt.
  • Das obige Beispiel wird so nicht funktionieren, weil keine Datenbank mit entsprechenden Tabellen existiert. Diese müsste man (in diesem Beispiel) auf anderem Wege anlegen.

Wie man sieht, ist Django toll. Und das nicht nur für Webanwendungen, sondern für alles Mögliche, was auf Python basiert. Wollte ich nur mal gesagt haben.

Da es sinnvoll ist, regelmäßig alte Zöpfe ab zu schneiden, muss diesmal ICQ daran glauen: Ab sofort bin ich nicht mehr via ICQ, sondern “nur” noch via XMPP (auch bekannt als Jabber) erreichbar. Meine JID findet ihr bei Bedarf im Impressum.

Auch das warum ist schnell erklärt: ICQ nutzt ein propritäres Protokoll, erlaubt es laut Nutzungsbedingungen nicht, andere Clients als den offiziellen ICQ-Client zu benutzen und es ist ein zentralistisches System bei einem Anbieter, welcher sich dazu noch über die Nutzungsbedingungen zusichern lässt, das geistige Eigentum aller gesendeten Nachrichten zu erhalten.

XMPP teilt diese Schwächen nicht und seine Verbreitung hat die letzten Jahre stetig zugenommen. So lässt sich beispielsweise der Facebook-Chat via XMPP nutzen und diverse E-Mail-Anbieter (wie zum Beispiel United Internet mit allen @web.de-, @gmx.de-, …-E-Mail-Adressen) bieten analog zur E-Mail-Adresse einen dazugehörigen XMPP-Account an. Außerdem kann bei Bedarf jeder seinen eigenen XMPP-Server aufsetzen und darüber kommunizieren.

There already exist great tutorials how to setup IPSec for IPv6 using racoon for Internet Key Exchange (IKE) like this one or this one.
But for the usage of IPSec inside one subnet, they miss one point: Inside an IPv6-subnet clients depend on the Neighbor Discovery Protocol (NDP) for receiving Link-Layer-addresses. If NDP isn’t working, clients won’t receive the Link-Layer-address of the target host und won’t therefore be able to send packets to it.
Long story short: If you want to use IPSec for IPv6 in the same subnet, you’ll have to add an exception to enable unencrypted ICMPv6-packets. That problem doesn’t occur with IPv4, because the Address Resolution Protocol (ARP), which is used there for the same purpose, doesn’t rely on IP in contrast to NDP.
I had to search a while to figure that out and finally found the solution there: http://www.oss.sgi.com/archives/netdev/2004-02/msg00684.html.

Die letzten Tage habe ich mir ein paar Mal Gottschalk Live angeschaut, da ich Thomas Gottschalks Art mag und ein bisschen seichte Unterhaltung am frühen Abend ja auch nicht schaden kann. Trotzdem ließen mich die Sendungen immer etwas unbefriedigt zurück.
Aber bevor ich mit Kritik anfange, erst mal die Sachen, die mir an der Sendung gefallen: Mir gefällt, dass die Sendung eine angenehme Wohnzimmeratmosphäre ausstrahlt. Das liegt einerseits daran, dass kein Publikum anwesend ist und dadurch die Räumlichkeiten eine gemütliche Größe haben können. Andererseits finde ich die Einrichtung sehr gelungen (vom Schreibtisch mal abgesehen).
Auch gefällt mir die immer halb präsente Redaktion im Nebenzimmer und deren Einbeziehung in die Sendung. Auch die Präsenz in sozialen Netzwerken (Twitter, Facebook) finde ich gut. Dort ist einerseits die Redaktion aktiv und andererseits steht Thomas Gottschalk selbst nach den Sendungen für Fragen zur Verfügung. Diese Verzahnung mit dem Internet ist noch ausbaufähig, insbesondere was den Kanal vom Internet in die Sendung zurück anbelangt, aber schon mal ein guter Ansatz.
Doch nun zu meiner Kritik, zu der ich hoffentlich vernünftige Verbesserungsvorschläge liefern kann:

Werbung

Warum Werbung im öffentlich-rechtlichen Fernsehen in Deutschland überhaupt sein muss, ist mir schleierhaft, aber darüber zu philosophieren würde den Rahmen dieses Beitrages sprengen. Bleiben wir also dabei, dass Werbung sein muss und lediglich das Wie zur Debatte steht. Aktuell gibt es innerhalb der Sendung einen circa fünfunzwanzig-sekündigen Werbespot neben dem als kleines Bild weiterhin das Studio eingeblendet bleibt und ein größerer Werbeblock inklusive Wetterbericht direkt vor dem Ende der Sendung. Den kurzen Werbespot finde ich in Ordnung, da er nicht zu störend ist und den im Studio anwesenden Personen kurz die Möglichkeit gibt, sich untereinander abzustimmen, während zumindest Audio nicht auf Sendung ist. Aber wieso kann man den großen Werbeblock nicht einfach auf direkt nach der Sendung verlagern? Aktuell kommt danach nur noch die Verabschiedung der Gäste und eine Vorschau auf die nächste Sendung. Das Ganze wirkt, als erhofften sich die Verantwortlichen der ARD, dass durch die Werbung vor Ende der Sendung, diese von mehr Zuschauern gesehen wird. Muss ein öffentlich-rechtlicher Sender wirklich mit so plumpen Mitteln arbeiten?

Länge

Aktuell geht Gottschalk Live von Montag bis Donnerstag jeden Tag 30 Minuten (abzüglich Werbung). Wie diese Länge zustande kommt weiß ich nicht, aber ich persönlich würde mir wünschen, dass sie 15 Minuten länger gehen würde. Denn kaum hat man sich auf die Sendung eingestellt, so ist sie schon wieder vorbei. Andererseits muss auch mal jemand an die beiden armen Kameramänner denken. Ich gehe davon aus, dass Steadicams zum Einsatz kommen und deren Handhabung dürfte bei einer Länge von 30 Minuten auf so engem Raum schon einiges an Kraft und Konzentration erfordern. Also einmal Applaus für die Kameramänner.

Inhalt

Inhaltlich finde ich die Sendung viel zu zerfasert. Thomas Gottschalk spricht jedes Mal etliche tagesaktuelle Themen oder einfach nur lustige Geschichten an. Diese wirken teilweise einfach nur aneinander gereiht und deshalb vorgebracht, weil sie auf Thomas Gottschalks Themenkärtchen stehen. Das kann man sicher machen, aber mich würde eine Konzentration auf weniger Themen mehr ansprechen. Natürlich ist Gottschalk Live keine klassische Talkshow und das soll sicher auch nicht das Ziel sein, aber die Gäste sollten meiner Meinung nach mehr in die Sendung mit einbezogen werden und mehr zu Wort kommen. Lieber ein paar lustige Geschichten weglassen und dafür intensiver mit den Gästen reden, was ja durchaus auch über die tagesaktuellen Themen sein kann.

So, genug Kritik erst mal an dieser Stelle. Mal schauen wie sich die Sendung weiter entwickelt.

Apple plant offenbar Werkzeuge zu veröffentlichen, mit denen sich einfach interaktive Bücher für das iPad entwickeln lassen. Insbesondere hat Apple dabei den Gerüchten zufolge interaktive Schulbücher im Auge.
Für Apples Motivation kann ich mir zwei Gründe vorstellen:

  1. Apple möchte Kinder schon früh an seine Geräte gewöhnen und sie so langfristig binden.
  2. Apple möchte die Welt verbessern und Kindern optimale Lernmaterialien zur Verfügung stellen.

Die tatsächliche Motivation ist sicher eine Mischung aus Beidem. Ich höre aber schon die vielen kritischen Stimmen, die nur 1. betrachten und 2. außer Acht lassen. Dabei sind gerade die damit verbundenen Möglichkeiten faszinierend:

  • immer aktuelle Schulbücher
  • Veranschaulichung des Lernstoffes mittels Videos, großflächigen Grafiken und anderen interaktiven Formaten
  • immer parate Schulbücher, ohne dass die Schüler etliche Kilo in Form von Büchern aus Papier durch die Gegend schleppen müssen
  • die Möglichkeit kolloborativer Arbeit, auch von unterschiedlichen Standorten aus

Apple ist nicht das erste Unternehmen mit dieser Idee, aber ich bin mir sicher, dass es das erste Unternehmen sein wird, dass damit in der Masse Erfolg hat. Das ist schade, weil Apple Nachteile wie ein geschlossenes Ökosystem mit sich bringt, aber andererseits haben andere Projekte, die das gleiche Potenzial gehabt hätten, dieses bislang nicht umgesetzt. So hat beispielsweise One Laptop per Child seinen Fokus primär auf Entwicklungsländer und Schwellenländer gelegt, statt ihn auch auf Industrieländer zu legen.

Ich bin gespannt, was Apple am kommenden Donnerstag vorstellen wird und wie sich das Themengebiet rund um digitale Lehrmaterialien in Zukunft entwickelt. Es bleibt zu hoffen, dass Apples Engagement in diesem Markt auch andere Anbieter wachrüttelt und so zur “digitalen Revolution” in Schulen führen wird.

Ich habe vorhin einen Fehler gemacht. Ich bin um Mitternacht an einem belebten Ort gewesen, nachdem ich Silvester die letzten Jahre immer gemieden habe. Mit Blick über ganz Karlsruhe befand ich mich auf dem Turmberg und kam mir vor wie im Krieg. Überall laute Detonationen und von oben sahen die Feuerwerke aus wie Explosionen.
Wieso machen Menschen sowas freiwillig? Das hat doch nichts mehr mit schön zu tun, sondern ist einfach nur angsteinflössend und gefährlich.