Blog sobre tecnologia em geral, com ênfase em software livre, desenvolvimento de software em Python, projetos envolvendo Arduino e eletrônica, Coding Dojo e metodologias ágeis de desenvolvimento de software.
Nos próximos meses estarei em diversas cidades do Brasil (atualmente sou um
nômade digital)
ministrando cursos de introdução ao Arduino, onde ensino programação e
eletrônica para quem quer criar projetos interativos, de automação e robótica.
Comecei com o Curso de Arduino em 2011 e tomei essa iniciativa por
sugestão de meu amigo Jon "maddog" Hall e porque o público de minhas
palestras de divulgação do Arduino sempre perguntava "como
aprender programação e eletrônica?".
A iniciativa deu tão certo que desde então já ensinei a centenas de pessoas
a dar seus primeiros passos em robótica, em diversas cidades do Brasil (e até
fora dele!). É muito gratificante ver os alunos fazendo os projetos (veja as
fotos) e dando um feedback bastante positivo com relação à
didática utilizada nas aulas. Segue a agenda das próximas turmas:
O TransLAB é um laboratório que tem como objetivo estimular a
inovação social e tem vários projetos super legais rolando lá dentro!
Belo Horizonte
BH é outra cidade que está no meu coração! Já fiz o curso diversas vezes em
parceria com o Guajajaras Coworking, um espaço sensacional - na
minha opinião, um dos melhores espaços de coworking do Brasil. A próxima turma
em BH será especial: acontecerá no Guaja Casa (primeiro
café-coworking do Brasil - Avenida Afonso Pena, 2881) e no FAZ
Makerspace (Rua Santa Rita Durão, 143); além disso, a
Eletrogate irá fornecer Kits Arduino com desconto para os alunos!
A primeira turma aconteceu na cidade do Rio de Janeiro e é a cidade em que eu
tenho maior demanda de cursos (não só sobre Arduino, mas também
sobre Python, Git e outras coisas legais). Lá a minha parceria
é com a EDX Coworking, empresa já conhecida da comunidade de software
livre por conta das contribuições com o Libre Office - a
EDX é meu escritório favorito quando estou no Rio.
O conteúdo desse artigo está disponível também em vídeo:
Alguns dos usuários da minha biblioteca rows me pediram funcionalidades
de detecção de encoding e tipo de
arquivo, então comecei a procurar alguma biblioteca
Python simples e rápida que desse conta dessa tarefa. O problema:
encontrei muitas bibliotecas e nenhuma delas me atraiu
por alguns dos seguintes motivos:
Não estava disponível no Debian (se eu usasse o pacote rows no
Debian iria quebrar);
Não estava sendo mantida atualmente;
Não funcionava corretamente.
Então percebi que não existe uma "solução de ouro" para esse problema em
Python. Muitos pythonistas usam a biblioteca chardet, mas ela
detecta muitas vezes com erros e é razoavelmente lenta (principalmente se
você precisar fazer a detecção enquanto um usuário aguarda a resposta através
de uma chamada de API via HTTP) -- veja mais detalhes sobre isso no
vídeo.
Então, eu pensei: por que não usar o programa file, que já
é bastante conhecido por hackers do mundo UNIX, é rápido e muito mais assertivo
que todas as outras opções? Para minha surpresa não existia um bom binding de
Python para a libmagic (algumas bibliotecas rodavam o comandofile mas
isso não era uma opção para mim pois dependia de mais um pacote do sistema e
não era uma solução muito portável).
Fiquei muito feliz de poder colaborar com um software importante e que eu uso
desde de meus primeiros passos no mundo GNU/Linux (2003? 2004?)! Durante minha
busca eu descobri que o primeiro commit da versão livre do file é de 1987
(eu tinha menos de 4 meses de idade!) -- e o software ainda é mantido hoje.
Agora todos podemos usar binding oficial do file para
Python: a nova biblioteca é chamada file-magic e pode ser
instalada executando:
pip install file-magic
Ela disponibiliza várias funções e atributos, mas as mais importantes são bem
simples e intuitivas: elas retornam uma namedtuple com os
resultados da detecção. Vamos ao código!
>>> import magic
>>> # Você pode especificar diretamente um nome de arquivo
>>> filename_detected = magic.detect_from_filename('turicas.jpg')
>>> print(filename_detected)
FileMagic(mime_type='image/jpeg', encoding='binary',
name='JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 842x842, frames 3')
>>> # E você pode acessar os atributos da `namedtuple`:
>>> print(filename_detected.mime_type)
image/jpeg
# E se você já tem o conteúdo do arquivo em memória:
>>> with open('data.html') as fobj:
... data = fobj.read()
>>> content_detected = magic.detect_from_content(data)
>>> print(content_detected)
FileMagic(mime_type='text/html', encoding='utf-8',
name='HTML document, UTF-8 Unicode text')
>>> print(content_detected.encoding)
utf-8
Algumas coisas ainda precisam ser melhoradas (como a documentação, rodar os
testes em outras plataformas etc.), porém a biblioteca já pode ser instalada
através do pip, é rápida e precisa. :-)
O simples fato de você usar muito o teclado, independente de sua profissão, já
é um bom sinal de que você deveria aprender a usá-lo melhor, como você
provavelmente faria com qualquer outra ferramenta de trabalho -- não basta ter
boas ferramentas, temos que saber utilizá-las eficientemente (programadores,
aprendam a digitar!).
Esse artigo é longo e poderia ser resumido na seguinte frase:
Digitar bem é questão de técnica e prática (um bom teclado também ajuda).
Mas se você quer realmente entender como digitar mais rápido e melhor, além de
saber alguns detalhes maneiros ("cultura inútil"?), continue lendo as 5 dicas
a seguir. :-)
Dica #1: Use os DEZ Dedos
Para começar, que tal usar toda a capacidade que você tem? ;-) Não usar os 10
dedos para digitar é como ocupar só parte dos leitos disponíveis de um hospital
quando existem pacientes suficientes para ocupar todos. Não subutilize
sua capacidade!
A posição correta dos dedos segue ilustrada:
Norman Saksvig já sabia disso em 1.947
Foto por Crossett Library
Por padrão, você apoia seus dedos (com exceção dos dedões) na fileira
principal, que é a que tem as letras "asdfghjklç" em um teclado padrão
ABNT2 (falarei mais sobre o layout do teclado abaixo).
O dedo indicador é o único que toca duas teclas para a mesma fileira: o
esquerdo toca as teclas "f" e "g" (fica "estacionado" na "f") e o direito toca
"j" e "h" (fica "estacionado" na "j").
Dica #2: Não Olhe Para o Teclado
Confesso que fico inquieto quando vejo alguém "catando milho" (olhando para o
teclado em busca da tecla desejada). O contrário de "catar milho" é
"datilografar" (touch typing, em Inglês) e é
isso que você precisa aprender! :-D
A razão da catação de milho é o desconhecimento sobre a posição das teclas e
para contornar isso, segue uma dica infalível:
As teclas "f" e "j", onde você deve estacionar seus dedos indicadores, possuem
ranhuras.
Tateando o teclado você consegue identificar onde colocar os dedos indicadores
e, a partir da imagem da dica 1, você consegue posicionar os outros dedos
também
(existem até alguns adesivos que aumentam a ranhura para
facilitar encontrar essas teclas, que são chamadas de home keys).
Com isso, você consegue digitar todas as teclas da fileira principal sem
olhar, bastando decorar a ordem das teclas e seus respectivos dedos.
Para as demais fileiras, basta deslocar os dedos para cima e para baixo: dessa
forma, o dedo mindinho esquerdo digitará as teclas "a" na fileira principal,
"q" na fileira acima e "z" na fileira abaixo.
Como você pode perceber na foto acima, meu teclado não possui letras impressas
-- não tê-las também ajuda bastante a não olhar para o teclado! ;-)
Os teclados físicos de celular (alguém lembra deles?) seguem a mesma lógica com
relação a ranhuras (que também são bem úteis para cegos).
Ranhura na tecla "5" de um Nokia 3120
A tecla 5 também funciona como home key nos numpads, os teclados
numéricos:
Ranhura na tecla "5" de um teclado numérico
No teclado numérico o dedo médio fica na tecla "5", o indicador na "4" e o
anelar na "6". O "0" é digitado com o polegar, os sinais à direita com o mínimo
e as demais teclas são digitadas deslocando-se os três dedos principais
(indicador, médio e anelar).
Dica #3: Use um Bom Teclado
Saber digitar bem usando um teclado ruim não é algo prazeroso. Porém, definir se
uma característica é boa ou ruim depende de cada um, é algo pessoal. Seguem as
minhas preferências:
Características Desejáveis
Teclas bem separadas
Teclas ligeiramente côncavas
Teclas não tão pequenas (depende do tamanho de seu dedo)
Resposta boa (é o feedback que o teclado te dá ao apertar uma tecla -- o meu
DasKeyboard, por exemplo, faz um "click")
"Fn" à esquerda de "Ctrl" e com variações de tamanho entre as teclas
modificadoras ("Ctrl", "Win/Super", "Alt")
Setas, "Page Up" e "Page Down" em tamanho minúsculo
"Esc" e "Fn"s minúsculos
"Fn"s invertidos com funções multimídia
"Insert", "Delete", "Home" e "End" minúsculos e fora do posicionamento
original ("Home" acima de "End", "Insert" acima de "Delete" e "Home" à
direita de "Insert"); "Page Up" e "Page Down" também não estão nesse "grupo"
O teclado em questão é, ironicamente, também de um notebook Lenovo: dessa vez é
de um Thinkpad.
Dica #4: Escolha um Bom Layout
Quem não usou PCs na década de 90 talvez não saiba que usamos layouts diferentes
do (agora) onipresente ABNT2. O ABNT2 é só um dos diversos outros layouts
possíveis e a boa notícia é que, independente do hardware do seu
teclado, você pode trocar o layout através de uma configuração de software.
Obviamente, teclados já vem de fábrica com etiquetas nas teclas seguindo algum
layout, mas você pode configurar seu sistema para identificar as teclas de forma
diferente (isso só é ruim para quem cata milho ;-).
Há alguns anos usei o layout Dvorak por algumas semanas e gostei
bastante (um dia pretendo voltar a usá-lo), daí resolvi trocar as teclas de
posição (só pra assustar quem tentava digitar nele ;-). Repare que nesse layout:
Das letras, as únicas que não foram trocadas (vindo de um layout ABNT2) são
"a" e "m"
Todas as vogais são acessadas diretamente através da mão esquerda, sem
precisar mudar de fileira (todas na fileira principal)
As home keys são as letras "u" e "h" (e não "f" e "j") e, por isso, fiz
ranhuras nelas com um ferro de solda
Repare também que raspei o símbolo do Windows das duas teclas "Super". :-D
Usar um teclado com layout Dvorak foi uma experiência incrível: digitar é algo
bastante natural para mim, mas quando me deparei com o Dvorak eu sabia apenas as
posições das teclas "a" e "m" -- me senti inútil. Tive que reaprender a
datilografar (achei mais difícil que aprender uma língua nova).
Eu cheguei a digitar em uma velocidade aceitável nele em 2010, mas na época
ficava com Dvorak no desktop e ABNT2 no notebook, que me causou bastante
confusão mental e me fez voltar 100% para o ABNT2 porque precisei de um pouco
mais de produtividade naquele momento.
Mesmo não usando mais o Dvorak, recomendo fortemente testá-lo: ele foi criado
na década de 20 por August Dvorak e é bem mais ergonômico e
eficiente que um teclado ABNT2/QWERTY.
Layouts Personalizados
Além dos layouts pré-definidos, você pode fazer alterações em seu próprio layout
também -- por exemplo, conheço desenvolvedores de software que:
Invertem o "caps lock" com o "ctrl" (preferem não usar "caps lock")
Invertem a ação do "shift" nas teclas numéricas ("!" é feito naturalmente e
"1" é feito segurando "shift")
De nada adianta saber toda essa teoria se você não pratica. Corrigir-se para
usar os dedos corretos e fazer pequenos exercícios ajuda bastante no processo.
Uma forma bastante divertida e eficiente de treinar é usar o site
TypeRacer, onde você consegue medir sua velocidade de digitação e ainda
pode convidar amigos para "correr" contigo; dá pra ver sua evolução também
através de um gráfico com o histórico de suas velocidades. Minha média no
TypeRacer é de 82 palavras por minuto (WPM).
Se você fez um teste lá e acha 82 WPM um número alto, veja só esse vídeo:
Já faço turmas do Curso de
Arduino há bastante tempo e uma das coisas
que meus alunos sempre perguntam é quando haverá uma turma com foco avançado,
para quem já conhece o Arduino e quer ir direto para
aplicações mais complexas, otimizações etc. Para suprir essa necessidade, criei
uma ementa focada no desenvolvimento e otimização de software para Arduino e a
primeira turma acontecerá no Rio de Janeiro em fevereiro! \o/
Seguem as informações:
Local: EDX Treinamentos, Av. Rio Branco, 124 (Centro, Rio de Janeiro)
Dias 8 e 15 de fevereiro de 10 às 19h (carga horária total: 16 horas)
Já temos inscritos e no momento apenas 5 vagas estão disponíveis. Corre lá!
o/
Para quem está interessado em aprender sobre Arduino, temos também turmas para
o Curso de Arduino básico, que acontecerá
no Rio de Janeiro e em Belo Horizonte.
E saindo um pouco da linha do Arduino: para quem está interessado em aprender a
desenvolver software usando a linguagem Python, já
estão abertas as inscrições para o
Curso de Python, que acontecerá em março e abril
(22, 29 de março e 05 de abril) no Rio de Janeiro.
Quem ainda não conhece a linguagem Python deveria conhecer! ;-)
Eu a utilizo bastante e é por isso que estou tentando rodá-la em meu celular - ainda não tive êxito total, mas já dei alguns passos. Procurei rapidamente na Web sobre Python rodando no celular que tenho e não encontrei resultados, por isso resolvi fazer com as próprias mãos.
Para quem não sabe, Python é uma linguagem que possui várias implementações de seu interpretador:
Meu desejo é rodar o Jython em meu Sony Ericsson W200 - ele roda Java nativamente, mas não Python; com o Jython eu teria um interpretador Python no meu bolso, ao alcance das minhas mãos! :-D Obviamente, Jython é software livre.
O arquivo JAR do instalador Jython é o: jython_installer-2.2.1.jar. Para quem não sabe, um arquivo JAR nada mais é do que um arquivo compactado no formato ZIP, seguindo algumas regras de criação de um Java ARchive, estabelecidas pela Sun. Segui os passos abaixo:
Com isso, consegui ter acesso ao pacote jython_installer/jython.jar, que é o interpretador propriamente dito. Descompactei-o e fiz algumas modificações no arquivo META-INF/MANIFEST.MF, me baseando no mesmo arquivo do jmIrc, um cliente IRC feito em Java para celulares.
Gerei um pacote com essas modificações, baixem em: jython.jar modificado.
Enfim consegui instalar o pacote no meu Sony Ericsson W200 - depois de transferir o pacote pelo cabo USB o celular demorou mais de 3 minutos para instalar, coitado.
Por fim, não consegui rodar o interpretador. :-( Gostaria da ajuda de vocês para:
Testar o pacote que criei em celulares melhores - acredito que o meu não seja potente o suficiente para rodar (ele fica MUITO tempo tentando abrir, até dar um erro).
Preciso que alguém que saiba J2ME valide as modificações que fiz e o pacote JAR que gerei - sou totalmente leigo em Java.
Enfim, é isso! Conto com a ajuda de vocês para ter Python rodando em mais lugares. ;-)