Bi der Wägscheidi

Es isch e wunderschöne Spätsummerabe gsi, wo-n-i vo Aeschi gäge Etzike heizue gange bi. D’Sunne isch scho töif über em Jura gstande und am Himmel si fiini Silberwülchli gwanderet. Vom Wechschte si si cho uf ihrem Wäg, em Oschte zue, dür d’Nacht wird ihri Reis witer gah. Und denn het sich d’Sunne über e Bärg gneigt, meh und meh. No häll und strahlend isch ihres Liecht gsi, aber doch hei sich scho die erschte, zarte Rottön i das abendliche Liecht gmischt und e Schwarm Chräie het über em Wald Kreise zoge und aller Wält verkündet, dass jetz der Abe da isch.

Denn het mi der Wäg es Stück am Waldrand nah gfüehrt, ha mängs vertrouts Plätzli gseh, wo jetz im schönste Spätsummergewand gstande isch, no immer im schönschte, satte grüen und voller lüchtende Farbe. Aber doch ha-n-i am Bode die erschte gälbe Bletter gfunde, es Zeiche, dass der Herbscht nümm färn isch. Aber no isch är nid da und mänge warme, sunnige Tag wird über em Wald schiine, bis der Herbscht z’grächtem wird cho.

Jetz mues i doch no es Stück i Wald ine, isch nid ganz i der Nächi das schöne Plätzli, wo im Früehlig so mängs Vergissmeinnicht blüeiht het? Wohl! I ga töifer i Wald und chume gli druf a das Örtli, bsunders schön isch es gsi, will d’Strahle vo dr Abesunne dür ds’Bletterdach zündtet hei u das ganze Plätzli erfüllt gsi isch mit eme Spil us Liecht und Farbe. Aber wo si o mini Vergissmeinnicht? I finde keis einzigs meh. Eh, das isch halt es Früehligsblüemli, blüeiht zum letschte Mal, wenn der Summer da isch. Aber doch cha-n-is nid gloube, luege hinter mänge Struch und Ascht, ob ächt nid doch eis no da isch und sini zarte, blaue Blüete der Sunne entgägereckt. Nei, keis isch meh da.

Das macht mi truurig, i bliibe stah u sinne, dänke zrugg a Früehlig, wie a däm Plätzli alles voller Läbe gsi isch, wie all die Blüemli glüchtet hei, so alls ob es nie e Winter gäh hät, so als ob es e grosse, grosse Fröidetag wär, wie-n-es nie eine gäh het uf der Wält und nie meh wird gäh.

Aber denn chehre i mi um u gah mi Wäg witer, em Waldrand vor em Dorf zueh. D’Sunne steit no immer über em Bärg, ihri guldige Strahle falle uf e Acher und i gseh, wie mängi Blüete es dert no het. Das tröschtet mi.

Google’s Textverarbeitung ist wieder da

Im vergangenen März hat Google die AJAX-Textverarbeitung Writely gekauft. Kurz darauf wurden keine neuen Registrierung mehr entgegengenommen. Google teilte mit, dass Writely überarbeitet und an die hauseigenen Programmbibliotheken angepasst werden soll. Die scheint nun zumindest in Teilen geschehen zu sein, denn ab sofort können sich neue Benutzer wieder registrieren.

Writely ist im Gegensatz zu Ajaxwrite eine zu 100% in Ajax entwickelte Applikation und macht einen reifen Eindruck. Writely verfügt über einen Importfilter für Microsofts Word, OpenOffice.org und für Dokumente im Rich-Text-Format (RTF). Die zu importierenden Dateien dürfen allerdings nicht grösser als 500KB sein. In bezug auf den Funktionsumfang reicht Writely nicht an die „Grossen“ heran, nur elementare Funktionen zur Formatierung des Textes und zum Einfügen von Bildern und Tabellen stehen zur Verfügung. Für einfachere Dokumente reicht es aber allemal! Zudem können Dokumente mit ein paar Klicks im Internet publiziert oder auf einem Blog veröffentlicht werden. Und wer will, kann anderen Benutzern die Erlaubnis geben, eigene Dokumente zu überarbeiten. Damit es dabei nicht zu einem Durcheinander kommt, bietet Writely eine Revisionsverwaltung und zeigt eine Statusmeldung an, wenn ein andere Benutzer sich anschickt, ein geteiltes Dokument zu bearbeiten.

Durch die Freigabe von Writely hat Google sein Online-Office komplettiert, zur Verfügung stehen neben der Textverarbeitung auch eine Tabellenkalkukation und ein Kalender.

Gottesdienst auf dem Stanserhorn

Bei schönstem Wetter wurde auf dem Stanserhorn Maria Himmelfahrt mit einem durch Pfarrer Gerold Beck zelebrierten Gottesdienst gefeiert. An der Gestaltung des Gottesdienstes beteiligte sich die Jodlermessgruppe Bern und das Alphorntrio Steiweid. Umrahmt von der schönsten Alpenwelt begann Pfarrer Beck die Andacht spontan mit den Worten «Herrgott, wie hesch Du d’Wält schön gmacht!» Die Lieder des aus rund 25 Jodlerinnen und Jodlern bestehenden Chors waren sorgfältig ausgewählt, fügten sich nahtlos in den Ablauf des Gottesdienstes und erzeugten an dem schönen Spätsommermorgen eine besondere und feierliche Atmosphäre. Dass die Jodler sich auf diesen Morgen gut vorbereitet hatten, war hörbar. Die Liedteile wurden gepflegt vorgetragen und mit schönen Melodiebögen gestaltet, der Jodel erklang hell und klar.


Mitglieder der Jodlermessgruppe Bern in Aktion

Umrahmt wurde der Gottesdienst auch vom Alphorntrio Steiweid, das mit zur Kulisse passenden Klängen auf den Gottesdienst einstimmte und auch während der Andacht mehrmals zu hören war. Zu Beginn hatte die drei Bläser offensichtlich Mühe mit der Höhenluft, fanden sich dann aber rasch und erfreuten die Zuhörer mit urchigen Alphornmelodien.

In seiner Predigt rief Pfarrer forderte Pfarrer Beck, dass wir uns wieder mehr in unsere eigene Kultur vertiefen; und damit auch in unsere eigene Religion. Was aber ist der Kern der christlichen Religion? Es ist die Annahme des Opfers, das Gott durch seinen Sohn Jesus Christus vollbracht hat, um uns Menschen zu erlösen. Es ist der von Jesus vorgelebte Weg, der zum Eingang in das Reich Gottes führt. Wie aber können wir uns das Reich Gottes vorstellen? Wir können es gar nicht, antwortet Pfarrer Beck, weil unsere Vorstellungskraft nicht ausreicht, es zu erfassen. Und kein Mensch Gottes hat das Reich Gottes gesehen. Aber Gott liebt die Menschen und hat für jeden, der an ihn glaubt, einen Platz in seinem ewigen Reich bereitet.

Weitere Fotos

Asynchrones JavaScript ohne «AJAX»

Vor einigen Jahren tauchte im Umfeld des Webdesigns der Begriff «DHTML» auf, einer Technik die das Verändern einer Webseite ermöglicht, ohne dabei eine neue Anforderung an den Server zu senden. Nun war DHTML weder eine HTML-Erweiterung, noch eine neue Programmiersprache. DHTML war lediglich der Sammelbegriff einiger Techniken und Methoden. Und sie alle verwendeten bestehende und bestens etablierte Standards: HTML, CSS und JavaScript/DOM.

Mit «AJAX» verhält es sich sehr ähnlich. AJAX nutzt mehrere etablierte Techniken um den Inhalt einer Seite basierend auf Daten zu verändern, die nach dem Ladeprozess vom Server geholt werden. Daher auch der Begriff «asynchron». In der Praxis sieht das so aus, dass der Benutzer im Browser eine Adresse eingibt und damit die zu dieser Adresse gehörende Webseite öffnet. Verwendet die Seite AJAX-Techniken, können durch Benutzerinteraktion jederzeit im Hintergrund Daten vom Server nachgeladen werden, der Inhalt einer Tabelle zum Beispiel.

Um asynchrone Webseiten selbst zu erstellen, ist es nicht zwingend erforderlich, auf eine AJAX-Bibliothek zurückzugreifen, es genügt, die Elemente zu verwenden, die JavaScript mit asynchronen Funktionen erweitern. Im wesentlichen ist dies das XMLHttpRequest -Objekt, das in allen neueren Browsern zu finden ist. Seine Funktionsweise ist sehr einfach: nachdem mit open() eine zu ladende Adresse angegeben wurde, kann die Anforderung mit send() zum Server gesandt werden. Einige weitere Funktionen und Attribute informieren über den Fortschritt des Ladeprozesses und darüber, ob die Operation erfolgreich war, oder nicht. Die folgende, kurze JavaScript Funktion nimmt als Argument eine URL entgegen und liefert als Ergebnis den Inhalt dieser URL:

function getURLContent(url) {
  var xmlHttp = false;
  var urlcontent = '';

  // Mozilla, Opera, Safari sowie Internet Explorer 7
  if (typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  if (!xmlHttp) {
    // Internet Explorer 6 und aelter
    try {
      xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xmlHttp  = false;
      }
    }
  }
  if (xmlHttp) {
    // Synchrones Lesen einer URL
    xmlHttp.open('GET', url, false);
    xmlHttp.send(null);
    if (xmlHttp.status == 200) {
      urlcontent = xmlHttp.responseText;
    }
  }
  return(urlcontent);
}

Im ersten Teil der Funktion wird eine neue Instanz des XMLHttpRequest Objektes erzeugt. Ältere Versionen des IE erfordern eine leicht abweichende Syntax, deshalb wurde eine entsprechende Prüfung eingebaut, damit wir auf jeden Fall eine Instanz erhalten. Anschliessend wird mittels open() und send() eine Anforderung (GET, POST, HEAD) an den Server gesendet. open() legt die Adresse, die HTTP-Methode und den Asynchronmodus fest. send() sendet dann die Anforderung an den Server. Wichtig ist im folgenden der mittels open()festgelegte Asynchronmodus (AM). Wird für AM TRUE angegeben, wartet send() nicht bis das Eregbnis vorliegt, dieses muss mit Hilfe einer Callbackfunktion ermittelt werden. Bei AM=FALSE wartet send() solange, bis der Server das Ergebnis übermittelt hat. Mein Beispiel verwendet einfachheitshalber AM=FALSE.

Es ist nun nicht mehr Schwierig, eine Funktion zu schreiben, die mit Hilfe der beschriebenen Funktion einen in PHP oder PERL geschriebenen Serverscript aufruft und dessen Ergebnis an einer passenden Stelle auf der Webseite präsentiert. Wer in vorgegebenen Intervallen Daten vom Server holen will, kann setInterval() oder setTimeout verwenden. Wie die Daten anschliessend in die Webseite eingesetzt werden, kann bei SelfHTML nachgelesen werden.

Dies alles zusammengepackt auf einer schön gestalteten Webseite lässt bereits einen «Hauch von AJAX» aufkommen.

Update 16.8.2006: Probleme

Ein Problem, das im Internet immer wieder diskutiert wird, ist das Caching. Während Opera das Zwischenspeichern von xmlHTTPRequest Anfragem relativ leicht abgewöhnt werden kann, macht der Internet Explorer erfahrungsgemäss deutlich mehr Schwierigkeiten. Eine Suche in der Foren fördert einen Workaround zutage, der auch beim IE immer Wirkung zeigt: Der gewünschten URL wird bei jedem Aufruf eine Zufallszahl angehängt, also zum Beispiel:

  var rnd = parseInt(Math.random()*99999999);
  var url = 'example.php?random=' + rnd;
  var  content = getURLContent(url);

Damit wird verhindert, dass der aggressive Caching Algorithmus des IE greift: Da die Adresse jedesmal anders ist, muss der Redmond-Browser sie neu vom Server abholen. Natürlich ist dies eine Holzhammer-Methode, ich habe deshalb versucht, das Problem mit HTTP Head Anweisungen für alle Browser zu lösen. Der folgende PHP-Script wird von allen aktuellen Browser beim jedem Aufruf neu abgeholt:

< ?php
  header("Pragma: no-cache");
  header("Cache-Control: no-cache");
  header("If-Modified-Since: 1980-01-01");
  print "Inhalt der Seite";
?>

25 Jahre IBM PC

Gestern Samstag gab es ein Jubiläum zu feiern: Am 12. August 1981, also vor 25 Jahren, stellte IBM in New York der Öffentlichkeit den ersten Personal Computer (PC) vor. Niemand hat damals geahnt, dass dies zugleich der Startschuss für eine Revolution in der Computerbranche war. Innerhalb weniger Jahre entstand ein grosser, weltumspannender Markt für Hard- und Software rund um den PC. Der PC verdrängte die damals populären Homecomputer von Commodore, Texas Instruments und Atari. Und er verdrängte die Computer mit dem bunten Apfel-Logo, so dass Apple das Frotzeln («Welcome, IBM») über den vermeintlich trägen Grosskonzern verging. Der Erfolg rief natürlich Nachahmer auf den Plan und noch bevor IBM die ersten Nachfolger lancieren konnte, erschienen auf dem Markt «Klone», also Computer, die zum IBM PC kompatibel waren.

Warum war der IBM PC so erfolgreich? Er kam zur richtigen Zeit! Kleinere Unternehmen konnten sich keine teuren Zentralrechner («Hosts») leisten und die verfügbaren Homecomputer waren wenig zuverlässig, untereinander nicht kompatibel und für die geforderte Aufgabenstellung nicht leistungsstark genug. Da kam der preiswerte Bürocomputer aus dem Hause IBM gerade recht.

Aber dies alleine erklärt das Phänomen «PC» nicht. Ein wesentlich bedeutender Grund liegt in der Technik des IBM PC. Denn dieser bestand vorwiegend nicht aus Komponenten des Herstellers, sondern aus Elektronikbauteilen, die IBM zusammengekauft hat. Dazu – und das war bei IBM neu – waren diese Bauteile für Programmierer und für Hersteller von Zusatzkomponenten offen dokumentiert. Der PC verfügte über sogenannte «Slots», das sind Steckplätze für Platinen die den Funktionsumfang des PC erweitern: Netzwerkadapter, Grafikkarten, Schnittstellen für Geräte anderer Hersteller, usw. Kurz: Jeder, der für den PC eigene Produkte entwickeln wollte, konnte dies ungehindert tun! Dies war der Beginn einer Eigendynamik, die bis heute ungebrochen ist, denn wesentliche Konzepte des IBM PC finden sich auch noch in den Geräten der Gegenwart.

Einen IBM PC konnte ich mir in den frühen 80’Jahren nicht leisten. Als aber Commodore wenige Jahre später einen günstigen PC lancierte, griff ich zu und kaufte für ca. Fr. 3200.- einen Commodore PC 10. Er besass wie das Vorbild einen mit 4.77Mhz getakteten Intel 8088, zwei 5 1/4 Zoll Diskettenlaufwerke, 256 KB RAM und einen nicht grafikfähigen Monochrombildschirm. Mitgeliefert wurde eine MS-DOS Diskette. Mehr nicht. Was konnte ein Hobby-Programierer damit anfangen? Zunächst nicht viel!

Um eigene Programme zu schreiben – und nur dafür schien mit der PC interessant – gab es nur GW BASIC. Zwar gab es C Compiler, aber die waren kompliziert, quälend langsam und zu teuer. Also schrieb nich meine ersten Programme in GW BASIC: Einfachere Spiele, ein Ranglistenprogramm für Radrennen, eine Karteianwendung, ein KI-Proramm und einiges mehr. Aber, um ehrlich zu sein, es machte überhaupt keinen Spass. Die BASIC-Programme waren langsam und konnten nicht kompiliert werden. Es gab keine Elemente zur strukturierten Programmierung und dass jeder Anweisung eine Zeilennummer vorangestellt werden musste, nervte total!

Ein Lichtblick war kurz darauf ein kleines Programm, das den Bildschirmadapter in einen Quasi-Grafikmodus versetzen konnte. Mit Hilfe eines weiteren Treibers wurde GW-BASIC um einige grundlegende Grafikbefehle erweitert, so dass auf dem Bildschirm Linien und einfache geometrische Figuren gezeichnet werden konnten. Das erstellen eines Spieles in diesem Modus schlug indes fehl weil – wie gesagt – GW-BASIC zu langsam war!

Und dann geschah plötzlich etwas wunderbares: Turbo Pascal für den PC erschien und erlöste Hobbyprogrammierer wie professionelle Entwickler von GW-BASIC. Turbo Pascal war einfach zu bedienen, übersetzte die Programme rasend schnell in effizienten Maschinencode, half dem Entwickler mit aussagekräftigen Fehlermeldungen und einem komfortablen Editor. Pascal erlaubte strukturiertes Programmieren mit Anweisungsblöcken, Funktionen und Prozeduren und noch vielen Leckerbissen mehr. Bei grösseren Projekten konnten die Programme sogar in verschiedene Dateien ausgelagert werden und wenn sie die 64KB Grenze sprengten, behalf mach sich mir Overlays.

Turboman ist wieder da!

In der zweiten Hälfte des 20. Jahrhunderts hatten es PC-Programmierer nicht leicht. Programmiersprachen und Entwicklungswerkzeuge waren teuer und für Hobbyprogrammierer kaum erschwinglich. Alles was blieb, war das zu MS-DOS gehörende GW-BASIC. Es war langsam, weil es den Quelltext direkt ausführte und in seinen Möglichkeiten dermassen beschränkt, dass es nur für einfachere Aufgaben geeignet war – wenn überhaupt. Es benötigte noch nach alter Manier Zeilennummer und ermöglichte strukturiertes Programmieren nur im Ansatz.

Die Rettung kam im Jahr 1983, als Turbo Pascal 1.0 auf den Markt kam. Es war in jeder Hinsicht fantastisch! Turbo Pascal kompilierte auch grössere Programme auf einem langsam getakteten 8/16-Bit PC in wenigen Sekunden, bot eine integrierte Entwicklungsumgebung mit einem an Wordstar angelehnten Editor und erzeugte ausführbare Programmdateien im .com Format, die verblüffend kompakt und schnell waren. Hinzu kamen eine Overlay-Loader, eine ausführliche Dokumentation und eine mit Beispielen vollgepackte Programmdiskette. Die Turbo Pascal Programm Datei selbst war nur 30 KB gross; die meisten Bilddateien auf einer Webseite benötigen mehr Platz…

turbopascal.jpg

Magische Software: Turbo Pascal 3.0 und 4.0

Der Erfolg, den Turbo Pascal während Jahren hatte, war atemberaubend, Borland kam in Lieferschwierigkeiten, wurde aber in kürzester Zeit reich! Gemäss Wikipedia wurden Ende der 80’er Jahre 70% aller Anwendungsprogramme in Turbo Pascal entwickelt. Erst in den 90’er Jahren begann Turbo Pascal an Boden zu verlieren, vor allem weil die Reputation auf Windows nicht gelang. In derselben Zeit beschloss Borland, vom «Turbo» Label abschied zu nehmen. Aus Turbo Pascal wurde zuerst Borland Pascal, später «Delphi».

Ob auch das ein Fehler war? Jedenfalls hat Borland sich nun entschieden, seine Entwicklungsumgebungen wieder mit den alten aber erfolgsverwöhnten Bezeichnungen zu vermarkten. An die schillernden Zeiten der 80’er Jahre wird Borland damit sicher nicht anknüpfen können, reizvoll ist es aber allemal!

«Default», Unknown und None

Index-Spam ist neben den unerwünschten Werbemails im Postfach zu einer echten Plage geworden. Glücklicherweise gibt es gegen Index-Spam ein Mittel, das trotz seiner Einfachheit sehr wirksam ist. Die Technik macht sich die Tatsache zunutze, dass Index-Spam von «Bots» verteilt wird. Dies sind Programme die das Internet nach Formularen aller Art absuchen, die einzelnen Formularfelder mit Links auf zu bewerbende Angebote ausfüllen und zuletzt das Formular absenden. Wird ein Formular mit einem nur durch Menschen Menschen lesbaren Textbild (Captcha) ergänzt, dessen Inhalt in ein Formularfeld eingegeben werden muss, läuft der Spam-Bot ins Leere. Der Inhalt des Textbildes kann von einem Computerprogramm nur sehr schwer oder gar nicht erkannt werden kann.

Es geht sogar noch etwas einfacher: Um festzustellen, ob das Formular von einem Computer oder von einem Menschen ausgefüllt wird, wird eine einfache mathematische Aufgabe gestellt, deren Ergebnis zusammen mit den anderen Formularfeldern ausgefüllt werden muss. Zum Beispiel: Was ergibt 7 + 2. Sicher, hier ist die Chance vorhanden, dass ein Bot die Falle erkennt und richtig reagiert. Ich wollte das genau wissen und baute im Gästebuch eines Verbandes eine entsprechende Abfrage ein. Um zu verhindern, dass eine Erkennungslogik greift, streute ich unsichtbare Zeichen in den Text der Frage ein und gab den Formularfeldern interne Namen, die keinerlei Sinn ergeben. Dann liess ich mit von jedem abgewiesenen Spam per Mail eine Kopie senden.

Einen Monat lang beobachtet ich die Ergebnisse. Während dieser Zeit wurden jeden Tag zwischen 100 und 150 Spam’s gesendet. Am Inhalt war leicht zu erkennen, dass es sich um völlig verschiedene Bots handelte. Einige davon streuten einfach in jedes Feld Links, andere füllten die TEXTAREA’s mit kurzen Texten wie ‚Nice site‘ aus, andere füllten diese Felder mit mehr als 300 Links aus! Und wieder andere sendeten Links in einem Format, das nur für Foren wie phpBB gültig ist und deshalb nicht hier funktioniert – wen kümmert’s!

Die Meldungen stammen meist von dynamischen IP’s, Dialup und ADSL-Zugängen, die Bots laufen somit auf Windows PC’s deren Besitzer von diesen Aktivitäten nichts wissen. Und wie steht es mit der «Intelligenz» dieser Störenfriede? Von den mehr als 3600 Meldungen bestand keine einzige den einfachen Test. Das Feld, in dem das Rechenergebnis erwartet wird, steht meistens nichts, der Name eines Medikamentes oder eines der folgenden Worte: Default, Unknown oder None.

Blumen in Garten

b21.jpg

Der Sommer ist schon fortgeschritten und die vergangenen Tage gaben uns einen Vorgeschmack auf dem kommenden Herbst. Ein kühler Regen befeuchtet den von der Julisonne ausgetrockneten Boden und die Blätter der Bäume wiegen sich in einem frischen Wind. Und schon um neun Uhr Abends kündigt sich die Nacht an. Aber noch ist es nicht soweit, gewiss wird der Sommer sein warmes Licht leuchten lassen, einige Tage noch, ganz gewiss.

b3.jpg

Meine Terrasse zieren Buchsbäume; ich mag diese Pflanze, sie ist das ganze Jahr grün, wächst langsam und ist pflegeleicht. Regelmässig Wasser und etwas Dünger, so gedeiht diese Pflanze auch in einem Topf prächtig. Nur: Buchs ist das ganze Jahr grün, im Frühling bilden sich frische hellgrüne Blätter und zarte Samenkapseln. Ich wünschte mir für die zweite Hälfte des Sommers einige blühende Pflanzen. Ein Platz für die Buchsbäume war auch rasch gefunden, hinter dem Hag bilden sie jetzt eine Hecke und haben genügend Zeit um für den kommenden Winter neue Wurzeln zu schlagen.

b4.jpg

Der Zeitpunkt für den Kauf neuer Töpfe und Blumen war günstig, in vielen Gartencentern gibt es Aktionen, der Sommerflor ist verbilligt und die schönen, blau lasierten Töpfe kosteten noch die Hälfte. Also griff ich kurzentschlossen zu!