Terminfindungswebdienst

28 11 2010

Seit ein paar Jahren veranstalte ich mit ein paar Kollegen in unregelmäßigem Abstand einen kleinen Jour-Fixe, die Terminabsprache findet in einer Mailingliste statt. Die Erfahrung damit zeigt, dass das schon bei 6 Leuten unübersichtlich wird und eine klare Diskussion für Alternativtermine nicht ganz leicht ist. Nun kommt noch ein mehr oder weniger regelmäßiger Spieleabend dazu, an dem auch noch Leute teilnehmen werden, denen ich die korrekte Bedienung einer Mailingliste gar nicht erst zutraue. Es muss also eine alternative technische Unterstützung hinzukommen. Spontan fällt mir da nur Doodle ein, aber deren tabellenartiges System geht mir nicht weit genug, weil es die komplexen Zusammenhänge von Zusagen nicht abbilden kann. Dass man mehrere Daten zur Wahl hat und nur entweder sagen kann, ob man kann oder nicht, reicht eben nicht. Also überlege ich, sowas schnell mal selbst zu schreiben. Aber was braucht es für ein Featureset? Nach ein wenig Nachdenken bin ich auf folgende Funktionen gestoßen:

  • Es muss geschlossene Gruppen geben, die per E-Mail abonnierbar sind. Neue Terminvorschläge (mit oder ohne Alternativen) und Änderungen gehen als Benachrichtigung raus, ein Klick auf einen Link in der Mail sollte dabei direkt einen Status setzen können, ohne, dass man sich extra einloggen muss. Es sollte zudem auch offene Gruppen/Events mit und ohne Einladung geben.
  • Bei mehreren Terminvorschlägen für ein Event muss es eine intuitive Priorisierung geben, vielleicht per Drag and Drop, vielleicht anders. Man muss ausdrücken können, dass einem Termin A lieber als Termin B ist, man aber bei Termin C gar nicht kann. Zudem muss unterschieden werden zwischen benachrichtigt, aber nicht reagiert und einer expliziten Ablehnung.
  • Es muss eine Möglichkeit geben, vielleicht bzw. unter Vorbehalt zuzusagen. Daraus ergibt sich auch die Anforderung, dass es einen leicht zugänglichen Kommentar zu jedem eigenen Voting geben muss. So ein Kommentar sollte nicht chronologisch aufgeführt werden, sondern als Metainformation zum Voting.
  • Man muss seine Votings ändern können, ein Zeitstempel für die letzte Änderung muss dabei veröffentlicht werden. Außerdem sollten Events auch vor ihrem eigentlichen Datum als abgeschlossen markiert werden können.
  • Es sollte die Möglichkeit geben, dass der Eventbesitzer bestimmte oder alle Personen als "Muss dabei sein" oder "Wäre schon wichtig" markieren kann. Zudem sollte er den Usern der Gruppe freistellen können, solche Bedingungen für sich (und ggf. auch andere) zu definieren.
  • Es sollte einen Kommentarbereich geben, wo kurze Diskussionen ausgetragen werden können (etwa "Was essen wir?).
  • Die Votingtabelle sollte via iFrame anderswo einbindbar sein.
  • Die Softwarebasis sollte unter einer Open-Source-Lizenz veröffentlicht werden, so dass jedermann so ein System für sich aufsetzen kann. Möglicherweise kann man sowas auch als Cloud-Dienst für andere anbieten.
  • Es muss eine API (mindestens JSON) geben, über die der Dienst (wahlweise) auch von Außen bedienbar wird. Authentifizierung könnte per oAuth gemacht werden, standardmäßig aber per Cookie und bei Mails via Token. Sicherheit bei der Authentifizierung sollte im Zweifel gegenüber Komfort bei der Nutzung nachrangig behandelt werden.
  • Die Oberfläche sollte optisch angenehm sein und sich mit ausgeprägter AJAX-Unterstützung flüssig bedienen lassen. Ein Fallback mit Mindeststandard für Nutzer ohne JavaScript könnte implementiert werden, aber es dürfen dadurch keinerlei Komforteinbußen bei Nutzern mit JavaScript entstehen. Der Internet Explorer 6 (und ggf. auch 7) wird als Browser nicht berücksichtigt, solche Nutzer werden entweder gewarnt (und können es dann wenigstens mal versuchen) oder sofort abgewiesen. Ausnahme: Der Request wird trotzdem ausgeführt, klicks auf Links in Benachrichtigungsmails müssen immer funktionieren. Technisch wird auf CSS3 und HTML5 gesetzt, als JavaScript-Framework kommt jQuery zum Einsatz, serverseitig basiert das System auf PHP 5.3 (und MySQL oder SQLite via PDO) und ggf. auf einem Framework (Symfony, Zend, Flow3). Gegen ein Framework spricht, dass man das System ggf. kapseln könnte, um es als PlugIn für verschiedene CMSe zu portieren. So komplex sollte das nicht sein und das MVC-Paradigma und andere Design-Patterns kann man auch so nutzen. Der Login-Mechanismus (samt Gruppen- und Userverwaltung), der Dispatcher (für das Routing der Requests und vor allem der API) und das Model müssten dann modular aufgebaut und austauschbar sein, die Output-Templates sind es ja sowieso schon.
  • Ggf. könnte das System nicht nur für Events genutzt werden, sondern auch für die allgemeine Entscheidungsfindung. Man stellt also etwa Pizza, Asia, Pommesbude, Döner und Nudeln zur Wahl und bekommt am Ende eine Entscheidung mit dem besten Kompromiss. Da wird besonders deutlich, wie wichtig eine Einstufung jenseits von ja und nein ist.

Habe ich eine wichtige Funktion vergessen? Gibt es Input? Meldet Euch einfach bei mir, aber denkt daran, dass ich kein ICQ mehr benutze.


Über das Maskieren von Kontonummern

25 11 2010

Es hat sicher jeder schon mal irgendwo gesehen: Während eines Bestellvorgangs gibt man seine Kontodaten an und bekommt die im späteren Verlauf oder auf Rechnungen noch einmal angezeigt. Dabei wird die Kontonummer fast immer teilweise verschleiert. Ich frage mich schon immer, wieso das gemacht wird. Gibt es da eine Vorschrift? Kontonummern gehören für mich nicht zu den sonderlich sensiblen Informationen, sie gehören zum Beispiel zwingend im Klartext auf meine Rechnungen. Das ist nun aber gar nicht das Problem.

Lästig wird das ganze, wenn man mehrere Konten bei einer Bank hat. Ich würde mal davon ausgehen, dass in dem Fall die meisten Leute Konten haben, die sich nur in den letzten Stellen unterscheiden. Sind nun aber von der Kontonummer nur die ersten paar Stellen zu sehen und der Rest mit Sternchen maskiert, weiß kann man nicht erkennen, von welchem Konto denn nun abgebucht werden soll. Also beim Maskieren von Kontonummern aufpassen und die hinteren drei oder vier Ziffern in Ruhe lassen. Wird leider viel zu häufig anders herum gemacht.

Weiß zufällig jemand, ob es eine zwingende (gesetzliche) Grundlage für das Maskieren von Kontonummern in Verträgen und auf Rechnungen gibt? Falls nicht, warum wird es dann überall gemacht? Weil man das halt so macht ist jedenfalls kein guter Grund. Ich vermute ja, dass das dem Kunden irgendein warmes Gefühl der Sicherheit geben soll, dass der Anbieter nicht leichtfertig mit seinen Kontodaten umgeht. Wie auch immer, mich nervt das jedenfalls sehr.


Online-Banking kompliziert

03 08 2010

Ich nutze nun seit über zehn Jahren Online-Banking und bin bei meiner 11. TAN-Liste angekommen. Nun bekomme ich bei StarMoney bei jeder Überweisung die Meldung, dass ich auf smsTAN umstellen kann. Die Website meiner Sparkasse verrät, dass das 9ct/smsTAN kostet mit einer Ausnahme bei Premium-Konten. Trotz der zweistelligen Kontoführungsgebühren, die ich monatlich für meine verschiedenen Geschäfts- und Privatkonten, sowie meine Kreditkarte entrichte, gilt das auch für mich. Wieder einmal bleibe ich also beim klassischen (i)TAN-Verfahren, das weiterhin das bequemste bleibt.

Zu WG-Zeiten hatten wir ein gemeinsames WG-Konto für Miete und Nebenkosten bei der 1822direkt in Frankfurt, wofür ich extra einen Klasse-3-Kartenleser und eine HBCI-Karte angeschafft habe. Dieses Verfahren klang sicher und bequem, war es aber nicht. Also sicher schon, aber bequem keineswegs: Bei jedem Start von StarMoney mache ich einen automatischen Kontenrundruf und aktualisiere alle meine Konten. Leider muss man bei HBCI auch für das Abholen der Umsätze immer die PIN eingeben; bei allen TAN-Verfahren lässt sich die PIN hinterlegen, was in Kombination mit Programmpasswort und TAN-Liste ausreichend sicher ist. Das treibt einen in den Wahnsinn und so habe ich das WG-Konto nur alle paar Wochen aktualisiert. Das reicht aber noch nicht an Unbequemlichkeit: Hätte ich meine Konten bei der Düsseldorfer Stadtsparkasse ebenfalls auf HBCI mit Karte umgestellt, hätte ich bei jedem Kontorundruf zwei Karten und zwei PINs eingeben müssen. Es gibt bei HBCI mit Karte zwei inkompatible Kartensysteme und meine beiden Banken (obwohl beides Sparkassen) benutzten unterschiedliche Systeme, also nichts mit nur einer Karte. Diskettenwechsel sind seit dem Aufkommen von Festplatten reichlich out und ich werde mich garantiert nicht als Kartenjockey verdingen.

Mein Vater hat inzwischen einige TAN-Verfahren bei seiner (Genossenschafts-)Bank durch, aktuell hat er ein unfassbar kompliziertes chipTAN-Verfahren am Start: Man bekommt vom Bankprogramm zwei Codes angezeigt, die man in einen Kartenleser eintippt, in den man seine Kontokarte steckt. Dann kann man sich eine TAN generieren lassen, die man wiederum vom Winzdisplay des Kartenlesers ablesen und in den Computer eintippen muss. Wow, das bekommt den Preis für das lästigste TAN-Verfahren. Nur meine Mutter treibt mehr Aufwand für Überweisungen, indem sie Überweisungsträger ausfüllt und per Post (und jeweils frankiert) an ihre Bank sendet.

Meine Sparkasse bietet neben dem smsTAN-Verfahren, das sich wohl von selbst erklärt, auch ein chipTAN genanntes Verfahren an. Hierbei kauft man einen Kartenleser für einen geringen zweistelligen Betrag (Ausnahme Premium-Konten, die bekommen das Ding geschenkt), in den man immerhin keine zwei Codes eintippen muss, sondern das Gerät vor ein flackerndes Muster auf dem Bildschirm hält. Bei gesteckter Kontokarte erzeugt das Ding dann eine TAN, die man abtippen muss. Immer noch kompliziert, aber nicht so irre, wie zwei Codes abtippen zu müssen. Trotzdem viel komplizierter als einfach eine TAN von einer Liste abzutippen und durchzustreichen.

Es gibt noch etliche weitere mehr oder weniger komplizierte Verfahren für Menschen, die unachtsam genug sind, ihre TANs auf jeder dahergelaufenen Phishingseite einzugeben. Mein Tipp gegen die Angst vorm Phishing oder sonstigen Angriffen: Einfach kein Webbanking machen, StarMoney kostet zwar immer mal wieder Geld und nervt auch ziemlich, aber wer kein Webbanking macht, braucht sich nicht vor dessen Gefahren zu fürchten. HBCI mit PIN/TAN ist nachwievor das bequemste Online-Banking und wer einmal in StarMoney einen bestimmten Umsatz von vor vier Jahren gesucht und auf Anhieb gefunden oder alle Umsätze eines bestimmten Absenders heraus gefiltert hat, wird schon aus Bequemlichkeit kein Webbanking mehr machen wollen.

P.S. Ich tue deswegen so, als gäbe es neben StarMoney keine anderen Bankprogramme, weil ich mir die kostenlosen davon irgendwann einmal angesehen habe: Gruselig bis sehr gruselig. Und die anderen kommerziellen wirkten bei kurzer Betrachtung auch nicht weniger nervig als StarMoney und waren allesamt teurer. Also benutze ich seit Version 3.0 StarMoney und ärgere mich noch immer über die selben Kleinigkeiten. Beispiel: Auf meinem 24" Bildschirm ist massig Platz für die Umsatzliste, aber die beiden letzten Spalten (Buchungsbetrag und Saldo) stellen sich immer wieder auf eine zu schmale Breite zurück, bei der schon die dritte Stelle vor dem Komma nicht mehr ganz zu sehen ist. Anderes Beispiel: Wenn ich bei den Kreditkartenumsätzen eine Kategorie vergeben will, treffe ich häufiger das Feld dafür nicht genau, was die Liste dazu veranlasst, ganz an den Anfang zu springen. Und die Liste ist lang. Anderes Beispiel: In verschiedenen Listen (u.a. der Kategorienliste) kann man nicht mit dem Mausrad scrollen. Anderes Beispiel: Füllt man bei einer Überweisung nicht zuerst das Nanensfeld aus, werden alle anderen Felder beim ersten Buchstaben, den man in das Namensfeld eintippt automatisch mit den letzten Daten für den betreffenden Namen gefüllt. Man muss also immer zuerst den Namen ausfüllen oder man füllt mehrmals aus. Besonders lästig ist das in Kombination mit der bequemen Übernahmefunktion aus der Zwischenablage, wenn dort kein Name enthalten ist. Letztes Beispiel: Wenn man eine Kontonummer oder Bankleitzahl einfügen möchte, die Leerzeichen enthält, lehnt StarMoney das rundweg ab, statt einfach die Leerzeichen zu entfernen. Ich könnte noch ein paar Absätze lang so weiter machen.


Nur halb so schlimm: Eigene Short-URLs

05 09 2009

Vor einiger Zeit habe ich gefordert, dass größere und oft bei Twitter verlinkte Seiten eigene kurze URLs für ihren Content anbieten. Neulich erst habe ich mir dann Gedanken gemacht, wie man Short-URLs und so verüberflüssigen kann. Auf diese große Lösung mag ich nicht warten, aber zumindest bei der kleinen Lösung kann ich mit gutem Beispiel voran gehen. Also habe ich gerade schnell ein kurzes Script geschrieben, das kurze URLs für mein Blog in die vollen URLs umsetzt. Zum Beispiel lautet für diesen Eintrag die kurze URL http://spackblog.de/668, was mit 23 Zeichen deutlich kürzer ist als die verdammt lange volle URL und vor allem kürzer als 30 Zeichen, ab denen Twitter ungefragt mit bit.ly verkürzt.

Ich hatte eine Weile überlegt, diese Funktionalität als Serendipity-PlugIn zu veröffentlichen, aber das habe ich aus verschiedenen Gründen nicht gemacht. Ein Grund ist, dass mich ein undankbarer Vollspacko im S9Y-Forum angesaugt und als Schnösel bezeichnet hat, als ich mein letztes PlugIn dort vorgestellt habe. Ich will da gar nicht genauer drauf eingehen, Folge ist jedenfalls, dass meine Lust auf die extra Arbeit für ein S9Y-PlugIn dadurch doch sehr gesunken ist. Ein weiterer Grund ist, dass der generierte Link irgendwo im Template und noch mal im Header positioniert werden muss, damit es Sinn macht. Das kann ein PlugIn nicht flexibel alleine regeln. Man könnte den Link allenfalls dort hinpacken, wo momentan auch die Tags sind, aber das gefällt sicher nicht jedem. An die .htaccess des Blogs, oder wenn dieses in einem Unterverzeichnis steckt auch an die .htaccess der Domain muss man auch noch ran. Spricht alles gegen ein PlugIn. Sowas gehört in meinen Augen sowieso in den S9Y-Core.

Das Script funktioniert super simpel. Alles fängt mit einer Anweisung in der .htaccess an, die alles, was nach kurz-URL aussieht an das Script weiterreicht:

RewriteEngine On
RewriteBase /
RewriteRule ^(e|a|c)?([0-9]+)/?$ s9y_shorturl.php?type=$1&id=$2 [NC,L]

Man kann schon sehen, dass das Script auch kurze URLs für Kategorien und Autoren unterstützt. Der spannende Teil im Script selber ist die Datenbankabfrage, die die kurze URL aus der Datenbank ausliest:


// open a database-connection
$dbh = new PDO('mysql:host=' . $db_server . ';dbname=' . $db_database, $db_user, $db_pass);

// prepare the statement
$stmt = $dbh->prepare('SELECT permalink
  FROM s9y_permalinks
  WHERE type = :type
    AND entry_id = :entry_id
  LIMIT 1');

// execute the statement
$stmt->execute(array(':type' => $type, ':entry_id' => $entry_id));
  
// read the returned urlpart
$urlpart = $stmt->fetchColumn();

// close the database-connection
$dbh = null;

// redirect the user with a 301 status code (moved permanently)
header('Location: ' $blog_base_url . $urlpart, true, 301);
exit;

Der Rest vom Script besteht aus Fehlerbehandlung und Variablen-Vorbereitung, die ich hier mal weg lasse. Der ganze Code findet sich im Nachtrag zum Download. Damit ist der erste Teil schon fertig, der die kurzen URLs auflöst. Für die kurzen URLs werden einfach die von Serendipity vergebenen IDs genutzt, der Parameter type kann übrigens 'entry', 'category' oder 'author' sein. S9Y führt eine eigene Tabelle für die Zuordnung von IDs und URLs, die man nur abfragen muss.

Der zweite Teil ist leider Handarbeit im Template. Man muss dazu an der Stelle, wo der Link auftauchen soll folgenden Code in der entries.tpl platzieren: <a href="http://SHORTURL_DOMAIN/{$entry.id}">http://SHORTURL_DOMAIN/{$entry.id}</a>. SHORTURL_DOMAIN muss natürlich durch die jeweilige URL ersetzt werden, in meinem Fall ist das tatsächlich eine andere Domain als die, auf der das Blog läuft. Ich habe zusätzlich noch in der index.tpl im Headerbereich im {if $entry.id} Block einen Short-URl Autodiscovery Link eingefügt, wie er hier beschrieben ist.

Das ganze arbeitet extrem simpel und macht genau das, was es soll: Wenn jemand meinen Blog bei Twitter und Co. verlinken will, kann jetzt meine 23 stellige Kurz-URL hernehmen und sich so den Scheiß mit den verkürzten URLs sparen, bei denen man nicht weiß, wohin sie eigentlich linken. Alle Seiten sollten solche eigenen Kurz-URLs haben, dann wäre das mit Twitter nur noch halb so schlimm.

Nachtrag 24.02.2011: Weil eine Anfrage nach dem vollen Code kam, habe ich den mal hübsch gemacht und zum Download bereit gestellt. Das Script selber hat außer PHP 5.1 mit PDO keine Abhängigkeiten und stört auch andere Scripte nicht, solange sich die Rewrite-Regeln in der .htaccess vertragen. Wer ganz sicher gehen will, betreibt das alleine auf einer (Sub-)Domain. Viel Spaß damit. Ach ja, Lizenz ist cc-by-sa, das sollte genug Freiheiten lassen.


Vista entlarvt schlecht programmierte Programme

08 04 2009

Ich habe heute den ganzen Tag Vista plus etliche Programme auf einem iMac 24" installiert. Entgegen landläufiger Meinungen hatte ich nur bei einem Programm Probleme, die auf Vista zurückzuführen waren. Oder anders herum: Vista entlarvt die miese Programmierung dieses Programms derart schonungslos, dass sein Entwickler (der inzwischen aufgegeben hat) zum Start von Vista einen Jammerbrief über dieses böse Vista an seine Kunden mit Wartungsauftrag geschickt hat. Dieses Gejammer ist unfassbar peinlich, weil das Programm seit etlichen Jahren schon nicht sauber funktioniert. Unter anderem arbeitet es schon immer ohne sinnvollen Grund nur mit Administratorrechten. Ich kenne den genauen Grund zwar nicht, aber das ist auch völlig egal, denn offensichtlich bestünde dieses Problem bei halbwegs sauberer Programmierung nicht. Aber das ist nicht der einzige Fehler. Das Programm ist ein Musterbeispiel, wie man etwas nicht machen sollte; ergonomisch und programmiertechnisch einfach nur katastrophal.

Ich hätte glatt Lust, mal einen Screencast zu machen, wo ich dieses Stück Software-Dreck en Detail zeige. Was mein Kunde mir über die Jahre schon an Geld bezahlt hat, damit ich die Probleme so gut es geht behebe, ist wirklich immens. Übrigens habe ich auch für die mehrfache Neuinstallation eines HP-Druckertreibers schon so viel Geld in Rechnung gestellt, dass man gleich zwei der problemlosen Brother Geräte hätte kaufen können, mit dem wir diesen HP OfficeJet dann endlich ersetzt haben. Was soll ich sagen: Inzwischen gibt es dort neben dem uralten HP LaserJet 4L nur noch drei Brother-Geräte und keins davon hat jemals für unnötigen Supportaufwand gesorgt. Ein Traum, kann ich nur sagen: Drucker ans Netz, CD rein, ein paar Minuten lang den Installationsassistent laufen lassen (der fragt, ob man nur Drucker- und Scannertreiber oder die ganze Software haben will), fertig. Sogar der "Scannen an" Knopf am Gerät funktioniert sofort wie er soll und im Gegensatz zur Höllen HP-Software sogar dauerhaft. Danach kann man die Geräte schlicht vergessen, so wie es sein soll. Den kleinen Monochrom-Laserdrucker habe ich tatsächlich seit seiner Installation vor einigen Jahren nur zum woanders hinstellen mal anfassen müssen. Ich frag schon gelegentlich nach, ob der überhaupt noch benutzt wird, weil ich nichts davon höre. Ja wird er, täglich.


Layer-Ads Wut im Besonderen

03 12 2008

Ich liege gerade im Bett und wollte schnell noch etwas mit dem Handy im Netz nachschlagen. Aber Pustekuchen! Die Seite mit der gesuchten Information nervt mit Layer-Ads (in dem Fall 1&1). soweit kein Problem, aber das Drecksteil kommt via JavaScript beim Scrollen einfach mit. Auch das wäre noch kein Hindernis (der Webstandards-Befütworter spricht hier von Barriere), wenn damit auf kleinen Bildschirmen der Schließen-Knopf nicht niemals sichtbar werden würde. So eine Scheiße, echt mal!

Das ist allemal noch nerviger als die Layer-Ads, deren Schließen-Knopf noch mal eben ein Popup öffnet, statt die Werbung zu schließen. Oder die Layer-Ads, deren Schließen-Knopf erst nach einigen Sekunden überhaupt mal erscheint. Eigentlich ist jeder Layer-Ad nicht nur ein bisschen störend, sondern ein guter Grund, andere Seiten zu nutzen. Ich hasse die Dinger.


Google mag mich jetzt nicht mehr so sehr

14 11 2008

Vor einigen Wochen habe ich meine robots.txt angepasst und Suchmaschinen verboten, meine Tagübersichten zu indizieren. Warum? Viele Besucher kamen mit Suchwort-Kombinationen auf meine Seite, die in diesem Kontext in keinem meiner Artikel vorkommen. Teilweise waren da ganz abgespacte Sachen bei, wo mir nicht mal zu den einzelnen Begriffen ein Beitrag eingefallen ist, den ich mal geschrieben haben soll. Der Grund für dieses von allen Seiten ungewollte Ergebnis – immerhin hat niemand etwas von solchen Treffern, ich binde ja keine Werbung ein – waren stets meine Tags-Übersichts-Seiten, die verschiedene Beiträge mit gleichem Tag hintereinander ausgeben, auch wenn sie sonst inhaltlich nichts miteinander zu tun haben. Also habe ich diese Seiten kurzerhand für Suchmaschinen verboten und bin damit bei vielen Suchbegiffen von der ersten Google-Seite verschwunden. Bin ich traurig darum? Eigentlich nicht, weil ich das Gefühl habe, die Welt ein kleines Stück besser gemacht zu haben. Meinen Besucherzahlen hat das nur bedingt geschadet. Ich habe zwar etwas weniger uniqe visitors, aber dafür deutlich mehr page impressions. Eine Folge qualitativerer Suchtreffer? Vorher hatte ich nämlich eine große Zahl von enttäuschten Besuchern, die bei mir nichts zum Suchtreffer passendes gefunden und sich gleich wieder verpisst haben. Jetzt, kann ich mir zumindest vorstellen, regen quantitativ weniger, aber tendenziell qualitativ hochwertigere Treffer mehr Leute zum stöbern in meinen anderen Artikeln an. Ob das wirklich so ist, werde ich allerdings nicht erfahren, dafür kann ich mir das gemütlich einbilden.

Wegen dieser guten Erfahrungen habe ich ab sofort auch die Kategorienseiten verboten. Möglicherweise werde ich das ganze aber umstellen: Momentan verbiete ich Suchmaschinen ja das Betreten der betreffenden Seiten. Besser wäre da natürlich die Meta-Angabe <meta name="robots" content="noindex,follow">, aber die muss ich erst bei Gelegenheit in die passenden Templates hacken. Damit würden Suchmaschinen die Seiten betreten und den Links folgen, aber eben nur die Inhalte nicht in den Index aufnehmen. Die optimale Lösung eigentlich. Wenn ich mal ein eigenes Template baue oder gar die Blogsoftware wechsel, mach ich das. Vielleicht auch vorher mal.

P.S. es ist bei diesem Blog nicht im geringsten meine Absicht, nur möglichst viele PIs zu generieren. Für Websites mit diesem Ziel ist die hier beschriebene Maßnahme natürlich fast immer pures SEO-Gift. Möglicherweise steigert es aber das Google-Karma und kommt einem irgendwann zu Gute, wer weiß.


Dumme Lightboxen

14 09 2008

Lightboxen, also diese Dinger, die Bilder und anderes schön anzeigen, ohne ein echtes Popup zu sein, sind ja eine feine Sache. Einige Lightboxen erkennen nämlich die Bildschirmauflösung des Benutzers und skalieren die Bilder entsprechend, so dass sie so breit wie möglich sind, aber noch in den Browser passen. Eine kluge Idee an sich, wenn sie nicht von Zeit zu Zeit etwas hirnlos implementiert wäre. Ich habe eine Auflösung von 1920x1200 auf meinem 24"-Bildschirm. Diese hohe Auflösung nutze ich dazu, neben normalbreiten Fenstern noch Chatfenster, Audioplayer und solchen Kram sichtbar zu halten. Vor allem aber sehen die meisten Websites in so breiten Browsern völlig dämlich aus, weil sie nicht mal die Hälfte der Bildschirmbreite füllen. Jetzt kommt das Problem mit den kurzsichtig programmierten Lightboxen ins Spiel: Besucht mal diese moderne Seite eines Wohnwagenherstellers (via Alex) und öffnet eines der Bilder. Surft ihr mit maximiertem Browserfenster ist alles OK, tut ihr das nicht, ist das Bild breiter als das Browserfenster und ist nicht mehr sinnvoll zu erkennen.

Das dort eingesetzte Lightbox-Script ist Lightview und das macht den kapitalen Fehler, hier die Bildschirmausflösung abzufragen und nicht die Größe des Viewports (der im Browser sichtbare Bereich). Update: Das Problem tritt nur in Opera auf. Warum? Denken die Entwickler, jeder surft immer maximiert? Was ist mit Leuten, die einen erweiterten Desktop haben (mehrere Bildschirme)? Und was ist mit Leuten, die ihre Websites gezoomt anschauen? Und wie dämlich ist der gesamte Ansatz, wenn nur die Breite beachtet wird und nicht die Höhe? Die Bilder auf der verlinkten Seite haben ein 4:3-Format, so dass es auf einem Widescreen-Monitor mit hoher Auflösung zwangsläufig oben und unten abgeschnitten wird. Scrollen ist aber nicht, weil das Bild leider mitscrollt. Nett gemeint, aber völlig unzureichend umgesetzt.

Lightview ist aber nicht das einzige Script, das diesen Fehler macht, der gleiche Effekt kommt mir immer wieder unter. Meistens fällt das nicht auf, weil die Bilder nicht größer als mein Viewport sind. Aber wenn das der Fall ist zeigt sich sehr imposant, dass der Entwickler des Scripts nicht zu ende gedacht hat und so die Usability am Ende sinkt statt steigt. Das Bild wird man übrigens mit einem beherzten Druck auf Esc wieder los, oder indem man die Seite weit genug heraus zoomt.

Nachtrag 16.09.2008: Wie ich gerade feststellen musste, tritt das Problem bei Lightview nur in Opera (getestet in 9.52) auf, im Firefox orientiert sich die Bildgröße in Höhe und Breite korrekt am Viewport. Nach etwas Recherche weiß ich jetzt auch, wieso: Die von Lightview eingesetzte JavaScript-Bibliothek Prototype hat ein Problem mit der von Opera seit Version 9.5 veränderten Handabung des Viewports. Klingt kompliziert? Ist es auch. Also kurz gesagt: Lightview arbeitet korrekt, nur gibt es eine Inkompatibilität der benutzen Prototype-Version mit Opera 9.5. Das Ergebnis ist das gleiche: Usability-mäßig gut gemeint, am Ende steht aber ein dickes Minus. Ein generelles Problem mit solchen JavaScript-Spielereien, mit denen man stets vorsichtig umgehen sollte.