Kategorien
PHP

empty vs. isset vs. array_key_exists

Ich zitier hier einfach mal. Hab ich nämlich nicht gewusst.

The problem is that there are situations where isset() and empty() are
not appropriate checks. For instance, try this:

$test = array('foo' => null);
echo ((isset($test['foo'])) ? 'true' : 'false'); // echoes 'false'!

What about empty()?

$test = array('foo' => null);
echo ((empty($test['foo'])) ? 'true' : 'false'); // echoes 'true'
echo ((empty($test['bar'])) ? 'true' : 'false'); // also echoes 'true'!

What does that mean? It means that if you want to test for the presence
of a key, you can’t rely on isset() *or* empty()! array_key_exists() is
the only way to reliably verify that the key is present in the array.

$test = array('foo' => null);
echo (array_key_exists('foo', $test) ? 'true' : 'false'); // echoes 'true'
echo (array_key_exists('bar', $test) ? 'true' : 'false'); // echoes 'false'

Quote von Matthew Weier O’Phinney, Zend Framework Developer

Kategorien
PC & Accessoires Sonstiges

Newsgruppen in Thunderbird

Zur Zeit benutze ich wieder ein paar Newsserver. Das klappt alles wunderbar im Thunderbird, mich hat es immer nur genervt das beim Starten von Thunderbird diese Newsgruppen immer geschlossen sind und ich erst alles manuell aufklappen muss. Nunja, ich wusste das dies einstellbar ist, aber gewusst wo:

News-Server beim Programm-Start nicht immer zuklappen

Um News-Server nicht unnötig zu überlasten, zeigt Thunderbird die einzelnen News-Server beim Programm-Start immer „zusammengeklappt“ an. Um dieses Verhalten abzustellen, fügen Sie folgenden Code zu Ihrer user.js hinzu:

// News-Server beim Programm-Start nicht immer zuklappen
user_pref("news.persist_server_open_state_in_folderpane", true); 
Kategorien
Spass

Finanzkrise

Kategorien
Sonstiges Spass

Die zehnte Dimension

Schon eine Weile her, aber im Januar 2007 war ich in Paris. Dort hat mir ’nen Kumpel folgendes Video gezeigt. Ich finds nur gut 🙂

Kategorien
Diplomarbeit

xUnit

Testen von Programmen ist wichtig. Das wurde schon recht früh erkannt. Ich hab ja schon früher über Unit-Testing und Refactoring geschrieben. Jetzt les ich gerade das Buch „xUnit Test Patterns – Refactoring test code“ von Gerard Meszaros (ISBN-13: 978-0-13-149505-0). Dicker Schmöker mit knapp 890 Seiten. Ich werde hier jetzt ab und an ein paar Gedanken zu diesem Buch verfassen und wahrscheinlich auch Kapitelweise eine Zusammenfassung. Eigentlich dient das nur meinem Verständnis, aber vielleicht hat auch jemand anderes was davon 🙂

The Fragile Test Problem

In meinem Praxissemester bin ich über WinRunner gestolpert. An sich eine schöne Idee, einfach ein paar Mausbewegungen und Klicks aufzeichnen und schauen ob auch das rauskommt, was rauskommen sollte. Scheitert aber schon an diversen Sachen, z.B. wenn man die Sprache im Programm umstellt. Zwar sollte sowas nicht die Funktionalität eines Programmes verändern, aber wer weiss, Bugs sind überall. Meszaros kategorisiert das ganze (er nennt es „The Fragile Test Problem“) in vier Fallgruben aufgeteilt.

Behaviour Sensitivity

Wenn sich das Verhalten eines Systems ändert (weil sich z.b. die Anforderungen geändert haben), dann ist die Wahrscheinlichkeit, dass die Tests, die die geänderte Funktionalität prüfen, scheitern sehr gross (uff, was ein Satzbau). Das ist jetzt nichts spezielles für so Programme wie WinRunner, das ist immer so. Wenn ich bei einem Auto auf vier Reifen teste, die Requirements aber plötzlich ein Dreirad wollen, dann MUSS das schiefgehen. Richtig fies wird es erst, wenn wir uns auf die Funktionalität verlassen um das System in einen Status zu bringen, in dem wir einen Test ausführen.

Interface Sensitivity

Grundsätzlich ist das Testen einen Systems über die Benutzeroberfläche eine schlechte Idee. Jede minimale Änderung bringt jeden Test zum Scheitern. Und dies ist völlig unabhängig von der Benutzeroberfläche (GUIs wie QT oder GTK, CLI (Command Line Interfaces) oder Weboberflächen (Buzzword: Ajax, Web 2.0)).

Data Sensitivity

Alle Tests starten an einem Zeitpunkt, an dem bestimmte Konditionen gegeben sind. Irgendwelche Datenstrukturen sind vorhanden und werden genutzt. Solange man nich immensen Aufwand investiert um die Tests von diesen Daten unabhängig zu machen, ist es höchstwahrscheinlich das die Tests scheitern.

Context Sensitivity

Nachdem der Datenkontext schon wichtig ist, kommen natürlich noch andere externe EInflüsse dazu. Das können so simple Dinge wie die Uhrzeit sein (Sommer-/Winterzeitumstellung), aber auch Geräte wie Drucker oder Server.

All diese Abhängigkeiten machen das deterministische Wiederholen von Tests sehr, sehr schwierig. Natürlich gibt es viele Möglichkeiten diese Abhängigkeiten zu umgehen, aber egal welche Methode man nimmt, sie bleiben bestehen. Die xUnit-Familie stellt ein paar Muster zur Verfügung die uns einen grossen Grad an Kontrolle ermöglichen. Wir müssen nur noch lernen sie zu nutzen.

Dieses Testen wird übrigens „regression testing“ genannt. Regression bedeutet auf Deutsch „Rückwärtsbewegung“ und spiegelt das auch gut wieder. Wir haben ein fertiges Produkt und bewegen uns beim Testen von Vorne nach Hinten (Von der GUI zum Backend). Einen völlig anderen Ansatz spielt hier die testgetriebene Entwicklung (test-driven development), die das Prinzip umkehrt. Mittels dieser Methode wird eher das Verhalten von Software die noch geschrieben wird beschrieben, als die fertige Software rückwärts getestet.

Kategorien
Sonstiges

Heiraten

Quelle: Key figures on Europe – 2007/08 edition

Ich hab also noch bissle Zeit mitm Heiraten. Puuuh.

Kategorien
Spass

delete cookies

Kategorien
Sonstiges Spass

Die Hochzeit meines Bruders

Nein, ist kein Kinofilm. Ist tatsächlich passiert. Mein Bruder hat geheiratet und ich war dabei. Das beste Fest der Welt. Ich will euch aber nicht mit Details langweilen, aber es gab viel Spass, gutes Essen, ne Menge Leute, viel Verwandschaft und ein bisschen Alkoholkonsum. Deshalb sofort die von mir persönlich geknippsten und freigegeben Bilder die so schlecht wie möglich das Fest wiedergeben 🙂

Kategorien
Sonstiges

UPDATE: Feed on Feeds

Ich benutze jetzt schon seit über einem Jahr Feed on Feeds. Jetzt fängt das aber an Mucken zu machen. Komischerweise werden irgendwie bestimmte RSS-Feeds so zerpflückt, das nicht viel vom HTML-Code übrig bleibt. Eine temporäre Lösung war alle Feeds zu löschen und neu einzutragen, aber das half genau zwei Updates lang. Und irgendwie ist es auch net so, dass ALLE kaputt wären, es sind „nur“ die Hälfte. Lästig. Entweder fix ich das Problem selber, oder ich such mir was anderes. Lästig.

Kaputtes Feed on Feeds
Kaputtes Feed on Feeds

UPDATE:

So, inzwischen ist das Problem eingekreist. Schuld ist wohl ein PHP-Bug in libxml (http://bugs.php.net/bug.php?id=45996). Lange Rede kurzer Sinn:

Die benutzte Bibliothek simplepie kann insofern gefixt werden, dass es wieder geht:

--- tt-rss-20080919.org/simplepie/simplepie.inc 2008-09-19
02:00:03.000000000 +0200
+++ tt-rss-20080919.alex/simplepie/simplepie.inc 2008-09-21
01:29:13.000000000 +0200
@@ -12761,6 +12761,10 @@
xml_set_character_data_handler($xml, 'cdata');
xml_set_element_handler($xml, 'tag_open', 'tag_close');

+ $data=str_replace("<","<",$data);
+ $data=str_replace(">",">",$data);
+ $data=str_replace("&","&",$data);

// Parse!
if (!xml_parse($xml, $data, true))
{

Soweit so gut. Ich bin bei der Gelegenheit auf einen anderen Newsfeed-Aggregator gestossen: Lilina. Während 0.7 potthässlich aussieht, ist die alpha von 1.0 echt schick. Sobald die zur Beta wird, werd ich da mal einen Blick draufwerfen.

Kategorien
Sonstiges

E-Mail Disclaimer

Ein Disclaimer ist nur neudeutsch für den Haftungsausschluss. Ich hab heute wieder zwei E-Mails bekommen die einen ewig langen Text als Signatur mit sich führen, der darauf hinweist, dass man doch, falls man aus Versehen die E-Mail erhalten hat, diese gleich ausdrucken, verbrennen, löschen und erst gar net lesen soll.

Alles für die Katz. Ungefähr genauso wirksam wie ein Brief an den Nachbarn, mit der Aufforderung doch seine Glasscheiben pink zu tönen. Kann er machen, muss er nicht. Einen schönen Artikel dazu gibt es auf heise.de/ct. Es gibt zwar ein paar Floskeln die Sinn machen würden (z.B. der Widerspruch der Nutzung der Daten), diese sind aber eh nur Zusatzinfos und sind vom Gesetz abgedeckt. Aber wir Deutschen neigen ja dazu alles schön auszuformulieren oder einfach die Sachen von anderen Leuten nachzumachen (z.B. Externe Links/Landgericht Hamburg).