quinta-feira, 18 de setembro de 2008

Notícias do front

Tem um tempo que não coloco nada nesse blog, então aí vão várias notícias de uma só vez:

  1. Haskell é sem dúvida muito legal, mas a lazy evaluation pode pregar algumas peças. Implementei o "decodificador de DNA" do ICFP2007, e tenho certeza que o processamento está errado pois nem sempre uma das funções é avaliada. Tentei colocar bang patterns e o resultado foi bem diferente, condizente com essa suposição. Tenho para mim que a implementação "correta" deveria utilizar mônadas transformadoras de estado, mas ainda tenho que estudá-las para entender como funcionam.
  2. Recentemente comprei quatro livros, mas o que eu mais gostei foi o "Purely Functional Data Structures", por Chris Okasaki. Alem desses, comprei um de algoritmos (para completar a biblioteca!), um sobre Haskell e um sobre o Erlang.
  3. Erlang continua a me chamar a atenção... Acho que vou brincar um pouco com ele, para relaxar um pouco do Haskell.
Por hoje é só pessoal!

quarta-feira, 23 de julho de 2008

Veni, Vidi, Voltei...

Esse ano comecei a trabalhar no problema do ICFP contest, mas acabei jogando a toalha. O problema era bastante simples, e tinhamos 72 horas para terminar. Um colega de trabalho até começou a me ajudar, pois havia decidido fazer em C++.

Ainda não tenho proficiência suficiente em Haskell, e ele também não conhecia Python para poder me ajudar. O problema é que, em C++, levei quase 3 horas só para implementar o I/O via rede, e estimava levar mais umas horas tratando a entrada para quebrar as strings. Definitivamente C++ não serve para o lightining round, a menos que você tenha um framework para isso. Usando Python ou Haskell, há dezenas de bibliotecas prontas para essas funções.

Tudo bem... Estou estudando Haskell e acho que ano que vem vou poder participar melhor. A linguagem tem me surpreendido, e sua curva de aprendizagem não é tão lenta quanto eu imaginava. Ainda vou olhar o Erlang e o OCaml, mas o Haskell ganhou minha atenção!

quinta-feira, 10 de julho de 2008

É amanhã!

Amanhã, as 16:00 de Brasília começa o ICFP Programming Contest. Esse ano limitaram as equipes à 5 membros, o que parece indicar uma tarefa menos trabalhosa. Gostaria de tentar fazer a tarefa em Haskell, mas como ainda não peguei o jeito da linguagem, devo acabar no C++ mesmo. Dependendo da tarefa, pode ser que use até Python mesmo...
Devo comprar 2 CD-RW para gravar duas imagens do LiveCD, pois pretendo usar meu micro e o da Paty na tarefa. No meu micro devo estar com o Ubuntu, e com o LiveCD no da Paty mapeando um diretório via NFS. Espero que dê certo!

segunda-feira, 16 de junho de 2008

Mudança de paradigmas

Desde que o Roberto me apresentou ao concurso de programação que acompanha a ICFP (International Conference on Functional Programming), venho me sentindo tentado a participar. O problema é que se trata de uma maratona de 48 a 72 horas, onde as equipes tem que executar uma tarefa, que tipicamente é resolvida utilizando os paradigmas de programação funcional. A palavra chave aqui é equipe. Devo admitir que as tarefas são bastante complexas, e a equipe de um homem só não dá conta. Além disso, é muito, muito difícil encontrar quem entenda de programação funcional.

Eu mesmo não conhecia esse conceito: a idéia é descrever o programa utilizando apenas funções e funcionais. Existem poucas linguagens para programação funcional, todas derivadas do lendário LISP, e da ML (meta-language). As mais conhecidas são o Haskell, o OCaml e o Erlang.

Em programação funcional, bugs podem ser evitados, não por métodos de teste ou depuração, mas por ser possível demonstrar os algoritmos usando uma álgebra especial, o cálculo lambda. Aliás, diversos nomes na programação funcional são de matemáticos do cálculo lambda, como Haskell Curry e Alonzo Church.

A mudança de paradigma é enorme! Estou pensando até em escrever algumas notas sobre programação funcional, mas acho que o formato de Wiki é mais apropriado. De qualquer forma, para quem quiser conhecer um pouco mais, indico o artigo do John Backus (o mesmo do Fortran), que explica qual a importância da mudança de paradigma, e apresenta uma linguagem conceitual, o FP. É um artigo árido, com uma notação matemática pesada, mas cuja leitura é importantíssima para conhecer o conceito.

Em tempo: brinquei um pouco com a biblioteca Clam, que citei em um post anterior, mas no Windows ela deu uma série de crashes de alocação de memória. Depois vou tentar de novo no Linux, ou usando o fonte, para depurar.

quinta-feira, 5 de junho de 2008

Sinal dos tempos

Pois é... A velha piada ganha nova versões com o passar do tempo! Veja a evolução:

1900: "Dinheiro não traz felicidade!"

1940: "Dinheiro não traz felicidade, mas ajuda!"

1970: "Dinheiro não traz felicidade, mas manda buscar! Embrulhada pra presente!"

2008: "Dinheiro não traz felicidade, mas a compra pela Internet! Em banda larga de 16Mbps!"

Aproveitem: a Mega-sena está acumulada em 13,5 milhões de reais!

quinta-feira, 29 de maio de 2008

MIR - Music Information Retrieval

Tocar guitarra é um tanto divertido. Já havia tentado tocar teclado, onde aprendi muita teoria musical, e flauta doce, onde comecei a treinar a tirar músicas "de ouvido", mas sempre sentia falta de alguma coisa. Na guitarra, encontrei essa coisa: uma verdadeira rede social, composta de pessoas que tocam guitarra e violão, e estão dispostas a fazer intercâmbio de informações.

Para guitarra, existem sites e sites de tablaturas de músicas populares transcritas. É aí que começa o problema: na tablatura, aparece uma sugestão de digitação, mas não o ritmo. Além do mais, por várias vezes a tablatura se limita a colocar acordes sobre a letra da música, e os solos interessantes ficam por conta de quem está executando. Para piorar, como a maior parte dos transcritores é amadora, geralmente há erros grosseiros de tom, ou cadências de acordes que não casam com a música.

Há alguns meses comecei a pensar em formas de obter essas informações diretamente de uma música. Não queria muito, só o tom, o tempo, talvez o ritmo... A afinação também é interessante (nem sempre o Lá está em 440Hz). Comecei a estudar meu livro de processamento de sinais novamente, principalmente no tocante a processamento multi-rate. Até que me toquei de procurar algum paper sobre o assunto.

Pois é. Não encontrei só um paper! Encontrei muitos. Na verdade, tem até um grupo na TU Wienn estudando isso, com filtros, redes neurais e tudo que você puder imaginar. Além disso, há frameworks para processamento de músicas, como o Clam e outros milhares listados num site chamado MIR Systems. Tudo é bem documentado, e, pelo lado positivo, o caminho que havia escolhido é exatamente o que esses sistemas implementam!

Bom, tenho muita coisa nova pra brincar agora.

quarta-feira, 28 de maio de 2008

A felicidade

Dizem que a felicidade está nas pequenas coisas da vida. Eu concordo: um pequeno iate, uma pequena mansão na Riviera, uma pequena BMW Z4M Roadster. Como ainda estou muito longe de ser feliz, sigo com meu contentamento descontente!

Bobagens a parte, ontem achei a solução pro meu problema de rede no Ubuntu: arranquei o Network Manager e coloquei o WICD que, apesar de não tão interativo, é muito legal. Realmente wicked (do dicionário Merrian-Webster: going beyond reasonable or predictable limits; of exceptional quality or degree, ou seja, muito legal). É disso que gosto no Ubuntu e gostava no Gentoo: ambos tem uma comunidade participativa que não fica esperando acontecer.

Juntando Linux e pequenas coisas, sempre acabo me lembrando de um sonho de consumo: Gumstix! Pra quem não conhece são computadores com processadores ARM, que medem cerca de 8cm de comprimento por 2cm de largura (sem caixa, é claro), tendo o tamanho aproximado de um chiclete americano. Vale a pena dar uma olhada!




terça-feira, 20 de maio de 2008

Durou pouco

Como dizia o poeta: RTFM!!

  • In Ubuntu 8.04, network-manager only manages interfaces that are marked for roaming. Thus, all interfaces that were previously managed by network-manager will be set to roaming mode during upgrade. Technically, this takes any interface stanzas using the dhcp method with no options and that are marked auto, and removes them from /etc/network/interfaces. If you rely on your interfaces being started by ifupdown when the system starts up, you need to re-enable them in /etc/network/interfaces manually, or disable roaming in System -> Administration -> Network.

Como dizia um conhecido meu: It's not a bug!! It's a feature!!

Problemas no paraíso

Pois é... O Ubuntu está de implicância comigo de novo!

Parece estranho, mas meu micro de casa tem uma placa 802.11g. Eu usei essa placa na casa da minha mãe, enquanto o meu apartamento não ficava pronto, e acabei por deixá-la instalada, como mais um gadget. Pois bem, o Ubuntu identifica e configura essa placa, mas dá a preferência a placa Ethernet do micro.

Tudo funciona bem se eu usar o DHCP. O problema começa quando tento atribuir um IP estático para a placa de rede: o Ubuntu então decide que a placa Ethernet não está funcionando e troca a conexão para o WiFi. Se eu configurar usando o ifconfig e route, a rede funciona como esperado. Tudo volta ao normal quando eu coloco todas as placas em DHCP.

Vou tentar descobrir como resolver o problema, e, se encontrar a resposta, coloco aqui.

segunda-feira, 19 de maio de 2008

Bemvindos ao novo blog

Pensei muito se começava um novo blog, ou se continuava o do LiveSpaces. Depois de perceber que o LiveSpaces só conversa bem com o IE, resolvi que devia começar de novo. Não vou tentar importar os posts antigos, até por que são pensamentos soltos e não importá-los não cria nenhum problema de continuidade.

O blog antigo vai continuar lá, no LiveSpaces.

Nesse aqui vou tentar reclamar menos... Espero que consiga!

Minha saga no Linux

Publiquei isso ontem no meu antigo blog, e resolvi inaugurar esse aqui com o texto na íntegra.




Do Slackware ao Gentoo...

Vou começar pelo começo. Houve uma grande explosão, a matéria se agrupou em átomos, as galaxias se formaram. Ao redor das estrelas, a matéria se condensou em planetas...

Um pouco depois, em 1994, um estudante de Engenharia na UFRJ, empolgado com o desenvolvimento de software distribuído em UNIX (Ultrix 32, em estações DECstation 4000) esbarrou no Linux. Era um kernel de um sistema operacional POSIX, que acabara de chegar a sua versão 1.0. Na verdade, era a versão 1.0.23, na primeira vez que ele viu, e ficou empolgado com a possibilidade de instalar isso em casa e ter todas as vantagens que não encontrava na dupla MS-DOS 5.0 e Windows 3.0 (sim, 3.0!). Nessa época, a única distribuição disponível era o Slackware, em 26 disquetes. O brinquedo era interessante, mas as constantes quebras em atualizações do kernel (1.0.89, por exemplo, não bootava e corrompia o disco) fizeram o Linux ficar esquecido.

Já em 1999, o engenheiro já formado, resolveu tentar de novo, pois ouvira falar de uma distribuição nova, com um mecanismo capaz de simplificar as atualizações. Era o RedHat, já facilmente encontrado em revistas de CD para um público alvo bem definido (por exemplo, a revista Geek, voltada para, bem, geeks). O RedHat era legal, usava o novíssimo kernel 2.0, muito mais estável. Sem que o engenheiro soubesse, o chapéu vermelho escondia a face do mal, e o levou para o famígero RPM hell. Esse era um mal que assolava o RedHat, e que criava problemas seríssimos de dependências circulares que bloqueavam todas as tentativas de update. O pior: por várias vezes, essas dependências apareciam entre pacotes básicos, ou seja, bastava o básico do RedHat estar instalado pra acontecer. Frustrado, o engenheiro largou o Linux pela segunda vez, mas nunca se conformou.

Em 2002, esse engenheiro foi catapultado pela empresa em que trabalhava para uma outra cidade, onde, obviamente não conhecia ninguém. Havia acabado de terminar um namoro longo, e procurava um hobby, quando o Linux reapareceu em seus pensamentos. Conversando com um colega recém-chegado na empresa, o engenheiro descobriu que as distribuições haviam se multiplicado, e que duas valiam a pena ser tentadas: Debian e Gentoo. O engenheiro resolveu partir para o Debian que possuia um mecanismo de atualização parecido com o RPM, mas a administração das atualizações evitava as dependências circulares. No entanto isso era levado tão a sério, que as versões dos aplicativos era extremamente desatualizada. Em resumo, o Debian era Débil!

Nessa mesma época, esse engenheiro pegou seu primeiro link de banda larga, um ISDN de 128kbps. Era hora de tentar o Gentoo, com sua abordagem radical de compilar tudo do zero, o que garantia que não haveria dependências não resolvidas. Baixou o CD do Gentoo 1.4 e resolveu instalar. O Gentoo oferecia três tipos de instalação, e ele, é claro, escolheu a mais radical: stage 1. Nessa instalação tudo, inclusive o gcc era compilado do zero. O engenheiro levou 3 dias para compilar o sistema base, e mais 3 dias para compilar o KDE. No sétimo dia, ao invés de descansar, teve que reinstalar o Windows XP, pois na pressa de fazer o Gentoo funcionar, passou o HD errado para o mke2fs e mandou tudo pelos ares.

O Gentoo era o paraíso. Tudo funcionava, e o namoro durou 5 anos, até 2007. Os problemas começaram um pouco antes, pois o engenheiro já estava cansado de ter que esperar 20 horas para as atualizações compilarem. Havia chegado o momento de procurar outro caminho.



Do Gento ao Fedora, e do Fedora ao Ubuntu...

Após avaliar todas as opções, o engenheiro escolheu o Fedora, em sua versão 7, como a melhor opção. O Fedora 7 nem esquentou o micro. Era tão focado em segurança que sua configuração do SELinux não permitia fazer nada! Aborrecido, em 15 dias o engenheiro tentou a segunda opção: o Ubuntu, na versão 7.10.

A primeira surpresa do engenheiro foi quando o Ubuntu se instalou em 2 minutos (!), sem reclamar de nada e advinhando a maior parte das opções! Uma maravilha. Mas na mão do engenheiro, o brinquedo quebrou, de tanto que ele mexeu nas configurações de som. Ele pensou em reinstalar, mas faltavam apenas 3 dias pro lançamento da versão 8.04, e então resolveu instalar essa nova versão do zero.

Do Ubuntu ao Fedora... E de volta para o Ubuntu!!

Primeiro problema: quando o sistema entrava no X, tudo que aparecia eram linhas verdes verticas. Tempo perdido! O engenheiro levou um tempo para descobrir como ativar o driver VESA e instalar. Um tanto frustrante, especialmente por que o driver da nVidia também não estava legal, e se recusava a ir além de 60Hz de refresh rate.

Novamente, o canto da sereia: o Fedora 9 foi lançado e o engenheiro, empolgado tentou instalá-lo. Dessa vez, o pessoal do Fedora exagerou! TUDO era beta, inclusive o X, que não era compatível com o driver da nVidia. Ficar restrito ao driver VESA, em 60Hz era sua sina!

O engenheiro então fraquejou:
- Vou formatar essa m... toda e deixar tudo com o RWindows!!

Então seu coração apertou, e ele resolveu dar uma segunda chance ao Ubuntu 8.04. Já sabendo os problemas que enfrentara na primeira tentativa, utilizou as lições aprendidas para conseguir instalá-lo em 2 minutos, como havia feito no passado! A comunidade do Ubuntu, mais ativa, já havia encontrado soluções para todos os problemas encontrados, como o Java, o refresh dos drivers da nVidia.

O engenheiro e o Ubuntu resolveram suas diferenças, e foram felizes para sempre... Pelo menos nos últimos dois dias!


Postagens populares