From glasswalk3r em yahoo.com.br Sun Apr 1 05:05:25 2007 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Sun, 1 Apr 2007 05:05:25 -0700 (PDT) Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A__checagem_de_utiliza=E7=E3o_d?= =?iso-8859-1?q?e_interface_durante_a_fase_de_compila=E7=E3o?= Message-ID: <747360.27490.qm@web30807.mail.mud.yahoo.com> Vou dar uma olhada no Class::C3, apesar de minhas pesquisas não terem encontrado nada sobre isso no CPAN. Eu não sei qual a cisma com a linguagem Java... se você não gosta, não use. Eu pessoalmente prefiro Perl, mas seria muito interessante aplicar alguns dos recursos que não só a linguagem Java usa. O que é a palavra "interface" mais do que poder dizer de maneira resumida "todos os métodos dessa classe devem ser sobrescritos"? Pegar esse tipo de erro durante a compilação seria muito mais interessante do que durante a execução, apesar de testes unitários deverem cobrir esse tipo de coisa (isto é, quando eles são feitos). A grande desvantagem da implementação disso em Java, por exemplo, é que é um recurso "forçado": você o ama ou deixa a linguagem. Eu acredito que poder escolher entre habilitar isso ou não no seu código seria a mesma coisa que usar atributos tipados, que podem ou não ser interessantes dependendo do que você quer fazer. []'s Alceu ----- Mensagem original ---- De: Nilson Santos Figueiredo Junior Para: Cascavel Perl Mongers Enviadas: Sexta-feira, 30 de Março de 2007 23:55:51 Assunto: Re: [Cascavel-pm] checagem de utilização de interface durante a fase de compilação On 3/30/07, Alceu R. de Freitas Jr. wrote: > Existe alguma forma de checar se a utilização de um > pacote definido como interface (aonde os métodos devem > ser redefinidos na classe filha) durante a fase de > compilação? Sim, tem como isso ser feito. Não exatamente na fase de compilação, mas antes da fase de execução. Pense em blocos CHECK e percorrer as symbol tables recursivamente, seguindo a @ISA e checando por atributos que indiquem que uma classe (ou método) é virtual. Não sei se tem algum módulo pronto pra isso. Talvez o código do módulo Class::C3 te ajude na implementação disso, caso ainda não exista. Na prática, eu acho uma pura perda de tempo e me cheira a programador Java (só por ter citado a palavra "interface"). No entanto, deve ser bem legal implementar o módulo que faz isso, just for fun. ;-) -Nilson Santos F. Jr. _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ From acid06 em gmail.com Sun Apr 1 07:04:34 2007 From: acid06 em gmail.com (Nilson Santos Figueiredo Junior) Date: Sun, 1 Apr 2007 11:04:34 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A_checagem_de_utiliza=E7=E3o_de?= =?iso-8859-1?q?_interface_durante_a_fase_de_compila=E7=E3o?= In-Reply-To: <747360.27490.qm@web30807.mail.mud.yahoo.com> References: <747360.27490.qm@web30807.mail.mud.yahoo.com> Message-ID: <9a08c9b40704010704v4ce2a2fdta85b34fd833ce508@mail.gmail.com> On 4/1/07, Alceu R. de Freitas Jr. wrote: > Vou dar uma olhada no Class::C3, apesar de minhas pesquisas não terem encontrado nada sobre isso no CPAN. Note que o Class::C3 não faz nada do que você quer. Mas se você precisar de implementar, ele pode te ajudar pois ele faz coisas que mexem com o mesmo tipo de coisas que você possivelmente terá que alterar. > Eu não sei qual a cisma com a linguagem Java... se você não gosta, não use. Eu pessoalmente prefiro Perl, mas seria muito interessante aplicar alguns dos recursos que não só a linguagem Java usa. O que é a palavra "interface" mais do que poder dizer de maneira resumida "todos os métodos dessa classe devem ser sobrescritos"? Pegar esse tipo de erro durante a compilação seria muito mais interessante do que durante a execução, apesar de testes unitários deverem cobrir esse tipo de coisa (isto é, quando eles são feitos). Particularmente, eu acho que só não usar não é suficiente. Num bom dia, eu vou ter falado mal de Java pra 4 pessoas ou mais. Num dia médio, talvez eu consiga falar mal de Java para somente 2 ou 3 pessoas. Num dia ruim, eu terei falado mal de Java para apenas uma pessoa. Mas se eu conseguir manter minha meta de falar mal de Java ao menos uma vez por dia eu estou satisfeito. O problema de "interface" é que o conceito só existe basicamente pra contornar um gap de funcionalidade em Java: a falta de herança múltipla propriamente dita. A forma padrão de se fazer isso é através de herança múltipla. O possível problema de Perl é que só é possível pelas ferramentas atuais uma checagem em runtime. Mas isso é assim com qualquer linguagem moderna, na qual as classes podem ser auto-modificantes. Então enquanto você acha "interessante" eu acho limitador. Se você implementasse esse tipo de coisa, suas classes não seriam mais compatíveis com coisas como o Class::Accessor, por exemplo (bom, talvez, se você colocasse a chamada ao mk_accessors() dentro de um bloco BEGIN isso fosse resolvido, neste caso específico). Mas qualquer coisa que gere métodos em runtime deixaria de ser suportada. Neste ponto, mude de linguagem de uma vez, já que você vai ter perdido grandes recursos de Perl pra ter uma checagem superficial. Neste ponto, é melhor você ir programa em Java ou C++ mesmo, que vão ter checagens em tempo de compilação muito melhores - por definição. -Nilson Santos F. Jr. From glasswalk3r em yahoo.com.br Mon Apr 2 08:52:15 2007 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Mon, 2 Apr 2007 08:52:15 -0700 (PDT) Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A__Res=3A_checagem_de_utiliza?= =?iso-8859-1?q?=E7=E3o_de_interface_durante_a_fase_de_compila=E7=E3o?= Message-ID: <515438.50318.qm@web30801.mail.mud.yahoo.com> Olá Wilson, Não, eu não quero transformar Perl eu Java: eu quero checar se métodos que deveriam ser sobreescritos por subclasses o foram antes de executar o programa e descobrir que o método não foi implementado corretamente. Eu posso tentar ser disciplinado o suficiente para evitar esse tipo de erro mas isso não quer dizer que qualquer outro programador que tente definir a mesma interface para uma classe específica via herança vá fazer o mesmo. Eu não sei se é possível evitar problemas com métodos gerados dinamicamente, mas a idéia é marcar os métodos que devem ser sobreescritos e gerar erros durante a compilação. Isso evitaria erros com Class::Accessor, por exemplo. []'s Alceu ----- Mensagem original ---- De: Nilson Santos Figueiredo Junior Para: Cascavel Perl Mongers Enviadas: Domingo, 1 de Abril de 2007 11:04:34 Assunto: Re: [Cascavel-pm] Res: checagem de utilização de interface durante a fase de compilação O problema de "interface" é que o conceito só existe basicamente pra contornar um gap de funcionalidade em Java: a falta de herança múltipla propriamente dita. A forma padrão de se fazer isso é através de herança múltipla. O possível problema de Perl é que só é possível pelas ferramentas atuais uma checagem em runtime. Mas isso é assim com qualquer linguagem moderna, na qual as classes podem ser auto-modificantes. Então enquanto você acha "interessante" eu acho limitador. Se você implementasse esse tipo de coisa, suas classes não seriam mais compatíveis com coisas como o Class::Accessor, por exemplo (bom, talvez, se você colocasse a chamada ao mk_accessors() dentro de um bloco BEGIN isso fosse resolvido, neste caso específico). Mas qualquer coisa que gere métodos em runtime deixaria de ser suportada. Neste ponto, mude de linguagem de uma vez, já que você vai ter perdido grandes recursos de Perl pra ter uma checagem superficial. Neste ponto, é melhor você ir programa em Java ou C++ mesmo, que vão ter checagens em tempo de compilação muito melhores - por definição. __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ From glasswalk3r em yahoo.com.br Mon Apr 2 08:56:15 2007 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Mon, 2 Apr 2007 08:56:15 -0700 (PDT) Subject: [Cascavel-pm] Res: Perl e ferramentas tipo Delphi Message-ID: <481436.81780.qm@web30813.mail.mud.yahoo.com> Oi Daniel, Tem uma versão do Glade para o toolkit WxPerl chamado WxGlade. Eu tenho experimentado ele e realmente ele ajuda bastante para gerar a interface gráfica. O problema é que, uma vez que você tenha gerado o código em Perl, você volta a estaca zero. Mas ainda assim é melhor do que "desenhar" a tela no braço. []'s Alceu ----- Mensagem original ---- De: Daniel Ruoso Para: Cascavel Perl Mongers Enviadas: Sexta-feira, 30 de Março de 2007 22:35:12 Assunto: Re: [Cascavel-pm] Perl e ferramentas tipo Delphi Se você está no mundo linux, recomendo usar o Glade com GladeXML. É realmente interessante, de outra forma, talvez usar o glade com gladexml não seja uma idéia tão ruim, é só uma questão de ter o gtk portado para ruwindows... daniel __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ From edencardim em gmail.com Mon Apr 2 09:10:54 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 2 Apr 2007 13:10:54 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A_Res=3A_checagem_de_utiliza=E7?= =?iso-8859-1?q?=E3o_de_interface_durante_a_fase_de_compila=E7=E3o?= In-Reply-To: <515438.50318.qm@web30801.mail.mud.yahoo.com> References: <515438.50318.qm@web30801.mail.mud.yahoo.com> Message-ID: <3de55ead0704020910k31ddc2dje65f115a869191c3@mail.gmail.com> On 4/2/07, Alceu R. de Freitas Jr. wrote: > Eu não sei se é possível evitar problemas com métodos gerados dinamicamente, mas a idéia é marcar os métodos que devem ser sobreescritos e gerar erros durante a compilação. Isso evitaria erros com Class::Accessor, por exemplo. Acho que não, por dois motivos: 1 - Não tem como saber, sem executar o código, quais métodos o cliente vai pedir pro Class::Accessor criar, então não vai dar pra marcar. 2 - Os métodos gerados pelo Class::Accessor os geram na fase de execução, logo, não dá pra marcá-los antes do compilador fazer a verificação das marcas e gerar erros na compilação (claro que você pode mandar fabricar os métodos dentro de um bloco BEGIN, mas acho que essa opção traria alguns efeitos colaterais). Mesmo com verificação, alguém pode modificar a tabela de símbolos para evitar que as verificações sejam feitas. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From edencardim em gmail.com Mon Apr 2 09:19:58 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 2 Apr 2007 13:19:58 -0300 Subject: [Cascavel-pm] Com que Class::* eu vou In-Reply-To: <1F5A347E-A980-4613-BC7B-351983DD1693@gmail.com> References: <12d1f4ee0703291455h2bc6e979ne225b0839a3bf366@mail.gmail.com> <2E55F018-941E-4CEB-BCB1-4DE7584EC546@gmail.com> <3de55ead0703301115g729ba52asdffdfb08748ba0e4@mail.gmail.com> <1F5A347E-A980-4613-BC7B-351983DD1693@gmail.com> Message-ID: <3de55ead0704020919s3e714d77n12d9da13b87a8d7@mail.gmail.com> On 3/31/07, Igor Sutton Lopes wrote: > [ implementação de Strategy aqui ] > Deixei escapar alguma coisa? :-) Eu agregaria o objeto que implementa a estratégia ao objeto cliente, passando-o como parâmetro apenas ao construtor (talvez fornecendo um default razoável) e dando a possibilidade de mudar a estratégia através de algum método ( algo como $obj->set_strategy(Strategy->new(etc...)) ). Mas é claro que isso são só detalhes de implementação, assim, acho que não posso dizer que faltou nada. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From glasswalk3r em yahoo.com.br Mon Apr 2 09:59:12 2007 From: glasswalk3r em yahoo.com.br (Alceu R. de Freitas Jr.) Date: Mon, 2 Apr 2007 13:59:12 -0300 (ART) Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A_Res=3A_checagem_de_utiliza=E7?= =?iso-8859-1?q?=E3o_de_interface_durante_a_fase_de_compila=E7=E3o?= In-Reply-To: <3de55ead0704020910k31ddc2dje65f115a869191c3@mail.gmail.com> Message-ID: <240572.73793.qm@web30801.mail.mud.yahoo.com> --- Eden Cardim escreveu: > Acho que não, por dois motivos: > 1 - Não tem como saber, sem executar o código, quais > métodos o cliente > vai pedir pro Class::Accessor criar, então não vai > dar pra marcar. Mas Eden, eu não vou marcar os métodos da subclasse, que talvez use o Class::Accessor para gerar esses métodos, mas sim na superclasse. Pelo menos foi nisso que pensei, se é aplicável ou não eu ainda tenho que testar. A idéia seria fazer assim na superclasse: sub change_me { die "One must override this method"; } E alterar para algo assim: sub change_me :override { die "One must override this method"; } O atributo override permitiria verificar se o método chamado foi definido na subclasse ou na superclasse, e no segundo caso gerar uma exceção. Eu mesmo nunca tentei manipular a tabela de símbolos ou o @ISA, então não se é possível fazer isso na fase de compilação. > Mesmo com verificação, alguém pode modificar a > tabela de símbolos para > evitar que as verificações sejam feitas. A idéia nem é essa: se o programador quiser atirar no pé dele, o Perl vai deixar. []'s Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r em yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- A well-used door needs no oil on its hinges. A swift-flowing stream does not grow stagnant. Neither sound nor thoughts can travel through a vacuum. Software rots if not used. These are great mysteries -- The Tao Of Programming, 5.1 __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ From nilson em dcc.ufmg.br Mon Apr 2 13:05:19 2007 From: nilson em dcc.ufmg.br (Nilson Santos Figueiredo Junior) Date: Mon, 2 Apr 2007 17:05:19 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A_Res=3A_checagem_de_utiliza=E7?= =?iso-8859-1?q?=E3o_de_interface_durante_a_fase_de_compila=E7=E3o?= In-Reply-To: <240572.73793.qm@web30801.mail.mud.yahoo.com> References: <3de55ead0704020910k31ddc2dje65f115a869191c3@mail.gmail.com> <240572.73793.qm@web30801.mail.mud.yahoo.com> Message-ID: <9a08c9b40704021305l47c48007h6cd413642974c884@mail.gmail.com> On 4/2/07, Alceu R. de Freitas Jr. wrote: > Mas Eden, eu não vou marcar os métodos da subclasse, > que talvez use o Class::Accessor para gerar esses > métodos, mas sim na superclasse. Pelo menos foi nisso > que pensei, se é aplicável ou não eu ainda tenho que > testar. O problema é que se um método fosser ser sobrescrito somente em tempo de execução, isso geraria um erro mesmo assim. Exemplo: package Base; sub change_me : override { die "change_me must be overriden"; } 1; package SubClass; use base qw[Base Class::Accessor]; __PACKAGE__->mk_accessors(qw[change_me]); 1; E mesmo assim você teria um erro, caso fosse feita uma checagem em tempo de compilação. -Nilson Santos F. Jr. From acid06 em gmail.com Mon Apr 2 13:05:56 2007 From: acid06 em gmail.com (Nilson Santos Figueiredo Junior) Date: Mon, 2 Apr 2007 17:05:56 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Res=3A_Res=3A_checagem_de_utiliza=E7?= =?iso-8859-1?q?=E3o_de_interface_durante_a_fase_de_compila=E7=E3o?= In-Reply-To: <240572.73793.qm@web30801.mail.mud.yahoo.com> References: <3de55ead0704020910k31ddc2dje65f115a869191c3@mail.gmail.com> <240572.73793.qm@web30801.mail.mud.yahoo.com> Message-ID: <9a08c9b40704021305j7c01ce0cud9f02e16ddba4a84@mail.gmail.com> On 4/2/07, Alceu R. de Freitas Jr. wrote: > Mas Eden, eu não vou marcar os métodos da subclasse, > que talvez use o Class::Accessor para gerar esses > métodos, mas sim na superclasse. Pelo menos foi nisso > que pensei, se é aplicável ou não eu ainda tenho que > testar. O problema é que se um método fosser ser sobrescrito somente em tempo de execução, isso geraria um erro mesmo assim. Exemplo: package Base; sub change_me : override { die "change_me must be overriden"; } 1; package SubClass; use base qw[Base Class::Accessor]; __PACKAGE__->mk_accessors(qw[change_me]); 1; E mesmo assim você teria um erro, caso fosse feita uma checagem em tempo de compilação. -Nilson Santos F. Jr. From fglock em gmail.com Tue Apr 3 07:48:39 2007 From: fglock em gmail.com (Flavio S. Glock) Date: Tue, 3 Apr 2007 11:48:39 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?=5BOT=5D_Arena_de_Programa=E7=E3o_-_?= =?iso-8859-1?q?Concurso_de_programa=E7=E3o_no_FISL?= Message-ID: http://fisl.softwarelivre.org/8.0/www/?q=pt-BR/arena Arena de Programação Você deve se perguntar que tipo de pessoa você é. Você é do tipo que vê sinais, vê milagres? Ou você acredita que as pessoas dão sorte? Olhe para a questão desta forma: É possível que não existam coincidências? Mel Gibson interpretando Rev. Graham Hess no filme "Sinais" de M. Night Shyamalan Desde a edição passada do Fórum, homenageamos alguns dos pais da Ciência da Computação colocando seus nomes como nome de cada sala de palestra. Para contemplar as sugestões dos participantes, para esse ano, também colocamos números nas salas. :-) Cada um dos homenageados tem sua importância em diversas áreas, desde a implementação de algoritmos, passando pela construção de novos hardwares até o desenvolvimento de linguagens de programação. Suas obras sempre serão lembradas, citadas, usadas e reinventadas. Além das homenagens, decidimos criar a Arena de Programação, um evento sócio-cultural-recreativo para hackers realizado em três fases: inscrição, qualifying e insanifying. O Qualifying é uma etapa individual que pretende simular uma maratona ACM. Aqui, os indivíduos devem resolver o máximo de problemas durante as 5 horas de sua duração. A etapa acontece paralelamente às palestras do fisl8.0 em uma área de entrada restrita, porém aberta à visão do público. Os 12 primeiros colocados passam para o Insanifying. Em grupos, formados aleatoriamente, intenta-se que cada grupo implemente uma solução para o problema apresentado. Os grupos terão 24 horas a partir da liberação do problema para desenvolver e entregar suas soluções. Computadores especialmente preparados, com compiladores, interpretadores e bibliotecas de linguagens de programação livres, estarão à disposição dos participantes. Somente durante o Qualifying, será proibido o uso de Internet. As inscrições estão abertas. Existem apenas 40 vagas. Happy hacking! - Organização do FISL From fglock em gmail.com Tue Apr 3 11:24:01 2007 From: fglock em gmail.com (Flavio S. Glock) Date: Tue, 3 Apr 2007 15:24:01 -0300 Subject: [Cascavel-pm] YAPC::SA Hackathon Message-ID: YAPC::SA Hackathon Durante o FISL/YAPC::SA (12 a 14 de abril em Porto Alegre) acontecerá um "Hackathon", que será um encontro destinado a programação para o desenvolvimento do Perl 6. Cada participante deverá trazer seu computador (de preferência com wireless), com recomendação de 512MB ram ou mais. O software recomendado é o seguinte: - svk ou svn - versão de desenvolvimento do Parrot, instalado pelo svn/svk - http://svn.perl.org/parrot/ - versão de desenvolvimento do Pugs, instalado pelo svn/svk - http://svn.pugscode.org/pugs/ - módulo v6.pm, instalado pelo CPAN - editor configurado para utf8 - outras dependências para compilar o software acima: gcc, ghc, etc. O tema final a ser desenvolvido durante o hackathon dependerá da qualificação e interesse dos desenvolvedores que comparecerem. Por enquanto, temos a confirmação do Lorn, Eden, Caio Marcelo e eu. Até lá! - Flavio S. Glock From cmarcelo em gmail.com Tue Apr 3 15:27:23 2007 From: cmarcelo em gmail.com (Caio Marcelo) Date: Tue, 3 Apr 2007 19:27:23 -0300 Subject: [Cascavel-pm] YAPC::SA Hackathon In-Reply-To: References: Message-ID: On 4/3/07, Flavio S. Glock wrote: > YAPC::SA Hackathon yay! :-) > Cada participante deverá trazer seu computador (de preferência com > wireless), com recomendação de 512MB ram ou mais. É bem provável que eu esteja sem notebook durante o evento (aquele que eu levei para o Hackaton em Sampa era emprestado), mas ainda vou ver se consigo 'dar algum migué'. De qualquer forma estarei no Hackaton para 'dar piteco' e ajudar no que eu puder ;-) Cheers, Caio Marcelo From daniel_5h4d0w em hotmail.com Tue Apr 3 15:34:50 2007 From: daniel_5h4d0w em hotmail.com (Daniel Vinciguerra) Date: Tue, 03 Apr 2007 19:34:50 -0300 Subject: [Cascavel-pm] Res: Perl e ferramentas tipo Delphi In-Reply-To: <481436.81780.qm@web30813.mail.mud.yahoo.com> Message-ID: Existe tambem um software chamado Visual Perl Tk Widget version ou sómente vptk_w.pl Este programa foi todo escrito em Perl Tk e gera GUIs em Perl Tk... ^^ O software ainda está um pouco dificil de ser manuseado mais com um pouco de pratica belos GUIs poderam ser criados facilmente apenas inserindo widgets e as configurando... Obs: Eu o uso quando tenho algum trabalho para fazer em um prazo apertado e é muito bom... Se quizer dar uma olhada dos GUIs em Tk meu multiply tem alguns dele... =) http://danielvinciguerra.multiply.com/photos/album/7 Obs: Esta inferface é uma adaptação visual em um fluxbox(gerenciador de janelas linux) de um projeto que estou desenvolvendo... http://danielvinciguerra.multiply.com/photos/album/3 Link para o Vptk_w http://search.cpan.org/~felixl/vptk_w_2_38b/vptk_presentation.pod Daniel Vinciguerra - Daniel Shadow -------------------------------------------------------------- - Perl, C/C++, Oracle, MySQL and SQLite Developer. - Projeto Damn Small Linux Brasil. - danielvinciguerra.multiply.com -------------------------------------------------------------- >From: "Alceu R. de Freitas Jr." >Reply-To: Cascavel Perl Mongers >To: Cascavel Perl Mongers >Subject: [Cascavel-pm] Res: Perl e ferramentas tipo Delphi >Date: Mon, 2 Apr 2007 08:56:15 -0700 (PDT) > >Oi Daniel, > >Tem uma versão do Glade para o toolkit WxPerl chamado WxGlade. Eu tenho >experimentado ele e realmente ele ajuda bastante para gerar a interface >gráfica. O problema é que, uma vez que você tenha gerado o código em Perl, >você volta a estaca zero. Mas ainda assim é melhor do que "desenhar" a tela >no braço. > >[]'s >Alceu > >----- Mensagem original ---- >De: Daniel Ruoso >Para: Cascavel Perl Mongers >Enviadas: Sexta-feira, 30 de Março de 2007 22:35:12 >Assunto: Re: [Cascavel-pm] Perl e ferramentas tipo Delphi > > >Se você está no mundo linux, recomendo usar o Glade com GladeXML. É >realmente interessante, de outra forma, talvez usar o glade com gladexml >não seja uma idéia tão ruim, é só uma questão de ter o gtk portado para >ruwindows... > >daniel > >__________________________________________________ >Fale com seus amigos de graça com o novo Yahoo! Messenger >http://br.messenger.yahoo.com/ >_______________________________________________ >Cascavel-pm mailing list >Cascavel-pm em pm.org >http://mail.pm.org/mailman/listinfo/cascavel-pm _________________________________________________________________ Verifique já a segurança do seu PC com o Verificador de Segurança do Windows Live OneCare! http://onecare.live.com/site/pt-br/default.htm From alexseki em gmail.com Tue Apr 3 17:00:09 2007 From: alexseki em gmail.com (Alexandre Seki) Date: Tue, 3 Apr 2007 21:00:09 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?=5BOT=5D_Arena_de_Programa=E7=E3o_-_?= =?iso-8859-1?q?Concurso_de_programa=E7=E3o_no_FISL?= In-Reply-To: References: Message-ID: <32edeebf0704031700k61f4a464y3bc83553d60474c0@mail.gmail.com> Alguém vai participa??? From kuntzzz em gmail.com Wed Apr 4 18:46:24 2007 From: kuntzzz em gmail.com (=?ISO-8859-1?Q?=22Iber=EA_O=2E_Kuntz_de_Souza=22?=) Date: Wed, 04 Apr 2007 22:46:24 -0300 Subject: [Cascavel-pm] Problemas ao interceptar sinais Message-ID: <461454F0.9080501@gmail.com> Fala monges.. To com um problema aqui, pois não consigo ver minhas variaveis declaradas anteriormente dentro de um manipulador de sinal. Ex: -------------------------------------------------------------- $SIG{INT} = \&teste; sleep(99999999); my $var = 1; sub teste { print "$var\n"; exit; } --------------------------------------------------------------- com o warnings ativado eu recebo: "Use of uninitialized value in concatenation (.) or string at * line *." Tentei usar o sigtrap para morrer normalmente e assim chamando END{}, mas dentro do END{} tb não consigo ver minhas vars. Declarando um manipulador para o sigtrap tb tive o mesmo problema. Algm sabe alguma solução? Obrigado desde já. Iberê, From luismottacampos em yahoo.co.uk Thu Apr 5 00:28:46 2007 From: luismottacampos em yahoo.co.uk (Luis Motta Campos) Date: Thu, 5 Apr 2007 09:28:46 +0200 Subject: [Cascavel-pm] Problemas ao interceptar sinais In-Reply-To: <461454F0.9080501@gmail.com> References: <461454F0.9080501@gmail.com> Message-ID: <9295FD88-345F-417A-A188-B221B579BE52@yahoo.co.uk> On Apr 5, 2007, at 3:46 AM, Iberê O. Kuntz de Souza wrote: > Fala monges.. > > To com um problema aqui, pois não consigo ver minhas variaveis > declaradas anteriormente dentro de um manipulador de sinal. Ex: > -------------------------------------------------------------- > $SIG{INT} = \&teste; > sleep(99999999); > my $var = 1; > sub teste { > print "$var\n"; > exit; > } > --------------------------------------------------------------- > > com o warnings ativado eu recebo: "Use of uninitialized value in > concatenation (.) or string at * line *." > Tentei usar o sigtrap para morrer normalmente e assim chamando END{}, > mas dentro do END{} tb não consigo ver minhas vars. Declarando um > manipulador para o sigtrap tb tive o mesmo problema. > > Algm sabe alguma solução? Para aprender a usar sinais: RTFM, e comece pelo "Modern Operating Systems" do A. Tanembaum, que vai te ajudar a entender sinais. Sobre brincar com o hash %SIG: leia sem pressa a secção "Signals" do perlipc, que vai te ajudar bastante também. Agora, se você tem um problema e precisa resolver, que tal expressá-lo de uma maneira genérica, para que a lista possa dar sugestões de como resolvê-lo de uma forma inteligente? Se seu problema é terminar imediatamente a execução de alguma coisa, usando um signal handler para isso, e rodando o código de clean-up de um bloco END, eu posso dizer que existem formas melhores e mais confiáveis de se fazer isso. Putamplexos! -- Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer, Perl fanatic evangelist, and amateur {cook, photographer} From daniel em ruoso.com Thu Apr 5 03:09:37 2007 From: daniel em ruoso.com (Daniel Ruoso) Date: Thu, 05 Apr 2007 11:09:37 +0100 Subject: [Cascavel-pm] Problemas ao interceptar sinais In-Reply-To: <461454F0.9080501@gmail.com> References: <461454F0.9080501@gmail.com> Message-ID: <1175767777.3689.2.camel@localhost> Qua, 2007-04-04 às 22:46 -0300, "Iberê O. Kuntz de Souza" escreveu: > To com um problema aqui, pois não consigo ver minhas variaveis > declaradas anteriormente dentro de um manipulador de sinal. Ex: anteriormente??? > -------------------------------------------------------------- > $SIG{INT} = \&teste; > sleep(99999999); > my $var = 1; > sub teste { > print "$var\n"; > exit; > } > --------------------------------------------------------------- posso estar vesgo, mas o "my $var = 1" me parece estar depois do sleep. E, pelo que entendo você está fazendo control-c durante o sleep... então... mas isso provavelmente é um problema X, Y, Z... então... o que é X? daniel From payback em oi.com.br Thu Apr 5 10:11:15 2007 From: payback em oi.com.br (KLEBER) Date: Thu, 5 Apr 2007 14:11:15 -0300 Subject: [Cascavel-pm] Controle de processo em perl Message-ID: <000b01c777a5$6b7075f0$04010a0a@intranet.local> Tomo a liberdade de enviar-lhe(s) este email cujo o assunto é PERL pois talvez você ou alguém que conheça possa me ajudar. Estou escrevendo uma aplicação em perl e preciso garantir que um determinado processo seja executado de forma única ( sem concorrência ). Pôr exemplo , uma função que atualiza uma tabela de agencia , ao ser executada , todas as outras funções que acessam esta tabela deve esperar sua conclussão ( portanto deve-se formar uma fila de pedidos para atendimento ). Atualmente estou fazendo isto da seguinte maneira : # # Permite executar um script por vez # denovo: if ( -e "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ) { goto denovo; } sysopen( TASK15, "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul", O_WRONLY|O_EXCL|O_CREAT ) or warn ( goto denovo ); flock( TASK15, LOCK_EX ) or warn ( goto denovo ); --------------------------------- Instruções diversas em perl 5.8 -------------------------------- flock( TASK15, LOCK_UN ); close( TASK15 ); unlink( "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ); exit; Acredito que deve existir uma maneira mais elegante de implementar esta minha necessidade e estava imaginando o método de controle de processo PID ( waitpid ). Caso possua alguma informação a este respeito , agradeceria sua colaboração Atenciosamente , kleber From kuntzzz em gmail.com Thu Apr 5 09:13:29 2007 From: kuntzzz em gmail.com (=?ISO-8859-1?Q?=22Iber=EA_O=2E_Kuntz_de_Souza=22?=) Date: Thu, 05 Apr 2007 13:13:29 -0300 Subject: [Cascavel-pm] Problemas ao interceptar sinais Message-ID: <46152029.5040806@gmail.com> Ja concertei meu erro.. vlw ae. Foi desatenção minha, mas o problema ja ta resolvido. Obrigado pela atenção. From igor.sutton em gmail.com Thu Apr 5 12:27:39 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Thu, 5 Apr 2007 20:27:39 +0100 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <000b01c777a5$6b7075f0$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> Message-ID: <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> Olá Kleber, On 2007/04/05, at 18:11, KLEBER wrote: > Tomo a liberdade de enviar-lhe(s) este email cujo o assunto é PERL > pois > talvez você ou alguém que conheça possa me ajudar. > Estou escrevendo uma aplicação em perl e preciso garantir que um > determinado processo seja executado de forma única ( sem > concorrência ). > > Pôr exemplo , uma função que atualiza uma tabela de agencia , ao ser > executada , todas as outras funções que acessam esta tabela deve > esperar > sua conclussão ( portanto deve-se formar uma fila de pedidos para > atendimento ). > > Atualmente estou fazendo isto da seguinte maneira : > # > # Permite executar um script por vez > # > denovo: > if ( -e "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ) > { goto > denovo; } > sysopen( TASK15, > "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul", > O_WRONLY|O_EXCL|O_CREAT ) or warn ( goto denovo ); > flock( TASK15, LOCK_EX ) or warn ( goto denovo ); > --------------------------------- > Instruções diversas em perl 5.8 > -------------------------------- > flock( TASK15, LOCK_UN ); > close( TASK15 ); > unlink( "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ); > exit; > Uma maneira primitiva de fazer a mesma coisa, utilizando arquivos como lock. use File::Slurp; PROCESS: { if ( -e $LOCK_FILE ) { sleep 1; redo PROCESS; } write_file($LOCK_FILE, $$); do_whatever_you_want(); unlink $LOCK_FILE; } Agora com flock: # importa constantes para flock e seek use Fcntl qw(:flock :seek); # abre arquivo. open my $fh, "<", $filename or die $!; # aciona lock no filehandle. vai esperar aqui até outra instância do programa liberar o arquivo. flock($fh, LOCK_EX); # move cursor para o final do arquivo seek($fh, 0, SEEK_END); # imprime algo print $fh "Some text!\n"; # desbloqueia o filehandle flock($fh, LOCK_UN); # fecha o arquivo close $fh or warn $!; Lembre-se que flock() atua em filehandles. Lembre-se também que flock () funciona apenas com outros programas que utilizam flock(), isto é, se um outro programa for interagir com este arquivo e não utilizar flock(), provavelmente irá ocasionar problemas. Alguns outros pontos a considerar: - Labels são, no senso comum, nomeados com letras MAIUSCULAS pois ajudam a distinguir de funções; - Utilize File::Spec para tratar com caminhos de arquivos; - Apesar de utilizarmos labels, 'goto's são feios :-P Utilize escopos para isso, como no exemplo que transcrevi; - Não é necessário utilizar as rotinas sys* a menos que você saiba o que está fazendo :-); - Utilize scalars para armazenar a referência de arquivos abertos com open, ao invés de barewords. Acho que é só, e espero que ajude. -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070405/025b3d68/attachment.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070405/025b3d68/attachment.bin From shonorio em gmail.com Thu Apr 5 13:11:31 2007 From: shonorio em gmail.com (Solli Honorio) Date: Thu, 5 Apr 2007 17:11:31 -0300 Subject: [Cascavel-pm] Problemas ao interceptar sinais In-Reply-To: <46152029.5040806@gmail.com> References: <46152029.5040806@gmail.com> Message-ID: <12d1f4ee0704051311u15db1406mebefb79ba38ec776@mail.gmail.com> hummm e qual era o erro ? assim todos apreende também, não só tú :) ! On 4/5/07, "Iberê O. Kuntz de Souza" wrote: > > Ja concertei meu erro.. vlw ae. > Foi desatenção minha, mas o problema ja ta resolvido. Obrigado pela > atenção. > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070405/5579d1bf/attachment.html From joenio em gmail.com Thu Apr 5 14:28:29 2007 From: joenio em gmail.com (Joenio Costa) Date: Thu, 5 Apr 2007 18:28:29 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Compartilhar_conex=E3o_DBD=3A=3AOrac?= =?iso-8859-1?q?le_entre_processos_=28usando_XML=3A=3ATwig=29?= Message-ID: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> Olá Pessoal, Preciso analisar um XML e gravar os seus dados num banco Oracle, estou utilizando XML::Twig com parametro twig_handlers para fazer o parser do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita memória caso eu não utilize o parametro twig_handlers. Não encontrei na documentação do XML::Twig mas notei que ao utilizar esse parametro é criado um processo filho, e é isto que esta causando problemas com minha conexão com o Oracle. Eu obtenho o seguinte erro ao executar algo parecido com o exemplo abaixo: DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on communication channel (DBD ERROR: OCISessionEnd) -------- use DBI; use XML::Twig; my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass'); my $sth = $dbh->prepare(" INSERT INTO table (col1, col2, col3) VALUES (123, ?, ?) "); my $twig = XML::Twig->new( twig_handlers => { PIT => sub { my ($t, $product) = @_; my $descricao = $product->first_child('pitName')->att('name'); my $preco = $product->first_child('pitPrice')->att('price'); $sth->bind_param(1, $descricao); $sth->bind_param(2, $preco); $sth->execute(); $sth->finish(); $t->purge; }} ); $twig->parseurl('file:///home/joenio/data/produtos.xml'); $twig->purge; $dbh->disconnect(); ----- Alguem já enfrentou situação parecida? Obrigado, -- Joenio Costa - Salvador Perl Mongers - Grupo de Usuário Perl de Salvador - Colibre - Cooperativa de Tecnologias Livres - PSL-BA - Projeto Software Livre Bahia From wendelscardua em gmail.com Thu Apr 5 14:51:40 2007 From: wendelscardua em gmail.com (Wendel Scardua) Date: Thu, 5 Apr 2007 18:51:40 -0300 Subject: [Cascavel-pm] Problemas ao interceptar sinais In-Reply-To: <12d1f4ee0704051311u15db1406mebefb79ba38ec776@mail.gmail.com> References: <46152029.5040806@gmail.com> <12d1f4ee0704051311u15db1406mebefb79ba38ec776@mail.gmail.com> Message-ID: <726229b50704051451l14703292h1f79247979676dcb@mail.gmail.com> Pelo que ele deu a entender, foi justamente o que o Daniel falou, ou seja, a declaração da variável estava depois do sleep, e o sinal era causado durante o mesmo - e nesse momento não havia variável ainda. On 4/5/07, Solli Honorio wrote: > > hummm e qual era o erro ? assim todos apreende também, não só tú :) ! > > On 4/5/07, "Iberê O. Kuntz de Souza" < kuntzzz em gmail.com> wrote: > > > > Ja concertei meu erro.. vlw ae. > > Foi desatenção minha, mas o problema ja ta resolvido. Obrigado pela > > atenção. > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- []s Wendel "Não ajustar o auto-ajuste" - http://wendel.scardua.net/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070405/a035bdcc/attachment-0001.html From kuntzzz em gmail.com Thu Apr 5 12:26:14 2007 From: kuntzzz em gmail.com (=?ISO-8859-1?Q?=22Iber=EA_O=2E_Kuntz_de_Souza=22?=) Date: Thu, 05 Apr 2007 16:26:14 -0300 Subject: [Cascavel-pm] Problemas ao interceptar sinais Message-ID: <46154D56.1080001@gmail.com> > Pelo que ele deu a entender, foi justamente o que o Daniel falou, ou seja, a > declaração da variável estava depois do sleep, e o sinal era causado durante > o mesmo - e nesse momento não havia variável ainda. > Na verdade aquilo foi soh um exemplo, o programa tava diferente. > On 4/5/07, Solli Honorio wrote: >> >> hummm e qual era o erro ? assim todos apreende também, não só tú :) ! O problema eh que eu tava declarando 2 variaveis com o mesmo nome: uma dentro de uma rotina que atribuia um valor a ela, e outra fora da rotina (main) sem inicia-la com nenhum valor. Dae quando eu fazia uso dessa variavel dentro do manipulador de sinal, ela via apenas a declarada em main(óbvio) e que por sua vez não estava iniciada, então o "warnings" me dava a mensagem de que não estava iniciada a varivel. Eh isso =) >> >> On 4/5/07, "Iberê O. Kuntz de Souza" < kuntzzz em gmail.com> wrote: >> > >> > Ja concertei meu erro.. vlw ae. >> > Foi desatenção minha, mas o problema ja ta resolvido. Obrigado pela >> > atenção. >> > _______________________________________________ >> > Cascavel-pm mailing list >> > Cascavel-pm em pm.org >> > http://mail.pm.org/mailman/listinfo/cascavel-pm >> > >> >> >> _______________________________________________ >> Cascavel-pm mailing list >> Cascavel-pm em pm.org >> http://mail.pm.org/mailman/listinfo/cascavel-pm >> > From luismottacampos em yahoo.co.uk Fri Apr 6 04:55:52 2007 From: luismottacampos em yahoo.co.uk (Luis Motta Campos) Date: Fri, 6 Apr 2007 13:55:52 +0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Compartilhar_conex=E3o_DBD=3A=3AOrac?= =?iso-8859-1?q?le_entre_processos_=28usando_XML=3A=3ATwig=29?= In-Reply-To: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> References: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> Message-ID: <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> On Apr 5, 2007, at 11:28 PM, Joenio Costa wrote: > Olá Pessoal, > > Preciso analisar um XML e gravar os seus dados num banco Oracle, estou Esta lista é só desgraça mesmo... ;-) XML *E* Oracle, juntos... ninguém merece. > utilizando XML::Twig com parametro twig_handlers para fazer o parser > do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita > memória caso eu não utilize o parametro twig_handlers. Não encontrei > na documentação do XML::Twig mas notei que ao utilizar esse parametro > é criado um processo filho, e é isto que esta causando problemas com > minha conexão com o Oracle. Aqui tem um problema conceitual. Talvez seja melhor usar um parser incremental (DOM? SAX? Quem sabe o nome certo?), que vai armazenar apenas um pedaço do seu arquivo no disco, e não vai detonar a sua memória. Você precisa mesmo usar o XML::Twig? Ele parece ser apenas um toolkit construído sobre o XML::Parser, que me parece ser mais interessante para o seu caso... > Eu obtenho o seguinte erro ao executar algo parecido com o exemplo > abaixo: > DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on > communication channel (DBD ERROR: OCISessionEnd) Você parece já ter encerrado esta conexão uma vez. Pode me dar mais informação sobre este processo "extra" que você está vendo? Isso é estranho para mim... > -------- > > use DBI; > use XML::Twig; > > my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass'); > my $sth = $dbh->prepare(" > INSERT INTO table (col1, col2, col3) > VALUES (123, ?, ?) > "); > my $twig = XML::Twig->new( > twig_handlers => { PIT => sub { > my ($t, $product) = @_; > my $descricao = $product->first_child('pitName')->att('name'); > my $preco = $product->first_child('pitPrice')->att('price'); > $sth->bind_param(1, $descricao); > $sth->bind_param(2, $preco); > $sth->execute(); > $sth->finish(); > $t->purge; > }} > ); > $twig->parseurl('file:///home/joenio/data/produtos.xml'); > $twig->purge; > $dbh->disconnect(); > > ----- > > Alguem já enfrentou situação parecida? Quando eu tive este erro, tinha fork() explícito envolvido. Mas faz muito tempo e muitas versões do DBI atrás. Talvez isso já não seja mais a causa do seu problema. Tente por favor conseguir mais informação sobre este processo "extra" que você mencionou. Putamplexos! -- Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer, Perl fanatic evangelist, and amateur {cook, photographer} From mdacwb em gmail.com Fri Apr 6 06:20:49 2007 From: mdacwb em gmail.com (Marco A P D'Andrade) Date: Fri, 6 Apr 2007 10:20:49 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Compartilhar_conex=E3o_DBD=3A=3AOrac?= =?iso-8859-1?q?le_entre_processos_=28usando_XML=3A=3ATwig=29?= In-Reply-To: <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> References: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> Message-ID: <42dcdd750704060620i7ae3eddei1a013707abdcd271@mail.gmail.com> Fala Joenio! Assim como o Champs, eu tive problemas similares a muito tempo atras... Lembro que minha solução foi redefinir a função de disconnect (ou auto destroy) do DBI para evitar isso, mas na mesma situação... eu tinha um fork explicito... Para tirar a dúvida se este é o seu caminho, causado pelo fork uma boa alternativa, ao meu ver é o TRACE. Algumas dicas para verificação rápida estão descritas no DBI: Conceito e niveis de trace http://search.cpan.org/~timb/DBI-1.54/DBI.pm#TRACING Habilitando com o uso de variaveis de ambiente http://search.cpan.org/~timb/DBI-1.54/DBI.pm#DBI_TRACE Sds, Marco Antonio Em 06/04/07, Luis Motta Campos escreveu: > On Apr 5, 2007, at 11:28 PM, Joenio Costa wrote: > > Olá Pessoal, > > > > Preciso analisar um XML e gravar os seus dados num banco Oracle, estou > > Esta lista é só desgraça mesmo... ;-) XML *E* Oracle, juntos... > ninguém merece. > > > utilizando XML::Twig com parametro twig_handlers para fazer o parser > > do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita > > memória caso eu não utilize o parametro twig_handlers. Não encontrei > > na documentação do XML::Twig mas notei que ao utilizar esse parametro > > é criado um processo filho, e é isto que esta causando problemas com > > minha conexão com o Oracle. > > Aqui tem um problema conceitual. Talvez seja melhor usar um parser > incremental (DOM? SAX? Quem sabe o nome certo?), que vai armazenar > apenas um pedaço do seu arquivo no disco, e não vai detonar a sua > memória. Você precisa mesmo usar o XML::Twig? Ele parece ser apenas > um toolkit construído sobre o XML::Parser, que me parece ser mais > interessante para o seu caso... > > > Eu obtenho o seguinte erro ao executar algo parecido com o exemplo > > abaixo: > > DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on > > communication channel (DBD ERROR: OCISessionEnd) > > Você parece já ter encerrado esta conexão uma vez. > Pode me dar mais informação sobre este processo "extra" que você > está vendo? Isso é estranho para mim... > > > -------- > > > > use DBI; > > use XML::Twig; > > > > my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass'); > > my $sth = $dbh->prepare(" > > INSERT INTO table (col1, col2, col3) > > VALUES (123, ?, ?) > > "); > > my $twig = XML::Twig->new( > > twig_handlers => { PIT => sub { > > my ($t, $product) = @_; > > my $descricao = $product->first_child('pitName')->att('name'); > > my $preco = $product->first_child('pitPrice')->att('price'); > > $sth->bind_param(1, $descricao); > > $sth->bind_param(2, $preco); > > $sth->execute(); > > $sth->finish(); > > $t->purge; > > }} > > ); > > $twig->parseurl('file:///home/joenio/data/produtos.xml'); > > $twig->purge; > > $dbh->disconnect(); > > > > ----- > > > > Alguem já enfrentou situação parecida? > > Quando eu tive este erro, tinha fork() explícito envolvido. > Mas faz muito tempo e muitas versões do DBI atrás. > Talvez isso já não seja mais a causa do seu problema. > Tente por favor conseguir mais informação sobre este processo > "extra" que você mencionou. > Putamplexos! > > -- > Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer, > Perl fanatic evangelist, and amateur {cook, photographer} > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > From payback em oi.com.br Fri Apr 6 06:38:42 2007 From: payback em oi.com.br (KLEBER) Date: Fri, 6 Apr 2007 10:38:42 -0300 Subject: [Cascavel-pm] Controle de processo em perl References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> Message-ID: <001c01c77850$e4ae1840$04010a0a@intranet.local> Olá Igor , Agradeço sua gentileza em me responder. Entendi suas considerações e devo te dizer que não sou um especialista em perl ( conheço com alguma profundidade cobol ) O pouco que conheço , aprendi lendo o livro Perl como programar ( deitel ). Sobre o tema controle de processo , estava imaginando controlá-lo , não através de arquivo , mas pelo PID. ( me desculpe se estou falando bobagem ). De acordo com o livro mencionado , o pid está na variável $PROCESS_ID e existe uma função chamada WAIT( ) que aguarda o término de um processo. A minha necessidade seria resolvida formulando a seguinte indagação : ENQUANTO $PROCESS_ID ESTIVER ATIVO WAIT( ) Não sei se é possível este tipo de contole em perl e , se for , como codificá-lo. Nota - Consta as seguintes informações neste livro : a) Na variável especial $PID consta o numero do processo do próprio programa. b) Se quiser esperar que termine a execução de processo específico , você pode usar a função WAITPID , que recebe um processo como primeiro argumento.Ela espera que aquele processo termine e então devolve o pid daquele processo. Se não houver nenhum filho para aquele pid ou se já estiver morto , a função WAITPID devolve -1. O estado de saida do processo filho é armazenada na variável especial $?. c) Exemplo de controle de processo no livro ( dois processos ) : my ( $pid, $pid2 ); s| = 1; if ( ( $pid = fork() ) && ( $pid2 = fork() ) ) { print ( "Preciso esperar meus filhos.\n" ); my $straggler = wait(); print ( "Finalmente $straggler terminou.Agora eu posso ir.\n" ); } elsif ( $pid && defined( $pid2 ) ) { sleep( 2 ); print( "Filho 2 : O meu tambem....\n" ); sleep( 4 ); exit (); } elsif ( defined( $pid ) ) { sleep( 1 ); print( "Filho 1 : Meu pai tem paciencia......\n" ); sleep( 2 ); } else { die( "Problemas com fork " ); } Acredito que neste programa exemplo esteja a solução do meu problema , entretanto , pôr não dominar o perl , não sinto segurança para interpletá-lo. Mais uma vez , agradeço a sua atenção , kleber ----- Original Message ----- From: "Igor Sutton Lopes" To: "Cascavel Perl Mongers" Sent: Thursday, April 05, 2007 4:27 PM Subject: Re: [Cascavel-pm] Controle de processo em perl Olá Kleber, On 2007/04/05, at 18:11, KLEBER wrote: > Tomo a liberdade de enviar-lhe(s) este email cujo o assunto é PERL > pois > talvez você ou alguém que conheça possa me ajudar. > Estou escrevendo uma aplicação em perl e preciso garantir que um > determinado processo seja executado de forma única ( sem > concorrência ). > > Pôr exemplo , uma função que atualiza uma tabela de agencia , ao ser > executada , todas as outras funções que acessam esta tabela deve > esperar > sua conclussão ( portanto deve-se formar uma fila de pedidos para > atendimento ). > > Atualmente estou fazendo isto da seguinte maneira : > # > # Permite executar um script por vez > # > denovo: > if ( -e "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ) > { goto > denovo; } > sysopen( TASK15, > "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul", > O_WRONLY|O_EXCL|O_CREAT ) or warn ( goto denovo ); > flock( TASK15, LOCK_EX ) or warn ( goto denovo ); > --------------------------------- > Instruções diversas em perl 5.8 > -------------------------------- > flock( TASK15, LOCK_UN ); > close( TASK15 ); > unlink( "c:\\payback\\contabil\\tabelas\\agencia\\cgiaform.nul" ); > exit; > Uma maneira primitiva de fazer a mesma coisa, utilizando arquivos como lock. use File::Slurp; PROCESS: { if ( -e $LOCK_FILE ) { sleep 1; redo PROCESS; } write_file($LOCK_FILE, $$); do_whatever_you_want(); unlink $LOCK_FILE; } Agora com flock: # importa constantes para flock e seek use Fcntl qw(:flock :seek); # abre arquivo. open my $fh, "<", $filename or die $!; # aciona lock no filehandle. vai esperar aqui até outra instância do programa liberar o arquivo. flock($fh, LOCK_EX); # move cursor para o final do arquivo seek($fh, 0, SEEK_END); # imprime algo print $fh "Some text!\n"; # desbloqueia o filehandle flock($fh, LOCK_UN); # fecha o arquivo close $fh or warn $!; Lembre-se que flock() atua em filehandles. Lembre-se também que flock () funciona apenas com outros programas que utilizam flock(), isto é, se um outro programa for interagir com este arquivo e não utilizar flock(), provavelmente irá ocasionar problemas. Alguns outros pontos a considerar: - Labels são, no senso comum, nomeados com letras MAIUSCULAS pois ajudam a distinguir de funções; - Utilize File::Spec para tratar com caminhos de arquivos; - Apesar de utilizarmos labels, 'goto's são feios :-P Utilize escopos para isso, como no exemplo que transcrevi; - Não é necessário utilizar as rotinas sys* a menos que você saiba o que está fazendo :-); - Utilize scalars para armazenar a referência de arquivos abertos com open, ao invés de barewords. Acho que é só, e espero que ajude. -- Igor Sutton igor.sutton em gmail.com -------------------------------------------------------------------------------- _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm From igor.sutton em gmail.com Fri Apr 6 08:23:08 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Fri, 6 Apr 2007 16:23:08 +0100 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <001c01c77850$e4ae1840$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> <001c01c77850$e4ae1840$04010a0a@intranet.local> Message-ID: <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> Olá Kleber, On 2007/04/06, at 14:38, KLEBER wrote: > Olá Igor , > > Agradeço sua gentileza em me responder. > > Entendi suas considerações e devo te dizer que não sou um especialista > em perl ( conheço com alguma profundidade cobol ) > O pouco que conheço , aprendi lendo o livro Perl como programar > ( deitel ). > Sobre o tema controle de processo , estava imaginando controlá-lo , > não > através de arquivo , mas pelo PID. > ( me desculpe se estou falando bobagem ). Pelo que me recordo da sua mensagem inicial, você queria utilizar um controle de processos relacionado ao filehandle, isto é, não permitir que dois processos concorrentes modifiquem o mesmo arquivo, ao mesmo tempo. Isto você consegue com flock(), conforme você o fez e eu enviei uma abordagem mais perlish. Agora, se você quer controlar processos concorrentes através de fork () e wait(), é um pouco diferente. > > De acordo com o livro mencionado , o pid está na variável $PROCESS_ID > e existe uma função chamada WAIT( ) que aguarda o término de um > processo. > A minha necessidade seria resolvida formulando a seguinte indagação : > > ENQUANTO $PROCESS_ID ESTIVER ATIVO WAIT( ) A pergunta que fica é: você que está iniciando estes processos concorrentes, ou o sistema operacional? Ah, em relação à variável $PROCESS_ID, você precisa utilizar 'use English;' no início do seu programa (perldoc English para maiores informações). > > Não sei se é possível este tipo de contole em perl e , se for , como > codificá-lo. >  > Nota - Consta as seguintes informações neste livro : > a) Na variável especial $PID consta o numero do > processo do > próprio programa. > b) Se quiser esperar que termine a execução de processo > específico , > você pode usar a função WAITPID , que recebe um > processo > como primeiro argumento.Ela espera que aquele processo > termine > e então devolve o pid daquele processo. > Se não houver nenhum filho para aquele pid ou se já > estiver > morto , > a função WAITPID devolve -1. > O estado de saida do processo filho é armazenada na > variável > especial $?. > c) Exemplo de controle de processo no livro ( dois > processos ) : > my ( $pid, $pid2 ); > s| = 1; > if ( ( $pid = fork() ) && ( $pid2 = fork() ) ) { > print ( "Preciso esperar meus filhos.\n" ); > my $straggler = wait(); > print ( "Finalmente $straggler terminou.Agora > eu posso > ir.\n" ); > } > elsif ( $pid && defined( $pid2 ) ) { > sleep( 2 ); > print( "Filho 2 : O meu tambem....\n" ); > sleep( 4 ); > exit (); > } > elsif ( defined( $pid ) ) { > sleep( 1 ); > print( "Filho 1 : Meu pai tem paciencia...... > \n" ); > sleep( 2 ); > } > else { > die( "Problemas com fork " ); > } > > Acredito que neste programa exemplo esteja a solução > do meu > problema , entretanto , pôr não dominar o perl , não > sinto > segurança para interpletá-lo. > > Mais uma vez , agradeço a sua atenção , Certo, vamos lá com um exemplo de fork(): use strict; use warnings; use POSIX qw(:sys_wait_h); sub message { print "[$$] ", @_, $/; } sub REAPER { while ( ( my $child = waitpid( -1, WNOHANG ) ) > 0 ) { message( "filho $child morreu", $/ ); } $SIG{CHLD} = \&REAPER; } $SIG{CHLD} = \&REAPER; my $pid = fork(); unless ( defined $pid ) { die "problemas ao executar fork(): $!"; } if ( $pid > 0 ) { # estamos no processo pai message( "iniciei o processo $pid", $/ ); sleep 5; message( "pai esta saindo", $/ ); exit; } else { # estamos no processo filho message( "eu sou o filho!", $/ ); exit; } Para maiores informações: perldoc perlipc perldoc POSIX perldoc -f fork A propósito: o que é que você quer fazer, afinal? Descreva-nos o seu problema, assim fica mais fácil de ajudá-lo :-) Abraço! -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070406/a214bc86/attachment-0001.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070406/a214bc86/attachment-0001.bin From payback em oi.com.br Fri Apr 6 09:34:36 2007 From: payback em oi.com.br (KLEBER) Date: Fri, 6 Apr 2007 13:34:36 -0300 Subject: [Cascavel-pm] Controle de processo em perl References: <000b01c777a5$6b7075f0$04010a0a@intranet.local><96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com><001c01c77850$e4ae1840$04010a0a@intranet.local> <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> Message-ID: <001e01c77869$777b0a80$04010a0a@intranet.local> Ok Igor , Mais uma vez agradeço sua atenção. Vou tentar descrever meu problema. Eu desenvolvo sistema e estou trabalhando com 3 linguagens: Cobol , javascript , perl. Basicamente estas linguagens atuam da seguinte maneira : Javascript - Realiza validação dos dados ( formulario ) na máquina do cliente. Perl - Recebe os dados do formulario do cliente , grava em um arquivo texto para entrada de dados no cobol , executa um programa cobol através do comando system e envia a resposta ao cliente. Cobol - Lê arquivo de entrada de dados , realiza manutenção na base de dados e gera um arquivo html sobre o status do processamento. A resposta enviada pelo perl ao cliente está neste arquivo html. Ao realizar alguns testes com uso concorrente ( duas pessoas acessando a mesma rotina perl ) , verifiquei que o arquivo html gerado pelo cobol do usuário A estava sendo direcionado para usuario B. Resolvi este problema criando um arquivo nulo e testando sua existência para execução de um processo perl. Entretanto , tenho consiência de que não é a melhor solução pois , caso exista algum problema na rotina perl e o arquivo de controle não é eliminado , todas as solicitações vão ficar dependurada. Pesquisando este assunto , verifiquei a possibilidade de utilizar a alternativa de controle de processo ( wait ). O objetivo é executar uma rotina em perl sem uso concorrente ou seja , enquanto ela estiver sendo executada , todas as solicitações de execução desta rotina devem aguadar. Vou dar um exemplo prático deste problema : O sistema que estou escrevendo realiza autenticação do usuário. Ou seja , o usuário informa de seu codigo de acesso e senha , envia os dados ao perl que grava em um arquivo texto para passagem ao cobol. O cobol verifica se os dados estão corretos e grava arquivo de autorização de acesso ( html ) que contém informações tais como : quais sistemas o usuário pode acessar , qual o nivel de autorização deste usuário ( acessa todas as funções ou modulos do sistema ) , qual o status do usuário ( privilegiado , normal , etc ). Este arquivo de autorização de acesso pertence ao usuário A e não pode ser direcionado para o usuário B. Por isso preciso garantir que , enquanto um processo perl esteja sendo executado , todos os demais precisam aguardar sua conclussão. Espero ter descrito com mais clareza minha necessidade. Um abraço , kleber ----- Original Message ----- From: "Igor Sutton Lopes" To: "Cascavel Perl Mongers" Sent: Friday, April 06, 2007 12:23 PM Subject: Re: [Cascavel-pm] Controle de processo em perl Olá Kleber, On 2007/04/06, at 14:38, KLEBER wrote: > Olá Igor , > > Agradeço sua gentileza em me responder. > > Entendi suas considerações e devo te dizer que não sou um especialista > em perl ( conheço com alguma profundidade cobol ) > O pouco que conheço , aprendi lendo o livro Perl como programar > ( deitel ). > Sobre o tema controle de processo , estava imaginando controlá-lo , > não > através de arquivo , mas pelo PID. > ( me desculpe se estou falando bobagem ). Pelo que me recordo da sua mensagem inicial, você queria utilizar um controle de processos relacionado ao filehandle, isto é, não permitir que dois processos concorrentes modifiquem o mesmo arquivo, ao mesmo tempo. Isto você consegue com flock(), conforme você o fez e eu enviei uma abordagem mais perlish. Agora, se você quer controlar processos concorrentes através de fork () e wait(), é um pouco diferente. > > De acordo com o livro mencionado , o pid está na variável $PROCESS_ID > e existe uma função chamada WAIT( ) que aguarda o término de um > processo. > A minha necessidade seria resolvida formulando a seguinte indagação : > > ENQUANTO $PROCESS_ID ESTIVER ATIVO WAIT( ) A pergunta que fica é: você que está iniciando estes processos concorrentes, ou o sistema operacional? Ah, em relação à variável $PROCESS_ID, você precisa utilizar 'use English;' no início do seu programa (perldoc English para maiores informações). > > Não sei se é possível este tipo de contole em perl e , se for , como > codificá-lo. >  > Nota - Consta as seguintes informações neste livro : > a) Na variável especial $PID consta o numero do > processo do > próprio programa. > b) Se quiser esperar que termine a execução de processo > específico , > você pode usar a função WAITPID , que recebe um > processo > como primeiro argumento.Ela espera que aquele processo > termine > e então devolve o pid daquele processo. > Se não houver nenhum filho para aquele pid ou se já > estiver > morto , > a função WAITPID devolve -1. > O estado de saida do processo filho é armazenada na > variável > especial $?. > c) Exemplo de controle de processo no livro ( dois > processos ) : > my ( $pid, $pid2 ); > s| = 1; > if ( ( $pid = fork() ) && ( $pid2 = fork() ) ) { > print ( "Preciso esperar meus filhos.\n" ); > my $straggler = wait(); > print ( "Finalmente $straggler terminou.Agora > eu posso > ir.\n" ); > } > elsif ( $pid && defined( $pid2 ) ) { > sleep( 2 ); > print( "Filho 2 : O meu tambem....\n" ); > sleep( 4 ); > exit (); > } > elsif ( defined( $pid ) ) { > sleep( 1 ); > print( "Filho 1 : Meu pai tem paciencia...... > \n" ); > sleep( 2 ); > } > else { > die( "Problemas com fork " ); > } > > Acredito que neste programa exemplo esteja a solução > do meu > problema , entretanto , pôr não dominar o perl , não > sinto > segurança para interpletá-lo. > > Mais uma vez , agradeço a sua atenção , Certo, vamos lá com um exemplo de fork(): use strict; use warnings; use POSIX qw(:sys_wait_h); sub message { print "[$$] ", @_, $/; } sub REAPER { while ( ( my $child = waitpid( -1, WNOHANG ) ) > 0 ) { message( "filho $child morreu", $/ ); } $SIG{CHLD} = \&REAPER; } $SIG{CHLD} = \&REAPER; my $pid = fork(); unless ( defined $pid ) { die "problemas ao executar fork(): $!"; } if ( $pid > 0 ) { # estamos no processo pai message( "iniciei o processo $pid", $/ ); sleep 5; message( "pai esta saindo", $/ ); exit; } else { # estamos no processo filho message( "eu sou o filho!", $/ ); exit; } Para maiores informações: perldoc perlipc perldoc POSIX perldoc -f fork A propósito: o que é que você quer fazer, afinal? Descreva-nos o seu problema, assim fica mais fácil de ajudá-lo :-) Abraço! -- Igor Sutton igor.sutton em gmail.com -------------------------------------------------------------------------------- _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm From wendelscardua em gmail.com Fri Apr 6 10:25:23 2007 From: wendelscardua em gmail.com (Wendel Scardua) Date: Fri, 6 Apr 2007 14:25:23 -0300 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <001e01c77869$777b0a80$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> <001c01c77850$e4ae1840$04010a0a@intranet.local> <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> <001e01c77869$777b0a80$04010a0a@intranet.local> Message-ID: <726229b50704061025v610fa50eh3db7dc09bcc83b19@mail.gmail.com> On 4/6/07, KLEBER wrote: > > Este arquivo de autorização de acesso pertence ao usuário A e não pode > ser direcionado para o usuário B. > > Por isso preciso garantir que , enquanto um processo perl esteja sendo > executado , todos os demais precisam aguardar sua conclussão. > Err, precisa mesmo ? Você não pode escolher o nome que o arquivo html terá ? Se fosse criado um html para cada PID, isso tudo não daria certo ? * perl cria "entrada-$$.txt" * perl chama system("meu_programa_bizarro_em_cobol entrada-$$.txt saida-$$.html") * perl manda o conteúdo de "saida-$$.html" para o browser Agora, se o seu programa cobol não pode receber parâmetros (não conheço cobol), então esqueça o que eu disse acima, hehe ^^;;; []s Wendel "Não ajustar o auto-ajuste" - http://wendel.scardua.net/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070406/34946a93/attachment.html From edencardim em gmail.com Sat Apr 7 06:26:39 2007 From: edencardim em gmail.com (Eden Cardim) Date: Sat, 7 Apr 2007 10:26:39 -0300 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <001e01c77869$777b0a80$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> <001c01c77850$e4ae1840$04010a0a@intranet.local> <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> <001e01c77869$777b0a80$04010a0a@intranet.local> Message-ID: <3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> On 4/6/07, KLEBER wrote: > Eu desenvolvo sistema e estou trabalhando com 3 linguagens: > Cobol , javascript , perl. > > Basicamente estas linguagens atuam da seguinte maneira : > > Javascript - Realiza validação dos dados ( formulario ) na máquina > do > cliente. > Perl - Recebe os dados do formulario do cliente , grava em um > arquivo > texto para entrada de dados no cobol , executa um > programa > cobol através do comando system e envia a resposta ao > cliente. > Cobol - Lê arquivo de entrada de dados , realiza manutenção na base > de dados e gera um arquivo html sobre o status do > processamento. > A resposta enviada pelo perl ao cliente está neste > arquivo html. Lembre-se que validação com Javascript é para economizar banda e não garantir segurança. O usuário não é obrigado a executar nada em Javascript (afinal, a máquina é dele, ele executa o que quiser). Se você não fizer validação server-side, o cliente vai poder submeter dados arbitrários para a sua base de dados. Combine isso com o fato de que você está usando uma chamada system() para transmitir estes dados a outro programa e qualquer script-kiddie vai conseguir furar sua segurança. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From mdacwb em gmail.com Sat Apr 7 22:09:19 2007 From: mdacwb em gmail.com (Marco A P D'Andrade) Date: Sun, 8 Apr 2007 02:09:19 -0300 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> <001c01c77850$e4ae1840$04010a0a@intranet.local> <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> <001e01c77869$777b0a80$04010a0a@intranet.local> <3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> Message-ID: <42dcdd750704072209t5eacd35l92aa9d5341aa3b6@mail.gmail.com> Kleber, A alguns anos atrás, quando iniciei em Perl eu tinha um problema similar ao seu... Sistema legado em Cobol e a necessidade de interação com web. Minha abordagem não foi o uso de arquivos para transferência entre as plataformas, mas argumentos e saidas em tela, sem formatação... #-- A grosso modo o codigo ficaria assim... unless ( open(F, "cobrun text.int XXYYZZ |") ) { # informo usuario do erro print "

Falha ao ler dados: $!

"; # Registro nos logs do apache (ou arquivo de log) o erro para depuracao print STDERR "Id Sessao XX -> parametros: $ENV{QUERY_STRING} -> Falha ao ler dados: $!\n"; exit 1; } while ( defined( $_ = ) ) { print $_; } close(F); Claro... não recordo mais como eu recebia os parametros no cobol (MF-3.1) ... mas pelo que lembro, seria algo trivial, assim como a chamada de um modulo a partir de um menu principal... Como alternativa a abordagem do Wendel seria a mais produtiva, e em casos de perda de sincronismo, onde o processo não exclui o arquivo, pode ser facilmente contornado com um script em cron, apagando depois de X dias: find -name -cmin +60 | xargs rm cmin => change minutes > 60 xargs => comando para separar em argumentos por arquivo ... A proposito... para vc utilizar wait, tem de saber qual é o PID, e ele deve estar associado ao seu processo. Uma complexidade grande que pode ser contornada utilizando-se simplesmente o open que citei acima. Esta é apenas uma das maravilhas do Perl ! Espero ter contribuido um pouco. Sds, Marco Antonio Em 07/04/07, Eden Cardim escreveu: > On 4/6/07, KLEBER wrote: > > Eu desenvolvo sistema e estou trabalhando com 3 linguagens: > > Cobol , javascript , perl. > > > > Basicamente estas linguagens atuam da seguinte maneira : > > > > Javascript - Realiza validação dos dados ( formulario ) na máquina > > do > > cliente. > > Perl - Recebe os dados do formulario do cliente , grava em um > > arquivo > > texto para entrada de dados no cobol , executa um > > programa > > cobol através do comando system e envia a resposta ao > > cliente. > > Cobol - Lê arquivo de entrada de dados , realiza manutenção na base > > de dados e gera um arquivo html sobre o status do > > processamento. > > A resposta enviada pelo perl ao cliente está neste > > arquivo html. > > Lembre-se que validação com Javascript é para economizar banda e não > garantir segurança. O usuário não é obrigado a executar nada em > Javascript (afinal, a máquina é dele, ele executa o que quiser). Se > você não fizer validação server-side, o cliente vai poder submeter > dados arbitrários para a sua base de dados. Combine isso com o fato de > que você está usando uma chamada system() para transmitir estes dados > a outro programa e qualquer script-kiddie vai conseguir furar sua > segurança. > > -- > Eden Cardim > Instituto Baiano de Biotecnologia > Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas > Laboratório de Bioinformática > -- > "you seem to think that 'close enough' is close enough... > please learn to be 'literal' around programming." > merlyn - on irc.freenode.net#perl > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > From igor.sutton em gmail.com Sun Apr 8 05:34:52 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Sun, 8 Apr 2007 13:34:52 +0100 Subject: [Cascavel-pm] Fwd: Parsing an HTML file - skipping to a line References: <31086b240704061303i57398dd6n669bbed097d4369f@mail.gmail.com> Message-ID: <684073C7-1672-4CA2-9149-071F6D52D737@gmail.com> Para pensar ;-) Begin forwarded message: > From: "Tom Phoenix" > Date: 6 de abril de 2007 21:03:54 GMT+01:00 > To: yitzle > Cc: "beginners perl" > Subject: Re: Parsing an HTML file - skipping to a line > > On 4/6/07, yitzle wrote: > >> I distrust modules? >> Dunno. I'm a fan of C programming and like doing stuff myself. > > I distrust the dairy industry. I've got a yard full of grass for cows > to eat, and I've seen what milking a cow looks like on Animal Planet. > I can figure out how to pasteurize the milk from a page on Wikipedia. > I like doing stuff myself. I'll buy a cow on Craigslist and next week > I'll have milkshakes. Delicious, creamy milkshakes. > > We've heard your arguments before. Our response is the same: If you > want reliable code, use a module. If you prefer an educational > experience, REwrite the module. If you want a quick-and-dirty program, > and you don't care about building your skills as a Perl programmer > because you prefer to fiddle with the intricacies of HTML, well, then, > do it all without a module, and have fun doing it. But don't complain > about it next week when you discover some special case that you didn't > take care of. > > Enjoy your milkshake! > > --Tom Phoenix > Stonehenge Perl Training > > -- > To unsubscribe, e-mail: beginners-unsubscribe em perl.org > For additional commands, e-mail: beginners-help em perl.org > http://learn.perl.org/ > > -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070408/08bcabfd/attachment.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070408/08bcabfd/attachment.bin From payback em oi.com.br Sun Apr 8 06:30:22 2007 From: payback em oi.com.br (KLEBER) Date: Sun, 8 Apr 2007 10:30:22 -0300 Subject: [Cascavel-pm] Controle de processo em perl References: <000b01c777a5$6b7075f0$04010a0a@intranet.local><96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com><001c01c77850$e4ae1840$04010a0a@intranet.local><6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com><001e01c77869$777b0a80$04010a0a@intranet.local><3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> <42dcdd750704072209t5eacd35l92aa9d5341aa3b6@mail.gmail.com> Message-ID: <001901c779e2$0fad8bb0$04010a0a@intranet.local> Caro Marco , Agradeço sua atenção. Em perl , é possível definir um numero de identificação de processo para uma determinada rotina ? Se fôr possível , ficaria simples fazer o que preciso. Pôr exemplo ( pensando alto ) : # # Rotina de autorização de usuario # Define pid com 250 testa se pid 250 está disponível Se não disponível => aguarda disponibilidade Se disponível => executa rotina Me perdoe se estou falando bobagem ( rrrrssss...... ) !!!!!!!!!!!!!!!!!! Abraços , kleber ----- Original Message ----- From: "Marco A P D'Andrade" To: "Cascavel Perl Mongers" Sent: Sunday, April 08, 2007 2:09 AM Subject: Re: [Cascavel-pm] Controle de processo em perl Kleber, A alguns anos atrás, quando iniciei em Perl eu tinha um problema similar ao seu... Sistema legado em Cobol e a necessidade de interação com web. Minha abordagem não foi o uso de arquivos para transferência entre as plataformas, mas argumentos e saidas em tela, sem formatação... #-- A grosso modo o codigo ficaria assim... unless ( open(F, "cobrun text.int XXYYZZ |") ) { # informo usuario do erro print "

Falha ao ler dados: $!

"; # Registro nos logs do apache (ou arquivo de log) o erro para depuracao print STDERR "Id Sessao XX -> parametros: $ENV{QUERY_STRING} -> Falha ao ler dados: $!\n"; exit 1; } while ( defined( $_ = ) ) { print $_; } close(F); Claro... não recordo mais como eu recebia os parametros no cobol (MF-3.1) ... mas pelo que lembro, seria algo trivial, assim como a chamada de um modulo a partir de um menu principal... Como alternativa a abordagem do Wendel seria a mais produtiva, e em casos de perda de sincronismo, onde o processo não exclui o arquivo, pode ser facilmente contornado com um script em cron, apagando depois de X dias: find -name -cmin +60 | xargs rm cmin => change minutes > 60 xargs => comando para separar em argumentos por arquivo ... A proposito... para vc utilizar wait, tem de saber qual é o PID, e ele deve estar associado ao seu processo. Uma complexidade grande que pode ser contornada utilizando-se simplesmente o open que citei acima. Esta é apenas uma das maravilhas do Perl ! Espero ter contribuido um pouco. Sds, Marco Antonio Em 07/04/07, Eden Cardim escreveu: > On 4/6/07, KLEBER wrote: > > Eu desenvolvo sistema e estou trabalhando com 3 linguagens: > > Cobol , javascript , perl. > > > > Basicamente estas linguagens atuam da seguinte maneira : > > > > Javascript - Realiza validação dos dados ( formulario ) na > > máquina > > do > > cliente. > > Perl - Recebe os dados do formulario do cliente , grava em um > > arquivo > > texto para entrada de dados no cobol , executa um > > programa > > cobol através do comando system e envia a resposta > > ao > > cliente. > > Cobol - Lê arquivo de entrada de dados , realiza manutenção na > > base > > de dados e gera um arquivo html sobre o status do > > processamento. > > A resposta enviada pelo perl ao cliente está neste > > arquivo html. > > Lembre-se que validação com Javascript é para economizar banda e não > garantir segurança. O usuário não é obrigado a executar nada em > Javascript (afinal, a máquina é dele, ele executa o que quiser). Se > você não fizer validação server-side, o cliente vai poder submeter > dados arbitrários para a sua base de dados. Combine isso com o fato de > que você está usando uma chamada system() para transmitir estes dados > a outro programa e qualquer script-kiddie vai conseguir furar sua > segurança. > > -- > Eden Cardim > Instituto Baiano de Biotecnologia > Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas > Laboratório de Bioinformática > -- > "you seem to think that 'close enough' is close enough... > please learn to be 'literal' around programming." > merlyn - on irc.freenode.net#perl > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm From mdacwb em gmail.com Sun Apr 8 19:03:54 2007 From: mdacwb em gmail.com (Marco A P D'Andrade) Date: Sun, 8 Apr 2007 23:03:54 -0300 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <001901c779e2$0fad8bb0$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local> <96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com> <001c01c77850$e4ae1840$04010a0a@intranet.local> <6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com> <001e01c77869$777b0a80$04010a0a@intranet.local> <3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> <42dcdd750704072209t5eacd35l92aa9d5341aa3b6@mail.gmail.com> <001901c779e2$0fad8bb0$04010a0a@intranet.local> Message-ID: <42dcdd750704081903p12a7226co83c4590c750549@mail.gmail.com> Kleber, Este não é o melhor caminho, mas se vc é amante da natureza e estradas tortuosas ;) verifique o IPC::Open2 ou IPC::Open3 http://perldoc.perl.org/IPC/Open3.html Mas volto a sugerir... tente criar uma rotina em cobol que jogue os dados desejados em tela (como um relatorio), e faça a leitura via script. Vc verá que é a maneira mais simples e eficiente. Sds, Marco Antonio Em 08/04/07, KLEBER escreveu: > Caro Marco , > > Agradeço sua atenção. > > Em perl , é possível definir um numero de identificação de processo para uma > determinada rotina ? > Se fôr possível , ficaria simples fazer o que preciso. > Pôr exemplo ( pensando alto ) : > # > # Rotina de autorização de usuario > # > Define pid com 250 > testa se pid 250 está disponível > Se não disponível => aguarda disponibilidade > Se disponível => executa rotina > > Me perdoe se estou falando bobagem ( rrrrssss...... ) !!!!!!!!!!!!!!!!!! > > Abraços , > > kleber > > ----- Original Message ----- > From: "Marco A P D'Andrade" > To: "Cascavel Perl Mongers" > Sent: Sunday, April 08, 2007 2:09 AM > Subject: Re: [Cascavel-pm] Controle de processo em perl > > > Kleber, > > A alguns anos atrás, quando iniciei em Perl eu tinha um problema > similar ao seu... Sistema legado em Cobol e a necessidade de interação > com web. > > Minha abordagem não foi o uso de arquivos para transferência entre as > plataformas, mas argumentos e saidas em tela, sem formatação... > > > #-- A grosso modo o codigo ficaria assim... > unless ( open(F, "cobrun text.int XXYYZZ |") ) { > # informo usuario do erro > print "

Falha ao ler dados: $!

"; > # Registro nos logs do apache (ou arquivo de log) o erro para depuracao > print STDERR "Id Sessao XX -> parametros: $ENV{QUERY_STRING} -> > Falha ao ler dados: $!\n"; > exit 1; > } > > while ( defined( $_ = ) ) { > print $_; > } > close(F); > > Claro... não recordo mais como eu recebia os parametros no cobol > (MF-3.1) ... mas pelo que lembro, seria algo trivial, assim como a > chamada de um modulo a partir de um menu principal... > > Como alternativa a abordagem do Wendel seria a mais produtiva, e em > casos de perda de sincronismo, onde o processo não exclui o arquivo, > pode ser facilmente contornado com um script em cron, apagando depois > de X dias: > > find -name -cmin +60 | xargs rm > > cmin => change minutes > 60 > xargs => comando para separar em argumentos por arquivo > > ... > > > A proposito... para vc utilizar wait, tem de saber qual é o PID, e > ele deve estar associado ao seu processo. Uma complexidade grande que > pode ser contornada utilizando-se simplesmente o open que citei acima. > Esta é apenas uma das maravilhas do Perl ! > > > > Espero ter contribuido um pouco. > > Sds, > Marco Antonio > > Em 07/04/07, Eden Cardim escreveu: > > On 4/6/07, KLEBER wrote: > > > Eu desenvolvo sistema e estou trabalhando com 3 linguagens: > > > Cobol , javascript , perl. > > > > > > Basicamente estas linguagens atuam da seguinte maneira : > > > > > > Javascript - Realiza validação dos dados ( formulario ) na > > > máquina > > > do > > > cliente. > > > Perl - Recebe os dados do formulario do cliente , grava em um > > > arquivo > > > texto para entrada de dados no cobol , executa um > > > programa > > > cobol através do comando system e envia a resposta > > > ao > > > cliente. > > > Cobol - Lê arquivo de entrada de dados , realiza manutenção na > > > base > > > de dados e gera um arquivo html sobre o status do > > > processamento. > > > A resposta enviada pelo perl ao cliente está neste > > > arquivo html. > > > > Lembre-se que validação com Javascript é para economizar banda e não > > garantir segurança. O usuário não é obrigado a executar nada em > > Javascript (afinal, a máquina é dele, ele executa o que quiser). Se > > você não fizer validação server-side, o cliente vai poder submeter > > dados arbitrários para a sua base de dados. Combine isso com o fato de > > que você está usando uma chamada system() para transmitir estes dados > > a outro programa e qualquer script-kiddie vai conseguir furar sua > > segurança. > > > > -- > > Eden Cardim > > Instituto Baiano de Biotecnologia > > Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas > > Laboratório de Bioinformática > > -- > > "you seem to think that 'close enough' is close enough... > > please learn to be 'literal' around programming." > > merlyn - on irc.freenode.net#perl > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > From igor.sutton em gmail.com Sun Apr 8 14:38:10 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Sun, 8 Apr 2007 22:38:10 +0100 Subject: [Cascavel-pm] Controle de processo em perl In-Reply-To: <001901c779e2$0fad8bb0$04010a0a@intranet.local> References: <000b01c777a5$6b7075f0$04010a0a@intranet.local><96CEF5FA-CBE0-4CFA-81AA-C47F06314E4D@gmail.com><001c01c77850$e4ae1840$04010a0a@intranet.local><6C5906BB-3911-435B-92C3-5E6680E3E195@gmail.com><001e01c77869$777b0a80$04010a0a@intranet.local><3de55ead0704070626i7cbc7c91nf116aa06d9c456f@mail.gmail.com> <42dcdd750704072209t5eacd35l92aa9d5341aa3b6@mail.gmail.com> <001901c779e2$0fad8bb0$04010a0a@intranet.local> Message-ID: <678622C2-15BE-4BE8-9A2C-8D7574F02C50@gmail.com> On 2007/04/08, at 14:30, KLEBER wrote: > Caro Marco , > > Agradeço sua atenção. > > Em perl , é possível definir um numero de identificação de processo > para uma > determinada rotina ? > Se fôr possível , ficaria simples fazer o que preciso. > Pôr exemplo ( pensando alto ) : > # > # Rotina de autorização de usuario > # > Define pid com 250 > testa se pid 250 está disponível > Se não disponível => aguarda disponibilidade > Se disponível => executa rotina use strict; use warnings; use File::Slurp; # define o arquivo para output. a variavel $$ devolve o numero do processo # corrente. my $output = qq{/tmp/output_$$.txt}; # monta a linha de comando para executar o programa cobol, passando todos os # argumentos necessarios. my @command = ( '/usr/local/bin/my-cobol-program', '--output', $output ); # executa o comando definido anteriormente, e verificando se o resultado dele # foi correto. caso nao tenha sido, morre e informa o erro. system(@command) == 0 or die "system @command failed: $?"; # imprime na tela o resultado do arquivo. print read_file($output); END { # remove o arquivo de saida caso exista. unlink $output if -f $output; } Boa sorte! -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070408/78634529/attachment.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070408/78634529/attachment.bin From shonorio em gmail.com Mon Apr 9 05:13:14 2007 From: shonorio em gmail.com (Solli Honorio) Date: Mon, 9 Apr 2007 09:13:14 -0300 Subject: [Cascavel-pm] YAPC::SA Hackathon In-Reply-To: References: Message-ID: <12d1f4ee0704090513j5c288572l763487796afa5ba1@mail.gmail.com> On 4/3/07, Flavio S. Glock wrote: > > YAPC::SA Hackathon > > Durante o FISL/YAPC::SA (12 a 14 de abril em Porto Alegre) acontecerá > um "Hackathon", que será um encontro destinado a programação para o > desenvolvimento do Perl 6. > > Cada participante deverá trazer seu computador (de preferência com > wireless), com recomendação de 512MB ram ou mais. > O software recomendado é o seguinte: > - svk ou svn > - versão de desenvolvimento do Parrot, instalado pelo svn/svk - > http://svn.perl.org/parrot/ > - versão de desenvolvimento do Pugs, instalado pelo svn/svk - > http://svn.pugscode.org/pugs/ > - módulo v6.pm, instalado pelo CPAN > - editor configurado para utf8 > - outras dependências para compilar o software acima: gcc, ghc, etc. > > O tema final a ser desenvolvido durante o hackathon dependerá da > qualificação e interesse dos desenvolvedores que comparecerem. Por > enquanto, temos a confirmação do Lorn, Eden, Caio Marcelo e eu. > > Até lá! > - Flavio S. Glock Aí que inveja que eu estou de vocês... parece que só porque não vou este ano haverá um monte de evento interessantíssimo, e não só de Perl. Se tiver algum monge de fora passando por sampa neste período afim de tomar uma breja, é só me avisarem, eu costumo ser um bom anfitrião. Abraços, Solli M. Honório -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/79521808/attachment.html From joenio em gmail.com Mon Apr 9 07:56:13 2007 From: joenio em gmail.com (Joenio Costa) Date: Mon, 9 Apr 2007 11:56:13 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Compartilhar_conex=E3o_DBD=3A=3AOrac?= =?iso-8859-1?q?le_entre_processos_=28usando_XML=3A=3ATwig=29?= In-Reply-To: <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> References: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> Message-ID: <65934b450704090756g9a7dee7o7a7c49a107f53f4f@mail.gmail.com> Em 06/04/07, Luis Motta Campos escreveu: > On Apr 5, 2007, at 11:28 PM, Joenio Costa wrote: > > Olá Pessoal, > > > > Preciso analisar um XML e gravar os seus dados num banco Oracle, estou > > Esta lista é só desgraça mesmo... ;-) XML *E* Oracle, juntos... > ninguém merece. É melhor que a dupla HTML *E* Oracle! Acredite!!! > Aqui tem um problema conceitual. Talvez seja melhor usar um parser > incremental (DOM? SAX? Quem sabe o nome certo?), que vai armazenar > apenas um pedaço do seu arquivo no disco, e não vai detonar a sua > memória. É exatamente isto que eu tenho utilizando XML::Twig com twig_handlers: http://search.cpan.org/~mirod/XML-Twig-3.29/Twig.pm#Processing_an_XML_document_chunk_by_chunk > Você precisa mesmo usar o XML::Twig? Ele parece ser apenas > um toolkit construído sobre o XML::Parser, que me parece ser mais > interessante para o seu caso... Pode ser, mas nao gostaria de ter que mudar para o XML::Parser agora. > > Eu obtenho o seguinte erro ao executar algo parecido com o exemplo > > abaixo: > > DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on > > communication channel (DBD ERROR: OCISessionEnd) > > Você parece já ter encerrado esta conexão uma vez. > Pode me dar mais informação sobre este processo "extra" que você > está vendo? Isso é estranho para mim... Estou obtendo algumas boas informações com a dica do MDA, logo poderei lhe dar mais informações... Obrigado, -- Joenio Costa - Salvador Perl Mongers - Grupo de Usuário Perl de Salvador - Colibre - Cooperativa de Tecnologias Livres - PSL-BA - Projeto Software Livre Bahia From ptfzs em yahoo.com.br Mon Apr 9 07:57:27 2007 From: ptfzs em yahoo.com.br (Patty Silva) Date: Mon, 9 Apr 2007 11:57:27 -0300 (ART) Subject: [Cascavel-pm] Somar elementos numericos de um array Message-ID: <673168.77296.qm@web31308.mail.mud.yahoo.com> Pessoal.. tem como eu somar elementos numericos de um array? ex: @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); somar=1+2+4+1+3.... sem precisar do for? Obrigada []sss __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/6e25a4e7/attachment-0001.html From joenio em gmail.com Mon Apr 9 08:00:08 2007 From: joenio em gmail.com (Joenio Costa) Date: Mon, 9 Apr 2007 12:00:08 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Compartilhar_conex=E3o_DBD=3A=3AOrac?= =?iso-8859-1?q?le_entre_processos_=28usando_XML=3A=3ATwig=29?= In-Reply-To: <42dcdd750704060620i7ae3eddei1a013707abdcd271@mail.gmail.com> References: <65934b450704051428h22addd47p248fc8a0eabd4a85@mail.gmail.com> <66E765C6-D65C-4F41-A27B-3465FB476F45@yahoo.co.uk> <42dcdd750704060620i7ae3eddei1a013707abdcd271@mail.gmail.com> Message-ID: <65934b450704090800g2cde2c1bufe0fd05d0a11ccb3@mail.gmail.com> Hummn... Acho que essas dicas irão salvar meu dia, estou colhendo boas informações com elas. Por enquanto já tenho confirmação que o problema é mesmo o fork criado pelo XML::Twig, mas ainda não sei em que momento e local isto está ocorrendo... "trace(1), trace(2), irei até o trace(15) se precisar... " :-) Obrigado MDA! Em 06/04/07, Marco A P D'Andrade escreveu: > Fala Joenio! > > Assim como o Champs, eu tive problemas similares a muito tempo atras... > > Lembro que minha solução foi redefinir a função de disconnect (ou auto > destroy) do DBI para evitar isso, mas na mesma situação... eu tinha um > fork explicito... > > Para tirar a dúvida se este é o seu caminho, causado pelo fork uma boa > alternativa, ao meu ver é o TRACE. Algumas dicas para verificação > rápida estão descritas no DBI: > > Conceito e niveis de trace > http://search.cpan.org/~timb/DBI-1.54/DBI.pm#TRACING > > Habilitando com o uso de variaveis de ambiente > http://search.cpan.org/~timb/DBI-1.54/DBI.pm#DBI_TRACE > > > Sds, > Marco Antonio > > Em 06/04/07, Luis Motta Campos escreveu: > > On Apr 5, 2007, at 11:28 PM, Joenio Costa wrote: > > > Olá Pessoal, > > > > > > Preciso analisar um XML e gravar os seus dados num banco Oracle, estou > > > > Esta lista é só desgraça mesmo... ;-) XML *E* Oracle, juntos... > > ninguém merece. > > > > > utilizando XML::Twig com parametro twig_handlers para fazer o parser > > > do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita > > > memória caso eu não utilize o parametro twig_handlers. Não encontrei > > > na documentação do XML::Twig mas notei que ao utilizar esse parametro > > > é criado um processo filho, e é isto que esta causando problemas com > > > minha conexão com o Oracle. > > > > Aqui tem um problema conceitual. Talvez seja melhor usar um parser > > incremental (DOM? SAX? Quem sabe o nome certo?), que vai armazenar > > apenas um pedaço do seu arquivo no disco, e não vai detonar a sua > > memória. Você precisa mesmo usar o XML::Twig? Ele parece ser apenas > > um toolkit construído sobre o XML::Parser, que me parece ser mais > > interessante para o seu caso... > > > > > Eu obtenho o seguinte erro ao executar algo parecido com o exemplo > > > abaixo: > > > DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on > > > communication channel (DBD ERROR: OCISessionEnd) > > > > Você parece já ter encerrado esta conexão uma vez. > > Pode me dar mais informação sobre este processo "extra" que você > > está vendo? Isso é estranho para mim... > > > > > -------- > > > > > > use DBI; > > > use XML::Twig; > > > > > > my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass'); > > > my $sth = $dbh->prepare(" > > > INSERT INTO table (col1, col2, col3) > > > VALUES (123, ?, ?) > > > "); > > > my $twig = XML::Twig->new( > > > twig_handlers => { PIT => sub { > > > my ($t, $product) = @_; > > > my $descricao = $product->first_child('pitName')->att('name'); > > > my $preco = $product->first_child('pitPrice')->att('price'); > > > $sth->bind_param(1, $descricao); > > > $sth->bind_param(2, $preco); > > > $sth->execute(); > > > $sth->finish(); > > > $t->purge; > > > }} > > > ); > > > $twig->parseurl('file:///home/joenio/data/produtos.xml'); > > > $twig->purge; > > > $dbh->disconnect(); > > > > > > ----- > > > > > > Alguem já enfrentou situação parecida? > > > > Quando eu tive este erro, tinha fork() explícito envolvido. > > Mas faz muito tempo e muitas versões do DBI atrás. > > Talvez isso já não seja mais a causa do seu problema. > > Tente por favor conseguir mais informação sobre este processo > > "extra" que você mencionou. > > Putamplexos! > > > > -- > > Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer, > > Perl fanatic evangelist, and amateur {cook, photographer} > > > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- Joenio Costa - Salvador Perl Mongers - Grupo de Usuário Perl de Salvador - Colibre - Cooperativa de Tecnologias Livres - PSL-BA - Projeto Software Livre Bahia From kuntzzz em gmail.com Mon Apr 9 05:10:28 2007 From: kuntzzz em gmail.com (=?ISO-8859-1?Q?=22Iber=EA_O=2E_Kuntz_de_Souza=22?=) Date: Mon, 09 Apr 2007 09:10:28 -0300 Subject: [Cascavel-pm] Somar elementos numericos de um array Message-ID: <461A2D34.5090104@gmail.com> Qual problema com o for?! @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); $soma += $_ for @teste; # apenas isso From donatoaz em gmail.com Mon Apr 9 08:22:44 2007 From: donatoaz em gmail.com (Donato Azevedo) Date: Mon, 9 Apr 2007 12:22:44 -0300 Subject: [Cascavel-pm] duvida relacionamento dbix-class Message-ID: <1746e3e30704090822o6f8b8aceycbf95e74eebf30b9@mail.gmail.com> para o pessoal da lista que usa o dbix-class eu tenho a seguinte estrutura: package MyTasks::Schema::SupportRequest; MyTasks::Schema::SupportRequest->has_many("related_tasks", "MyTasks::Schema::Task", "support_request_id" ); MyTasks::Schema::Task; MyTasks::Schema::Task->has_many('task_users' => 'MyTasks::Schema::TaskUser', 'task_id'); MyTasks::Schema::Task->many_to_many('users' => 'task_users', 'user'); package MyTasks::Schema::TaskUser; MyTasks::Schema::TaskUser->belongs_to('user', 'MyTasks::Schema::User', 'user_id'); eu preciso obter a partir de MyTasks::Schema::SupportRequest uma lista usuarios associados, ou seja, relacionar MyTasks::Schema::SupportRequest com MyTasks::Schema::User atraves de MyTasks::Schema::Task. alguem tem alguma ideia de como eu posso fazer isto? desde já, obrigado! -- Donato Azevedo From igor.sutton em gmail.com Mon Apr 9 08:27:51 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Mon, 9 Apr 2007 16:27:51 +0100 Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <673168.77296.qm@web31308.mail.mud.yahoo.com> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> Message-ID: <3FAE9D07-4CD0-487A-BF34-8ED7A598BF07@gmail.com> On 2007/04/09, at 15:57, Patty Silva wrote: > Pessoal.. tem como eu somar elementos numericos de um array? > ex: > @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); > somar=1+2+4+1+3.... use List::Util qw(sum); my $resultado = sum(@teste); -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/33f6c784/attachment.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/33f6c784/attachment.bin From victor em bit-man.com.ar Mon Apr 9 08:30:44 2007 From: victor em bit-man.com.ar (=?ISO-8859-1?Q?=22V=EDctor_A=2E_Rodr=EDguez=22?=) Date: Mon, 09 Apr 2007 12:30:44 -0300 Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <673168.77296.qm@web31308.mail.mud.yahoo.com> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> Message-ID: <461A5C24.1090202@bit-man.com.ar> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Patty, Patty Silva wrote: > Pessoal.. tem como eu somar elementos numericos de um array? > ex: > @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); > somar=1+2+4+1+3.... > sem precisar do for? a map e seu amigo !! my $suma; map { $suma += $_ } @teste; - -- Víctor A. Rodríguez (http://www.Bit-Man.com.ar) Perl Mongers Capital Federal (http://cafe.pm.org/) GNU/Linux User Group - FCEyN - UBA (http://glugcen.dc.uba.ar/) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGGlwk34Jsi77jNMIRAqPnAJ4lJsCGafoarVVSMMPC8OEHGLOuVQCg6NOy 67ZkW4Epek8ehyuyhhJcaOs= =cAL2 -----END PGP SIGNATURE----- From ptfzs em yahoo.com.br Mon Apr 9 08:42:37 2007 From: ptfzs em yahoo.com.br (Patty Silva) Date: Mon, 9 Apr 2007 12:42:37 -0300 (ART) Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <461A5C24.1090202@bit-man.com.ar> Message-ID: <115284.61662.qm@web31304.mail.mud.yahoo.com> Qual seria o + eficiente? FOr, MAP ou o LIST?? Obrigada "Víctor A. Rodríguez" escreveu: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Patty, Patty Silva wrote: > Pessoal.. tem como eu somar elementos numericos de um array? > ex: > @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); > somar=1+2+4+1+3.... > sem precisar do for? a map e seu amigo !! my $suma; map { $suma += $_ } @teste; - -- Víctor A. Rodríguez (http://www.Bit-Man.com.ar) Perl Mongers Capital Federal (http://cafe.pm.org/) GNU/Linux User Group - FCEyN - UBA (http://glugcen.dc.uba.ar/) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGGlwk34Jsi77jNMIRAqPnAJ4lJsCGafoarVVSMMPC8OEHGLOuVQCg6NOy 67ZkW4Epek8ehyuyhhJcaOs= =cAL2 -----END PGP SIGNATURE----- _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/ec991812/attachment.html From igor.sutton em gmail.com Mon Apr 9 08:49:54 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Mon, 9 Apr 2007 16:49:54 +0100 Subject: [Cascavel-pm] [OFF] Bombril [Era: Re: Somar elementos numericos de um array] In-Reply-To: <461A5C24.1090202@bit-man.com.ar> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> <461A5C24.1090202@bit-man.com.ar> Message-ID: Olá, On 2007/04/09, at 16:30, Víctor A. Rodríguez wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Patty, > > Patty Silva wrote: >> Pessoal.. tem como eu somar elementos numericos de um array? >> ex: >> @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); >> somar=1+2+4+1+3.... >> sem precisar do for? > > a map e seu amigo !! > > my $suma; > map { $suma += $_ } @teste; Acredito que vale a pena estudar um pouco os módulos padrão do Perl, antes de fazer coisas como esta. Existem os módulos List::Util, Hash::Util e Scalar::Util. Aqui está a explicação da razão destes módulos existirem (trecho extraído de 'perldoc Scalar::Util': "Scalar::Util" contains a selection of subroutines that people have expressed would be nice to have in the perl core, but the usage would not really be high enough to warrant the use of a keyword, and the size so small such that being individual extensions would be wasteful. Agora vem o tradicional momento de perguntar 'se é tão simples, por que usamos um módulo ao invés de usar os equivalentes das maneiras x, y e z?'. 1. Fazem parte do core do Perl, sendo encontrados em todas as plataformas disponíveis em Perl; 2. São mais optimizados que o map, for e amigos; 3. Se o core do Perl for modificado, com certeza eles também serão modificados e se beneficiarão das optimizações presentes no Perl. Outro grande erro é a falta de informação -ou memória- que se tem em relação às diversas soluções modulares em Perl. Lembro-me quando foi tópico anteriormente sobre buscar arquivos em diretórios, e ninguém disse uma única vez 'File::Find', ou 'File::Find::Rule' ou 'File::Finder'. Mas o equívoco não foi somente aqui nesta lista, pois quando fiz uma apresentação[1] para o Lisbon.pm Tech Meeting, perguntei quantos dos presentes conheciam o File::Spec, o File::Path, os File::Find's e a resposta foi decepcionante. Minha dica aqui é: leiam a documentação dos módulos que vêm com o Perl, aprendam sobre eles, façam apontamentos como 'módulos que gostaria de usar' e coisas do tipo. Anotem em algum lugar o que eles fazem e consultem quando tiverem algum problema. Reservem alguns minutos do seu dia para ler o Perlmonks[2] e ver que tipo de dúvidas as pessoas tem e quais são as suas respostas. Ler sobre problemas diferentes podem dar-lhes soluções para os problemas que possuem. [1] http://lisbon.pm.org/slides/ [2] http://www.perlmonks.org/ -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/86c0c3d2/attachment-0001.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/86c0c3d2/attachment-0001.bin From kuntzzz em gmail.com Mon Apr 9 05:59:19 2007 From: kuntzzz em gmail.com (=?ISO-8859-1?Q?=22Iber=EA_O=2E_Kuntz_de_Souza=22?=) Date: Mon, 09 Apr 2007 09:59:19 -0300 Subject: [Cascavel-pm] Somar elementos numericos de um array Message-ID: <461A38A7.50104@gmail.com> > Qual seria o + eficiente? > FOr, MAP ou o LIST?? > Obrigada "use Benchmark" e faças os testes ;D Existem outros módulos para testar a eficiencia, de uma olhada na CPAN Iberê, From igor.sutton em gmail.com Mon Apr 9 08:58:52 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Mon, 9 Apr 2007 16:58:52 +0100 Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <115284.61662.qm@web31304.mail.mud.yahoo.com> References: <115284.61662.qm@web31304.mail.mud.yahoo.com> Message-ID: <52956EC8-CE9A-4FA6-A7AD-74A378188595@gmail.com> On 2007/04/09, at 16:42, Patty Silva wrote: > Qual seria o + eficiente? > Talvez você não tenha lido minha resposta antes, mas List::Util sum() é mais eficiente pois utiliza XS. use strict; use warnings; use List::Util qw(sum); use Benchmark qw(:all); my @numbers = ( 1 .. 1_000 ); cmpthese( -3, { 'map' => sub { my $result; map { $result += $_ } @numbers; }, 'for' => sub { my $result; $result += $_ for @numbers; }, 'sum' => sub { my $result = sum(@numbers); }, } ); Resultado: Rate map for sum map 5269/s -- -12% -97% for 5986/s 14% -- -96% sum 153292/s 2809% 2461% -- -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/874dde4b/attachment.bin From ptfzs em yahoo.com.br Mon Apr 9 09:00:57 2007 From: ptfzs em yahoo.com.br (Patty Silva) Date: Mon, 9 Apr 2007 13:00:57 -0300 (ART) Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <52956EC8-CE9A-4FA6-A7AD-74A378188595@gmail.com> Message-ID: <348557.1510.qm@web31311.mail.mud.yahoo.com> Relamente,,, a msg chegou atrasada :D Obrigada pela dica... nunca tinha usado use Benchmark qw(:all); Thanks.. :D Igor Sutton Lopes escreveu: On 2007/04/09, at 16:42, Patty Silva wrote: > Qual seria o + eficiente? > Talvez você não tenha lido minha resposta antes, mas List::Util sum() é mais eficiente pois utiliza XS. use strict; use warnings; use List::Util qw(sum); use Benchmark qw(:all); my @numbers = ( 1 .. 1_000 ); cmpthese( -3, { 'map' => sub { my $result; map { $result += $_ } @numbers; }, 'for' => sub { my $result; $result += $_ for @numbers; }, 'sum' => sub { my $result = sum(@numbers); }, } ); Resultado: Rate map for sum map 5269/s -- -12% -97% for 5986/s 14% -- -96% sum 153292/s 2809% 2461% -- -- Igor Sutton igor.sutton em gmail.com _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm __________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/6cbdb3dc/attachment.html From victor em bit-man.com.ar Mon Apr 9 09:21:22 2007 From: victor em bit-man.com.ar (=?ISO-8859-1?Q?=22V=EDctor_A=2E_Rodr=EDguez=22?=) Date: Mon, 09 Apr 2007 13:21:22 -0300 Subject: [Cascavel-pm] [OFF] Bombril [Era: Re: Somar elementos numericos de um array] In-Reply-To: References: <673168.77296.qm@web31308.mail.mud.yahoo.com> <461A5C24.1090202@bit-man.com.ar> Message-ID: <461A6802.70108@bit-man.com.ar> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Olá, Igor Sutton Lopes wrote: > Acredito que vale a pena estudar um pouco os módulos padrão do Perl, > antes de fazer coisas como esta. Existem os módulos List::Util, > Hash::Util e Scalar::Util. Aqui está a explicação da razão destes > módulos existirem (trecho extraído de 'perldoc Scalar::Util': ... > Minha dica aqui é: leiam a documentação dos módulos que vêm com o > Perl, aprendam sobre eles, façam apontamentos como 'módulos que > gostaria de usar' e coisas do tipo. Anotem em algum lugar o que eles > fazem e consultem quando tiverem algum problema. Reservem alguns > minutos do seu dia para ler o Perlmonks[2] e ver que tipo de dúvidas > as pessoas tem e quais são as suas respostas. Ler sobre problemas > diferentes podem dar-lhes soluções para os problemas que possuem. A pergunta da Patty foi : "Pessoal.. tem como eu somar elementos ... sem precisar do for?" O exemplo foi com o array do 10 posiçoes, no mais, então a usagem do List::Util acho não e a melhor opcão (se vocé tem o array maior então uma bõa opcão e usar Perlmonks, CPAN e outros). - -- Víctor A. Rodríguez (http://www.Bit-Man.com.ar) Perl Mongers Capital Federal (http://cafe.pm.org/) GNU/Linux User Group - FCEyN - UBA (http://glugcen.dc.uba.ar/) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGGmgC34Jsi77jNMIRAuZ+AJ9TISiuURlMLY4In++fbl8HrWDEMACfTKQd kw9jPoCDXIcYXsMkuOu7msA= =wbo+ -----END PGP SIGNATURE----- From daniel em ruoso.com Mon Apr 9 09:28:39 2007 From: daniel em ruoso.com (Daniel Ruoso) Date: Mon, 09 Apr 2007 17:28:39 +0100 Subject: [Cascavel-pm] [OFF] Bombril [Era: Re: Somar elementos numericos de um array] In-Reply-To: <461A6802.70108@bit-man.com.ar> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> <461A5C24.1090202@bit-man.com.ar> <461A6802.70108@bit-man.com.ar> Message-ID: <1176136119.3566.3.camel@localhost> Seg, 2007-04-09 às 13:21 -0300, "Víctor A. Rodríguez" escreveu: > A pergunta da Patty foi : "Pessoal.. tem como eu somar elementos ... sem > precisar do for?" > O exemplo foi com o array do 10 posiçoes, no mais, então a usagem do > List::Util acho não e a melhor opcão (se vocé tem o array maior então > uma bõa opcão e usar Perlmonks, CPAN e outros). Sem querer ser bruto mais já sendo.... WTF!!!! Me dê um único fundamento para o que você acabou de dizer!!!! daniel From edencardim em gmail.com Mon Apr 9 09:30:07 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 9 Apr 2007 13:30:07 -0300 Subject: [Cascavel-pm] YAPC::SA Hackathon In-Reply-To: <12d1f4ee0704090513j5c288572l763487796afa5ba1@mail.gmail.com> References: <12d1f4ee0704090513j5c288572l763487796afa5ba1@mail.gmail.com> Message-ID: <3de55ead0704090930x518b5da5tdc37bb88bac1be56@mail.gmail.com> On 4/9/07, Solli Honorio wrote: > Se tiver algum monge de fora passando por sampa neste período afim de tomar > uma breja, é só me avisarem, eu costumo ser um bom anfitrião. Eu vou passar em SP depois do FISL, chego domingo a noite e me mando na terça depois do almoço. Se quiser marcar alguma coisa, estou colado! (tem um porém, só vou poder beber Liber 0.0% porque fui proibi) -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From edencardim em gmail.com Mon Apr 9 09:30:38 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 9 Apr 2007 13:30:38 -0300 Subject: [Cascavel-pm] YAPC::SA Hackathon In-Reply-To: <3de55ead0704090930x518b5da5tdc37bb88bac1be56@mail.gmail.com> References: <12d1f4ee0704090513j5c288572l763487796afa5ba1@mail.gmail.com> <3de55ead0704090930x518b5da5tdc37bb88bac1be56@mail.gmail.com> Message-ID: <3de55ead0704090930u3fc750a9obf6611c6ac041fbe@mail.gmail.com> On 4/9/07, Eden Cardim wrote: > On 4/9/07, Solli Honorio wrote: > > Se tiver algum monge de fora passando por sampa neste período afim de tomar > > uma breja, é só me avisarem, eu costumo ser um bom anfitrião. > > Eu vou passar em SP depois do FISL, chego domingo a noite e me mando > na terça depois do almoço. Se quiser marcar alguma coisa, estou > colado! (tem um porém, só vou poder beber Liber 0.0% porque fui > proibi) err... proibido pelo meu médico. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From igor.sutton em gmail.com Mon Apr 9 09:34:09 2007 From: igor.sutton em gmail.com (Igor Sutton Lopes) Date: Mon, 9 Apr 2007 17:34:09 +0100 Subject: [Cascavel-pm] [OFF] Bombril [Era: Re: Somar elementos numericos de um array] In-Reply-To: <461A6802.70108@bit-man.com.ar> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> <461A5C24.1090202@bit-man.com.ar> <461A6802.70108@bit-man.com.ar> Message-ID: <87948ABF-35AE-4A40-B1BF-E823F04FC7F9@gmail.com> Oi, On 2007/04/09, at 17:21, Víctor A. Rodríguez wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Olá, > > Igor Sutton Lopes wrote: > >> Acredito que vale a pena estudar um pouco os módulos padrão do Perl, >> antes de fazer coisas como esta. Existem os módulos List::Util, >> Hash::Util e Scalar::Util. Aqui está a explicação da razão destes >> módulos existirem (trecho extraído de 'perldoc Scalar::Util': Acredito que devo colar denovo o trecho que foi apagado daqui: "Scalar::Util" contains a selection of subroutines that people have expressed would be nice to have in the perl core, but the usage would not really be high enough to warrant the use of a keyword, and the size so small such that being individual extensions would be wasteful. Acredito que eu não precise traduzir, mas: 1. estão no core do perl; 2. são problemas corriqueiros; 3. resolvem problemas comuns. Gostaria que *alguém* tivesse lido a página manual ou o código do List::Util para ver o que ela proporciona, antes de mais nada. > > ... > >> Minha dica aqui é: leiam a documentação dos módulos que vêm com o >> Perl, aprendam sobre eles, façam apontamentos como 'módulos que >> gostaria de usar' e coisas do tipo. Anotem em algum lugar o que eles >> fazem e consultem quando tiverem algum problema. Reservem alguns >> minutos do seu dia para ler o Perlmonks[2] e ver que tipo de dúvidas >> as pessoas tem e quais são as suas respostas. Ler sobre problemas >> diferentes podem dar-lhes soluções para os problemas que possuem. > > > A pergunta da Patty foi : "Pessoal.. tem como eu somar > elementos ... sem > precisar do for?" > O exemplo foi com o array do 10 posiçoes, no mais, então a usagem do > List::Util acho não e a melhor opcão (se vocé tem o array maior então > uma bõa opcão e usar Perlmonks, CPAN e outros). Certo. Então: use List::Util qw(sum); my @array = (1 .. 10); my $resultado = sum(@array); é pior que: my @array = (1 .. 10); my $resultado; $resultado += $_ for @array; Agora eu estou começando a entender a razão que *todo* o mundo que não conhece perl fica com medo de fazê-lo, argumentando que código perl é *write once*. Gostaria de ver os argumentos de quem afirma que a segunda opção -ou variação- é melhor do que a primeira, em aspectos de performance, legibilidade, etc. -- Igor Sutton igor.sutton em gmail.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/e37bfbc0/attachment-0001.html -------------- Próxima Parte ---------- Um anexo não texto foi limpo... Nome : PGP.sig Tipo : application/pgp-signature Tam : 186 bytes Descr.: This is a digitally signed message part Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/e37bfbc0/attachment-0001.bin From edencardim em gmail.com Mon Apr 9 09:43:30 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 9 Apr 2007 13:43:30 -0300 Subject: [Cascavel-pm] duvida relacionamento dbix-class In-Reply-To: <1746e3e30704090822o6f8b8aceycbf95e74eebf30b9@mail.gmail.com> References: <1746e3e30704090822o6f8b8aceycbf95e74eebf30b9@mail.gmail.com> Message-ID: <3de55ead0704090943l349d6676j115897c9bce563fe@mail.gmail.com> On 4/9/07, Donato Azevedo wrote: > para o pessoal da lista que usa o dbix-class > > eu tenho a seguinte estrutura: > > package MyTasks::Schema::SupportRequest; > MyTasks::Schema::SupportRequest->has_many("related_tasks", > "MyTasks::Schema::Task", "support_request_id" ); > > MyTasks::Schema::Task; > MyTasks::Schema::Task->has_many('task_users' => > 'MyTasks::Schema::TaskUser', 'task_id'); > MyTasks::Schema::Task->many_to_many('users' => 'task_users', 'user'); > > package MyTasks::Schema::TaskUser; > MyTasks::Schema::TaskUser->belongs_to('user', 'MyTasks::Schema::User', > 'user_id'); > > eu preciso obter a partir de MyTasks::Schema::SupportRequest uma lista > usuarios associados, ou seja, relacionar > MyTasks::Schema::SupportRequest com MyTasks::Schema::User atraves de > MyTasks::Schema::Task. > > alguem tem alguma ideia de como eu posso fazer isto? # $support_request contém uma instância de MyTasks::Schema::SupportRequest my @users = map { $_->users->all } $support_request->related_tasks->all; A depender do seu problema, você pode implementar isso dentro de um método na classe MyTasks::Schema::SupportRequest. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From donatoaz em gmail.com Mon Apr 9 09:53:45 2007 From: donatoaz em gmail.com (Donato Azevedo) Date: Mon, 9 Apr 2007 13:53:45 -0300 Subject: [Cascavel-pm] duvida relacionamento dbix-class In-Reply-To: <3de55ead0704090943l349d6676j115897c9bce563fe@mail.gmail.com> References: <1746e3e30704090822o6f8b8aceycbf95e74eebf30b9@mail.gmail.com> <3de55ead0704090943l349d6676j115897c9bce563fe@mail.gmail.com> Message-ID: <1746e3e30704090953t3247c7c0yeec07b909ac9f6bc@mail.gmail.com> On 4/9/07, Eden Cardim wrote: > > # $support_request contém uma instância de MyTasks::Schema::SupportRequest > my @users = map { $_->users->all } $support_request->related_tasks->all; > > > A depender do seu problema, você pode implementar isso dentro de um > método na classe MyTasks::Schema::SupportRequest. desta forma vai haver usuarios repetidos dentro da array, não? eu implementei da seguinte forma. Não ficou tão bom mas resolveu o problema: $self contem uma instancia de MyTasks::Schema::SupportRequest my @users; my %users; for my $rel_tasks ( $self->related_tasks ) { for ( $rel_tasks->users ) { push @users, $_ unless exists $users{$_->id}; $users{$_->id} = 1; } } return @users; -- Donato Azevedo From edencardim em gmail.com Mon Apr 9 10:47:09 2007 From: edencardim em gmail.com (Eden Cardim) Date: Mon, 9 Apr 2007 14:47:09 -0300 Subject: [Cascavel-pm] duvida relacionamento dbix-class In-Reply-To: <1746e3e30704090953t3247c7c0yeec07b909ac9f6bc@mail.gmail.com> References: <1746e3e30704090822o6f8b8aceycbf95e74eebf30b9@mail.gmail.com> <3de55ead0704090943l349d6676j115897c9bce563fe@mail.gmail.com> <1746e3e30704090953t3247c7c0yeec07b909ac9f6bc@mail.gmail.com> Message-ID: <3de55ead0704091047s7ff448ecjcd1891b405551f01@mail.gmail.com> On 4/9/07, Donato Azevedo wrote: > desta forma vai haver usuarios repetidos dentro da array, não? preguiça-- #eu deveria ter percebido que haveriam duplicações... Isso deve resolver: $self->result_source->schema->resultset('User')->search( { tasks.support_request_id' => $self->id }, { join => 'tasks', distinct => 1 } ); Já que você não forneceu a classe da tabela user, estou assumindo que o relacionamento many_to_many em MyTasks::Schema::User chama-se 'tasks'. -- Eden Cardim Instituto Baiano de Biotecnologia Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas Laboratório de Bioinformática -- "you seem to think that 'close enough' is close enough... please learn to be 'literal' around programming." merlyn - on irc.freenode.net#perl From acid06 em gmail.com Mon Apr 9 12:36:29 2007 From: acid06 em gmail.com (Nilson Santos Figueiredo Junior) Date: Mon, 9 Apr 2007 16:36:29 -0300 Subject: [Cascavel-pm] Somar elementos numericos de um array In-Reply-To: <461A5C24.1090202@bit-man.com.ar> References: <673168.77296.qm@web31308.mail.mud.yahoo.com> <461A5C24.1090202@bit-man.com.ar> Message-ID: <9a08c9b40704091236y49701a7o760e8ca8ac512b42@mail.gmail.com> On 4/9/07, "Víctor A. Rodríguez" wrote: > a map e seu amigo !! > > my $suma; > map { $suma += $_ } @teste; Não, nesse caso, o map{} é tudo menos seu amigo. O map{} serve pra quando você tem um certo conjunto de valores e quer mapeá-los um a um em outro conjunto de valores. Por exemplo, quando você tem uma array de números e quer mapear em uma array de quadrados dos números: my @nums = (1..10); my @squares = map { $_**2 } @nums; No caso em questão, quer se realizar uma operação e não um mapeamento. Então, se for ser feita sem a utilização de módulos, a maneira mais apropriada seria: my $soma = 0; $soma += $_ for @nums; -Nilson Santos F. Jr. From listas em flavioribeiro.com Mon Apr 9 13:21:21 2007 From: listas em flavioribeiro.com (=?ISO-8859-1?Q?Fl=E1vio_Ribeiro?=) Date: Mon, 9 Apr 2007 17:21:21 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Boa_IDE_e_outras_d=FAvidas?= Message-ID: <873b128e0704091321gce5a478vedd99b9457246902@mail.gmail.com> Olá, Sou 'programador' python e atualmente preciso aprender perl pra usar no trabalho. Gostaria de que me indicassem uma boa IDE, e alguma comunidade ou documentação boa como a do pythonbrasil.com.br. []s -- Flávio Ribeiro listas em flavioribeiro.com www.flavioribeiro.com (83) 9981.4441 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070409/a8647e02/attachment.html From andre.garcia.carneir em terra.com.br Mon Apr 9 14:23:22 2007 From: andre.garcia.carneir em terra.com.br (=?iso-8859-1?b?QW5kcukgR2FyY2lhIENhcm5laXJv?=) Date: Mon, 9 Apr 2007 18:23:22 -0300 Subject: [Cascavel-pm] [Spam] Somar elementos numericos de um array Message-ID: ---------- Cabeçalho original ----------- De: cascavel-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org Para: "Cascavel Perl Mongers" cascavel-pm em pm.org Cópia: Data: Mon, 9 Apr 2007 11:57:27 -0300 (ART) Assunto: [Spam] [Cascavel-pm] Somar elementos numericos de um array > Pessoal.. tem como eu somar elementos numericos de um array? > ex: > @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); > somar=1+2+4+1+3.... > sem precisar do for? > > > Obrigada > > []sss > #Jeito fácil de entender (não 'japeado') .... #! /usr/bin/perl -w use strict; # Primeiro mandamento Perl : use strict e ama a ti mesmo ... :-) my @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); my $sum = 0; foreach my $item(@teste){ $sum += $item; } print "\n SOMA: $sum\n"; Cheers! -- André Garcia Carneiro Developer(Perl/PHP) Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org From andre.garcia.carneir em terra.com.br Mon Apr 9 14:27:25 2007 From: andre.garcia.carneir em terra.com.br (=?iso-8859-1?b?QW5kcukgR2FyY2lhIENhcm5laXJv?=) Date: Mon, 9 Apr 2007 18:27:25 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?=5BSpam=5D__=5BOFF=5D_Bombril_=5BEra?= =?iso-8859-1?q?=3A_Re=3A_Somar_elementos_numericos_de_um_array=5D?= Message-ID: ---------- Cabeçalho original ----------- De: cascavel-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org Para: victor em bit-man.com.ar,"Cascavel Perl Mongers" cascavel-pm em pm.org Cópia: Data: Mon, 9 Apr 2007 16:49:54 +0100 Assunto: [Spam] [Cascavel-pm] [OFF] Bombril [Era: Re: Somar elementos numericos de um array] > Olá, > > On 2007/04/09, at 16:30, Víctor A. Rodríguez wrote: > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Patty, > > > > Patty Silva wrote: > >> Pessoal.. tem como eu somar elementos numericos de um array? > >> ex: > >> @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9); > >> somar=1+2+4+1+3.... > >> sem pre