Peregrino

Quem viveu clima de TCC sabe como a vida é, geralmente as últimas semanas são as piores, é cansativo, você já não vê a hora de terminar e sente náuseas ao ver o texto. Bom, já passei pelo TCC, estou no mestrado, encaminhando coisas para a tese.

Sabe, desde o dia em que eu me dei conta de que isto nunca terá fim para mim, eu passei a me sentir tão bem ao sentar na frente da minha escrivaninha e me expressar com códigos em C, equações matemáticas e textos legíveis por humanos.

Eu fico feliz de ter descoberto o que completa os meus anseios de cara meio maluco e curioso que gosta de fazer analogias malucas e engraçadas.

Sei que agora estou escalando uma montanha, e que é difícil chegar ao  vale dos caras malucos com ideias curiosas e analogias engraçadas. Mas este caminho é tão bom de fazer, que apesar de muito cansado, eu ainda acordo feliz e esperançoso em faze-lo.

Talvez eu tenha encontrado o caminho em que eu consiga apreciar o caminho, que o próprio caminho basta, afinal, eu já trilhei dois caminhos em que eu cheguei, e sempre que cheguei, por instinto humano, quis achar o próximo caminho, então, acredito que encontrar o destino que nos satisfaça, apesar de bom, não vai me completar tanto quanto o caminho que me satisfaça. Aquela história de “apreciar o caminho”.

Como o Limite da ciência de hoje ao infinito parece tender ao infinito, fico feliz de saber que este caminho não terá fim. Como um peregrino em peregrinação, ai vou eu, continuar, na esperança de um dia, ajudar outros peregrinos, quais não busquem chegar, busquem fazer o caminho um lugar mais prazeroso de se caminhar.

E então uma nova manhã chega.

Desenvolvimento de plugin para o eclipse

Uso o Eclipse para duas coisas: Desenvolver aplicações em C e usar com indexador para o código do kernel (também uso o cscope, mas para partes do sistema que nunca toquei, navegar com o eclipse é mais confortável).

Mas agora me surgiu uma nova necessidade, estou estendendo os plugins do LTTng para o meu tema do mestrado, então tenho que usar o eclipse para editar o próprio eclipse, e é muito bom, é muito fácil extender o eclipse.

Agora entendi porque os fabricantes de hardware como a Texas, Atmel, and so on, usam o eclipse como interface, é realmente simples. Com certeza, junto com o kernel e a gcc o eclipse é um dos meus projetos de software livre predileto, e ó que ele é escrito em Java!.

Segui o seguinte how to para montar o ambiente de desenvolvimento: http://wiki.eclipse.org/Linux_Tools_Project/LTTng_Eclipse_Plug-in_Development_Environment_Setup

E a cegueira da visão

Ontem vindo do sul do estado e me liguei a seguinte frase (da musica GITA do Raul Seixas):
“Eu sou os olhos do cego
E a cegueira da visão”

É, vivemos em um mundo onde as pessoas mostram a foto mais bonita, o lugar mais desejado, os melhores sorrisos… mas não mostram e assumem a verdadeira realidade. Isto é a cegueira da visão.

As pessoas andam mais preocupadas em parecer ser do que realmente ser, as músicas em mostrar que são o que não são, o mundo tentando esquecer os seus problemas atrás de uma aparência que não existe, levando as pessoas na inércia de tentar buscar o que elas não são. Em um mundo embriagado, acabam por se frustrar na ressaca moral do próximo dia e afogam-se na mesma embriagues, certas de que a melhor forma de curar a ressaca é manter a bebedeira.

É difícil manter-se sóbrio, é difícil encarar a realidade, é difícil encarar os problemas, é muito difícil ser! mas esta é a vida, isto é viver, isto é ser forte, isto é ser feliz, isto é o prêmio.

Sempre de frente, sempre na verdade, sempre sóbrio, é difícil? é, mas esta é a verdade, o resto é hipocrisia.

Mega Upload, pobreza mental e Script Kidies anônimos.

Bom, não poderia deixar de opinar sobre os ataques e a história do MegaUpload.

Bom, sou absolutamente a favor da liberdade de expressão, de conhecimento e principalmente da internet continuar sendo um meio de se difundir conhecimento e liberdade. Afinal, tudo o que tenho devo a liberdade de CONHECIMENTO e de SOFTWARES LIVRES, quais legalmente estão disponíveis na internet.

Isto significa que não sou a favor da pirataria. Não porque estamos livres que podemos sair roubando.

Toda produção artística, de software, de conhecimento, envolve custos, e sem o financiamento provido por meio da venda deste produto, agora eletrônico, não é possível financiar a vida das pessoas que o produzem.

Ai vem as pessoas dizerem que as grandes da mídia obtêm lucros exorbitantes com isto, pensamento direcionado e sem noção, deste lucro se pagam novos artistas e todos os outros envolvidos diretamente como figurinistas, maquiadores, costureiras, projetistas gráficos, pesquisas, …, enfim, pessoas normais como nós sem este dinheiro não sobreviveriam fazendo o que mais gostam, como eu, eu não sobreviveria.

Além do prejuízo financeiro produzido pela pirataria, existe um prejuízo ainda pior para nós! o prejuízo cultural!

Com a pirataria diversas bandas locais deixam de existir porque você baixou de graça as músicas daquela banda estadunidense (odeio quem fala americanos, afinal, somos todos americanos pois vivemos na América) famosa. Diversas peças de teatro deixam de existir porque você passa o dia inteiro baixando séries estadunidense e não vai ao teatro ver a cultura local.

Desculpem amigos que estão indignados com o fechamento do Megaupload, mas eu sou a favor, este não visava disseminar conhecimento/cultura/liberdade e sim o lucro de seu dono, a pobreza financeira de empresas que sustentam o estomago e o sonho de muitas pessoas e a pobreza mental e cultural de um país inteiro.

E a estes auto denominados Hackers, vocês não passam de uma cambada de desocupados, que baixam um ‘script’ e executam no seu Intel Core i7 com 20 GB de RAM e 80 TB de HD com filmes e músicas que nunca produziram conhecimento nenhum. Puro desperdício.

Criptografia e Indução matemática

Opa! Este é um post rápido, pois como de costume, me falta tempo para dar uma explicação maior sobre o que ando fazendo, eu poderia estar triste por isto, porém, como gosto muito do que ando fazendo, na verdade fico muito feliz de estar bem ocupado (ta ta sei que sou esquisito).

Enfim, esta semana me vieram com o desafio de criptografar senhas entre a comunicação entre dois dispositivos de telecomunicações, sendo que estes dispositivos podem ser tanto DSPs como MCUs sem ponto flutuante… enfim, deveria ser um algoritmo auto-contido (sem poder usar bibliotecas) e com matemática inteira (sem ponto flutuante).

Decidi implementar RSA e para isto utilizei esta apostila que explica matematicamente o RSA. Ao acha-la, achei também esta documentação sobre indução matemática, muito explicativa por sinal, que deve ajudar bastante alunos de ciência da computação já que a maioria dos cursos de CC (como o que fiz) não explica indução matemática que é fundamenta na resolução de recorrências em análise de algoritmos.

Busca mágica

Uma ajudinha para quem procura livros no google:

-inurl:htm -inurl:html intitle:"index of" +("/ebooks"|"/book") +(chm|pdf|zip) +"O'Reilly" "O QUE VOCE DESEJA"

Não custa salvar

Opa!

Este é um documento que não custa nada salvar: Lista de aceitos para o Mestrado de Engenharia de Automação e Sistemas da UFSC 2011.

Apesar de ter começado a estudar ano passado eu aproveitei a possibilidade de cursar 3 matérias como aluno especial e iniciar o mestrado já com algumas matérias a menos para fazer, pois como trabalho é difícil fazer o mestrado como um aluno de dedicação exclusiva.

Bom, sobre Análise de algoritmos, atualmente estou estudando um pouco de matemática discreta qual é exigida para provar a complexidade dos algoritmos, diferente do que alguém poderia pensar, eu gosto de matemática, ou melhor, aprendi a gostar de matemática o ano passado principalmente após ler o lívro dos números – Uma história ilustrada da matemática.

Para fechar, ontem comprei um livro que irá me fazer um nerd completo, o que faltava saber, depois de aprender tudo sobre a história da matemática, explicar a paralaxe para uma menina na beira da praia, e ter fundamentos para dizer que a frase “tudo é relativo” é mentira porque a velocidade da luz é constante, eu comprei … suspense… UM LIVRO DE ASTRONOMIA! mais detalhes nos próximos capítulos :)


Aulas on-line de AA

Opa! Post rápido!

Achei na Web as aulas do MIT sobre algoritmos. no DAS seguimos o mesmo livro. Os vídeos estão disponíveis em:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

Vou salva-los para não correr o risco de perde-los :)

Análise de algoritmos

Opa!

No próximo trimestre do mestrado vou fazer a matéria peneira do curso, Introdução a Algoritmos.

O título parece “for dummies”, porém a matéria não é sobre como fazer algoritmos, é sobre análise algorítmica. Apesar das aulas começarem efetivamente após o carnaval (como quase tudo no Brasil) eu comecei a estudar desde já, principalmente sobre a fundamentação matemática exigida para a compreensão da matéria.

Vou postar aqui as coisas relevantes sobre esta matéria, pretendo deixar as coisas que gosto (leia-se Kernel, embarcado, motoGP) um pouco de lado e dar atenção a esta matéria, afinal, é isto que buscamos como programadores: melhores algoritmos e para isto precisamos aprender como corretamente avaliar a eficiência de um algoritmo.

De começo, estou lendo o livro Introduction to Algorithms do Cormem, e logo no capítulo 2 sessão 1 ví que deveria ler um pouco mais sobre a fundamentação matemática exigida, o legal é que o livro trás isto em apêndice. Além do livro procurei na internet algo sobre  e achei a página do Prof. Paulo Feofiloff da USP, no seu site encontrei um Minicurso de Análise de Algoritmos, quem estiver interessado em um overview do que terei nos próximos 4 meses (4 porque comecei antes, menino prevenido) de uma olhada no “Mini curso”.

Me desejem sorte :)

VM para desenvolvimento

Desenvolver para o kernel trás um pequeno inconveniente: Esperar a máquina reinicia a cada erro no seu código.

O ideal é ter dois computadores, um para desenvolver e outro para testar (e esperar reiniciar), antigamente eu fazia isto usando meu Netbook para desenvolver e o Desktop para testar, porém, agora comprei um computador novo e é um pecado usar um Atom para desenvolver e testar em um Core i5 :-) , e como meu Netbook é meu fiel escudeiro não posso arriscar fazer testes nele e correr o risco de danificar o sistema, outro fato é que meu netbook não tem porta serial o que dificulta um pouco na hora de ler um oops ou panic.

Como em casa tenho estudado sub-sistemas que não dependem de hardware, diferente do trabalho onde tudo gira em torno do Hardware e rende algumas brigas de “Caras do Hardware” vs. “Caras do software”, decidi criar uma máquina virtual para desenvolver para o kernel.

Das possíveis implementações de máquinas virtual decidi por usar o KVM e como distribuição Linux optei pelo Fedora.

No Desktop eu fiz uma instalação típica de Desktop: X, Gnome, OpenOffice, Internet Gráfica mais as “Ferramentas de desenvolvimento” e o suporte a virtualização.

Após instalar, primeiro boot, atualizar o sistema, trocar o papel de parede e tomar algum café, eu iniciei a criação de uma máquina virtual no KVM e a instalação do Fedora. Para a instalação da VM optei por fazer a instalação mínima mais os pacotes de “Ferramentas de desenvolvimento”.

Após o boot da máquina virtual, instalei o vim-enhanced e inicie a configuração de algumas facilidades.

Primeiro, configurei a interface de rede da VM para pegar endereço via DHCP criando e editando o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0, qual ficou com o seguinte conteúdo:

DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=dhcp

Após isto verifiquei os serviços do sistema com o comando “chkconfig –list | sort -k 5″ (o “sort -k5″ é para ordenar os dados pela quinta coluna, que são os serviços do runlevel 3, assim fica mais fácil de identificar os serviços habilitados) e após ver os necessários desabilitei alguns serviços:

[root@k ~]# chkconfig auditd off
[root@k ~]# chkconfig iptables off
[root@k ~]# chkconfig ip6tables off
[root@k ~]# chkconfig netfs off
[root@k ~]# chkconfig sendmail off

Além de desabilitar estes, foi necessário habilitar o serviço network que por padrão está desabilitado pois no fedora o gerenciamento de rede é feito pelo NetworkManager.

[root@k ~]# chkconfig network on

o sistema ficou com os seguintes serviços habilitados:

[root@k ~]# chkconfig --list | sort -k 5
auditd             0:off    1:off    2:off    3:off    4:off    5:off    6:off
cgconfig           0:off    1:off    2:off    3:off    4:off    5:off    6:off
cgred              0:off    1:off    2:off    3:off    4:off    5:off    6:off
ip6tables          0:off    1:off    2:off    3:off    4:off    5:off    6:off
iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off
netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
netfs              0:off    1:off    2:off    3:off    4:off    5:off    6:off
nfs                0:off    1:off    2:off    3:off    4:off    5:off    6:off
rdisc              0:off    1:off    2:off    3:off    4:off    5:off    6:off
restorecond        0:off    1:off    2:off    3:off    4:off    5:off    6:off
rpcsvcgssd         0:off    1:off    2:off    3:off    4:off    5:off    6:off
saslauthd          0:off    1:off    2:off    3:off    4:off    5:off    6:off
sendmail           0:off    1:off    2:off    3:off    4:off    5:off    6:off
svnserve           0:off    1:off    2:off    3:off    4:off    5:off    6:off
crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
udev-post          0:off    1:on    2:on    3:on    4:on    5:on    6:off

Sistema reiniciado e OK.

Após o boot, verifiquei o endereço de IP que a maquina recebeu e adicionei uma entrada no arquivo hosts para não precisar digitar o IP toda vez que conectar via SSH:

192.168.122.97  k       k.bristot.eti.br

Como vou trabalhar via SSH na VM também adicionei na VM um usuário “daniel” com o mesmo id do usuario “daniel” do PC e fiz a configuração no ssh para autenticar utilizando uma chave RSA sem senha, assim não preciso ficar digitando a senha toda vez que fizer login.

Para gerar a chave, executei o seguinte comando:

[daniel@kiron Desktop]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/daniel/.ssh/id_rsa):  (apertei enter)
Enter passphrase (empty for no passphrase):              (apertei enter)
Enter same passphrase again:                      (apertei enter)
Your identification has been saved in /home/daniel/.ssh/id_rsa.
Your public key has been saved in /home/daniel/.ssh/id_rsa.pub.
The key fingerprint is:
18:13:bc:ed:5a:ff:d1:55:65:7b:af:83:42:5d:ea:8d daniel@kiron.bristot.eti.br
The key's randomart image is:
+--[ RSA 2048]----+
|     ..         o|
|      ..       .o|
|      oo      ..o|
|      .+.  . o  +|
|      ..S . o   o|
|        o. . = o |
|       o .. E =  |
|      .   .. . . |
|           ..    |
+-----------------+

Na máquina virtual criei o diretório /home/daniel/.ssh com permição 700 e copiei o arquivo “/home/daniel/.ssh/id_rsa.pub” do PC para o diretório “/home/daniel/.ssh” da VM com o nome authorized_keys e ajustei a permissão deste arquivo para 600:

[daniel@k ~]$ mkdir .ssh
[daniel@k ~]$ chmod 700 .ssh
[daniel@k ~]$ scp "endereço do pc":.ssh/id_pub.rsa .ssh/authorized_keys
[daniel@k ~]$ chmod 600.ssh/authorized_keys

e testei a conexão a partir do PC do PC:

[daniel@kiron Desktop]$ ssh k
Last login: Sat Jan 22 17:51:15 2011 from 192.168.122.1
[daniel@k ~]$

Pronto, login sem senha do PC para a VM.

Para facilitar a troca de arquivos entre o PC e a VM eu exportei o meu diretório de fontes via NFS4 para a VM, para isto adicionei ao arquivo /etc/exports a seguinte linha:

/home/daniel/src                  k(rw,sync,no_subtree_check,no_root_squash,no_all_squash)

Já na VM, eu tive que adicionar o pacote nfs-utils:

[root@k ~]# yum install nfs-utils

criar o diretorio de montagem:

[daniel@k ~]$ mkdir src

e adicionar a seguinte linha ao fstab:

192.168.122.1:/home/daniel/src/ /home/daniel/src/    nfs4    defaults     0 0

Pronto, maquina instalada, acesso sem senha e arquivos compartilhados.

pronta para desenvolver!

Aaaaa última dica, o grub por padrão no KVM fica com um timeout de ’0′ e você não consegue editar a linha de comando do kernel em caso de erro, então, antes de mexer no kernel, edite o arquivo /etc/grub.conf e mude o Timeout de 0 para algum valor como 3.