domingo, 28 de setembro de 2008

Twitando via Skype

Bem pessoal, apesar da utilidade deste projeto ser contestável, creio que é um bom momento para testarmos alguns conceitos.

Afinal de contas, do que estamos falando? Trata-se de um bot que permite fazer uma ponte entre o Skype e o Twitter, dando ao usuário a capacidade de "postar" twits e receber atualizações pelo Skype.

Assim como o Skype, o Twitter também tem suas APIs publicadas (pagina oficial da Twitter API), com boa documentação e alguns exemplos.

Então, para começarmos a brincar, do que nos vamos precisar mesmo?
  • Skype
  • Wrapper Java para Skype (Skype4Java)
  • Wrapper Java para Twitter (jtwitter)
  • JSDK 6+ (Obviamente)
  • Conhecimento prévio da plataforma Java (J2SE,J2EE, etc...)
  • Não é compulsório, mas recomendo a leitura de meu post anterior.
Dentre os várias disponíveis, escolhi o Wrapper jtwitter por sua simplicidade e por não requerer muitos componentes adicionais para ser utilizado.

A grosso modo o negocio funciona da seguinte maneira:




















Toda a sua comunicação ("Skype Cliente") com o Twitter passará por um intermediário ("Skype Servidor"). Ou seja, você (ABC) enviará seus status para um contato especial (XKY) e receberá os "replies" e "direct mensagens" atravez de seu Skype (ABC), originadas deste contato (XKY).

Disponibilizei para download um programa exemplo. Este encontra-se em um estágio "pré-beta", bastante cru, com redundâncias, construções equivocadas e talvez com alguns bugs. Sacrifiquei um pouco as melhores práticas em nome da simplicidade.

Por outro lado, utilizei algumas técnicas interessantes que podem auxiliar aos não iniciados em linguagens orientadas a objeto a entenderem alguns conceitos, como por exemplo, múltiplas linhas de execução (multithreading).


Entendendo o Exemplo


Não vou dissecar todo o programa exemplo, irei comentar somente alguns trechos do código que considero mais relevantes.

No ato da instanciação da classe Twitter, é feita a autenticação no Twitter (via método construtor):
Twitter twitter = new Twitter(sUserName,sPassword);
Este trecho de código é útil para gerar um delay (não vamos sobrecarregar mais ainda o já sobrecarregado Twitter!):
TimeUnit.SECONDS.sleep(iTempo);

O código abaixo serve para obter seu ultimo Status no Twitter:
sStatus = twitter.getStatus(sUserName).text;

Da mesma forma, o trecho abaixo serve para pegar seus "replies" e "direct messages":
lDirect.addAll(twitter.getRecentDirectMessages());
lReplies.addAll(twitter.getReplies());

Na outra thread (classe SkypeStatus) temos um trecho de código um pouco mais complexo:
Skype.addChatMessageListener(new ChatMessageAdapter() {
public void chatMessageReceived(ChatMessage received) throws SkypeException {
String sMsg = "";
Twitter twitter = new Twitter(sUserName,sPassword);

if (received.getType().equals(ChatMessage.Type.SAID)) {
received.getSender().send("Esta mensagem esta sendo Twitada!");
sMsg = received.getContent().toString();
twitter.updateStatus(sMsg);
}
}
});
In few words, este treco ai em cima, adiciona um Listener (grosseiramente traduzido por "escutador"). O dever do Listener é ficar aguardando por requisições do Skype. Neste caso o Listener espera por um "evento" do tipo SAID (o recebimento de uma mensagem de texto).

Como dito antes, talvez não seja fácil encontrar uma aplicação para esta solução. Talvez utiliza-la como uma ponte entre um device que possua um cliente Skype, mas não uma boa interface com o Twitter, ou então Twittar uma "conferencia via Skype". Fica à critério de cada um.

Bem pessoal é isto. Antes que alguém erga as bandeiras da segurança, performance, etc... Lembrem-se que estamos falando de uma prova de conceito com fins puramente didáticos, e não de um programa pronto para produção. Torna-lo melhor fica a cargo de cada um! Aguardo sugestões!

Abraços!

Download do código fonte completo aqui

quinta-feira, 25 de setembro de 2008

Skype Wrappers

Depois de tanto tempo parado parece que recuperei o gás... Não vou cantar vitória antes do tempo, mas creio que desta vez consigo de fato, "manter" este Blog e transforma-lo em algo realmente decente e digno de ser visitado. Bem meninos e meninas, queridos e queridas, a pauta deste post envolve nada mais nada menos que o grande Skype e seus "wrappers" adestrados!

O Skype[bb] tem se mostrado uma ferramenta corporativa eficiente, não só pelos seus méritos técnicos, mas por um aspecto "social": O Skype não encontra-se tão prostituído, sodomizado, esculhambado, como o seu concorrente mais popular, preferido de dez entre dez miguxos. Normalmente a garotada não vê muita graça no Skype... Não tem "uinquis" (sic), não da para instalar (facilmente) emoticons extras, etc.

E falando em ferramentas , por que não integrar o Skype as outras ferramentas empresariais disponíveis? Ótimo!! Mas como eu faço isso "seu Anapropegua"? Simples!! Basta utilizar os Wrappers!!

Wrapper (algo como "empacotador" ou "envelopador" em uma tradução livre) pode ser entendido como um adaptador, algo que faz a ponte entre duas soluções aparentemente incompatíveis.

Os pré-requisitos básicos para implementação desta solução são:
  • Skype
  • Container JSP/Servlets (Tomcat)
  • Wrapper Java para Skype (Skype4Java)
  • JSDK 6+ (Obviamente)
  • Conhecimento prévio da plataforma Java (J2SE,J2EE, etc...)
  • Café[bb] (também óbvio)
  • Paciência
Agora segurem-se em seus assentos!! Para demonstrar os porquês desta implementação envolvendo Java e Skype, vou ser forçado a tirar a UML da manga!! Mas calma! Não vai ser nada muito complexo... Algo trivial... Sem diagramas de estado, etc... Só o básico... Let's go!!

Projeto: Integração do Skype com um software de chamados técnicos

Requisitos

Devo integrar o Skype com um software de gerenciamento de "chamados" (uma espécie de CRM interno), para que, sendo aberta uma nova solicitação, uma mensagem deverá ser encaminhada ao responsável através do Skype. Não utilizaremos voz por hora (em nome da simplicidade), e obviamente me concentrarei na "parte Skype" da coisa, abstraindo todo o resto do sistema.

Caso de Uso

Basicamente o usuário deve ter as capacidades de abrir, alterar, excluir e acompanhar seus chamados.


















Modelo do Domínio de Classes


Este não é um diagrama de classes efetivo, notem que ele é mais abstrato, mais próximo do negócio do que da implementação em si. A partir deste, você pode derivar seu modelo de classes, se preocupando mais com os detalhes do desenvolvimento.











Let's Start Coding!


O trecho de código abaixo é muito simples, e compreensível até para aqueles que não tem muita intimidade com a linguagem Java.
import com.skype.Skype;
import java.sql.*;

...

ResultSet rs;

...

String sContato = rs.getString("CONTATOSKYPE"); // Nome do destinatario de mensagem
String sMensagem = rs.getString("MENSAGEM"); // Mensagem em si
...

Skype.chat(sContato).send(sMensagem);

Atenção: O pacote java.sql não é necessário, está presente com a finalidade de ilustrar o uso em um sistema real.

O método "chat" é estático, não sendo necessário instanciar a classe "Skype" para invoca-lo.

Só isso?

Lembrando que o Skype deve ser previamente instalado e configurado no servidor.

Quando o programa for executado pela primeira vez, o Skype deve pedir confirmação em uma janela semelhante a esta:


















Voilà!!


Existem ainda Wrappers para Python e WSH, tanto para Windows como Linux (no caso do WSH, só para a plataforma Microsoft, obviamente).

Bem pessoal, é isto. A Partir deste ponto vocês poderão construir muitas coisas interessantes, basta se aprofundar na documentação da API (RTFM!!). As possibilidades são muitas, usem a criatividade!

Abraços!!

Mês (Geek) das Crianças Meio Bit

O pessoal do Blog Meio Bit está promovendo uma bela iniciativa de premiar uma entre três instituição que trabalham com crianças com um Nintendo Wii[bb], certamente estas crianças terão um 12 de Outubro muito mais feliz!

Eu escolhi a minha, desejo toda sorte a "Casa Amor Real"









Para saber mais, leiam este post no Meio Bit.

O que vem por ai: Projeto Open Source


Há algum tempo eu vinha maturando um software[bb], que segundo minhas intenções originais, seria um produto comercial. Trata-se de um sistema de gerenciamento de impressões que se baseia em um serviço cliente (Windows) e uma aplicação de gerenciamento (PHP + MySQL).

Vi que era muito complicado mantê-lo sozinho, e não poderia dedicar-me mais sem sacrificar o meu emprego (que é o que efetivamente coloca comida na panela).

Então decidi que seria mais interessante abrir o seu código a comunidade e disponibiliza-lo sobe licença GPL.

Características:
  • [Serviço] Escrito em C (compilado com o GCC no MingW)
  • [Administrador] Feito em PHP (foi utilizada uma bela abordagem OO no desenvolvimento) com Banco de Dados MySql
  • Fácil instalação
  • Low footprint
  • etc...
Alerto aos mais afoitos que farei isso de forma paulatina; Terei que limpar, modularizar e documentar melhor o código, etc...

Bem, quem viver verá

segunda-feira, 22 de setembro de 2008

Mudança de Hábito


Por conta de algumas ideias que rondam meus pensamentos, resolvi não escrever um artigo técnico, e sim iniciar uma discussão sobre algo que considero importante para qualquer um... Os nossos objetivos profissionais.

Hoje me peguei meditando a respeito de minha carreira e os rumos que ela tem (ou não) tomado. Ponderando sobre "as dores e as delicias" de ser um Anapropegua, pairou sobre minha cabeça um nevoeiro que já encobriu algumas pessoas com quem trabalhei e cooperei... A possibilidade de mudar "de ramo".

Muitos profissionais, em algum momento da vida, pensam em mudar de atividade, alguns de fato "fazem a passagem", outros preferem permanecer atracados ao cais onde acham segurança.

Tenho observado ao longo dos anos um certo "padrão migratório" entre os profissionais de T.I. (principalmente entre os Anapropeguas). Não uma mudança vertical, como a de técnico para gerente, mas uma mudança horizontal! De {Analista,Programador,Sysadmin,etc...} para advogado! O que leva a isso? Isto se deve aos não tão atrativos salários? Será que existe uma ânsia patológica em ser conhecido por "doutor fulano"? Será que eles enxergam no direito uma forma de "se dar bem"? Ou é algo realmente sincero?

Bem vamos aos pontos aqui levantados:

Os nem sempre altos salários

Os rendimentos de um Analista de Sistemas não podem de fato ser chamados de gordos, aqui, em terras alencarinas os vencimentos de um Analista Senior, lotado em uma grande empresa, giram em torno de 3k a 5k, enquanto alguém em inicio de carreira embolsa mensalmente 1,5k. Não dá para emoldurar o contra-cheque e pendurar na parede da sala, mas, por outro lado, estes proventos estão bem acima da média nacional. De fato, como advogado é possível bater estas metas facilmente.

A ânsia patológica em ser conhecido por "doutor fulano"

Realmente este é um tratamento raramente dirigido à um "doutor" em informática. Mesmo um gerente de T.I é visto como um "menino dos computadores que subiu na vida", e nunca como o "Doutor Fulano".
Resumindo: Se você é pretencioso o suficiente para almejar ser reconhecido como uma "autoridade" ou ser tratado por "Dr. Fulano", esta não é sua profissão.

Enxergam no direito uma forma de "se dar bem"

É triste admitir... Mas os incompetentes e os preguiçosos abundam entre meus pares profissionais!!
Pode parecer uma afirmação drástica, mas reflete a mais pura verdade! Gente que quer exercer a profissão e anela ter sucesso, mas não está disposto a aprender nada, a ler uma revista especializada, a comprar um livro técnico... "Ruby?? Para que eu me viro muito bem com o VB!", "Um novo Framework?? Para que? O que eu utilizo funciona muito bem!!", "Open Source?? Não acredito nisso!!", e por ai vai...

Sem falar na mais pura incompetência... Existem pessoas que tem preguiça de pensar... Estas nunca se tornarão bons analistas (nem bons advogados)!!

Para se tornar um Analista Ninja, conhecedor da técnica fatal dos nove cortes, são exigidas algumas habilidades específicas: montanhas de conceitos, tecnologias, linguagens, etc...

A sensação de estar "correndo atrás do próprio rabo" é constante. Creio que por conta disto muitos desistem, e procuram uma atividade, que segundo uma crença comum e equivocada, pode oferecer uma chance de "se dar bem sem muito esforço" (atenção!! Não estou afirmando que é fácil se tornar um bom advogado. Leia melhor antes de me processar!!).

Uma escolha sincera

Bem, quanto a esta... Se a opção pela mudança for realmente honesta, de repente o sujeito se vê com dez anos de experiência nas costas e insatisfeito com isto... Só podemos desejar felicidades e sucesso nesta nova empreitada!

Com isso concluo:
  1. Um analista preguiçoso nunca será um advogado ativo.
  2. Um analista burro nunca será um advogado inteligente.
  3. Um analista vaidoso com certeza será o mais vaidoso dos advogados!

Eu creio que a maior consideração a ser feita não é a do impacto destas mudanças na vidas das pessoas como indivíduos, e sim como isso afeta a sociedade como todo. Será que as universidades estão fornecendo profissionais sérios e capacitados ou estão inundando o mercado com aproveitadores obstinados?

Bem pessoal, o debate foi lançado...

Paz!

Upadate:

Bem pessoal (quem? quem?), como este post foi escrito meio as pressas, durante minha hora de almoço, sua tecitura não ficou muito firme. Dai senti a necessidade de, por meio de um exemplo prático, jogar uma luz sobre o motivo da minha preocupação com a "migração" citada no texto.

Na minha opinião, o que acontece com a profissão de advogado hoje, é a mesma coisa que acontecia com o magistério em um passado não muito distante. Explico:
  1. Alguém concluía um curso superior, mas por força de um mercado restrito ou qualquer coisa parecida, não consegue uma colocação de acordo com sua formação, dai voltavam-se para o ensino.
  2. Por diversos fatores alheios a sua vontade, uma determinada pessoa não conseguia a aprovação no vestibular para o curso que desejava. Isto levava esta (muitas vezes movida por pressão da família, etc...) a tentar um curso menos concorrido. Invariavelmente era levada a apostar suas fichas nos cursos de história, português, etc...
As pessoas citadas nos dois casos acima não possuem a mínima vocação nem interesse pelo nobre oficio de lecionar, abraçavam a profissão por "motivos de força maior".

Hoje, por conta da grande oferta de cursos de direito , ficou muito mais fácil (mesmo com o temido exame da OAB) e barato tornar-se advogado. Muitas pessoas sem a mínima vocação e com pouco ou nenhum interesse pelo direito vêem nele (como dito antes) "uma forma de se dar bem". Isso gera uma massa de profissionais frustrados, sem o mínimo desvelo pela carreira que escolheu seguir.

Nos vimos o que isso causou aos professores, muitos vêem a profissão como um fardo, não tem o mínimo interesse em ler algum material que não seja o estritamente necessário as aulas, não vibram com os êxitos obtidos por seus alunos, muito menos ficam angustiados com seus fracassos, são meras máquinas em um sistema de ensino fordista, que não valoriza o indivíduo e opera em favor de um mínimo denominador comum. Sei que o peso da culpa do fracasso de nosso sistema de ensino não está somente sobre o malogro dos professores, mas este oferece uma grande influencia.

Bem, espero ter sido mais claro desta vez... Agradeceria, sinceramente, que alguém expusesse uma opinião contrária...

Abraços!

sábado, 20 de setembro de 2008

Voltando... Será?

Aloha!! Quem acompanha este Blog (quem? quem?) sabe que à muito tempo venho prometendo um artigo mais prático sobre o Android... Bem, a verdade é que eu "discurti" um pouco do Android (ok, ok, admito, eu cai no Buzz), e por hora não tenho animo para falar dele... Estou pensando em outros trecos aqui que ando pesquisando, e em breve deveremos ter algo por aqui...

Paz!