Maratona de Eventos em Maio e Junho

Maio e junho tem sido de longe os meses mais corridos para mim desde…sei lá, desde muito tempo. Esses dois últimos meses fizeram com que eu batesse todas minhas metas pessoais de eventos de divulgação da empresa em que trabalho, dos nossos serviços e por que não dizer, do meu trabalho. Muitas metas que havia traçado no final de 2011 para serem cumpridas até dezembro deste ano, já foram ultrapassados a muito tempo. O post de hoje é para compartilhar um pouco desses resultados a quem possa interessar.

Palestra sobre carreira na FTEC

WebMatrix pelo estado afora!

Graças a uma parceria com a Microsoft Brasil, eu e o Especialista de Produto Fabrício Sanchez (@sanchezfabricio) visitamos várias instituições com a palestra do Fabrício que trata das Tecnologias Microsoft para Desenvolvimento Web. Todo esse roadshow pode ser conferido no site dele em http://fabriciosanchez.com.br. Este projeto de divulgação, principalmente da ferramenta WebMatrix, se deu em função de termos obtido o título de primeiro provedor de hospedagem homologado pela Microsoft para hospedagem WebMatrix, título esse que nos rendeu um vídeo no Microsoft Showcase, como pode ser conferido em: http://www.microsoft.com/pt-br/showcase/details?uuid=e3afb47b-2dd3-4e95-b38d-5e7ff892dca4

Durante todo o mês de maio estivemos presente em instituições até então inéditas para a RedeHost, como Faccat, Ulbra Torres e IPA, entre outras mais tradicionais como FAQI e Facensa.

Palestra sobre Desafios da Web Atual no Dom Feliciano

Semana Acadêmica na UFRGS

Como convidados na Semana Acadêmica da Universidade Federal do Rio Grande do Sul, ministramos 3 palestras, sendo que participei da tradicional “Cloud Computing: do Conceito à Prática”, o Cristiano Diedrich palestrou sobre “Segurança e Alta Disponibilidade em Servidores Apache” e por fim o Fábio Borges estreou como palestrante com a excelente “Gerenciamento de Projetos com Metodologias Ágeis”.

Palestrar na UFRGS foi interessante pois a instituição possui muito respeito a nível nacional, e eu mesmo tive uma curta participação no programa de Mestrado deles no ano passado e pude comprovar na prática a qualidade do ensino deles. Acredito que este tenha sido o primeiro de muitos eventos em conjunto.

Reunião na Acigra em Gravataí

Outros Eventos

Além dos carros chefes de maio e junho com WebMatrix e nossa visita à UFRGS, participei da semana acadêmica na FTEC (Porto Alegre) na palestra de abertura do evento, tratando sobre “Carreira e Desafios em TI”. Na Ulbra Gravataí também participei com a palestra sobre Cloud, que nos abriu espaço para dois cursos de extensão na instituição (que estarão acontecendo até o final deste mês) sobre ASP.NET e Linux (fora a 2a edição do curso de Android, mas disso eu falarei mais tarde).

E por fim, no Colégio Dom Feliciano, em Gravataí, organizei um evento muito especial para os alunos e egressos do curso Técnico em Informática. A ideia era montar uma atualização profissional ao pessoal do curso com relação à web atual, seus desafios, suas tecnologias, etc. O evento durou um dia inteiro, com direito à coffe-breaks fornecidos pela escola. Como ninguém aguentaria me ver palestrar um dia inteiro, montei um cronograma bacanudo junto com colegas da RedeHost que palestraram sobre ORM (Tiago Fonseca), MVC (Fernando Mondo), WebStandards (Adriano Costa) e eu, que abri e fechei o evento com uma palestra sobre “Desafios da Web Atual” e outra sobre “Carreira e Desafios em TI”. Acredito que todos tenham aproveitado bastante, tanto os alunos quanto os meus amigos que eram palestrantes de primeira viagem, hehehehe.

À Seguir

Como citei, estão acontecendo os cursos de Linux e de ASP.NET, ministrados pelo Cristiano e por mim, respectivamente. Ainda em julho eu e o Cristiano Diedrich estaremos participando da Semana Acadêmica do IBGEN em Porto Alegre, com duas palestras. Na sequência, estarei ministrando de forma autônoma (i.e. sem patrocínio da RedeHost) a 2a edição do curso básico de Android na Ulbra Gravataí, em julho. Também em julho, estarei ministrando o curso de ASP.NET aos alunos da FTEC.

Em paralelo com tudo isso, participei de uma reunião na Acigra (Associação do Comércio, Indústria e Serviços de Gravataí) recentemente que serviu para estreitar nossos laços com eles. Também estou tocando um projeto muito ousado com o Unilasalle de Canoas que não posso dar detalhes no momento entre outros inúmeros projetos junto à RedeHost.

É, a vida é dura, mas não dá pra parar agora. Recentemente, no dia 06 de junho, completei mais um ano de empresa e quanto mais veterano eu me torno, mais responsabilidade recai sobre meus ombros para tomar partido nas ações da empresa. Um abraço e até a próxima.

Como programar para BlackBerry

BlackBerry

Devido à Pós-Graduação que estou cursando sobre Desenvolvimento de Aplicações para Dispositivos Móveis, tenho tido contato com os mais variados conceitos e tecnologias em cima de plataformas móveis. Ok, Android já é um velho conhecido para mim, mas esta semana acabei iniciando meus estudos sobre a plataforma BlackBerry, tão famosa por seus smartphones focados para o público executivo, seja pelo excelente serviço de mensageria eletrônica ou mesmo pelos preços salgados de seus aparelhos e serviços (arggh!).

Neste post iremos dar os primeiros passos no desenvolvimento para BlackBerry, entendendo a plataforma, configurando o ambiente e fazendo um clássico Hello World!

Antes de tudo, é importante que você saiba que somente é possível usar todas as ferramentas oficiais para desenvolvimento Blackberry no sistema operacional Windows. No Mac OSX você até consegue desenvolver a aplicação mas só conseguirá testá-la se possuir um aparelho (os simuladores não existem para Mac). No Linux, você nem mesmo consegue desenvolver pois nãoe xiste plugin de integração com o Eclipse for Linux. Caso seja usuário de um desses dois sistemas operacionais, terá de criar uma Máquina Virtual com Windows para poder programar ou então torne sua máquina Dual Boot usando o Bootcamp (Mac) ou Grub (Linux).

J2ME

A plataforma BlackBerry roda sobre o framework Java 2 Micro Edition puro, ao contrário da plataforma Android que resolveu reescrever a roda e criar todo um modelo novo de desenvolvimento de aplicações sobre uma complexa arquitetura. Não que isso seja ruim, muito pelo contrário, mas não estamos aqui para discutir sobre design patterns, não é mesmo? O J2ME é o framework Java para desenvolvimento de soluções móveis. Quem pensou em smartphones não está errado, mas ele é muito mais que isso. Existem três configurações principais de J2ME, com máquinas virtuais Java distintas e capacidades ainda mais distintas: CLDC, CDC e SmartCards.

A CLDC é a configuração padrão para dispositivos com baixa conectividade, pouquíssimos recursos, etc. Os telefones celulares de outrora eram em sua maioria da “família” CLDC, assim como certos set-top boxes, players de música, etc. A CDC é a versão mais fanfarrona da J2ME, onde a imensa maioria dos celulares atuais se encontram e poderosos dispositivos de mídia como Smart TVs, centrais multimídia, Blu-Ray players e or aí vai. E por fim temos uma outra versão voltada a SmartCards, para leitura de cartões magnéticos.

Sobre estas configurações estão os perfis de desenvolvimento, chamados de MIDP, que fornecem as APIs para determinados grupos de dispositivos. É sobre a MIDP que desenvolvemos os MIDlets, aplicações para dispositivos móveis, fazendo uma analogia aos Servlets (aplicações de servidor) e Applets (aplicações de cliente).

Uma vez que teremos de desenvolver sobre a plataforma Java, nada mais natural do que ter de baixar a última versão do JDK (Java Development Kit) no site da Sun Oracle em http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html

Download do BlackBerry SDK

Ambiente

Para desenvolvermos para BlackBerry usamos o bom e velho Eclipse, caso não tenha o Eclipse ou queira se certificar de estar com a última versão (Indigo), baixe-o diretamente do site oficial http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/indigosr2

Depois de estar com o Eclipse em sua máquina, é hora de baixar o BlackBerry SDK, que contém nada mais nada menos que o plugin para desenvolvimento no Eclipse e as bibliotecas e APIs específicas para BlackBerry, afinal a J2ME é para micro dispositivos em geral. Baixe o BlackBerry SDK no site oficial do fabricante https://developer.blackberry.com/java/download/eclipse, sendo que eu recomendo baixar a versão standalone do plugin, pois tive uma péssima experiência com o download via Eclipse…Aproveite que está no site do fabricante e também baixe algum simulador do BlackBerry, sendo que eu recomendo a versão BlackBerry Bold com SO 7.1, que é uma versão muito comum entre os usuários atualmente. Ops, ia esquecendo do link do simulador: http://us.blackberry.com/developers/resources/simulators.jsp

Note que o site irá exigir que você baixe um gerenciador de download da Akamai Software para que seja possível baixar o plugin e o simulador. É, não tem jeito. Eu realmente tive de instalar aquela porcaria apenas para baixar dois arquivos do site…

Download do Simulador

Instale o JDK, depois o Eclipse (que é só copiar a pasta…), e por último o plugin do BlackBerry seguido do simulador. Pronto, você está apto a desenvolver para BlackBerry!

Desenvolvendo

Abra o Eclipse. É provável que ele lhe faça alguns questionamentos como workspace do usuário (apenas confirme), se você quer que seja verificado se existem atualizações (sim) e por aí vai. Apenas concorde pois louco não se contraria e vamos direto criar nosso primeiro BlackBerry project como mostra a figura abaixo. Apenas dê um nome ao projeto e manda um Finish para começarmos a programar de uma vez.

Com uma estrutura similar ao do Android (ou seria o contrário?) você verá uma pasta src (source) com os arquivos .java tradicionais da linguagem e uma pasta res (resources) com as imagens da sua aplicação. Além disso você verá um arquivo BlackBerry_App_Descriptor.xml que seria o equivalenete ao Android Manifest. O que nos interessa aqui são os arquivos da pasta src mesmo. Cole o seguinte código dentro do arquivo MyApp.java:

Agora cole o seguinte código dentro do arquivo MyScreen.java:

Para executar, apenas clique com o botão direito sobre MyApp.java, vá em “Run As” e selecione “BlackBerry Simulator”. Na primeira compilação o Eclipse deve lhe perguntar algo a respeito de uma tal de pré-compilação. Clique em “Restart Eclipse” e quando ele abrir de novo, apenas vá em Windows -> Open Perspective -> Other e escolha a opção de BlackBerry e lá estará seu projeto novamente, do ponto onde parou. Agora sim você pode mandar executar sua aplicação com o Run As -> BlackBerry Simulator para ver uma longa tediosa inicialização do BlackBerry SO 7.1.

Testando no simulador

Quando ele tiver iniciado por completo, clique em All e depois role até o final da tela, você deve ver o ícone genérico de aplicações BlackBerry por lá (uma janela transparente). Clique nele e verá sua aplicação funcionando.

Caso não veja o dito-cujo, vá no menu do simulador e clique em File -> Load BlackBerry Application or Theme, selecione o arquivo .cod (extensão das aplicações Blackberry) e mande dar um restart no BlackBerry para que ele reconheça a aplicação recém-instalada. Assim que ele terminar todo o processo novamente, sua aplicação estará lá para testes. Incrível não? Uma dica para agilizar seu desenvolvimento é nunca fechar este simulador e sempre que der um Run As no Eclipse, vá no menu File do simulador e instale novamente a aplicação para que ela seja reinstalada no simulador.

Bons estudos!

Conclusão

O mercado para BlackBerry já viu dias melhores e a canadense RIM, fabricante do aparelho e do software, tem demitido muita gente para corte de gastos. Para mim BlackBerry é apenas um tema ultrapassado de faculdade, assim como aquelas linguagens mortas que muitas vezes aprendemos a utilizar na graduação. De qualquer forma, servem para me mostrar o quão maravilhosas são as plataformas iOS e Android, hehehehe.

Se você está lendo este post até aqui é porque tem de programar algo para BlackBerry por algum motivo. E isso é um bom sinal, indica que a princípio ainda existe alguém ganhando grana com apps para esta plataforma. E dinheiro sempre é bom, não é mesmo? Até mais!

* OBS: agradecimentos ao prof. Gilberto Irajá, da Unisinos, que escreveu o material que usei como base para este post.

Para programar para BlackBerry é importante uma base sólida de Java. Recentemente escrevi um livro sobre esse assunto, que você pode conferir aqui.

Leitura de imagens usando OCR e C#

Quem nunca precisou fazer a leitura de uma imagem via código? Quem já ouviu falar de OCR? Basicamente o Reconhecimento Ótico de Caracteres (OCR – Optical Character Recognition) funciona através de um rede neural que aprende a reconhecer os padrões das letras e números, e quanto melhor for treinada, melhor será sua precisão. Através de OCR é possível retirar a string de texto de dentro de uma imagem, geralmente de um documento digitalizado. Obviamente ele não faz milagres e existem algumas limitações.

Neste post iremos tratar de como utilizar a API de OCR do Microsoft Office em seus projetos C# para reconhecimento ótico de caracteres.

Veremos:

Microsoft Office Document Imaging

Existem diversas bibliotecas de OCR no mercado, em sua maioria pagas. Entretanto poucos sabem que o próprio Microsoft Office possui uma excelente API de OCR que pode ser usada através de uma referência a um componente COM+ do Microsoft Office 2003 ou 2007, chamado Microsoft Office Document Imaging. Na verdade o MODI é um aplicativo de scanner nativo do Office, mas o que nos interessa aqui é a sua API.

Esta API não é instalada por padrão quando se instala o MS Office, você terá que colocar o CD de instalação em seu computador e marcar a opção Microsoft Office Document Imaging dentro de Ferramentas do Office. Não se esqueça de marcar a opção de OCR, ou não funcionará.

Instalando o MODI

Após instalar a API de OCR, crie seu projeto no Visual Studio e adicione uma referência ao COM+ Microsoft Office Document Imaging. Note que esta é uma referência a um componente existente no Windows e para que funcione em seu ambiente de produção, você terá de ter o mesmo componente instalado lá (i.e. o MS Office).

Adicionando a referência

Agora vamos ao código.

Codificando uma aplicação de OCR

O código abaixo exemplifica como criar uma aplicação simples que lê uma imagem, cria um documento usando o a API do MODI (Microsoft Office Document Imaging) e depois faz o reconhecimento de caracteres em cima dele, retornando uma string com o texto.

Obviamente alguns erros podem acontecer e tentarei cobrir os mais comuns na próxima seção.

Erros Comuns

“Object hasn’t been initialized and can’t be used yet”

Ao contrário do que pode parecer, este erro não é problema com o documento. Na verdade este erro acontece quando o MODI não está instalado na máquina que está tentando executar o código. Verifique novamente se instalou o MODI com sucesso, sua instalação de Office deve ficar igual à imagem que coloquei no início deste post.

“OCR Running Error”

Este é um erro de reconhecimento ótico de caracteres, ou seja, a API de OCR não conseguiu entender o texto da imagem. Um dos principais problemas com OCR é que ele não consegue ler imagens muito pequenas. E estou falando da largura e altura da imagem e não do texto em si. Se suas imagens são pequenas, insira-as dentro de imagens maiores, preferencialmente com fundo branco para facilitar o reconhecimento. Tamanhos de 600x600px já resolvem o problema.

Outro motivo que pode gerar este erro é o uso de fundos muito poluídos (muitas cores ou textos sobrepostos como em CAPTCHAS) ou textos com má resolução (muito esticados ou embaçados, por exemplo). Nestes casos é provável que você tenha de tratar suas imagens antes de submetê-las à API.

Dúvidas ou sugestões, compartilhem nos comentários.