Instalação Gentoo

Posted in Linux with tags , on 23/02/2012 by felipessilveira

Recentemente comprei um desktop, e enquanto fazia a instalação do gentoo (seguindo o tutorial), eu fui fazendo uns comentários.

A configuração do desktop: intel core i5 2500, 8GB RAM, placa mãe Intel DH67GDB3, placa de vídeo Sapphire HD6850 e mouse razer diamondback 3g. (Os dois últimos que me fizeram documentar o processo, já que o resto é bem padrão)

Então daqui pra frente vão alguns posts =)

Funções com cache usando decorators

Posted in Scripts with tags , , on 15/04/2011 by felipessilveira

Opa. Muuuito tempo que não posto nada. Vou tentar postar mais coisas, juro =]

Estava discutindo esses dias com uns amigos sobre gerar sequência de
fibonnaci recursivamente e como programação dinâmica ajudaria a
diminuir a complexidade do programa.

Foi aí que veio a grande ideia: Fazer algo em python pra criar uma
cache de uma dada função.

Usei algumas coisas que aprendi nesse post do Guido e implementei uma cache pra uma função qualquer.

A ideia básica é a seguinte:
Quando a função é chamada, é necessário checar se ela já foi chamada anteriormente, se já foi chamada, basta simplesmente pegar o resultado guardado e retornar.
Se a função não foi chamada ainda, chamamos ela e guardamos em um mapeamento da forma (argumentos) -> retorno.

A primeira versão tinha uma cache de tamanho infinito (o que não é inviável pra coisas práticas). Depois resolvi implementar uma cache com tamanho finito (definido pela variável “size”) e política de substituição LRU. Para a implementação do LRU, devido à natureza desordenada do map, foi necessário adicionar uma lista pra manter a contagem de referências.

Quase esqueci de postar o código. dã.

Vocês podem encontrar ele no meu perfil do github.

Uma possível aplicação prática disso, pode ser implementar cache pra buscas em bancos de dados. Pra evitar fazer pesquisa em disco e também evitar deixar tudo em memória.

Bom, acho que é isso. Caso alguém tiver alguma dúvida, posta aí nos
comentários ou manda um email, ou qualquer coisa parecida =]

Análise de algoritmos cache conscientes

Posted in Scripts with tags , , , , on 28/11/2010 by felipessilveira

Há um tempo apresentei um seminário sobre algoritmos cache-conscientes, o meu objetivo era comparar algoritmos tradicionais e suas versões cache-conscientes.

A primeira coisa que decidi pra comparar os algoritmos foi os dados sobre misses em cache (dã), e me indicaram o valgrind. Com ele eu pude verificar os resultados dos algoritmos.

Mas a idéia do seminário era mostrar que existiam algoritmos assintoticamente melhores, logo seria necessário rodar várias vezes os algoritmos. E o pior ainda seria necessário comparar mais de um campo da saída do valgrind. Qual foi a solução pra essa tarefa chata, repetitiva e fácil? Um script! =D

O que eu fiz foi o seguinte:
Um script pra compilar e rodar os algoritmos com o tamanho especificado e salvar os dados em um arquivo. (Em shell)
Um script pra parsear o arquivo e transformar isso em dados trabalhavéis e gerar tabelas. (Em Python)
Plotar as tabelas geradas com o script python pra gerar gráficos (porque nenhum trabalho é válido se não tiver gráficos =]).

Todos os scripts e o código dos algoritmos vocês podem encontrar no meu svn.

PS: Se alguém quiser executar os testes, gostaria de informar que demora. Devido à compilação sem otimizações e com debug, e executar com o valgrind, a multiplicação de uma matriz 1024×1024 levou mais de meia hora =/

Emacs Cheat Sheet

Posted in Linux with tags on 25/11/2010 by felipessilveira

Como muitos sabem eu odeio vi sou usuário do Emacs =D

O que é o Emacs?

Emacs é um editor de texto. É um editor de arquivos binários. É um leitor de emails. É uma IDE. É uma calculadora. É um lugar pra jogar. É um ambiente pra executar lisp. É uma? .*

Ok, dá pra fazer tudo isso no vi? Qual a diferença?

O Emacs é altamente customizável por meio de código lisp e não uma linguagem inventada 😉
Todas as funções do editor são disponibilizadas pra uso, logo podes fazer funções usando essas mais básicas.
O Emacs já vem com muitos modos pré instalados, isso inclui: c,c++,java,perl,python,shell,assembly,html,latex,…
Mas confesso, tudo isso já vi usarem no vi.

O Emacs consome mais memória? Sim. O Emacs demora mais pra abrir? Sim. Então qual a diferença?

Sinceramente, só comecei a usar o emacs porque ele é um editor de texto onde só existe um modo, o de inserir texto.

Bom, vou terminar por aqui, se quiserem rir um pouco, recomendo Emacs e vi

E agora, finalmente ao post. Resolvi fazer um Cheat Sheet (como sempre, mude a extensão de .pdf pra .txt), porque não encontrei nenhum que gostasse por aí. Por enquanto está em texto (preguiça de fazer imagens =/) mas pretendo passar pra imagens em breve.

Nas férias farei uma apostila cobrindo o tutorial básico (o que vem junto com o emacs) e mais algumas coisas que fui aprendendo com o tempo =]

C-x C-c

Proudly written in Emacs.

Creative Commons License
Emacs Cheat Sheet by Felipe Silveira (berr) is licensed under a Creative Commons Attribution 3.0 Unported License.

Script buscador dos 1001 discos para ouvir antes de morrer

Posted in Scripts with tags , , on 21/11/2010 by felipessilveira

Há um tempo, um amigo me mostrou o site http://nobrasil.org/1001-discos-para-ouvir-antes-de-morrer, e perguntou se eu conseguia pegar os links pra ele.

Então eu fiz um script em python pra pegar os links =D

Basicamente, o script pega por expressões regulares os links para a página de download de cada disco e depois pega o link de download de cada página
Só que essa abordagem é um pouco ruim porque a maior parte do tempo é perdida nas requisições de download da página, logo, surgiu a idéia de fazer com várias threads.

O que eu fiz foi passar um parâmetro pro script dizendo quantos links cada thread vai pegar, e disparo 1001/X threads pra pegar os links.
Na minha internet de 1MB eu consigo sobrecarregar a rede deixando cada thread responsável por 10 links

Se alguém se interessar e quiser os links: basta rodar o script do seguindo modo:

python downloader.py X | sort

O “| sort” só está ali pra deixar a saída em ordem cresce, porque cada thread pode acabar em um tempo diferente e eu fiquei com preguiça de fazer isso dentro do script =/

No script, eu usei as bibliotecas nativas do python: urllib e re

Download do script: downloader.py (tá comentado =])
Lembrando, não esqueça de mudar a extensão pra .py, o wordpress não me deixa colocar arquivos com extensões de verdade =/

Era isso. Até =]

Ps: Se alguém tiver alguma dúvida, posta aí =]

Aplicando Novo Patch no Escalonador do Linux

Posted in Tutorial with tags , , on 19/11/2010 by felipessilveira

Como foi bastante divulgado ultimamente, Mike Galbraith mandou um patch pra lista do kernel propondo uma mudança no escalonador. A ideia é agrupar as tarefas de acordo com os seus tty e escaloná-las. Não achei o post original do Mike pra entender direitinho como funciona, logo, se alguém tiver uma fonte boa…

A descrição da opção (retirado do patch): This option optimizes the scheduler for common desktop workloads by
automatically creating and populating task groups. This separation of workloads isolates aggressive CPU burners (like build jobs) from desktop applications. Task group autogeneration is currently based upon task tty association.

Bom, como alguns sabem, ando trabalhando com escalonadores e queria ver esse patch funcionando.. então, mãos à massa! bora instalar esse bagulho =]

Primeiro: É hora de parar os torrents e baixar as coisas necessárias pra instalar: Será necessário:

  • A fonte do kernel em que o patch foi criado:
  • O patch, que como eu sou bonzinho, eu vou fazer upload (não esqueçam de retirar o .pdf do fim, parece que o wordress não deixa eu mandar arquivos .patch)
  • Os pacotes necessários pra compilar um kernel na sua Distro. (Se não me engano, no ubuntu é necessário o pacote build-essentials, mas posso estar falando asneiras)

Agora começa a diversão:

extraia a fonte do kernel para uma pasta, digamos linux-2.6.37-rc2
copie o patch para a mesma pasta
aplique o patch com a linha:
patch -p1 < Mike.patch

se tudo ocorreu bem, o kernel foi “patcheado” e agora é só compilar =D

Compilando:

Se você nunca compilou um kernel antes, não tema!
O manual do gentoo explica muito bem essa parte. A parte que interessa é até o item 7.c (incluso).

Se você já compilou um kernel com sucesso, é só copiar o arquivo .config da pasta do seu kernel para a pasta do kernel novo e pronto
(pra quem sabe do que eu estou falando, make oldconfig é pra fracos =])

Agora, habilitando o patch:
na pasta do kernel com o patch aplicado:
make menuconfig (ou qualquer outro método que prefira pra configurar o seu kernel)

A opção do patch fica no item “General setup” , o nome dela é “Automatic process group scheduling”, basta apertar Y e pronto.
Agora é só sair e salvar sua configuração.

Agora, compilando o kernel: make && make modules_install
isso pode demorar, uma primeira compilação leva cerca de 40 minutos

Assumindo que compilou e não gerou erros, tá funcionando =D

Agora basta copiar a imagem gerada pra sua pasta/partição de boot:
cp arch/x86(ninguém aqui usa MIPS, usa?)/boot/bzImage /boot/linux-2.6.37-rc2

A última coisa a se fazer: adicionar a entrada do novo kernel no seu bootloader
Eu uso grub, então só preciso copiar uma das minhas entradas antigas do (/boot/grub/menu.lst) e mudar o endereço do kernel destino (e o nome, né)

Depois disso, acabou. Basta reiniciar e esperar pra não dar Kernel Panic.
Vocês podem conferir se o patch está rodando ou não lendo o arquivo /proc/sys/kernel/sched_autogroup_enabled (1 é true, 0 é false, dã)
Também pode mudar o estado do patch escrevendo 0/1 no mesmo arquivo. (precisa ser root)
* echo -n 0/1 > /proc/sys/kernel/sched_autogroup_enabled

Resultados:
Estou usando o patch há dois dias e só pude perceber uma diferença quando estava vendo 2 vídeos do youtube, calculando 2+2 em um while true, vendo filme, ouvindo música e compilando um kernel com 4 jobs ao mesmo tempo. Apesar da CPU estar em 100%, tava rodando bonitinho ainda.

Outras coisas:
Há também um outro método de obter o mesmo resultado (bom, pelo menos um amigo me disse). Só que ele é menos complicado e não faz patches no kernel, logo -> não é tão divertido =D Posto um link aqui assim que conseguir

PS: Se você leu essa linha, só responde uma coisa, por favor: Eu devo deixar os “códigos” assim como fiz (só comentando o que deve fazer) ou devo botar código real? Fiquei na dúvida e fiz como eu entendo melhor.

Recomendados:
Google: “compiling kernel in %s”, minhaDistribuicao

Links:
Fonte do artigo:
http://www.phoronix.com/ (fiquei sabendo por alguém que mandou pro br-linux)
O patch: Arquivo da lista do kernel (linkado pelo artigo anterior)

Hello world!

Posted in Uncategorized on 19/11/2010 by felipessilveira

Primeiro post!

O nome do exemplo padrão do wordpress tava tão bom que resolvi deixar como estava =]

Em primeiro lugar, a explicação do nome: su berr
su: tu deves saber o que é o su, eu nem lerias isso aqui
berr: um nick “das antiga” que usava(uso) em online gaming e ficou até hoje.
*ber é “apelido” pra berserker, só que não podia nicks com 3 caracteres, daí ficou berr 😉

E segundo lugar, sobre o que vou falar aqui:
Pretendo falar sobre minhas viagens aventuras diárias no mundo do linux, logo, ao invés de eu te encher o saco no msn falando sobre o que eu fiz, mandarei o link do post =D
Vou colocar aqui os scripts/programas que desenvolvi ou coisas que achei que são legais.

É isso, cya.