Hallo!
Mein Name ist David Müller, ich arbeite bei der Public Cloud Group und wohne in Frankfurt. Hier geht es hauptsächlich um Webentwicklung.Kategorien
- webdev (131)
- php (84)
- Javascript (32)
- Datenbanken (22)
- Software Engineering (12)
- Performance (8)
- Security (27)
- PHP-WTF (11)
- Best of the Web (13)
- Quicktips (32)
- Linux (4)
- Java (3)
- misc IT (10)
- Persönlich (9)
- webdev (131)
Blogroll
Neueste Kommentare
- Tristan Tate bei Javascript: Arrays kopieren
- Daniel Marschall bei Dealing with Trusted Timestamps in PHP (RFC 3161)
- Login Mit Facebook Tutorial – Logini helper bei Facebook API – Tutorial
- PHP validation/regex for URL - Design Corral bei Why URL validation with filter_var might not be a good idea
- Manuel bei Meine ultimativen Buchempfehlungen
Archiv der Kategorie: webdev
Nette Metapher zum Thema ‚Testen‘
Nach der sträflichen Vernachlässigung des Blogs bedingt durch die fiese Klausurphase sind jetzt Semesterferien und die Liste des „Verbloggenswerten“ ist beträchtlich angewachsen – demnächst also wieder mehr Futter. Losgehen solls mit einem netten Spruch eines meiner Profs, der bei Bosch mal Softwarearchitekt war. Bezieht sich übrigens auf das Thema Softwaretests:
Stress ist, wenn man das Fahrrad so schnell schieben muss, dass man nicht aufsteigen kann.
Denkt mal drüber nach ;).… Den ganzen Post lesen
Veröffentlicht unter Software Engineering
4 Kommentare
Needle/Haystack Übersicht
Ich schreibe bald eine Klausur (so richtig auf Papier). Und da sind keine Handbücher oder Funktionsreferenzen erlaubt. Das befinde ich jetzt erstmal für großen Schwachsinn, weil es total an der Realität vorbeigeht. So. Nun habe ich mal eine kleine Übersicht erstellt, wie die Needle/Haystack-Reihenfolge bei den meistgenutzten Funktionen ist. Durch die Hilfe der IDE ist man ja nicht gezwungen, sich das merken zu müssen. Naja, beim stöbern im PHP Handbuch ist mir nun aufgefallen, dass mein Gefühl der total willkürlichen Reihenfolge gar nicht zutreffend war ;-). Wenn man sich mal ein paar PHP-Basher anhört, ist das ja auch das erste Argument.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
8 Kommentare
Best-of-the-Web 5
Und wieder gibts ein paar besonders lesenswerte Webfundstücke, die mir die letzten paar Tage über den Weg gelaufen sind.
- Introduction to creating desktop applications with PHP and Titanium – Es muss nicht PHP-GTK sein, wenn man mit PHP Anwendungen entwickeln will.
- Dynamic Dummy Image Generator – Per URL zugeschnittene Dummy-Bilder abholen. Beispiel: http://dummyimage.com/600×400/000/fff.png&text=foobar -PNG mit 600×400 Pixel, Schriftfarbe Weiß, Hintergrund Schwarz, Text: foobar
- Blogspam – Was passiert, wenn man kein Captcha / Antispamplugin auf dem Blog hat. Echt traurig. Ich verwende übrigens AntiSpamBee mit diesen Settings sehr zu meiner Zufriedenheit. Ganz alleine ohne Akismet.
- Database Version Control – Zusammenfassung von Best-Practices zur Versionierung der Datenbank
- MySQLs BIGINT ..
Veröffentlicht unter Best of the Web, webdev
Hinterlasse einen Kommentar
MySQL Storage Engine Vergleich – Warum MyISAM?
Neuerdings ist InnoDB die Standard-Engine von MySQL, was ich echt vernünftig finde. Ich finde es erstaunlich, wie sich MyISAM so lange halten konnte und würde gern verstehen, warum. Meiner Meinung nach zeichnet die Verbreitung von MyISAM ein trauriges Bild für Webanwendungen im Allgemeinen. Foreign Keys sind ein Segen! Deshalb die gewagte Aussage: Webanwendungen werden oft als wilder Hack hingeschustert, weswegen auch auf Datenbankseite keine vernünftige Integrität gebraucht wird.
Anders kann ich mir jedenfalls nicht erklären, wie es MyISAM zu solch einer hohen Verbreitung geschafft hat. Nachfolgend führe ich nochmal eine kleine (von mir kommentierte) Gegenüberstellung auf, die die wichtigsten Unterscheidungsmerkmale umfasst:
MyISAM
- Die Daten-Speicherung in little endian soll für eine Maschinenunabhängigkeit / Betriebssystemunabhängigkeit sorgen – Ich weiß nicht, in wiefern das im Webumfeld praxisrelevant ist (LAMP als Standard-Stack).
Veröffentlicht unter Datenbanken, webdev
7 Kommentare
PHP WTF #4
…oder warum man überall wo möglich 3 Gleichheitszeichen verwenden sollte ;).
<?php $var1 = 0; $var2 = 'foobar'; var_dump($var1 == false); //true var_dump($var1 == $var2); //true var_dump($var2 == true); //true
Womit dann schlussendlich true == false gilt. qed… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev
7 Kommentare
Rechenungenauigkeit mit Javascript – Warum?
Schonmal in Javascript über ungenaue Berechnungen aufgeregt?
<script> alert(0.2 + 0.4); </script>
Ergebnis?
Das Problem ist mit parseFloat ja schnell behoben, aber darum gehts mir hier garnicht. Warum kriegt Javascript kein sauberes Ergebnis zustande, wohingegen bei 0.2 + 0.3 glatt 0.5 rauskommt? Javascript rechnet intern binär. Und Zahlen, die im Zehnersystem wunderbar aufgehen, können im Dualsystem unter Umständen periodisch sein. So auch die 0.6. Schauen wir uns mal die Berechnung an:
- Vor dem Komma hat unser Ergebnis logischerweise eine 0
- Die Zahl wird mit 2 multipliziert (0.6 * 2 = 1.2)
- Der „Vorkommaanteil“ von oben ist die erste Stelle der gesuchten Binärzahl, also 1.
Veröffentlicht unter Javascript, webdev
3 Kommentare
Datenbank-Transaktionen von akademischer Seite: Behind the Scenes
Disclaimer
An diejenigen mit ordentlichen Vorkenntnissen auf dem Gebiet der Transaktionen: Bitte nicht Abschrecken lassen. Es geht nach der kurzgehaltenen Einführung noch ordentlich in die Tiefe.
Was sind Transaktionen
Nach Definition ist eine Transaktion eine logische Arbeitseinheit, die entweder ganz oder garnicht durchgeführt wird. Bei einem Fehler wird die Datenbank also in den Zustand vor Ausführung der Transaktion versetzt, als ob nie etwas geschehen wäre.
Beispiel: Wo könnte man Transaktionen mehr benötigen als auf einem Gebiet, auf dem Fehler richtig weh tun? Die Bankenwelt! Man stelle sich folgendes ultrasimples Datenmodell vor:
CREATE TABLE `konto` ( `kontonr` INT NOT NULL PRIMARY KEY , `betrag` INT NOT NULL DEFAULT '0', `kundenid` INT NOT NULL ) ENGINE = INNODB; CREATE TABLE `ueberweisung` ( `ueberweisungsid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `from_kontonr` INT NOT NULL , `to_kontonr` INT NOT NULL , `betrag` INT NOT NULL ) ENGINE = INNODB;
Man beachte InnoDB als Engine, da MyISAM keine Transaktionen unterstützt.… Den ganzen Post lesen
Veröffentlicht unter php, Datenbanken, Security, webdev
9 Kommentare
#1062 – Duplicate entry ‚2147483647‘ for key ‚PRIMARY‘
Das war mal wieder grad mal wieder ein Fehler, wie er im Buche steht. Anwendung läuft seit Jahren astrein, aber auf einmal frisst die Tabelle keine neuen Einträge mehr. Als Entwickler sollte einem die Zahl 2147483647 ja bekannt vorkommen. Folgender Ablauf zum reproduzieren:
CREATE TABLE `produkt` ( `artikelnr` int(11) NOT NULL, `preis` float NOT NULL, PRIMARY KEY (`artikelnr`) );
Und der Inhalt:
INSERT INTO produkt (artikelnr, preis) VALUES (2147483647, 4.99); INSERT INTO produkt (artikelnr, preis) VALUES (2147483648, 6.95);
Das zweite insert-Statement liefert: #1062 – Duplicate entry ‚2147483647‘ for key ‚PRIMARY‘.
Simple Erklärung:
… Den ganzen Post lesenThe number 2,147,483,647 is the maximum value for a 32-bit signed integer in computing.
Veröffentlicht unter Datenbanken, webdev
7 Kommentare
PHP WTF #3
Und ein neuer WTF-Teil (Teil 1, Teil 2)!
var_dump(1/3 + 4/3 == 5/3);
Ergebnis? false natürlich! Wie auch sonst, wär ja anderenfalls kein WTF. Genaugenommen hat das „Phänomen“ nichts mit PHP zu tun sondern mit Floating Point-Berechnungen und deren Präzision. Trotz allem hat mich der Spaß gerade eine Viertelstunde Debugging-Zeit gekostet, und zwar in C++. Deswegen mal kurz in PHP getestet – mit gleichem Ergebnis.
Und noch einer:
var_dump(19.99 + 19.99 == 49.98); //bool(false)
Richtigstellung: Schande über mein Haupt und danke an Enrico (siehe Kommentar). Grober Rechenfehler meinerseits. Das Ergebnis lautet natürlich nicht 49.98, sondern 39.98, was dann auch zu einem bool(true) führt.… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, Quicktips, webdev
3 Kommentare
fieser Bug in PHP 5.3 [Update]
Man stelle sich folgenden Quellcode in einem Onlinebanking-Formular vor:
<?php if (!empty($_POST['ueberweisungsbetrag']) && filter_var($_POST['ueberweisungsbetrag'], FILTER_VALIDATE_FLOAT)!==false) { $ueberweisungsbetrag = $_POST['ueberweisungsbetrag']; } else { $ueberweisungsbetrag = 0; } ?> <input type="text" name="ueberweisungsbetrag" value="<?php echo $ueberweisungsbetrag; ?>" />
Sieht ja eigentlich erstmal ganz vernünftig aus, oder? Validierung des einigegebenen $_POST-Betrags, um dem Benutzer bei einem Fehler das erneute eintippen zu ersparen. Wenn man nun allerdings die verdammt kleine Gleitkommazahl 2.2250738585072011e-308 als Betrag eintippt, hat das den gleichen Effekt wie
while (true) {}
Nämlich: Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/test.php on line 3. Diese ominöse Zahl führt also PHP-intern zu einem verrecken des Scripts.… Den ganzen Post lesen
Veröffentlicht unter php, Security, webdev
3 Kommentare