2007-12-29

Feliz 2008!

Ewan McGregor

Quero fechar o ano bem aqui nas Reflexões de Monte Gasppa e Giulia C. e, como tenho estado totalmente sem cabeça para escrever, a última postagem será uma sugestão dupla de filmes. =)

Primeiro o ótimo Big Fish, 2003, que conta a busca de Will Bloom pela verdade sobre a vida de seu moribundo pai, Ed Bloom, contador de histórias fantásticas que só fizeram seu filho se afastar.

Claro, o filme é bem mais que isso. É envolvente acompanhar a história de vida de Ed Bloom, um personagem magnífico e carismático.

Uma coisa que se pode dizer sobre Eduard Bloom é que ele é um ser social.


Outro filme que sugiro é um pouquinho mais antigo: Seven Faces of Dr. Lao, 1964.

Um circo misterioso cheio de maravilhas chega à cidade, com personagens estranhos que levam as pessoas a repensar suas próprias vidas.

Fica então minha recomendação: muita birita ou muitos fogos – as duas coisas não! –, roupa branca ou qualquer outra coisa em que acredite, uva, lentilha… e alugue esses filmes para ajudar a pensar um pouco em como levar a vida daqui pra frente!

[]'s
Cacilhas, La Batalema

2007-12-24

Natal de novo?

É isso aí…

Véspera de Natal de novo: a data onde exaltamos o Capitalismo, o Consumismo e as cores da Coca-Cola – e esquecemos de comemorar a Cristandade, o Amor e a Caridade.

A data onde damos e ganhamos presentes, gastamos um monte de dinheiro, comemos panetone e um monte de comidas quentes de inverno em pleno verão.

Lembrem-se de pelo menos dar um abraço em seus amigos e parentes e dizer «eu amo você».

Lembrem-se também que há pessoas dormindo na rua, que não terão ceia nem presente.

[]'s
Cacilhas, La Batalema

2007-12-16

Sou fã de Harold Crick

Stranger than Fiction
Uma das estréias desse mês na HBO é Stranger than Fiction.

É uma comédia romântica tendendo à tragédia, com um leve toque de magia, onde um fiscal da receita obsessivo chamado Harold Crick aprende a viver a vida devido a uma súbita esquisofrenia. No entanto a voz que Harold ouve não o manda fazer coisas, mas narra sua vida.

O diferencial da trama é que a voz é real: Harold é personagem de um romance e a narradora/escritora prevê sua eminente morte.

A beleza do conto é a transição do herói de uma entediante e vazia vida de números para uma vida punk plena de emoções intensas.

Recomendo esse filme.

[]'s
Cacilhas, La Batalema

2007-12-08

Resposta às perguntas que as mulheres adorariam fazer

Baal Gente,

Recebi uma mensagem muito engraçada, tipo um bate-bola, onde a mulher pergunta e o homem responde, mas as respostas são hilárias:

Resposta às perguntas que as mulheres adorariam fazer mas não fazem ou até fazem, mas nós não respondemos a verdade. Simplificamos (ainda mais) o universo masculino.

01: Por que vocês mijam fora do vaso?
R.: Se você olhasse bem, veria que o orifício peniano não é redondo, o jato nem sempre vai para onde pau está apontado. Além disso, as vezes esse buraquinho fica meio grudado, gerando uma dispersão de jatos.

02: Por que vocês sempre deixam um pentelho na borda do vaso?
R.: Marcar território…

03: Por que vocês nunca esfregam o clitóris da gente no lugar certo?
R.: Só de sacanagem…

04: Por que você não sabem onde fica o ponto G?
R.: Ponto o quê…???

04: Por que vocês adoram transar por trás?
R.: Para poder continuar assistindo TV e bocejar sem que vcs vejam.

05: Por que vocês pegam vídeo de sacanagem sem história?
R.: Pela sacanagem, ora!!! É como ver os gols do fantástico sem precisar assistir ao jogo todo.

06: Por que a fantasia dos homens é transar com a nossa melhor amiga?
R.: Na verdade, é com TODAS as suas amigas…

07: Por que os homens estão sempre com os músculos da bunda contraídos?
R.: Para não peidar quando a barriga fica batendo nas nádegas da parceira.

08: Por que vocês empurram a cabeça de gente pra baixo quando querem um boquete?
R.: Porque se pedir vocês não fazem.

09: Por que vocês querem ir pra cama no primeiro encontro?
R.: Objetividade…

10: Por que vocês ficam putos se a mulher não dá no primeiro encontro?
R.: Detestamos falta de objetividade.

11: Por que vocês vão embora logo depois de transar com a gente?
R.: Sempre passa alguma coisa legal na tv de madrugada…

12: Por que os homens acreditam quando a gente finge que goza?
R.: E só para vocês sentirem ao menos um prazer: o de nos enganar…

13: Por que vocês gostam mais de cerveja gelada que de mulher?
R.:
  1. Cerveja está sempre molhadinha.
  2. Cerveja não reclama quando estamos assistindo ao jogo.
  3. Cerveja não pede para a gente ver filmes tipo Love Story.
  4. Cerveja não tem mãe.
  5. Cerveja não olha para a gente com aquela cara de desprezo quando broxamos.
  6. Quando acabamos de beber a cerveja, podemos jogar ela fora.
  7. Cerveja não liga se a gente olha para outra cerveja. Entendeu?

14: Por que vocês gostam de ouvir que o pau de vocês é o máximo?
R.: E não é? Ainda mais para você, que não tem…

15: Por que vocês contam pros amigos que nos comeram?
R.: Metade do prazer está em contar…

16: Por que os homens não reparam que estamos de lingerie nova?
R.: Vocês vivem reclamando que a gente só liga para a beleza externa.

17: Por que os homens ficam cheios de dedos quando a gente pede um tapa na hora da transa?
R.: O que a gente gosta mesmo é bater porque quer e não porque vocês pedem…

18: Por que os homens gostam de olhar para outras mulheres na rua?
R.: Você acha que só você é gostosa…?

19: Por que os homens avisam quando vão gozar?
R.: Se você não tomou anticoncepcional o problema será todo seu…

20: Por que os homens gostam de ver a gente chupando o pau deles?
R.: Vocês ficam tão bonitinhas…

21: Por que os homens gostam de chamar a gente de minha putinha?
R.: Pra lembrar que não temos que pagar…

22: Por que os homens usam aquelas cuecas zorba horríveis?
R.: São mais confortáveis, baratas e vocês gostam assim mesmo. Se a gente usasse cuequinha de seda, vocês desconfiariam. Ah, e elas nem sao tao feias assim, vai…

23: Por que os homens tem ciúmes dos nossos amigos homens?
R.: Porque eles só pensam em comer vocês… Aliás, todos nós somos assim.

24: Por que vocês seguram a base do pau na hora do boquete?
R.: Para ver se vocês lambem mais em cima, que é onde sentimos alguma coisa, e também pra evitar que vocês mordam.

25: Por que os homens gostam de ver nossos biquinhos arrepiados?
R.: Pra ver como o ar condicionado é forte.

26: Por que os homens adoram coçar o saco?
R.: É que nem arrotar e cuspir no chão, coisa de macho!

27: Por que vocês acordam de pau duro?
R.: Porque, em geral, sonhamos com outras mulheres.

28: Por que os homens se masturbam mesmo quando são casados ou namoram?
R.: Este é o segredo dos relacionamentos mais duráveis…

29: Por que os homens estão sempre ajeitando os pintos nas calças?
R.: Porque cada um tem a posição preferida e no decorrer do dia ele vai se deslocando, exigindo um imediato reposicionamento.

30: E por que, meu Deus, vocês sempre desarrumam os malditos tapetinhos do banheiro?
R.: Tapetinho arrumado é coisa de viado…


Agora sugiro um quiz!

Cada um dê suas próprias respostas nos comentários. Quem quiser responda com sinceridade, quem quiser fazer só piada, esteja a vontade. =D

[]'s
Cacilhas La Batalema

2007-11-20

CPMF

Baal Segue uma lista dos filhas-da-puta políticos que votaram a favor da prorrogação da falta de vergonha na cara que é a CMPF:

  1. Almeida Lima (PMDB-SE)
  2. Aloizio Mercadante (PT-SP)
  3. Antônio Carlos Valadares (PSB-SE)
  4. Eduardo Suplicy (PT-SP)
  5. Epitácio Cafeteira (PTB-MA)
  6. Ideli Salvatti (PT-SC)
  7. Romero Jucá (PMDB-RR)
  8. Serys Slhessarenko (PT-MT)
  9. Sibá Machado (PT-AC)
  10. Valdir Raupp (PMDB-RO)
  11. Valter Pereira (PMDB-MS)
  12. Wellington Salgado (PMDB-MG)


Por favor guarde bem esses nomes e nunca mais vote nesses canalhas corruptos neles.

[]'s
Cacilhas La Batalema

2007-11-19

Che Guevara segundo Veja, Veja segundo Jon Lee Anderson

Oscar Niemeyer Resposta de Jon Lee Anderson à matéria de Diogo Schelp sobre Che Guevara na Veja:

Caro Diogo,

Fiquei intrigado quando você não me procurou após eu responder seu email. Aí me passaram sua reportagem em Veja, que foi a mais parcial análise de uma figura política contemporânea que li em muito tempo.

Foi justamente este tipo de reportagem hiper-editorializada, uma hagiografia ou – como é o seu caso – uma demonização, que me fizeram escrever a biografia de Che. Tentei pôr pele e osso na figura super-mitificada de Che para compreender que tipo de pessoa ele foi.

O que você escreveu foi um texto opinativo camuflado de jornalismo imparcial, coisa que evidentemente não é.

Jornalismo honesto, pelos meus critérios, envolve fontes variadas e perspectivas múltiplas, uma tentativa de compreender a pessoa sobre quem se escreve no contexto em que viveu com o objetivo de educar seus leitores com ao menos um esforço de objetividade.

O que você fez com Che é o equivalente a escrever sobre George W. Bush utilizando apenas o que lhe disseram Hugo Chávez e Mahmoud Ahmadinejad para sustentar seu ponto de vista.

No fim das contas, estou feliz que você não tenha me entrevistado. Eu teria falado em boa fé imaginando, equivocadamente, que você se tratava de um jornalista sério, um companheiro de profissão honesto. Ao presumir isto, eu estaria errado.

Esteja à vontade para publicar esta carta em Veja, se for seu desejo.

Cordialmente,
Jon Lee Anderson


[]'s
Cacilhas La Batalema

2007-11-17

autofs

Tux O autofs é um serviço de montagem automática de sistemas de arquivo locais ou remotos que já vem habilitado por padrão em algumas distro GNU/Linux, como SuSE e Kurumin.

O Slackware possui autofs, mas não vem habilitado por padrão. Vou demonstrar como habilitar esse serviço.

Observação: todos os procedimentos devem ser executados como superusuário (root).

Inicialização


Os scripts de inicialização no Slackware ficam em /etc/rc.d/, mas não há um script pronto para o autofs.

Salve o seguinte código como /etc/rc.d/rc.autofs e torne o arquivo executável:
#!/bin/bash

DAEMON=/usr/sbin/automount
DELAY=5
localoptions=

getmounts() {
#
# Check for local maps to be loaded
#
#

if [[ -f /etc/auto.master ]]
then
sed -re 's/^#.*$//g; /^\s*$/d' /etc/auto.master | while read dir map options
do
if [[ ! -z "$dir" && ! -z "$map" && x`echo "$map" | cut -c1` != 'x-' ]]
then
map=`echo "/etc/$map" | sed -e 's:^/etc//:/:'`
options=`echo "$options" | sed -e 's/\(^\|[ \t]\)-/\1/g'`
if [[ -x $map ]]
then
echo "$DAEMON -t $DELAY $dir program $map $options $localoptions"
elif [[ -f $map ]]
then
echo "$DAEMON -t $DELAY $dir file $map $options $localoptions"
else
echo "$DAEMON -t $DELAY $dir `basename $map` $options $localoptions"
fi
fi
done
fi

#
# Check for YellowPage maps to be loaded
#
if [[ -e /usr/bin/ypcat && `ypcat -k auto.master 2>/dev/null | wc -l` > 0 ]]
then
ypcat -k auto.master | while read dir map options
do
if [[ ! -z "$dir" && ! -z "$map" && x`echo "$map" | cut -c1` != 'x-' ]]
then
map=`echo "$map" | sed -re 's/^auto_/auto./'`
if echo $options | grep -- '-t' >/dev/null 2>&1
then
mountoptions="--timeout $(echo $options | sed 's/^.*-t\(imeout\)*[ \t]*\([0-9][0-9]*\).*$/\2/g')"
fi
options=`echo "$options" | sed -re 's/--*t(imeout)*[ \t]*[0-9][0-9]*//g; s/^(\s*)-/\1/g'`
echo "$DAEMON $dir yp $map $options $localoptions"
fi
done
fi
}

#
# Status lister.
#
status_autofs() {
echo "Configured Mount Points:"
echo "------------------------"
getmounts
echo
echo "Active Mount Points:"
echo "--------------------"
mount | grep '^automount'
#ps ax | egrep "[0-9]:[0-9]{2} $DAEMON " | while read pid tt stat time command
#do
# echo $command
#done
echo
}

start_autofs() {
# Check if the automounter is already running?
if [[ ! -f /var/lock/subsys/autofs ]]
then
echo 'Starting automounter: '
getmounts | sh
touch /var/lock/subsys/autofs
fi
}

stop_autofs() {
echo 'Stopping automounter: '
kill -TERM $(/sbin/pidof /usr/sbin/automount)
rm -f /var/lock/subsys/autofs
}

reload_autofs() {
if [[ ! -f /var/lock/subsys/autofs ]]
then
echo "Automounter not running"
exit 1
fi
echo "Checking for changes to /etc/auto.master ...."
TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2; exit 1; }
TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2; exit 1; }
getmounts > $TMP1
ps ax | egrep "[0-9]:[0-9]{2} $DAEMON " | while read pid tt stat time command
do
echo "$command" >> $TMP2
if ! grep -q "^$command" $TMP1
then
kill -USR2 $pid
echo "Stop $command"
fi
done
cat $TMP1 | while read x
do
if ! grep -q "^$x" $TMP2
then
$x
echo "Start $x"
fi
done
rm -f $TMP1 $TMP2
}

case "$1" in
start)
start_autofs
;;
stop)
stop_autofs
;;
restart)
stop_autofs
sleep 2
start_autofs
;;
reload)
reload_autofs
;;
force_start)
stop_autofs &>/dev/null
sleep 2
start_autofs
;;
status)
status_autofs
;;
*)
echo "Usage: /etc/rc.d/rc.autofs {start|stop|restart|reload|status}"
exit 1
;;
esac


Execute então o seguinte comando:
echo '[ -x /etc/rc.d/rc.autofs ] && /etc/rc.d/rc.autofs force_start' >> /etc/rc.d/rc.local


Configurações


O principal arquivo de configuração do autofs é /etc/auto.master.

Cada linha do arquivo indica um diretório para os pontos de montagem. A primeira coluna é o nome do diretório – que não precisa existir no sistema de arquivos, pois será gerenciado dinamicamente pelo autofs – a segunda coluna é o caminho para o arquivo de configuração específico apra gerenciar as montagens nesse diretório e a terceira coluna são as opções.

Por exemplo:
/auto   /etc/auto.misc  --timeout=30


Vai criar o diretório /auto/ e usar o arquivo /etc/auto.misc para as configurações, com um timeout de trinta (30) segundos.

Digamos que queremos usar o diretório /auto/ para montar disquete, CD-ROM e USB, e queremos que o autofs gerencie o /home/ para montar os homedirs remotos via NFS. Usaremos /etc/auto.misc para o /auto/ e o /etc/auto.home para configurar o NFS:
/auto   /etc/auto.misc  --timeout=30
/home /etc/auto.home --timeout=30


Configuração dos pontos de montagem de recursos locais


Os pontos de montagem locais estarão em /auto/ e serão gerenciados pelo arquivo /etc/auto.misc.

Cada linha é um ponto de montagem. A primeira coluna é o nome do ponto de montagem dentro de /auto/, a segunda coluna são as opções e a terceira é o dispositivo a ser montado.

As opções são as mesmas do comando mount. A única exceção é a opção -fstype, para indicar o sistema de arquivo.

Por exemplo, pra montar o disquete em /auto/floppy/ identificando o sistema de arquivo automaticamente, de modo síncrono, com máscara 0000 e modo 0777:
floppy  -fstype=auto,rw,sync,umask=0,mode=0777  :/dev/fd0


Vamos ao arquivo completo: CDROM, disquete e USB (meu USB é reconhecido como /dev/sda):
cd      -fstype=iso9660,exec,ro                 :/dev/cdrom
floppy -fstype=auto,rw,sync,umask=0,mode=0777 :/dev/fd0
usb -fstype=auto,rw,sync,umask=0,mode=0777 :/dev/sda


Configurações dos pontos de montagem de recursos remotos


Ainda é possível montar diretório remotos via NFS, bastando informar o IP ou nome da máquina antes do nome do dispositivo.

Por exemplo:
remote  -fstype=nfs,rw,async,soft,timeo=60,rsize=8192,wsize=8192    192.168.0.2:/shared


Vai montar o diretório exportado /shared/ de 192.168.0.2 em /auto/remote/. A opção timeo tem prioridade sobre a opção timeout de /etc/auto.master, alterando seu valor apenas para o ponto de montagem em questão.

Para recursos remotos é aconselhável usar blocos maiores que 4KB. No exemplo o bloco é de 8KB.

Mas há uma configuração mais interessante. Digamos que a máquina 192.168.0.2 seja um servidor de usuários e está exportando os homedirs via NFS.

É possível montar somente um ou alguns homedirs de cada vez, não o /home/ todo. Por exemplo, se o usuário blackstar logou, pra que montar também o homedir do usuário slack? Podemos montar apenas o homedir do usuário logado.

E o melhor de tudo: o autofs faz isso automaticamente!

Para tanto o conteúdo de /etc/auto.home será:
*       -fstype=nfs,rw,async,soft,timeo=60,rsize=8192,wsize=8192    192.168.0.2:/home/&


O /home/& indica que não será montado o /home/ todo, mas apenas os subdiretórios solicitados. O campo * na primeira coluna indica que será usado o nome representado por &.

Assim, como /etc/auto.home está gerenciando o diretório /home/, quando o usuário blackstar se conectar, seu diretório será montado como /home/blackstar/, vindo de 192.168.0.2, mas não existirá o diretório /home/slack/ – a menos que o usuário slack conecte.

Iniciando o serviço


Basta agora iniciar o serviço:
/etc/rc.d/rc.autofs start


Se tudo correu bem, você poderá ver os pontos de montagem com o comando:
/etc/rc.d/rc.autofs status


Insira um disquete na unidade /dev/fd0 (A:) e acesse seu conteúdo sem precisar montá-lo:
ls /auto/floppy/


Só um conselho: retire do fstab os pontos de montagem usados pelo autofs. Pode até deixar o fstab gerenciar os mesmos recursos – eles apenas serão montados também nos pontos de montagem do fstab –, mas normalmente não faz muito sentido.

[]'s
Cacilhas La Batalema

2007-11-15

Berimbau

Berimbau Quem é homem de bem não trai
O amor que lhe quer seu bem
Quem diz muito que vai, não vai
Assim como não vai, não vem

Quem de dentro de si não sai
Vai morrer sem amar ninguém
O dinheiro de quem não dá
É o trabalho de quem não tem

Capoeira que é bom não cai
Mas se um dia ele cai, cai bem

Capoeira me mandou dizer que já chegou
Chegou para lutar
Berimbau me confirmou vai ter briga de amor
Tristeza, camará

Se não tivesse o amor
Se não tivesse essa dor
E se não tivesse o sofrer
E se não tivesse o chorar
Melhor era tudo se acabar

Eu amei, amei demais
O que eu sofri por causa de amor ninguém sofreu
Eu chorei, perdi a paz
Mas o que eu sei é que ninguém nunca teve mais
Mais do que eu

(Vinícius de Moraes e Baden Powell)

Intransitivo?

Coração partido O Amor Verdadeiro é abnegado. Como diz Camões, é «não querer mais que bem querer». Na verdade é querer bem, não a alguém, mas a todos, e sem querer nada em troca, intransitivo.

Mas somos humanos, não é? Sujeitos a falhas. Então nosso amor não é puro.

Nós queremos bem a algumas pessoas. Não que não queiramos bem a todo mundo, mas mesmo quando alguém chega a esse grau, ainda se preocupa mais com algumas pessoas do que com outras.

São nossos amigos, irmãos, pais, esposo(a)/namorado(a)… sempre selecionamos algumas pessoas a quem amamos. Não há mal nisso, é humano.

Também não somos totalmente abnegados, sempre queremos algo em troca: carinho, compreensão, entrega. Também não há nada de errado: é humano.

Não estou falando só do amor que sentimos pela pessoa que escolhemos para nosso par, mas num sentido geral. Sempre esperamos ser amados tanto quanto amamos, ou ao menos alguma entrega.

Ou pelo menos queremos que a pessoa amada confie em nós, mas nem sempre isso acontece. E quando não acontece, doi, e doi muito.

Não sou de desistir das pessoas, mas me faz muito mal quando alguém parece desistir de mim.

Esses desabafos são sempre estranhos, não? Mas são as Reflexões de Monte Gasppa e Giulia C.…

[]'s
Cacilhas La Batalema

2007-10-19

Campanha da Sopa

Eu cançado Há cinco qualidades importantes para a realização da Tarefa:

  1. Amor
  2. Caridade
  3. Força
  4. Identificação


Amor


Amor é o bem querer que se deseja aos outros e que, em seu estado mais sublime, se torna intrasitivo, como uma luz que se emana.

Amor pelos necessitados, Amor pelos companheiros de Tarefa e principalmente Amor pela Tarefa.


Fé é a sensação paradoxal de saciedade no vazio.

Fé não é confiar, é saber que há algo mais e que algo está acontecendo, é sentir isso nos ossos.

Caridade


Caridade é tão somente o Amor manifesto.

Quando você pratica o Amor, isso é Caridade.

Força


Força é quando você se sente exausto e não sabe como consegue dar mais um passo. Figurativa e literalmente.

Força consiste em três partes:
  • Coragem: é fazer o que tem de ser feito, sem culpas ou desculpas, senpere.
  • Serenidade: é não se delongar naquilo que não pode ser mudado nem sentir-se mal por isso.
  • Sabedoria: é saber separar as coisas, principalmente o que tem de ser feito do que não pode ser mudado.


Indentificação


No entanto, não se pode julgar aqueles que não abraçam a Tarefa como carentes de alguma dessas qualidades…

Uma pessoa pode ter Amor, Fé, praticar a Caridade e ser forte, e ainda assim não se identificar com a Tarefa.

O mais importante é a Identificação.


Bem, fica aqui a convocação a quem quiser assumir a Tarefa!

[]'s
Cacilhas

PS: Leia Fora da caridade não há salvação.

2007-10-15

Usuário final

Tux Estive lendo a ótima matéria da Marcela Freitas, com a qual concordo em gênero e número, mas não em grau. =)

Concordo que o chamado «usuário final» não precisa entender como o sistema funciona, assim como o motorista não precisa entender de mecânica, portanto programas como automatic são perfeitamente válidos.

Vamos agora à parte com a qual eu não concordo…

Os motoristas precisam aprender a dirigir, não? Tirar habilitação.

Alguns conceitos básicos – que a Marcela obviamente conhece – precisam ser aprendidos: memória principal, disco, processamento, sistema operacional, pacote, instalação, desinstalação, execução, leitura, gravação, permissões…

Veja bem: não foi a Marcela quem negou isso! Forçar o usuário à desinformação é uma prática dos técnicos microsofties, ou seja, que cresceram vendo o Windows e desconhecem o passado da Computação.


Chegou a hora de reclamar do bicho feio.

Os extremos são o grande problema: se por um lado os nerds manés tiradores de onda, que se acham o máximo por usar GNU/Linux, acham que todo usuário tem de ser experto, por outro os «técnicos» microsofties pregam que eles próprios não precisam entender do sistema – ou não entender tanto –, de tão intuitivo é o Windows.

Você confiaria seu carro nas mão de um mecânico punk, ou seja, que não entende de Mecânica?

É mais ou menos assim que as coisas estão hoje em dia.

Outra coisa: eita demagogia hipócrita essa história de que você pode tirar total proveito de um sistema sem entendê-lo!

Acredita em mim: você nunca vai aproveitar bem coisa alguma sem entender com o que está lidando, não só em Informática e Computação, mas em qualquer área.

É ilusão, mentira, manipulação afirmar que vai. Se alguém disser isso pra você, se afasta dessa pessoa porque ela não é sua amiga, quer iludir você!

Está dado o recado!

[]'s
Cacilhas

PS: Leia a Era da Informação.

2007-10-05

Santo Graal

lâmpada Vento, Vento, Vento, eu venho chamar
Para os portais do tempo eu poder passar,
Atravessar o véu de Maya para enxergar
a luz do firmamento que vai nos curar.

Salve, salve, salve os seres do ar,
Que da imensidão celeste vem nos assegurar
O caminho para o alto que vamos trilhar
Se a nossa mente se purificar.

Força, Força, Força, que aqui está,
Penetrai em nosso corpo para nos firmar,
Permita que possamos nos aliar
Ao poder eterno do Pai Criador.

Cristo, Cristo, Cristo, que em nós está,
Livrai-nos da discórdia que nos faz falhar,
Conduzi a nossa escola que aqui está
Aos sagrados mistérios do Santo Graal.

(«O Santo Graal», tirado do hinário da Rainha da Montanha, Santo Daime – não lembro o autor.)

2007-09-27

Que filme é esse?

Xadrez: rei com anel sobre duas torres

[]'s
Cacilhas

2007-09-10

Acessibilidade web

lâmpada Essa é pra pensar muuuuuuuuuuito…

Assista ao vídeo Acessibilidade web: Custo ou benefício. Depois é bom passar um bom tempo sentindo a consciência doer e bater um longo papo com o travesseiro.

Se você for web-designer e continuar cometendo as gafes citadas no vídeo – a final de contas, a página fica muito mais bonita, né? –, é bom enfiar a cabeça no vaso sanitário e puxar a descarga.

Veja também o sítio do Acesso Digital.

[]'s
Cacilhas

PS: Valeu a dica, Verónica!

2007-09-06

Amazônia, uma região de poucos

Baal Essa aqui eu li no blog O Espírito Que Anda

Vejam o vídeo no YouTube e no sítio do Green Peace, depois tomem suas próprias conclusões.

Minha opinião é que deveríamos bombardear a cidade e as sedes das fazendas com napalm, mas talvez eu seja um tanto radical.

[]'s
Cacilhas

2007-08-29

Por que Materialismo não é Cepticismo

Baal Afirmar que o homem seja um ser físico ou biológico é alienar-se da óbvia realidade: o homem é um ser psico-sensorial.

Vivemos num mundo psicológico ou psíquico; toda relação que temos com o meio exterior é através de interpretação de impulsos nervosos, físicos ou não, que estão sob o julgo da mente.

Acreditamos existir um mundo material baseados na interpretação psicológica das impressões sensoriais. Intuímos que há uma relação entre nosso mundo psicológico e o suposto meio material. Digo suposto pois apenas acreditamos nele; passarei então a chamá-lo meio sensorial.

Sabemos ao certo que há um canal entre os mundos psíquícos das diferentes pessoas.

As relações existem. Até sabemos… e por pura intuição.

Agora, que relações são essas?

Talvez o meio sensorial interfira na realidade psicológica, talvez a realidade psicológica interfira no meio sensorial. Talvez ambos.

Algumas pessoas acreditam que a realidade psíquica interfira no meio sensorial, outras acreditam que o meio sensorial interfira na realidade psíquica. Uns poucos acreditam em ambos.

É claro que cada um carrega consigo evidências que comprovam sua versão, mas estas evidências só fazem sentido quando avaliadas segundo o conjunto de verdades que defendem sua própria teoria. Assim sendo, qualquer dita evidência defendendo uma teoria ou outra é de fato auto-desinformação. Bitola psicológica.

Em suma, o materialista é aquele que acredita que a realidade psíquica seja um reflexo do meio sensorial. Veja bem: «acredita».

O Cepticismo caracteriza-se pela dúvida, não pela crença. Céptico é aquele que duvida, não aquele que acredita. Σκεπτομαι, se não me engano.

Qualquer postura dedicada exclui por definição o Cepticismo.

Considerando que o Materialismo é uma postura dedicada – defende sistematicamente um ponto de vista, ignorando qualquer coisa que o negue –, não pode ser cepticismo.

Negação sistemática e/ou defesa dedicada, usando para tanto descrédito, evidências vinculadas, ridicularização, desqualificação alheia ou padrões de rigor não-razoáveis caracterizam pseudo-cepticismo ou cepticismo patológico.

[]'s
Cacilhas

2007-08-26

Ghoughphtheightteeau

O Inglês atualmente é usado como língua internacional por pura dominação cultural, assim como foi o Latim, pois o Inglês é uma língua totalmente ineficiente como ferramenta de comunicação intercultural.

Há diversos fatores que indicam isso, como indissociabilidade cultural, armadilhas de trocadilhos, excesso de fonemas e relação carente entre a forma escrita e a forma falada.

Mais importante que os fatores que tornam o Inglês inapto para a comunicação intercultural são as consequências de seu uso: imposição cultural, desaparecimento gradativo de línguas nativas e consequentemente de suas respectivas culturas, tornando assim a Humanidade culturalmente cada vez mais pobre.

Ou seja, o conhecimento humano vai-se perdendo pouco a pouco pela influência de uma cultura dominante.

Isso se dá não pelo uso de uma ferramenta de comunicação interlinguística, mas pelo fato da ferramenta usada para tanto ser totalmente inecifiente para esse fim específico.

Nada contra o Inglês! Acho uma língua interessante e a mais adequada como base para a criação de linguagens de programação, mas não é uma língua própria para a comunicação intercultural.

Dito isso, vou-me ater agora a uma característica específica da língua inglesa que por si só já tornaria a língua inapta para o uso internacional: relação carente entre as formas escrita e falada.

Ou seja, em inglês o que se escreve e o que se fala são coisas diferentes, com muito pouca ou nenhuma relação.

Vamos a um exemplo curioso, tirado do Projeto Sementeira Esperanto:

A palavra potato também poderia ser escrita como ghoughphtheightteeau.

Não entende? Veja só…

  • Na palavra hiccough o GH é lido como o P em potato.
  • Na palavra dough o OUGH é lido como o primeiro O em potato.
  • Na palavra phthisic o PHTH é lido como o primeiro T em potato.
  • Na palavra neighbor o EIGH é lido como o A em potato.
  • Na palavra gazette o TTE é lido como o segundo T em potato.
  • Na palavra beau o EAU é lido como o segundo O em potato.


Pronto! Fazendo agora a substituição das estruturas gráficas de acordo com sua pronúncia na palavra potato obtemos: GH-OUGH-PHTH-EIGH-TTE-EAU → ghoughphtheightteeau. =/

Essa é apenas uma demonstração bastante simples, que não tem a menor intenção de desmerecer o Inglês, aliás até demonstra sua riqueza cultural, mas também demonstra sua ineficiência como ferramenta de comunicação.

Leia Esperanto Fora da Toca.

[]'s
Cacilhas


PS: Você pode ter reparado que ora usei Inglês com maiúscula, ora inglês com minúscula. Quando usei Inglês (maiúscula) quis referir-me ao Inglês enquanto entidade abstrata viva.

2007-08-22

Coisas de Petrópolis/RJ

Petrópolis/RJ é uma cidade muito estranha mesmo.

Hoje pela manhã acordei um pouco mais tarde – não estava me sentindo bem, então acabei perdendo a hora –, olhei para o Céu e o vi azul, com o Sol bonito e radiante.

Decidi não levar nem meu poncho, nem meu guarda-chuva. Ledo engano…

Passando um pouco da avenida central da cidade, numa região chamada Duas Pontes, dei de cara com a seguinte imagem:
Duas Pontes

Se você reparar bem vai ver que mais para o alto há um pouco de azul: atrás de mim havia um belo dia ensolarado e a minha frente uma parede branca.

Chegando aqui no LNCC, não muitos quilômetros de minha casa, não se via direito 15m a frente.

Até gosto… as montanhas de Petrópolis têm uma presença muito forte e me dão uma sensação de prisão, como se fossem uma muralha que me limita a liberdade. Com o nevoeiro, dá a impressão de que elas não estão lá, de que há algo mais além da nuvem, como se o nevoeiro fosse uma tela branca onde posso projetar meus desejos.

Deixando de lado essa filosofia barata, coisas assim fazem de Petrópolis uma cidade estranha.

Perto de minha casa há alguns casais de gavião carijó – simplesmente lindos –, algumas corujas magníficas e umas garças – não faço a mínima ideia sobre o que as garças comem. =/

Por toda a cidade é possível ver bandos de maritacas e há muito tempo não vejo mais tucanos – comuns em minha infância.

Só pra fechar essa postagem perdida – lembrando que o tema é a estranheza de Petrópolis – há um rapaz chamado Zezé que anima as viagens de ônibus à noite pelo Bingen cantando – canta muito bem por sinal, apesar do repertório de mau gosto. Outro dia ele entrou no ônibus e soltou uma pérola que vou guardar pro resto da vida:

A Terra não respeita criatura, ela quer carne fresca. Pode rezar sete vezes o terço, que as minhocas vêm do mesmo jeito. (Zezé)


Está aí algo sobre Petrópolis.

[]'s
Cacilhas

2007-08-20

Sugestão de filmes: Dama na Água e O Apanhador de Sonhos

Scrunt Já aborrecido e cansado do trabalho – diga a verdade: julho e agosto são dois meses que ninguém merece! – resolvi alugar uns filmes para me distrair no final de semana.

Para evitar qualquer decepção, decidi alugar dois filmes que eu já havia visto, que fossem muito bons e que eu quisesse rever. Procurei na locadora e escolhi O Apanhador de Sonhos e Dama na Água (ou seja lá qual for a tradução que queiram dar).

Dois filmes magníficos que mexem com o imaginário através de intensa referência a arquétipos.

Contente com os filmes, depois de dissecar os DVDs, busquei mais informações sobre os filmes na Internet.

O que encontrei foi simplesmente revoltante e estou escrevendo este artigo só para criticar os críticos.

Não vou citar uma fonte, pois a opinião dos críticos espalhados pela blogsfera é quase unânime, procure no Google.

Queria destacar duas observações ridículas:


1º — Críticas contra os nomes «narf», «scrunt» e «tartutic».

Muitas pessoas estão criticando o fato desses nomes não se parecerem nem de longe com palavras coreanas. Tenho dois comentários:

¹Onde foi dito que esses nomes são coreanos? Em momento algum no filme se fala em coreanos… segundo o comentário de um coreano que viu o filme com áudio original, a língua falada pelas orientais não é coreano, mas algum dialeto chinês, e os nomes dos seres míticos nem mesmo pertencem ao idioma que elas falam, mas são adaptações para o inglês feitas pela personagem Young-Soon Choi. Elas representam a presença oriental na cultura norte-americana, não um povo específico.

²A história trata de um conto infantil! Os nomes são nomes infantis, criados para fazer sentido para crianças pequenas, não para filólogos profissionais.


2º — Comparações esdrúxulas com Harry Potter (os filmes, não os livros).

A comparação mais estúpida que li foi que os personagens de M. Night Shyamalan não parecem tão reais quanto os personagens dos filmes do Harry Potter.

Acho que esses críticos blogueiros deveriam assitir menos novelas.

Vamos aos personagens «reais» de Harry Potter: um garoto deslocado em um mundo, mas que mesmo assim lida bem com a situação, a ponto de tornar-se um dos melhores desse mundo; um velho e sábio mestre sem falhas de caráter; uma senhora que é o estereótipo da CDF que virou professora; mais uma meia dúzia de estereótipos…

Agora vamos aos personagens de Night, que não são «tão reais» quando os dos filmes de Harry Potter: um zelador barrigudinho, meio calvo e de óculos, meio gago também; uma menina longe de casa, que se encontra confusa por isso; uma família de chicanos; um crítico chato (o personagem mais estereotipado de todos); mais uma meia dúzia de pessoas com quem se cruzaria na rua…

É… acho que os críticos deveriam assitir menos TV e conhecer melhor seus vizinhos de verdade – ou então minha vizinhança não é verídica!


De qualquer forma ficam aqui duas boas dicas de filmes!

[]'s
Cacilhas

PS: A imagem aqui saiu de uma pesquisa no Google, a imagem original é e6476rectangularscrunt.jpg.

2007-08-16

Porta inútil

Jennifer Black Mais uma vez estou aqui para falar da dupla Jennifer Black, formada pelo vocalista Mano Black e o guitarrista Celso BJ.

Dessa vez quero ajudar a divulgar o clip da música «Porta Inútil»:



Divirtam-se!

[]'s
Cacilhas

2007-07-28

Abraços diários

Paiva Neto Dando seguimento ao artigo anterior, gostaria de falar um pouco mais sobre o toque.

A campanha por abraços grátis é muito legal, muito interessante, mas não serve de muita coisa se o hábito não for levado para o cotidiano.

Tiramos um dia para abraçar estranhos – e eventualmente algum conhecido – na rua, mas depois que termina voltamos a nosso isolamento pessoal diário, evitando contato com as pessoas com quem lidamos de verdade.

Isso não ajuda.

O toque é essencial para estimular a empatia nos ambientes doméstico e de trabalho. Olhe bem para aquele(a) colega pentelho de trabalho e para o(a) irmão(ã) chato(a)… será que eles(as) são babacas mesmo, ou está faltando empatia?

E sobre aquela pessoa que olha torto pra você todo dia – e você olha torto de volta? A situação pode talvez se inverter apenas com um sorriso.

São atitudes pequenas que podem mudar nossa vida. A realização do ser humano está nas pequenas coisas.

Minha sugestão é a seguinte: em vez de movimentos humanitários com dia marcado, começo, meio e fim, vamos levar a atitude humanitária para o dia-a-dia.

Termino então este artigo com mais uma pergunta – desta vez não é retórica: você já abraçou seu próximo hoje?

[]'s
Cacilhas

2007-07-22

Free Hugs

lâmpada Recebi ontem de meu amigo Krisnatágoras uma mensagem falando da campanha por abraços de graça (ou livres, se preferir) movida por Juan Mann em Sydney (cidade de Matrix).

Kris, você não sabe o quanto me atingiu a mensagem. Muito obrigado.

Segue aqui então o texto que me foi passado na mensagem:

Em um mundo de valores corrompidos, eis a maior prova de que nem tudo está perdido…

Há um ano, Juan Mann era só um homem estranho que ficava parado no Pitt Street Mall em Sydney, Austrália, oferecendo abraços de graça para as pessoas que passavam pelas ruas. Um certo dia, Mann ofereceu um abraço a Shimon Moore, o líder da banda Sick Puppies e, desde então se tornaram bons amigos. Um certo dia Moore decidiu gravar Mann fazendo sua campanha por «Free Hugs». Na medida em que o Free Hugs atingia proporções maiores, o conselho da cidade tentou banir a campanha. Então Mann e seus amigos fizeram uma petição com mais de 10.000 nomes apoiando a campanha do abraço de graça. Quando Mann morreu, Moore decidiu mixar o video que ele tinha feito do Free Hugs com a música «All the Same», que ele havia gravado com a sua banda Sick Puppies.

Vale a pena conferir o video. Um filme que apresenta uma verdadeira história que inspira Humanidade e Esperança. Algumas vezes um abraço é tudo que precisamos. Free Hugs é uma história real, sobre um homem que acreditava que sua missão era trazer alegria na vida das pessoas através de um abraço.

Note que o video é em preto e branco e só ganha cor após Juan Mann recebero seu primeiro abraço.

Se deixe contagiar e um FORTE e contagiante ABRAÇO!


E aqui o vídeo para os mais preguiçosos:


Kris perguntou quem sabe não fazemos isso nas ruas de Barretos. Quem sabe em Petrópolis?

Que tal em todo o Brasil?

[]'s
Cacilhas

2007-07-11

No Brasil o que falta é Educação

Esta é uma repostagem do comentário que fiz ao artigo Educação na VitaminaHP:

No Brasil o que falta é Educação.

Essa frase é forte, mas dolorosamente verdadeira. Os tucanos acham que vender privatizar tudo (e embolsar a grana) seja a solução; já os petistas acham que a solução é dar pão e circo pro povão, embolsar a grana e fingir que está tudo certo.

Mas ninguém tem qualquer preocupação com a Educação!

Mesmo porque se o povo fosse instruído, ladrão de colarinho branco – tucano ou petista – ia tudo pro xilindró.

Também as chamadas Forças Externas – que não existem segundo quem lucra com elas e são desculpa pra tudo segundo os incompetentes – não querem Educação na América do Sul, porque elas já vêm promovendo um processo de emburrecimento do latino-americano há décadas, intencionando tornar-nos um bando de consumidores compulsivos e ignorantes, e não querem ver todo esse trabalho ir pelo ralo.

Porém o povo brasileiro não se toca disso… os próprios prejudicados pela ignorância são os primeiros a levantar a mão contra os professores e a votar contra e ridicularizar o cara que propôs reverter esse quadro vergonhoso.

Ainda mais… quando alguém propõe um projeto legal de inclusão digital, aparece logo um monte de invejosos, sentindo-se ameaçados pela possibilidade real de inclusão, e lançam falsos projetos para derrubar a iniciativa verdadeira. E o brasileiro burrão vai atrás.

É exatamente isso que está acontecendo em nossas escolas: mistura de ignorância com prazer em ser ignorante, ou, se preferir, auto-sabotagem sócio-cultural.

Vamos cantar o seguinte mantra:
  • Educação é Progresso
  • Educação é Progresso
  • Educação é Progresso
  • Educação é Progresso


Não deixe de ler o artigo original na VitaminaHP, pois este artigo aqui é tão somente um complemento.

[]'s
Cacilhas

2007-07-08

Jennifer Black

Jennifer Black Outro dia prometi escrever sobre uma banda petropolitana de techno da década de 1990.

Comprei o primeiro album da banda assim que foi lançado e, até pouco tempo atrás, pensava que a banda tivesse acabado.

Porém descobri que estão em plena atividade! A banda é Jennifer Black!

Encontrei o guitarrista da banda na semana passada, Celso Braga Jr., e ele me passou os endereços dos apontadores neste artigo.

Jennifer Black começou em 1997. É uma dupla de rock alternativo, no início com uma tendência techno, mas se tornou cada vez mais alternativa. Possui dois integrantes: Mano (vocalista) e Celso (guitarrista) – e muitos convidados. =)

Usam e abusam de sons eletroacústicos e bateria eletrônica. O primeiro album, «L_ve», lançado em 1999, é extremamente dançante e possui todas as letras em inglês. O segundo, «O Beijo Mais Longo», de 2004, é bastante mais maduro, com apenas uma música em inglês e uma tradução para o português de umas das músicas do primeiro album.

Você pode encontrar no BdG fotos de uma das mais recentes apresentações da banda.

Aqui está a lista de músicas do primeiro album, L_ve (em negrito minhas recomendações):

  1. My home
  2. 1992 (a nightclub)
  3. B-long (I'm gonna rock)
  4. The perfect world
  5. Electropicnic
  6. How much difference
  7. Where the future stands
  8. Hellven
  9. U.F.O.
  10. Shoot it
  11. Headbang to this


Agora a lista de músicas do segundo album, O Beijo Mais Longo:
  1. Não conte comigo
  2. Ela resvala
  3. Me acorde
  4. The longest kiss
  5. Ei, deixa eu beber com você
  6. Confuso
  7. Desde que eu te vi
  8. Meu lar (versão 2004)


Bem, por ora isso é tudo! Mas aguarde: ainda escreverei mais sobre Jennifer Black!

[]'s
Cacilhas

2007-07-02

Lain

Lain Acabei de assistir uma série japonesa de ficção científica indicada por meu amigo Torcato, chamada Serial Experiments: Lain.

Confesso que quando fui assistir, apesar de muito curioso, esperava apenas mais um anime japonês. Qual não foi minha supresa ao deparar-me com uma trama muito bem acabada, culturalmente rica e personagens profundos!

A série é um tanto confusa, muito psicológica, no entanto evolui naturalmente. O ambiente cyberpunk ocidentalizado é o único elemento forçoso, mesmo assim é suavemente agregado ao resto do contexto, provendo uma base muito sólida para um enredo bastante fluídico.

É preciso muita atenção para acompanhar as layers (como são chamados os episódios) sem se perder, mas também é difícil não prestar atenção de tão envolvente o enredo.

Há muitas referências ao Xintoísmo, que parecem intuitivas, a ponto de poderem passar despercebidas. O autor explora bastante também o folclore dos yōkai, porém sem alarde (ele nem cita essa palavra).

É também uma série bastante «silenciosa», nas palavras do Torcato. Eu diria instrospectiva, mas ambas as palavras a definem bem.

Não há como falar mais da série sem estragar as surpresas, o suspense. O que posso comentar mais são algumas peculiaridades fonéticas.

  • O nome da personagem principal, Lain, costuma ser pronunciado corretamente, mas com um visível esforço dos dubladores. Muitas vezes sai Reinu no lugar. Logo no primeiro episódio Lain diz seu nome ao NAVI (seu computador), o L até que sai direitinho, mas a semivogal vira vogal e quase aparece um Ü recheando o N. =)

  • A melhor amiga de Lain é Alice, só que seu nome nunca é pronunciado direito… todos sempre pronunciam Arisu (na última layer Alice admite ter vergonha de seu nome ocidental).

  • «Wired» (um tipo de Internet mais avançada) é pronunciada das formas mais diversas possíveis, geralmente Warudo.

Outras curiosidades você pode encontrar na Wikipédia, mas aconselho assistir a série antes de ler todo o texto para não revelar a trama.

[]'s
Cacilhas

2007-07-01

Entregar o filho?

Baal Uma revistazinha de propaganda chamada Veja trouxe uma matéria de André Petry defendendo a postura de Ludovico Bruno, pai de um dos marginais que espacou a doméstica Sirlei Dias de Carvalho recentemente.

Ele justifica que um pai não entregaria seu filho, mesmo ele tendo cometido um crime tão hediondo. Aqui vai meu comentário…

Lembro muito bem que, quando do assassinato brutal de João Hélio, os familiares (entre eles o pai) de um dos criminosos foram peças chave na prisão dos cretinos.

Agora vem a derradeira pergunta: se pais com baixa renda e pouca instrução têm consciência social para entregar seus filhos criminosos, por que pessoas de boa colocação social e mais instrução não têm?

Quer dizer então que consciência social é inversamente proporcional à classe social? Assim sendo não seria errado deduzir que «pobre» é bom e «rico» é mau…

Depois esses cretinos reclamam de assalto, violência e afins. =P

Não posso acreditar nessa baboseira.

O que posso acreditar é que rapazes que saem em grupo para espancar mulheres sozinhas não têm o direito de serem classificados como seres humanos. São uns bostas.

E você, meu caro Ludovico, com sua afirmação deixou bem claro por que seu filho cresceu um bosta.

E se alguém concordar com esse bosta de Ludovico, saiba que também é um bosta.

Há uma grande diferença entre defender e educar seu filho.

Só para esclarecer, nada contra o jornalista André Petry. O que me dá raiva é essa playboyzada (tanto moleques quanto playboys de meia idade) usando jornalistas e veículos de comunicação em massa para convencer as pessoas de que merecem impunidade.

[]'s
Cacilhas

2007-06-18

Força da Natureza

lâmpada Bem… Enéas se foi.

Demorei muito a falar nele porque demorei a digerir a informação.

Mesmo não concordando totalmente com suas idéias, o homem foi um marco na política brasileira, uma Foça da Natureza.

Não digo «Força da Natureza» com o sentido de impulsividade irresponsável, como muitos gostam de agir.

«Força da Natureza» no sentido de alguém que tem uma meta e a persegue como um guepardo correndo atrás da presa, como um tornado traçando seu caminho. Não uma meta qualquer, mas fruto de um raciocínio espetacular que parte de uma percepção moral instintiva, uma intuição poderosa do que deve ser feito.

Identifico-me muito com essa atitude, por isso sei que vou sentir falta de Enéas Carneiro.

Posso dar outros exemplos de «Força da Natureza», mas Silvio Eberardo já fez isso antes de mim. =)

No mais, fica aqui minha homenagem tardia.

[]'s
Cacilhas

2007-06-17

Depois de algum tempo…

Baal Gente,

Desculpem eu ter deixado de escrever as Reflexões de Monte Gasppa e Giulia C. por tanto tempo. É que estou passando por um período muito difícil profissional e financeiramente, o que está interferindo negativamente em minha vida pessoal e acadêmica.

Deixando o lero-lero e as desculpas de lado, vamos ao que interessa!


Primeiro, semente sugeriu a criação de um vocabulário de consulta para incentivar a escrita correta de «tecnicices» em nossa Língua Portuguesa.

Que tal dar uma olhada nesta página?

Esse texto também pode ajudar um pouco.


Próxima reflexão…

Fiquei de escrever outro guia de comandos, falando do tc. Eu não esqueci!

Só estou sem cabeça de fazer agora. =(


Outra…

Escrevi um porte do WSGI para linguagem Lua, com suporte a cookies, sessão, AJAX e JSON, mais alguns middlewares úteis, como autenticação e publicador (publisher). Estou só esperando o LuaForge aceitar o projeto (submeti na sexta-feira, dia 15, e recebi uma mensagem dizendo que eles aceitariam ou rejeitariam em 72h) para escrever um artigo sobre o uso do módulo no Kodumaro.


Mais uma…

Alguns blogueiros por aí andam divulgando uma mensagem antifilantrópica e patologicamente individualista. Pura propaganda pró Lei de Gérson.

Quero deixar patente aqui que sou radicalmente contra tal visão e vejo nisso uma demonstração de incapacidade de raciocínio lógico ou uma linha de raciocínio metafísico não-kantista, distante da realidade.

Não sou contra o individualismo por si só, mas ele deve ser equilibrado por uma dose superior de responsabilidade social e filantropia.


Sobre o Darwinismo…

Andei tendo uns «desentendimentos» (se é que dá pra usar essa palavra) com o Torcato sobre o Darwinismo, sistema com o qual concordo apenas parcialmente.

Vou escrever algo sobre o assunto, mas quem leu meu artigo sobre religiosidade já deve ter um vislumbre de meu ponto de vista.


Sobre música…

Quero escrever sobre uma banda petropolitana extinta de uns 10 anos atrás, Jennifer Black!

Prometo que vou escrever algo.


Por último…

Já estava com saudades de postar um artigo decorado com o Baal. ;)


Bem, acho que isso é tudo por ora. Mais dia, menos dia, eu escrevo algo mais útil. =P

[]'s
Cacilhas

2007-06-04

Um framework faça-você-mesmo

Poliedro Este artigo é uma tradução livre de um artigo do Python Paste. Você pode encontrar o original aqui.

Ah! Desculpem-me se quebrei alguns códigos, mas senão eles iam ficar «comidos». =/

Sumário


Author: Ian Bicking <mailto:ian@colorstudy.com>
Revisão: 5488
Data: 2006-07-25 17:22:52 -0500 (Ter, 25 Jul 2006)
Tradução: Rodrigo Cacilhas
Data: 2007-07-04



Introdução e público


Este pequeno tutorial pretende ensiná-lo um pouco sobre WSGI e é um exemplo de um pouco da arquitetura que Paste tem permitido e encoraja.

Esta não é uma introdução a tudo sobre Paste – de fato apenas serão usadas e explicadas algumas partes. Também não pretente encorajar todo mundo a sair criando seus próprios frameworks (no entanto honestamente eu não me importaria). A meta é que quando você tiver terminado de ler este artigo você se sinta mais a vontade com frameworks que usem esta arquitetura e um pouco mais seguro por entender o funcionamento interno por trás dos panos.

O que é WSGI?


Em sua forma mais simples WSGI é uma interface entre servidores web e aplicações web. Os mecanismos de WSGI serão explicados abaixo, mas um visão de mais alto nível é dizer que WSGI permite que código passe através de requisições web de forma razoavelmente formal. Mas há mais! WSGI é mais que apenas HTTP. Pode parecer que seja pouco mais que HTTP, mas um pequeno ponto é importante:
  • Você passa ao redor de um ambiente tipo CGI, que significa que dados como REMOTE_USER (o usuário autenticado) podem ser passados em segurança.
  • Um ambiente tipo CGI pode ser passado com mais contexto – especificamente em vez de apenas um caminho você tem dois: SCRIPT_NAME (como começamos aqui) e PATH_INFO (o que deixaremos).
  • Você pode – e muitas vezes deve – colocar suas extensões dentro do ambiente WSGI. Isso permite rechamadas, informações extras, objetos Python arbitrários, ou o que você quiser. Essas são coisas que você não poderia colocar em cabeçalhos HTTP personalizados.


Isso significa que WSGI pode ser usado não apenas entre um servidor web e uma aplicação, mas em todos os níveis de comunicação. Isso permite que aplicações web se tornem mais do que bibliotecas – bem encapsulado, mas ainda assim ricamente reusável.

Escrevendo uma aplicação WSGI


A primeira parte trata de como usar WSGI da forma mais básica. Você pode ler a especificação, mas farei um sumário bastante breve:
  • Você escreverá uma aplicação WSGI. Esse é um objeto que responde a requisições. Uma aplicação é apenas um objeto chamável (como uma função) que recebe dois argumentos: environ (ambiente) e start_response (pré-resposta).
  • O ambiente se parece bastante com um ambiente CGI, com chaves como REQUEST_METHOD, HTTP_HOST, etc.
  • O ambiente também possui algumas chaves especiais como wsgi.input (o fluxo de entrada, como o corpo de uma requisição POST).
  • start_response é uma função que inicia a resposta – você fornece estado e cabeçalhos aqui.
  • Por último a aplicação retorna um reiterador com a resposta corpo (geralmente é apenas uma lista de strings ou apenas uma lista contendo uma string com o corpo inteiro).


Então aqui está uma aplicação simples:
def app(environ, start_response):
start_response("200 OK", [
("Content-Type", "text/plain")
])
return ["Ola Mundo!"]


Bem… que sem graça. Certo, você pode imaginar o que ele faz, mas não pode simplesmente chamá-lo do navegador.

Há outras formas mais limpas de fazer isso, mas este tutorial não trata de «limpeza», mas de «clareza». Então apenas adicione ao fim do arquivo:
if __name__ == "__main__":
from paste import httpserver
httpserver.serve(app, host="127.0.0.1", port=8080)


Agora acesse http://127.0.0.1:8080/ e você poderá ver sua nova aplicação. Se quiser entender como um servidor WSGI funciona, recomendo ver CGI WSGI server na especificação WSGI.

Uma aplicação interativa


A última aplicação não foi muito interessante. Vamos ao menos torná-la interativa. Para fazer isso vamos dar-lhe um formulário e então analisar os camos do formulário:
from paste.request import parse_formvars

def app(environ, start_response):
fields = parse_fromvars(environ)
start_response("200 OK", [
("Content-Type", "text/html")
])
if environ["REQUEST_METHOD"] == "POST":
return ["Ola, ", fields["name"], "!"]
else:
return [
'<form method="POST">Nome:',
'<input type="text" name="name" />',
'<input type="submit" />:</form>'
]


A função parse_fromvars apenas pega o ambiente WSGI e chama o módulo cgi (a classe FieldStorage) e o transforma em um multidicionário.

Agora para um framework


Agora isso parece um pouco bruto. Apesar de tudo, estamos testando coisas como REQUEST_METHOD para manipular mais do que uma coisa e não está claro como você pode ter mais do que uma página.

Nós queremos criar um framework, que é apenas um tipo de aplicação genérica. Neste tutorial implementaremos um publicador de objeto, que é algo que você pode ter visto no Zope, Quixote ou CherryPy.

Publicação de objeto


Num publicador de objeto Python típico você traduz / para .. Então /articles/view?id=5 se torna root.articles.view(id=5). Temos de iniciar com algum objeto raiz, claro, que nós passamos…
class ObjectPublisher(object):
def __init__(self, root):
self.root = root

def __call__(self, environ, start_response):


O método __call__() foi sobrescrito para tornar instâncias de ObjectPublisher objetos chamáveis, exatamente como uma função, e exatamente como uma aplicação WSGI. Agora tudo o que precisamos fazer é traduzir esse environ para dentro da coisa que estamos publicando, então chamá-la, depois formatar a resposta para WSGI.

O caminho


WSGI coloca o caminho requisitado em duas variáveis: SCRIPT_NAME e PATH_INFO.SCRIPT_NAME. É tudo que usaremos. PATH_INFO é sempre deixado de lado – é a parte que o framework deveria estar usando para encontrar o objeto. Se você colocar os dois juntos de volta, você tem o caminho completo para chegar onde estamos agora mesmo; isso é muito útil para gerar URLs corretas e termos certeza de preservar.

Então aqui está como é possível implementar __call__():
def __call__(self, environ, start_response):
fields = parse_formvars(environ)
obj = self.find_object(self.root, environ)
response_body = obj(**fields.mixed())
start_response("200 OK", [
("Content-Type", "text/html")
])
return [response_body]

def find_object(self, obj, eviron):
path_info = environ.get("PATH_INFO", "")
if not path_info or path_info = "/":
# Chegamos!
return obj
# PATH_INFO começa sempre com a /, assim vamos nos
# livrar disso:
path_info = path_info.strip("/")
# Então vamos quebrar o caminho no pedaço seguinte,
# e tudo depois dele:
parts = path_info.split("/", 1)
next = parts[0]
if len(parts) == 1:
rest = ""
else:
rest = "/" + parts[1]
# Esconda atributos e métodos privados:
assert not next.startwith("_")
# Agora pegamos os atributos; getattr(a, "b")
# equivale a a.b...
next_obj = getattr(obj, next)
# Agora corrija SCRIPT_NAME e PATH_INFO...
environ["SCRIPT_NAME"] += "/" + next
environ["PATH_INFO"] = rest
# E agora analise a parte restante da URL...
return self.find_object(next_obj, environ)


E é isso, temos um framework.

Levando para um passeio


Agora vamos escrever uma pequena aplicação. Coloque essa classe ObjectPublisher no módulo objectpub:
from objectpub import ObjectPublisher

class Root(object):
# O método "index":
def __call__(self):
return """
<form action="welcome">
Nome: <input type="text" name="name" />
<input type="submit" />
</form>
"""

def welcome(self, name):
return "Ola, %s!" % name

app = ObjectPublisher(Root())

if __name__ == "__main__":
from paste import httpserver
httpserver.serve(app, host="127.0.0.1", port=8080)


Tudo certo, feito! Ops, espere. Há ainda algum grande recurso esquecido, por ex. como você ajusta cabeçalhos? E em vez de responder 404 Not Found em algum lugar, você apenas consegue um erro de atributo. Vamos corrigir essas coisas em uma próxima…

Dê-me mais!


Você notará que algumas coisas não estão certas. Mais especificamente, não há como ajustar os cabeçalhos de saída e a informação na requisição está um pouco ligeira.
# Este é apenas um objeto tipo dicionário que possui
# chaves insensíveis ao caso:
from paste.response import HeaderDict

class Request(object):
def __init__(self, environ):
self.environ = environ
self.fields = parse_formvars(environ)

class Response(object):
def __init__(self):
self.headers = HeaderDict(
{ "Content-Type": "text/html" }
)


Agora vou ensinar a você um pequeno truque. Não queremos mudar a assinatura dos métodos. Mas não podemos colocar os objetos de requisição e resposta em variáveis globais normais porque queremos estar preparados para multithreading e todas as threads veem as mesmas variáveis globais (mesmo se estiverem processando requisições diferentes).

Mas Python 2.4 introduz o conceito de «valores locais de thread». É um valor que apenas sua própria thread pode ver. Isso está no objeto threading.local. Quando você cria uma instância de local, qualquer atributo que você ajuste nesse objeto só pode ser visto pela thread onde você ajustou. Então Vamos anexar os objetos de requisição e resposta aqui.

Então vamos lembrar-nos de como a função __call__ se parecia:
class ObjectPublisher(object):


def __call__(self, environ, start_response):
fields = parse_formvars(environ)
obj = self.find_object(self.root, environ)
response_body = obj(**fields.mixed())
start_response("200 OK", [
("Content-Type", "text/html")
])
return [response_body]


Vamos atualizá-la:
import threading
webinfo = threading.local()

def __call__(self, environ, start_response):
webinfo.request = Request(environ)
webinfo.response = Response()
obj = self.find_object(self.root, environ)
response_body = obj(**webinfo.request.fields)
start_response(
"200 OK",
webinfo.response.headers.items()
)
return [response_body]


Agora em nosso método podemos fazer:
class Root:
def rss(self):
webinfo.response.headers["Content-Type"] = \
"text/xml"


Se fôssemos mais estravagantes faríamos coisas como cookies em nosso objeto. Mas não vamos fazer isso agora. Você tem um framework, fique feliz!

WSGI middleware


Middleware é onde as pessoas ficam um pouco intimidadas por WSGI e Paste.

O que é um middleware? É um software que serve de intermediário.

Então vamos escrever um. Vamos escrever um middleware de autenticação.

Vamos usar autenticação HTTP, que também é mistificada. Autenticação HTTP é bem simples:
  • Quando autenticação é requerida, devolvemos estado 404 Authentication Required com o cabeçalho WWW-Authenticate: Basic realm="Este campo"
  • O cliente envia de volta um cabeçalho Authorization: Basic encoded_info
  • O «encoded_info» é um versão base-64 de usuário:senha


Então como isso funciona? Bem, estamos escrevendo «middleware», o que significa que tipicamente passaremos a requisição para outra aplicação. Podemos mudar a requisição, ou mudar a resposta, mas neste caso às vezes não passaremos a requisição (como quando precisamos dar uma resposta 401).

Para dar um exemplo de middleware muito, muito simples, aqui está um que capitaliza a resposta:
class Capitalizer(object):
# Geralmente passamos a aplicação para ser
# envolvida pelo middleware:
def __init__(self, wrap_app):
self.wrap_app = wrap_app

def __call__(self, environ, start_response):
# Chamamos a aplicação que estamos envolvendo
# com os mesmos argumentos que recebemos...
response_iter = self.wrap_app(
environ,
start_response
)
# Então alteramos a resposta...
response_string = ''.join.(response_iter)
return [response_string.upper()]


Tecnicamente isso não está muito correto, porque há dois jeitos de retornar o corpo de resposta, mas estamos escovando bits. paste.wsgilib.intercept_output é uma implementação um tanto mais complexa disso.

Então aqui está algum código que faz algo mais útil, autenticação:
class AuthMiddleware(object):
def __init__(self, wrap_app):
self.wrap_app = wrap_app

def __call__(self, environ, start_response):
if not self.authorized(
environ.get("HTTP_AUTHORIZATION")
):
# Basicamente self.auth_required é uma
# aplicação WSGI que apenas sabe como
# responder com with 401...
return self.auth_required(
environ,
start_response
)
# Mas se tudo estiver certo, então passa tudo
# para a aplicação envolvida...
return self.wrap_app(environ, start_response)

def authorized(self, auth_header):
if not auth_header:
# Se eles não deram um cabeçalho, precisam
# autenticar-se...
return False
# .split(None, 1) significa quebrar em duas
# partes nos espaço:
auth_type, encoded_info = \
auth_header.split(None, 1)
assert auth_type.lower() == "basic"
unencoded_info = encoded_info.decode("base64")
username, password = \
unencoded_info.split(":", 1)
return self.check_password(username, password)

def check_password(self, username, password):
# Autenticação não muito segura...
return username == password

def auth_required(self, environ, start_response):
start_response(
"401 Authentication Required",
[
("Content-Type", "text/html"),
("WWW-Authenticate",
'Basic realm="this realm"')
]
)
return ["""
<html>
<head>
<title>Autenticação Requerida</title>
</head>
<body>
<h1>Autenticação Requerida</h1>
Se você não pode entrar, então fique fora.
</body>
</html:gt;"""]


Então como usar isso?
app = ObjectPublisher(Root())
wrapped_app = AuthMiddleware(app)

if __name__ == "__main__":
from paste import httpserver
httpserver.serve(
wrapped_app,
host="127.0.0.1", port=8080
)


Agora você tem um middleware!

Dê-me mais middleware!


É mesmo mais fácil de usar o middleware de outra pessoa do que fazer seu próprio, porque então você não precisa programar. Se você estava seguindo provavelmente, provavelmente encontrou algumas exceções e tem de dar uma olhada no console para ver os avisos de exceção. Vamos tornar um pouco mais simples e mostrar as exceções no navegador…
app = ObjectPublisher(Root())
wrapped_app = AuthMiddleware(app)
from paste.exceptions.errormiddleware \
import ErrorMiddleware
exc_wrapped_app = ErrorMiddleware(wrapped_app)


Fácil! Mas vamos tornar mais interessante…
app = ObjectPublisher(Root())
wrapped_app = AuthMiddleware(app)
from paste.evalexception import EvalException
exc_wrapped_app = EvalException(wrapped_app)


Então cause um erro agora. E acione os pequenos +. E digite qualquer coisa nas caixas.

Configuração


Agora que criamos seu framework e sua aplicação, você pode encontrar a usabilidade juntando algumas dessas partes um tanto cruas. Bem, se você não encontrar, alguém mais que usar sua aplicação e quiser instalá-la em um local diferente ou configurá-la de forma diferente não será bem sucedido.

Então queremos separar o ajuste da aplicação da configuração da aplicação.

E depois?


Fique ligado, falarei sobre configurações (usando Paste Deploy) mais tarde e espero dar uma curta introdução a empacotamente e plugins também. Quando acontecer, aviso em meu blog.

Ian Bicking





[]'s
Rodrigo Cacilhas

2007-05-21

Respeito

lâmpada Já vinha adotando alguns padrões linguísticos mesmo antes de começar a escrever para blogs.

Tais padrões pessoais tentam respeitar as regras da Língua Portuguesa para neologismos e uso de termos estrangeiros. No entanto, sempre me senti sozinho – e até ridicularizado por isso.

No geral, as pessoas de meu meio profissional são tão escravas e vendidas, culturalmente enfraquecidas, sem respeito algum pela própria nacionalidade ou identidade cultural, que fica muito difícil manter uma postura de respeito linguístico.

É até difícil encontrar termos e expressões corretos em nossa língua por falta de referência.

Porém agora vejo que não estou sozinho e, em resposta aos artigos do Sergio e do Luis, vou retomar, reafirmar e reiterar minha postura linguística.

Vou me policiar ao máximo para evitar os estrangeirismos e voltar a fazer uso correto da Língua Portuguesa.

[]'s
Rodrigo Cacilhas

2007-05-19

Era da Informação

Tux Estive recentemente em uma discussão interna em minha firma sobre FOSS.

Aqui vou publicar algumas conclusões interessantes.

Venda casada


O governo está pensando em proibir definitivamente a venda casada de software e hardware quando possível – aliás, venda casada é crime pela legislação brasileira.

Um de meus sócios sugeriu que a «imposição» da venda de máquinas sem Windows só vai favorecer a pirataria.

Bem, claramente ele havia entendido mal antes de formular tal afirmação.

Não se fala em «imposição» da venda sem Windows, mas no fim da imposição de compra de qualquer software para possibilitar a aquisição de um hardware independente.

Ou seja, com o fim da venda casada, ainda será possível comprar PCs que venham com Windows, mas discriminadamente, ou seja, você passa a saber o quanto está pagando por cada coisa.

Assim torna possível que você não queira adquirir o sistema operacional e, desta forma, o valor desse tem de ser abatido do valor total da venda.

Então não haverá uma nova imposição, mas o fim de uma imposição que infringe a legislação.

Ah sim! A maioria dos usuários domésticos vai optar por instalar um Windows pirata na máquina, sem dúvida. Mas para o mercado isso não fará diferença.

Simplesmente porque a grande maioria das lojinhas de esquina vende Windows pirata – só que cobra pelas licenças como se fossem originais. Pirata da lojinha, pirata do primo do amigo do vizinho, não faz diferença.

Fará diferença para pequenas e grandes empresas, que terão a opção de adquirir máquinas por um custo mais em conta – muito mais em conta se você considerar as quantidades – e poderão ainda assim instalar sistemas operacionais legalizados 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB gratuitamente ou pagando licença separada.

Abre-se assim o leque.

Empregabilidade


Atualmente a participação maior do brasileiro no próprio mercado de Informática se resume a vender e dar manutenção, ou seja, todo trabalho divertido – e rentável – é feito fora do país – para onde vai o dinheiro. =P

Até há alguns que ganham algum dinheiro com desenvolvimento de software (hardware é mais difícil, mas também tem), mas sempre usando plataformas proprietárias estrangeiras, cujo dinheiro usado para compra e atualização da licença vai para o exterior da mesma forma.

Com uma maior participação no mercado brasileiro do FOSS, está crescendo novamente a criação nacional de ferramentas e aplicações – vide o maldito PHP.

O mais interessante é que o capital movimentado por FOSS dentro do país fica dentro do país, ou seja, fortalece a economia local.

Veja bem: as pessoas não estarão deixando de pagar seus impostos! Apenas estarão deixando de mandar dinheiro para fora do país, porém gerando o mesmo poder de trabalho.

Modelo colaborativo de desenvolvimento


Esta é uma expressão que os empresários estão usando há algum tempo para falar bem do que eles antes eram contra do FOSS.

A idéia é bastante simples e fácil de entender – se você quiser:

Uma equipe de desenvolvedores trabalhando fechada em um empresa é tão produtiva quanto uma equipe de desenvolvedores trabalhando fechada em uma empresa e nada mais.

Uma equipe de desenvolvedores trabalhando colaborativamente com outras equipes, mesmo que esteja(m) dentro de uma empresa, é tão produtiva quanto a síntese holística das equipes associadas.

Mesmo que dentro de um grupo de equipes associadas apenas duas equipes colaborem ativamente, o grupo ainda será mais produtivo que apenas uma equipe e, logicamente, se há uma equipe colaborando, há a possibilidade de haver mais equipes colaborando também.

Estatística simples.

Portanto o modelo colaborativo é obviamente mais produtivo do que o modelo centralizado de desenvolvimento obscuro.

Responsabilidade social


Com o advento da Era Industrial as pessoas se tornaram extremamente individualistas e antissocialistas.

Mas nenhum indivíduo consegue ser maior do que a sociedade na qual está inserido.

Nada contra o individualismo, mas quando ele ganha maior prioridade do que a responsabilidade social a sociedade começa a ruir e consequentemente os indivíduos são prejudicados.

O modelo colaborativo recria e reforça estruturas sociais, locais ou distribuídas, favorecendo assim os indivíduos mais do que a postura individualista.

É a Era da Informação chegando.

Filosofia


Os defensores dos modelos obsoletos, do status quo decadente, falam mal da nova fase dizendo que não é sensato defender «filosofias» ou idealismos.

Ironia das ironias: não há filosofia mais abstrata do que ser contra filosofias. Esta é uma «filosofia» destrutiva e precisamos ser construtivos.

É o verdadeiro progresso.

Quando falamos em filosofia de trabalho, na verdade não estamos falando de Filosofia, mas de princípios.

Um profissional sem princípios é um profissional que pode amanhã passar a perna em seus clientes. Você cliente confiaria em um profissional assim?

Ética profissional é a base do bom relacionamento entre cliente e prestador de serviço.

Então o que essas pessoas dizem é que elas não têm ética profissional e farão de tudo para ganhar dinheiro, mesmo prejudicar seus clientes.

Ainda sem essa tal «filosofia» que eles tanto malham, é impossível o trabalho em equipe e portanto o resultado de uma equipe que pense dessa forma será sempre inferior ao somatório dos resultados de cada indivíduo da equipe.

Por outro lado sob o novo modelo os profissionais seguem uma «filosofia» – isto é, ética profissional – que garante fidelidade.

Profissionais «com filosofia» trabalham melhor em equipe e o resultado do grupo é superior ao simples somatório dos resultados individuais.

Conclusão


O fluxo da corrente vem da Era Industrial para a Era da Informação e estamos bem no meio da passagem mais estreita.

Quem tentar se agarrar aos velhos hábitos se afogará. Quem seguir a corrente emergirá do outro lado renovado.

[]'s
Rodrigo Cacilhas