Archive for the ‘Nerdocracia’ Category

C++ blues

Thursday, May 31st, 2007

C++ é uma linguagem fantástica, até a hora em que ela começa a lhe mostrar seus espinhos. Infelizmente, isso acontece com muita freqüência, o que torna programar nessa linguágem um trabalho de corno. E não são coisas complicadas (criar em tempo de execução classes usando apenas uma string com seu nome), mas as coisas simples as que mais irritam:

  • Você deve explicitamente chamar os construtores das classes pai.

    Isso é obvio mas… por quê? Se eu não estou acrescentando nenhum atributo à classe e quero preservar na classe derivada as mesmas assinaturas dos construtores da classe-pai para que re-escrever tudo? Talvez eu tenha passado tempo demais em python, onde todos os métodos (incluindo construtores) são virtuais.

  • Não se deve chamar métodos virtuais em construtores

    Novamente, depois que você adestrou seu cérebro para pensar na lógica de C++, isso também deveria parecer óbvio. Mas não parece. Isso é tão verdade que o Scott Myers tem uma entrada especificamente para isso no seu Effective C++, 3ª edição.

Fim da BrasNet

Tuesday, May 22nd, 2007

Quando comentaram comigo “A BrasNet fechou” eu pensei, “Bom, estava demorando para o inevitável acontecer”. Quase todo mundo usa MSN e Google Talk hoje em dia. Dentre as pessoas mais novas, quase nenhuma sequer conhece o IRC. Eu faço doutorado em computação e mesmo assim poucos dos meus colegas de laboratório (muitos deles da minha idade, diga-se de passagem) nem mais sabem o que é isso. E mesmo entre os que sabem, alguns não farão idéia do que eu estou falando a menos que eu chame IRC de “mirc“.

O fato é que, ao ler o relato do mantenedor da Brasnet sobre seu fechameto, me bateu uma grande nostalgia.

Eu também usei gopher, usei o Veronica, quando na época não existia mais nada similar. Adorava fazer consultas sobre células de combustível. Ainda me lembro do meu meu primeiro contato com o IRC, que também foi pela jacaré BBS, através de um terminal ligado à RNP no CEFET-CE, em meados de 1995. No dia, a conversa que rolava no #brasil era sobre a arte de enrolar um baseado — na época, eu mal tinha 14 anos. Eu estava lá quando os canais de estados brasileiros começaram a pipocar na EFNET, estava lá quando do surgimento da BrasNET e da BrasIRC. Conheci muitos amigos meus por lá e muitos dos que hoje são meus amigos são conhecidos de amigos meus do IRC.

Uma lástima a BrasNet fechar. Como diria Regina, com ela vão memórias de “um tempo que não volta nunca mais”.

Lidando com falta de espaço em disco

Thursday, June 15th, 2006

A C9, onde o blog fica hospedado, vez por outra sofre com problemas de falta de espaço em disco. Quando isso ocorre, não é incomum uma ou várias das tabelas do banco de dados desse blog ficarem corrompidas. Como isso estava ocorrendo com uma certa freqüência, resolvi arregaçar as mangas e tomar uma providência nada convencional para esse problema. (more…)

O que é isso? É um caranguejo estilizado?

Wednesday, June 7th, 2006

Não, não é, mas muito obrigado por perguntar :-)

***

A propósito, aquele meu patch já foi acrescentado ao Moin , na versão 1.5.3.

***

Ah! Pois é, rolou um tempo atrás outra edição do Bordel da Raquel, uma festa semestral da Comunicação Social da UFMG. Sobre ela.. bom… tudo que há para ser dito é que ir de chinelos havaianos para uma festa dessas não é uma boa idéia.

Skype Reverse-Engineered e Freenet 0.7

Wednesday, April 5th, 2006

Só para constar: saiu na zeropaid uma matéria sobre um trabalho de engenharia reversa no software do Skype. Muitíssimo interessante.

Noutro front, a notícia do dia é que o Freenet 0.7 foi lançado.

Vortex Drops

Tuesday, March 21st, 2006

A Internet é uma fonte inesgotável de vortexes de procrastinação. Frequentemente, enquanto procura-se por uma dada coisa você acaba encontrando outra quase completamente desconexa da primeira mas muito, muito mais interessante. Os drops de hoje refletem isso :-)

RestAdmonitionPatch
Tudo começou por aqui. Fui ver a quantas andava a página de um patch (aceito :cool: ) que eu fiz para o MoinMoin. Daqui eu acabei indo para outra página e, via google, para…
FastCGI, SCGI, and Apache: Background and Future
Aqui segue uma boa discussão sobre FastCGI, proxies, mod_{php,python,ruby} e ambientes de execução persistente para aplicações web. Leitura de suma importância para quem anda acompanhando as últimas do mundo python… (e ruby…). O cara que estreveu esse artigo tem um blog muito bacana que apontava para…
ten great subversion tips
Artigo da ONLamp sobre dicas para subversion especialmente feitas para aqueles que recentemente migraram do CVS. E, falando em softwares para controle de versão…
NewVCS e …moving from CVS to git
Vários projetos estão migrando de sistemas de controle de versão centralizados para modelos descentralizados. E, por incrivel que pareça, o git, do Linus, parece estar ganhando momentum. E eu achando a facilidade de criar branches no subversion a melhor coisa dos últimos tempos…

E é isso ai crianças.

Yeah Yeah Yeahs - Tick

Multicast de Feeds RSS/Atom

Wednesday, October 19th, 2005

A cool-thingie do dia é o feedtree: collaborative micronews delivery“. Os caras criaram uma rede P2P para disseminar feeds. Coisa fina: redes DHT, application layler-multicast, autenticação, proxies HTTP para clientes legados… Tudo muito interessante.

Children of lesser python

Tuesday, October 18th, 2005

Para não ficar calado muito tempo, o link do dia é o Children of a Lesser Python. Uma ótima discussão sobre o estado das VMs (ou plataformas atuais ) para python.

The Libertines - Can’t Stand Me Now

HBO attacking BitTorrent

Friday, October 7th, 2005

Estava demorando. Desde a derrubada do suprnova a comunicadade bittorrent não recebia nenhum ataque frontal — até agora. A HBO está atacando o bittorrent e em grande estilo! Além de usar a já batida tática de envenenamento de arquivos ela está inundando os trackers com clientes que só distribuem cópias danificadas, na tentativa de dimunuir o fôlego das transferências de episódios da sua série Roma. Aparentemente o contra-ataque está surgindo na forma de listas negras usadas através de DNS, similares às já existentes para evitar o recebimento de spam de nós conhecidamente maliciosos.

Seria essa hora de aproveitar o protocolo de troca de mensagens do azureus para algo mais? Afinal, como dito na matéria da O’Reilly Radar, com o protocolo do bittorrent, é trivial descobrir se um dado usuário está lhe enviando pedaços danificados do arquivo. Difícil seria compartilhar e dar crédito a notificações de nós máliciosos de forma confiável — ou seja, lidar com o problema de confiança distribuída.

Ian Van Dahl - Castles in the Sky

Guerra dos Clones

Tuesday, September 20th, 2005

O pessoal não cansa de criar clones do Ruby on Rails em python. Primeiro veio o Subway, depois o Django e agora agora apareceu mais um, o TurboGears. O que esse último tem que os outros não tem? Praticamente nada, a única grande diferença é que ele foi construído usando projetos mais antigos para python ao invés de começar tudo do zero. De qualquer forma, isso não vai dar certo…

***

Criptigrafar senhas no lado do cliente com RSA e JavaScript? Tem gente que não só afirma que funciona como também dá dicas de sítios sobre AJAX e JavaScript

Tom Jones & Stereophonics - Mama told me not to come

Science is about being a blind man with a stick

Tuesday, September 13th, 2005

What you learn, when you read works like Novum Organum by Sir Francis Bacon, is that science is about being a blind man with a stick, and he who most persistently pokes blindly ahead of him, contributes the most to our understanding of the Universe, though only if he is willing to accept what the poking tells him that he does not want to be true.

Hans Reiser
Bob Sinclar - Love Generation (radio edit)

Security Link Fest

Thursday, September 1st, 2005
Acounstic Cryptoanalysis
E você achando que não tinha mais com o que se preocupar…

Military Grade Wireless Security

Nem WEP nem WPA: o lance é usar IPSec para protejer links sem-fio

Routing in the Dark — Scalable searches in dark P2P networks

Apresentação do Ian Clark sobre o Small-World Networks, roteamento nessas redes e coisas similares.

Revisitando Velhos Problemas

Tuesday, August 23rd, 2005

um tempo atrás eu comentei sobre algumas ferramentas escritas em python para fazer network sniffing. Precisei construir uma ferramenta dia desses e me dei conta de que aquelas listadas não bastariam. Acabei tendo que recorrer à pcapy e à dpkt. A primeira é um binding da libpcap para python, um dos poucos que permite ler um trace-file em off-line. A segunda é uma ferramenta que facilita a leitura e a decodificação de pacotes lidos diretamente da rede. Por exemplo, com a dpkt é muito fácil extrair o payload de um pacote UDP contido dentro de um pacote IP, por sua vez contido dentro de um pacote Ethernet.

***

E vamos ao linkfest:

Why’s (poignant) Guide to Ruby
Fiquei curioso para ver como ruby é e acabei caindo no guia introdutório de uma linguagem de programação mais louco que eu já vi.
Really getting started with Rails
Mais outro tutorial sobre rails
Hugos House of Weblog Horror - Archiv der Kategorie ‘Python’
Um bom weblog sobre python em alemão.
Ian Bicking - A Conservative Metaclass
Ótima referência sobre o que fazer e o que não fazer quando estiveres fazendo uma metaclasse em python
MIT OpenCourseWare - Applied Statistics, Spring 2003
Da série “relembrar é viver”
HP Technical Reports - Peer to Peer computing
Para os interessados, uma visão geral da área de P2P pelo pessoal da HP.

Comparações entre Web Frameworks

Wednesday, August 17th, 2005

Dia agitado na blogsphere das linguages dinâmicas mais hypes do momento: ruby e python ;-) E, novamente, tudo por causa do Ruby on Rails.

A menos que você esteja escondido em uma caverna (porque o RoR já apareceu até na slashdot), a proposta do Rails (bem como da maioria das web frameworks que estão aparecendo) é facilitar ao máximo a vida do programador de “webapps”, geralmente adotando uma filosofia DRY e organizando a aplicação segundo um modelo MVC. Nada de escrever código para fazer CRUD: a arquitetura faz isso por você. Nada de escrever código SQL: usa-se algum tipo de ORM para transformar acesso a objetos em acessos ao banco de dados.

Desta vez a agitação ocorreu não devido a outra language-war entre o pessoal do Ruby e do Python, mas devido a uma comparação entre o Rails e o Django, a proposta do mundo pyhton para o Rails. Essa comparação, entitulada A comparison of Django with Rails, gerou uma boa seqüência de artigos e comentários.

Enquanto alguns artigos concentraram-se em fazer comentários sobre essa comparação ou de explicar como migrar de um web framework para o outro, outros voltaram para as comparações. entre as linguagens.

Para quem quiser entrar mais no mérito das language-wars, uma boa pedida é o artigo Ruby, Python, “Power” ou uma entrevista com o BDFL do mundo Ruby, onde ele comenta sobre closures e coisas do gênero.

Vale a pena dar uma lida nos comentários de todos os posts “linkados”: muita coisa boa pode ser peneirada de lá. Além disso, vale a pena dar uma olhada no seaside, uma web framework para - pasmem - smalltalk.

Kamaelia

Tuesday, July 12th, 2005

Direto do sítio do Kamaelia:

Kamaelia is designed as a testbed for network experimentation using a component architecture designed to simplify creation and testing of new protocols for large scale media delivery systems.

But what is it?

A collection of python generators running concurrently linked via communications channels.

Idéias começaram a pipocar na minha menta na hora que eu li isso. Eles até fazem uma comparação entre esse projeto e o Twisted no blog deles. Detalhe: esse projeto é do pessoal da BBC opensource.

***

Esse cara faz uns desenhos bacanas.

Paul Johnson - It’s a Love Thang

A pergunta

Tuesday, June 7th, 2005

A resposta não é 42, mas “logo”.

***

Prolixo, agora eu sou prolixo. Vamos ver qual será o comentário que eu receberei com o próximo capítulo…

***

– Qual é a desses pontinhos afinal? Você poderia me perguntar. Ah, eles me ajudam a não ser prolixo. :cool:

***

Para não pasar batido, o python-link do dia é:Python webcam fun - motion detection.

Sly & Robbie - The Ganja Man

Doublecast

Monday, May 23rd, 2005

Fazia um bom tempo que eu não aparecia por aqui. Resolvi vir e fazer um post mais para fins de bookmarking do que para qualquer outra coisa. É, outras coisas têm ocupado a minha mente e me envolvido numa áurea de culpa da qual está cada vez mais complicado me despir.

De qualquer forma, eu ainda não esqueci esse blog. Acreditem. CSS Style for you Wordpress RSS Feed.

***

Toda vez que eu volto de Fortaleza uma gripe se prende às minhas pernas e eu tenho que carregá-la por pelo menos uma semana a tira-colo para poder livrar-me dela.

Dessa vez peguei uma amidalite, com direito a antibiótico e tudo mais. Pelo visto a amidalite já deu uma trégua, mas deixou uma saudosa (?!) gripe no lugar. Realmente, foi uma ótima semana em Fortaleza.

***

Eu deveria ter me afastado deles por mais tempo, mas uma tarde de domingo morosa sempre é uma boa desculpa para retomar a antigos vícios.

O chato é que parece que, logo agora que eu finalmente consegui fazer o Titus e a Yuna se agarrarem, terei que me afastar deles mais uma vez. Por mais uma semana, quem sabe? Quem sabe eu consigo pegar o doublecast da próxima vez?!

***

Sim, falando em vícios, o python-link do dia é esse: The Python Chalange. Descubra o quando você realmente sabe usar a sua linguagem preferida. Mas não vale “trapacear”.

Sniffing network traffic in python

Thursday, April 21st, 2005

E os links dos dias são:

Sniffing network traffic in python
Sem comentários: o link salvou o dia! Esse lance de fazer tudo em C estava enchendo o saco!
TcpIpPowerTools
Deus salve o Google: estava procurando pelo pycap, o binding de python para a pcap e caí nisso. Perfeito: milhares de brinquedinhos e referências para a minha filha
Chemical Bros. - Hey Boy Hey Girls

Test-Driven Development in Python

Tuesday, April 19th, 2005

Existe um projeto no qual eu me meti e com o qual eu tenho perdido um bom tempo. Venho cozinhando-o há um bom tempo, e já quase o deixei em um estado onde ele pode ser servido — quase.

O problema é que eu comecei a ler sobre UnitTesting e fiquei curioso se isso funcionaria nesse projeto em particular e por isso venho perdendo quase todo o (pouco) tempo que eu gasto com esse projeto escrevendo UnitTests e refatorando o código.

Confesso que ainda não presenciei nenhum momento onde escrever um teste tivesse me salvado algum tempo ou tivesse me ajudado a definir melhor as interfaces do sistema mas estou confiante de que, de alguma forma isso vai mudar — espero. O que me faz pensar assim? .

Nagios, Request-Tracker e scrips

Tuesday, April 5th, 2005

Direto do Departamento de Engenharia “BOFH”-ística.

O pessoal daqui do laboratório usa uma combinação de Request-Tracker e nagios para gerência de problemas e monitoração de máquinas. Sempre que algum problema é detectado, o nagios abre uma requisição no Request-Tracker. Sempre que o problema é solucionado, outra requisição é aberta. O problema é que, com os experimentos que estão rodando no laboratório, a carga e o uso de swap das máquinas estão variando muito, indo de picos a vales e questão de minutos. OU seja: a cada hora era necessário ir para o Request-Tracker apenas para fechar todos esses tickets - e são vários. Não mais. o Scrip abaixo soluciona o problema. Mais informações aqui.

Description: Merge Into Existing Ticket on match

Condition: OnCreate

Action: User Defined Custom action preparation code:

1;

Custom action cleanup code:

# If the subject of the ticket matches a pattern suggesting
# that this is a Nagios RECOVERY message  AND there is
# an existing ticket (open or new) in the "General" queue with a matching
# "problem description", (that is not this ticket)
# merge this ticket into that ticket
#
# Based on http://marc.free.net.ph/message/20040319.180325.27528377.en.html

my $problem_desc = undef;

my $Transaction = $self->TransactionObj;
my $subject = $Transaction->Attachments->First->GetHeader('Subject');
if ($subject =~ /\*\* RECOVERY (\w+) - (.*) OK \*\*/) {
    # This looks like a nagios recovery message
    $problem_desc = $2;

    $RT::Logger->debug("Found a recovery msg: $problem_desc");
} else {
    return 1;
}

# Ok, now let's merge this ticket with it's PROBLEM msg.
my $search = RT::Tickets->new($RT::SystemUser);
$search->LimitQueue(VALUE => 'General');
$search->LimitStatus(VALUE => 'new', OPERATOR => '=', ENTRYAGGREGATOR => 'or');
$search->LimitStatus(VALUE => 'open', OPERATOR => '=');

if ($search->Count == 0) { return 1; }
my $id = undef;
while (my $ticket = $search->Next) {
    # Ignore the ticket that opened this transation (the recovery one...)
    next if $self->TicketObj->Id == $ticket->Id;
    # Look for nagios PROBLEM warning messages...
    if ( $ticket->Subject =~ /\*\* PROBLEM (\w+) - (.*) (\w+) \*\*/ ) {
        if ($2 eq $problem_desc){
            # Aha! Found the Problem TICKET corresponding to this RECOVERY
            # ticket
            $id = $ticket->Id;
            # Nagios may send more then one PROBLEM message, right?
            $RT::Logger->debug("Merging ticket " . $self->TicketObj->Id . " into $id because of OA number match.");
            $self->TicketObj->MergeInto($id);
            # Keep looking for more PROBLEM tickets...
        }
    }
}

$id || return 1;
# Auto-close/resolve this whole thing
$self->TicketObj->SetStatus( "resolved" );
1;


Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 Brazil License.