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: Software Engineering
„Windows 8 – Die gekachelte Zukunft des Computing?“ – Präsentation auf dem Webmontag
Nachdem ich im Artikel Windows 8 – neues Feld für Webentwickler schon etwas in die Anwendungsentwicklung mit Webtechniken unter Windows 8 eingetaucht bin, gibts jetzt meinen Vortrag auf dem Webmontag #41 in Frankfurt vom 17.09.2012.
War meine erste Präsentation vor 150 – 200 Leuten, echt eine Erfahrung. Resonanzen auf den Vortrag sind soweit positiv gewesen, natürlich schwingt unter Webdesignern und Social-Media-Experten immer eine gewisse Windows-Skepsis mit, was ja auch vollkommen okay ist. Möchte auch niemanden umerziehen und nur einen Einblick ins neue System geben. Dass mir Windows 8 selbst ganz gut gefällt, hört man sicher raus.
Die Slides zur Präsentation finden sich auf Slideshare.… Den ganzen Post lesen
Veröffentlicht unter Software Engineering, misc IT, Persönlich
Hinterlasse einen Kommentar
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
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
Best-of-the-Web 8
Ding Ding Ding. Runde 8!
- Mozilla wagt neue CSS-Experimente – Kleine Zusammenstellung, was bei Firefox 4 CSS-technisch neu kann.
- 3 Tenets for Implementing a REST API – Versionierung einer REST-API. Sollte man die API-Version über HTTP-Header oder die URL regeln?
- Online HTML5 JSON Report format – JSON lesbar machen.
- The current State of HTML 5 Forms – Welcher Browser unterstützt welches Formelement?
- Kleine Lizenzgeschichte des PHP Handbuchs – Was man bei der Verwendung des Beispielcodes aus dem Manual beachten sollte.
- Software Licenses For Dummies – Den Lizenzdschungel menschenlesbar erklärt.
- MySQL Handbuch zu Indexen – MySQL zwingen, einen Index (nicht) zu benutzen (auch interessant: ist ein WHERE-Index immer sinnvoll und wie man den MySQL Index Optimizer „überlistet“)
- command-line-fu for web developers – Teils sehr abgefahrene, nützliche Shellcommands
Veröffentlicht unter php, Datenbanken, Software Engineering, Best of the Web, webdev
Hinterlasse einen Kommentar
Best-of-the-Web 7
Und erneut gibt es Link-Spaß für die ganze Familie.
- The importance of being versioned – Wie sollte man APIs sinnvoll versionieren, sodass man sie später noch umbauen kann?
- SOLID for packag… err, namespaces – Die SOLID-Prinzipien zusammengestellt und kurz erklärt
- Automate your Projects with Apache Ant – „For Dummies“-Tutorial über Apache Ant und wie das Java-Tool auch für Webentwickler brauchbar sein kann.
- HTML5 tests – inputs – Welcher Browser kommt mit welchem Input klar?
- Pinned Sites with Internet Explorer 9 and Windows 7 – Wie man das IE9 Feature „Pinned Sites“ nutzt.
- How unique – and trackable – is your browser?
Veröffentlicht unter php, Javascript, Software Engineering, Best of the Web, webdev
Hinterlasse einen Kommentar
Testen mal anders: phpt
phpt ist ein schmuckes, kleines Testframework, welches u.a. auch zur PHP Quality Assurance verwendet wird, um damit PHP-eigene Funktionen in PHP zu testen. Wir beginnen mit einem Beispiel:
--TEST-- My first cool test! --FILE-- <?php class Foobar { public function __construct() { for ($i = 0; $i < 6; $i++) { if ($i % 2 != 0) echo $i; } } } new Foobar(); ?> --EXPECT-- 135
Und das Beste: Mit PEAR kommt der Spaß gleich mit:
Das ists aber lang noch nicht gewesen. Man führe sich folgenden Test zu Gemüte:
--TEST-- Second example: errortesting --FILE-- <?php $foo = array(1, 3) * array(2, 6); ?>… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev
3 Kommentare
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
Ü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
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
5 PHP Patterns im Schnelldurchlauf: Factory, Iterator, Observer, Singleton, Strategy
Dieser Post versteht sich ein bisschen als „Reminder“. Bei den folgenden 5 Patterns habe ich in den Codebeispielen besonderen Wert auf Einfachheit gelegt, sodass man ohne große Erklärung gleich sieht, worum es geht. Ich finde es wichtig, sich nach einiger Zeit immer mal wieder die Patterns vor Augen zu halten.
Factory
Eine „Fabrik“ erzeugt je nach Anwendungskontext verschiedene Klassen und gibt diese zurück.
interface IPermission { public function deleteFilePermission(); } class AdminPermission implements IPermission { public function deleteFilePermission() { return true; } } class UserPermission implements IPermission { public function deleteFilePermission() { return false; } } //----------------------------------------------- class UserFactory { public static function build($type) { switch ($type) { case 'admin': return new AdminPermission(); break; case 'user': return new UserPermission(); break; default: throw new Exception("No valid type"); } } } //----------------------------------------------- //admin is allowed to delete files $admin=UserFactory::build("admin"); var_dump($admin->deleteFilePermission()); //bool(true) //user is not allowed to delete files $user=UserFactory::build("user"); var_dump($user->deleteFilePermission()); //bool(false)
Iterator
Das iterieren mit foreach ist durch das Iterator-Pattern auch über eine Klasse möglich – so als ob sie ein Array wäre.… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering
3 Kommentare