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