Saturday, January 30, 2010

Das muss einer verstehen...

Um regelmäßig die Unittests für OTRS mit Win32 und MSSQL laufen lassen zu können, habe ich mir MSSQL Server 2005 Express installiert. Damit allein kann man aber noch nicht wirklich was machen; für das "einfache" Anlegen und Bearbeiten von Datenbanken empfiehlt sich das Microsoft SQL Server Management Studio Express.

Also heruntergeladen und Installation begonnen. Man wird - zumindest unter Windows 7 - auch gleich nach dem Admin-Passwort gefragt. Installation beginnt, aber kurz vor Ende kommt dann die Meldung
Bei der Installation dieses Pakets ist ein unerwarteter Fehler aufgetreten. Es liegt eventuell ein das Paket betreffendes Problem vor. Der Fehlercode ist 29506.
Sehr aussagekräftig, oder? Naja, kurz gesucht und in einem anderen Blog die Lösung gefunden: Von der Kommandozeile aus mit Admin-Rechten starten. Häh? Ich hatte doch bei der anderen Art und Weise auch mein Admin-Passwort eingegeben. Egal, jetzt hat es funktioniert...

13. Ausgabe des Perl-Magazins "$foo"

Seit heute ist die 13. Ausgabe des Perl-Magazins "$foo" erhältlich. Mit dieser Ausgabe gehen wir in das vierte Jahr, in dem das Magazin erscheint. Wir hoffen, dass wir auch diesmal einen interessanten Mix an Themen gefunden haben.

Feedback ist immer willkommen.

Viel Spaß beim Lesen!



Inhalt dieser Ausgabe:

Performance großer Webseiten - Teil 1

Dr. Johannes Mainusch von XING erläutert in diesem Teil einiges dazu, wie wichtig Performance bei Webseiten ist. Auch einen kurzen Blick unter die Motorhaube bei XING gibt der Autor. Gleichzeit möchte der Artikel die "Awareness" für Performance erhöhen.


Lotus Notes / Domino - Perl(en) mit Java

Wie man von Perl aus auf Lotus Notes / Domino zugreifen kann, zeigt Arnd Koch in seinem Artikel. Dabei zeigt er, wie man auf Ansichten und Dokumente zugreifen kann, Felder auslesen und befüllen sowie Dokumente speichern kann.


Visualisierungen mit Perl und ImageMagick

Auf wissenbelastet.com hat Max Kossatz ein Video veröffentlicht, dass die Bewegungen des öffentlichen Nahverkehrs in Wien über 24 Stunden zeigt. In dieser Ausgabe von $foo zeigt er, wie er dieses Video unter anderem mit Hilfe von Perl erstellt hat.


Kalenderdateien aus Webkalendern erstellen

Dieses Problem tritt häufiger auf als gedacht: Es gibt einen Kalender im Web und man hätte die Daten gerne in seinem Outlook-Kalender oder auf dem Organizer. Der Artikel zeigt, wie man sehr einfach iCal-Dateien erstellen kann, die man dann in seinen Kalender importieren kann.


Perl hilft der Feuerwehr

... beim Üben. In diesem Artikel wird ein Programm und dessen Entstehung gezeigt, das der Feuerwehr beim Üben von Einsatzszenarien mit Brandmeldeanlagen helfen soll.

Perl Scopes Tutorial - Teil 3

Im dritten Teil seines Perl Scopes Tutorials geht Ferry Bolhár-Nordenkampf auf Closures ein, bevor er auf Sprachelemente eingeht, die das Scoping betreffen.


Perl Upload Form

Alexander Becker zeigt in seinem Artikel, wie er mit CGI::Application und einigen Plugins ein Upload-Formular gebaut hat. Dabei geht er auch auf Fallstricke und Sicherheitsaspekte ein.


WxPerl Tutorial - Teil 2

Der zweite Teil des WxPerl Tutorials von Herbert Breunung geht auf die Erstellung von Dialogen mit WxPerl ein. Außerdem zeigt er, wie man in den Programmen auf Ereignisse reagiert.

Interview mit Karen Pauley und Richard Dice

Nach 2008, 2009 gibt es jetzt zum dritten Mal ein Interview zum Thema "State of TPF". Für diese Ausgabe stand neben Richard Dice auch Karen Pauley für das Gespräch zur Verfügung.
und vieles mehr...

* Neues von der TPF - was ist in den letzten 3 Monaten bei der TPF passiert?
* "Merkwürdigkeiten" - was man beim "return" in Subroutinen beachten sollte
* Leserbriefe - Reaktionen unserer Leser auf Artikel in der letzten Ausgabe
* CPAN-News - Wieder werden 6 neue Module vom CPAN vorgestellt
* Termine - Was ist los in den nächsten 3 Monaten?

Tuesday, January 05, 2010

Der Flip-Flop-Operator

Nachdem ich in letzter Zeit wieder einige Threads in verschiedenen Foren gesehen habe, wo das ziemlich nützlich gewesen wäre, hier mal ein Artikel aus der 7. Ausgabe von $foo - Der Flip-Flop-Operator.

Hinter dem Flip-Flop-Operator versteckt sich der Range-Operator. Dessen gebräuchlichste Verwendung ist es wohl, Listen zu erstellen. In vielen Programmen sieht man so etwas wie

for( 1..10 ){
# do anything
}

Hier wird eine Liste von 1 bis 10 aufgebaut. Mit dieser Eigenschaft dürften wohl die meisten den Range-Operator kennen. Weit seltener kommt der Range-Operator mit seiner Eigenschaft als Flip-Flop vor.

Im Skalaren Kontext liefert der Range-Operator einen Boolschen Wert zurück und ist somit "bistabil". Diese Flip-Flop-Eigenschaft eignet sich zum Beispiel sehr gut, wenn man einen bestimmten Bereich aus einem Text ausgeben will und man nicht selbständig mit if's einen Boolschen Zustand pflegen will.

In Listing x ist ein Textausschnitt zu sehen, von dem nur der Text zwischen start und stop interessant ist.

Dies ist ein längerer Text
mit vielen unnötigen Zeilen
vor dem eigentlich Wichtigen.

START
Wichtiger Text
über drei
Zeilen
STOP

Und noch unwichtigeren Zeilen
nachher


Hier ein Code, wie man es mit einem eigenen "Flip-Flop" machen kann (Der eben gezeigte Text ist im __DATA__-Bereich):

#!/usr/bin/perl

use strict;
use warnings;

my $bool = 0;

while( my $line = <DATA> ){
if( $line =~ /^START/ ){
$bool = 1;
}

print $line if $bool;

if( $line =~ /^STOP/ ){
$bool = 0;
}
}

Der Flip-Flop ist solange false wie der Ausdruck auf der linken Seite falsch ist. Ist der linke Ausdruck wahr, wird der Flip-Flop auch true und bleibt die solange bis der Ausdruck auf der rechten Seite wahr ist. Danach wird der Flip-Flop wieder false. Damit wird es recht einfach, den wichtigen Teil aus dem Text zu ziehen:


#!/usr/bin/perl

use strict;
use warnings;

my $bool = 0;

while( my $line = <DATA> ){
print $line if $line =~ /^START/ .. $line =~ /^STOP/;
}

Wichtig ist noch zu wissen, dass jeder Flip-Flop sein eigenen Boolschen Status hat, so dass Flop-Flops auch verschachtelt werden können:

if( $line =~ /^START/ .. $line =~ /^STOP/ ){
if( $line =~ /ber/ .. $line =~ /drei/ ){
chomp $line;
print '*' . $line . "*\n";
}
else{
print $line;
}
}


In diesem Listing ist aber auch ein anderes Phänomen dargestellt. Der Flip-Flop kann im selben Durchlauf erst true und gleich wieder false werden, der if-Block wird dennoch mindestens das eine Mal ausgeführt. Das hat damit zu tun, dass der rechte Ausdruck evaluiert wird, sobald der Range-Operator evaluiert wird. Dadurch ergibt sich die Ausgabe:

START
Wichtiger Text
*über drei*
Zeilen
STOP


Möchte man dieses Verhalten unterbinden, soll der rechte Ausdruck also erst im nächsten Durchlauf evaluiert werden, muss man statt .. einfach ...> verwenden. Dadurch ergibt sich folgende Ausgabe:

START
Wichtiger Text
*über drei*
*Zeilen*
*STOP*


In den meisten Fällen liefern aber sowohl ... als auch .. die gleichen Ergebnisse.