28 setembro 2010

Minicurso Groovy & Grails

Olá!
Bem, ontem estive na Globalcode para ministrar um curso rápido de Groovy e Grails. A intenção foi apresentar os principais conceitos e alguns benefícios de se utilizar essas tecnologias para sua próxima aplicação que rodará na JVM. A interoperabilidade entre Java -> Groovy lhe permite usar as APIs que você já conhece, sem ter que se preocupar em migrar tudo.

O feedback foi super bacana! Pena que o tempo não foi suficiente para mostrar tudo!

Descrição do Minicurso:

O fato de existirem inúmeras linguagens que rodam na JVM já não é novidade nenhuma, principalmente com o sucesso de Scala e JRuby. Seguindo a linha das principais linguagens do mercado, Groovy apresenta-se como uma ótima alternativa para aqueles que querem tentar uma nova linguagem, mas ainda gostam na sintaxe Java. Ganhando popularidade nos últimos tempos, Groovy é uma linguagem dinâmica inspirada em Python, Ruby e Smalltalk que pode ampliar e muito a produtivade em seu dia-a-dia.

Quanto tempo você leva para fazer um site utilizando as principais ferramentas Java? Pois em Grails isso pode ser ainda mais rápido! Inspirado no framework Ruby on Rails, Grails tem ganhado popularidade entre as opções para desenvolvimento web devido ao seu alto grau de integração com a plataforma Java, e adicionando a isso conceitos como interceptors, tag libs, Groovy Servers Pages (GSP), além de uma grande variedade de plugins para facilitar ainda mais o desenvolvimento web.





18 julho 2010

Palestra Pycon Ireland 2010: Having fun with XMPP/jabber bots

Saudações!

Bem, ontem foi a minha apresentacao sobre xmpp e jabber no evento Pycon Ireland 2010.
Super bacana, varias pessoas na sala... e o feedback foi bom! Inclusive no segundo dia, Sprint day- alguns até estiveram testando o GTalkBot

Ainda essa semana integro o audio, mas ai estão os slides:




that's all...

06 julho 2010

GTalkBot - Jabber bot para GTalk network

Bem, no último post eu expliquei os conceitos mais básico para entender esse negócio de XMPP, xmppPy e jabber... pra facilitar a vida, eu criei uma API: GTalkBot, q esta disponivel no projeto botnet na minha conta do github:

http://github.com/victorhg/botnet


Faça o download do arquivo em:
gtalkbot.py@github

Como Utilizar


Usando python, basta vc extender a classe definir os methodos que serah expostos como comandos utilizando a notacao @botcommand. Segue um exemplo:


from gtalkbot import GTalkBot, botcommand

class MyBot(GTalkBot):

def __init__(self):
user = 'USER_ID@gmail.com'
pwd = 'passwd'
super(MyBot,self).__init__(user,pwd)

@botcommand
def hello(self, mess, args):
return "Hi! how can I help you?"



Para iniciar o bot basta executar o metodo run_server()


MyFirstGtalkBot().run_server()



Pronto! Agora, basta acessar seu bot pelo gtalk,pidgin, miranda e comecar a testar!


bom proveito!

O projeto está disponibilizado seguindo a WTF Public License... acho que entao vc ja sabe sobre o q pode fazer com o projeto...

12 junho 2010

Seu primeiro Jabber Bot em python

Saudações!

Então vamos lá, falar um pouco sobre o modelo Jabber, Xmpp e python. Resolvi escrever este tutorial, que tera 3 partes, para registrar meus estudos, e tb pq os exemplos que achei tentam sempre esconder a parte principal de criar um bot: handlers e acesso ao xmpp

Super rápida introdução a XMPP



Segundo os autores do protocolo, o XMPP é uma tecnologia aberta para comunicação em tempo real que permite a criação de vários tipos de aplicações, tais como instanting messaging, presença, chats multi-usuários, chamadas de voz e vídeo, colaboração, middleware, content syndication e qualquer transmissão de dados via XML. Talvez a definição mais curta possível seja: é um protocolo para a criação de middlewares orientado a mensagens. E canais de troca de mensagens existem em qualquer sistema distribuído, e acredite, XMPP pode ser usado em cada um deles, desde que, é claro, isso traga benefícios ao sistema ou ao desenvovimento



Para aprofundar um pouco mais o seu conhecimento, o Luis Cipriani (lccipriani), da Abril, escreveu uma introdução super bacana sobre o protocolo: Breve Introducao ao XMPP (vale a leitura, e da onde eu extrai o texto acima)

Para este primeiro exemplo, você nao precisa nem saber muito sobre o protocolo em si, já que as bibliotecas deixam tudo bastante transparente.

Jabber who?



Jabber é o nome de um dos mais famosos serviços de Mensagens instantâneas que existe. A coisa é tão grande, que "jabber" é praticamente um sinomimo de qualquer servico rodando em cima de XMPP (Google Talk, Live Journal Talk, Nimbuzz, Ovi são outros nodos famosos da rede).

O primeiro Bot



Bem, usando python, a coisa é super tranquila. Você vai precisar instalar uma implementação qqer do protocolo. Vamos usar o XMPPPy, cujo foco é ser uma fonte simples de criar scripts em cima do protocolo xmpp. O site oficial possui varios exemplos de bots e scripts para interagir com um serviço xmpp.


$> easy_install xmpp

Info sobre setuptools: python.org


Vou usar utilizar o GTalk como servidor XMPP, pra facilitar a vida.


import xmpp

jid = xmpp.protocol.JID('LOGIN_DO_BOT@gmail.com')
pwd = 'senha'
server = "talk.google.com"
port = 5222

conn = xmpp.Client(jid.getDomain(),debug=[])

conn.connect([server, port])

conn.auth(jid.getNode(), pwd)

conn.send(xmpp.protocol.Message("SEU_EMAIL@gmail.com", "hello world"))

conn.disconnect()



Importante saber que você vai precisar estar com o usuario BOT adicionado em sua lista de contatos (nos proximos posts vou mostrar como trabalhar com autorizacao de chat entre usuários).

As primeiras linhas do código sao apenas configuracoes basicas: servidor, porta, criacao de um objeto JID utilizando o email e senha para se autenticar no serviço.

Logo após, basta se conectar ao servidor, criando uma instancia de xmpp.Client e passando o token de authenticacao. Para criar uma mensagem, basta instanciar a classe xmpp.protocol.Message com os parametros destino e mensagem

Executando o codigo acima, vc deve recebeu uma mensagem "Hello World" no seu gtalk!

Yay... legal, mas ainda nao é um bot, já que o código nao interage com o usuário. Para que isso aconteça, vamos adicionar um pouco de amor no código acima. Para tal, precisamos:

  • Após conectar, avisar as pessoas na lista de contatos do bot de que ele está online

  • Definir um metodo de callback para quando as messagens chegarem

  • Manter o processo rodando aguardando mensagens



E aqui está o resultado final:


import xmpp

jid = xmpp.protocol.JID('pycon.bot@gmail.com')
pwd = 'pycon123'
server = "talk.google.com"
port = 5222

conn = xmpp.Client(jid.getDomain(),debug=[])
conn.connect([server, port])
conn.auth(jid.getNode(), pwd)



#avisando contatos de disponibilidade
conn.sendInitPresence()


def callback_message(conn, mess):
message_body = mess.getBody()
if not message_body:
return
reply_message = "You typed: "+message_body
conn.send(xmpp.protocol.Message(mess.getFrom(), reply_message))

conn.RegisterHandler( 'message', callback_message)

#main loop
def idle_proc( ):
"""This function will be called in the main loop."""
pass

while True:
try:
conn.Process(1)
idle_proc()
except KeyboardInterrupt:
print 'bot stopped by user request. shutting down.'
conn.disconnect()
break
except xmpp.protocol.InternalServerError:
print "Server error at Google, trying again"





Bem, ai esta. O código acima vai receber uma mensagem pelo gtalk e retornar a mesma mensagem para o usuário.

Espero que seja útil.

Os códigos deste post estao em: http://github.com/victorhg/botnet/tree/master/botnet/blog


cheers...
agora é hora de Guinness aqui na irlanda... fui!

23 maio 2010

Submissao para PyConf Ireland

Saudações!!

Segue abaixo a descrição da palestra que enviei esta semana para a PyCon Ireland.

Mesmo que nao seja aceita (fingers crossed), vou tentar escrever por aki o que tenho feito com bots,


Title: Having fun with Xmpp Bots

Type: Tutorial / Presentation

Abstract:
"The Extensible Messaging and Presence Protocol (XMPP), is a set of
xml technologies for presence and real-time created by the Jabber
community in 1999" (from http://xmpp.org/)
Imagine the possibility of creating a real time channel, capable of
notifying and interact, using a simple instant messaging application.
Integrating such tool on your application could bring real value to
you and customers.
The main focus of this presentation is to show an easy way to create
and use computer bots through the python language, suggesting useful
applications, and bring together some advanced considerations about
security and natural language processing.

Learn how to create a bot using jabberBot (5minutes tutorial):
- basics
- testing
- live example

How to make it useful?
- Real time notification system
- Integration with Yahoo, Exchange APIs
- System administration

Getting serious
- Alternative libraries
- Language Processing

Topics:
* JabberBot, Google App Engine, Xmppy, Twisted
* XMPP
* System Admin

Suggested length:
30 minutes

Level:
Beginner



Como acompanhar?

Já iniciei o projeto no Github (http://github.com/victorhg/botnet), e a intenção é seguir evoluindo o botnet até a apresentação,junto com outros exemplos usando google app engine e twisted...

stay tuned...

09 março 2010

Ricardo Semler - Precisamos de Gerentes?

Vou levantar a lebre aqui :

Já ouvi várias pessoas comentando contra o auto-gerenciamento. Até mesmo durante uma palestra no Scrum Gathering Brasil falando sobre como o PMI está próximo do Scrum, Ricardo Vargas ficou de calças curtas após uma pergunta simples do Bernabó: estaria o PMI preparado para um mundo sem gerentes? Foi muito interessante ver o palestrante se contradizer completamente ao afirmar que não acreditava em auto gerenciamento, deixando claro que as pessoas precisam ser "observadas", "cobradas" e vigiadas... vai entender neh.

Você já ouviu falar no outro Ricardo, o Semler? Pois deveria! Impressionante como o cara é conhecido fora do Brasil! Bem, pra encurtar a história, ele "gerencia" uma empresa com projetos que chegam a 3 bilhões de dólares. Coloquei entre aspas o termo gerencia pois inclusive no video abaixo ele comenta que não toma decisões na própria empresa, pois quase tudo é decidido pelas equipes (que são auto gerenciadas e formadas de forma ad hoc)... difícil de acreditar? Vou colocar a tradução de alguns trechos do video:

Nós mandamos nossos filhos para qualquer lugar do mundo para morrer pela Democracia... Mas eu nunca vi um ambiente de trabalho democrático. Estão ela é muito importante para nossa vida, menos para o lugar em que passamos 60% de nosso tempo. Deve haver algo de errado nisso tudo.

Como é verdadeira essa afirmaçao! É como se toda a nossa evolução como seres humanos(e por que não, sociedades), fosse jogada fora todas as vezes que batemos ponto...

Todas as nossas reuniões são volutárias. Por que se começar a ficar chato, vá embora... Se não sobrar ninguém, será mesmo que precisamos dela?

Seria esta uma solução à desculpa de vários gerentes? "Não consigo mais trabalhar, passo o dia em reuniões!"... pense nisso!

O processo típico para contratações e seleções em empresas é basicamente um processo de paquera na internet. Você diz que sua empresa é o Brad Pitt e ela diz que é a Angelina Jolie. Vocês se encontram em um bar... ficam juntos em dois rápidos encontram e decidem se casar esperando que dê certo...

[Ao invés disso], nós pegamos os candidatos qualificados, que se encaixam na vaga, e pedimos a eles a virem juntos. Então encontramos qualquer um que queira estar envolvido entrevistando estas pessoas. Isto pode levar horas. Então os entrevistadores anotam as duas pessoas que eles gostariam que ficassem. Os dois que pontuarem melhor voltam para passar um dia inteiro por aqui e conversar com qualquer um que queiram... O resultado é um turnover de menos de 2% ao ano.

Fico feliz em saber que várias empresas legais no Brasil já fazem isso! Claro que turnover não é a principal preocupação de várias empresas (afinal, pessoas são substituíveis, não é mesmo?!)... mas lembre-se você também de que Empresas também são substituíveis! Ainda mais na área de software...

Sem mais enrolações... ai vai o video (sim, ja deve ser conhecido de várias pessoas!):



Fonte: MIT World

08 março 2010

Anti patterns para Gerentes

anti pattern gerencimanto
Tenho lido vários posts sobre as "boas práticas" para gerentes de software (O @akitaonrails vive escrevendo sobre isso [1, 2], já li um livro inteiro a respeito e até mesmo na China se fala disso!).

Mas antes de falar sobre boas práticas, gostaria de ressaltar alguns anti padrões que podemos observar (alguns já vivenciei... outros tenho a sorte de não ter visto ainda):

O Gerente desmotivador


Conhece profundamente a arte de desconsiderar qualquer idéia que seja diferente de sua própria percepção do mundo. Pronto para contradizer qualquer sugestão, assumindo normalmente o papel de "Desculpator Master" (sempre existe algum problema para ser resolvido em que a sugestão não se aplica). Normalmente este anti padrão vem acompanhado de outros, principalmente o "Muita boca e pouco ouvido". As implicações de tal comportamento estão intimamente ligadas ao descaso dos funcionários e à falta de credibilidade dos gerente junto ao grupo.

O Gerente muita boca e pouco ouvido


Muito influenciado pelo background do gerente que, inconscientemente ou não, acredita que já sabe todas as soluções para os problemas da empresa, e por isso deve estar numa posição superior aos demais. O comportamento padrão é: falar muito, normalmente repetindo-se a todo instante, como se estivesse falando para si mesmo um discurso, justificando o próprio raciocínio, distante dos demais. Dificilmente aborda funcionários para um conversa franca, pedindo opinião e sugestões sobre problemas. Os funcionários tendem a evitar a conversa, já que não existe nenhuma abertura para expor idéias e opiniões.
gerente alpinista control freak

O Gerente Alpinista


A escória dos gerentes, alcançando a glória através do resultado dos outros e assumindo todos os louros para sí em detrimento daqueles que realmente apresentam resultados. O gerente possui uma eloquência envolvente e por vários momentos lhe fará duvidar de que esteja agindo de má fé. Atua intimamente ligado às esferas superiores de gerência, apresentando idéias roubadas de terceiros e atribuindo a si mesmo a "capacidade" e "liderança" para alcançar resultados. Tem vida curta nesta posição pois facilmente arrumará inimigos, e é por isso que está sempre disposto a novos desafios, novos projetos. É comum também que este gerente não assuma responsabilidade quando erros ocorrem.

O Gerente Control Freak


Este é um padrão de trabalho para profissionais que não confiam nas pessoas com quem trabalhar para realizar uma tarefa. Estão sempre à frente de todas as decisões, inclusive as mais simples, pois acreditam que os demais não são capazes de fazer nada sem que estejam supervisionados. O comportamento padrão é o autoritarismo. Funcionários podem descrever sentimentos de repulsa ou indiferença e já que não lhes é dado poder de decisão,, erros são comuns devido à falta de zelo pelas próprias atividades.

O Gerente detalhista


Gerentes nesta categoria pensam que todos os detalhes dos resultados apresentados por seus subordinados devem ser escrutinados e dissecados dos pés à cabeça. Sentindo que sua autoridade será menosprezada se as pessoas não apresentarem todos os problemas nos mínimos detalhes (até as coisas mais estúpidas). Entre os comportamentos comuns existe sempre um "checklist sobre como resolver o problema" seguido de pouca preocupação com os resultados.


Sugestões sobre mais anti padrões?

07 março 2010

Você tem orgulho do seu Código?

No mesmo clima do último post, me esqueci de disponibilizar os slides da minha última palestra no Brasil, feita em Floripa no evento Carvana GuJavaSC 09. Que foi super divertido, com uma demonstração do uso de asterisk+java pelo Ricardo Limonta.

Alguns disseram que este foi um momento completamente pessoal meu (epifânico, catárzico, auto revelador), com a minha visão sobre trabalho, orgulho e melhoria contínua. Mas a intenção principal estava em descrever literalmente o significado de ter (ou não) orgulho do próprio código, e como utilizar a busca pelo aperfeiçoamento profissional para mudar o próprio indivíduo.

Gostaria de apresentar novamente estes slides (talvez um screencast...)



De volta ao Trabalho!


Salve!

Vários meses desde o meu último post, resolvi voltar a escrever neste blog (incentivado pelo Ismael)... Para aqueles que não sabem, já não moro mais em Florianópolis (local onde estive nos últimos 10 anos trabalhando, bebendo e escrevendo).

Desde Fevereiro estou morando na Irlanda, terra dos Leprechauns, pure pot still whiskey e da cerveja Guinness - que por aqui é deliciosa, e não tem gosto de café requentado como no Brasil. So far, so good - a cidade de Dublin (minha atual moradia) é super ativa e a cerveja é sempre boa! No momento estou buscando oportunidades de trabalho (e com boas perspectivas).


Minha principal motivação motiva de me mudar para Dublin foi a oportunidade de ter uma experiência fora do Brasil trabalhando como desenvolvedor de software (já que estava completamente frustrado com minhas experiências de trabalho no sul do Brasil). Como não sou uma pessoa de desistir facilmente das próprias crenças e valores, deixei meu antigo trabalho na Audaces e vim para Dublin fazer uma especialização em Gestão e Marketing na Abbey College

E aqui estamos! Pretendo escrever um pouco mais sobre o que venho estudando nos últimos tempos:

Precisamos, ou não, de gerenciamento? Estamos prontos para o auto gerenciamento?

Começando com a descrição das raízes do gerenciamento, até modelos mais maduros de gestão (que o @alegomes consagrou chamando de Manifesto 2.0). Para os que me conhecem do movimento Ágil brasileiro, não se assustem... Agile é apenas o começo.

Espero que gostem...