Mastodon

renephoenix.de

mit Webdesign

PHP-Erweiterungen unter Windows

So schön einfach man PHP unter Windows zum Laufen bringt, um so schwieriger wird es, wenn man es erweitern will.

Konrekte Zielstellung: ich will die Erweiterungen gd2 und curl aktivieren.

Rein intuitiv geht der Griff zunächste in die php.ini-Datei, in der die entsprechenden Zeilen scharf geschaltet werden (d.h. Semikolon am Zeilenanfang entfernen):

extension_dir = "c:/..."
extension=php_gd2.dll
extension=php_curl.dll

Danach stellt man erst einmal fest, daß die php.ini-Datei nicht aktiviert ist (sie soll im PHP-Installationsordner liegen, gut: in der httpd.cong kann man mit der Anweisung PHPIniDir machen.). Die richtige php.ini-Datei wird nun interpretiert, auch wenn bei der Ausgabe von phpinfo() noch das Windows-Verzeichnis angeben ist ...

In verschiedenen Anleitungen steht, daß man noch zwei Dateien ins Systemverzeichnis kopieren muß (was ich nicht unbedingt will, aber ok).

Alles erledigt, doch es läuft noch nicht. Auszug aus der Fehlerprotokollierungsdatei vom Apache:

PHP Warning:  PHP Startup: SVx8bt$x10WVhxc8px95: Unable to initialize module
Module compiled with module API=20020429, debug=0, thread-safety=1
PHP    compiled with module API=20060613, debug=0, thread-safety=1
These options need to match
 in Unknown on line 0

OK, es ist nur eine Warnung. Aber es läuft trotzdem noch nichts. Ein Aufruf folgender Testfunktion bringt eine Fehlermeldung (Funktion nicht gefunden)

curl_version(); gd_info();

Weitere Ideen?

(Ich will nicht noch mal alles mit Xampp aufziehen, ich will dafür auch nicht auf Linux/Mac wechseln)

Die Qual der Wahl - Präsentationen

Um Präsentationen zu erstellen, gibt es mittlerweile mehr Möglichkeiten als OpenOfficeImpress bzw. deren proprietäres Äquivalent von Microsoft.

Die HTML-Welt

Mit der CSS-Eigenschaft page-break-before sowie einer kleinen Sammlung JavaScript lassen sich brauchbare Präsentationen machen. Neben dem klassischen S5 gibt es auch HTML Slidy vom w3c. Mit HTML lassen sich mehrere Darstellungen (projection, screen, print, ...) in einer Datei vereinen. Die Präsentation kann gleichzeitig auf die Homepage gesetzt werden und ist sauber strukturiert. Dafür sind HTML-Präsentation meist an eine Beamerauflösung gebunden, insbesondere bei Bildern (außer der Zoom funktioniert so wie bei Opera)

Die LaTeX-Welt

Es gibt einzelne Pakete, wie z.B. Powerdot, mit denen ebenso durchaus sehr gute Ergebnisse erzielt werden können. Mit Hilfe von PDFLaTeX erhält man die gesamte Präsentation im PDF-Format (zur Darstellung sollte man den Betrachter aus Single Page und Vollbildmodus stellen). Die PDF kann man beliebig vergrößern und die eingebundenen Elemente sind alle vektorbasiert abgelegt.

Es ist also die Qual der Wahl, welche Technologie die bessere für Präsentationen ist.

Kurzschreibweise

Häufig will man einer Variable einen Wert zuweisen — aber es kommen zwei mögliche Quellen in Frage, von denen meist eine leer ist (z.B. beim Auslesen von Systemparameter).

Variante 1: Die klassische Schreibweise:

var a = 1; var b = 0; var c = 0;
if (b)
  c = b;
else
  c = a;

Variante 2: Die elegante Form

var c = b ? b : a;

Das Konstrukt ist wesentlich kürzer, hat aber noch einen Haken: der Ausdruck b ist doppelt.

Variante 3: Das Optimum

var c = b || a;

Wenn b leer bzw. 0 ist, greift die ODER-Regel — und a wird übergeben. Leider funktioniert das Konstrukt nicht in PHP, mit JavaScript dagegen schon.

Spamversand mit E-Mail-Formularen

Viele E-Mail-Formulare (z.B. das hier) bieten einen nützlichen Service an: beim Versand einer E-Mail erhält der Versender eine Kopie in sein Postfach. Ein Spamversender könnte nun die Adresse des Opfers als Absenders eintragen — damit dieser dann Post erhält.

Eben bekam ich zwei E-Mails, die sehr nach so einem Spammer aussahen: einmal eine direkte E-Mail an mich und einmal kam die Benachrichtigung als unzustellbar zurück (Server nicht verfügbar).

Gegen diesen Mißbrauch gibt es technisch kaum eine Schutzmaßnahme, außer man verzichtet auf dieses Feature. Allerdings hat man einen Überblick und sieht sofort, wann der Dienst mißbraucht wurde! Sollten sich solche Fälle häufen, werde ich diese Benachrichtigungsfunktion entfernen.

Phil hätte ähnliche Probleme mit Spammern gehabt, in seinem Falle nutzten die Spammer die Möglichkeit, mittels eines Tricks blinde Kopien zu versenden (BCC). Diese Lücke kann man allerdings beheben, in dem die Absenderadresse keine Zeilenumbrüche enthalten darf.

Markenverwässerung via RSS

Es ist immer wieder erstaunlich, welche Argumente die Betreiber von Internetseiten gegen den Einsatz von RSS nennen.

Am häufigsten höre ich, daß dann weniger Besucher die eigentliche Seite besuchen. Wenn es aber darum geht, gelesen zu werden, ist es eigentlich egal, ob der Besucher einen Browser oder einen RSS-Programm verwendet. Es sind nur unterschiedliche Formate. Wobei gerade RSS die Stammleser bindet.

Bei kommerziellen Seiten kommt der Aspekt der Werbeeinnahmen ins Rennen. Bisher wird Werbung bei RSS eher spärlich eingesetzt. Als Anwender ist das sehr angenehm. Doch was spricht zum Beispiel gegen einen dezenten Werbehinweis am Ende der Zusammenfassung?

Etwas abenteuerlich sind die Argumente von Herrn Böhler (NZZ). Mario Aeby veröffentlichte dazu eine E-Mail, in der von Markenverwässerung, DeepLinks und urheberrechtlichen Dingen die Rede ist.

Wenn sich eine Zeitung schon selber mit dem Urheberrecht behindert, ist das erschreckend. Wie eine Marke durch ein weiteres Format verwässert, leuchtet mir nicht ein. (vgl. Dienstraum)

XHTML 2.0 - eine Revolution?

Vorwort

Die letzten Jahre sind im Bereich der Webgestaltung ohne größere Veränderungen verlaufen. Im Jahr 1999 gab es mit HTML 4.0 die letzte größere Reform (ok, es wurde noch Feinheiten ausgebessert und das ganze XML-konform gemacht), CSS 2 zur Gestaltung – und die gibt es sogar schon seit 1998. Ständig wird sich die Rückschrittlichkeit des Internet Explorers beschwert – und ansonsten? Einige Features bereicherten die Seiten (z.B. RSS, Favicons, …) – aber es waren keine grundsätzlichen Veränderungen!

Zur Zeit befindet sich XHTML 2.0 in der Entwurfsphase, die letzten Arbeitsentwürfe sind vom 27. Mai 2005. Es wird auf jeden Fall eine interssante Sache werden! Mit dem folgenden Text gebe ich Einblicke in XHTML2. Ohne zu viel vorweg zu verraten: es wird eine kleine Revolution werden.

Überschriften

Im traditionellen HTML wird die Ebene der Überschrift mit einer Nummer versehen, welchen Rang sie hat:

<h1>Überschrift ersten Grades</h1>
<h2>Überschrift zweiten Grades</h2>
<h3>Überschrift dritten Grades</h3> ... 
</h6>

Eine ähnliche Praxis gibt es auch in LaTeX: part, chapter, section, subsection, subsubsection usw. Diese Struktur wird komplett aufgelöst. In Zukunft werden die Webseiten in logische Abschnitte verschachtelt – und zu dem Abschnitt kann dann die Überschrift festgelegt werden:

<section>
	<h>Überschrit ersten Grades</h>
	...
	<section>
		<h>Überschrift zweiten Grades</h>
		... 
		<section>
			<h>Überschrift dritten Grades</h> 
			... 
		</section> 
	</section>
</section>

Die vorhandene Beschränkung auf sechs (bzw. in LaTeX auf sieben) Ebenen wird aufgelöst. Die Verschachtelungstiefe kann beliebig sein – auch wenn es in der Praxis selten vorkommt, diese Ebenen auszureizen.

Der weitaus größere Vorteil ist allerdings die einfache Weiterverarbeitung von Texten. Ein für sich stehender Text kann ohne nennenswerten Aufwand als Abschnitt in einem großen Text eingebunden werden. Die Tiefe von Überschriften ergibt sich aus der Verschachtelungstiefe – und nicht aus der Ebene des Überschriften-Tags.

(Kurzer Gedanke am Rande: ein außerhalb von

wäre doch eine praktische Sache für einen Seitentitel?)

Absätze

Es wird einige Vereinfachungen bei der Verwendung von Absätzen geben, die wichtigste ist die Möglichkeit, Blockelemente weiter zu verschachteln:

<p>Es wird einiges neues bei XHTML 2 geben, z.B. das hier 
<ul>
	<li>Neue Struktur für Überschriften</li>
	<li>Listen sind auch in Absätzen erlaubt</li>
	<li>usw..</li>
</ul> Einiges wird sich auch nicht ändern!</p>

Nach den bisherigen Spielregeln muß der Absatz erst geschlossen werden, ehe eine Liste geöffnet wird.

Die Elemente <pre />, <hr /> und <br /> werden verschwinden.

Eine horizontale Linie (hr = horizontal row) ist ein Gestaltungsmerkmal – es wird durch <seperator> ersetzt – und mit CSS dann gestaltet. Diese Veränderung ist im Endeffekt nur eine Umbenennung – und könnte den Tipfaulen weniger gefallen (warum nicht kurz <sep />?).

Ähnlich verhält es sich mit dem vorformatierten Texten mittels <pre /> – in Zukunft ist dies lediglich ein Attribut eines anderen Elementes: layout="relevant".

Bei den Zeilenwechsel wird es dagegen schwieriger. Bisher war der Zeilenwechsel einfaches Tag gewesen:

<p>So funktionierte bisher ein Zeilenumbruch<br/>
und weiter geht es!<br/> und es funktioniert</p>

Nach XHTML 2.0 wird jede Zeile geklammert:

<p><l>Wir definieren zum Absatz eine Zeile</l>
<l>damit wir nun einen Umbruch machen können</l>
<l>und benötigen wesentlich mehr Elemente!</l></p>

Der Ansatz ist zugegebenermaßen chaotisch. Es wird mit verbesserten Gestaltungsmöglichkeiten argumentiert, wenngleich die Frage offen bleibt, wie Zeilenbrüche optisch gestaltet werden sollen. Mit CSS2 gänge es zur Not mit :before/ :after denkbar.

Mit dieser Lösung wird der Quellcode unnötig aufgebläht.h

Eingebundene Bilder und Links

Diese beiden Elemente sind eigentlich die Grundbasis von HTML. Mit <img src="" /> werden Bilder eingebunden, mit <a href=""> Links gesetzt. Auch dieser Ansatz wird aufgeweicht: die relevanten Attribute src und href dürfen künftig in allen Elementen verwendet werden. Ein Bild kann man künftig so setzen (anstelle von <p> ist auch weiterhin <img> möglich, jedoch gibt es das alt-Attribut nicht mehr):

<p src="map.png" type="image/png, image/gif">Ein schönes Bild!</p>

Das w3c bemängelt schon sehr lange und sehr energisch, daß zu einem Bild stets eine Beschreibung als Alternative angeboten werden soll. In den alten Modem-Zeiten war es nützlich: man las erst einen kleinen Beschreibungstext – um dann zu entscheiden, ob man das Bild sehen möchte. Heute spielt viel stärker der Gedanke der barrierefreiheit (hier die Blinden) eine Rolle. Mit der neuen Variation werden die Betreiber der Seiten viel stärker gezwungen, eine Alternative anzubieten (ein Attribut weglassen geht schnell, ein Tag leer lassen sieht dagegen ungeschickt aus).

Das Attribut type ist eine freiwillige Zugabe, mit der ein gewünschten Dateityp angeben werden kann.

<li href="http://renephoenix.de/">René Pönitz</li>

Links sind nun genauso auf jedes Element angewendet. In Bezug auf Menulisten ist dies ein echter Mehrwert!.

Menulisten

Menulisten wurden einst mit <menu> abgebildet – und nacshließend missbilligt. In XHTML2 ist das Tag wieder geboren, es nennt sich nun <nl> – für Navigationsliste.

Metadaten

Ohne diese Kapitel mit Details zu ersticken: es ist künftig möglich, Meta-Angaben an jeder beliebigen Stelle zu plazieren. Im Grunde funktioniert es dann mit dem Element , welches drei Attribute habe wird:

  • about gibt die ID eines Elementes an
  • property gibt das Attribut an
  • rel ist wie bisher für die Beziehung von Adressen wichtig
  • der eigentliche Wert befindet sich dann zischen dem öffnenden und schließenden Tag – und kann bei Bedarf weitere XHTML-Elemente enthalten.

In der Anwendung könnte es z.B. so aussehen:

<p id="p123"> <meta about="#p123" property="title">Wert</meta> eigentlicher Inhalt mit einem Link zur <a href="..." rel="next">nachfolgenden</a> Seite</p>

Das Attribut role

Eine kleine Neuigkeit ist das role-Attribut. Damit können einzelne Bereiche kennzeichnet werden, z.B. als Einleitung, Zwischennotiz oder auch die Beliebte Trennung zwischen Hauptseite und dem Navigationsbereich. In der Praxis wurde diese Eigenschaften meistens im class-Attribut versteckt – welches letztendlich für die Auswahl der richtigen CSS-Klasse zuständig ist.

Das Attribt wurde als RSS-Killer vorgestellt, wenngleich RSS eine völlig andere Zielrichtung geht.

Accesskeys nun zentral

Die sogenannten Zugriffstasten waren bisher verstreut definiert, z.B. in Links oder Formulardaten. Diese werden nun zentral im Kopf verwaltet. Dabei sind diese Tasten für verschiedene Medien unterschiedlich auslegbar.

<access targetid="main" key="M"/>

Eventhandler

Es haben die alten JavaScript-Handler ausgedient. Anstelle von onmouseover und onclick gibt es nun DOM-Handler. So sah der Aufruf einer Eingabeprüfung des Formulares bisher aus:

<input type="submit" onclick="validate(); return true;">

Und so in Zukunft:

<input type="submit"> <handler ev:event="DOMActivate" type="text/javascript"> validate(); </handler> </input>

Es sieht zugegebenermaßen nicht einfacher aus – aber es gibt mehr Möglichkeiten: ich kann verschiedene Handler aufrufen (es ging bisher auch) – ich kann für einen Handler auch verschiedene Sprachen verwenden (da stelle ich den Sinn einmal in Frage). Der Hauptvorteil für diesen Schritt ist das alte Problem, daß die Handler unterschiedlich interpretiert wurden sind (ist onclick nur ein Mausklick oder auch die Entertaste … beim Drücken – oder beim Loslassen?), hier gibt es nun festdefinierten Standards.

Formulare

Den herkömmlichen Ansatz von Formularen wird es mit XHTML2 nicht mehr geben, sie werden ersetzt durch XFORMS. Die wesenttlichsten Verbesserungen sind der Austausch der Daten mittels XML und das Nachladen von bestehenden Formularelementen (Sie sind sogesehen kein Gegenstand von XHTML2 mehr)

Weitere Elemente

  • Die Elemente <del> und <ins> (Darstellung für gelöschten und eingefügten Text) werden umgewandelt in Attribute (edit="inserted|deleted|changed|moved")
  • Das Element <bdo> (zeigt Text in anderer Leserichtung an) wird ebenso ersetzt durch das Attribut dir="rlo".
  • Die Formatierungselemente <b>, <big>, <center>, <font>, <i>, <small>, <u> (das flog schon eher raus) <tt> flogen aus dem Standard raus
  • Aus <q> wird <quote>
  • <acronym> fliegt heraus. Stattdessen soll nur noch mit <abbr> gearbeitet werden.
  • <fieldset> und <legend> gibt es nicht mehr. Mit ihnen konnte man Formulare strukturieren
  • Neues Element <di>: es kann bei Definitionslisten zur Klammerung von Begriff und Beschreibung eingesetzt werden
  • Neues Element <blockcode> zur Abbildung ganzer Codeblöcke. Bisher wurde dies meist mit Hilfe von <pre> realisiert.

Fazit

Wenn man die gesamten Veränderungen betrachtet, sieht man eine Revolution auf uns zu kommen. Dinge, die seit den Anfängen des HTML vorhanden waren, werden nun in Frage gestellt – und bis auf wenige Ausnahmen auch gut gelöst!

Aber jenseits dieser Veränderungen steht natürlich die Frage, ab wann diese Technologien eingesetzt werden können. Die Antwort ist ungewiß! Vermutlich könnte der InternetExplorer wieder die Spaßbremse werden!

Weitere Informationen

CSS 2.1 - die Erneuerungen

Obwohl es Microsoft nach 7 Jahren immer noch nicht geschafft hat, die wesentlichsten Eigenschaften von CSS 2.0 zu unterstützen, geht es langsam in die nächste Runde: Version 2.1. Es handelt sich im Moment nur um einen Entwurf, auf den noch Einsprüche und Kommentare erwartet werden. Unklar ist jedenfalls noch, ob in diesem Jahr mit der Veröffentlichung zu rechnen ist. Ein kleiner Einblick in die Veränderungen:

  • neuer Farbwert: orange
  • neu: display:inline-block (wird wie Block behandelt, allerdings ohne Zeilenumbruch), dafür fällt display:compact; weg.
  • Neue Attribute: cursor:process, white-space:pre-wrap, white-space:pre-line und :before {content: normal}
  • Einschrängnen bei der Textdarstellung: kein text-shadow (konnte bisher nur Safari), font-stretch, font-size-adjust und @font-face

(vgl. golem)

Wie bietet man RSS am besten an?

Diese Frage habe ich mir oft gestellt, doch noch nie eine perfekte Antwort gefunden. Das Grundproblem ist der unterschiedliche Kenntnisstand der Besucher. Es gibt auf der einen Seite noch denjenigen, die noch nie etwas von diesem Nachrichtenaustauschformat gehört haben — auf der anderen Seite die Profis, die Sonderwünsche haben könn(t)en.

Die erste Hürde ist das halbe Dutzend Versionen und der kleine Versionskampf. Nicht jedes Programm beherrscht jede Version. Den eigentlich Text kann man komplett oder als Ausschnitt abbilden. Dem einen gefällt HTML da drin, dem anderen nicht. Und je nach Seite oder Projekt kann man auch RSS für eine ganze Seite anbieten oder es auf einzelne Kategorien beschränken. Und es gibt noch weitere Auswahlmöglichkeiten.

Etwas übertrieben sieht es zum Beispiel nach dem normalen Layout vom WebLog-System b2evolution aus:

Der Profi hat natürlich gerne die Wahl, dem Laien erschlägt man mit all diesen Möglichkeiten — und das Ziel ist wie immer das gesunde Mittelmaß zu finden.

Bei renephoenix habe ich es mit einem RSS-Linkgenerator gelöst. Da berücksichtige ich alle Möglichkeiten — aber er richtet sich eben an den Anwender mit Sonderwünschen.

Relativ gut hat es meiner Meinung nach auch die Sächsische Zeitung gelöst.

Unverzichtbar sollte ein Link auf eine Erklärungsseite sein.