acs is currently certified at Journeyer level.

Name: Alan Silva
Member since: 2003-08-05 19:07:54
Last Login: 2008-04-30 17:53:15

FOAF RDF Share This

Homepage: http://www.fzort.org/jumpi/

Notes: I'm a developer and sys/security admin and one of founders and member of NetBSD-BR Group, who divulges the use of NetBSD in Brazil... I'm a little grasshopper too... codename by mpr... or fzort and my nick is jumpi... :D

Projects

Recent blog entries by acs

Syndication: RSS 2.0

11 Jan 2008 »

O Python e a sua misteriosa otimização de chamada de função


Continuando a saga de Fibonacci, eu e meu amigo Marcio fizemos algumas correções e tcharam… devo reconhecer… o script python quando faz chamada de função consegue ser incrivelmente mais rápido que o script perl, também fazendo chamada de função. Porem descobrimos uma coisa muito bizarra e que nos chamou a atenção enquanto realizávamos os testes e por isso foco a minha atenção em relação ao teste feito com python…

Rodando o seguinte código, feito inline em python:

#!/usr/bin/python
for i in range(1000000):
a, b = 0, 1
for j in range(71):
a, b = b, a+b
return b

Profiling do código com chamada de função:


alan@desenv:~$ python -m cProfile fibo.py
1000005 function calls in 86.083 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 86.083 86.083 :1()
1 57.280 57.280 86.083 86.083 fibo.py:7()
1 0.000 0.000 86.083 86.083 {execfile}
1 0.000 0.000 0.000 0.000 {method ‘disable’ of ‘_lsprof.Profiler’ objects}
1000001 28.802 0.000 28.802 0.000 {range}

E agora o mesmo código, só que realizando chamada de função:


#!/usr/bin/python
import sys
#import psyco
def fib(n):
a, b = 0, 1
for j in range(n):
a, b = b, a+b
return b

x = int(sys.argv[1])
y = int(sys.argv[2])
for i in range(x):
fib(y)

Profiling do código com chamada de função:


alan@desenv:~$ python -m cProfile fibo.py
2000005 function calls in 35.174 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 35.174 35.174 :1()
1 4.785 4.785 35.173 35.173 fibo.py:6()
1000000 25.671 0.000 30.327 0.000 fibo.py:6(fib)
1 0.000 0.000 35.174 35.174 {execfile}
1 0.000 0.000 0.000 0.000 {method ‘disable’ of ‘_lsprof.Profiler’ objects}
1000001 4.718 0.000 4.718 0.000 {range}

Ou seja, tirando o tempo de overhead do profile, o programa que realiza a chamada de função, consegue ser incrivelmente mais rápido que o programa inline, mesmo efetuando mais chamadas.

Bem… achei isso muito bizarro, sendo que, teoricamente o esperado era que o inline fosse mais rápido. Bem, se alguém puder me explicar isso eu agradeço bastante, pois a única conclusão que consegui tirar ate aqui, e que o python, mesmo sem usar otimizadores, vide psyco, já tem uma otimização natural de funções, o que torna as chamadas de função extremamente rápidas, porem eu queria entender essa otimização de chamada de funções, pois gostei bastante e fiquei interessado em saber como tal feature funciona.

E agora a minha conclusão em relação ao que eu aprendi com esse teste ate aqui, se você precisa fazer um programa bem rápido para testar qualquer coisa, use perl, resolve na maioria dos casos, agora se você precisa de um teste mais elaborado, com chamada de função, vou começar a pensar em usar o python…

Syndicated 2008-01-11 03:06:23 from Jumpi's Notepad

9 Jan 2008 »

Fibonacci Series Test (Perl and Python)


Post in portuguese about my tests with Fibonacci Series using perl and python…

Esses dias, para ser mais exato, na segunda-feira, o meu colega de trabalho marcio a.k.a. tio estava falando sobre a sua escolha para criar um projeto de site que ele esta fazendo e para testar ele implementou o algorítimo de Fibonacci usando C, C++, Ruby e Python e mediu o tempo utilizando o comando time… C e C++ entraram na lista so para ele poder criar um parâmetro. E então ele decidiu escolher pelo python devido ao tempo, porem, ele esqueceu do nosso velho amigo Perl e eu disse a ele que perl executava o mesmo teste mais rápido que python e ele me desafiou, ou seja, estou fazendo esse teste para demonstrar que o nosso velho amigo perl pode ser bom, lembrando que não sou um bom programador python, mais tentei deixar o código o mais próximo possível entre ambas as linguagens para que nenhum boi-corneta (como diria o meu amigo Caloni, gostei da expressão, por isso a utilizei aqui também) venha se espantar aqui…

Bem… para a realização desse teste, utilizei o meu laptop, um macbook com perl 5.8.8 e python 2.5.1 como podem ver abaixo:

[jumpi@Painkiller]~/Sources: perl -v
This is perl, v5.8.8 built for darwin-thread-multi-2level (with 1 registered patch, see perl -V for more detail)
Copyright 1987-2006, Larry Wall
[jumpi@Painkiller]~/Sources: python -V Python 2.5.1

Para fazer os testes, utilizei uma versão iterativa do algorítimo de Fibonacci (afinal de contas, poderia apelar para a recursiva, porem achei melhor utilizar essa para o teste), segue abaixo o código:

Em perl:

#!/usr/bin/perl  use strict; my $n = shift; my ($a,$b)=(1,2);

print "$a\n$b\n";

for(1..$n-2) {

  ($a,$b) = ($b,$a+$b);

  print "$b\n"

}

Em python:

#!/usr/bin/python import sys def fib(n):

 a, b = 0, 1

 for i in range(n):

 	print b

 	a, b = b, a+b n = int(sys.argv[1])

fib(n)

E executei ambos os códigos, fazendo 10000 iterações e medindo o tempo usando o comando time, onde obtive o seguinte resultado:

Em perl:

real	0m0.188s

user	0m0.054s

sys	0m0.047s

Em python:

real	0m10.778s

user	0m8.104s

sys	0m0.231s

Well… ai esta a prova, pelo que posso ver o nosso velho amigo rabugento perl terminou a sua tarefa em um tempo menor que o python, pelo que posso enxergar, 10x mais rápido???

Brincadeiras a parte, através desse teste simples, podemos perceber que o perl, mesmo estando ultrapassado na visão de muitos, ainda executa muito bem o serviço, logico que poderíamos utilizar n técnicas em ambas as linguagens. Porem, como eu disse no principio, tentei simplificar ao máximo para não criar vantagens para nenhum dos lados.

Hey tio, esse post vai em sua homenagem… se quiser, te ajudo a utilizar perl com catalyst para criar o site…

Brincadeirinha… ;D

Syndicated 2008-01-09 04:07:53 from Jumpi's Notepad

6 Jan 2008 »

The Practice of Perl II


Upon requesting made and continuing my posts about perl practicality, show here a very elaborated code, extract from classic book that I have reading again, Pike & Kerninghan Practice of Programming.

Yes, this book have a very interesting example of Markov Chains in perl.

For those that dont knowing about Markov Chains, this is a particular case in stochastic process, where previous states are irrelevant for prediction of following states, since that actual state is knowing. This technique is very used for generate random text, as in the book example, but, the author uses only cases that envolve two-word prefixes, for test effects.

The code used in the example, written in perl language:

$MAXGEN = 10000;
$NONWORD = “\n”;
$wl = $w2 = $NONWORD;
while (<>) {
foreach (split) {
push(@{$statetab{$w1}{$w2}}, $_);
($w1, $w2) = ($w2, $_);
}
}
push(@($statetab{$w1}{$w2}}, $NONWORD);
$w1 = $w2 = $NONWORD;
for ($i = 0; $i < $MAXGEN; $i++) {
$suf = $statetab{$w1}{$w2};
$r = int(rand @$suf);
exit if(($t = $suf->[$r]) eq $NONWORD);
print “$t\n”;
($w1, $w2) = ($w2, $t);
}

And more impressive is what the result is make of simple and rapid form, very rapid, in the final of chapter has a performance table where perl losing only for C implementation, other implementations are written in Java, C++/STL/Deque, C++/STL/List and AWK, being that have 150 lines of code in C versus only 18 in perl.

Well, I dont make apologies to perl, because I love C too, but, as the author says and define in the final of paragraph, scripting languages (perl, in this case) are a good choice for experimental programming and making prototypes, and I conclude, for rapid tasks and tests, perl is again language of my choice.

Syndicated 2008-01-06 20:43:18 from Jumpi's Notepad

11 Dec 2007 »

Exemplo didatico sobre tratamento de exceção

Um dos exemplos mais didáticos que eu ja vi sobre tratamento de exceções foi dado hoje aqui na empresa onde trabalho, estávamos na cozinha, no coffee time, quando começamos a discutir sobre tratamento de exceções e eis que o meu colega de trabalho, Marcio Andrey a.k.a. tio nos faz a demonstração de como ele explicou tratamento de exceções a outro colega aqui da empresa que estava com duvidas no entendimento do tratamento de exceções e precisava de ajuda para fazer a sua prova.

Segue abaixo o exemplo de código (com permissão do autor, e algumas correções para nao divulgar nomes, of course…):

Pessoa individuo = new Pessoa(”individuo”);

Pessoa gostosa = new Pessoa(”uma gbr gostosa”);

Cerveja cerveja = new Cerveja(”Skol”); //variável antes do try que precisei

individuo.tomaBreja(cerveja);

try {

individuo.pegaNaCintura(gostosa);

individuo.pegaNoPeitinho(gostosa);

individuo.chupaPeitinho(gostosa);

Camisinha johnson = new Camisinha(”Lubrificada”); // precisei de uma variável local aqui.

individuo.poeCamisinha(johnson); // usei a variável local aqui.

individuo.comeASafada(gostosa);

}
catch(TapaNaCaraException e) {
System.out.println(”a gbr tentou te dar um tapa na cara e te deu uma escroteada”);
}
catch(TeEmpurrouException e) {
System.out.println(”a gbr te empurrou e te deu uma escroteada”);
}

catch(TeEmpurrouException e) {
System.out.println(”a gbr te deu uma escroteada”);
}
finally {
individuo.vaiEmbora();
}

Quer exemplo mais didático que esse??? Depois dessa o individuo nunca mais vai se esquecer como fazer uso correto do try/catch…. :D

Meus sinceros agradecimentos ao tio por contribuir com esse post tao instrutivo e ao mesmo tempo engraçado!!! :D

Sorry for Advogato’s people by wrote this in portuguese, I need wrote this and any questions about I wrote, send me a message and I explain :D

Syndicated 2007-12-11 19:35:13 from Jumpi's Notepad

3 Oct 2007 »

The Excel 2007 Bug

About the bug that affected Excel 2007, I think that is very hard to work with floating point calculations and approximation is very complex and find a problem in logic of this is a true nightmare!!!!

The summary of problem: Excel 2007 store six floating point numbers using binary representation between 65534.99999999995 and 65535, and dont store six between 65535.99999999995 and 65536 and this numbers are the cause of this problem.

I work with arbitrary precision in my scientific intiation and using libraries for care of this part for me, because of difficulties that involve the manipulation of calculate numbers that need arbitrary precision. IMHO, working with type of development demands very attention and very pacience.

The two links have a good explanation of this problem… Its a good lecture!!!

The Excel Bug Explanation by Good Math, Bad Math Blog
The Excel Bug Explanation for Mathematica Developers Blog

See ya people and have a good fun!!!

In play: Emerson, Lake and Palmer - Works (Black) Vol. 1 - 07: The Enemy God

Syndicated 2007-10-03 20:54:32 from Jumpi's Notepad

39 older entries...

 

acs certified others as follows:

  • acs certified mpr as Journeyer
  • acs certified acs as Apprentice
  • acs certified lukem as Master
  • acs certified richdawe as Journeyer
  • acs certified rms as Master
  • acs certified Fyodor as Master
  • acs certified acme as Master
  • acs certified Akira as Journeyer
  • acs certified sye as Journeyer
  • acs certified fzort as Journeyer
  • acs certified candice as Apprentice
  • acs certified rootsh as Apprentice
  • acs certified fxn as Journeyer
  • acs certified dfenwick as Journeyer
  • acs certified lerdsuwa as Journeyer
  • acs certified bi as Journeyer
  • acs certified ncm as Master
  • acs certified marcioandreyoliveira as Journeyer

Others have certified acs as follows:

  • mpr certified acs as Apprentice
  • acs certified acs as Apprentice
  • richdawe certified acs as Apprentice
  • sye certified acs as Journeyer
  • dfenwick certified acs as Apprentice
  • fxn certified acs as Apprentice
  • lerdsuwa certified acs as Apprentice
  • fzort certified acs as Apprentice
  • ncm certified acs as Apprentice
  • marcioandreyoliveira certified acs as Journeyer

[ Certification disabled because you're not logged in. ]

New Advogato Features

FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

X
Share this page