ThiagoAdelino.com

+ idéias

Autor: Thiago Adelino

Enviando seus Tweets por e-mail

Antes de mais nada, este post é dividido em duas partes. Até chegar na versão final da aplicação, passei por algumas alternativas interessantes e achei melhor mostrar como foi esse processo, ao invés de apenas mostrar como ficou a aplicação final.

Estimulado para desenvolver algum projeto que fosse diferente de um HelloWorld e que tivesse um uso, mesmo que de inutilidade, comecei a pensar em algumas possibilidades.

Em redes que acesso, e também no meu trabalho, não tenho acesso ao Twitter, uma das minhas redes sociais preferidas. Conheço pessoas que usam configurações de Proxy para acessar o conteúdo que normalmente seria bloqueado pela política da rede acessada, mas decidi seguir por outro caminho.

O acesso a e-mail é disseminado e liberado em todos os ambientes, seja trabalho, universidade ou colégio, e acessível a todas as pessoas. Pensando nisso decidi desenvolver uma aplicação que rodasse em uma rede com acesso ao Twitter, onde essa aplicação iria ler uma caixa de e-mails, iria ler o campo assunto de cada e-mail(que deveria possuir o perfil a ser acessado), listaria os Twetts e os retornariam na caixa de e-mail que solicitou.

A forma mais fácil de fazer isso seria usando a API do Twitter, que possui um conjunto de webservices definidos para utilização em aplicações de terceiros. Apesar dessa facilidade, decidi realizar uma primeira versão da aplicação lendo os dados diretamente da página HTML.

Iniciei a consulta aos dados da página HTML usando a biblioteca do Jsoup, onde realizava o acesso à página do perfil do twitter (Ex.: http://twitter.com/naosalvo) e a partir dela verificava quais tags compunham os posts dos tweets.

Usei a expressão abaixo para retornar os dados:

O que o Jsoup vai fazer é retornar o texto puro dentro das tags que forem retornadas usando as expressões passadas como parâmetro. Nesse contexto, consegui converter em objeto o texto do tweet e retornar as imagens visíveis em cada um deles. Mas ainda faltavam os vídeos e os Gifs (melhor parte aliás). Abaixo segue o mesmo Tweet, retornado por e-mail e logo em seguida o existente no site do Twitter.

Tweet enviado por e-mail

As imagens e o texto eram simples de serem retornados, porém os vídeos e gifs animados tinham um problema. A página do Twitter exibe os gifs animados como vídeos em formato MP4 (até aí tudo bem), mas eles só são carregados na página, assim como os vídeos, conforme o usuário vai usando o scrolldown, para economizar recursos de requisição à conteúdo e melhorar usabilidade.

A página possuía um javascript que é executado sempre que o trecho da página ficava em evidência, tornando o Jsoup inviável, pelo menos parcialmente, na construção da aplicação que iria fazer o harvesting destas informações. Pesquisa pra lá, pesquisa pra cá, voltei a uma alternativa um pouco grosseira, mas que na maioria dos casos funcionou. Usar o Selenium para realizar scrolldown na página do Twitter e capturar os videos e animações desejadas.

O selenium é uma biblioteca utilizada, entre outras coisas, para automatização de testes funcionais. A grosso modo o selenium Webdriver permite através de diretivas de código, a instanciação de sessões do navegador web, execução de operações na página como preencher campos e clicar em botões e além disso permitia ao desenvolvedor acessar os dados e metadados associados a essa operação. No meu caso eu desejava acessar as tags HTML com os dados dos vídeos preenchidos.

Colocando um pouco mais a mão na massa, adicionei as dependências do selenium no meu projeto usando o maven:

Em seguida, realizei a chamada para instânciar, executar as operações na página e em seguida passar o HTML final de volta para o Jsoup processar. É importante notar que o WebDriver está atuando como um usuário que abre uma janela do navegador, adiciona o endereço e realiza o scroll na página. A partir desse momento o Jsoup começa a agir coletando os vídeos existentes em cada Tweet.

Perceba também que ao final do processo, o WebDriver é chamado novamente com a operação ‘close()‘ que fecha a instância aberta do Browser.

Nesse momento eu tinha um leitor de Tweets analisando qualquer perfil desejado, que apesar do esforço, ainda não funcionava em sua totalidade para retornar os gifs e vídeos. Apesar da tentativa, eu deveria buscar uma luz na API do Twitter.

No próximo post irei compartilhar o projeto e explicar como funcionam o gerenciamento de e-mails (envio e recebimento) e as diretivas de acesso a API do Twitter, o que é preciso e como realizar o acesso usando o Java.
Até lá!

Share Button

A importância da ‘Inutilidade Tecnológica’

Nas minhas idas e vindas na internet e em conversa com colegas de trabalho acabo me surpreendendo com as informações e conteúdos importantes que podem absorvidos com a execução de projetos aparentemente inúteis e a utilização de ferramentas para fins apenas recreativos.

Durante uma boa parte do meu curso universitário, estive um pouco sem entender a dimensão e as possibilidades de uso das ferramentas que via em disciplinas como banco de dados ou computação gráfica, ou mesmo da aplicabilidade real das coisas e da prototipação e implementação para um fim que não fosse apenas ‘cadastrar contatos em uma agenda‘.

Nesse ambiente confuso, que trazia muitas informações porém não tinha um propósito bem definido, eu e outros colegas acabávamos desmotivados.

Após concluir meu curso e entrar no mercado, acabei encontrando vários conteúdos interessantes na internet. Implementações de engenharia, desenvolvimento de software e outras variações que me deixavam estimulado a aprender coisas novas, muitas daquelas coisas que não tive o mesmo estímulo de buscar durante a graduação.

O vídeo abaixo foi meu primeiro achado no site e me chamou atenção por envolver jogos de computador. A proposta do projeto era que seria possível usar armas reais (com projéteis reais) para jogar jogos FPS (First Person Shooter).

No vídeo são ensinados os conceitos de acelerômetro e triangulação de sinal, e a implementação do projeto em si leva a esses estudantes uma experiência de nível conceitual e tecnológico. Além de conhecimento no uso da linguagem de programação, ferramentas de desenvolvimento, trabalho em equipe e afins.

O segundo vídeo é do mesmo grupo (WaterLoo Labs), agora mostrando o projeto que possibilita dirigir um carro usando apenas o seu iPhone. Também nesse vídeo é possível ver o conhecimento adquirido dos alunos em relação a automação e programação, utilização do acelerômetro no iPhone e o desenvolvimento de Apps.

Todas essas idéias, por menos ‘vendáveis’ que sejam ou por mais loucas que pareçam, têm um ponto importantíssimo em comum. Elas despertam interesse por parte dos jovens graduandos para a implementação. De nada adianta explicaria ao aluno como deve ser implementado uma agenda de contatos, se aquilo não vai estimulá-lo a buscar informações além daquele ponto.

A internet hoje possibilita o cruzamento de vários conceitos, informações e experimentações. E na velocidade que tudo isso acontece, quanto mais possibilidades forem mostradas, mais fácil será para os profissionais técnicos identificarem onde é possível agir e como agir, mas é importante que todos nós possamos fazer algo que seja engraçado, interessante ou estimulante para nós mesmos e não apenas o que os exemplos ‘helloworld‘ nos mostram.

Share Button

Plataformas de Code Challenge

Lembro na faculdade que, nas disciplinas de lógica e de programação, os professores passavam listas e mais listas de exercícios para que resolvêssemos os problemas usando a programação. Para aqueles entre nós de T.I. que se tornaram desenvolvedores, elaborar algoritmos para resolver os problemas da empresa era tarefa diária.

codechallenge

Conforme fui tendo contato com desenvolvedores mais experientes e buscando a forma de seleção de empresas multinacionais, acabei descobrindo o codechallenge. O codechallenge nada mais é do que a resolução de problemas complexos usando a programação. Nela pode ser considerado a entrada e saída apenas (Se o programa realiza a operação solicitada), ou a otimização daquela solução dada (Se computacionalmente é a solução mais rápida).

Para resolver problemas mais complexos com qualidade é necessário entender bem o funcionamento das estruturas de dados (Listas, filas, hashmaps, dicionários), entender bem da linguagem de programação que é utilizada e também da complexidade de algoritmos.

As médias e grandes empresas hoje usam o codechallenge para selecionar desenvolvedores para seu quadro de pessoal e para treinar a capacidade de resolução de problemas computacionais dos mesmos.

Existem várias plataformas hoje na internet que seguem esse princípio e elas têm basicamente uma mesma linha. Elas possuem várias vertentes de aperfeiçoamento, seja no uso correto de uma linguagem de programação, a um conjunto de desafios focados em performance.

Abaixo seguem algumas plataformas que eu recomendo, tanto para treino, quanto para busca de oportunidades de emprego em grandes empresas.

Se você é um desenvolvedor e busca sempre aperfeiçoar suas habilidades de codificação, melhorar seu conhecimento de algoritmo ou pretende aplicar para vagas em empresas de desenvolvimento de médio e grande porte, essas plataformas serão bastante úteis no mapeamento de suas dificuldades e no desenvolvimento de seu rendimento como programador.

Share Button

Aurora Boreal na Islândia

Aurora

Ver a Aurora Boreal na Islândia pode se tornar uma tarefa um pouco complicada, principalmente devido ao tempo fechado e a imprevisibilidade das tempestades geomagnéticas. Contudo existem alguns passos a serem seguidos afim de aumentar as chances de vê-la ao visitar o ártico.

1. Época do ano

Normalmente as maiores incidências de aurora ocorrem em média quinze dias antes e quinze dias depois dos equinócios de primavera e outono. Algo por volta da segunda metade dos  meses de março e setembro respectivamente. Então, programar a viagem com um intervalo próximo a essas datas vai aumentar bastante as chances de ver a aurora. No meu caso o equinócio de outono tinha ocorrido cerca de uma semana antes da minha chegada a ilha, aliando-se a previsão de céu sem nuvens.

2. Tempo de estadia

Como o clima na Islândia é sempre imprevisível, é bom planejar a viagem com uma margem de alguns dias para aumentar a chance de estar na ilha com céu aberto. Olhe sempre a previsão do tempo em várias partes da ilha durante o dia, para que seja possível se deslocar para outras cidades com maior probabilidade de não ter nuvens.

Na minha viagem planejei um itinerário de 7 dias e esperava poder ver a aurora ao menos uma noite. E para iniciar a viagem com um toque legal, cerca de duas horas depois de deixar o ponto de partida da minha viagem (Estados Unidos), comecei a ver as luzes do norte pela janela do avião e elas duraram por quase toda a viagem.

Aurora Boreal

 

3. Fique atento aos indicadores e alertas de atividade geomagnética

Antes e durante a minha viagem estive sempre conferindo os índices de atividade geomagnética pelo meu celular. O aplicativo que utilizei foi o My Aurora Forecast disponível para iOSAndroid. Nele sempre que o local que eu havia marcado tivesse previsão de aumento do índice KP, eu era alertado.

app1 app3

O app me ajudou bastante principalmente pelo percentual de chance de visualizar a aurora que ele exibia. Normalmente algo em torno de KP 6.0 já era mais que suficiente para conseguir ver as luzes no céu.

4.Por fim, tenha em mente o objetivo da sua viagem

Se você planejar um período de 7 dias como eu planejei e seu objetivo for caçar aurora, as suas chances de vê-la são muito altas. Mas lembre-se de se manter no objetivo de sair todas as noites para caçar.

Conheci pessoas na viagem que permaneceram mais tempo que eu na ilha, mas não conseguiram ver a aurora, pois o objetivo principal delas não era esse. Nas noites de atividade geomagnética elas estavam em locais com tempo fechado, coisa que poderia ser resolvida com um pouco de planejamento.

Na viagem que fiz tive muita sorte de poder ver a aurora por 4 noites, principalmente pelo fato de ter céu limpo. Vi a aurora de dentro do avião e pude também vê-la de dentro da cidade pois as prefeituras de onde eu estava (Hafnafjordur) e da capital Reykjavik desligaram as luzes públicas das cidades entre as 22:00hs e 23:00hs para observação do fenômeno.

Aurora

aurora

Aurora

Depois das noites com céu aberto e clima ótimo para observar a aurora, o tempo realmente fechou e ficou bem complicado até mesmo para sair de carro. Rajadas de vento ultrapassando 70 km/h me acompanharam de volta ao aeroporto no último dia, com chuva, muita chuva.

Caçar aurora pode ser algo bem complicado, mas seguindo esses passos as chances são muito boas. Planeje sua viagem com uma janela de tempo boa e tenha paciência, as luzes do norte aparecerão.

Share Button

Google Tone e a experimentação

Entre indas e vindas navegando no youtube, encontrei um canal chamado Nat and Lo. Essas duas amigas tem acesso ao google e periodicamente fazem videos a respeito das tecnologias e das pessoas que as desenvolvem, de um jeito bem descontraído.

O vídeo que me capturou a procurar mais do canal foi o Can You Accidentally Invent The Future?, onde mostrava que existiam equipes de desenvolvimento que tentavam experimentar recursos como acelerômetro, camera e microfone dos smartphones e computadores para a realização de tarefas extremamente fora de contexto para aquele componente eletrônico.

Essa iniciativa possibilitou a criação do Google Tone, que basicamente permite o broadcast de url entre dispositivos, usando o Google Chrome, que estejam ao alcance sonoro do computador que está transmitindo. É necessário apenas habilitar a recepção do broadcast nos computadores clientes e esperar a mensagem sonora. Sem precisar enviar e-mails, ou ditar a url completa.

Google Tone

Google Tone

É interessante a forma de abordagem e experimentação. Trazendo inovação num contexto simples, apenas mudando a forma de utilização dos componentes, refazendo a mesma tarefa utilizando novos meios, independente se parece ser uma má idéia.

Assim como é dito no vídeo, a eficácia da penicilina como antibiótico foi descoberta por acidente, e muitas vezes as soluções para os problemas do dia-a-dia também acabam acontecendo por acidente. Sendo assim todas as experimentações são válidas, pois até mesmo as que dão errado servirão como mau exemplo.

Share Button

Instalando o IONIC no Mac OS X

ionic

O IONIC é um framework para criação de aplicativos para dispositivos móveis usando HTML, CSS e Javascript. Com isso é possível gerar distribuição para várias plataformas com a mesma base web desenvolvida.

Esse conjunto de itens do IONIC é composto de:

  •  Cordova, responsável pela integração com recursos nativos do dispositivo.
  • AngularJS, que é responsável pela navegação e comportamento do WebApp.
  • Componentes IONIC disponibilizados pelo framework.

Antes de tudo é necessário instalar o Node.js na máquina, para isso faça o download do arquivo e efetue a instalação.

nodejs

Após isso é só realizar a chamada de instalação do IONIC:

Depois disso o ionic iniciará os procedimentos de instalação e finalizará. Para verificar se correu tudo certo, execute um comando de teste, por exemplo para retornar o número da versão do ionic instalada.

 

Até a próxima!

 

Share Button

Extraindo dados de html com Jsoup

Recentemente fora do meu trabalho, recebi algumas ofertas para atuar como freelancer. Basicamente o que o cliente queria era extrair algumas informações de páginas web e gerar alguns relatórios com isso. Nada muito complexo, mas para uma pessoa realizar o trabalho manual de abrir link por link e ler cada uma das informações para gerar o relatório, a automatização desse processo permitiria ao cliente se dedicar a realizar outras operações que agregassem mais valor ao seu trabalho.

Eu já havia tentado trabalhar com manipulação e extração de informações presentes em arquivos xml e html antes, mas nunca gostei das diretivas que o Java permitia na linguagem para conseguir retornar esses dados. A sintaxe para retornar esses dados e a quantidade de verificações, além da própria variação da página html que é lida, pode comprometer a leitura dos dados. Entre uma pesquisa e outra, e sugestões do colega de trabalho Carlos Alberto, eu acabei adotando o jsoup como biblioteca para manipular esses dados.

O diagrama abaixo mostra o fluxo que a minha extração de dados iria realizar. Em um primeiro passo o programa iria ler o html a partir do link, a partir daí eu realizaria a triagem de quais dados eu deveria retornar, e por fim adicionaria isso em um objeto.

diagramafluxo

O jsoup é uma biblioteca java que facilita o trabalho de extração e manipulação de dados usando métodos que se baseiam em DOM, CSS e ‘jquery-like’. Com o jsoup fica bem mais fácil de limpar o html com trechos que não são interessantes, como alguns cabeçalhos html, que no fim das contas acabam só atrapalhando a extração das informações. O jsoup é livre e está disponível no GitHUB.

Para começar a trabalhar com o jsoup no projeto java realizei os seguintes passos:

  • Fiz o download do jar do jsoup, onde existem opções de realizar a inserção manual dos jars no projeto ou adicionar isso no pom.xml, para os que utilizam o maven.
  • Utilizei o Try Jsoup, que é uma espécie de sandbox para o jsoup, permitindo que você consiga extrair com base em tags html ou css, as informações em tempo de execução antes de implementar o extrator usando minha aplicação em Java.

O jsoup possui simplicidade na sua utilização. Por exemplo, no trecho de código abaixo realizo a chamada a url, retornando o html que irei manipular e na sequência acesso o método select para retornar as tags que possuem a propriedade passada como parâmetro. Nesse caso, retorna os valores existentes nas tags <b>.

 

É interessante perceber que ao acessar o método text, é retornado o valor em texto puro para o select realizado, sem delimitações por tags ou lixo proveniente do html extraído.

A partir daí realizei a extração dos dados do cliente sem maiores problemas, não era algo complexo, mas era bem extenso mapear campo a campo no html. Contudo, utilizando Try Jsoup como sandbox foi bem mais fácil pra conseguir concluir.

No GitHUB deixei um projeto de exemplo (jsoup-example) com a biblioteca importada e uma chamada básica para extrair os dados do html. Até a próxima.

Share Button

Kettle – Pentaho Data Integration

logo-pentaho-n

Interessante como fiquei maravilhado no processo de descoberta do funcionamento da ferramenta Kettle (também chamado de Data Integration), da suíte do Pentaho. O Kettle é uma ferramenta de ETL, e para tal, existem diferentes soluções no mercado, tanto pagas quanto gratuitas ou livres.

ETL é um termo inglês que significa Extract Transform Load, ou seja, Extração Transformação e Carga, indicando que são ferramentas que tem como função extrair dados de bases diferentes, sistemas diferentes, realizar transformações afim de adequa-los a determinadas regras e por fim gerar um Data Mart ou Data Warehouse. Porém nada impede que o ETL seja realizado com outros fins.

No meu ambiente de trabalho, o Kettle já era utilizado por alguns colaboradores, sendo esse um dos motivos de eu ter iniciado meu trabalho/aprendizado com essa ferramenta ao invés de outras. Afinal entre uma caneca de café e outra, dava pra aprender alguns truques e macetes com os colegas que já haviam desbravado esse campo.

O Kettle tem uma interface bem simples, com os elementos drag-n-drop, fáceis de movimentar, configurar e organizar.

tela kettle

O Kettle pode ser utilizado tanto para fins mais robustos e que necessitam de acesso a grandes bases de dados, como pode também ser utilizado para extrair alguns dados simples e exportar em uma planilha do excel, o que define é a necessidade do caso. Porém em todos eles o kettle tem steps que facilitam, tanto a extração, quanto a manipulação dos mesmos.

Alguns dos problemas que tive durante a utilização da ferramenta se referem a impossibilidades operacionais em alguns casos. Arquivos muito grandes, estouro de memória e alguns gargalos durante a execução podem tirar qualquer um do sério.

Mas existem formas de configurar cada step da transformação para utilizar de forma inteligente os recursos da máquina. Temos então a possibilidade de segmentação dos arquivos a serem lidos em disco, permitindo a leitura por porção, é possível utilizar pipeline nos steps para habilitar a sua execução de forma simultânea em diferentes instâncias, mas no mesmo fluxo de dados e também a possibilidade de commit nas operações de inserção e atualização dos dados na base por lote, liberando assim memória alocada para os streams a cada commit.

ETL é um processo segmentado e assim como o desenvolvimento de software, é algo que é construído para um fim geral ou específico. E para tanto é necessário bastante análise crítica para a implementação das soluções.
O termo utilizado para definir um processo ETL com início, meio e fim  no Kettle é chamado de Transformação. Nessa transformação estão os steps de Input (ler arquivos de texto, acessar tabelas em bases de dados, acessar webservices e por aí vai), de Output (exportar em arquivo de texto, planilha, inserir ou atualizar em base de dados) e uma infinidade de possibilidades na parte intermediária, ou seja, transformar os dados.

Share Button

Desenvolvido em WordPress & Tema por Anders Norén