From gooly at gmx.at Mon Apr 2 03:47:20 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Mon, 2 Apr 2007 12:47:20 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama Message-ID: <200704021247.20833.gooly@gmx.at> Hallo, ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht das? Derzeit (l?uft wie soll) gibt es das Gracefull-Die nur bei der Mama! Die Variablen der Kinder werden (noch) nicht gesichert, bzw immer gleich weiter geschickt. Die Mama hat das: $SIG{PIPE} = 'ignore'; sub ignore { ; } $SIG{TERM} = 'okDie'; $SIG{QUIT} = 'okDie'; $SIG{STOP} = 'okDie'; und in sub okDIE{ .. } mach Mama halt 'sauber'. in jedem Kind gibt es nun die Endlosschleifen mit lokalen Variablen, deren Inhalt aber jetzt noch schnell gesichert werden sollen. Eigentlich w?rde ich mal frech den oberen Block der Mama einfach in jeden Kinder-Package wiederholen, etwa so: package Kind1; ... $SIG{PIPE} = 'ignore'; sub ignore { ; } $SIG{TERM} = 'myDieKind1'; $SIG{QUIT} = 'myDieKind1'; $SIG{STOP} = 'myDieKind1'; package Kind2; ... $SIG{PIPE} = 'ignore'; sub ignore { ; } $SIG{TERM} = 'myDieKind2'; $SIG{QUIT} = 'myDieKind2'; $SIG{STOP} = 'myDieKind2'; Aaaber, zB das $SIG{PIPE} = 'ignore'; sub ignore { ; } gilt ja f?r alle (Mama und all ihre Kinder) und verhindert, dass alle sterben, wenn die Pipe zerbricht, daher k?nnte es sein, dass man nicht so einfach die $SIG{..} in jedem Package bzw. Thread neu beschicken kann/darf? Kann mir da jemand weiterhelfen? Danke schon mal, Calli From lt at toetsch.at Mon Apr 2 14:07:05 2007 From: lt at toetsch.at (Leopold Toetsch) Date: Mon, 2 Apr 2007 23:07:05 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704021247.20833.gooly@gmx.at> References: <200704021247.20833.gooly@gmx.at> Message-ID: <200704022307.06021.lt@toetsch.at> Am Montag, 2. April 2007 12:47 schrieb gooly at gmx.at: > Hallo, > > ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. > Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht das? Untrivial bis gar nicht: threads und signal handling vertragen sich nicht besonders. Du willst viel eher Prozesse forken nehme ich an ;) Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads ?berhaupt das gesendete Signal erh?lt. Der Prozess beinhaltet je nach System und Implementierung alle Threads oder nicht. Auf der sicheren Seite bist du nur, wenn du alle Signale blockierst, und genau f?r den einen emfangenden Thread freischaltest [2]. Eine Unbekannte dazwischen ist noch die Implentierung innerhalb Perl selber, aber ich nehme mal an, dass das halbwegs transparent ist und die libc Dokumentation f?r die Anwendung in Perl noch g?ltig ist (modulo der Signalhandler selber nat?rlich). leo [1] e.g. aus file:///home/lt/doc/susv3/functions/xsh_chap02_04.html#tag_02_04_01 [2] At the time of generation, a determination shall be made whether the signal has been generated for the process or for a specific thread within the process. Signals which are generated by some action attributable to a particular thread, such as a hardware fault, shall be generated for the thread that caused the signal to be generated. Signals that are generated in association with a process ID or process group ID or an asynchronous event, such as terminal activity, shall be generated for the process. [2] sorry, aber die docs musst du IIRC downloaden und lokal installieren [3] man sigaction; perldoc POSIX; info libc From gooly at gmx.at Wed Apr 4 02:02:07 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Wed, 4 Apr 2007 11:02:07 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704022307.06021.lt@toetsch.at> References: <200704021247.20833.gooly@gmx.at> <200704022307.06021.lt@toetsch.at> Message-ID: <200704041102.08081.gooly@gmx.at> Danke Euren Antworten! > > ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. > > Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht > > das? > > Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads > ?berhaupt das gesendete Signal erh?lt. Der Prozess beinhaltet je nach > System und Implementierung alle Threads oder nicht. hmm - ab ins Labor ;) und wieder da :( da ich verschiede threaded Variablen ben?tige habe ich threads, threads::shared verwendet und eben nicht fork. In threads g?be es ja auch das $thr->kill('KILL'), aber auch davon kriegt das Kind nix mit - es stirbt halt einfach lautlos, ohne die Chance auf einen Seufzer.. Also, habe erst die local $SIG{} probiert - nix angekommen: das Kind wird get?tet ohne dass es das mitbekommt. Auch ohne Mamas SIG{} = '..' oder mit local SIG{..} in der Mama erf?hrt es nichts vom eigenen Untergang - seufz. > Auf der sicheren Seite bist du nur, wenn du alle Signale blockierst, > und genau f?r den einen emfangenden Thread freischaltest [2]. hmm, wie mach ich das? > Eine Unbekannte dazwischen ist noch die Implentierung innerhalb Perl > selber, aber ich nehme mal an, dass das halbwegs transparent ist und > die libc Dokumentation f?r die Anwendung in Perl noch g?ltig ist > (modulo der Signalhandler selber nat?rlich). Huch, ist das etwas 'was in Perl *nicht* geht - das gibt's?? > [1] > e.g. aus > file:///home/lt/doc/susv3/functions/xsh_chap02_04.html#tag_02_04_01 > [2] > > At the time of generation, a determination shall be made whether the > signal has been generated for the process or for a specific thread > within the process. Signals which are generated by some action > attributable to a particular thread, such as a hardware fault, shall > be generated for the thread that caused the signal to be generated. > Signals that are generated in association with a process ID or > process group ID or an asynchronous event, such as terminal activity, > shall be generated for the process. Naja, wie kann ich das den umsetzen? Hast Du, kennst Du, wei?t Du wo es dazu (ein) Beispiel(e) gibt - Ich vermute man k?nne/m?sste es mit bash abfangen? > > [2] sorry, aber die docs musst du IIRC downloaden und lokal > installieren was meinst Du? Das 'xsh_chap02_04.html' hab ich jetzt, meinst Du das? > [3] man sigaction; perldoc POSIX; info libc Aber Danke, Calli From hjp-vienna-pm-list at hjp.at Wed Apr 4 03:07:05 2007 From: hjp-vienna-pm-list at hjp.at (Peter J. Holzer) Date: Wed, 4 Apr 2007 12:07:05 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704041102.08081.gooly@gmx.at> References: <200704021247.20833.gooly@gmx.at> <200704022307.06021.lt@toetsch.at> <200704041102.08081.gooly@gmx.at> Message-ID: <20070404100705.GA22897@hjp.at> On 2007-04-04 11:02:07 +0200, gooly at gmx.at wrote: > Danke Euren Antworten! > > > ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. > > > Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht > > > das? > > > > Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads > > ?berhaupt das gesendete Signal erh?lt. Der Prozess beinhaltet je nach > > System und Implementierung alle Threads oder nicht. > hmm - ab ins Labor ;) und wieder da :( > > da ich verschiede threaded Variablen ben?tige habe ich threads, > threads::shared verwendet und eben nicht fork. In threads g?be es ja > auch das $thr->kill('KILL'), aber auch davon kriegt das Kind nix mit - > es stirbt halt einfach lautlos, ohne die Chance auf einen Seufzer.. Naja, bei KILL ist das ja auch so spezifiziert. Das ist das eine Signal, wo das Ziel ohne jede Chance auf Gegenwehr terminiert wird. Wenn Du dem Zielthread/Prozess mitteilen m?chtest, dass der sich doch bitte beenden m?ge, ist TERM wohl eher das geeignete Signal. hp -- _ | Peter J. Holzer | I know I'd be respectful of a pirate |_|_) | Sysadmin WSR | with an emu on his shoulder. | | | hjp at hjp.at | __/ | http://www.hjp.at/ | -- Sam in "Freefall" -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070404/ae10e487/attachment.bin From gooly at gmx.at Wed Apr 4 03:18:42 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Wed, 4 Apr 2007 12:18:42 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <20070404100705.GA22897@hjp.at> References: <200704021247.20833.gooly@gmx.at> <200704041102.08081.gooly@gmx.at> <20070404100705.GA22897@hjp.at> Message-ID: <200704041218.42220.gooly@gmx.at> Am Mittwoch, 4. April 2007 schrieb Peter J. Holzer: > Naja, bei KILL ist das ja auch so spezifiziert. Das ist das eine > Signal, wo das Ziel ohne jede Chance auf Gegenwehr terminiert wird. > Wenn Du dem Zielthread/Prozess mitteilen m?chtest, dass der sich doch > bitte beenden m?ge, ist TERM wohl eher das geeignete Signal. > hab ich alle versucht, standardm??ig habe ich Mama immer mit USR1 abgeschossen, aber eben die anderen SIGs wie TERM, KILL zeigen alle genau das gleiche: Mama seufzt, ihr Kind stirbt still. Sowohl der Mama, wie auch dem Kinde habe ich alle ihre SIGs 'belegt': for my $k ( keys %SIG ) { $SIG{$k} = sub { if ($^S) {print "\n$$: Kind Caught \$SIG{ $k }\n"} else {print "\n$$: MAMA Caught \$SIG{ $k }\n"} } } Es kommt beim Kind nix an, das verwertbar w?re :( Mahlzeit, Calli From lt at toetsch.at Wed Apr 4 11:38:46 2007 From: lt at toetsch.at (Leopold Toetsch) Date: Wed, 4 Apr 2007 20:38:46 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704041102.08081.gooly@gmx.at> References: <200704021247.20833.gooly@gmx.at> <200704022307.06021.lt@toetsch.at> <200704041102.08081.gooly@gmx.at> Message-ID: <200704042038.46419.lt@toetsch.at> Am Mittwoch, 4. April 2007 11:02 schrieb gooly at gmx.at: > Danke Euren Antworten! > > > > ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. > > > Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht > > > das? > > > > Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads > > ?berhaupt das gesendete Signal erh?lt. Der Prozess beinhaltet je nach > > System und Implementierung alle Threads oder nicht. > > hmm - ab ins Labor ;) und wieder da :( > > da ich verschiede threaded Variablen ben?tige habe ich threads, > threads::shared verwendet und eben nicht fork. In threads g?be es ja > auch das $thr->kill('KILL'), aber auch davon kriegt das Kind nix mit - > es stirbt halt einfach lautlos, ohne die Chance auf einen Seufzer.. Das hat hp ja schon beantwortet. Wenn es nur um ein "gracefull-die" geht, sind Signale sowieso der falsche Ansatz, wie in 99% aller anderen F?lle auch ;) Du brauchst nur eine shared Variable e.g. $running, und die "Endlos"-Schleife der Kinder ist dann: while ($running) { do_some_work(); } Diese Variable kannst du fallweise auch per SIG-Handler in der Mama resetten. > > Auf der sicheren Seite bist du nur, wenn du alle Signale blockierst, > > und genau f?r den einen emfangenden Thread freischaltest [2]. > > hmm, wie mach ich das? Wie gesagt die Zeilen ueber sigaction in `info libc` und weiter unten. > > Eine Unbekannte dazwischen ist noch die Implentierung innerhalb Perl > > selber, aber ich nehme mal an, dass das halbwegs transparent ist und > > die libc Dokumentation f?r die Anwendung in Perl noch g?ltig ist > > (modulo der Signalhandler selber nat?rlich). > > Huch, ist das etwas 'was in Perl *nicht* geht - das gibt's?? Ich habe nicht gesagt dass es nicht geht. Allerdings bist du hier ziemlich nahe an der glibc bzw libpthread und die Implementierung in Perl k?nnte hinderlich sein. Ich habe das auch noch nie in Perl probiert nur in C. > > file:///home/lt/doc/susv3/functions/xsh_chap02_04.html#tag_02_04_01 > > Naja, wie kann ich das den umsetzen? Hast Du, kennst Du, wei?t Du wo es > dazu (ein) Beispiel(e) gibt - Ich vermute man k?nne/m?sste es mit bash > abfangen? Bash - kaum. In C schaut's z.B so [1] aus. > > [2] sorry, aber die docs musst du IIRC downloaden und lokal > > installieren > > was meinst Du? > Das 'xsh_chap02_04.html' hab ich jetzt, meinst Du das? Yep. leo [1] Snippets aus Parrot's event code (src/events.c). Die Idee ist: a) im Hauptthread werden Signalhandler installiert und Signale blockiert bevor Threads erzeugt wurden. b) in dem Thread, der die Signale bekommen soll, wird das Signal freigeschaltet. c) The translation to Perl is left as an exercise for the reader. ad a) static void Parrot_sigaction(int sig, void (*handler)(int)) { struct sigaction action; sigset_t block_mask; /* install handler */ action.sa_handler = handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(sig, &action, NULL); /* block that signal */ sigemptyset(&block_mask); sigaddset(&block_mask, sig); sigprocmask(SIG_BLOCK, &block_mask, NULL); } ... Parrot_sigaction(SIGHUP, sig_handler); ... ad b) /* * unblock a signal */ static void Parrot_unblock_signal(int sig) { sigset_t block_mask; sigemptyset(&block_mask); sigaddset(&block_mask, sig); sigprocmask(SIG_UNBLOCK, &block_mask, NULL); } ... Parrot_unblock_signal(SIGHUP); ... From gooly at gmx.at Thu Apr 5 00:39:39 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Thu, 5 Apr 2007 09:39:39 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704042038.46419.lt@toetsch.at> References: <200704021247.20833.gooly@gmx.at> <200704041102.08081.gooly@gmx.at> <200704042038.46419.lt@toetsch.at> Message-ID: <200704050939.39771.gooly@gmx.at> Am Mittwoch, 4. April 2007 schrieb Leopold Toetsch: > Am Mittwoch, 4. April 2007 11:02 schrieb gooly at gmx.at: > > Danke Euren Antworten! > > > > > > ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt. > > > > Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht > > > > das? > > > > > > Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads > > > ?berhaupt das gesendete Signal erh?lt. Der Prozess beinhaltet je > > > nach System und Implementierung alle Threads oder nicht. > > > > hmm - ab ins Labor ;) und wieder da :( > > > > da ich verschiede threaded Variablen ben?tige habe ich threads, > > threads::shared verwendet und eben nicht fork. In threads g?be es > > ja auch das $thr->kill('KILL'), aber auch davon kriegt das Kind nix > > mit - es stirbt halt einfach lautlos, ohne die Chance auf einen > > Seufzer.. > > Das hat hp ja schon beantwortet. > > Wenn es nur um ein "gracefull-die" geht, sind Signale sowieso der > falsche Ansatz, wie in 99% aller anderen F?lle auch ;) > > Du brauchst nur eine shared Variable e.g. $running, und die > "Endlos"-Schleife der Kinder ist dann: > > while ($running) { > do_some_work(); > } > > Diese Variable kannst du fallweise auch per SIG-Handler in der Mama > resetten. Das ist das, was auch im Beispiel pool.pl gemacht wird, das auf der cpan-Seite von threads verlinkt ist, aaber diese L?sung bedeutet, dass dieser shared Variable mindestens jede Sekunde, besser noch k?rzer abgefragt wird, auch wenn das Kind eigentlich nichts zu tun h?tte - hmm. Ein: while (1) { ... sleep (300); ... } l?sst dies ins leere Laufen. Auf dem cpan-Board zu therads hab ich mein Ansinnen gepostet und gestern gerade noch bevor zum ballettwettbewerb ins Theater-Akzent ging gesehen, dass der Betreuer von threads eine L?sung gepostet hat - die werd ich mir jetzt anschauen - sp?ter dazu dann mehr .. > > > Auf der sicheren Seite bist du nur, wenn du alle Signale > > > blockierst, und genau f?r den einen emfangenden Thread > > > freischaltest [2]. > > > > hmm, wie mach ich das? > > Wie gesagt die Zeilen ueber sigaction in `info libc` > und weiter unten. hmm - C. Vielleicht ist's ja doch nicht n?tig, ich benutze ja gerade Perl um nicht in C f?r jedes kleinste Detail selber zust?ndig zu sein .. > > > > Eine Unbekannte dazwischen ist noch die Implentierung innerhalb > > > Perl selber, aber ich nehme mal an, dass das halbwegs transparent > > > ist und die libc Dokumentation f?r die Anwendung in Perl noch > > > g?ltig ist (modulo der Signalhandler selber nat?rlich). > > > > Huch, ist das etwas 'was in Perl *nicht* geht - das gibt's?? > > Ich habe nicht gesagt dass es nicht geht. Allerdings bist du hier > ziemlich nahe an der glibc bzw libpthread und die Implementierung in > Perl k?nnte hinderlich sein. Ich habe das auch noch nie in Perl > probiert nur in C. > > > > file:///home/lt/doc/susv3/functions/xsh_chap02_04.html#tag_02_04_ > > >01 > > > > Naja, wie kann ich das den umsetzen? Hast Du, kennst Du, wei?t Du > > wo es dazu (ein) Beispiel(e) gibt - Ich vermute man k?nne/m?sste es > > mit bash abfangen? > > Bash - kaum. In C schaut's z.B so [1] aus. > > > > [2] sorry, aber die docs musst du IIRC downloaden und lokal > > > installieren > > > > was meinst Du? > > Das 'xsh_chap02_04.html' hab ich jetzt, meinst Du das? > > Yep. > > leo > > [1] > Snippets aus Parrot's event code (src/events.c). Die Idee ist: > a) im Hauptthread werden Signalhandler installiert und Signale > blockiert bevor Threads erzeugt wurden. > b) in dem Thread, der die Signale bekommen soll, wird das Signal > freigeschaltet. > c) The translation to Perl is left as an exercise for the reader. why not to some students at university and published hereafter? > ad a) > > static void > Parrot_sigaction(int sig, void (*handler)(int)) > { > struct sigaction action; > sigset_t block_mask; > > /* install handler */ > action.sa_handler = handler; > sigemptyset(&action.sa_mask); > action.sa_flags = 0; > sigaction(sig, &action, NULL); > > /* block that signal */ > sigemptyset(&block_mask); > sigaddset(&block_mask, sig); > sigprocmask(SIG_BLOCK, &block_mask, NULL); > } > > ... > Parrot_sigaction(SIGHUP, sig_handler); > ... > > ad b) > > /* > * unblock a signal > */ > static void > Parrot_unblock_signal(int sig) > { > sigset_t block_mask; > > sigemptyset(&block_mask); > sigaddset(&block_mask, sig); > sigprocmask(SIG_UNBLOCK, &block_mask, NULL); > } > > ... > Parrot_unblock_signal(SIGHUP); > ... Danke, sp?ter dazu mehr, ;) muss jetzt wieder ins Labor.. Calli From gooly at gmx.at Thu Apr 5 01:42:40 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Thu, 5 Apr 2007 10:42:40 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704042038.46419.lt@toetsch.at> References: <200704021247.20833.gooly@gmx.at> <200704041102.08081.gooly@gmx.at> <200704042038.46419.lt@toetsch.at> Message-ID: <200704051042.40501.gooly@gmx.at> Also, f?r jeden, der's probieren will - so (siehe unten) geht's nicht! Ich habe die version genommen von: http://www.cpanforum.com/posts/4756 und f?r mich umgearbeitet - mein Problem bleibt das Gleich das sleep des Child wird nicht unterbrochen und das Kind stirbt still, ohne chance auf irgendwas. Gekillt habe ich auf konsole mit Kill -USR1 pid das produziert dort wo das prg lief: ./testSIG.pl 7826 => Mum starting: threads=SCALAR(0x82414a8) 7826 => MyPack starting: >1< 7826 => MyPack going to sleep .. 7826 => Mum caught $SIG{ USR1 } killing:threads=SCALAR(0x82414a8) at 7 7826 => Mum caught $SIG{ USR1 } killing myself NOW! 9 Kein Seufzer, nicht ein Ton vom Kind - friede seiner Asche. Jetzt versuch ich den original Text aus cpan.. Bis gleich, Calli #!/usr/bin/perl use strict; use warnings; use threads; # pull in threading routines use threads::shared; # and variable sharing routines our ($thr,$tme); # killing sub: for my $k ( keys %SIG ) { $SIG{$k} = sub { print "$$ => Mum caught \$SIG{ $k } killing:$thr at ", (time-$tme),"\n"; $thr->kill('USR1'); sleep(2); print "$$ => Mum caught \$SIG{ $k } killing myself NOW! ",(time-$tme),"\n"; $SIG{INT} = 'DEFAULT'; kill('INT', $$); } } # detach child: $thr = threads->new(\&MyPack::run, ID => 'MyPack' ); $tme = time; $thr->detach(); print "$$ => Mum starting: $thr\n"; # stay allive while ( 1 ) { sleep 1; } ##### package MyPack; #: detached process to receive the Client's Input use threads; use threads::shared; our $thrID; sub new { #: create FoxiRu my $pkg = shift; #: Package my $self = { @_ }; return bless($self, $pkg); ##: arr of blessed (self, pkg) } sub run { #: runs until the socket of this FoxiRu dies; reads from the socket and pushs it into @chat my $self = MyPack->new(@_); #: Me $thrID = $self->{ID}; #: $|++; my $term = 0; my $tme = time; for my $k ( keys %SIG ) { $SIG{$k} = sub { print "$$: Child Caught \$SIG{ $k } time:", (time-$tme),"\n"; $term = 1; }; } #my %cntSymbol = (); print "$$ => $thrID starting: >".($^S)."< \n";#$^S my $n = 0; while ( ! $term ) { print "$$ => $thrID going to sleep ..\n"; # unless (time%2); # sleep l?nger => weniger Lines, k?rzer bei mehr Lines sleep 30; print "$$ => $thrID ",$n++,"\tChild's SIGNAL caught :$term< time:",(time-$tme),"\n"; #system ('ps -C testSIG.pl'); } # while exists PIP print "$$ => $thrID Loop Left Time:",(time-$tme),"\n"; } From gooly at gmx.at Thu Apr 5 03:50:35 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Thu, 5 Apr 2007 12:50:35 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704051042.40501.gooly@gmx.at> References: <200704021247.20833.gooly@gmx.at> <200704042038.46419.lt@toetsch.at> <200704051042.40501.gooly@gmx.at> Message-ID: <200704051250.35637.gooly@gmx.at> Also, wenn Mama selbst den Kindstod verursacht wie im Beispiel von JDHEDDEN, dann geht's wenn ich das dann ?ndere, dass Mama ein Signal von au?en abf?ngt und dann den Kindstod veranlasst gehts nicht mehr - seufz alles auf : http://www.cpanforum.com/dist/threads Mahlzeit, Calli PS: vielleicht gibt's doch Studenten ;) From gooly at gmx.at Fri Apr 6 02:39:38 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Fri, 6 Apr 2007 11:39:38 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704042038.46419.lt@toetsch.at> References: <200704021247.20833.gooly@gmx.at> <200704041102.08081.gooly@gmx.at> <200704042038.46419.lt@toetsch.at> Message-ID: <200704061139.38647.gooly@gmx.at> Hmm, der Betreuer von threads hat nun folgendes geschrieben, wenn (bei ihm) das untige Prg l?uft, bek?me er den gracefull-Kindstod: Starting threads... thr1 sleeping... thr2 sleeping... Waiting for termination signals: kill 21892 thr1 woke up thr2 woke up thr1 sleeping... thr2 sleeping... Caught SIGTERM Signalling thr1... Signalling thr2... Waking up threads using SIGUSR2... thr1 caught SIGUSR1 thr2 caught SIGUSR1 Ignoring SIGUSR2 thr1 woke up thr2 woke up thr1 done thr2 done Done Wenn ich das bei mir laufen lasse (SuSE 9.3 Perl 5.8.6) sterben's sofort ohne Seufzer :( Starting threads... thr1 sleeping... thr2 sleeping... Waiting for termination signals: kill 10029 Caught SIGTERM Signalling thr1... Signalling thr2... Waking up threads using SIGUSR2... Ignoring SIGUSR2 Done K?nnte uU jemand (heute Karfreitag w?r doch so'n Tag f?r's Sterben) das einmal ausprobieren, ob seine Kinder.. und so?? Was kann den Unterschied ausmachen? Ich hab auch in einem thread versucht jetzt SIGUSR2 zu catchen: $SIG{USR2} = sub { print("\tthr1 caught SIGUSR2\n"); $term = 1; }; nix .. # sein Programm: #!/usr/bin/perl use strict; use warnings; $| = 1; use threads; my ($thr1, $thr2, $term); # SIGUSR2 is used to wake up threads $SIG{USR2} = sub { print("Ignoring SIGUSR2\n"); }; $SIG{TERM} = sub { print("Caught SIGTERM\n"); # Send signals to threads print("Signalling thr1...\n"); $thr1->kill('USR1'); print("Signalling thr2...\n"); $thr2->kill('USR1'); print("Waking up threads using SIGUSR2...\n\n"); kill('USR2', $$); $term = 1; }; sub thr1 { my $term = 0; $SIG{USR1} = sub { print("\tthr1 caught SIGUSR1\n"); $term = 1; }; while (! $term) { print("\tthr1 sleeping...\n"); sleep 100; print("\tthr1 woke up\n"); } print("\tthr1 done\n"); } sub thr2 { my $term = 0; $SIG{USR1} = sub { print("\t\tthr2 caught SIGUSR1\n"); $term = 1; }; while (! $term) { print("\t\tthr2 sleeping...\n"); sleep 100; print("\t\tthr2 woke up\n"); } print("\t\tthr2 done\n"); } MAIN: { print("Starting threads...\n"); $thr1 = threads->create('thr1'); $thr2 = threads->create('thr2'); $thr1->detach(); $thr2->detach(); sleep(1); # Tell user what to do print("\nWaiting for termination signals: kill $$\n\n"); # Wait for termination signal while (! $term) { sleep(1); } # Give threads a chance to finish sleep(2); } print("\nDone\n"); exit(0); From lt at toetsch.at Fri Apr 6 12:52:11 2007 From: lt at toetsch.at (Leopold Toetsch) Date: Fri, 6 Apr 2007 21:52:11 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704061139.38647.gooly@gmx.at> References: <200704021247.20833.gooly@gmx.at> <200704042038.46419.lt@toetsch.at> <200704061139.38647.gooly@gmx.at> Message-ID: <200704062152.11950.lt@toetsch.at> Am Freitag, 6. April 2007 11:39 schrieb gooly at gmx.at: > Wenn ich das bei mir laufen lasse (SuSE 9.3 Perl 5.8.6) sterben's sofort > ohne Seufzer Welcher Kernel? Welches Threadingmodel? Oder genauer: welches Threadingmodel verwendet dein Perl: $ ldd `which perl` libm.so.6 => /lib64/libm.so.6 (0x00002aad13d1f000) libdl.so.2 => /lib64/libdl.so.2 (0x00002aad13e74000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002aad13f78000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aad140b2000) ^^^^^^^^^^^^^^^^^^^^^^ ,,, $ /lib64/libpthread.so.0 Native POSIX Threads Library by Ulrich Drepper et al ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Forced unwind support included. Das ist die nun aktuelle NPTL-Library, die ziemlich POSIX kompatibel ist. In der ?bergansgszeit konnte man mit Linkeroptionen aussuchen, ob NPTL oder die alte libpthread verwendet wurde. Davon h?ngt auch das Signal-Delivery-Verhalten ab. Du glaubst immer noch, dass du Signale mit Threads verwenden willst ;) leo From gooly at gmx.at Sat Apr 7 01:45:12 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Sat, 7 Apr 2007 10:45:12 +0200 Subject: [Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama In-Reply-To: <200704062152.11950.lt@toetsch.at> References: <200704021247.20833.gooly@gmx.at> <200704061139.38647.gooly@gmx.at> <200704062152.11950.lt@toetsch.at> Message-ID: <200704071045.12858.gooly@gmx.at> Am Freitag, 6. April 2007 schrieb Leopold Toetsch: > Am Freitag, 6. April 2007 11:39 schrieb gooly at gmx.at: > > Wenn ich das bei mir laufen lasse (SuSE 9.3 Perl 5.8.6) sterben's > > sofort ohne Seufzer > > Welcher Kernel? Welches Threadingmodel? Oder genauer: welches > Threadingmodel verwendet dein Perl: > > $ ldd `which perl` > libm.so.6 => /lib64/libm.so.6 (0x00002aad13d1f000) > libdl.so.2 => /lib64/libdl.so.2 (0x00002aad13e74000) > libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002aad13f78000) > libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aad140b2000) > ^^^^^^^^^^^^^^^^^^^^^^ bei mir (SuSE 9.3) schaut's so aus: ldd `which perl` linux-gate.so.1 => (0xffffe000) libnsl.so.1 => /lib/libnsl.so.1 (0x40036000) libdl.so.2 => /lib/libdl.so.2 (0x4004b000) libm.so.6 => /lib/tls/libm.so.6 (0x4004f000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x40072000) libutil.so.1 => /lib/libutil.so.1 (0x400a4000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x400a8000) libc.so.6 => /lib/tls/libc.so.6 (0x400bb000) /lib/ld-linux.so.2 (0x40000000) > ,,, > > $ /lib64/libpthread.so.0 > Native POSIX Threads Library by Ulrich Drepper et al > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Copyright (C) 2006 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. > There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A > PARTICULAR PURPOSE. > Forced unwind support included. Das finde ich nicht in meiner libpthread.so, meine hat aber einen Zeitstempel von Juni 2005.. > Das ist die nun aktuelle NPTL-Library, die ziemlich POSIX kompatibel > ist. In der ?bergansgszeit konnte man mit Linkeroptionen aussuchen, > ob NPTL oder die alte libpthread verwendet wurde. hmm, also warten auf sp?ter. > > Davon h?ngt auch das Signal-Delivery-Verhalten ab. Du glaubst immer > noch, dass du Signale mit Threads verwenden willst ;) Naja, irgendwie juckt es halt: mal geht's (pool-Bsp) - mal nicht: bei ihm ja - bei mir nicht. Ich hab halt die Einstellung, dass das Verhalten eines pc vorhersagbar sein m?sste, obwohl ich immer wieder ent?uscht werde - jetzt wei? ich wenigstens, warum und wo. Die Sache selbst habe ich inzwischen mit einer Ram-Disk gel?st, die beim runterfahren noch bearbeitet werden kann, dringend ist's also nicht mehr. Danke auf alle F?lle, > leo und sch?ne Feiertage, calli From gooly at gmx.at Thu Apr 12 02:22:11 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Thu, 12 Apr 2007 11:22:11 +0200 Subject: [Vienna-pm] hostname?? Message-ID: <200704121122.11216.gooly@gmx.at> Hallo, habe ein merkw?rdiges Problem: auf einem PC bekomme ich auf der Konsole mit: >hostname den (mit 9.3er SuSi Yast) eingetragenen HOst-Namen: 'Soltek' Auf einem anderen PC wratet nun ein Socket-Server auf Clients und wenn sich einer anmeldet soll er den hostname auf /dev/tty2 anzeigen. AAAAber $name wird nicht beschrieben?? # mein code .. for ( $waitedpid = 0; ($paddr = accept(Client,Server)) || $waitedpid; $waitedpid = 0, close Client) { next if $waitedpid and not $paddr; my ($port, $iaddr) = sockaddr_in($paddr); my $name = gethostbyaddr($iaddr,AF_INET); print "\tReq:\t",inet_ntoa($iaddr),"\t$name @ $port\n";#Zeile58 ... } ergibt: Use of uninitialized value in con ... at line 58 Req: 10.10.10.10 @ 6980 Wieso ist alles andere ok, nur nicht $name ??? und hostname ist auf dem Client korrekt eingetragen?? Muss man hier wieder eines der vielen Leukoplastpflaster bei den aktuellen SuSEs irgendwo aufkleben? Mahlzeit und Danke schon mal, Calli From lt at toetsch.at Thu Apr 12 12:41:16 2007 From: lt at toetsch.at (Leopold Toetsch) Date: Thu, 12 Apr 2007 21:41:16 +0200 Subject: [Vienna-pm] hostname?? In-Reply-To: <200704121122.11216.gooly@gmx.at> References: <200704121122.11216.gooly@gmx.at> Message-ID: <200704122141.16441.lt@toetsch.at> Am Donnerstag, 12. April 2007 11:22 schrieb gooly at gmx.at: > Req: 10.10.10.10 ? ? ?@ 6980 > > Wieso ist alles andere ok, nur nicht $name ??? Was sagt ... $ host 10.10.10.10 ... auf dem _anderen PC_ ? leo From gooly at gmx.at Fri Apr 13 05:22:37 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Fri, 13 Apr 2007 14:22:37 +0200 Subject: [Vienna-pm] hostname?? In-Reply-To: <200704122141.16441.lt@toetsch.at> References: <200704121122.11216.gooly@gmx.at> <200704122141.16441.lt@toetsch.at> Message-ID: <200704131422.37498.gooly@gmx.at> Am Donnerstag, 12. April 2007 schrieb Leopold Toetsch: > Am Donnerstag, 12. April 2007 11:22 schrieb gooly at gmx.at: > > Req: 10.10.10.10 ? ? ?@ 6980 > > > > Wieso ist alles andere ok, nur nicht $name ??? > > Was sagt ... > > $ host 10.10.10.10 > > ... auf dem _anderen PC_ ? > > leo Danke, schon gel?st, Calli From domm at cpan.org Mon Apr 23 03:49:59 2007 From: domm at cpan.org (Thomas Klausner) Date: Mon, 23 Apr 2007 12:49:59 +0200 Subject: [Vienna-pm] Vienna OpenGuide Message-ID: <20070423104959.GL1160@domm2.zsi.at> Hi! Kake hat mich unlaengst gefragt, ob wir vienna.openguide.org wiederbeleben wollen. Wir koennten auch einen ihrer Server verwenden. Wer openguides.org nicht kennt: http://openguides.org OpenGuides is a network of free, community-maintained wiki guidebooks to places around the world. Anyone is free to contribute, whether it's by writing new articles or editing the articles that we already have. Read more at the project page. Wir (vor allem Maks) haben vor ein paar Jahren mal vienna.openguides.org gestartet, ist dann aber mangels User und Content eingeschlafen. Im Rahmen der YAPC::Europe in Wien koennten wir das Ding jetzt natuerlich wiederbeleben, wobei das primaer keine technisches, sondern eine inhaltliche Herausvorderung ist. Inzwischen gibts ja auch schon google map Plugins etc, d.h einer Interessanten Darstellung der Daten steht auch nix im Weg. Es gibt auch so nette features wie "find all things within NNNN meters" etc... Da es technisch eben nicht sehr aufwendig ist (vor allem, wenn sie's hosten) bin ich eigentlich schon dafuer es nochmal zu versuchen. Hat noch jemand Interesse, mitzumachen? Eventuell koennten wir ja auch die ganzen Daten, die (vor allem Maros) fuer die YAPC::Europe Google Map gesammelt hat, in dieses System spielen. http://vienna.yapceurope.org/ye2007/map.html -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From alfie at ist.org Tue Apr 24 03:39:55 2007 From: alfie at ist.org (Gerfried Fuchs) Date: Tue, 24 Apr 2007 12:39:55 +0200 Subject: [Vienna-pm] PDF Generierung? Message-ID: <2007-04-24_12.39.51@alfie.ist.org> Hi! In mir schwebt folgende Idee: Da Keysigning-Parties inzwischen f?r die text/plain-Liste der Keys eine nahezu standardisiertes Format haben, von der dann die MD5-Summe vorgelesen wird, es aber auch Skripte gibt, die diese Listen entsprechend umstellen und Checkboxen bei jenen macht, die man schon signiert hat sowie die Pr?fsummen schon mal eintragen[1] ... ... hab ich mir gedacht, ich will diese Idee einen Schritt weiterf?hren, und in das ganze eine Unterst?tzung der Photo-IDs einbauen. Das ist nat?rlich nur sinnvoll m?glich, wenn die Ausgabeform auch Grafik unterst?tzt. Deswegen hab ich gleich mal an PDF gedacht. Das extrahieren der Daten ist ja kein Thema, auch das extrahieren der Photo-ID ist simpel - nur, ich hab kein brauchbares Tutorial zwecks PDF-Generierung gefunden. Ich kenn zwar PDF::API2 von unser aller Fredo, nur komm ich damit einfach nicht zurecht. Vielleicht versteh ich einfach zu wenig von DesktopPublishing oder was auch immer da f?r ein Grundwissen vorausgesetzt wird, aber ich schaff einfach nicht was brauchbares mit vertretbarem Aufwand ... Hat wer einen Ansatz bzw. einen Hinweis auf eine Doku, die mich meinem Ziel etwas n?her bringt? Danke, Alfie [1] gpgsigs aus http://packages.debian.org/signing-party -- * The "Aturem la Guerra" release, aka "Blockbomb on Bush, Blair and Aznar by Oskuro". -- Jordi Mallach, changelog.Debian for gtetrinet (0.7.0-1) -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070424/120ff51d/attachment.bin From mathias.frey at wu-wien.ac.at Tue Apr 24 04:22:24 2007 From: mathias.frey at wu-wien.ac.at (Mathias Frey) Date: Tue, 24 Apr 2007 13:22:24 +0200 Subject: [Vienna-pm] PDF Generierung? In-Reply-To: <2007-04-24_12.39.51@alfie.ist.org> References: <2007-04-24_12.39.51@alfie.ist.org> Message-ID: <462DE870.1060104@wu-wien.ac.at> Gerfried Fuchs wrote: > Hi! ... > Hat wer einen Ansatz bzw. einen Hinweis auf eine Doku, die mich meinem > Ziel etwas n?her bringt? f?r meine anwendungen gehe ich gerne den umweg ?ber latex und generier' daraus dann pdf. vorteile sind mMn - latex ist ein einfach verst?ndliches, gut leserliches format - du ersparst dir gedanken ?ber format, silbentrennung, aussehen, etc. - du hast einen haufen von makros zur verf?gung, mit denen du alles m?gliche anstellen kannst (inhaltsverzeichnisse, hyperrefs, etc.) - latex quellcode ist watscheneinfach mit perl zu erzeugen HTH mette -- Mathias Frey WU > ZID > VA > BACH +43(1)31336-6080 From alfie at ist.org Tue Apr 24 04:52:40 2007 From: alfie at ist.org (Gerfried Fuchs) Date: Tue, 24 Apr 2007 13:52:40 +0200 Subject: [Vienna-pm] PDF Generierung? In-Reply-To: <462DE870.1060104@wu-wien.ac.at> References: <2007-04-24_12.39.51@alfie.ist.org> <462DE870.1060104@wu-wien.ac.at> Message-ID: <2007-04-24_13.52.36@alfie.ist.org> * Mathias Frey [2007-04-24 13:22]: > Gerfried Fuchs wrote: >> Hat wer einen Ansatz bzw. einen Hinweis auf eine Doku, die mich meinem >> Ziel etwas n?her bringt? > > f?r meine anwendungen gehe ich gerne den umweg ?ber latex und generier' > daraus dann pdf. vorteile sind mMn LaTeX kann ich nicht, hatte ich noch nie wirklich die Notwendigkeit daf?r ... > - du ersparst dir gedanken ?ber format, silbentrennung, aussehen, etc. Erm, aber genau darum geht's eigentlich. Silbentrennung gibt es keine, und Format/Aussehen sollte schon recht klar sein, damit die Liste bei der Keysigning-Party dann auch sinnvoll nutzbar ist, sonst ist der ganze Aufwand sowieso f?r die Katz. > - du hast einen haufen von makros zur verf?gung, mit denen du alles > m?gliche anstellen kannst (inhaltsverzeichnisse, hyperrefs, etc.) Mit Verlaub, das ist wie Medizinb?lle auf Spatzen werfen, ein Haufen Bloat, der hier absolut keinen Nutzen bringt. :) MfG, Alfie -- Liebe ist ein Spiel der Wellen mit Gef?hlen die wir nicht versteh'n -- Andr? Appel -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070424/e3ca97ca/attachment.bin From hjp-vienna-pm-list at hjp.at Tue Apr 24 08:22:52 2007 From: hjp-vienna-pm-list at hjp.at (Peter J. Holzer) Date: Tue, 24 Apr 2007 17:22:52 +0200 Subject: [Vienna-pm] PDF Generierung? In-Reply-To: <2007-04-24_12.39.51@alfie.ist.org> References: <2007-04-24_12.39.51@alfie.ist.org> Message-ID: <20070424152252.GA25392@hjp.at> On 2007-04-24 12:39:55 +0200, Gerfried Fuchs wrote: > In mir schwebt folgende Idee: Da Keysigning-Parties inzwischen f?r die > text/plain-Liste der Keys eine nahezu standardisiertes Format haben, von > der dann die MD5-Summe vorgelesen wird, es aber auch Skripte gibt, die > diese Listen entsprechend umstellen und Checkboxen bei jenen macht, die > man schon signiert hat sowie die Pr?fsummen schon mal eintragen[1] ... > > ... hab ich mir gedacht, ich will diese Idee einen Schritt > weiterf?hren, und in das ganze eine Unterst?tzung der Photo-IDs > einbauen. Das ist nat?rlich nur sinnvoll m?glich, wenn die Ausgabeform > auch Grafik unterst?tzt. Deswegen hab ich gleich mal an PDF gedacht. Das > extrahieren der Daten ist ja kein Thema, auch das extrahieren der > Photo-ID ist simpel - nur, ich hab kein brauchbares Tutorial zwecks > PDF-Generierung gefunden. > > Ich kenn zwar PDF::API2 von unser aller Fredo, nur komm ich damit > einfach nicht zurecht. Ich kann Dir den Code zukommen lassen, der die LUGA-Mitgliedsausweise erzeugt - da verwende ich auch PDF::API2, vielleicht hilft Dir das. (Der Code selber ist eh nichts geheimes (nur nicht besonders sch?n), aber die Testdaten sind echte Ausz?ge aus der LUGA-Mitglieder-Liste drum kann ich das nicht einfach auf die Website stellen) hp > _______________________________________________ > Vienna-pm mailing list > Vienna-pm at pm.org > http://mail.pm.org/mailman/listinfo/vienna-pm -- _ | Peter J. Holzer | I know I'd be respectful of a pirate |_|_) | Sysadmin WSR | with an emu on his shoulder. | | | hjp at hjp.at | __/ | http://www.hjp.at/ | -- Sam in "Freefall" -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070424/9baa8708/attachment.bin From domm at cpan.org Tue Apr 24 22:30:23 2007 From: domm at cpan.org (Thomas Klausner) Date: Wed, 25 Apr 2007 07:30:23 +0200 Subject: [Vienna-pm] Jobs Message-ID: <20070425053022.GG1160@domm2.zsi.at> Hi! Bei uns (3united / Verisign) sind 2 Perl-Jobs frei: http://www.3united.com/site/pdf/350.pdf http://www.3united.com/site/pdf/352.pdf (der/die 352er wuerde im selben Team wie ich arbeiten...) -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From gooly at gmx.at Fri Apr 27 00:49:47 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Fri, 27 Apr 2007 09:49:47 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. Message-ID: <200704270949.47363.gooly@gmx.at> Hallo und Guten Morgen! Gibt es eigentlich in Perl die M?glichkeit einen String mit einer definierten Anzahl von Zeichen, die nat?rlich nicht alle umfassen, sondern zB nur 12 oder 16 Zeichen nur: '0' .. '9', '.', ';' (also Zahlen und ein paar andere) separat, zeilenweise als String zu komprimieren? Die ?blichen Verd?chtigen sind Module, die aber ganze Files komprimieren oder eben den gesamten Zeichensatz. Vielleicht kennt jemand noch etwas vergangenen Zeiten? Danke und schon mal ein sch?nes Wochenende, Calli From domm at cpan.org Fri Apr 27 01:09:53 2007 From: domm at cpan.org (Thomas Klausner) Date: Fri, 27 Apr 2007 10:09:53 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <200704270949.47363.gooly@gmx.at> References: <200704270949.47363.gooly@gmx.at> Message-ID: <20070427080953.GS1160@domm2.zsi.at> Hi! On Fri, Apr 27, 2007 at 09:49:47AM +0200, gooly at gmx.at wrote: > Gibt es eigentlich in Perl die M?glichkeit einen String mit einer > definierten Anzahl von Zeichen, die nat?rlich nicht alle umfassen, > sondern zB nur 12 oder 16 Zeichen nur: '0' .. '9', '.', ';' (also > Zahlen und ein paar andere) separat, zeilenweise als String zu > komprimieren? Die ?blichen Verd?chtigen sind Module, die aber ganze > Files komprimieren oder eben den gesamten Zeichensatz. Verstehe ich das richtig, das du aus Hallo Welt sowas wie 0232434535456546 machen willst? Komprimiert (im Sinne von "braucht weniger Platz") wird es so sicher nicht (wenn ich mich richtig erinnere, wie komprimieren funktioniert..) Eine einfache Moeglichkeit waere: $line=join(';',map{ ord($_) } split (//,$string)) macht aus "hallo welt" : 104;97;108;108;111;32;119;101;108;116 -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From Wolfgang.Laun at thalesgroup.com Fri Apr 27 01:10:48 2007 From: Wolfgang.Laun at thalesgroup.com (Wolfgang Laun) Date: Fri, 27 Apr 2007 10:10:48 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <200704270949.47363.gooly@gmx.at> References: <200704270949.47363.gooly@gmx.at> Message-ID: <4631B008.1070001@thalesgroup.com> Die gew?nschten Zeichen (max. 16) k?nnen mit tr/// auf [0-9a-f] abgebildet werden. Diese k?nnen mit pack auf die halbe L?nge gepackt werden. Die Umkehrung ist trivial. Vermutlich ist es notwendig, die urspr?nglichen L?nge mitzupacken, da mit 'H*' immer eine gerade Anzahl von Zeichen entpackt wird (vgl. 2. Test). my $s = "abcdefghijklmnop"; print "s=$s\n"; $s =~ tr/abcdefghijklmnop/0123456789abcdef/; my $p = pack( 'H*', $s ); print "length p = " . length( $p ) . "\n"; my $u = unpack( 'H*', $p ); $u =~ tr/0123456789abcdef/abcdefghijklmnop/; print "u=$u\n"; s=abcdefghijklmnop length p = 8 u=abcdefghijklmnop s=a length p = 1 u=aa mfg WLaun gooly at gmx.at wrote: >Hallo und Guten Morgen! > >Gibt es eigentlich in Perl die M?glichkeit einen String mit einer >definierten Anzahl von Zeichen, die nat?rlich nicht alle umfassen, >sondern zB nur 12 oder 16 Zeichen nur: '0' .. '9', '.', ';' (also >Zahlen und ein paar andere) separat, zeilenweise als String zu >komprimieren? Die ?blichen Verd?chtigen sind Module, die aber ganze >Files komprimieren oder eben den gesamten Zeichensatz. > >Vielleicht kennt jemand noch etwas vergangenen Zeiten? >Danke und schon mal ein sch?nes Wochenende, >Calli >_______________________________________________ >Vienna-pm mailing list >Vienna-pm at pm.org >http://mail.pm.org/mailman/listinfo/vienna-pm > > From gooly at gmx.at Fri Apr 27 02:35:39 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Fri, 27 Apr 2007 11:35:39 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <4631B008.1070001@thalesgroup.com> References: <200704270949.47363.gooly@gmx.at> <4631B008.1070001@thalesgroup.com> Message-ID: <200704271135.39958.gooly@gmx.at> Hmm, mein Fehler, ich war nicht genau genug. Jedes Zeichen wird ja normalerweise mit 8 oder 16 bit 'ver-coded', 10 Zahlen w?re so 80 oder 160 bit - richtig? Wenn ich aber _nur_ 16 Zeichen habe, br?uchte ich eigentlich nur 3 bit um alles zu codieren, ergo nur 30 bits ergo 38% bzw 12,5%. Eventuell noch eine kleine weitere Verbesserung, wenn man das h?ufigste Zeichen zB den Delimiter ';' mit zwei statt drei bits 'ver-coded' und eventuell noch mehr, wenn man nicht alle 16 braucht. So m?sste dann den resultierende String bitweise zusammenbaut werden. Insofern w?re halt nicht der String als Ganzes sondern es muss jedes einzelne Zeichen bearbeitet werden. Ich dachte an eine Funktion, der man den Zeichensatz und den String ?bergibt und der den komprimierten String zur?ckgibt: Ich stellte mir daher so etwas vor: foreach my $s ((split //, $orgStr)) { setNext3Bits( $s ); } Ich br?uchte dann auch eine 3Bit-Kombination als Zeilenende oder Recordende. Zum (De-) Kompriemieren brauch daher nur an beiden 'Enden' den hash bzw die Zuordnung: Zeichen => 3BitCode, ... 3BitCode => Zeichen Am Freitag, 27. April 2007 schrieb Wolfgang Laun: > Die gew?nschten Zeichen (max. 16) k?nnen mit tr/// auf [0-9a-f] > abgebildet werden. Diese k?nnen mit pack auf die halbe L?nge gepackt > werden. Die Umkehrung ist trivial. Vermutlich ist es notwendig, die > urspr?nglichen L?nge mitzupacken, da mit 'H*' immer eine gerade > Anzahl von Zeichen entpackt wird (vgl. 2. Test). > > my $s = "abcdefghijklmnop"; > print "s=$s\n"; > $s =~ tr/abcdefghijklmnop/0123456789abcdef/; > my $p = pack( 'H*', $s ); > print "length p = " . length( $p ) . "\n"; > my $u = unpack( 'H*', $p ); > $u =~ tr/0123456789abcdef/abcdefghijklmnop/; > print "u=$u\n"; hmm, brauch ich da nicht zum dekomprimieren den Orginalcode anyway? Calli From bernd at firmix.at Fri Apr 27 03:18:09 2007 From: bernd at firmix.at (Bernd Petrovitsch) Date: Fri, 27 Apr 2007 12:18:09 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <200704271135.39958.gooly@gmx.at> References: <200704270949.47363.gooly@gmx.at> <4631B008.1070001@thalesgroup.com> <200704271135.39958.gooly@gmx.at> Message-ID: <1177669089.5098.0.camel@tara.firmix.at> On Fri, 2007-04-27 at 11:35 +0200, gooly at gmx.at wrote: > Hmm, > mein Fehler, ich war nicht genau genug. > > Jedes Zeichen wird ja normalerweise mit 8 oder 16 bit 'ver-coded', 10 > Zahlen w?re so 80 oder 160 bit - richtig? > Wenn ich aber _nur_ 16 Zeichen habe, br?uchte ich eigentlich nur 3 bit Bei mir ist 2^3==8 und 2^4==16. [ TOFU entsorgt ] Bernd -- Firmix Software GmbH http://www.firmix.at/ mobil: +43 664 4416156 fax: +43 1 7890849-55 Embedded Linux Development and Services From Wolfgang.Laun at thalesgroup.com Fri Apr 27 03:18:35 2007 From: Wolfgang.Laun at thalesgroup.com (Wolfgang Laun) Date: Fri, 27 Apr 2007 12:18:35 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <200704271135.39958.gooly@gmx.at> References: <200704270949.47363.gooly@gmx.at> <4631B008.1070001@thalesgroup.com> <200704271135.39958.gooly@gmx.at> Message-ID: <4631CDFB.70904@thalesgroup.com> gooly at gmx.at wrote: >Hmm, >mein Fehler, ich war nicht genau genug. > Und jetzt wohl auch noch nicht... > >Jedes Zeichen wird ja normalerweise mit 8 oder 16 bit 'ver-coded', 10 >Zahlen w?re so 80 oder 160 bit - richtig? >Wenn ich aber _nur_ 16 Zeichen habe, br?uchte ich eigentlich nur 3 bit > 000, 001,...111 sind wie viele Zeichen? Ist das Alphabet der 16 Zeichen f?r alle Strings das selbe? Warum kann der Datenstrom nicht insgesamt gezippt werden? >um alles zu codieren, ergo nur 30 bits ergo 38% bzw 12,5%. Eventuell >noch eine kleine weitere Verbesserung, wenn man das h?ufigste Zeichen >zB den Delimiter ';' mit zwei statt drei bits 'ver-coded' und eventuell >noch mehr, wenn man nicht alle 16 braucht. > >So m?sste dann den resultierende String bitweise zusammenbaut werden. > >Insofern w?re halt nicht der String als Ganzes sondern es muss jedes >einzelne Zeichen bearbeitet werden. Ich dachte an eine Funktion, der >man den Zeichensatz und den String ?bergibt und der den komprimierten >String zur?ckgibt: >Ich stellte mir daher so etwas vor: > foreach my $s ((split //, $orgStr)) { > setNext3Bits( $s ); > } >Ich br?uchte dann auch eine 3Bit-Kombination als Zeilenende oder >Recordende. >Zum (De-) Kompriemieren brauch daher nur an beiden 'Enden' den hash bzw >die Zuordnung: > Zeichen => 3BitCode, >... > 3BitCode => Zeichen > > >Am Freitag, 27. April 2007 schrieb Wolfgang Laun: > > >>Die gew?nschten Zeichen (max. 16) k?nnen mit tr/// auf [0-9a-f] >>abgebildet werden. Diese k?nnen mit pack auf die halbe L?nge gepackt >>werden. Die Umkehrung ist trivial. Vermutlich ist es notwendig, die >>urspr?nglichen L?nge mitzupacken, da mit 'H*' immer eine gerade >>Anzahl von Zeichen entpackt wird (vgl. 2. Test). >> >>my $s = "abcdefghijklmnop"; >>print "s=$s\n"; >>$s =~ tr/abcdefghijklmnop/0123456789abcdef/; >>my $p = pack( 'H*', $s ); >>print "length p = " . length( $p ) . "\n"; >>my $u = unpack( 'H*', $p ); >>$u =~ tr/0123456789abcdef/abcdefghijklmnop/; >>print "u=$u\n"; >> >> > >hmm, brauch ich da nicht zum dekomprimieren den Orginalcode anyway? > Was f?r einen Originalcode? Die Abbildung von 16 Zeichen auf [0-9a-f] wird im 2. tr/// umgedreht. Annahme ist (s.o.), dass alle Strings dasselbe Alphabet verwenden. -WL >Calli >_______________________________________________ >Vienna-pm mailing list >Vienna-pm at pm.org >http://mail.pm.org/mailman/listinfo/vienna-pm > > From gooly at gmx.at Fri Apr 27 07:03:08 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Fri, 27 Apr 2007 16:03:08 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <4631CDFB.70904@thalesgroup.com> References: <200704270949.47363.gooly@gmx.at> <200704271135.39958.gooly@gmx.at> <4631CDFB.70904@thalesgroup.com> Message-ID: <200704271603.09065.gooly@gmx.at> Am Freitag, 27. April 2007 schrieb Wolfgang Laun: > gooly at gmx.at wrote: > >Hmm, > >mein Fehler, ich war nicht genau genug. > > Und jetzt wohl auch noch nicht... ja, sorry f?r meine 'delay' k?mpfe gerade an einer anderen 'Front': Aufeinmal geht die HD-LED nicht mehr aus (seit 6 Stunden!! jetzt), und lap-top-mode kann die Platte nicht runterfahren .. Sonst funktioniert alles, kannmich einloggen, ein lsof +D / bringt eine lange Liste nach heftigem (h?rbaren) HD-Zugriffen, dann ist's wieder still und die LED leuchtet immer noch. > >Jedes Zeichen wird ja normalerweise mit 8 oder 16 bit 'ver-coded', > > 10 Zahlen w?re so 80 oder 160 bit - richtig? > >Wenn ich aber _nur_ 16 Zeichen habe, br?uchte ich eigentlich nur 3 > > bit > > 000, 001,...111 sind wie viele Zeichen? ?hmm, 8, peinlich, ja, 4 bit. > > Ist das Alphabet der 16 Zeichen f?r alle Strings das selbe? > > Warum kann der Datenstrom nicht insgesamt gezippt werden? Ist halt nicht nur von a nach b sondern von a nach 1,2,3,4,5,6,7, ... Dies 1-to-Many ist nicht ganz einfach. > > >um alles zu codieren, ergo nur 30 bits ergo 38% bzw 12,5%. Eventuell > >noch eine kleine weitere Verbesserung, wenn man das h?ufigste > > Zeichen zB den Delimiter ';' mit zwei statt drei bits 'ver-coded' > > und eventuell noch mehr, wenn man nicht alle 16 braucht. > > > >So m?sste dann den resultierende String bitweise zusammenbaut > > werden. > > > >Insofern w?re halt nicht der String als Ganzes sondern es muss jedes > >einzelne Zeichen bearbeitet werden. Ich dachte an eine Funktion, der > >man den Zeichensatz und den String ?bergibt und der den > > komprimierten String zur?ckgibt: > >Ich stellte mir daher so etwas vor: > > foreach my $s ((split //, $orgStr)) { > > setNext3Bits( $s ); > > } > >Ich br?uchte dann auch eine 3Bit-Kombination als Zeilenende oder > >Recordende. > >Zum (De-) Kompriemieren brauch daher nur an beiden 'Enden' den hash > > bzw die Zuordnung: > > Zeichen => 3BitCode, > >... > > 3BitCode => Zeichen > > > >Am Freitag, 27. April 2007 schrieb Wolfgang Laun: > >>Die gew?nschten Zeichen (max. 16) k?nnen mit tr/// auf [0-9a-f] > >>abgebildet werden. Diese k?nnen mit pack auf die halbe L?nge > >> gepackt werden. Die Umkehrung ist trivial. Vermutlich ist es > >> notwendig, die urspr?nglichen L?nge mitzupacken, da mit 'H*' immer > >> eine gerade Anzahl von Zeichen entpackt wird (vgl. 2. Test). > >> > >>my $s = "abcdefghijklmnop"; > >>print "s=$s\n"; > >>$s =~ tr/abcdefghijklmnop/0123456789abcdef/; > >>my $p = pack( 'H*', $s ); > >>print "length p = " . length( $p ) . "\n"; > >>my $u = unpack( 'H*', $p ); > >>$u =~ tr/0123456789abcdef/abcdefghijklmnop/; > >>print "u=$u\n"; > > > >hmm, brauch ich da nicht zum dekomprimieren den Orginalcode anyway? > > Was f?r einen Originalcode? Die Abbildung von 16 Zeichen auf [0-9a-f] > wird im 2. tr/// umgedreht. Annahme ist (s.o.), dass alle Strings > dasselbe Alphabet > verwenden. Ok, jetzt verstanden, Dein Zeichen-Set war a-p, und schaute so wie der string $s aus, das hat ich ?bersehen), ausprobiert und klappt - Danke! Aber 'was mach ich nur mit meiner HD?? Calli From alfredreibenschuh at gmx.net Fri Apr 27 23:56:55 2007 From: alfredreibenschuh at gmx.net (Alfred Reibenschuh) Date: Sat, 28 Apr 2007 08:56:55 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <200704270949.47363.gooly@gmx.at> References: <200704270949.47363.gooly@gmx.at> Message-ID: <4632F037.30602@gmx.net> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 gooly at gmx.at wrote: > Hallo und Guten Morgen! > > Gibt es eigentlich in Perl die M?glichkeit einen String mit einer > definierten Anzahl von Zeichen, die nat?rlich nicht alle umfassen, > sondern zB nur 12 oder 16 Zeichen nur: '0' .. '9', '.', ';' (also > Zahlen und ein paar andere) separat, zeilenweise als String zu > komprimieren? Die ?blichen Verd?chtigen sind Module, die aber ganze > Files komprimieren oder eben den gesamten Zeichensatz. du suchst wohl: http://search.cpan.org/dist/Algorithm-Huffman/ C fredo - -- Schonmal davon gehoert, dass nicht jeder linux user gleich ein programmierer ist, der alles, was er selber braucht, auch selber programmiert, installiert, patched, hacked oder portiert? Urks? Das ist doch nur eine Legende..... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGMvA3jKJMaHhpyr4RCBI1AJ9b9f6TW2eqF91lINQ48Aju1oP8jACfS6JU +jFHhUXQr3R/6qXYhCgZXyY= =e52H -----END PGP SIGNATURE----- From gooly at gmx.at Sat Apr 28 08:23:46 2007 From: gooly at gmx.at (gooly at gmx.at) Date: Sat, 28 Apr 2007 17:23:46 +0200 Subject: [Vienna-pm] Gibt es eigentlich .. In-Reply-To: <4632F037.30602@gmx.net> References: <200704270949.47363.gooly@gmx.at> <4632F037.30602@gmx.net> Message-ID: <200704281723.46688.gooly@gmx.at> Am Samstag, 28. April 2007 schrieb Alfred Reibenschuh: > gooly at gmx.at wrote: > > Hallo und Guten Morgen! > > > > Gibt es eigentlich in Perl die M?glichkeit einen String mit einer > > definierten Anzahl von Zeichen, die nat?rlich nicht alle umfassen, > > sondern zB nur 12 oder 16 Zeichen nur: '0' .. '9', '.', ';' (also > > Zahlen und ein paar andere) separat, zeilenweise als String zu > > komprimieren? Die ?blichen Verd?chtigen sind Module, die aber ganze > > Files komprimieren oder eben den gesamten Zeichensatz. > > du suchst wohl: > http://search.cpan.org/dist/Algorithm-Huffman/ nee, nicht ganz, 10 der 16 Zeichen (0..9) sind einmal gleichverteilt - nehme ich an und damit d?rfte der Zusatzgewinn gegen?ber der pack()-unpack()-L?sung schon realtiv klein sein, ausserdem ist's wohl langsamer und aufwendiger, da ich bei pack-unpack zB nur die nicht 0-9 in a-f wandeln muss. Aber Danke, calli