sexta-feira, 31 de outubro de 2014

5 Dicas para Digitar Mais Rápido e Melhor

Mas por que, Turicas?

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!).

TL; DR

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:

Digitar corretamente é TÃO FÁCIL!
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.

Destaque para as ranhuras nas teclas 'f' e 'j' do meu Das Keyboard

Ranhuras do meu DasKeyboard Model S Ultimate

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).

Destaque para a ranhura na tecla '5' do teclado do celular Nokia 3120

Ranhura na tecla "5" de um Nokia 3120

A tecla 5 também funciona como home key nos numpads, os teclados numéricos:

Destaque para a ranhura na tecla '5' de um teclado numérico

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")

Teclas separadas, côncavas e com tamanho adequado (para o meu gosto) do teclado do meu notebook Lenovo Z460

Teclado do notebook Lenovo Z460: exemplo de características desejáveis

Características Indesejáveis

  • "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"

Características indesejáveis em um teclado
Características indesejáveis em um teclado

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 ;-).

Layout Dvorak

Teclado antigo que troquei as teclas para o layout Dvorak
Teclado antigo que troquei as teclas para o layout Dvorak

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")

A configuração de layout e personalização varia de sistema para sistema. Para quem usa GNU/Linux, dê uma olhada no manual do arquivo de configuração .XCompose.

Dica #5: Treine, Treine, Treine!

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:


Final do Campeonato DasKeyboard

Conclusão

Em resumo:

  • Saber usar o teclado (não olhar, usar os dez dedos)
  • Usar um bom teclado
  • Praticar

Boa digitação! o/

Se você gostou desse artigo, que tal compartilhá-lo com seus amigos? ;-)

terça-feira, 14 de outubro de 2014

Hackathon do SESI Cultura Digital 2014

As hackathons ("maratonas hacker"), também conhecidas como hack days, hack fests ou code fests são maratonas que envolvem desenvolvimento de algum software, em geral sobre um tema específico e com alguma premiação ao final. Em geral os grupos participantes possuem desenvolvedores de software, designers e administradores, remetendo à equipe de uma pequena empresa. Muitas hackathons visam resolver algum problema ou mesmo fomentar a criação de empresas startups na área-tema.

Desde que conheci o conceito gostei bastante, afinal é uma forma de incentivo a desenvolvimento de aplicativos inovadores, em geral com algum cunho social. Mesmo os grupos que não são premiados desenvolvem algum aplicativo, que pode ser útil ou até mesmo se tornar um negócio no futuro. Tenho visto várias hackathons relacionadas a dados abertos, que é um tema super interessante e, na minha visão, pode mudar a forma sobre como vivemos em sociedade.

Brasil.IO: Dados abertos para um Brasil mais ligado
Brasil.IO: meu projeto pessoal de dados abertos

Recentemente fui convidado pela organização do SESI Cultura Digital a ser tutor da Hackathon SESI Cultura Digital 2014, uma maratona com prêmios de R$ 20.000, R$ 10.000 e R$ 5.000 para os melhores projetos, podendo ser feitos por grupos de 3 a 5 pessoas. O objetivo dessa hackathon é fomentar o desenvolvimento de soluções ambientais para o estado do Rio de Janeiro, nos seguintes eixos temáticos:

Festival SESI de Cultura Digital 2014

Se você tem interesse, se inscreve logo pois as inscrições vão somente até dia 18 de outubro! Cada grupo participante receberá um Kit Arduino! o/

A minha tutoria será na área de fontes de dados relacionadas a monitoramento do ar e qualidade da água. Além da hackathon, o evento contará com várias outras atrações, como palestras e oficinas (também serei tutor de duas oficias de Arduino, que já estão lotadas!).

Os grupos terão dois dias (23 e 24 de outubro) para desenvolver um protótipo e terão de apresentá-los a uma banca avaliadora no dia 25. Durante os dias 23 e 24 serão feitas diversas apresentações para facilitar o trabalho dos grupos, bem como várias tutores estarão disponíveis para tirar dúvidas e colaborar no desenvolvimento dos protótipos.

Que tal participar? Curtiu a ideia? Compartilhe com seus amigos! :-)

terça-feira, 2 de setembro de 2014

Curso de Arduino em Belo Horizonte

Curso de Arduino em BH

Já faz algum tempo que eu gostaria de fazer o Curso de Arduino em Belo Horizonte - adoro Minas (estou sempre por lá) e sempre tem mineiros me perguntando sobre o curso. Então, chegou o momento: estão abertas as inscrições para turma do Curso de Arduino em BH! \o/

O curso acontecerá em parceria com o Guajajaras Coworking, um espaço de trabalho super moderno, com ótimas pessoas e muito bem localizado, no Centrão da cidade (Rua dos Guajajaras, 572).

Curso de Arduino no Guajajaras Coworking

A primeira turma de BH acontecerá em dois sábados, dias 20 e 27 de setembro, das 10 às 19 horas (com 1h de intervalo para almoço), totalizando 16 horas de aula.

Se você tem interesse, corre porque a procura está grande: recebi centenas de e-mails perguntando por essa turma! Só temos 16 vagas e já temos 50% da turma inscrita (abrimos as inscrições há apenas 5 dias). O valor da inscrição é de R$ 450,00, que podem ser pagos em até 12x usando o PagSeguro. Inscreva-se já no Curso de Arduino em BH.

Vou aproveitar o tempo em Minas e tentar participar de um pyBHar, o encontro dos pythonistas mineiros! ;-)

Arduinistas e Pythonistas mineiros, até lá! o/

sexta-feira, 7 de março de 2014

Armazenando dicionários no MongoDB com MongoDict

Muitas das vezes que precisamos persistir dados chave-valor optamos por utilizar bases de dados focados somente em armazenar esse tipo de dado: as chamadas key-value stores, como por exemplo Riak, Redis e Memcached (esse último, persiste apenas em memória). Porém, adicionar mais um software/serviço em uma aplicação trás mais trabalho para a equipe (deployment, manutenção) e maior possibilidade de falhas (não somente de segurança, mas relacionadas a lentidão e downtime também).

Riak logo   Redis logo   Memcached logo

Caso você já tenha o MongoDB rodando em sua infraestrutura e necessite de uma key-value store, você poderá utilizar a biblioteca Python mongodict, que desenvolvi em julho de 2012 para aproveitar a infra já disponível e, ao mesmo tempo, poder utilizar os dados persistidos com facilidade.

Dicionários no MongoDB

Desenvolvedores Python são hash-addicted (rá!) - usamos muito os dicionários, para tudo (às vezes até excessivamente). Meu objetivo ao desenvolver o mongodict foi justamente aproveitar a interface que já conhecemos de dicionários (dict[chave] = valor) para persistir os dados no MongoDB sem precisar utilizar uma API diferente da que já estamos acostumados.

Logo MongoDB

Instalando

Sem mais blá blá blá, vamos lá: o mongodict está disponível no PyPI então, para instalá-lo, basta executar o comando:

pip install mongodict

Ele funciona em Python 2.7 e 3.3.

Usando

A biblioteca é bem simples: existe apenas uma classe MongoDict dentro do módulo. Aprenda com exemplos:

from mongodict import MongoDict

# Cria uma instância do "dicionário", já conectando no mongod
# Argumentos `host`, `port`, `database` e `collection` são opcionais
mydict = MongoDict()

mydict['answer'] = 42
print(mydict['answer']) # 42

print('answer' in mydict) # True
del mydict['answer']
print('answer' in mydict) # False

mydict.update({'spam': 'eggs', 'ham': 'damn'})
for key, value in mydict.items():
    print('{} = {}'.format(key, value))
# ham = damn
# spam = eggs

Para assegurar que a classe MongoDict segue o protocolo MutableMapping, utilizei os testes do próprio CPython! :-)

Serialização de Dados

O mongodict utiliza a biblioteca pickle para serializar/desserializar os dados (apenas os valores, não as chaves), portanto, qualquer dado que puder ser serializado com a pickle poderá ser salvo.

Porém, em alguns casos é desejável alterar o serializador. Digamos, por exemplo, que eu esteja salvando o conteúdo de arquivos HTML e queira compactá-los para economizar espaço em meu servidor - daí basta passar o parâmetro codec:

from zlib import compress, decompress
from urllib import urlopen

from mongodict import MongoDict

mydict = MongoDict(codec=(compress, decompress))
url = 'http://www.CursoDeArduino.com.br/'
mydict['curso-de-arduino'] = urlopen(url).read()
print(mydict['curso-de-arduino'])
# <... imprime o HTML da página ...>

Nesse caso, se conectarmos no MongoDB diretamente podemos ver o tamanho armazenado lá:

colecao = mydict._collection
documento = colecao.find_one({'_id': 'curso-de-arduino'})
print(len(documento['v'])) # 5763
print(len(mydict['curso-de-arduino'])) # 20076

Cuidado com Objetos Mutáveis

Caso o valor de uma das chaves seja um objeto mutável (por exemplo: uma lista), lembre-se que alterar o objeto recuperado do MongoDict não irá atualizá-lo no banco (pois ele fica em memória e é um objeto Python nativo). Por exemplo:

from mongodict import MongoDict

mydict = MongoDict()
mydict['compras'] = ['tomate', 'rúcula', 'queijo']
mydict['compras'].append('azeite')
print(mydict['compras'])
# ['tomate', 'r\xc3\xbacula', 'queijo']

Para corrigir isso, devemos explicitamente atualizar o valor da chave:

compras = mydict['compras']
compras.append('azeite')
mydict['compras'] = compras
print(mydict['compras'])
# ['tomate', 'r\xc3\xbacula', 'queijo', 'azeite']

Autenticação

Para autenticar-se no servidor MongoDB, utilize o parâmetro auth:

from mongodict import MongoDict

mydict = MongoDict(auth=('user', 'myprecious'))

Dica Bônus

Caso você ache chato ter que acessar mydict['chave'] e prefira mydict.chave, utilize a biblioteca attrdict. Instale-a a partir do PyPI:

pip install attrdict

E para usar, é bem fácil:

from attrdict import AttrDict
from mongodict import MongoDict

mydict = AttrDict(MongoDict())
mydict.answer = 42
mydict.question = '?'

print('Answer to "{question}" = {answer}'.format(**mydict))

Você só conseguirá acessar como atributo o primeiro nível, ou seja, mydict.chave.outra_chave não funcionará (utilize mydict.chave['outra_chave']).

Contribuindo

Caso queira contribuir, acesse o issue tracker do mongodict no GitHub. Fique à vontade para relatar bugs, sugerir funcionalidades e enviar pull requests! =)

quarta-feira, 5 de fevereiro de 2014

Dica: Como fazer o Google Hangout Funcionar no Debian

Há algumas semanas instalei o Debian testing em um notebook, porém tive problemas para fazer funcionar o plugin do Google Hangout, que costumo usar bastante para reuniões online, pois trabalho remotamente. Após a instalação do plugin (que é um pacote .deb disponível no site deles) e reiniciar o navegador, ele não consegue identificar que o plugin está instalado e, com isso, não consigo entrar nos hangouts.

Depois de procurar bastante, descobri em uma thread no Google Groups dos produtos da Google e consegui resolver o problema! Parece que o problema estava relacionado a conflitos com os pacotes libudev0 e libcairo2. Para resolver, basta executar os seguintes comandos:

apt-get remove libudev0
wget http://snapshot.debian.org/archive/debian/20130927T214600Z/pool/main/c/cairo/libcairo2_1.12.14-4_amd64.deb
dpkg -i libcairo2_1.12.14-4_amd64.deb

Os comandos devem ser executados como usuário root (diretamente ou através do sudo).

sexta-feira, 31 de janeiro de 2014

Curso de Arduino avançado no Rio de Janeiro

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/

Curso de Arduino avançado com Álvaro Justen

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)
  • Inscrições e ementa no site da EDX (à vista tem desconto!)

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.