quarta-feira, 29 de junho de 2016

Cursos de Arduino por todo Brasil

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:

Porto Alegre

Porto Alegre é uma das cidades no Brasil que mais gosto e será a primeira vez que farei o curso no sul do país. O curso acontecerá no TransLAB (Rua Professor Duplan, 146) nos dias 19 a 22 de julho (terça a sexta-feira), de 18:30 às 21:30. Saiba mais detalhes sobre o que você irá aprender e faça sua inscrição agora. Essa será a única turma do ano em Porto Alegre!

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!

O curso acontecerá de 5 a 9 de setembro (segunda a sexta-feira), das 19 às 22h e as vagas estão super concorridas! Saiba mais detalhes sobre o que você irá aprender e faça sua inscrição agora. Essa será a única turma do ano em BH!

Rio de Janeiro

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.

A próxima turma no Rio acontecerá nos dias 17 e 18 de setembro (sábado e domingo) de 9 às 18h na EDX Coworking (Avenida Rio Branco, 124). Saiba mais detalhes sobre o que você irá aprender e faça sua inscrição agora. Essa será a última turma do ano no Rio!

segunda-feira, 2 de maio de 2016

Dados Tabulares: A Maneira Pythônica

Já venho há algum tempo trabalhando na biblitoeca rows, que facilita demais o acesso a dados tabulares, não importa o formato do arquivo (CSV, XLS, XLSX, HTML, dentre outros). No último sábado (30 de abril) fiz uma palestra no encontro PythOnRio sobre o projeto e a galera se amarrou! Além da biblioteca, também mostrei como usar a command-line interface, que uso diariamente para pequenas análises e conversão de dados.

Confira o vídeo:

E os slides:

Veja também a versão em HTML dos slides.

O projeto é software livre e temos várias issues abertas, entra lá no repositório no GitHub e contribui! :)

segunda-feira, 14 de março de 2016

Reading Parquet Files in Python with rows

Many people in the data science field use the parquet format to store tabular data, as it's the default format used by Apache Spark -- an efficient data storage format for analytics. The problem is: the format is binary (you can't just open it with your preferred code editor) and there's no such a good Python library to read -- not until today!

I found a Python library called parquet-python on GitHub but it's hard to use, doesn't have one code example, was not available on PyPI and it looks like it's not maintained anymore. So I decided to implement a parquet plugin (read-only) for my library rows: it uses the parquet-python library under the hood (I needed to upload it to PyPI so you can install it easly) and exposes the data in a pretty simple, pythonic way.

Installation

I didn't realese the rows version with this plugin yet, so you need to grab the most recent rows version by running:

pip install -U git+https://github.com/turicas/rows.git@develop

And also the dependency:

pip install parquet

If the data is compressed using Google's snappy you'll also need the library headers and other Python dependency -- install everything by running:

apt-get install libsnappy-dev
pip install python-snappy

Then you can use rows.import_from_parquet(filename) in your programs! \o/

Python Example

A quick Python code example:

import rows

table = rows.import_from_parquet('myfile.parquet')
for row in table:
    print row  # access fields values with `rows.field_name`

Note that the current implementation is not optimized (for example, it'll put everything into memory) but at least you can extract desired data and then convert to a more friendly format easily.

Converting Parquet to Other Formats with rows' CLI

You can convert Parquet files to many tabular formats (like CSV) by using the rows's command-line interface, so you don't need to code.

Install the rows CLI by running:

pip install rows[cli]

Now convert the parquet file:

rows convert myfile.parquet myfile.csv  # yes, simple like this!

You can replace csv with any other supported format (the list is always growing!), such as: txt, html, xls, xlsx and sqlite.

If your file is small enough you can actually see it without needing to save the output to another file by using the print subcommand:

rows print myfile.parquet  # will extract, convert and print data as text

And you can actually query data as in SQL (this CLI is awesome!), for example:

rows query 'nation_key < 10' tests/data/nation.dict.parquet \
     --output=data.csv

By running this command the CLI will:

  • Import data from tests/data/nation.dict.parquet file into memory;
  • Export to SQLite (:memory:);
  • Run the query (nation_key < 10) and get the results;
  • Convert the results to a new rows.Table object;
  • Export the table to CSV format and save it into data.csv (the result format could be html, xls, xlsx or any other write-plugin supported by rows).

With this addition to rows I think the library and its command-line interface became one of the tools every data scientist should have installed. ;-)

domingo, 6 de março de 2016

Searching dd-wrt Router Database with ddwrtdb

I really like the dd-wrt router operating system: I can install it on cheap routers (starting from 27 USD, as TP-Link WR741ND) to have a great Web configuration interface and performance (way better than general factory software).

I'm always looking for new router models to check if they're supported by dd-wrt and to compare prices/hardware specs (as I'm always buying new routers to help some friends with their Wi-Fi networks). The problem is: dd-wrt's website usability is not that good, specially the router database search. As I prefer to use my terminal instead of the Web browser, I've created a command-line tool to deal with it: it's called ddwrtdb and the code is available at my GitHub account!

It's also available on Python Package Index so you can install it using Python's pip by running:

pip install https://github.com/turicas/rows/archive/develop.zip
pip install ddwrtdb

That's it! Now run ddwrtdb --help to see the available commands (it's pretty intuitive). You can also check out the project' README for command examples.

This simple command-line tool (< 200 lines of Python code) was created using these awesome libraries:

  • click, to easily create a beautiful command-line interface;
  • lxml, to use XPath in order to parse HTML more easily;
  • requests, to make HTTP requests to dd-wrt's website;
  • rows, to automatically extract tables from HTML and to export data to any tabular format.

domingo, 28 de fevereiro de 2016

Detectando Encoding e Tipo de Arquivo com Python

Read this blog post in English.

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 tinha uma implementação pythônica;
  • 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.

But there should be one -- and preferably only one -- obvious way to do it.

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

Depois de vasculhar o repositório de código do file eu encontrei um binding simples para Python, que na época não estava disponível no PyPI e não era tão pythônica como eu esperava.

A Solução

Como o código é software livre, eu criei uma issue no sistema de bugs do file para resolver o problema e o Christos Zoulas (atual mantenedor) me pediu um patch, que eu implementei, enviei e foi aceito. :-)

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

Espero que vocês tenham gostado! ;-)

quinta-feira, 11 de fevereiro de 2016

Fatura do NuBank em CSV

O Que é NuBank?

Para quem não conhece, NuBank é um cartão de crédito que não te cobra anuidade e tem um ótimo atendimento, além de um aplicativo para celular bastante fácil de usar (é sua única interface com eles). Em resumo: eles estão fazendo o que em geral os bancos não fazem e estão lucrando com isso! Já faz alguns meses que estou usando e recomendo! Se quiser saber mais detalhes acesse a página deles.

Problemas

O NuBank, apesar de muito bom, para mim poderia melhorar em alguns detalhes:

  • Ainda não dá para transferir as milhas do cartão para compra de passagens aéreas;
  • Ainda não consigo colocar o pagamento da fatura como débito automático no Banco do Brasil (parece que só está disponível para Santander);
  • É chato ter que usar o PDF da fatura para conferir meus gastos.

Quando estou no Brasil tento usar o NuBank para todas as compras, pois isso facilita muito o controle dos meus gastos - caso não concorde que gastar no cartão é melhor para ter o controle dos gastos então leia o adendo (quando estou fora evito usar o cartão de crédito pois o IOF para compras internacionais é de 6,38%). Porém, como a fatura vem por email em PDF e não dá pra exportar para outros formatos pelo aplicativo, torna-se trabalhoso (e chato) demais o processo de jogar os gastos para minha planilha financeira pessoal e conferí-los. Como adoro programar e programar é, em resumo, automatizar coisas, resolvi criar um software para fazer a conversão da fatura do NuBank PDF para CSV (que antes eu fazia manualmente). :D

Convertendo a Fatura

O código do software está todo na minha conta no GitHub, chama-se nubank-to-csv. Ele foi escrito em Python usando a minha biblioteca rows (para facilitar a extração para CSV e qualquer outro formato tabular) e a biblioteca lxml para extrair os dados do HTML que é gerado pelo pdftohtml. Fique à vontade para contribuir com o script caso você manje dos paranauê (fiz uma lista de sugestões de contribuição).

O fluxo então é esse:

Fatura em PDF >[pdftohtml]> Fatura em HTML >[nubank-to-csv]> Fatura em CSV

Depois de instalar o nubank-to-csv e suas dependências basta rodar dois comandos:

pdftohtml fatura.pdf
python nubank.py faturas.html fatura-lindona.csv

O arquivo na segunda linha é faturas.html (com "s") mesmo -- esse arquivo é gerado pelo pdftohtml (junto com outros) depois da conversão. Você pode deletar os arquivos gerados pelo pdftohtml depois disso. Esse comando não segue bem a filosofia do UNIX e é bem inflexível (não dá pra especificar o nome do arquivo de saída, por exemplo). :-/

Uma coisa legal do script é que ele já junta as entradas relacionadas a IOF com o gasto que gerou o IOF, facilitando bastante meu controle! :D

Convertendo o CSV para Outro Formato

Se você tem a command-line interface da biblioteca rows instalada (pip install rows ou apt-get install rows) você também pode converter o CSV para diversos outros formatos, como XLS, XLSX, JSON, SQLite, HTML e TXT. Para converter, basta rodar:

rows convert fatura-lindona.csv fatura.xls

Caso queira outro formato em vez de XLS, basta trocar "xls" ali pela extensão desejada que o software é esperto o suficiente para identificar. :)

Adendo: Controle das Contas

Muita gente prefere evitar o uso do cartão de crédito para ter mais controle das contas (já vi muitos conselhos vindos de profissionais do ramo financeiro sobre evitar o uso do cartão). Eu prefiro usar o cartão sempre que possível (quando estou no Brasil) pois quando gasto em dinheiro em geral esqueço facilmente com o que gastei (e eu gosto de saber com o que gastei meu dinheiro - essa é a primeira ação para conseguir manter uma vida financeira saudável).

Muita gente se assusta quando eu digo isso porque a maior parte das pessoas que usa o cartão de crédito tem "uma surpresa" quando chega a fatura. Eu nunca tenho surpresas pois:

  • Na planilha onde controlo meus ganhos e gastos já tenho estimativas de entrada e saída para os próximos meses;
  • Duas vezes por semana vejo pelo aplicativo do NuBank o que gastei nos últimos dias e lanço na planilha do próximo mês (que é quando terei que pagar a fatura); e
  • Quando a fatura chega eu a converto para CSV, abro no LibreOffice e confiro se está de acordo com o que lancei na minha planilha financeira anteriormente.

Com esses simples passos eu sei exatamente o valor da fatura que virá e tenho como me conter caso esteja gastando demais!

Curtiu? Que tal compartilhar com seus amigos? ;)

Dúvidas e sugestões? Comente! :)

terça-feira, 2 de fevereiro de 2016

Detecting File Type and Encoding In Python

Read this blog post in Brazilian Portuguese.

I was looking for a simple and fast Python library to implement proper file type detection and encoding detection into my rows library and found that there are many libraries available on Python Package Index which claim to do it. None of them attracted me because one of the following reasons:

  • Do not have a pythonic implementation,
  • Is not available on Debian to install as a package (it's important so people can install rows and its dependencies using pip or apt-get),
  • Is not maintained anymore, or
  • Have some missing feature.

None seemed to be the de-facto way to do it in Python (I think pythonistas do it in many ways). Many pythonistas use the chardet library but its results are wrong sometimes and it's pretty slow (specially if you need to detect during an API HTTP request, while the client is waiting).

But there should be one -- and preferably only one -- obvious way to do it.

So, I thought: why not use the file software, which is well known by all UNIX hackers, faster and most accurate than all the other solutions I know? To my surprise there was not such a good Python binding for file on PyPI (and calling it as a child process was not and option since it would add one more system-dependant package, not detectable during a pip install if missing and would also turn this solution less portable). Then, searching on its repository I found a simple Python wrapper, which was not available on PyPI at that time and was not that pythonic as I expected.

The Solution

Since it's free/libre software, I've created an issue on file bug tracker to solve the problem and Christos Zoulas (the current maintainer) asked for a patch, which I implemented, sent and was accepted. I'm pretty happy I can contribute to a software I've been using since my earlier times on GNU/Linux (2003? 2004?). During this process I found that the first commit on the free/libre file (which every GNU/Linux distribution and BSD flavor uses) implementation was done when I was less than 4 months old (!) -- and it's still maintained today.

Now you can use the official file Python binding: the new library is called file-magic and can be installed by running:

pip install file-magic

It provides some methods and attributes but the most important are pretty simple and intuitive to use: they return a namedtuple with the data you want! Let's take a tour through an example:

>>> import magic

>>> # You can pass the filename and it'll open the file for you:
>>> 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')
>>> # It's a `namedtuple` so you can access the attributes directly:
>>> print filename_detected.mime_type
image/jpeg

# If you have the file contents already, just use `detect_from_content`:
>>> 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

There are still some things to be improved (like running tests in other platforms -- including Python 3) but it's pip-installable and usable now, so we can benefit from it. Feel free to contribute. :)

Hope you enjoy it!

quarta-feira, 30 de setembro de 2015

Pão de queijo + Python = UaiPython!

O Evento

No último fim de semana de agosto tive o prazer de participar do UaiPython: o maior evento sobre a linguagem Python do estado de Minas! Foi muito bom poder encontrar o pessoal e ainda palestrar lá; sempre gostei de Minas por conta do povo ser super gente boa, ter comidas super deliciosas... e agora uma comunidade Python super forte! o/

O pessoal do Python User Group de lá (PUG-MG) organizou o evento que teve minicursos, palestras e foi regado a pão de queijo:

Palestras

As palestras que mais curti foram a da Júlia Rizza que falou sobre o web2py (framework que fiz algumas contribuições há uns 6 anos) - eu não o utilizo mais, porém o trabalho de divulgação/documentação que a Júlia está fazendo é fantástico! - e do Ervilis Viana (meu colega de trabalho na equipe de backend da Onyo e um dos organizadores do evento) que falou sobre a importância das comunidades de desenvolvimento de software em uma lightning talk (palestras de 5 minutos que são tradição nos eventos de Python). E fica aqui a ênfase: o importante são as pessoas e é por isso que as melhores partes dos eventos são as conversas de corredor, as trocas de ideias na mesa do restaurante durante o almoço ou do bar durante a cerveja pós-evento (essa última costuma ser a opção mais divertida ;-).

E por falar em pessoas: estamos contratando aqui na Onyo! Se você é competente e tem experiência com desenvolvimento backend em Python ou frontend e já trabalha remotamente, então entre em contato consco agora mesmo!

Minha Palestra

Eu particularmente gostei bastante de ter feito essa palestra: não só porque achei que consegui me expressar bem, mas porque o tema é algo que curto bastante e porque o processo de fazer a palestra me gerou bastante aprendizado: durante o evento eu lancei a versão 0.1.0 da biblioteca rows, um projeto que já venho trabalhando há algum tempo e acabei dando um gás para lançar publicamente durante a palestra.

O pessoal da Silex Sistemas filmou minha palestra, que pode ser vista no YouTube (porém tivemos alguns problemas de sincronismo e nem todo o conteúdo está online -- quando corrigirem o vídeo eu atualizarei aqui).

Os slides estão disponíveis em um repositório no GitHub (ver slides, ver código) e em meu slideshare (que você pode ver logo abaixo). Dê uma olhada também nos exemplos que usei durante a palestra e nos exemplos da biblioteca.

Foi bem legal ter o feedback da galera depois da palestra -- muita gente curtiu a biblioteca e já tenho recebido contribuições. =)

Veja também os vídeos das outras palestras do UaiPython 2015.

Bilioteca rows

Se você precisa trabalhar/converter dados tabulares, independente do formato em que eles estejam, então rows foi feita pensando em você! Para começar a brincar, instale a versão disponível no PyPI:

pip install rows

Caso você use Debian sid o pacote já está no repositório main (e estará também no Ubuntu 16.04), daí é só rodar:

aptitude update && aptitude install rows

E para quem tem coração de ferro e já quer desfrutar das novas funcionalidades (que estarão na versão 0.2.0), basta rodar:

pip install git+https://github.com/turicas/rows.git

Além de uma biblioteca que você pode usar em seus programas Python, o pacote possui uma command-line interface que facilita ainda mais quando você quer apenas converter dados. Aprenda mais sobre a biblioteca rows em seu README e veja os exemplos de uso.

Pessoas

Como eu comentei: o importante [nos eventos] são as pessoas. As palestras conseguimos assistir depois, via Internet; o conteúdo das palestras conseguimos aprender depois (basta saber por quais palavras-chave procurar); os pães-de-queijo conseguimos comprar depois; reunir todas essas pessoas novamente talvez não seja tão fácil assim quanto as outras coisas que acontecem nos eventos. Inclusive, eu tenho costume de não ir às palestras justamente para tentar aproveitar o momento para conhecer as pessoas e reencontrar os já conhecidos.

E falando das pessoas, coisas legais que aconteceram lá:

Python Brasil

Aproveitando o assunto: caso você tenha interesse em Python sugiro foretemente participar da PythonBrasil: é o maior evento nacional sobre a linguagem! Eu estarei lá (vou anualmente desde 2009), porém dessa vez não submeti palestra: resolvi enviar proposta de um tutorial sobre captura de dados com Python (você pode me ajudar votando para que ele seja aceito no evento ;-) -- os tutoriais serão totalmente gratuitos.

Até novembro em São José dos Campos e happy hacking! o/

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.

segunda-feira, 3 de dezembro de 2012

Partiu Belém! Destino: V CONSEGI

Hoje embarquei para Belém/PA pois amanhã começa o V Congresso Internacional de Software Livre e Governo Eletrônico (CONSEGI), evento de software livre do Governo para o Governo, organizado e patrocinado por instituições públicas. O CONSEGI é um dos maiores eventos de software livre da América Latina: a edição desse ano já tem mais de 4.300 inscritos, que é mais ou menos a quantidade de inscritos da Latinoware. A primeira vez que fui no CONSEGI foi em 2010 (em Brasília) e nesse ano fui convidado novamente pelo Giuseppe Romagnoli.

Mas nem tudo são flores na vida de Álvaro Justen: apesar de ter chegado cedo no aeroporto, o nome que estava na passagem era de um tal de "Mr. Álvaro Turicas". Sim, muita gente acha que Turicas é meu sobrenome, mas não é: é só o meu nickname. A atendente da TAM me disse que "não é permitido nome artístico" e eu iria perder a passagem só porque meu nome não estava correto no bilhete. Eles queriam que eu comprasse uma nova passagem por mais de R$1.200,00, mesmo eu mostrando que o PDF do e-ticket foi para meu e-mail, emitido com os números da minha identidade e CPF e eu tinha como provar eu era esse tal de Turicas (era só mostrar meu Twitter no celular).

Bilhete do Mr. Turicas
Bilhete do Mr. Turicas

Felizmente consegui resolver o problema e cheguei em Belém sem precisar pagar nada a mais por isso e minhas atividades no CONSEGI serão:

Andre, Diego e eu trouxemos vários projetos que desenvolvemos juntos, incluindo a famosa Luminária RGB controlada por Wi-Fi, para demonstrar durante o showroom - a ideia é que os projetos fiquem expostos e a galera possa brincar e tirar dúvidas. Saiu até uma reportagem na INFO Online sobre isso!

Como é minha primeira vez em Belém (e primeira vez no Norte do Brasil), pretendo tirar alguns horários para fazer turismo por aqui, conhecer os pontos turísticos (vi fotos de belas paisagens) e a culinária da região - não vai dar pra aproveitar totalmente porque não gosto de peixe, mas com certeza levarei vários bombons de cupuaçu para Niterói! ;-)

sábado, 17 de novembro de 2012

Minhas atividades na PythonBrasil[8]

Para quem não sabe, nesse ano estou organizando a PythonBrasil[8] - evento que acontecerá de 21 a 24 de novembro (semana que vem!) no Rio de Janeiro - (juntamente com a Tatiana Al-Chueyr), mas não é por isso que algumas de minhas propostas de palestras foram aceitas ;-) O processo de seleção foi feito por votação (os inscritos no evento votaram nas palestras de interesse) e a organização do evento limitou em 2 palestras por palestrante, 1 tutorial por palestrante e 1 palestra no evento sobre um assunto em específico. Submeti 4 propostas de palestra e uma de tutorial . Tive duas palestras e um tutorial aprovados, sendo:

PythonBrasil[8]

Se você ainda não se inscreveu no evento, ainda dá tempo! Somente quem pagou terá a vaga garantida, então se você ainda não pagou sua inscrição, faça isso o quanto antes! Lembrando que não é necessário se inscrever no evento para fazer os tutoriais, basta pagar a inscrição no tutorial à parte: para quem já está inscrito no evento, basta se inscrever no tutorial pelo site e levar 1kg de alimento não perecível (exceto sal) por tutorial; para quem não quer se inscrever no evento (não sabe o que vai perder), o valor por tutorial é de R$ 35,00, com descontos progressivos (2 tutoriais = R$ 65,00, 3 tutoriais = R$ 90,00, 4 tutoriais = R$ 100,00).

Fiquei feliz (e um pouco transtornado, ao mesmo tempo) porque recebemos muitas propostas muito boas de palestras e tutoriais! Deu até pena não aprovar algumas, mas não tempos tempo infinito. O problema é escolher qual palestra não assistir durante o evento, pois teremos 4 palestras ocorrendo ao mesmo tempo! Serão, no total, 48 palestras de 30 minutos e 6 keynotes de 1h cada, além de 12 tutoriais de 4h.

Tudo o que voc� j� deveria saber sobre Unicode     PyPLN: processamento de linguagem natural distribuído     Hands-on: Python e Arduino (Álvaro Justen)

Das minhas atividades aprovadas, eu já ministrei essas duas palestras na Latinoware 2012 então, exceto por algumas atualizações/correções, serão bem parecidas (caso você tenha assistido lá); no tutorial levarei vários Arduinos pra galera brincar de controlá-los e fazer aquisição de dados utilizando Python. :-) Lembrando: os alunos devem levar seus próprios notebooks (e ter os pacotes pyserial e ipython já instalados).

Ah, e para quem não conhece o PyPLN: é um projeto de software livre (escrito em Python, obviamente) que estou desenvolvendo na Escola de Matemática Aplicada da FGV, com foco em processamento de linguagem natural distribuído. Juntos comigo no time de desenvolvimento estão Flávio Coelho, Renato Rocha Souza e Flávio Amieiro.

Se você vai comparecer ao evento, nos vemos semana que vem na PythonBrasil[8]! ;-)

sábado, 10 de novembro de 2012

Como fazer memes com Inkscape

Apesar de eu trabalhar com desenvolvimento de software, adoro brincar com alguns softwares de artes gráficas livres: os meus preferidos são o GIMP e Inkscape.

Logotipo GIMP     Logotipo Inkscape

Eu não me considero criativo, então acabo utilizando esses softwares mais para retoques, alinhamentos e coisas do tipo -- afinal, não sou designer. ;-)
Recentemente tive a ideia de usar um meme em uma palestra, pra descontrair um pouco. :-) Utilizei o Inkscape e, como as técnicas que utilizei são simples porém muito úteis (inclusive para outras aplicações), resolvi compartilhar o conhecimento -- daí criei o vídeo abaixo, um rápido screencast mostrando o processo (dica: veja em HD).
No vídeo abordo conceitos básicos do software como criação/visualização/sobreposição de camadas, alinhamento básico de objetos, criação de sombra, exportação para PNG e outros. Porém, todos superficialmente.

Esse vídeo foi útil para você? Espero que tenha gostado!
Em breve (principalmente depois que passar a PythonBrasil[8]) pretendo postar mais alguns vídeos voltados para divulgação do conhecimento, em especial sobre criação de vídeos utilizando software livre, em ambientes GNU/Linux. Aproveite para se inscrever no meu canal no YouTube!

quarta-feira, 24 de outubro de 2012

PythonBrasil[8]: aberta a votação das palestras

Como comentei no post sobre a Latinoware 2012, estou organizando a PythonBrasil[8], maior evento nacional de Python, que acontecerá no Rio de Janeiro, de 20 a 24 de novembro (falta um mês!).

Logotipo PythonBrasil[8]

Se você já desenvolve software em Python, o evento é obrigatório: é a reunião da comunidade brasileira, é a "festa da padroeira" dessa linguagem no Brasil; se você tem interesse em aprender sobre a linguagem, também é obrigatório: quer lugar melhor para encontrar excelentes pythonistas que no encontro nacional da comunidade? ;-) Além de grandes nomes nacionais, teremos também keynotes internacionais, como de praxe.
Além de tudo isso, o evento é uma ótima oportunidade para quem quer conhecer a cidade maravilhosa, suas praias, o Cristo Redentor e outras belezas daqui!

Rio de Janeiro

Se você pretende ir ao evento, faça sua inscrição agora e aproveite para votar nas palestras que quer assistir! A votação ficará aberta somente nessa semana e o resultado sairá no fim de semana. Aproveite também pois o novo valor (sem desconto) entrará em vigor em breve. Eu submeti quatro propostas de palestras - veja as descrições:

Nós recebemos um total de 108 propostas, porém apenas 54 serão selecionadas.

Caso você queira acompanhar mais sobre o evento, siga @PythonBrasil no Twitter e curta PythonBrasil8 no Facebook.

Nos vemos em novembro! ;-)

segunda-feira, 22 de outubro de 2012

Slides de minhas palestras na Latinoware 2012

Na semana passada estive mais uma vez na Latinoware! Comecei a ir no evento, que é um dos maiores de software livre do Brasil, em 2010 e não perco um ano mais. ;-)

Logo Latinoware 2012

Lá ministrei duas palestras e um mini-curso, seguem os slides:

PyPLN: Processamento de Linguagem Natural com Python

Slides da palestra PyPLN: Processamento de Linguagem Natural com Python

Python: Tudo o que você já deveria saber sobre Unicode

Slides da palestra Python: Tudo o que você já deveria saber sobre Unicode

Minicurso Arduino

Slides sobre Arduino

Se você ficou interessado na palestra Python: Tudo o que você já deveria saber sobre Unicode, aproveite a chance de assistir a um repeteco: nessa quinta-feira (25/10/2012) às 14h na sala 317 do edifício-sede da Fundação Getúlio Vargas (Praia de Botafogo, 190). A entrada é gratuita, fique à vontade para comparecer! Nota: não é permitido entrar de bermuda e chinelo.

Aproveitei a ida ao evento para visitar a Itaipu (em breve postarei um vídeo sobre), comprar um Samsung Galaxy SII no Paraguai, em Ciudad del Este e as guloseimas abaixo (aceitunas rellenas, dulce de leche, alfajores y queso rockford) em Puerto Iguazu, na Argentina:

Guloseimas que comprei na Argentina

O próximo evento é a PythonBrasil[8], que estou organizando. Será no Rio de Janeiro, de 23 a 24 de novembro - te vejo lá! Já fez sua inscrição?

sábado, 19 de maio de 2012

Porque você deve ir ao Fórum Internacional de Software Livre

Fui ao Fórum Internacional de Software Livre pela primeira vez em 2006 (foi o fisl7.0) e, apesar de eu já utilizar software livre na época (e até ter feito algumas palestras para divulgação do tema), foi um marco em minha vida. Minha visão sobre diversos assuntos mudou completamente, conheci várias empresas, pessoas e projetos muito interessantes. Isso também mudou o rumo da minha vida, de lá pra cá.

13º Fórum Internacional de Software Livre

Em 2007 infelizmente não pude ir, mas desde 2008 faço questão de estar lá todo ano. Os motivos? Vários: é o maior evento de software livre da América Latina, existem vários amigos que só encontro lá, muita gente influente da área e empresas de peso comparecem (lançando novos projetos, recrutando etc.), aprende-se muito e eu gosto pra caramba de Porto Alegre. :-)

Como todo ano eu vou e costumo chamar pessoas que nunca foram, resolvi fazer o vídeo abaixo - assim fica público na Internet e até pessoas que não me conhecem podem ouvir meus argumentos e ficar com vontade de ir. ;-)

E aí, você foi convencido? Nos vemos em Porto Alegre!