Aus dem Maschinenraum

Heute mal wieder so ein paar schöne WTF-Momente gehabt. Das ist zwar bei WordPress nix neues, weswegen ich heute auch mit Serendipity experimentiert hab. Das ist zwar toll, aber die Permalinkstruktur gefällt mir nicht wirklich, und der Import hat auch nicht geklappt (konsquent falscher Zeichensatz). Ist aber hier nicht das Thema 😉

Was mich heute zum wiederholten Mal verwundert hat, sind spontan nicht mehr funktionierende PHP-Skripte.
PHPExec meinte doch eben völlig unmotiviert („I didn’t touch anything! *looks away*“), mir einen Fehler zu melden, eine Variable wäre nicht initialisiert. Das war sie zwar wirklich nicht, aber das Skript lief ohne Unterschied literally seit Jahren. Fehlerfrei. Ich hab eine glaubhafte Versicherung meines Hosters, dass er auch nix gemacht hat…

Sowas hatte ich schonmal: ein Datenbank-Wrapper, der schon Wochenlang genutzt wurde, meinte auf einmal, Bind-Variablen nicht mehr richtig übergeben zu wollen. Und Überraschung: laut Manual hätte es nie funktionieren können.

Hatte schonmal jemand ähnliche Effekte? Plötzlich veränderliches Verhalten ist etwas, was ich mir so gar nicht erklären kann.

Optimierung mal anders

Aus der Kategorie, „Spaß am Gerät, den man lieber nicht hätte“: Amoklaufende Optimierung im GCC.

Man lese folgenden Code, der alternierend ein LCD mit Zahlen, Buchstaben und „nichts“ füllt:

while (1) {
	for (unsigned char k=0;k<4;k++)  {
		LCD_setCursorPos(k,0);
		LCD_write("1234567890123456");
	}
	delay(250);
	LCD_clear();
	delay(250);
	for (unsigned char k=0;k<4;k++)  {
		LCD_setCursorPos(k,0);
		LCD_write("abcdefghijklmnop");
	}
	delay(250);
}

What could possibly go wrong ❓

Gut, wir kennen ja Murphy: Alles, was schief gehen kann, geht schief. Und wenn schon der Code kaum Fehlerpotential hat, muss zwangsläufig der Compiler seinen Beitrag dazu leisten ❗

Genau das hat er dann auch getan… erstmal äußerte sich das ganze dann darin, dass wider erwarten nur Zahlen, leere Seite und wieder Zahlen kamen. Und dabei die Seite mit den Zahlen irgendwie „zu lang“ zu sehen war.
Was war also los?
Wie in Blick in das praktischerweise im Makefile angeforderte Extended Listing verrät, ist avr-gcc der Meinung, die beiden Schleifen würden das Gleiche machen, und kombiniert die in eine Schleife. Durch Ausprobieren anderer Optimierungsstufen zwischen -Os und -O1 kann man dann gcc immerhin überreden, nicht mehr beides in einer Schleife zu erledigen, sondern die zweite komplett zu ignorieren (toll!)… auch nicht ganz das Wahre. -O0 erzeugt Warnungen in <util/delay.h>, fällt also leider aus.

Die einzige mir bekannte Lösung ist das verlegen der beiden Schleifen in separate Methoden:

void test1(void)
{
	for (unsigned char k=0;k<4;k++)  {
		LCD_setCursorPos(k,0);
		LCD_write("1234567890123456");
	}
	delay(250);
}
 
void test2(void)
{
	for (unsigned char k=0;k<4;k++)  {
		LCD_setCursorPos(k,0);
		LCD_write("abcdefghijklmnop");
	}
	delay(250);
}
while (1) {
	test1();
	LCD_clear();
	delay(250);
	test2();
}

Gut, man muss eingestehen, der gcc hier ist schon etwas (avr-gcc (WinAVR 20080610) 4.3.0) älter. Das ist in einigen Kompatibilitätsproblemen mit anderen Projekten geschuldet, die sich auf ein bestimmtes Verhalten verlassen (hey, ich hab das nicht erfunden, ok?)
Kann also sein, dass das mittlerweile nicht mehr so ist. Aber trotzdem toll, dass so ein Bug es tatsächlich in eine Produktiv-Version schafft. Ist das kein Testcase? Naja, gcc halt…

Medienkompetenz: Nutzen von Instant Messengern

Sowohl Isotopp als auch Fefe veranstalten eine Artikelserie zum Thema Medienkompetenz. Nachdem Wikipedia, Interviews und Suchen schon abgehandelt sind, bleibt noch das Thema „Kommunikationsmittel“ übrig. Immerhin hat da mal jemand so etwas wie EMail, IRC und Instant Messaging erfunden.

Dazu hatte ich sowieso einen Artikel in Vorbereitung, den ich hier mal in etwas veränderter Form in die Artikelserie einreihen will.

Dabei will ich mich selber hier eher auf Chat-Artige, also vor allem IRC und IMs und den halbwegs vernünftigen Umgang damit stürzen, da scheinen doch in vielen Kreisen (auch und grade von erfahrenen Anwendern; Digital Natives) recht große Interpretationsunterschiede zu bestehen.
Continue reading „Medienkompetenz: Nutzen von Instant Messengern“

IMDB Kreuzvergleichssuche

Dieser Artikel sollte eigentlich nur ein Kommentar bei Isotopp werden, ist aber doch etwas länger geworden; deswegen kommt hier tatsächlich mal wieder etwas sinnvoller Content.

Isotopp vermisst in der IMDB eine Funktion, die Schnittmenge der Mitwirkenden von mehreren Filmen bilden zu können. Durchaus verständlich, immerhin hat man ja doch öfter mal einen „Mensch, den/die kenn ich doch aus $Serie/$Film“-Moment.

Ein Kommentator empfiehlt dann die Common Name Search. Die hab ich mal getestet; Fazit: Müll.

Aber zum Detail:
Continue reading „IMDB Kreuzvergleichssuche“

Es lebt!

Nein, Frankenstein hat nix damit zu tun.

Ich hab nur grade mal WordPress auf Version 2.7.1 katapultiert. Sieht nett aus, das ganze. Oh, und schneller fühlt sich das Dashboard auch an, was ja grade für WordPress echt mal nötig ist.

Und dann möchte ich mal noch auf meine Ideenkiste hinweisen, so dolle viel ist da ja noch nicht los.

Anonymity vs. Deniability

Versus? Sollte das nicht immer Zusammen gehören? Nun, ich sage nein (sonst wäre der Artikel auch wertlos…), und gehe sogar soweit zu behaupten dass PD an der Stelle kontraproduktiv sein kann.

Das Konzept von Plausible Deniability ist ja, dass man im Falle eines Falles sagen kann, dass man damit nichts zu tun hat. In Richtung Kryptographie heißt das, dass mir niemand beweisen kann, dass der Datenmüll da auf Laufwerk S: meine streng geheimen Pläne zur Eroberung der Weltherrschaft sind. Die Sache ist nur: das funktioniert nicht. Zumindest nicht da wo es gebraucht wird. Dort, wo „in dubio pro reo“ noch gilt, ist das alles kein Problem. Ich sage, da ist nichts, keiner kann was anderes beweisen: Freispruch. Wunderbar, funktioniert. Aber was passiert, wenn das keinen interessiert?
Mal ein paar kleine Szenarien. Continue reading „Anonymity vs. Deniability“

Too much standard compliance

Hi!

Ich hab mich hier und anderswo ja schon öfter drüber beschwert, dass sich gewisse Browser nicht an Standards halten. ‚Gewisse‘ war dabei meist der IE 😉

Nun, offenbar tritt auch mal das Gegenteil auf… aber zum Anfang.

Ein Uber-1337-Web2.0-Projekt benutzt unter anderem DOM-Manipulation, dabei werden auch <style>-Nodes injected. Und zwar unterhalb des <body>s. Das funktioniert prima im Firefox(3) und in Opera, aber NICHT in IE und Safari/Webkit/KHTML/whatever. Woran liegt das? Nun, laut Standard darf ein <style>-Node nur unterhalb von <head> stehen. Meines Wissens sind Firefox und Opera die einzigen, die das ignorieren und die Dinger auch anderswo parsen. Schade eigentlich, denn meine so einfache Lösung wird jetzt durch Sonderbehandlung für die, die sich an Standards halten wieder komplizierter.

Was mich zum Fazit bringt: auch das W3C hat die Weisheit nicht gepachtet, für mich ist dieser Standard inkonsequent: die an sich ähnlich auszulegenden <script>s darf man schließlich auch überall verwenden.

Wer aber ne gute Idee hat, wie man das so hinkriegt, dass die Styles auch da geparst werden, oder wer mir sagen kann wie ich in IE/Webkit DOM-Änderungen Hooken kann (brauch ich fürs aufräumen, wenn ich doch in den <head> injecten muss), der kriegt ein Bienchen und eine About-Erwähnung 😉

cu,
Martok

Serverumzug

Und wieder mal ein Umzug (gut) überstanden 😉

Diesmal von einem vServer bei NetClusive, der unter anderem immer langsamer geworden ist (es gab andere Gründe, die möchte ich hier aber nicht ausbreiten) und deshalb von meinem Hoster gekündigt wurde, zu einem echten eigenen Server von OVH. Nettes Teil, man merkt die Geschwindigkeitsunterschiede^^

Dank nochmal an Beshig, der das so schön im Skype live gemanaget hat. Macht sich schon besser, wenn man direkt mit den Leuten reden kann 😉

cu
Martok