From emhn at telcel.net.ve Thu Mar 3 10:47:38 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Thu Mar 3 10:47:48 2005 Subject: [caracas-pm] Re: [l-linux] perl+postgres y el consumo de memoria In-Reply-To: <20050303170014.93012.qmail@web30701.mail.mud.yahoo.com> References: <20050303170014.93012.qmail@web30701.mail.mud.yahoo.com> Message-ID: <1109875658.4281.30.camel@localhost> On Thu, 2005-03-03 at 09:00 -0800, Daniel Cubero Salas wrote: > Desarrolle un programa en perl con conexin a postgres > (digamos que es un semi-daemon), cuando se inserta en > cierta tabla: este programa, cada 3 segundos, lee todo > lo que este en la tabla a travs de una funcin que > cree en postgres y hace ciertas operaciones. Esto > funciona muy bien. > > El problema es: observando el consumo de memoria noto > que no libera memoria, con MRTG (q reporta el consumo > de memoria) MRTG no reporta el consumo de memoria. MRTG utiliza el protocolo SNMP (o un programa auxiliar) para tomar muestra, almacenarlas en una base de datos round-robin y construir gr?ficos de tendencia; tu lo estar?s usando para tomar muestras de uso de memoria. Esto para los que leen por primera vez acerca de MRTG antes que se confundan. > se genera una curva descendente que llega > a estabilizarse en 20 MB de memoria libre (hay > ocaciones en que usa algo de swap) y queda all > constante. Por tu descripci?n eso lo que reporta es la memoria libre en _todo_ el sistema. Quiz?s se est? consumiendo en otras cosas, y tu asumes que es el programa en Perl. Es mucho mejor que controles la memoria consumida por el proceso en cuesti?n, cosa que puedes hacer con MRTG apoyado en un programa externo que haga ps y saque algunas cuentas triviales. Pero asumamos que la memoria libre se agota porque ?ste programa la consume toda. > Me parece que es algo en como estoy manejando la > conexin al postgres y el almacenamiento de la matriz > de datos que saco de la tabla... a breves rasgos hace > esto el programita: > > ============ > $dbh = BI->connect_cached() > > $sth = $dbh->prepare_cached( > "SELECT * FROM funcion_consulta(?)"); Usar variables globales sin declararlas es el primer peor error que se puede cometer. Si tienen que ser globales, entonces use vars qw/$dbh $sth/ pero si no my $dbh = ... my $sth = ... Es m?s, acost?mbrate a poner 'use strict' al comienzo de todos los programas para que el lenguaje te advierta de esas (y otras) cosas perniciosas. > for (;;) { > if ( $sth->execute($dato) ) { > while ( @rowData = $sth->fetchrow() ) Resulta que @rowData es global... simplemente porque no la declaraste como local (cosa que ser?a interesante para que se _libere_ cada vez que cumplas un ciclo, cosa que probablemente es lo que _quieres_ pero no lo que _escribiste_. Por otro lado, hacer fetchrow() obliga a crear una _lista_ con los valores de las columnas, para que luego sea _copiada_ a @rowData. Eso no es eficiente en velocidad, sobre todo en un ciclo como el que est?s escribiendo y peor a?n si esperas traer muchos registros. La primera soluci?n, que no implica cambiar mucho tu algoritmo, es que en lugar de hacer fetchrow() hagas fetchrow_arrayref() para que te devuelva una referencia a la lista, as? cambias a while( my $rowData = $sth->fetchrow_arrayref() ) { ... usas $rowData->[0] en lugar de $rowData[0] como tendr?as antes ... } te est?s ahorrando copiar una lista (eso es menos tiempo, menos memoria y menos necesidad de que la m?quina virtual recoja basura). Si quieres que el programa sea _brutalmente_ r?pido y consuma mucha menos memoria, entonces haces algo como my ($columna0,$columna1,...,$columnaN); $sth->bind_columns(\$columna1,\$columna1,...,\$columnaN); for(;;) { while ($sth->fetch()) { ... usas $columna0, $columna1, etc. ... m?gico } } Esta es la forma m?s r?pida y menos onerosa de hacer consultas. > { > > } > > } # FIN del IF > } # FIN del FOR > > $sth->finish(); El finish() debe utilizarse despu?s de que "dejes de necesitar" el execute(). De modo que deber?a estar dentro del if, justo despu?s del while. Esto es particularmente importante si la consulta que est?s haciendo utiliza ORDER BY o GROUP_BY; como consultas contra una tabla generada por funci?n (Hola usuarios MySQL que no pueden hacer eso :-) s?lo tu sabr?s si te resulta ?til. > $dbh->disconnect(); > exit (0); > > ============ > > Preguntas: > Hay alguna diferencia importante entre las conexiones > que son y no son "CACHED"??? Si. > Debera colocar el "$sth-PREPARE" dentro del FOR No, ah? est? perfectamente bien. Las instrucciones se preparan una sola vez, se ejecutan m?ltiples veces. > y hacer $sth->finish() dentro del FOR, tambin; Si. Como expliqu? antes. -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From emhn at telcel.net.ve Thu Mar 3 11:00:20 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Thu Mar 3 11:00:29 2005 Subject: [caracas-pm] =?ISO-8859-1?Q?Reuni=F3n?= de =?ISO-8859-1?Q?ma=F1ana?= In-Reply-To: <1109370711.18393.11.camel@juanjose.lunarpages.lan> References: <1109342846.20231.128.camel@localhost> <2d372e0b908df34914c34f051d5ed797@cantv.net> <1109366309.20231.158.camel@localhost> <1109370711.18393.11.camel@juanjose.lunarpages.lan> Message-ID: <1109876420.4281.37.camel@localhost> On Fri, 2005-02-25 at 14:31 -0800, Juan Jose Natera Abreu wrote: > On Fri, 2005-02-25 at 17:18 -0400, Ernesto Hern?ndez-Novich wrote: > > On Fri, 2005-02-25 at 15:04 -0400, Luis Mu?oz wrote: > > > El Feb 25, 2005, a las 10:47 AM, Ernesto Hern?ndez-Novich escribi?: > > > > > > > Para ma?ana conversaremos acerca del nuevo set de tutoriales para > > > > novatos, [...] ?qu? tal si hablamos de "one liners"? > > > > > > Hmmm. Tutoriales para novatos y one-liners pos?blemente no deber?an > > > mezclarse :) > > > > Exacto... por eso no los vamos a mezclar: vamos a hablar del set de > > tutoriales para novatos que comienzan en _marzo_ y despu?s de planificar > > eso, vamos a hablar de one-liners. > > > Entonces se te van a aburrir los no tan novatos, yo sugiero que las > reuniones, dentro de lo posible, tengan _algo_ de interesante para cada > quien. Especialmente si van a hacer un set, de cuantos meses estan > hablando? dos al menos. La reuni?n qued? divertida. Primero resolvimos el tema de los tutoriales, que comenzar?n a partir de la reuni?n de marzo y en principio ser?an tres. El primero lo van a presentar entre Carlos Pineda y Daniel Rodr?guez; ya tienen el material de apoyo. Entre todos acordamos que el tutorial ser? presentado en base a ejemplos concretos de c?digo, y no como una revisi?n del lenguaje; pensamos que es m?s f?cil llevarse los conceptos de esa forma. Despu?s, uno de los asistentes al Festival de Instalaci?n Linux quer?a saber si hacer servidores con IO::Socket era sencillo, as? que le hice una mini-presentaci?n de Net::Server (algo para los avanzados). Por ?ltimo hicimos one-liners y tengo la impresi?n que muchos de los novatos quedaron fascinados por el tema. No hicimos one-liners rebuscados; quiz?s el m?s rebuscado fue cuando Jos? Luis explic? el que envi? a la lista. En el fondo, el prop?sito de la reuni?n fue mostrar el poder de llamar a Perl desde la l?nea de comandos (man perlrun) para usarlo como "editor en anfetaminas" y los tips habituales de cuando usar -p, cuando usar -n, autosplit, etc. -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From agazso at ius.cc Thu Mar 3 12:49:46 2005 From: agazso at ius.cc (=?iso-8859-1?Q?Andr=E9s_Gazs=F3?=) Date: Thu Mar 3 12:50:03 2005 Subject: [caracas-pm] =?iso-8859-1?q?Perl_y_archivos_PalmOS-Propuesta_par?= =?iso-8859-1?q?a_nuestra_pr=F3xima_reuni=F3n_de_perl_Mongers?= In-Reply-To: <1109876420.4281.37.camel@localhost> Message-ID: <200503032049.j23KnkSD032421@rs25s12.datacenter.cha.cantv.net> Muy estimados miembros de Perl-Mongers Les escribo con la finalidad de proponer a t?tulo de nuestra venidera reuni?n, el estudio de los m?dulos de Perl para manejo de archivos prc y prb de PalmOS, adem?s de cualquier otro tema que relacione a Perl y PalmOS. En espera de vuestros valiosos comentarios les saluda, Andr?s. ------------------------------------- Andr?s Gazs? Gazs? & Dol?nyi Abogados Telf. : +58 (212) 976.59.93 976.63.55 Fax. : +58 (212) 976.66.06 mailto: agazso@ius.cc ------------------------------------- From emhn at telcel.net.ve Sat Mar 5 08:45:26 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Sat Mar 5 08:45:48 2005 Subject: [caracas-pm] Re: [l-linux] perl+postgres y el consumo de memoria In-Reply-To: <20050304223325.42058.qmail@web30703.mail.mud.yahoo.com> References: <20050304223325.42058.qmail@web30703.mail.mud.yahoo.com> Message-ID: <1110041126.17714.27.camel@localhost> On Fri, 2005-03-04 at 14:33 -0800, Daniel Cubero Salas wrote: > Consejo: Debido a que realizo varias llamadas a > funciones que program? en postgres, decid? ejecutar > todos los "prepare_cached" antes de entrar al bucle > FOR. > > $dbh = DBI->connect_cached() > > $sthC = $dbh->prepare_cached( > "SELECT * FROM funcion_consulta(?)"); > > $sthV = $dbh->prepare_cached( > "SELECT * FROM funcion_verifica(?)"); > > $sthA = $dbh->prepare_cached( > "SELECT * FROM funcion_actualiza(?)"); > > for (;;) { > > } > > Funcion?, pero es v?lidos esto..?? Si, eso es perfecto. > Pregunta: Es necesario el uso de strict para asegurar > la "correcta" ejecuci?n del programa..??? El 'use strict' asegura que el compilador no te va a perdonar ninguna metida de pata, ni de las m?s simples (eso para los que dicen que Perl es demasiado liberal, con use strict se pone fascista). Es obligatorio tomarse el tiempo para leer man perldsc. > Pregunto esto porque uso constant para valores globales que as? > facilita el cambio de ciertas variables de ejecuci?n; Para usar valores constantes de manera _formal_ en un programa en Perl deber?as escribir: #!/usr/bin/perl -w use strict; # -w _y_ strict, programaci?n para hombres use constant FOO => 4; use constant BAR => 5; print FOO * BAR; # Imprime 20 Ojo, que m?s de uno escribe use constant FOO => 4, BAR => 5; y no es lo mismo (y all? viene la metida de pata), pues lo ?ltimo es equivalente a que FOO = (4, BAR, 5) y, evidentemente BAR no est? definida. > dentro de varios sub llamo estas constantes y me lanza > el error: > > Bareword "CONSTANTE_X" not allowed while "strict subs" > in use at ..... Ese error ocurri? porque en alg?n lugar del programa escribiste CONSTANTE_X sin haberla definido como constante, sin ponerle un sigil por delante ($,@,%) o fuera de un par de comillas. Por lo tanto, no es una variable (no tiene sigil), no es un literal (no est? entre comillas) y Perl se ha dado cuenta que no es una funci?n (porque no hay ninguna funci?n llamada as?, doh!), y en virtud del use strict muestra ese error. > Busqu? el Google, y en varios ejemplos indicaban usar: > > no strict 'subs'; > > Para qu? usar strict si lo voy a estar "desactivando" > cuando vaya a un sub (en mi caso son varios > subprocesos) El asunto es que tu estabas buscando "como quitar el mensaje" y no "como corregir el error" :-) Para corregir el error tienes que hacer que no aparezca CONSTANTE_X "suelto" sino en el contexto adecuado. Si hubieras usado Perl en modo "liberal", no te habr?a salido el error pero quien sabe que otro problema estar?as viendo. Hay ciertas ocasiones en las cuales es _necesario_ tener un bareword, pero ?sta no es una de ellas. > Y de una con el mismo ride.. Pregunta: Cu?l es la > diferencia-ventaja m?s significativa en usar > conexiones "CACHED" con postgres..?? El tiempo que se consume en hacer una conexi?n a una base de datos puede ser considerable, en comparaci?n con lo que se tarda en ejecutar instrucciones; m?s a?n si la base de datos est? en una m?quina remota, o es hacia alg?n manejador de base de datos que es "lento" para establecer conexiones (como Oracle y MySQL). Al hacer connect_cached(), s?lo la primera vez se establece la conexi?n, y se mantiene abierta mientras dure el _programa_; ?sto se logra interceptando los disconnect() y haciendo que no cierren la conexi?n. Entonces, si tu programa va a estar mucho tiempo activo, es mejor usar el connect_cached(). Si tu programa s?lo se conecta al principio, est? trabajando mucho tiempo, y se desconecta antes de terminar, entonces es indiferente. Si el programa es multihilo, o reproduce procesos hijo id?nticos, vale la pena usar connect_cached en los _hijos_, asumiendo que el padre abri? una conexi?n antes de hacer fork(). -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From emhn at telcel.net.ve Sat Mar 5 15:27:01 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Sat Mar 5 15:28:06 2005 Subject: [caracas-pm] Perl y archivos PalmOS-Propuesta para nuestra =?ISO-8859-1?Q?pr=F3xima?= =?ISO-8859-1?Q?_reuni=F3n?= de perl Mongers In-Reply-To: <200503032049.j23KnkSD032421@rs25s12.datacenter.cha.cantv.net> References: <200503032049.j23KnkSD032421@rs25s12.datacenter.cha.cantv.net> Message-ID: <1110065221.17714.54.camel@localhost> On Thu, 2005-03-03 at 16:49 -0400, Andr?s Gazs? wrote: > Les escribo con la finalidad de proponer a t?tulo de nuestra venidera > reuni?n, el estudio de los m?dulos de Perl para manejo de archivos prc y prb > de PalmOS, adem?s de cualquier otro tema que relacione a Perl y PalmOS. Para la pr?xima reuni?n corresponde comenzar un ciclo de tutoriales para novatos. ?C?mo podemos organizarnos para hacer las dos cosas? Una idea es comenzar con el tutorial "para novatos" temprano y que sea m?s corto, para luego pasar a la discusi?n "para expertos". Otra idea es tener las dos reuniones simult?neamente, pero eso requiere dos locales (y ya ser?a un abuso :). -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From helder.marques at pranical.com Wed Mar 16 10:57:27 2005 From: helder.marques at pranical.com (Helder Marques) Date: Wed Mar 16 10:55:08 2005 Subject: [caracas-pm] =?iso-8859-1?q?reuni=F3n=3F?= Message-ID: <42388197.1040205@pranical.com> Hola lista. Por estos lados nos pregunt?bamos si habr? reuni?n este pr?ximo s?bado y en d?nde ser?. Saludos y gracias! -- Helder Marques Consultor J2EE / EAD&I Pranical Technologies www.pranical.com Ofc: +58.212.284.1725 +58.212.285.2159 *** USO DEL CORREO ELECTRONICO DE PRANICAL TECHNOLOGIES *** Esta nota puede contener informacion de interes solo para Pranical Technologies o sus negocios. Solo esta permitida su copia, distribucion o uso a personas autorizadas. Si recibio esta nota por error, por favor destruyala y notifique al remitente o a soporte@pranical.com. *** PRANICAL TECHNOLOGIES? INTERNET E-MAIL USE *** This message may contain information solely of the interest of Pranical Technologies or its businesses. Copying, distribution, disclosure or any use of the information contained in this transmission is permitted only to authorized parties. If you have received this e-mail by error, please destroy it and notify soporte@pranical.com or the sender by reply email. From emhn at telcel.net.ve Thu Mar 17 06:35:47 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Thu Mar 17 06:35:21 2005 Subject: [caracas-pm] =?ISO-8859-1?Q?reuni=F3n=3F?= In-Reply-To: <42388197.1040205@pranical.com> References: <42388197.1040205@pranical.com> Message-ID: <1111070147.3732.61.camel@localhost> On Wed, 2005-03-16 at 14:57 -0400, Helder Marques wrote: > Hola lista. > > Por estos lados nos pregunt?bamos si habr? reuni?n este pr?ximo s?bado y > en d?nde ser?. Si. En el ISEIT a las 9:00am. Daniel Rodr?guez presenta la primera parte del tutorial para novatos, porque Carlos Pineda arruga por compromisos acad?micos (tiene que dictar un curso, o al menos eso dice :-). Dependiendo del tiempo y los asistentes, hablar?amos de como manipular archivos de Palm usando Perl. -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From aarnal at me.gob.ve Fri Mar 18 02:50:14 2005 From: aarnal at me.gob.ve (Alexis Arnal) Date: Fri Mar 18 07:50:04 2005 Subject: [caracas-pm] Re: Uso de estructuras complejas de datos In-Reply-To: <1111141366.1698.11.camel@03omisis090> References: <1111141366.1698.11.camel@03omisis090> Message-ID: <1111143014.4394.5.camel@03omisis090> Saludos, estoy tratando de trabajar con estructuras complejas de datos tratando de hacer algo parecido a esto: #-------------------- $i=0, $j=0, $k=0; $ci_adm[$i]=13290489; $adm[$i]="Alexis Arnal"; $ci_doc[$j] =75315986; $doc[$j]="Juan Bimba"; $ci_obr[$k] =78965412; $obr[$k]="Pedro Perez"; %bar = {"Administrativo" => { $ci_adm[$i] => $jub_adm[$i] }, "Docente" => { $ci_doc[$j] => $jub_doc[$j]}, "Obrero" => { $ci_obr[$k] => $jub_obr[$k]} }; #---------------- Como ven %bar es un hash que contiene otro hash dentro y lo almacena como una referencia Luego quiero recuperarlos y en el libro que tengo aparece algo parecido a los suiguiente: #---------------- $foo_adm = $bar{"Administrativo"}{$ci_adm[$i]}; $foo_doc = $bar{"Docente"}{$ci_doc[$j]}; $foo_adm = $bar{"Obrero"}{$ci_obr[$k]}; #---------------- Cuando verifico en el depurador las variables $foo* aparecen undef Si me pueden guiar con esto se lo agradezco. Lastima que no voy a poder ir a la reuni?n ya que me voy de viaje, sin embargo estamos afinando unos tutoriales de Perl B?sico, DBI,CGI::Application y CGI::Session los cuales en lo que esten listos los publicamos para que nos den sus cr?ticas -- Ing.Alexis Arnal Linux user number 378161 Caracas-Venezuela From juanjose at lunarpages.com Fri Mar 18 08:34:05 2005 From: juanjose at lunarpages.com (Juan Jose Natera Abreu) Date: Fri Mar 18 08:34:15 2005 Subject: [caracas-pm] Re: Uso de estructuras complejas de datos In-Reply-To: <1111143014.4394.5.camel@03omisis090> References: <1111141366.1698.11.camel@03omisis090> <1111143014.4394.5.camel@03omisis090> Message-ID: <1111163645.28793.35.camel@juanjose.lunarpages.lan> Hola, > %bar = {"Administrativo" => { $ci_adm[$i] => $jub_adm[$i] }, > "Docente" => { $ci_doc[$j] => $jub_doc[$j]}, > "Obrero" => { $ci_obr[$k] => $jub_obr[$k]} > }; > #---------------- %bar es un hash, por que le asignas un hash anonimo? purdes hacer: %hash = ( ... ); o $harf_ref = { }; Pero no puedes mezclarlas. > Como ven %bar es un hash que contiene otro hash dentro y lo almacena > como una referencia > > Luego quiero recuperarlos y en el libro que tengo aparece algo parecido > a los suiguiente: > > #---------------- > $foo_adm = $bar{"Administrativo"}{$ci_adm[$i]}; > $foo_doc = $bar{"Docente"}{$ci_doc[$j]}; > $foo_adm = $bar{"Obrero"}{$ci_obr[$k]}; > #---------------- Prueba esto: %bar = ( "Administrativo" => { $ci_adm[$i] => $jub_adm[$i] }, "Docente" => { $ci_doc[$j] => $jub_doc[$j]}, "Obrero" => { $ci_obr[$k] => $jub_obr[$k]} ); # usa el operador de flecha para desreferenciar print $bar{'Administrativo'}->{13290489}; Saludos, -- Juan Jose Natera Abreu From aarnal at me.gob.ve Fri Mar 18 07:06:15 2005 From: aarnal at me.gob.ve (Alexis Arnal) Date: Fri Mar 18 12:05:56 2005 Subject: [caracas-pm] Re: Uso de estructuras complejas de datos In-Reply-To: <1111163645.28793.35.camel@juanjose.lunarpages.lan> References: <1111141366.1698.11.camel@03omisis090> <1111143014.4394.5.camel@03omisis090> <1111163645.28793.35.camel@juanjose.lunarpages.lan> Message-ID: <1111158375.1750.3.camel@03omisis090> Gracias por la ayuda, realiz? los cambios y en el depurador veo como se cargan los datos, pero sigo sin poder recuperarlos, prob? con la -> y no hace nada El vie, 18-03-2005 a las 08:34 -0800, Juan Jose Natera Abreu escribi?: > Hola, > > > > %bar = {"Administrativo" => { $ci_adm[$i] => $jub_adm[$i] }, > > "Docente" => { $ci_doc[$j] => $jub_doc[$j]}, > > "Obrero" => { $ci_obr[$k] => $jub_obr[$k]} > > }; > > #---------------- > > %bar es un hash, por que le asignas un hash anonimo? > > purdes hacer: > > %hash = ( > ... > ); > > o > > $harf_ref = { > > }; > > Pero no puedes mezclarlas. > > > Como ven %bar es un hash que contiene otro hash dentro y lo almacena > > como una referencia > > > > Luego quiero recuperarlos y en el libro que tengo aparece algo parecido > > a los suiguiente: > > > > #---------------- > > $foo_adm = $bar{"Administrativo"}{$ci_adm[$i]}; > > $foo_doc = $bar{"Docente"}{$ci_doc[$j]}; > > $foo_adm = $bar{"Obrero"}{$ci_obr[$k]}; > > #---------------- > > Prueba esto: > > %bar = ( > "Administrativo" => { $ci_adm[$i] => $jub_adm[$i] }, > "Docente" => { $ci_doc[$j] => $jub_doc[$j]}, > "Obrero" => { $ci_obr[$k] => $jub_obr[$k]} > ); > > # usa el operador de flecha para desreferenciar > > print $bar{'Administrativo'}->{13290489}; > > > Saludos, -- Linux user number 378161 Caracas-Venezuela From helder.marques at pranical.com Mon Mar 21 08:11:53 2005 From: helder.marques at pranical.com (Helder Marques) Date: Mon Mar 21 08:09:31 2005 Subject: [caracas-pm] Performance Message-ID: <423EF249.6070309@pranical.com> Hola lista. Antes que nada, gracias a Daniel por su tiempo dedicado al curso del s?bado. Pues como dicen que los nuevos no hacemos preguntas, pos aqu? voy. Me preocupa el tema del performance, m?s por posibles comentarios errados que por mi propia experiencia viendo aplicaciones como SQL Ledger o Metadot corriendo a una velocidad tan impresionante. La duda que tengo es la siguiente: realmente las aplicaciones Web basadas en Perl abren un "terminal" (por decirlo de alguna manera) por cada usuario conectado? si es as?, qu? pasa cuando tienes un site tipo FIFA en pleno torneo mundial de f?tbol???, que pasar?a con esas 2^1024 personas conectadas implicando 2^1024 terminales abiertos??? Saludos y gracias. -- Helder Marques Consultor J2EE / EAD&I Pranical Technologies www.pranical.com Ofc: +58.212.284.1725 +58.212.285.2159 *** USO DEL CORREO ELECTRONICO DE PRANICAL TECHNOLOGIES *** Esta nota puede contener informacion de interes solo para Pranical Technologies o sus negocios. Solo esta permitida su copia, distribucion o uso a personas autorizadas. Si recibio esta nota por error, por favor destruyala y notifique al remitente o a soporte@pranical.com. *** PRANICAL TECHNOLOGIES? INTERNET E-MAIL USE *** This message may contain information solely of the interest of Pranical Technologies or its businesses. Copying, distribution, disclosure or any use of the information contained in this transmission is permitted only to authorized parties. If you have received this e-mail by error, please destroy it and notify soporte@pranical.com or the sender by reply email. From lem at cantv.net Mon Mar 21 08:35:58 2005 From: lem at cantv.net (=?ISO-8859-1?Q?Luis_Mu=F1oz?=) Date: Mon Mar 21 08:36:02 2005 Subject: [caracas-pm] Performance In-Reply-To: <423EF249.6070309@pranical.com> References: <423EF249.6070309@pranical.com> Message-ID: On Mar 21, 2005, at 12:11 PM, Helder Marques wrote: > [...] realmente las aplicaciones Web basadas en Perl abren un > "terminal" (por decirlo de alguna manera) por cada usuario conectado? > [...] La respuesta es "depende". Usualmente, las aplicaciones abren n (con n == 1 para muchos casos) conexiones con la base de datos por cada "proceso servidor". Para sitios transaccionales, donde cada "click" es un comando o una acci?n sobre la base de datos, lo que ocurre es que un n?mero (potencialmente grande) de usuarios es atendido por un mismo proceso servidor. Saludos. -lem From manueltelleria at empleate.com Mon Mar 21 08:48:44 2005 From: manueltelleria at empleate.com (Manuel Telleria) Date: Mon Mar 21 08:54:53 2005 Subject: [caracas-pm] =?iso-8859-1?q?Reuni=F3n=2E?= Message-ID: <1111423724.29598.1.camel@cerebro.empleate.com> Disculpen mi ignorancia, pero la reuni?n es el s?bado 26 ? Gracias. From cpineda at grupodiga.com.ve Mon Mar 21 09:41:50 2005 From: cpineda at grupodiga.com.ve (cpineda@grupodiga.com.ve) Date: Mon Mar 21 09:38:41 2005 Subject: [caracas-pm] Reunión. Message-ID: hola Manuel La reunion fue el 19 de marzo saludos Carlos Pineda Escobar cjpineda@cantv.net cjpineda@gmail.com Azra3l "la iluminación solo se puede lograr con un apt-get" The following message was sent by Manuel Telleria on Mon, 21 Mar 2005 12:48:44 -0400. > Disculpen mi ignorancia, pero la reunión es el sábado 26 ? > > > Gracias. > > > _______________________________________________ > caracas-pm mailing list > caracas-pm@pm.org > http://mail.pm.org/mailman/listinfo/caracas-pm > . > From emhn at telcel.net.ve Fri Mar 25 17:34:14 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Fri Mar 25 17:34:50 2005 Subject: [caracas-pm] Re: [l-linux] Perl+Fork() y conexiones DBI In-Reply-To: <20050317185151.40007.qmail@web30708.mail.mud.yahoo.com> References: <20050317185151.40007.qmail@web30708.mail.mud.yahoo.com> Message-ID: <1111800855.16369.80.camel@localhost> On Thu, 2005-03-17 at 10:51 -0800, Daniel Cubero Salas wrote: > Como siempre, me pueden dar unos consejos: acerca de > conexiones a PostgreSQL (con DBI). > > Mi proceso perl saca datos de una tabla y de acuerdo a > ciertos criterios los agrupa y divide, crea sendo > procesos hijos para los "grupos" de datos y este hijo > va a guardar en otra tabla los resultados (m?s o menos > ser?n 8 procesos hijos que se crear?n). > > Los procesos hijos los creo con fork(). Si el proceso padre _s?lo_ hace fork() en virtud de la sem?ntica de procesos en Linux (o Unix), cada hijo es una copia _id?ntica_ del padre, por lo tanto "hereda" los handlers (conexiones, instrucciones preparadas, instrucciones ejecutadas no terminadas) que hubieras creado antes del fork(). Esos handlers _no_ se deben usar. Est?s en la obligaci?n de re-conectarte en el proceso hijo como si fuera la primera vez. El resto del programa procede igual, recordando que est?s en un proceso nuevo. Es conveniente que establezcas las conexiones utilizando la opci?n InactiveDestroy de DBI; depende de quien "muere" primero: si el padre lanza los hijos y muere, es el ?nico que debe usar InactiveDestroy => true; pero si el padre espera a que los hijos terminen entonces cada hijo debe hacer InactiveDestroy => true. Si el proceso padre hace fork() y exec(), los hijos no saben nada de conexiones y tienes que comenzar de nuevo. > He estado investigando acerca de esto; muchos > recomienda que cada child deber?a hacer la conexi?n a > la base y hacer los queries pero eso, en mi caso, no > es tan recomendable. Esa es la forma de hacerlo. ?Qu? hace que no sea recomendable en tu caso? -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From emhn at telcel.net.ve Fri Mar 25 19:56:39 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Fri Mar 25 19:55:59 2005 Subject: [caracas-pm] Performance In-Reply-To: <423EF249.6070309@pranical.com> References: <423EF249.6070309@pranical.com> Message-ID: <1111809399.16369.87.camel@localhost> On Mon, 2005-03-21 at 12:11 -0400, Helder Marques wrote: > Me preocupa el tema del performance, m?s por posibles comentarios > errados que por mi propia experiencia viendo aplicaciones como SQL > Ledger o Metadot corriendo a una velocidad tan impresionante. La duda > que tengo es la siguiente: realmente las aplicaciones Web basadas en > Perl abren un "terminal" (por decirlo de alguna manera) por cada usuario > conectado? Depende de varios factores: - Si la aplicaci?n est? programada como un mero CGI, se corre una instancia del programa por cada usuario que lo est? utilizando. Esto es lo "habitual" en programas muy simples. Si uno sabe que el programa va a ser utilizado de forma masiva, entonces escribe el programa para correr en mod_perl, de manera que aunque hay una instancia por usuario, en general tal instancia ya est? precompilada dentro de Apache, ahorrando el tiempo de iniciar Perl, analizar, compilar, ejecutar. - Si la apliaci?n hace conexiones a la base de datos como un mismo usuario siempre, al funcionar en CGI tienes tantas conexiones como usuarios est?n utilizando el programa. Si est?s en mod_perl y utilizas el m?dulo Apache::DBI, salvo condiciones extremadamente particulares, con _una_ sola conexi?n a la base de datos se pueden multiplexar las conexiones de todos los dem?s programas siempre que la conexi?n solicitada siempre sea a la misma base de datos con el mismo usuario y par?metros de conexi?n. - Si la aplicaci?n est? basada en templates (HTML::Template, Mason, Template-Toolkit), _un_ template "precompilado" dentro de mod_perl puede ser utilizado para satisfacer a todas las instancias concurrentes. > que pasar?a con esas 2^1024 personas conectadas implicando 2^1024 > terminales abiertos??? Seguramente, s?lo que distribuidos entre varios servidores, quiz?s multiplexando las conexiones a base de datos, con un sistema basado en templates, corriendo sobre mod_perl. -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From emhn at telcel.net.ve Sat Mar 26 07:46:47 2005 From: emhn at telcel.net.ve (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Sat Mar 26 07:46:00 2005 Subject: [caracas-pm] Ejercicio del mes Message-ID: <1111852007.16369.139.camel@localhost> El comando last permite ver el historial de conexiones de usuarios al sistema. En particular, si uno utiliza el pseudousuario 'reboot' puede saber las veces en que se reinici? el sistema. reboot system boot 2.6.11 Fri Mar 11 17:13 (14+18:29) reboot system boot 2.6.11 Thu Mar 3 11:11 (8+06:00) reboot system boot 2.6.11 Wed Mar 2 13:18 (9+03:53) La ?ltima columna representa el n?mero de d?as, horas y minutos que el sistema estuvo encendido hasta el siguiente reboot (y para el caso del m?s reciente, cu?nto tiempo tiene encendido). Escriban un programa que reciba como entrada el listado producido por el comando 'last reboot' y produzca un breve reporte (formato libre) que indique la cantidad de reinicios, m?ximo tiempo en servicio, m?nimo tiempo en servicio y tiempo promedio en servicio. -- Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From fobispo at nic.ve Sat Mar 26 09:14:30 2005 From: fobispo at nic.ve (Francisco J. Obispo S. (CNTI-REACCIUN)) Date: Sat Mar 26 09:19:12 2005 Subject: [caracas-pm] Ejercicio del mes In-Reply-To: <1111852007.16369.139.camel@localhost> References: <1111852007.16369.139.camel@localhost> Message-ID: <20050326171247.M80040@reacciun.ve> Hola * He estado un poco desconectado de ustedes, pero vamos a ver si puedo sacar un poco de tiempo para colaborar un poco :-) Por ahora, les mando una solucion. saludos On Sat, 26 Mar 2005 11:46:47 -0400, Ernesto Hern?ndez-Novich wrote > El comando last permite ver el historial de conexiones de usuarios al > sistema. En particular, si uno utiliza el pseudousuario 'reboot' > puede saber las veces en que se reinici? el sistema. > > reboot system boot 2.6.11 Fri Mar 11 17:13 (14+18:29) > reboot system boot 2.6.11 Thu Mar 3 11:11 (8+06:00) > reboot system boot 2.6.11 Wed Mar 2 13:18 (9+03:53) > > La ?ltima columna representa el n?mero de d?as, horas y minutos que > el sistema estuvo encendido hasta el siguiente reboot (y para el > caso del m?s reciente, cu?nto tiempo tiene encendido). > > Escriban un programa que reciba como entrada el listado producido > por el comando 'last reboot' y produzca un breve reporte (formato > libre) que indique la cantidad de reinicios, m?ximo tiempo en > servicio, m?nimo tiempo en servicio y tiempo promedio en servicio. > -- > Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or > die! Geek by nature, Linux by choice, Debian of course. If you can't > apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = > 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 > > _______________________________________________ > caracas-pm mailing list > caracas-pm@pm.org > http://mail.pm.org/mailman/listinfo/caracas-pm ccTLD ___ ___ ________ \ \ / / / ___ / \ \ / / / /__/ / \ \/ / / _____/ \ / / /____ [] \__/ \______/ ________________________ /__ http://www.nic.ve __/ Francisco J. Obispo Internet Services Administrator fobispo@nic.ve CNTI--REACCIUN Thought of the day: A writer is congenitally unable to tell the truth and that is why we call what he writes fiction. -- William Faulkner -------------- next part -------------- A non-text attachment was scrubbed... Name: ejercicio.pl Type: application/x-perl Size: 2016 bytes Desc: not available Url : http://mail.pm.org/pipermail/caracas-pm/attachments/20050326/84f7c72d/ejercicio.bin From fobispo at nic.ve Sat Mar 26 11:11:23 2005 From: fobispo at nic.ve (Francisco J. Obispo S. (CNTI-REACCIUN)) Date: Sat Mar 26 11:16:04 2005 Subject: [caracas-pm] Ejercicio del mes In-Reply-To: <20050326171247.M80040@reacciun.ve> References: <1111852007.16369.139.camel@localhost> <20050326171247.M80040@reacciun.ve> Message-ID: <20050326190925.M32262@reacciun.ve> Hola, Encontr? un peque?o error en la linea 51, donde originalmente habia escrito una funci?n gen?rica que devolviera segun el argumento, el valor requerido (promedio, mayor, menor), pero luego prefer? hacer un solo calculo para las 3 variables. les anexo el codigo definitivo... disculpenme esa.. saludos #!/usr/bin/perl # # Arreglo para guardar los registros procesados our @data; #Procesa el STDIN y lo ordena en un arreglo "@data" while(){ chomp(); next if m/^\s*$/; next unless m/reboot/; my @reg=split(/\s+/); my $uptime=pop(@reg); push @reg,s2h($uptime); push @data,\@reg; } my ($mayor,$menor,$promedio)=calcular(); printf("%-30s%s\n","#Reinicios del sistema",scalar(@data)); printf("%-30s%sh\n","M?ximo tiempo encendido",$mayor); printf("%-30s%sh\n","M?nimo tiempo encendido",$menor); printf("%-30s%sh\n","Tiempo promedio de servicio",$promedio); # Calcula mayor,menor y promedio del arreglo @data sub calcular{ my $mayor= my $menor=my $sum = $data[0]->[8]; for( my $i=1; $i[8] > $mayor ? $data[$i]->[8] : $mayor ; $menor = $data[$i]->[8] < $menor ? $data[$i]->[8] : $menor ; $sum+=$data[$i]->[8]; } return $mayor,$menor,sprintf("%.2f",$sum/scalar(@data)); } # Convierte el string del uptime en numero de horas sub s2h{ my ($time)=@_; $time=~ m/^\((\d+\+)*(\d+):(\d+)\)$/; return sprintf("%.2f",$1*24 + $2 + $3/60); } On Sat, 26 Mar 2005 13:14:30 -0400, Francisco J. Obispo S. (CNTI-REACCIUN) wrote > Hola * > > He estado un poco desconectado de ustedes, pero vamos a ver si puedo > sacar un poco de tiempo para colaborar un poco :-) > > Por ahora, les mando una solucion. > > saludos > > On Sat, 26 Mar 2005 11:46:47 -0400, Ernesto Hern?ndez-Novich wrote > > El comando last permite ver el historial de conexiones de usuarios al > > sistema. En particular, si uno utiliza el pseudousuario 'reboot' > > puede saber las veces en que se reinici? el sistema. > > > > reboot system boot 2.6.11 Fri Mar 11 17:13 (14+18:29) > > reboot system boot 2.6.11 Thu Mar 3 11:11 (8+06:00) > > reboot system boot 2.6.11 Wed Mar 2 13:18 (9+03:53) > > > > La ?ltima columna representa el n?mero de d?as, horas y minutos que > > el sistema estuvo encendido hasta el siguiente reboot (y para el > > caso del m?s reciente, cu?nto tiempo tiene encendido). > > > > Escriban un programa que reciba como entrada el listado producido > > por el comando 'last reboot' y produzca un breve reporte (formato > > libre) que indique la cantidad de reinicios, m?ximo tiempo en > > servicio, m?nimo tiempo en servicio y tiempo promedio en servicio. > > -- > > Ernesto Hern?ndez-Novich - On Linux 2.6.11 i686 - Unix: Live free or > > die! Geek by nature, Linux by choice, Debian of course. If you can't > > apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = > > 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 > > > > _______________________________________________ > > caracas-pm mailing list > > caracas-pm@pm.org > > http://mail.pm.org/mailman/listinfo/caracas-pm > > ccTLD > ___ ___ ________ > \ \ / / / ___ / > \ \ / / / /__/ / > \ \/ / / _____/ > \ / / /____ > [] \__/ \______/ > ________________________ > /__ http://www.nic.ve __/ > > Francisco J. Obispo > Internet Services Administrator > fobispo@nic.ve > CNTI--REACCIUN > > Thought of the day: > > A writer is congenitally unable to tell the truth and that is why we > call what he writes fiction. -- William Faulkner ccTLD ___ ___ ________ \ \ / / / ___ / \ \ / / / /__/ / \ \/ / / _____/ \ / / /____ [] \__/ \______/ ________________________ /__ http://www.nic.ve __/ Francisco J. Obispo Internet Services Administrator fobispo@nic.ve CNTI--REACCIUN Thought of the day: A writer is congenitally unable to tell the truth and that is why we call what he writes fiction. -- William Faulkner