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]! ;-)