Relógio binário com 8051 e RTC

Tirei do guarda-roupas o 8051, 0 rtc e a matriz de LED.

Dessa vez termino o relógio binário. O problema era que eu queria fazer o programa do 8051 em asm e não esta sendo fácil, resolvi fazer logo em C e depois se conseguir passo pra asm.

Nos primeiros testes aqui consegui fazer funcionar. Não esta 100% como eu quero mais vou fazer logo as placas e colocar o leds maiores e depois vou melhorando.

Ai a baixo vai um breve vídeo dele.

Google Translate Python no seu terminal

Meu interesse inicial era encontrar algum tradutor, inglês -> português, que rode via terminal. Não encontrei nada que me agradasse então resolvi fazer algo aqui.

O script em python pega a palavra que for digitada submet ao google translate e te mostra o resultado. Pra fazer isso usei o curl pra fazer a requisição fingindo ser o mozilla. Depois fiz um parser procurando uma tag span que tem o atributo title com valor igual a palavra passada ao google.

Pronto, bem simples e funciona.
A partir desse da pra fazer muita coisa…

esta disponível para todos http://bruno.tuy.com.br/desenv/translate.py

Girar Matriz com Python

Criar matriz:

>>> mat = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

Mostra normal:

>>> for lin in range(3):
    text = ”
    for col in range(3):
        text += ‘ ‘ + mat[lin][col]
    print text

Mostrar girada em 90 graus:

>>> for lin in range(3):
    text = ”
    for col in range(3):
        text += ‘ ‘ + mat[col][2 - lin]
    print text

Mostrar girada em 180 graus:

>>> for lin in range(3):
    text = ”
    for col in range(3):
        text += ‘ ‘ + mat[2 - lin][2 - col]
    print text

Mostrar girada em 270 graus:

>>> for lin in range(3):
    text = ”
    for col in range(3):
        text += ‘ ‘ + mat[2 - col][lin]
    print text

Python conectando com Postgres

>>> import psycopg2
>>> conexao = psycopg2.connect(“dbname=’nome_base’ user=’usuario_base’ host=’endereco_da_base ou IP’ password=’senha_da_base’”);
>>> cursor = conexao.cursor()
>>> cursor.execute(“SELECT * FROM tabela”)
>>> resposta = cursor.fetchall()
>>> print resposta

>>> for linha in resposta:
>>>     print linha
>>> conexao.close()

Ubuntu 9.10 Leitor de Cartão da direita não funciona

Como já é conhecido de todos no Acer Aspire One quando instalado o Ubuntu os leitores de cartão nem sempre funcionam direito. Aqui no meu o “Storage Expansion” que é o leitor da esquerda funciona tranquilo tranquilo. Mais já o da direita que fica próximo ao botão power só funciona quando eu inicio a maquina com um cartão já inserido no slot.

Para ele funcionar tenho que passar um parâmetro para a imagem do kernel no boot de maquina. pciehp.pciehp_force=1

Mais nessa versão do linux não vai ser simplemente editar o menu.lst do grub. No ubuntu agora esta vindo o grub2, que muda um pouco as coisas. O que você via no menu.lst agora esta no /boot/grub/grub.cfg e não aconselho editar ele não, essa configuração dele é toda feita automaticamente.

Para adicionar o parâmetro editei o arquivo /etc/default/grub
Na linha: GRUB_CMDLINE_LINUX_DEFAULT
Editei e ela ficou assim:
GRUB_CMDLINE_LINUX_DEFAULT=”pciehp.pciehp_force=1 quiet splash”

Depois tu só faz executar a atualização do grub.cfg e tudo lindo.

$ update-grub

Porta paralela no Shell do Linux

Bom no Slack que tava usando aqui na maquina já tinha dois comandos que me acostumei a usar, inb e outb. Como eles foram parar no slack e de onde vieram eu não tenho a menor ideia.

Formatei a maquina e instalei o Debian, fiz uma instalação bem limpa e não veio meu inb e outb, mais preciso deles. O que fazer? Andei pesquisando e não achei nada e com uma conversa com Danilo Cesar<roboticalivre.org> ele me falou que no histórico da lista do robótica livre tinha algo que ele postou em outubro de 2007.

Então vamos ao que interessa colocar os comandos de volta.
** LEMBRANDO USAR root ***

Tem que baixar o binário do ioport<http://www.tuy.com.br/download/ioport>.
Salvar ele na pasta /bin

Depois criar links simbólicos para ele.

$ cd /bin
$ ln -s ioport outb
$ ln -s ioport outl
$ ln -s ioport outw
$ ln -s ioport inb
$ ln -s ioport inl
$ ln -s ioport inw

Pronto agora pode botar fé que vai funcionar os outb e inb.

Créditos http://listas.softwarelivre.org/pipermail/roboticalivre/2007-October/000035.html

Brinquedo novo

Até que fim chegou, um mês depois do pedido que fiz via internet chegou o meu arduino Duemilanove.

Funcionou beleza no ubuntu, só plugar e usar. No gentoo reconheceu depois de compilar o kernel com o ftdi, mais não consegui ainda instalar o gcc-avr no gentoo.

Python + xml.dom – Editar um xml

Ler e editar um xml Existente

Carregar o objeto.

>>> xml0 = xml.dom.minidom.parse(“c:\\teste\\novo.xml”)

Imprima na tela para ver se foi carregado mesmo e verifique o conteudo

>>> print xml0.toxml()
<?xml version=”1.0″ ?><usuarios><user id=”1″ login=”bruno-tuy”>Bruno Tuy</user><user id=”2″ login=”bruno.reis”>Bruno Reis</user><user id=”3″ login=”lucas.mendes”>Lucas Mendes</user><user id=”4″ login=”bruno”>_Bruno_</user></usuarios>

Aqui ele retornou desse jeito ai, sem quebra de linha e indentação, é a maneira ideal de salvar o xml pois assim o programa trabalha com ele perfeitamente bem, se o seu retornou um xml com quebras de linhas e indentação vai acontecer o seguinte, o python vai entender que o enter(\n) são filhos também, ai você vai ter que tratar isso.

Agora vamos ler os atributos da primeira tag do xml.

>>> print “Id: ” + xml0.firstChild.childNodes[0].getAttribute(“id”)
Id: 1
>>> print “Login: ” + xml0.firstChild.childNodes[0].getAttribute(“login”)
Login: bruno-tuy
>>> print “Nome: ” + xml0.firstChild.childNodes[0].firstChild.data
Nome: Bruno Tuy

Imprimir o atributo login da tag de id 2

>>> for filho in xml0.firstChild.getElementsByTagName(“user”):
if (filho.getAttribute(“id”) == “2″):
print filho.getAttribute(“login”)

bruno.reis

– getElementsByTagName(“user”) pode ser substituido por childNodes

Apagar alguma tag

>>> xml0.firstChild.removeChild( xml0.firstChild.childNodes[2] )
<DOM Element: user at 0x23c16c0>
>>> print xml0.toxml()
<?xml version=”1.0″ ?><usuarios><user id=”1″ login=”bruno-tuy”>Bruno Tuy</user><user id=”2″ login=”bruno.reis”>Bruno Reis</user><user id=”4″ login=”bruno”>_Bruno_</user></usuarios>

– Repare que o usuario com id 3 foi removido

Mudar atributos de uma tag

>>> xml0.firstChild.childNodes[0].setAttribute(“login”, “bruno.tuy”)
>>> print xml0.toxml()

<?xml version=”1.0″ ?><usuarios><user id=”1″ login=”bruno.tuy”>Bruno Tuy</user><user id=”2″ login=”bruno.reis”>Bruno Reis</user><user id=”4″ login=”bruno”>_Bruno_</user></usuarios>

– Veja que o atributo login da tag com id 1 foi alterado.

Mudar texto contido entre as tags

>>> xml0.firstChild.childNodes[2].firstChild.nodeValue = “Bruno”
>>> print xml0.toxml()
<?xml version=”1.0″ ?><usuarios><user id=”1″ login=”bruno.tuy”>Bruno Tuy</user><user id=”2″ login=”bruno.reis”>Bruno Reis</user><user id=”4″ login=”bruno”>Bruno</user></usuarios>

salvar tudo

>>> arq = file(“c:\\teste\\novo.xml”, “w”)
>>> xml0.writexml(arq)
>>> arq.close()

Criar xml com Python + xml.dom

Post rapido para salvar algo que fiz hoje e preciso lembrar durante um bom tempo. Trabalhando com XML usando python.

Criando um XML.

>>> NewXml = xml.dom.minidom.Document()

Criando o elementos root do XML(TAGS).

>>> tag = NewXml.createElement(“lista”)
>>> NewXml.appendChild(tag)

Criando elementos do XML(TAGS).

>>> tag = NewXml.createElement(“usuario”)

Criando atributos

>>> tag.setAttribute(“login”, “burno.tuy”)
>>> tag.setAttribute(“senha”, “123456″)

Colocar um texto entre as tags.

>>> texto = NewXml.createTextNode(“Bruno Tuy”)
>>> tag.appendChild(texto)

Agora colocar o elemento criado no XML

>>> NewXml.firstChild.appendChild(tag)

Só pra confirmar é bom imprimir o xml

>>> print NewXml.toxml()

Agora vamos salvar

>>> arq = file(“c:\\teste\\novo.xml”, “w”)
>>> NewXml.writexml(arq)
>>> arq.close()

O arquivo já vai aparecer la salvo, mais meio complicado pra leitura, se quiser deixar ele mais legível pode usar alguns parâmetros no write. Exemplo:

>>> NewXml.writexml(arq, ” “, ” “, “\n”, “UTF-8″)

- Primeiro argumento o arquivo
- Segundo a indentação inicial.
- Terceiro a indentação adicional.
- Quarto argumento o que vai ser usado no final da tag.
- Quinto a codificação

Configurando MRTG para gerar grafico de uso de banda

Somente um lembrete para os passos da configuração…

Vamos partir do ponto que sua maquina já esta com snmp configurando e funcionando.

Para gerar o arquivo de configuração do mrtg devemos usar:

$ cfgmaker –global ‘WorkDir: /var/www/mrtg’ –output /etc/mrtg/mrtg.cfg public@localhost

Onde:
- WorkDir é pasta que ficara salvo todos os arquivos referente aos gráficos.
- output o arquivo de configuração do mrtg.
- public@localhost é a comunidade @ maquina. Parâmetro configurado no snmp.

Esse comando vai gerar o arquivo de configuração com todas as interfaces de rede da maquina. Depois você pode ir nesse arquivo e editar, deixar somente o que interessa para você.

Agora vamos gerar o index.html da pasta:

$ indexmaker –output=/var/www/html/mrtg/index.html /etc/mrtg/mrtg.cfg

Agora verifique se existe um arquivo chamado mrtf.conf na pasta /etc/httpd/conf.d/ se existir apague.
Entre na pasta /var/www/html e crie um link simbólico para a pasta do mrtg:

$ ln -s /var/www/mrtg /var/www/html/mrtg

Faça um agendamento no cron para que o gráfico seja atualizado de tempos em tempos:

$ contab -e

Na ultima linha adicione:
*/15 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Essa linha agenda para a cada 15 minutos executar o mrtg
Salve e pode da um restart no crond