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!

Den ganzen Post lesen
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