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
Best-of-the-Web 4
Und hier die nächste Runde an interessanten Links.
- All-In-One cookiefunction – Eine Javascript-Cookie-Funktion die an Einfachheit kaum noch zu unterbieten ist.
- Typvergleiche in PHP – Nette Übersicht von Typvergleichen in PHP
- Simple plugin architecture using php5 Reflection API – Wie man sich mit Reflection eine grundlegende Plugin-Architektur bastelt
Veröffentlicht unter php, Javascript, Best of the Web, webdev
4 Kommentare
Richtige Stelle zum Encoden?
Ich war bisher immer ein Verfechter der „jeglichen Input sofort encoden“-Schiene. Heißt: Bevor ich Benutzereingaben in der Datenbank abspeichere / eine Bestätigungsemail versende etc. werden die Daten encodet (htmlentities oder ähnliches). Nun bin ich auf diesen sehr interessanten Artikel gestoßen (inspiriert durch einen Post zur ungarischen Notation beim phphacker), der folgende Position vertritt:
… Den ganzen Post lesenFor example maybe you want to store these user strings in a database somewhere, and it doesn’t make sense to have them stored HTML-encoded in the database, because they might have to go somewhere that is not an HTML page, like to a credit card processing application that will get confused if they are HTML-encoded.
Veröffentlicht unter Security, webdev, misc IT
8 Kommentare
Überdeckungsorientierte Testverfahren
Unit-Tests sind ja hinreichend bekannt. Die nachfolgend vorgestellten Testverfahren sicher jedoch weniger. Deshalb gibts heut mal einen kleinen Ausflug. Ohne viel Vorgeplänkel stelle ich verschiedene überdeckungsorientierte Testverfahren vor.
Zeilenüberdeckung
Folgender (sinnloser) Code:
function foo($bar) { if ($bar && !$bar) return true; return false; }
Was fällt auf? Die Funktion kann nie true returnen. Durch einen Test auf Zeilenabdeckung kann also erkannt werden, dass hier irgendwas nicht stimmt, weil die return true; – Zeile niemals erreicht wird. Allerdings (großes allerdings!), würde folgende „Umstellung“ des Codes bereits zu einer 100%igen Zeilenüberdeckung führen:
function foo($bar) { if ($bar && !$bar) return true; return false; }
Klasse, oder?… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev
4 Kommentare
Was die Cloud, AJAX, HTML5 und NoSQL gemeinsam haben
Antwort: Alles ist fürchterlich cool und wird von den wenigsten Benutzern dieser Ausdrücke wirklich verstanden.
Ich bin Pionier! 1999 lud ich bereits Bilder auf meine GeoCities „Webseite“ und brachte damit meine Daten in der Cloud unter! AJAX war lange Zeit (und ist vielleicht bei manchen immernoch) ein Synonym für alles, was es im Web an coolen Sachen gibt. AJAX hat jetzt allerdings eine starke Konkurrenz: Das mega-abgefahrene HTML5! Ob bunte CSS-Übergänge, Canvas oder WebWorker: Es ist neu, krass und HTML5 ja sowieso.
So, nachdem das mal gesagt wurde, solls um das eigentliche Thema dieses Posts gehen: NoSQL.
Ich finde die aktuelle Situation ja sehr interessant: Bis vor etwa 2 Wochen war NoSQL noch der Stern am Datenbankhimmel.… Den ganzen Post lesen
Veröffentlicht unter Datenbanken, webdev
3 Kommentare
PHP Typehinting schon heute
Ein Traum!
function exampleString(string $string) { echo "'$string' is a string!\n"; } function exampleInt(int $int) { echo "$int is an int!\n"; } function exampleFloat(float $float) { echo "$float is a float!\n"; } function exampleBool(bool $bool) { var_export($bool); echo " is a bool!\n"; } exampleString("Hello World!"); //'Hello World!' is a string! exampleInt(1); //1 is an int! exampleFloat(1.2); //1.2 is a float! exampleBool(false); //false is a bool! exampleBool("not really bool"); /* Catchable fatal error: Argument 1 passed to exampleBool() must be an instance of Bool, string given, called in D:\xampp\htdocs\typehint\example.php on line 23 and defined in D:\xampp\htdocs\typehint\example.php on line 13 */
Und das alles gibts nicht erst in 3 Jahren sondern bereits heute!… Den ganzen Post lesen
Veröffentlicht unter php, webdev
2 Kommentare
Objekte werden per Referenz übergeben – oder?
Beim Durchstöbern von Rudi’s PHP Labor bin ich auf diesen interessanten Artikel gestoßen, den ich hier gern nochmal aufwärmen möchte.
Etwas Code zum warmwerden:
<?php function modify(StdClass $t) { $t->foo = 321; } $instance = new StdClass; $instance->foo = 123; modify($instance); print $instance->foo;
Und, was kommt raus? Richtig! 321! Schließlich wird eine Referenz des Objekts übergeben. Wenn ich nun aber in der modify-Funktion die Variable, überschreibe…
<?php function modify(StdClass $t) { $t = new StdClass; $t->foo = 321; } $instance = new StdClass; $instance->foo = 123; modify($instance); print $instance->foo;
… lautet das Ergebnis auf einmal 123! Also doch nicht ganz so referenzig.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
Hinterlasse einen Kommentar
Niemand soll wissen, dass die Webseite mit PHP läuft!
Kleines Easteregg: Einfach mal an eine beliebige URL
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
anhängen, bei mir sieht das so aus.
Toll, oder? Weiterhin verraten die Response-Headers ungeniert, was los ist:
Wenn in der php.ini nun die Einstellung expose_php = Off getätigt wird, klappt weder das „Easteregg“ mit dem PHP-Bild, noch kriegt man über die Response-Header die PHP-Version mitgeteilt:
Wenn man nun noch die .php Extension „weg-modrewrite-d“, müsst ihr euch nicht mehr schämen, dass ihr PHP verwendet. Außer natürlich, display_errors ist an und offenbart all eure Programmierfehler ;).… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
3 Kommentare
Lasst die Datenbank ihren Job machen!
Oft schau ich mir Code an und sehe, dass Leute offenbar zu faul für vernünftige SQL-Statements sind. Da wird eine extrem allgemein gehaltene Abfrage auf die Datenbank losgelassen, um dann im Nachklang mit PHP zu filtern / zu gruppieren. Warum? Die Datenbank ist doch zum rechnen und für genau so Aufgaben gedacht. Zudem ists auch noch viel performanter, die Datenbank einfach ihren Job erledigen zu lassen. Vielleicht programmieren gewisse Leute einfach viel zu gern PHP, als das sie sich von der Datenbank die Arbeit abnehmen lassen würden?
Berechnungen im SELECT
SELECT price FROM product
while ($row = $sql->fetch()) { print $row['price'] * 1.95583; }
Warum nicht einfach:
SELECT price*1.95583 AS europreis FROM product
Okay, jetzt nicht das beste Beispiel aber prinzipiell läuft einem sowas öfter über den Weg.… Den ganzen Post lesen
Veröffentlicht unter php, Datenbanken, Software Engineering, Performance, webdev
6 Kommentare
MySQL Inputvalidierung mit Triggern
Ich finds sehr praktisch, direkt auf Datenbankseite soviel wie möglich zu erledigen. Da wirds dann auch noch einen Artikel zu geben. Ich wurde neulich von Oracle inspiriert, wo folgende Konstrukte möglich sind:
create table Product ( ProdNr integer constraint PK_Product primary key, ProdPreis integer constraint min_price check (ProdPreis >= 10) );
Damit rejected Oracle Werte kleiner als 10 für ProdPreis beim Insert / Update – super Sache und besser als das in der Application-Logik ausschließen zu müssen. Einzig doof daran ist, dass man solche Fehler sinnvoll im Programm abfangen muss und mit sprechenden Fehlermeldungen quittieren muss – sonst kanns für unbedarfte Programmierer verwirrend werden, warum denn gewisse Werte nicht in der Datenbank eingefügt werden können.… Den ganzen Post lesen
Veröffentlicht unter Datenbanken, webdev
4 Kommentare
Die Vernachlässigten: array_walk, array_filter, array_reduce und array_map
Bisher war die Syntax der oben aufgeführten Funktionen ziemlich unsexy, da sie mit Callbacks arbeiten und dieser dann als String übergeben werden musste. Durch anonyme Funktionen in PHP 5.3 mutet das alles wesentlich „smoother“ an, sodass ich mir mal die genannten Funktionen genauer angesehen habe und nachfolgend kurz vorstelle.
array_walk – Der foreach-Ersatz
<?php $arr = array("audi a6" => 39500, "bmw m5" => 41200, "mercedes e300" => 43400); array_walk($arr,function($val,$key) { echo $key." = ".$val."<br />"; }); /* Output: audi a6 = 39500 bmw m5 = 41200 mercedes e300 = 43400 */
Also äquivalent zu foreach, das Array selbst bleibt unverändert. Wenn man jetzt das Array per Referenz übergibt, kann man das aktuell iterierte Element sogar noch manipulieren.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
Hinterlasse einen Kommentar