quarta-feira, 2 de novembro de 2011

Na Onda do Quadricóptero

Vários garagistas estão começando a desenvolver seus protótipos de Quadricóptero e AR Drones. A construção no que se refere ao material parece ser simples. A complexidade maior está na comunicação, uso do acelerômetro, escolha da bateria e estabilidade da aeronave. O mais interessante é o uso de câmeras embarcadas para o controle dos Drones. Em vários casos o iPhone está sendo usado como controle.

É necessário fazer todo um cálculo com relação ao peso do objeto, potencia do motor, capacidade da bateria e tamanho e quantidade de hélices para saber se o quadcopter vai sair do chão.

http://www.ecalc.ch/xcoptercalc_e.htm

Vários videos podem ser encontrados na internet e algumas equipes brasileiras estão se especializando no assunto.





Alguns links sobre o assunto e equipes de desenvolvimento:

http://www.aeroquad.com/

http://www.mikrokopter.de/

http://diydrones.com/

https://www.webmodelismo.com.br/

http://www.parrot.com/usa/

http://hexacoptero.blogspot.com/

 E nesse mês o vídeo que está causando furor entre os desenvolvedores é o surgimento do primeiro multicóptero com o engenheiro piloto a bordo da nave. O que mais chama a atenção é que uma boa parte deses desenvolvedores fabrica esses equipamentos dentro de casa.

http://www.youtube.com/watch?feature=player_embedded&v=L75ESD9PBOw

Acelerando Shellscript - Parte 2

Este post vai servir para entender um pouco sobre o funcionamento do sistema no Linux. Algumas pastas são criadas em tempo de execução e muito se pode saber sobre o funcionamento do Kernel, até mesmo para gerar relatórios de sistema. Através dos comandos ls e cat, é possível desbravar o conteúdo de arquivos e diretórios de sistema mesmo com usuário comum. Para isso é necessário conhecer algumas pastas de sistema como:

/proc
/proc/cpuinfo
/proc/meminfo
/proc/modules
/proc/uptime
/proc/sys/net/ipv4
/proc/sys/net/ipforward

Abaixo segue apenas um exemplo de como capturar alguns dados que podem ser inclusive mais bem trabalhados com outros comandos e usando a criatividade.


#!/bin/bash

vhost=`hostname`
echo "1.Nome da máquina........................................:$vhost"
vdom=`hostname -d`
echo "2.Domínio da máquina.....................................:$vdom"
vtimeon=`uptime`
echo "3.Há quanto tempo esta máquina está ligada?..............:$vtimeon"
vdata=`date`
echo "4.Qual a data do sistema?................................:$vdata"
vdist=`cat /etc/issue`
echo "5.Qual a distribuição linux está instalada?..............:$vdist"
vversion=`uname -v`
echo "6.Qual a versão de kernel?...............................:$vversion"
# lshw
# cat /proc/cpuinfo
vhards=`dmesg | greep -i hda`
echo "7.Qual o hardware foi reconhecido pelo sistema?..........:$vhards"
vip=`/sbin/ifconfig | grep Bcast | cut -c22-34`
echo "8.Qual a configuração de IP?.............................:$vip"
vmasc=`/sbin/ifconfig | grep Bcast | cut -c62-84`
echo "9.Qual a máscara de rede?................................:$vmasc"
vmac=` /sbin/ifconfig | grep HW | cut -d' ' -f13`
echo "10. Qual o endereço físico ?Mac Address?.................:$vmac"
vgate=`/sbin/route | grep default | cut -c17-70`
echo "11. Qual o gateway?......................................:$vgate"
vdns=`cat /etc/resolv.conf | grep nameserver | cut -c12-70`
echo "12. Qual o DNS?..........................................:$vdns"
vprocess=`ps aux`
echo "13. Quantos programas estão carregados na memória?.......:$vprocess"
# lsof pode ser mais bem trabalhado com o uso do comando grep
vopenfile=`lsof`
echo "14. Quais arquivos estão abertos?........................:$vopenfile"
vdaemons=`ps aux | cut -d' ' -f1 | sort -u | grep -v USER`
echo "15. Quais usuários ou daemons estão executando programas ou"
echo "serviços?..............................................:$vdaemons"
vmemo=`cat /proc/meminfo`
echo "16. Quanto de memória existe no sistema?.................:$vmemo"
#/etc/apt/sources.list
echo "17. Quais pacotes estão instalados na máquina?...........:"
vmaqproc=`uname -`
echo "18. Qual o Processador da máquina?.......................:$vmaqproc"
vusb=`lsusb`
echo "19. Existem equipamentos USB nesta máquina?..............:$vusb"
vpci=`lspci`
echo "20. Existem placas PCI nesta máquina?....................:$vpci"
vusrs=`cat /etc/passwd | grep bash | cut -d: -f1`
echo "21. Quantos usuários estão cadastrados?..................:$vusrs"
vuser=`whoami`
echo "22. Quem está logado agora?..............................:$vuser"
vpwd=`pwd`
echo "23. Em qual pasta você está trabalhando?.................:$vpwd"
vspaceuser=`du -kh --max-depth=1 /home 2>/dev/null`
echo "24. Quanto cada usuário está utilizando de espaço no HD?.:$vspaceuser"
#crontab -l (agendados)
echo "25. Agendar para executar estes comandos automaticamente, toda sexta-feira às 10hs."
#crontab -e (editar)




Ainda é possivel criar um SHELLSCRIPT que poderá gerar um arquivo cujo nome será a data do sistema + nome da máquina + ?-resumo.txt? , utilizando as questões acima.

ex: 2011-10-21_lab21_resumo.txt

Acelerando Shellscript - Parte 1

Este material que vou postar é um exercício que tem por objetivo trabalhar com arquivos texto. O Shell entende tudo como arquivo texto, porém para conseguir recortar um cabeçalho ou um rodapé, efetuar cortes horizontais e verticais em listas, trabalhando com ordenação exige um entendimento de como se usar comandos como: head, tail, sort, grep, cut... então aí vão alguns exemplos.

Primeiro é necessário um arquivo de texto para se trabalhar. Utilizando o comando wget vamos fazer um download de um arquivo que é uma lista de preços identada de um site qualquer:

wget http://www.navenet.com/home/lista/ListaNave.txt

Agora com o terminal testar os comandos que fazem parte de um Shellcript abaixo.


#!/bin/bash

echo "1. [0,5] Mostre o cabeçalho do arquivo (somente as linhas antes do inicio dos produtos);"
cat ListaNave.txt | head -4
echo "2. [0,5] Mostre o rodapé do arquivo (somente as linhas após a listagem dos produtos);"
cat ListaNave.txt | tail -8
echo "3. [0,5] Mostre os últimos 25 produtos;"
cat ListaNave.txt | tail -4080 | head -4072 | tail -25
echo "4. [1,0] Mostre os 19 primeiros produtos, em uma lista com as linhas numeradas;"
cat ListaNave.txt | tail -4080 | head -4072 | head -19 | nl
echo "5. [1,0] Mostre somente os produtos (sem as linhas do inicio e do final do arquivo)"
cat ListaNave.txt | tail -4080 | head -4072
echo "6. [0,5] Quantos produtos existem nessa listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | wc | cut -d" " -f4
echo "7. [0,5] Mostre somente os produtos para impressora;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IMPRESSORA
echo "8. [1,0] Quantos nobreaks (ou UPS) possui a listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i -E '(NOBREAK|UPS)'
echo "9. [1,0] Mostre os produtos sem as linhas verticais (pipes) presentes na listagem;"
cat ListaNave.txt | tail -4080 | head -4072 | sed y/"|"/" "/
echo "10. [1,0] Ordene a lista em ordem de código;"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k2 -n
echo "11. [1,0] Mostre a listagem dos produtos em ordem alfabetica (não pelo código);"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k3
echo "12. [1,0] Mostre os DVD, somente os para carro;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'DVD P/CARRO'
echo "13. [1,0] Informe somente o código e o preço dos 5 produtos mais caros;"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k4 -n -r | head -5
echo "14. [1,0] Qual são os Ipad 2 da lista de produtos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'ipad2'
echo "15. [1,0] Crie um arquivo com as câmeras panasonic ;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'panasonic' | grep -i 'camera' > camerapanasonic.txt
echo "16. [1,0] Crie um arquivo com os 8 primeiros produtos e os 13 últimos em uma lista com o"
echo "cabeçalho e o rodapé;"
cat ListaNave.txt | head -4 > lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | head -8 >> lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | tail -13 >> lista.txt
cat ListaNave.txt | tail -8 >> lista.txt
echo "17. [1,5] Ordene a lista pelo preço: os mais produtos baratos no início da listagem;"
#cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k4 -n
cat lista.txt | head -25 | tail -21 | sort  -t"|" -k4 -n
echo "18. [1,5] Quais são os 10 telefones BlackBerry mais baratos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'blackberry' | grep -i 'celular' | sort -t"|" -k4 | head -10
echo "19. [1,5] Crie uma nova listagem com: o cabeçalho do arquivo (questão 1) + as 10 filmadoras"
echo "mais baratas (questão 16) e o rodapé do arquivo (questão 2) em arquivo chamado:"
echo "ListaFilmadoras.txt"
cat ListaNave.txt | head -4 > ListaFilmadoras.txt
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'filmadora' | sort -t"|" -k4 -n >> ListaFilmadoras.txt
cat ListaNave.txt | tail -8 >> ListaFilmadoras.txt
echo "20. [2,0] Crie um arquivo com a listagem de produtos para IPAD (não incluir para IPAD 2),"
echo "sem repetição. Compacte o arquivo em formato ZIP ou TAR.GZ."
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IPAD | sort -u | grep -v 'IPAD2' | grep -v 'IPAD 2' > listaipad.txt
tar czvf listaipad.txt listaipad.tar.gz

segunda-feira, 31 de outubro de 2011

Beaglebone - Nasce um Monstro no Halloween

Confesso que sinto frio na barriga cada vez que vejo as novidades sendo lançadas. Hoje dia 31 de outubro, dia das bruxas, foi lançado um pequeno monstro pela Texas Instruments. O Beaglebone possui um TI AM3358 ARM Cortex-A8 de 1GHz de velocidade e comporta dentro dele o Kernel do Linux. Isso é realmente assustador. Um microcontrolador que possui muita capacidade de armazenamento, um microcomputador na palma da mão, aberto à programação Shell além da programação tradicional em C e com entradas e saídas com padrão 3,3V.



http://beagleboard.org

domingo, 30 de outubro de 2011

MSP430 - Existe Vida Além do Arduino

Sim, existe vida além do Arduino, foi o que disse um dos gurus do Arduino no Brasil, Jeronimo Avelar, ao apresentar a MPS430. Confesso que fiquei impressionado com o preço da placa vendida pela Texas Instrument: US$ 4,30. A LauchPad vem com cabo USB, uma IDE própria e dois microcontroladores: MPS430G2211 e MPS430G2231 ambos de 14 pinos. A placa é de baixa potencia e possui sua linguagem própria.



Mais informações:

Cortino - Cortex M3

O Cortino é um equivalente ao Arduino porém o microcontrolador é o Cortex M3. Cortino também pode ser conectado aos Shields do Arduino, a capacidade da Flash Program vai de 32KBytes a 512KBytes, com RAM de 6KBytes a 64Kbytes, entradas e saídas de dados por padrão 5V e velocidade de 72MHz, que é um pouco mais rápido que o Arduino.



Maiores informações:

http://www.bugblat.com/products/cor.html

Executando Shell Através do PHP

Mais um pouco sobre integração entre linguagens. Uma das formas de se executar um comando Shell utilizando a programação em PHP é através do comando shell_exec(). Segue o exemplo:

<?PHP

$saida = shell_exec('ls -la'); // executa um comando de listagem de diretório armazenando na variável
echo $saida;  // => imprime o conteúdo da variável
?>

No caso acima provavelmente os dados serão armazenados na variavel como um vetor, nesse caso é necessário imprimir dentro de FOR.
Outro exemplo que pode ser utilizado é através do comando system(). No exemplo abaixo uma forma para executar comando de ROOT.


<?PHP

$saida = system('echo "PASSWORD" | sudo -u root -S COMANDO');
echo $saida;
?>