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!

terça-feira, 29 de julho de 2008

TODO.TXT: BirdsEye.js


Não me considero uma das pessoas mais organizadas do mundo, tenho uma forte tendência a esquecer das coisas, por conta disto procuro me cercar de ferramentas, processos e métodos que me ajudem a ser mais produtivo. Quando ouvi falar pela primeira vez em GTD ( Getting ThingsDone, algo como "Faça a Coisa Acontecer"), logo comecei a buscar ferramentas (softwares) que me auxiliasse a adotar esta metodologia.

Testei vários softwares, dentre eles os notáveis Google Notebook e Google Agenda, mas quando topei com solução TODO.TXT da Gina Trapani (Editora do Lifehacker) foi paixão a primeira vista!

Para utilizar os scripts que são a alma da solução implementada pela senhorita Trapani, ou você é um feliz usuário de uma LinuxBox autentica, ou você deve utilizar algum software que tente "emular" o shell do Linux. Eu já utilizava o MingW, mas para que tudo funcionasse corretamente precisei instalar o Cygwin, baixei também o excelente script (escrito em Python) BirdsEye.py, que provê um relatório sintético muito interessante, e finalmente, para tornar tudo realmente útil, instalei o Samurize para que as informações ficassem constantemente em meu desktop.

Eu realmente gosto do Samurize, é uma ferramenta muito poderosa, mas algumas coisas nele me incomodavam: Os sensores ficavam em locais inadequados quando a resolução era alterada (utilizo um notebook com doking station, isto é uma constante para mim), o plugin RSS não funciona adequadamente com o proxy da empresa onde trabalho, se mal configurado ele pode ser um grande consumidor de CPU e memória e inconscientemente parecia a mim uma solução "pouco natural", etc...

Para colocar o todo.txt básico na tela, eu poderia utilizar o Active Desktop (recurso nativo do Windows que permite colocar conteúdo dinâmico "web" no desktop), mas eu definitivamente não queria perder o relatório BirdsEye. A solução foi portar o script original para JavaScript.

Não fiz tudo do "zero absoluto" (embora tenha tido muito trabalho), utilizei o script py2js.py para fazer um "esqueleto", depois tratei todas as inconsistências (que não eram poucas) e incompatibilidade, e voilà!! Eis o resultado abaixo!


Clique na Imagem para Amplia-la

Para os curiosos, e como dizem na minha terra, imitões, baixei o papel de parede "layered" daqui.

Bem pessoal, após todo este tempo longe, nada melhor que um pequeno artigo original para recomeçar com o pé direito! O código fonte não está lá estas maravilhas, e não existe documentação (até porque eu creio que pela simplicidade o mesmo torna-se auto-explicativo), mas como diria um conhecido meu: "Tudo bem, vamos em frente!"

Para Baixar o BirdsEye.js, clique aqui!

Fonte: todotxt.com

terça-feira, 15 de janeiro de 2008

a la Mobile: A primeira suite de aplicativos a funcionar sobre a plataforma Android


É, parece que apesar das reclamações feitas a respeito do SDK da Google, alguns desenvolvedores já criam aplicações "mundo real" para a nova plataforma. É o caso do a la Mobile que desenvolveu um conjunto de aplicações típicas de Smart Phones (Calendário, Tarefas, Discador, etc...). Em um primeiro momento os aplicativos devem ser testados nos QTek 9090, mas em breve devem estar funcionando em aparelhos habilitados com a tecnologia Android. E esperar para ver no que é que dá...

Fonte: Mashable!
Via: Usa Today

sábado, 12 de janeiro de 2008

BitNami: Soluções Open-Source em um piscar de olhos!


Bem pessoal, apesar do propósito inicial deste Blog ser o de disponibilizar material original (ok, ok, eu sei que o artigo sobre o Android foi uma cópia descarada da documentação oficial...), entendo que não da para "movimentar" (principalmente partindo de uma "euquipe") um trabalho desta natureza só com artigos de autoria própria.

Por este motivo, que venho sugerir o excelente BitNami: BitNami é um projeto que se dedica a "empacotar" e "integrar" diversos softwares (os *AMPP da vida), com a finalidade de facilitar sua instalação e configuração. Já existem pacotes para Ruby On Rails, phpBB, etc...

Parafraseando O Velho: "É instalar e usar!"

Acesse:BitNami: Open Source. Simplified

sexta-feira, 4 de janeiro de 2008

AutoHotkey: Itens do menu de contexto


Bem pessoal, como a continuação do tutoria sobre o Android deve demorar mais um pouco, para dar uma movimentada por aqui, resolvi postar um breve artigo sobre o fantástico AutoHotkey.

Para quem não conhece AutoHotkey é um utilitário open-source que permite, dentre outras coisas, fazer automação de tarefas repetitivas de mouse e teclado, criar teclas de atalho (dai o nome...) e o desenvolver interfaces gráficas simples. Neste artigo utilizaremos o AutoHotkey como uma linguagem de programação de propósito geral, fazendo proveito de sua velocidade e simplicidade. Não me aprofundarei na sintaxe das construções do AutoHotkey, muito menos tenho a pretenção de passar conceitos básicos informática geral, lógica de programação, etc... Presume-se que o leitor tenha intimidade com computadores e conhecimento básico de desenvolvimento de sistemas.

Objetivo

O objetivo do utilitário que desenvolveremos é facilitar a adição de "entradas" no menu de contexto. O menu de contexto é apresentado sempre que clicamos com o botão direito do mouse sobre um arquivo ou pasta, e como o próprio nome sugere, é sensível ao contexto, variando conforme o tipo de arquivo que está sendo clicado.



















"Fisiologia" do Programa

Tecnicamente o que o software vai fazer é adicionar uma chave ao Registro do Windows, mais precisamente em HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*, podemos verificar as entradas existentes atravez do "Editor de Registro", para acessa-lo basta seguir os seguintes passos:

INICIAR -> EXECUTAR -> [digite] regedit




A navegação no regedit é muito semelhante a do Windows Explorer, você "expande" as pastas (no caso do registro, chaves) e vai descendo na hierarquia.
















Com o intuito de manter a simplicidade, nosso programa de fato não vai ser sensível ao contexto. A chave, invariavelmente, será criada no contexto "*", ou seja, será válida para todos os tipos de arquivo.

Como relatei mais acima, passarei apenas "linhas gerais" do programa, vou me deter na "solução" em si, e não como chegar até ela, disponibilizarei o código, e como o mesmo está razoavelmente bem documentado, pode-se aprender um pouco mais com sua "leitura".

A alma do programa se resume a linha 27.

RegWrite, REG_SZ, HKEY_LOCAL_MACHINE, SOFTWARE\Classes\*\shell\%vDescricao%\command,, %vPrograma%

É nesta linha que informamos o caminho e os valores que devem ser adicionados. A "função" RegWrite possui os seguintes parâmetros:

RegWrite, [TIPO DE DADOS],[CHAVE PRINCIPAL],[NOME DO VALOR],[VALOR]

No caso do nosso software, criaremos um novo "valor de sequência" (REG_SZ), a partir da chave HKEY_LOCAL_MACHINE (ou seja, válido para todos os usuários), descendo a hierarquia de "chaves" SOFTWARE\Classes\*\shell, adicionaremos uma nova cujo o nome é a descrição informada pelo usuário, e uma sub-chave de nome command que contém um valor de sequência padrão cujo o conteúdo é o path do programa que deve ser executado.








Executando o Programa (Instruções de uso)


Ao executar o programa, sua tela principal é apresentada, devemos digitar no primeiro campo o caminho (path) do programa que deverá ser executado (ou busca-lo com o botão "...") seguido de "%1", isso é necessário para informar ao programa o nome do arquivo a ser editado. Para adicionar, por exemplo, o notepad a linha de comando teria o seguinte aspecto:

C:\WINDOWS\notepad.exe "%1"

As aspas também são necessárias para evitar problemas com arquivos que contém espaços em seus nomes (pois o SO pode interpretar as partes do nome do arquivo como vários parâmetros), herança dos velhos tempos do DOS.

O segundo campo é moleza, basta digitar uma descrição, esta é a que vai ser apresentada no menu de contexto, como por exemplo: Editar com o Notepad












É só clicar no botão Criar e pronto! Acabamos de adicionar uma opção para editar arquivos com o Notepad ao menu de contexto!

Coisas a Fazer

O programa ainda é muito cru, faltam opções para excluir as entradas adicionadas e escolher o contexto (tipo de arquivo), além de melhorias óbvias na interface. Fica a sugestão aos leitores, um bom exercício para os que estão aprendendo!

Conclusão

Bem, tudo o que este programinha faz, é possível fazer com as funcionalidades padrão do Windows, a minha intenção com este artigo, foi somente apresentar a ferramenta para aqueles que ainda não a conheciam e passar alguns truques de edição de registro, espero que todos tenham aproveitado algo, os conceitos aqui apresentados podem ser utilizados em programas mais úteis (a edição programática do registro é muito utilizada em scripts de logon, fica a sugestão). Prometo que vou me esforçar para postar com mais frequência (e com mais qualidade), abraços e até a próxima!

Link para o código fonte
Link para o executável compilado

Android - Parte 1


Este primeiro post não passa muito de uma (má, diga-se de passagem... :) tradução da documentação oficial do Android, adicionada de algumas (poucas) citações de minhas impressões pessoais acerca da tecnologia. Android é uma nova plataforma tecnológica criada por um consorcio chamado "Open Handset Alliance" encabeçado pela Google e mais de 30 parceiros. Tem como intuito fornecer uma alternativa livre e de código aberto as atuais soluções para dispositivos móveis. Antes do lançamento oficial, houve muita especulação a respeito de um possível "GPhone", infelizmente (ou felizmente) os boatos não se confirmaram, por fim a Google decidiu não investir em hardware, em vez disto, fez o mais natural, que é trabalhar no que ela faz bem, software de infra-estrutura. A parte do hardware (ou seja os aparelhos) ficará a cargo de parceiros como LG Eletronics, Motorola, Sansung, Intel, Texas Instruments etc...


Iniciando

A Androi Plataform, conjunto de softwares que faz de um aparelho, um celular Android é composta por:
  • Sistema operacional
  • Middleware
  • Aplicativos chave
No decorrer deste "tutorial", estudaremos mais a fundo o Android SDK. Em linhas gerais, o Android SDK fornece as APIs e ferramentas necessárias para começar a desenvolver para a Android Plataform ("Plataforma Android"). Toda a plataforma está fortemente apoiada sobre os ombros do Java, inclusive o Framework disponibilizado pela própria Google é desenvolvido utilizando esta linguagem.


Características da Plataforma Android
  • Application Framework: Conjunto de componentes reutilizáveis necessários para tornar o desenvolvimento de aplicativos mais simples.
  • Maquina virtual Dalvik: Maquina virtual Java otimizada para dispositivos móveis.
  • Browser Integrado: Utiliza a engine open-source WebKit (a mesma do Konqueror, Safari, etc...) para renderização de paginas Web.
  • Suporte avançado a gráficos: Biblioteca 2D customizada e biblioteca 3D baseada no OpenGL (especificação ES 1.0) com suporte a aceleração por hardware.
  • Banco de Dados Open Source SQLite
  • Suporta nativamente os tipos mais comuns de arquivos multi-mídia: MPEG4, H.264, MP3, AAC, AMR, JPG, PNG e GIF
  • Telefonia GSM
  • Bluetooth, EDGE, 3G, and WiFi (Depende do Hardware)
  • Camera Digital, GPS, bússola e acelerômetro (Depende do Hardware)
  • Rico ambiente de desenvolvimento: Emulador de dispositivos, ferramentas de depuração, monitoração de memória e performance e um plugin que integra tudo com o Eclipse (IDE genérica multi-plataforma, comummente utilizada para desenvolvimento em Java)

A Arquitetura Android


A arquitetura Android pode ser dividida entre os seguintes componentes:

Aplicativos

O Android por padrão vem com uma série de aplicativos básicos incluindo cliente de e-mail, programa de envio/recebimento de SMS, calendário, mapas, browser, contatos dentre outros. Como dito antes, todos os softwares são escritos em Java.

Application Framework

Os desenvolvedores terão acesso total a qualquer API do Framework utilizada pelas aplicações básicas. A arquitetura é desenvolvida para simplificar a reutilização de componentes; Qualquer aplicativo pode compartilhar suas capacidades, e outros aplicativos podem fazer uso destas capacidades (sujeito as restrições de segurança "forçadas" peloframework). Este mesmo mecanismo permite que componentes sejam substituídos pelo desenvolvedor.

Internamente, todas as aplicações da plataforma Android, são construidas a partir dos seguintes sistemas e/ou serviços:
  • Um rico e extensível conjunto de Views que podem ser utilizadas no desenvolvimento de suas aplicações, incluindo listas, grades, caixas de texto, botões e até mesmo um webbrowser embutivel.
  • Content Providers: Permite que os aplicativos acessem dados de outros aplicativos (e.g Contatos) ou compartilhem seus próprios dados.
  • Resource Manager: Prover acesso a partes dos aplicativos que não são elementos de programação (código), e.g: Imagens, strings para internacionalização, arquivos de layout, etc...
  • Notification Manager: Controla todos os alertas customizados exibidos na barra de status
  • Activity Manager: Gerencia o ciclo de vida da aplicação, controla a concorrencia e a "multi-tarefa" (multi-tasking/multi-threading) entre diversas "janelas" de uma aplicações.
Visivelmente o framework aproxima-se do padrão MVC em sua contrução, com seus 3 elementos básicos:
  • Model: Content providers
  • View: obviamente, as Views :)
  • Controller: Activity Manager (embora o seu foco não seja na regra de negócios em si, o controle que este serviço exerce sobre a camada View, possibilita a construção de validações interessantes)
Bibliotecas

O Android inclui um conjunto de bibliotecas C/C++ utilizadas por vários componentes do sistema. Suas capacidades são disponibilizadas aos desenvolvedores atravez do Android Framework. Algumas destas bibliotecas são elencadas abaixo:
  • System C library - uma implementação da bibliotéca "C" padrão (C system library - libc), sobe licença BSD, otimizada para sistemas embarcados baseados em Linux;
  • Media Libraries - baseada na biblioteca OpenCORE da PacketVideo; esta biblioteca suporta os mais populares formatos de audio e video incluindo MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG;
  • Surface Manager - gerencia o acesso ao sub-sistema de video e compõe camadas 2D e 3D de multiplas aplicações;
  • LibWebCore - uma moderna engine para web browsers, são baseados nela o browser padrão do Android e um componente do tipo View, o Embeddable Web Browser;
  • SGL - engine para gráficos 2D
  • 3D libraries - implementação baseado nas APIs do OpenGL ES 1.0; esta biblioteca é utilizada tanto para aceleração por hardware (quando disponível) como pode utilizar um mecanismo altamente otimizado de aceleração 3D via software;
  • FreeType - impressão de fontes vetoriais ou raster;
  • SQLite - um mecanismo gerenciador de bancos de dados relacionais, leve e funcional, disponível para todas as aplicações.
Android Runtime

O Android inclui um conjunto de bibliotecas básicas que proveem a maioria das funcionalidades presentes nas bibliotecas padrão da linguagem Java. Cada aplicação Android roda em seu próprio processo (processos separados), em sua própria instancia da maquina virtual Dalvik. A Dalvik é escrita de modo que o dispositivo pode rodar multiplas maquinas virtuais de forma bastante eficiente. A maquina virtual Dalvik roda arquivos no formato "Dalvik Executable" (.dex), os aplicativos neste formato são otimizados para uso mínimo de memória. A maquina virtual Dalvik é "baseada em registradores" (este tipo de maquina costuma realizar as mesmas tarefas com muito menos instruções que as maquinas baseadas em "pilhas" ["stack-based"]), roda classes previamente compiladas por um compilador Java (bytecode) e convertidas em arquivos .dex pelo utilitario dx. A maquina virtual Dalvik invoca funções intrínsecas do kernel do Linux, a exemplo de execução em threads e gerenciamento de memória em baixo nível.

Kernel do Linux

O Android faz uso de serviços básicos do kernel 2.6 do Linux, como segurança, gerenciamento de memória, gerenciamento de processos, serviços de rede e modelo de drivers. O kernel também atua como uma camada de abstração (ou seja, "oculta" o trabalho sujo, "expondo" uma interface mais "amigável" as demais aplicações) entre o hardware e os demais softwares rodando no aparelho.


Considerações Finais


Contra a iniciativa da Google existe muita gente de peso, inclusive Steve Ballmer, o CEO e Show Man da Microsoft.

John Forsyth, vice presidente para assuntos estratégicos do Symbian, não acredita que a dominação da Google na internet se refletirá no mercado de dispositivos móveis.

Por outro lado, a Nokia, que antes engrossava as linhas da "turma do contra", parece estar se mostrando menos cética quanto a nova plataforma, tanto que Simon Ainslie, diretor-gerente da Nokia no Reino Unido afirma que a gigante Finlandesa está aberta a discussões a respeito da nova tecnologia.

Uma coisa é certa, a Google e seus parceiros enfrentarão um grande desafio ao bater de frente com seus concorrentes naturais, plataformas consolidadas como Symbian, Windows Mobile, que possuem um considerável Market Share e a confiança de muitos usuários. Mas pelas disposição para inovações e pelo apetite por novos mercados que a turma de Mountain View vem apresentando nos últimos anos, não devemos nos assombrar se daqui a muito pouco tempo, todos nós estejamos com um pedaço de tecnologia Google no bolso.

Na próxima, prometo postar algo melhor e original... Abraços, e até a proxima!

Fontes: Android Documentation, Android Developer Blog, Open Handset Alliance