Kategorie: Technik

Bessere Fehlerbehandlung mit Try::Tiny

· · · 0 Kommentare

Die im Beitrag "MIME::Lite Fehlerbehandlung" implementierte Fehlerbehandlung mit "eval" funktioniert zwar in den meisten Fällen, kann aber in bestimmten Situationen doch nicht zum gewünschten Ergebnis führen.

Eine bessere Alternative ist die Verwendung von z.B. Try::Tiny, welches sich mit den aus anderen Sprachen bekannten "try", "catch" und "finally"-Anweisungen um die Fehlerbehandlung kümmert:

use strict;
use warnings;
use MIME::Lite;
use Try::Tiny;

MIME::Lite->send('smtp', 'mailserver', Debug => 0);

my $msg = MIME::Lite->new(

	From    => 'me@whereever.net',
	To      => 'you@somewhereelse.net',
	Data    => 'Hello World!',
	Subject => 'testmail',
);

try {
	$msg->send;
}
catch {
	warn "you DON'T have mail!";
};

print "... still running ...";

Nach der Warnung "you DON'T have mail!" wird das Programm mit "... still running ..." fortgesetzt.


MIME::Lite Fehlerbehandlung

· · · 0 Kommentare

Ein Skript, welches MIME::Lite zum Versenden von Mails verwendet, hat sich im Fehlerfall lieber direkt mit einem "SMTP Failed to connect to mail server: Bad file descriptor" beendet, statt gemäß Dokumentation auf den Fehler zu reagieren.

use strict;
use warnings;
use MIME::Lite;

MIME::Lite->send('smtp', 'mailserver', Debug => 0);

my $msg = MIME::Lite->new(

	From    => 'me@whereever.net',
	To      => 'you@somewhereelse.net',
	Data    => 'Hello World!',
	Subject => 'testmail',
);

$msg->send || die "you DON'T have mail!";

print "... still running ...";

Weder "you DON'T have mail!" noch "... still running ..." werden ausgegeben, da diese Stellen im Code auf Grund des Programmabbruchs nicht mehr erreicht werden.

Leider ist die Erläuterung zum Verhalten der Funktion "$msg->send" nicht wirklich hilfreich:

Returns whatever the mail-handling routine returns: this should be true on success, false/exception on error.

Eine Suche im Internet führte zum Blogbeitrag "Perl exception handling", welcher genau das aufgetretene Verhalten beschreibt und eine Lösungsmöglichkeit mittels "eval"  aufzeigt:

use strict;
use warnings;
use MIME::Lite;

MIME::Lite->send('smtp', 'mailserver', Debug => 0);

my $msg = MIME::Lite->new(

	From    => 'me@whereever.net',
	To      => 'you@somewhereelse.net',
	Data    => 'Hello World!',
	Subject => 'testmail',
);

eval { $msg->send; };

if ($@) {
	print "you DON'T have mail!";
}

print "... still running ...";

So gekapselt läuft das Skript auch nach einem gescheiterten "$msg->send" weiter und auf einen eventuellen Fehler kann reagiert werden.


Netzwerk-Streaming mit PulseAudio

· · · 0 Kommentare

Manchmal wäre es ganz schön, die Audioausgabe des eigenen PCs auf einem anderen Gerät wie z.B. der heimischen Stereoanlage ausgeben zu können.

Während dem Verlegen von langen Kabeln physikalische (und ggf. auch ästhetische) Grenzen gesetzt sind und Bluetooth je nach Gerätestandort den Weg nicht störunsgfrei überbrücken kann, bietet sich ein Rasperry Pi an, der- entweder über LAN oder WiFi angebunden - die Ausgabe übernimmt.

Ein Raspberry Pi der ersten Generation ist hierfür vollkommen ausreichend, ebenso wie eine SD-Karte mit 4GB Speicherplatz.

Sofern auf dem PC Linux eingesetzt wird, lässt sich das Projekt mit wenig Aufwand und Bordmitteln realisieren. Die meisten aktuellen Linux-Distributionen setzen für die Audioausgabe auf PulseAudio, welches die benötigte Funktionalität bereits mitbringt.

Weiterlesen


Microsoft Visual Studio 6 unter Windows 10 installieren

· · · 0 Kommentare

Da die Installation von Microsoft Visual Studio 6 unter Windows 7 bereits nur mit Tricks möglich war, war davon auszugehen, daß auch die Installation unter Windows 10 ein spannendes Unterfangen sein wird.

Direkt nach Start der "SETUP.EXE" erscheint der bereits bekannte Warndialog mit leicht geändertem Text:

Der Programmkompatibilitätsassistent kann durch Klick auf "Schließen" geschlossen und das Setup fortgeführt werden.

Weiterlesen


Übersetzungsprobleme bei DELL

· · · 0 Kommentare

Der DELL-Wissensdatenbankartikel "Anleitung zum Zurücksetzen des internen Dell Remote Access Controller (iDRAC) auf einem PowerEdge-Server" ist ein schönes Beispiel, warum ich von

Dieser Artikel wurde möglicherweise automatisch übersetzt.

im Normalfall so gar nichts halte und die Artikel lieber im Original lese.

Nicht nur, daß der Anfang des zweiten Satzes von

Um den iDRAC neu zu starten, drücken Sie die Taste für mindestens 30 Sekunden. Stopp durch Drücken der Taste, wenn die Kühlungslüfter mit voller Geschwindigkeit beginnen zu drehen und die vordere LCD-Anzeige (sofern angegeben) ausgeschaltet ist.

irreführend ist, auch wundert man sich als Leser der deutschen Übersetzung, warum die Lüfter bereits nach rund 15 Sekunden deutlich lauter werden. Die Lösung liefert ein Blick in die Originalversion:

In order to reset the iDRAC, without rebooting the operating system, press and hold the System Identification button for at 16 seconds. Stop pressing the button when the cooling fans start spinning at full speed and the front LCD (if present) is turning off.

Daß aus "Stop pressing the button" in der Übersetzung "Stopp durch Drücken der Taste" wird, kann bestimmt noch mit dem vielleicht für den Übersetzungsalgorithmus nicht optimalen Satzbau erklärt werden. Aber warum werden in der Übersetzung plötzlich aus 16 Sekunden 30 Sekunden?