sexta-feira, 14 de outubro de 2005

Quine: Self-reproducing programs

Last week, I saw something that is, at least, an excentricity. There is some of Logic and Computer Theory inside of such things, but not necessarily you must to read a lot of Mathematics theory books to understand it. And that is the funniest thing in see this examples!
Tell me, what the program below, written in C language, is wanting to do? It seems, at first, not so difficult...

char a[] = "int main(){ printf(b,34,a,34,10,34,b,34,10,10,a,10); }";
char b[] = "char a[] = %c%s%c;%cchar b[] = %c%s%c;%c%c%s%c";

int main(){ printf(b,34,a,34,10,34,b,34,10,10,a,10); }
We can see two variable declarations. Next thing we observe is that these variables are characters arrays. And the content of the first variable (named "a"), seems to follow a familiar syntax, which computer hackers frequently uses for writing computer programs. So, the application above is doing only one thing: it is writing itself! It is interesting to pay attention to how these great programmers deals with the high an lows of the languages... (such as, variable scope, the time between the instant the variables starts living, and the moment the variable would not be referenced anymore). Maybe another example, only to show how it works... (coded using the Python language)

a = ['print "a =", a', 'for s in a: print s']
print "a =", a
for s in a: print s
(Author: Omar Antolin - omar@galois.fciencias.unam.mx)
Or another great quine example in C language (it is not only a self-printing, it is a palindrome too!):

/**/char q='"',*a="*//**/char q='%c',*a=%c%s%c*/};)b(stup;]d[b=]d-852
[b)--d(elihw;)q,a,q,q,2+a,b(ftnirps{)(niam;031=d tni;]952[b,",b[259];
int d=130;main(){sprintf(b,a+2,q,q,a,q);while(d--)b[258-d]=b[d];puts(
b);}/*c%s%c%=a*,'c%'=q rahc/**//*"=a*,'"'=q rahc/**/
Author: Dan Hoey

Maybe you think that it is not a great problem. But, can you make a program that can write its own contents? We may consider a major difficulty: you will write a program, and you will try to not do it so difficulty, because you want to print all source code on the screen - as much code you write, much more work you will have to print the contents. Remembering that you must to write everything, including all commands and instruction used to print and to present results on the screen! :)
Self-reproducing programs are not a so recent idea, and a very famous phylosopher and logician, called Willard van Orman Quine (1908-2000). He made many contributions to the phylosophy of language and phylosophy of Logic. He made a lot of works, such an improved normalization methodology enabling better optimization of SQL queries, for example. And was he that give his name to the concept of a program that can reproduce itself, or its own source code...
You can see a lot of references (and source codes) in this site, illustrating "quine": http://www.nyx.net/~gthompso/quine.htm

quarta-feira, 5 de outubro de 2005

O Governo querendo dar armas para os bandidos???

Pois é, esse é mais um assunto que dá o que falar. E não é por menos...
Uma coisa estranha aconteceu a poucos meses, o Governo quer que nós votemos "sim" no plebiscito. Para quê será???
Pra começar, tal referendo nem deveria existir. Pessoalmente, sou contra essa política de querer colocar uma responsabilidade tão complexa nas mãos de pessoas como nós, que não somos especialistas em Segurança Pública. Mas, sim, é verdade, eu voto NÃO! Eu sou contra o desarmamento!!! Porquê?
Existem várias razões para isso: imagine o que pensará o bandido que costuma assaltar à mão armada, depois que souber que as casas já não podem guardar armas de fogo? O que antes era permitido (ter uma arma em casa), depois que essa campanha da Globo der certo (o que, infelizmente, está acontecendo... a Globo sempre teve uma grande influência com as massas...), se tornará algo proibido. Sim, você acha inseguro ter uma arma em casa, só que o bandido acha que é SEGURO pra ele você NÃO TER!!! Ou seja, se você não tiver uma arma em casa, por opção, ou porque você resolveu doá-la ao Governo (e lógico que o bandido vai conseguir se convencer disso com mais facilidade se esse referendo for votado com inúmeros SIM), o bandido vai se sentir mais seguro de entrar nela, roubar os seus pertences, talvez te agredir gravemente (na verdade, MUITO gravemente... ou você acha que os bandidos vão passar a andar desarmados depois dessa lei?). E os bandidos vão se sentir mais seguros porque SABE que você PODE (por ser um bom cidadão...) não guardar uma arma.
Eu acho que o governo resolveu tocar numa ferida que já demorava a cicatrizar, e que agora foi reaberta. Antes, nós simples cidadãos, poderíamos ter essa arma tão efetiva que é a dúvida: se o ladrão não sabe que você tem arma em casa, ele não vai dar tiro no escuro. Caso contrário, para eles às vezes é até vantajoso apostar nisso e ver no que dá... Talvez, para benefício da maleficência, ele leve embora o seu aparelho de DVD e a sua vida.
Estão tirando um benefício pacífico, que é nosso, de nos defender com uma arma incólume, que é a dúvida, plantada com cuidado nas cabeças dos marginais que ficam de plantão em frente de tua casa, e que agora vão olhar com mais cuidado a quantas andam esse processo do Governo de derrubada da Segurança Pública...
Sou contra as armas, mas talvez seja uma boa idéia comprar uma.
Seria uma idéia melhor ainda que TODOS pensassem em comprar armas agora, antes que não seja mais possível (quem sabe...). Talvez você nem queira comprar mesmo uma arma, mas seria bom que pensasse, digamos, 5 minutos em comprar uma.
Se todos pensassem nisso, a gente consiga plantar de novo na cabeça dos marginais que o nosso lar, o lugar onde você convive, com a sua família, seus pais, sua mulher e seus filhos, é sagrado e inviolável, e que, caso contrário, a vida do próprio bandido estará em risco.
Eu prefiro esse benefício da dúvida amargando bem ácida no estômago dos marginais. É por isso que eu sou contra o desarmamento, e a favor da vida e do respeito.
Uma bela e concisa matéria na Veja: http://veja.abril.com.br/051005/p_076.html
Não confiem no Governo, o Governo não confia em vocês. Quem proíbe a venda de armas e impede que pessoas de bem a possuam, é porque não confia na força e na inteligência da população. Cuidem disso antes que seja tarde.