Too Cool for Internet Explorer

Quarta-feira, Setembro 01, 2010

Eventos e mais eventos sobre Arduino! \o/

Depois de ir a vários eventos sobre software livre no último mês (que ainda não tive a oportunidade de blogar sobre), participarei de mais 3 nessa semana - todos eles envolvendo Arduino. Vamos lá:

Semana de Eletrônica e Computação (UFRJ)

Participarei ministrando um workshop sobre o Arduino nessa quarta-feira (1 de setembro), às 13h. O evento terá outros tipos de atividades, inclusive uma palestra da Intelie (empresa onde trabalho) sobre Complex Event Processing (CEP).

A Semana de Eletrônica e Computação é um evento que tenho um carinho especial: foi quem inspirou a mim e a outros alunos da UFF a organizarmos a 1ª Semana de Telecomunicações da UFF. Veja a lista de todas as palestras da SE2010!

Arduino Hack and Beer (com maddog!)

Quinta-feira é dia de hackear com o Arduino, beber uma cerveja e conversar com o Jon "maddog" Hall em Niterói, na UFF. Isso mesmo: presença internacional do mundo do software livre, Arduino e cerveja juntos! \o/

maddog: hack and beer!

Dividiremos os participantes em 4 grupos e faremos projetos pequenos (porém funcionais); todo o código criado será disponibilizado usando licenças de software livre.

Infelizmente, por conta de infra-estrutura e gerenciamento das equipes, temos vagas limitadas (em torno de 20) - e elas estão bastante disputadas! Então, se você quer participar, envie agora um e-mail para mim confirmando sua presença (para alvarojusten [arroba] gmail [ponto] com). É cobrada uma taxa de R$15,00 de cada participante (pagar ao chegar no evento), afim de cobrir as despesas.

Arduino e Coding Dojo no Linux in Rio

Sexta-feira é a vez da baixada fluminense: palestrarei sobre Arduino e Coding Dojo no evento Linux in Rio, que será realizado no Hotel Mont Blanc, em Duque de Caxias.

O Linux in Rio contará com a presença internacional do Jon "maddog" Hall, além de outros nomes importantes na área (inclusive do mundo Python!). Veja a lista completa de palestras do Linux in Rio.

Depois dessa semana ficarei mais tranquilo com relação aos eventos e pretendo postar mais aqui sobre o que rolou em todos (desde o FISL). :-)

Você vai em algum desses eventos? Qual? Te espero lá!

Marcadores: , , , ,

Gostou? Então:

Quarta-feira, Agosto 18, 2010

Minhas apresentacões no CONSEGI

Estou em Brasília para o CONSEGI, o Congresso Internacional de Software Livre e Governo Eletrônico. O evento teve quase 5000 inscritos e hoje foi seu primeiro dia - vai até sexta.

CONSEGI 2010

Como era de se esperar, a galera do Rio de Janeiro está em peso aqui! São várias comunidades reunidas: PythOnRio, DojoRio, #horaextra, dentre outras. Está bombando! :-)

Um fato bastante interessante que vi acontecendo foi que o Governo fomentou a vinda de estudantes de escolas da região - esses estudantes já usam software livre em seus laboratórios, porém ainda não conhecem o ecossistema de software livre. Aqui eles estão conhecendo as comunidades, interagindo, aprendendo e apresentando suas experiências - hoje mesmo rolou um openspace em que Oscar Bacelar, eu e vários estudantes trocamos ideias sobre software livre, educação e sociedade. Os próximos dias prometem!

Amanhã palestrarei sobre Arduino na sala John von Neumann de 11h às 12h, depois pretendemos fazer um openspace onde a galera possa brincar e aprender mais sobre a plataforma. Mais a tarde, de 14h às 18h, darei uma oficina sobre web2py na sala BT-04. Na sexta-feira teremos um Coding Dojo às 12h na sala de desconferência!

Para mais detalhes sobre o que a galera do Rio vai aprontar aqui, veja o post que Jonh Edson fez no blog da PythOnRio. Se você não está por aqui, assita o CONSEGI ao vivo através do streaming do SERPRO. Porém, se você está na capital federal, vai palestrar ou pretende participar das atividades, comente!

Gostou? Então:

Terça-feira, Julho 20, 2010

Eu vou ao FISL, e você?

Bah, ao final da tarde de hoje partirei para Porto Alegre/RS, pois amanhã começa a 11ª edição do FISL - Fórum Internacional de Software Livre. O evento se estenderá até sábado, formando a maior festa de software livre da América Latina! \o/

11° FISL - Fórum Internacional de Software Livre, de 21 a 24 de julho de 2010, em Porto Alegre/RS

A galera do Rio estará em peso lá, com muitas palestras! Tive 4 propostas aceitas e minha primeira palestra será amanhã às 9h. Veja a lista de minhas atividades:

Veja toda a grade do FISL11.

Além disso, tentarei organizar um Coding Dojo e um openspace sobre Arduino. Obviamente, levarei o Turiquinhas versão 2 (meu carrinho controlado por Wi-Fi, feito com Arduino). Também me encontrarei lá com o Jon "maddog" Hall, presidente da Linux International, para trocar ideias sobre hack and beer, Arduino e outras coisas mais.

Para quem não vai, resta acompanhar o evento pelo Twitter, assistir às palestras ao vivo pela TV Software Livre ou ouvir a Rádio Software Livre.

Acompanhe o FISL11 pelo Twitter Acompanhe o FISL11 pela TV Software Livre Acompanhe o FISL11 pela Rádio Software Livre

Você vai ao FISL11? Nos encontramos lá!

Marcadores: , , , , ,

Gostou? Então:

Segunda-feira, Julho 05, 2010

Artigo sobre web2py na revista TI Digital de julho

É com prazer que anuncio que um artigo meu sobre o web2py foi publicado na edição desse mês da revista TI Digital. A revista começou a circular a partir de quinta-feira passada (1º de julho) e possui meu artigo em três páginas.

Revista TI Digital de julho de 2010 com artigo de Álvaro Justen sobre web2py

Em toda edição da revista o pessoal da Arteccom disponibiliza alguns artigos da revista para download em seu site, e nesse mês o meu foi um deles! Veja a página da edição de julho da revista TI Digital para mais detalhes. Também recomendo a compra da mesma, que possui 75 páginas e vários artigos de pessoas importantes da área, abordando diversas outras tecnologias voltadas para Web; custa R$7,90 e você encontra nas melhores bancas. :-)

Quem ler o artigo até o final vai perceber que coloquei um bônus (gratuito! :-D) para que os leitores interessados aprendam melhor sobre o framework - e se você está bastante interessado e quer aprender ainda mais, veja meu artigo sobre o curso de web2py que ministrarei no Rio de Janeiro.

Espero que vocês gostem e que meu trabalho lhe seja útil! Eu já comprei a minha TI Digital de julho, e você? Leu? O que achou? Comente!

Marcadores: , , , ,

Gostou? Então:

Segunda-feira, Junho 28, 2010

Curso de Python e web2py no Rio de Janeiro

Tempo Real Eventos Convidados pela Tempo Real Eventos, Bruno Cezar Rocha e eu ministraremos cursos sobre Python e web2py - eu ficarei responsável pelas turmas no Rio de Janeiro e ele pelas turmas em São Paulo.

A Linguagem - Python

Python - linguagem de promgração de altíssimo nível Python é uma linguagem de programação dinâmica de altíssimo nível, utilizada em larga escala por empresas como Google (que atualmente emprega o criador da linguagem), Dreamworks, Industrial Light & Magic, NASA, dentre muitas outras. No Brasil, é utilizada pela Locaweb, Globo.com, SERPRO, Interlegis (órgão vinculado ao Senado Federal), entre outras. Diversos softwares como GIMP, Inkscape e Blender utilizam Python para extensões e criação de plugins.

O Framework - web2py

web2py - framework para desenvolvimento de aplicações Web em Python O web2py é um framework para desenvolvimento Web escrito em Python, software livre e gratuito, que tem como um de seus principais objetivos agilidade e facilidade no desenvolvimento de aplicações Web seguras, baseadas em banco de dados.
Ele possibilita ao desenvolvedor pensar apenas na aplicação que está desenvolvendo (sem demandar configurações de linguagem e ferramentas), fazendo com que o desenvolvedor foque no problema que precisa resolver, e não em problemas relacionados à linguagem ou a alguma ferramenta. Possui integração com mais de 10 sistemas de banco de dados, e vários subssistemas, como: criação automática de formulários com validação, autenticação e autorização, gerador de códigos AJAX para melhor interação do usuário com a aplicação, upload seguro de arquivos, integração com vários padrões Web (XML, RSS etc.), dentre outros.

O Curso - Mão na Massa

Tutorial Mão na Massa - Tempo Real Eventos Os treinamentos acontecerão no estilo "tutorial mão na massa", onde cada aluno tem um computador para testar e treinar o que está sendo ensinado; o objetivo desses treinamentos é capacitação no desenvolvimento de aplicações Web utilizando Python e web2py a desenvolvedores que procuram uma ferramenta para desenvolvimento ágil, dinâmico, seguro e fácil de utilizar. O curso acontecerá em um sábado (assim que fecharmos a turma ou no máximo em 45 dias), o dia todo: de 9 às 17h. Caso exista interesse em treinamento in company, entre em contato comigo (alvaro [arroba] justen [ponto] eng [ponto] br).

O treinamento é dividido em dois módulos: Básico e Avançado. Para o módulo básico, é preciso ter conhecimento básico em HTML e lógica de programação (em qualquer linguagem) e para cursar o módulo avançado, é aconselhável que o interessado tenha participado do primeiro módulo, ou tenha conhecimentos equivalentes.

Os treinamentos possuirão apostila própria e durante eles será desenvolvida uma aplicação Web completa e funcional. Serão abordados vários temas com relação a desenvolvimento Web como MVC, sessões, autenticação e autorização, internacionalização, deploy, Google App Engine, dentre outros. Além disso, tudo será baseado em software livre: os computadores do laboratório terão Ubuntu 10.04.

O valor da inscrição em cada módulo é R$249,00 e, juntamente com o treinamento, cada aluno terá direito a:

  • Coffee Break (2)
  • Certificado de Participação em papel especial
  • Material Didático (apostila impressa, bloco de anotações e caneta)
Para mais informações e inscrições visite o site da Tempo Real Eventos:

Gostou da ementa dos cursos? Gostaria de que mais algum assunto fosse adicionado? Tem interesse em algum dos cursos? Comente!

Marcadores: , , , ,

Gostou? Então:

Quinta-feira, Junho 24, 2010

Porque eu sou um amigo do GNOME

GNOME (que é um acrônimo para GNU Network Object Model Environment) é um projeto de software livre filiado ao projeto GNU que tem como finalidade oferecer um ambiente de trabalho composto inteiramente por software livre - dando ênfase em usabilidade, acessibilidade e internacionalização. Ele é utilizado no Ubuntu e em muitas outras distribuições.

Foresight Linux rodando GNOME 2.20 - screenshot da Wikipédia
Foresight Linux rodando GNOME 2.20 - screenshot da Wikipédia

Há alguns dias atrás fiz uma pequena doação de US$25 para a GNOME Foundation; as doações ajudam a manter e melhorar o projeto - eles costumam fazer hackfests, que são eventos em que os desenvolvedores se reúnem para, juntos, implementarem/melhorarem alguma determinada funcionalidade do projeto - ano passado tiveram 6, e o próximo será sobre acessibilidade. O dinheiro também serve para contratar pessoas e pagar as contas. Recebi um mousepad e alguns adesivos, juntamente com uma carta agradecendo a minha doação:

Meus mousepad e adesivos do GNOME
Meus mousepad e adesivos do GNOME

E você, o que está esperando para contribuir e deixar a próxima versão (GNOME 3.0) melhor? Vários projetos de software livre são gratuitos e em boa parte das vezes os desenvolvedores não recebem dinheiro (diretamente) para desenvolvê-los, são voluntários. Se cada um fizer sua contribuição, daremos infraestrutura melhor para que esses voluntários consigam fazer um software melhor para nós todos - e no final todos saem ganhando! Seja um amigo do GNOME!

Gostou? Então:

Quarta-feira, Junho 02, 2010

Porque eu adoro o sistema de views do web2py

Vindo de mim, um elogio ao web2py pode parecer tendencioso, já que sou um dos desenvolvedores do framework. Porém uma coisa que me fascinou, mesmo antes de me tornar desenvolvedor, foi a implementação da camada de apresentação (views, do modelo MVC).

No web2py a camada de apresentação é parecida com código PHP: você utiliza a linguagem que precisar para apresentação do conteúdo (HTML, CSS, XML, JavaScript ou qualquer outra que desejar) e pode embutir código Python no meio. A grande sacada - que trás muita simplicidade e flexibilidade ao desenvolvedor - é exatamente o fato de podemos embutir código Python. Com isso, ganhamos inúmeras vantagens:

  • Você não precisa aprender a utilizar uma linguagem de templates nova: é Python - mesma linguagem em que você programa seus models e controllers!
  • Como o código da view pode ser transformado em um módulo Python, a execução da view fica muito mais rápida, pois o web2py a traduz para código Python puro e então o compila para bytecode;
  • Você não fica limitado a uma linguagem restrita (como são as linguagens criadas para a camada de apresentação) - você pode utilizar todo o poder que Python lhe proporciona sempre!
  • Você pode criar qualquer formato de saída para sua camada de apresentação, o que significa que não necessariamente a saída da sua view precisa ser escrita em alguma linguagem de marcação (HTML, XML etc.). Você pode, por exemplo, ter uma view que gera um arquivo JPEG, um texto em RTF, um documento em PDF, um arquivo em CSV e por aí vai;
  • A camada de apresentação está desacoplada das outras camadas, o que significa que uma única view pode servir a vários controllers ou um único controller pode ter como apresentação várias views diferentes em ocasiões diferentes.

Eu poderia citar vários outros exemplos (inclusive da ótima integração da camada de apresentação com as outras camadas do framework), mas as outras dicas ficarão diluídas nos próximos artigos. Porém, não poderia deixar esse artigo sem código. Como todo bom programador, vamos ao que interessa:

Exemplo 1 - View gerando HTML

Digamos que possuímos um sistema de inscrição em eventos e precisamos listar uma tabela com o nome do participante inscrito e assinalar se ele pagou ou não a inscrição. Dessa forma, possuímos um model (por exemplo, models/db.py) parecido com:

db.define_table('participante',
    Field('nome', 'string', length=250),
    # inclua outros campos aqui
    Field('pagou', 'boolean'),
)

Então precisamos de um controller que seleciona os nomes dos inscritos e o estado do pagamento. Vamos chamar esse controller de controllers/usuarios.py:

def tabela_de_pagamentos():
    inscritos = db().select(db.participante.nome, db.participante.pagou,
                            orderby=db.participante.nome)
    return {'nome_e_pagamento': inscritos}

Com isso, nossa view será executada em um ambiente onde a variável nome_e_pagamento existe e seu conteúdo é o que foi retornado pelo controller acima. Vamos então criar uma view que gera HTML para o controller acima. Coloque no arquivo views/usuarios/tabela_de_pagamentos.html:

{{if len(nome_e_pagamento) == 0:}}
Não temos usuários cadastrados! :-(
{{else:}}
<table>
  <tr>
    <td> Nome </td>
    <td> Pagou? </td>
  </tr>
{{
for usuario in nome_e_pagamento:
    if usuario.pagou:
        pagou = 'Sim'
    else:
        pagou = 'Não'
    pass
}}
  <tr>
    <td> {{=usuario.nome}} </td>
    <td> {{=pagou}} </td>
  </tr>
{{pass
pass}}

Tudo o que está entre {{...}} será executado como código Python. Além disso, o web2py inclui algumas novas palavras-chave para ajudar no processo de criação de views, são elas:

  • {{=expressão_Python}}: executa expressão_Python e imprime o resultado no local;
  • {{extend 'arquivo.html'}}: utiliza a view arquivo.html como base para essa view;
  • {{include}}: indica onde outras views que utilizam essa como base serão adicionadas.

Pode parecer estranho acima o uso da keyword pass. Elas estão lá por conta de uma definição no sistema de apresentação do web2py: por conta de espaços na camada de apresentação fazerem diferença, seria complicado em todos os casos o programador manter a endentação correta do código.
Para resolver esse problema o web2py então gera um novo código baseado em nossa view, ignorando a endentação que utilizamos - ele auto-endenta o código quando encontra if, for etc. Para voltar um nível, como a endentação na view é ignorada, precisamos utilizar a palavra reservada do Python pass. Note que essa palavra reservada faz parte da linguagem e sua função é apenas "passar" (não executa comando algum) - nesse caso ela serve como um sinal para o web2py voltar um nível na endentação.
Note que como a endentação é feita automaticamente, eu não precisaria ter endentado o código entre {{...}}. Porém nesse caso a endentação não atrapalha o código de retorno da minha view e por motivos de organização deixei o código endentado.

Para o exemplo acima, se acessarmos a URL http://localhost:8000/welcome/usuarios/tabela_de_pagamentos (ou http://localhost:8000/welcome/usuarios/tabela_de_pagamentos.html) teríamos como retorno a view acima processada, como nos dois exemplos abaixo, sem e com dados inseridos na tabela:

View do web2py mostrando tabela de pagamentos vazia
View do web2py mostrando tabela de pagamentos cheia

Nota: utilizei/modifiquei a aplicação welcome (que já vem com o web2py) para fazer esses exemplos.

Exemplo 2 - View gerando CSV

Para os mesmos model e controller acima poderíamos ter uma view que gera um arquivo CSV com os dados, em vez de HTML. Vamos então criar o arquivo views/usuarios/tabela_de_pagamentos.csv:

{{
import cStringIO
csv = cStringIO.StringIO()
nome_e_pagamento.export_to_csv_file(csv)
response.write(csv.getvalue())
csv.close()
}}

Não vou entrar em detalhes do código acima, mas para quem estranhou a presença do objeto response fica a explicação: o web2py, para aumentar a produtividade do desenvolvedor, leva a sério o conceito Don't Repeat Yourself e, por isso, ele mesmo importa automaticamente os objetos de sua API que precisamos utilizar (nesse caso, o objeto response).

Feito o código acima, ao entrarmos em http://localhost:8000/welcome/usuarios/tabela_de_pagamentos.csv será feito o download de um arquivo CSV. Abrindo, teremos:

Arquivo CSV gerado pela view do web2py sendo visto no OpenOffice.org

Como disse acima, poderíamos utilizar outras extensões nas views e gerar quaisquer tipos de arquivos que quisermos com código Python. Em uma aplicação que desenvolvi há alguns meses precisei criar views que gerassem PDF (para relatórios sob demanda) e tudo funcionou perfeitamente.
Espero que os exemplos acima tenham explicitado o poder e flexibilidade que esse sistema de apresentação possui. Dúvidas? Entre na lista brasileira de usuários web2py e perguntem-me lá!

Marcadores: , , , , ,

Gostou? Então: