Configuração headless da Raspberry Pi

O post de hoje é uma dica pra quem quer usar a Raspberry pi e não tem um monitor ou uma TV com hdmi sempre disponível. Aqui em casa, por exemplo, eu preciso liberar a TV pra minha esposa poder assistir a novela! :p

Configuração da Raspberry Pi

Primeiro, vamos instalar o x11vnc na rpi (eu uso a distro raspbian) que é um servidor VNC:


sudo apt-get install x11vnc

Após instalar o servidor de vnc, vamos configurar a resolução da rpi:


sudo nano /boot/config.txt

Descomente as linhas (removendo o ‘#’ do incio da linha):


disable_overscan=1

hdmi_force_hotplug=1

hdmi_group=1

hdmi_mode=1

Substitua o valor dos campos hdmi_group e hdmi_mode para os seguintes:


hdmi_group=2

hdmi_mode=28

Com essa configuração habilitamos a rpi a usar a resolução 1280×800@60Hz, que é a resolução do meu PC. Você pode escolher outra mais apropriada a resolução do seu PC, para tal sugiro que consulte a tabela do elinux.

Se tu ainda não fizeste, habilite a rpi para chamar a interface gráfica já no boot:


sudo raspi-config

Selecione a opção 3: “Enable Boot to desktop” e na próxima tela selecione “yes”.

Finalmente, configure o LXDE (o window manager) para subir o x11vnc junto com ele. Para tal, siga os passos a seguir:


mkdir -p ~/.config/lxsession/LXDE/

echo "@x11vnc -forever" > ~/.config/lxsession/LXDE/autostart

A opção “-forever” indica que o após desconectar, o servidor deve continuar rodando.

Configuração do PC

No teu pc, tu vais precisar apenas de um cliente VNC. No Fedora 18, eu instalei o Remmina e o plugin dele para conectar a servidores VNC:


sudo yum install remmina remmina-plugins-vnc -y

A interface do remmina é bastante intuitiva, para configurar uma nova conexão basta clicar no icone do folha de papel com um “+”.

remmina

Na tela que surge, complete o campo server é o mais importante, insira ai o endereço IP da Rpi (para descobrir digita no terminal da rpi: ifconfig eth0 e copia o valor do campo ipaddr).

remmina_editor

Clique em Connect e pronto! A tela da tua Raspberry Pi deve surgir em uma janela!

Agora é só hackear e programar ( e deixar tua TV livre!) ^^

FONTES:

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=19600

http://elinux.org/RPiconfig

https://wiki.archlinux.org/index.php/LXDE#autostart_file

Aprendendo gratuitamente a programar na web, é possível?

Buenas indiada!

Sabia que é possível aprender e se profissionalizar na internet? Melhor ainda: gratuitamente?! Eu reuni alguns links que eu já utilizei para estudar( ou não) com aulas de linguagens de programação, sistemas embarcados, eletrônica e por ai vai. Por que nem só de Facebook vive o nerd!

Linguagens de programação

Ultimamente, eu tenho descoberto muita coisa com ajuda do Google e do meu professor de Java (Eduardo “Bisso” @ervcarval) . O próprio Bisso tem um canal super bacana de vídeo-aulas de Java no Youtube, onde ele ensina o os fundamentos da linguagem e o uso de algumas ferramentas através do desenvolvimento de um projeto.

Se Java não é o que tu procuras, que tal Python? Eu utilizei muito um livro brasileiro e grátis, o “Python para desenvolvedores, 2a edição” O foco dele não são os noobs em programação, mas quem já sabe programar e quer aprender Python (que por sinal, é uma ótima linguagem!).

Pra galera mais hardcore, baixo nível mesmo, eu recomendo o site do Alex Allain o http://www.cprogramming.com que tem tutoriais e posts sobre C/C++ do mais básico e fundamental ao recursos mais avançados. Ele publicou um livro recentemente, mas infelizmente não é grátis… :(

Academia de programação

Durante as pesquisas para escrever este post, eu achei uma ferramenta muito tri.. Não, muito mais que isso: Realmente Punk! O Code Academy! O CA surgiu no final de 2011 e na primeira semana de vida já tinha 200.000 alunos! Na minha singela opinião, o sucesso se deve ao formato de EAD de programação apresentado por eles, que eu acredito ser o futuro desse tipo de plataforma. Funciona assim: Tu te cadastra, ou usa tua conta das redes sociais, e já sai programando, no browser mesmo… Simples assim! A página apresenta um fundamento da linguagem no lado esquerdo, por exemplo declaração de variáveis, e a direita um emulador de terminal para realizar um exercício prático. O resultado sai na hora. A medida que se evolui no curso se ganha medalhas e se pode compartilhar com os amigos nas redes sociais. Há cursos de Javascript, Python, Ruby, JQuery e PHP.

Finalmentes, só que não…

O assunto é muito vasto e há outros cursos e tutoriais sobre esses e outros assuntos relacionados a programação espalhados pela rede. Por exemplo, eu não falei da Softblue oferece um curso de banco de dados gratuitamente, com partes práticas e teóricas, com direito a certificado e tudo mais. Tu podes, ainda, procurar no Youtube por video-aulas e screencast, há vários canais de pessoas e/ou organizações que postam videos realmente legais. Há, ainda, verdadeiras universidades virtuais com o Udacity, o EdX e o Coursera. Enfim, há diversas opções…

Tem sugestões? Acha que eu esqueci de citar algum serviço ou canal? Posta ai nos comentários, vivente!

Nos próximos post vou mostrar que não é só programação que se pode aprender na web.

Até mais!

Criando o ambiente de desenvolvimento da Stellaris Launchpad no Fedora 18 – Parte 1 de 2

A Texas Instruments Stellaris Launchpad é um kit de desenvolvimento para microcontroladores de 32-bit da família Stellaris (agora TivaC) que conta com um núcleo ARM Cortex-M4. O kit é bastante simples e barato (só 12,99 dólares, com frete grátis e impostos pagos), e possui suporte a kit adicionais, chamados BoosterPacks.

No tutorial de hoje, vamos compilar e instalar as ferramentas necessárias para programar e depurar nossas aplicações na Launchpad, e o melhor de tudo: Tudo Free! (Free como em “Free Beer” e como em “Freedom“).

Stellaris Launchap

Bem, como o título já ilustra, este tutorial deve ser seguido por quem quer criar o ambiente no Fedora 18 ou distros baseadas no Red Hat. Se tu usa o ubuntu ou distros baseadas no Debian recomendo seguir o tutorial do blog KernelHacks parte I, parte II e parte III(em inglês).

OK, vamos ao que interessa. As quatro ferramentas necessárias para o desenvolvimento são:

  • A toolchain: GNU ARM Embedded;
  • As bibliotecas: TivaWare;
  • O gravador: lm4f-flash;
  • O depurador: OpenOCD;

Instalando a toolchain – GNU ARM Embedded

A toolchain é o conjunto de ferramentas que nos permitirá compilar nosso código C/C++ e rodá-lo no nosso processador. Perceba que a target é o próprio processador ARM Cortex-M4, sem sistema operacional algum. Chamamos esse tipo de desenvolvimento de Bare Metal Programming.
Primeiro clique aqui e procure por um arquivo com nome (onde XXXXX é o número da versão):

gcc-arm-none-eabi-XXXXX-linux.tar.bz2

Esse arquivo contém os binários da toolchain para o sistema operacional GNU/Linux (independente da distribuição).

Agora vamos extrair o conteúdo do arquivo. Para isso abra uma o emulador de terminal, por exemplo o gnome-terminal ou o xterm e digite o seguinte:
(lembrete: o símbolo $ significa que o comando deve ser rodado como usuário comum)

$ tar jxvf gcc-arm-none-eabi-XXXXX-linux.tar.bz2

Um diretório com o nome gcc-arm-none-eabi-XXXXX deve ter sido criado.

Eu costumo instalar aplicações que não são fornecidas pelos repositórios da minha distro no diretório /opt, ao menos que você saiba o que está fazendo, recomendo que faça o mesmo.
Então, copie o diretório gcc-arm-none-eabi-XXXXX para o diretório /opt :
(lembre-se uqe o # indica que o comando deve ser executado com privilégios de super usuário – root)

# cp -r gcc-arm-none-eabi-XXXXX /opt/gcc-arm-none-eabi
# chown -R <usuario_normal>:<usuario_normal> /opt/gcc-arm-none-eabi

Por fim, vamos adicionar o caminho com as ferramentas à variável de ambiente PATH:

$ export PATH=$PATH:/opt/gcc-arm-none-eabi/bin

Para testar se tudo ocorreu como esperado digite no terminal:

$ arm-none-eabi-cpp --version

A reposta no terminal deve ser algo como:

arm-none-eabi-cpp (GNU Tools for ARM Embedded Processors) 4.7.3 20130312 (release) [ARM/embedded-4_7-branch revision 196615]
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Instalando as Bibliotecas – TivaWare
O TivaWare é uma biblioteca para acessar os periféricos e outros recursos dos processadores da família TivaC (compatível com os Stellaris LM4F). Clique aqui e baixe o arquivo SW-TM4C-X.X.exe (a versão no dia 31/8/2013 era 1.1). Será necessário preencher um cadastro e concordar com alguns termos.

Após realizar o download, vá ao terminal e descompacte o arquivo.

$ mkdir TivaWare
$ unzip SW-TM4C-1.1.exe -d TivaWare

Em seguida, compile a biblioteca com a toolchain que configuramos no passo anterior.

$ cd TivaWare
$ make

Compilando e instalando o LM4F-Tools e o OpenOCD

Se você chegou até aqui, já pode criar seus próprios códigos, compilá-los e tals. Maaaas, e testar? Ver eles rodando na target mesmo? Hum… Falta pouco! Vamos instalar o OpenOCD e o LM4F-Tools. Para isso vamos baixar algumas dependências:

# yum install flex bison gmp-devel mpfr-devel libmpc-devel ncurses-devel git libc-devel make gcc libyaml-devel PyYAML libusbx libusbx-devel git

Feito?! Ótimo! Agora vamos clonar o repositório do LM4F-Tools. Esse conjuntinho de ferramentas possui uma ferramenta específica que é de nosso o interesse: o LM4F-Flash. Este programinha bem simples serve para gravarmos o nosso programa no microcontrolador.

git clone https://github.com/utzig/lm4tools.git

Agora vivente, vamos baixar a última versão do OpenOCD(no dia desta publicação era a 0.70, a primeira a ter suporte a interface ICDI da Stellaris/Tiva). Acesse o site http://sourceforge.net/projects/openocd/files/openocd/0.7.0/ e faça o download do arquivo .tar.gz e em seguida descompacte-o:

$ tar zxvf openocd-0.7.0.tar.gz
$ cd openocd-0.7.0

Agora vamos compilá-lo e partir pro abraço:

$ ./configure --prefix=/opt/openocd --enable-ft2232_libftdi --enable-ep93xx --enable-at91rm9200 --enable-usbprog --enable-presto_libftdi --enable-jlink --enable-vsllink --enable-rlink --enable-dummy --enable-gw16012 --enable-amtjtagaccel --enable-ti-icdi
$ make
# make install

Agora temos o ecossistema prontinho para brincarmos com a nossa launchpad. No próximo post vamos piscar um led nela, até lá! =)

Saga Aparência do Eclipse Juno no Fedora Linux – Parte II

Bueno, continuei invocado com a aparência do Eclipse Juno no Fedora, tinha esquecido como eram gigantes os títulos das abas (ali onde diz Package Explorer, Task List, nome dos arquivos fontes e etc..). Achei uma solução macanuda aqui!

Edite o arquivo e4_default.css, ele fica em:

/eclipse/plugins/org.eclipse.platform_4.2.2.v201302041200/css

Procure pela seção .MPartStack e edite onde diz font-size, troque de 11 para 9 e aproveite!

Melhorando a aparência do Eclipse no Fedora 18

Estava cansado da aparência horrorosa do Eclipse Juno no meu Fedora 18. Googleando em uma manhã de sábado, achei uma solução  no blog de David Andrzejewski que acabou me levando para o blog Xmemory. Basicamente, a solução é mudar o estilo do gtk, para isso criaremos o arquivo

/ondetuquiseres/gtkrc

Iremos inserir o seguinte código nele:

gtk-color-scheme = "selected_text_color:#000000"
style "compact"
{
  GtkButton::default_border={0,0,0,0}
  GtkButton::default_outside_border={0,0,0,0}
  GtkButtonBox::child_min_width=0
  GtkButtonBox::child_min_heigth=0
  GtkButtonBox::child_internal_pad_x=0
  GtkButtonBox::child_internal_pad_y=0
  GtkMenu::vertical-padding=1
  GtkMenuBar::internal_padding=1
  GtkMenuItem::horizontal_padding=4
  GtkToolbar::internal-padding=1
  GtkToolbar::space-size=1
  GtkOptionMenu::indicator_size=0
  GtkOptionMenu::indicator_spacing=0
  GtkPaned::handle_size=4
  GtkRange::trough_border=0
  GtkRange::stepper_spacing=0
  GtkScale::value_spacing=0
  GtkScrolledWindow::scrollbar_spacing=0
  GtkExpander::expander_size=10
  GtkExpander::expander_spacing=0
  GtkTreeView::vertical-separator=0
  GtkTreeView::horizontal-separator=0
  GtkTreeView::expander-size=12
  GtkTreeView::fixed-height-mode=TRUE
  GtkWidget::focus_padding=0
  font_name="Liberation Sans,Sans Regular 8"
  text[SELECTED] = @selected_text_color
}
class "GtkWidget" style "compact"
style "compact2"
{
  xthickness=1
  ythickness=1
}
class "GtkButton" style "compact2"
class "GtkToolbar" style "compact2"
class "GtkPaned" style "compact2"

Agora basta rodar o eclipse com a seguinte linha de código:

GTK2_RC_FILES=$GTK2_RC_FILES:/caminho/gtkrc /caminho2/eclipse

Feito isso, aproveite a cara mais “normal” do eclipse!
Segue um screenshot do resultado:

Aparência melhorada

Aparência melhorada

Script para remover caracteres do nome de arquivos (Linux)

Para remover um determinado caracter (no exemplo, a idéia é remover o espaço) do nome de vários arquivos contidos em um determiado diretório rodamos o seguinte script (supondo que você usa o bash como instepretador):

#!/bin/bash

find . -name '* *' | while read arquivo
do  
    alvo=`echo "$arquivo" | sed 's/ /_/g'`  
    echo "Renomeando '$arquivo' para '$alvo'"
    mv "$arquivo" "$alvo"
done

Vamos a explicação das linhas mais relevantes:

#!/bin/bash

A linha 1 indica o caminho do interpretador de comandos que estamos utilizando, no caso estou usando o bash.

find . -name '* *' | while read arquivo  

O comando find busca por arquivos no diretório atual (indicado pelo ponto) cujos nomes contém espaço. O operador pipe ( | ) “conecta” a saída (stdout) do comando find a entrada(stdin) do comando read. O laço itera em cada linha do resultado, armazenando-o na variável arquivo. Para entender melhor a sintaxe do comando while do … done recomendo o seguinte link.

alvo=`echo "$arquivo" | sed 's/ /_/g'`  

Nessa linha, a varivável alvo recebe o nome dos arquivo da iteração atual com os espaços substituidos pelo caracter _. A sintaxe do parâmetro s do comando sed é:

sed 's/<expressão_regular>/<texto_substituto>/[g]'  

Assim que a expressão regular é atendida o comando sed o substitui pelo pelo texto_substituto. O modificador g indica que todas as ocorrências da expressão regular devem ser substituidas e não só a primeira.

O novo nome dos arquivos é atribuído na linha 6:

mv "$arquivo" "$alvo"  

O script está disponível em minha conta no github!

Fontes:

http://design.liberta.co.za/articles/how-to-remove-spaces-from-filenames-in-linuxunix/

http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tutoriais/tools/er.html