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
Erwartete Exceptions richtig testen
Der klassische Ablauf beim Testen von Code, der eine Exception werfen soll, ist der Folgende (PHPUnit):
/** * @expectedException InvalidArgumentException */ public function testException() { throw new InvalidArgumentException(); }
Problem dabei: Wir haben nicht spezifiziert, an welcher Stelle die Exception geworfen werden soll. Außerdem können wir nicht prüfen, ob die geworfene Exception genau die erwartete oder nur igendeine war.
Jetzt lässt sich das noch aufbohren:
/** * @expectedException InvalidArgumentException * @expectedExceptionMessage Right Message */ public function testExceptionHasRightMessage() { throw new InvalidArgumentException('Right Message'); }
Auch damit werde ich nicht glücklich. Wenn ich jetzt z.B. mehrere Exceptions in einem Test prüfen möchte (guter Stil hin oder her) stößt man an die Grenzen diesen Ansatzes.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
4 Kommentare
MySQL „SHOW PROFILE“
Hab heute in meiner favorisierten Datenbank-GUI HeidiSQL den Query Profiler entdeckt, hinter dem sich bei genauer Recherche das MySQL-Kommando SHOW PROFILE verbirgt – nur grafisch aufgehübscht.
Eine sinnvolle Ergänzung zu EXPLAIN – grade die temporären Tabellen oder unerwartet auffällige Sortierungen fallen hier schnell auf.… Den ganzen Post lesen
Veröffentlicht unter Datenbanken, Quicktips, webdev
2 Kommentare
Schriftartempfehlung: Consolas
Ein geschätzter Arbeitskollege gab mir neulich den Tipp, es mal mit der von Microsoft speziell für Programmierung entwickelten Schrift Consolas zu versuchen. Ich hab einen Schriftwechsel erst als unnötig abgestempelt, war dann aber doch froh, es getan zu haben.
Meine favorisierte IDE Netbeans kommt standardmäßig mit der Schriftart Monospaced daher. Sieht so aus:
Enter Consolas
Heruntergeladen und in Netbeans als Standardfont in Größe 14 eingestellt (12 finde ich zu klein). Resultat:
Finde ich dann doch deutlich angenehmer. … Den ganzen Post lesen
Veröffentlicht unter Quicktips, misc IT
8 Kommentare
MySQL PROCEDURE ANALYSE – Optimale Feldtypen ermitteln
Oft wählt man aus Verlegenheit völlig überdimensionierte Datentypen (VARCHAR(512) und gut…). Ist auch irgendwie verständlich, schließlich ist oft nicht bekannt, in welche Sphären die späteren Feldinhalte vorstoßen werden. Wenn sich die Datenbank aber mal etwas eingeschwungen hat, kann es lohnenswert sein, etwas zu tweaken. Dazu hilft MySQL mit der procedure analyse.
Sieht dann so aus:
Umsetzen muss man die Vorschläge dann selbst.… Den ganzen Post lesen
Veröffentlicht unter Datenbanken, Quicktips, webdev
3 Kommentare
Best-of-the-Web 9
Es hat sich mal wieder was angesammelt!
- Horizontal reusability with traits – Bisher bester Artikel zum neuen PHP 5.4 Feature Traits.
- How to Create Scheduled Events in MySQL – Zeitgesteuerte Events in MySQL
- Why HTTP_HOST is evil – Warum man vor der $_SERVER – Verwendung den Kopf einschalten sollte.
- How to „steal“ Google’s „did you mean“ feature – Googles „meinten sie“ Feature für eigene Zwecke verwenden
- ANSI Escape Sequences: Colours and Cursor Movement -Farben in der Konsole.
- A Mockery review – Sehr schöne Mocking-Library.
- Reflection over PHPDoc with PHP – PHP Docblocks verarbeiten
- Profiling a PHP Application – …spricht für sich
Veröffentlicht unter Best of the Web, webdev
Hinterlasse einen Kommentar
Chrome Dev Tools: Insidertipps
Chromes Version von Firebug hat sich ordentlich gemausert. Inspiriert durch dieses Video gibts hier nun also ein paar nicht so bekannte Features der Devtools.
Konsole überall einblenden
In jedem Panel der Devtools lässt sich mittels Druck auf ESC die Konsole hochfahren und so simultan arbeiten.
Weitere Shortcuts gibts hier.
Die Funktionen dir() und copy()
Bekanntlich lässt sich durch Eingabe des DOM-Elements in die Konsole das HTML dazu selektiv anzeigen (siehe Bild oben: document.body). Mittels der Funktion dir() lässt sich eine weit detailliertere Auflistung anzeigen, die u.a. auch Event Handler anzeigt:
Mit copy() lässt sich Text in die Zwischenablage kopieren.… Den ganzen Post lesen
Veröffentlicht unter Javascript, webdev
7 Kommentare
Per PHP-CLI die eigene IP herausfinden
Bekanntlicherweise ist die IP per $_SERVER auf der CLI nicht verfügbar. Was hilft: gethostbynamel. Die Funktion liefert eine Liste von IPv4 Adressen zu einem Hostname zurück.
print_r(gethostbynamel("microsoft.com")); /* Array ( [0] => 207.46.232.182 [1] => 207.46.197.32 ) */
Lässt sich leicht abgewandelt auch zum herausfinden der eigenen IP benutzen:
function getOwnIP($default = false) { $ips = gethostbynamel('localhost'); foreach ($ips as $ip) if ($ip != "127.0.0.1") return $ip; return $default; }… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
5 Kommentare
Interessante Testarten: Mutationstest und Fuzzing
Bin heute über 2 Testverfahren gestolpert, die ich vorher noch nicht auf der Rechnung hatte. Fangen wir beim Mutationstest an.
Mutationstest
Dabei wird die zu testende Applikation vollautomatisch von einem Programm abgeändert. Das kann etwa so aussehen, dass in einer Schleife aus einem <= ein < gemacht wird. Hier orientiert sich die Art der eigebauten Fehler an den gern von Programmierern gemachten, also z.B. Schleifengrenzen und Verschachtelungen. Wichtig ist hierbei, dass pro Durchlauf immer nur eine Manipulation vorgenommen wird, sonst lässt sich die Auswirkung schließlich schlecht lokalisieren.
So, nachdem wir nun also den Code „mutiert“ haben, werden die Testfälle aufs Programm gehetzt.… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, Security, webdev
Hinterlasse einen Kommentar
Blick über den Tellerrand: LINQ
Ich habe aktuell beruflich wenig mit PHP zu schaffen, erklärt wohl auch die momentane Post-Flaute etwas. Joa, der angenehme Nebeneffekt davon ist aber, dass man beim Rumschlagen mit anderen Sprachen auch andere Konzepte verinnerlicht. So bin ich im Microsoft C# – Umfeld auf LINQ gestoßen. Bedeutet Language INtegrated Query. Was erstmal so unspektakulär klingt, ist eine verdammt mächtige Abfragesprache für Container (Arrays, Listen, Collections …).
LINQ?
string[] colors = new string[] { "Red", "Green", "Blue", "Blue", "Brown", "Pink", "Black" }; var result = (from c in colors where c.StartsWith("B") && c.Contains("l") && c.Length > 3 orderby c descending select c).Distinct();… Den ganzen Post lesen
Veröffentlicht unter php, webdev
7 Kommentare
Aufteilen von Funktionen = doppelte Validierung
Für ein kleines Nebenprojekt bin ich am Werkeln mit codeigniter. Soweit so gut. Ich brauchte eine Funktion, die den Bildupload und anschließendes resizing erledigte. Kein Problem, dank Upload-Klasse und Image Manipulation-Klasse. Okay, das hier soll aber keine Lobhymne auf ein Framework werden, sondern ein allgemeines Thema ansprechen.
Ich hab also meine Funktion, die upload und resize erledigt. Wens interessiert:
public function process_image($cat_id) { //---------------------------------- //Upload if (intval($cat_id) <= 0) throw new Exception("Invalid Video ID"); $upload_config = array ( 'upload_path' => IMAGES_PATH, 'allowed_types' => 'gif|jpg|png|jpeg', 'overwrite' => true ); if (!is_dir(IMAGES_PATH)) throw new Exception("Could not find Upload directory"); $this->load->library('upload', $upload_config); if (!$this->upload->do_upload())… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev
9 Kommentare