segunda-feira, 1 de abril de 2013

Piadinha de primeiro de Abril

A Google fez uma (bem produzida) piada de 1o de abril, tirando um sarro do Windows Blue (próxima atualização do Windows 8), que deve estrear em breve. Com vocês, o Gmail Blue. Alegre

sábado, 30 de março de 2013

TPB AFK

Um documentário sobre o The Pirate Bay foi lançado recentemente. O filme “The Pirate Bay – Away from keyboard” (TPB AFK) pode ser assistido do próprio site ou oficialmente baixado por torrent (como era de se esperar).

O interessante é que o filme, que é sueco, está sendo lançado pela indústria de Hollywood (estúdios da MGM, 20th Century Fox e Columbia). Para quem conhece o TPB, eles são acusados de causar prejuízos de cerca de US $13 milhões à essa mesma indústria.

quarta-feira, 20 de fevereiro de 2013

Compilando arquivos Java via código

Para compilar arquivos Java via código é extremamente fácil:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run( System.in, System.out, System.err, "SeuArquivo.java" );
if ( 0 == result ) {
System.out.println( "Compilado!" );
}

A saída do processo de compilação é realizada na System.out e na System.err. O retorno sendo zero, indica sucesso na compilação.


Dica: Para usar esta classe, certifique-se que você está usando o compilador da JDK e não da JRE. As classes estão no pacote /lib/tools.jar da JDK, que não exise na JRE. Caso você precise, pode usar a minha dica anterior, para carregar este arquivo Jar dinamicamente. Para não ter que montar o caminho de seu JAVA_HOME manualmente, pegue-o da propriedade java.home do objeto System:

String toolJarPath = "file:///"
+ System.getProperty( "java.home" ).replaceAll( "\\\\", "/" )
+ "/lib/tools.jar";

segunda-feira, 18 de fevereiro de 2013

Carregando JARs dinamicamente

Para carregar arquivos .jar dinamicamente e depois acessar uma de suas classes, você pode usar a java.net.URLClassLoader, passando para ela um arquivo usando o protocolo jar e usando !/ ao fim da string. Por exemplo:

String jarPath = "file:///C:/dev/Java/jdk1.7.0_05/lib/tools.jar";
String className = "com.sun.tools.javac.api.JavacTool";

try {
// Monta a URL com o protocolo JAR e !/ ao fim do caminho do seu arquivo.
URL url = new URL( "jar", "", jarPath + "!/" );
// Configura o loader para carregar o JAR
URLClassLoader loader = new URLClassLoader( new URL[] { url } );
// Carrega sua classe
Class< ? > clazz = loader.loadClass( className );
System.out.println( "Carregada: " + clazz.getName() );
} catch ( MalformedURLException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch ( ClassNotFoundException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Com isso, você pode, por exemplo, tentar carregar dinamicamente algum Jar usado para fazer uma conexão JDBC, sem precisar colocar todos os arquivos de vários bancos de dados em seu projeto. Fica a dica…

quinta-feira, 14 de fevereiro de 2013

“Super Wi-Fi”

O “Super Wi-Fi” (já explico o motivo das aspas), ou IEEE 802.22, deve sacudir o mercado dos provedores de Internet em breve. Por que? Um roteador igual ao da sua casa, mas com ele, cobrirá uma distântica de até 30 km! Vai chover amigo seu querendo rachar a conta de internet, pegando um plano mais caro, mesmo que seu amigo more um pouco longe… Alegre E (falando sério) vai, principalmente, facilitar o acesso das pessoas em áreas rurais.

Wi-Fi ?

O IEEE 802.22 não é Wi-Fi, mas o nome “Super Wi-Fi” acabou pegando. Em casa, atualmente, geralmente usamos uma versão do protocolo IEEE 802.11 (ex: 802.11 g) e o termo Wi-Fi, que é uma marca registrada da Wi-Fi Alliance (uma associação sem fins lucrativos, composta por mais de 500 empresas) para o IEEE 802.11, é comumente usado para ele. Como todo mundo entende quando você fala “wi-fi”, mas nem todo mundo (exceto seus amigos nerds) entende quando você fala “IEEE 802.11”, você já sabe porque o “Super Wi-Fi” pegou…

Abrangência

O roteador 802.11 que você usa em casa roda na faixa dos 2.4Ghz, a mesma do Bluetooth (IEEE 802.15) e de muitos telefones sem fio (aliás, se estiver pra comprar um, procure o que usa outra frequência). A abrangência do sinal destas redes é pequeno, geralmente se limitando à uma rede local (LAN) ou  pessoal (PAN). O WiMAX (IEEE 802.16), por exemplo, já cobre uma área maior, e já é considerada uma rede metropolitana (MAN). Já o 802.22, cobre uma rede regional (RAN?), maior que uma rede metropolitana. Sim, maior que a abrangência do WiMAX 3G ou 4G. (E isso me faz pensar seriamente em ligar pros meus amigos usando essa rede, ao invés da usada pela minha operadora de telefonia…).

A Mágica, seus Problemas e Soluções

Funcionando na faixa de frequência abaixo de 1Ghz, como a da sua TV, é que torna-se possível o sinal ir tão longe (como mencionei, até 30km). O principal problema, como você já deve ter imaginado, é a interferência. Pra começar, qual frequência abaixo de 1Ghz usar? Ela vai colidir com o de algum canal? Enquanto isto não é definido pela Anatel, não há resposta definitiva. Será preciso esperar a transição da TV analógica para a digital e, provavelmente, o acordo com as operadoras de telefonia. As faixas que sobrarem (regulamentadas) poderão ser usadas livremente.

Mas aí, como saber a melhor faixa a ser usada? Quem deve decidir isso será seu roteador. Provavelmente ele analisará as frequências sendo usadas (onde você estiver) e irá decidir qual a melhor.

Barateamento

Para os provedores da sua cidade será muito bom. Licença pra cabear, custo de cabos, mão-de-obra, …, nada mais disso será necessário. Com algumas antenas poderá ser feita a cobertura de uma cidade pequena praticamente por inteiro. Locais onde não pegam a internet hoje, ou nem mesmo chegou telefone, poderão pegar o sinal que vêm das áreas centrais. Isso sem o provedor precisar instalar um cabo.

Mas e o custo para nós, usuários finais? Em tese, tenderia a cair. Porém, será preciso saber como o provedor fará para controlar o compartilhamento da rede de seus usuários. Talvez não controle, mas cobre mais caro pelo tráfego (leia-se valor por Gigabyte trafegado). Se isso acontecer, ele mesmo irá incentivar os usuários a “rachar” o custo… Há também o fato de que muita gente acaba usando determinado provedor porque o outro não chega no local onde mora. Com a ampliação da cobertura, a concorrência ficará mais acirrada, o que pode pressionar os preços para baixo.

O que deve vir depois

Após o 802.22 deve aparecer o 802.11ac, conhecido também como Very High Throughput (VHT). Esse sim, dizem, será realmente um Super Wi-Fi, suportando transferências de 1Gigabit/segundo. Parece muito, certo? Mas pense que hoje as pessoas estão procurando ver imagens em HD e estão aparecendo as resoluções Ultra HD, com 4K, 8K e (impressionantes) 16K. Haja compressão de dados… porque sem ela, a VHT não daria nem pro começo. É aquela velha história… mais banda pra usar, maiores dados pra trafegar…

sábado, 9 de fevereiro de 2013

No meu GitHub

Há uns meses criei uma conta no github, onde havia postado algumas bibliotecas de código C++ e PHP. Aos poucos pretendo ir adicionando bibliotecas, projetos e exemplos de código, usando também outras linguagens, como Java e JavaScript.

Na minha última atualização na php-util, por exemplo, adicionei um arquivo invoker.php, que permite invocar métodos PHP parametrizados numa requisição HTTP. Por exemplo:
<script type="text/javascript" src="jquery.js" ></script>
<script type='text/javascript' >
var data = { _c : 'SomeClass', _m : 'someMethod' };
var showResponse = function( response ) {
alert( 'Success: ' + response.success
+ ' Message: ' + response.message
+ ' Data: ' + ( response.data ? response.data : '' )
);
}
$.post( 'invoker.php', data, showResponse, 'json' );
</script>

Será enviado para o invoker.php os parâmetros _c e _m com, respectivamente, o nome da classe e do método desta classe a ser invocado. O arquivo que contém a classe será automaticamente incluído, uma instância da classe criada, seu método invocado e seu retorno obtido. Sendo a execução realizada com sucesso ou não, o resultado será serializado como JSON e enviado de volta para o cliente encapsulado em um objeto Response.


Continuando com o exemplo acima, será invocado o método someMethod de uma classe SomeClass. Se esta classe for simplesmente definida como a abaixo, a string "hello" será retornada para o cliente.

<?php
class SomeClass {
function someMethod() {
return "hello";
}
}
?>
Então, será enviada uma resposta para o cliente (em JSON) como:
{ "success" : true, "message" : "", "data" : "hello" }

Isto permite automatizar coisas repetitivas, como criar um arquivo PHP simplesmente para invocar o método desejado e obter seu retorno como JSON. O encapsulamento da resposta ao cliente sempre realizada através de um objeto de Response permite padronizar a comunicação, tornando mais fácil extrair os resultados das requisições.


Por exemplo, pode-se invocar um método de uma classe controladora que irá obter os parâmetros enviados (via POST) de um formulário e salvá-los, e então saber seu retorno.


Ou, por exemplo, invocar um método que retorna uma lista de objetos para serem apresentados na tela. Esse objetos serão colocados no parâmetro data da resposta (JSON) e poderão ser obtidos e manipulados facilmente pelo JavaScript.


Baixe o código, dê uma lida, mande sugestões, correções, dúvidas. Sempre que possível, tentarei colocar coisas úteis lá.

quarta-feira, 30 de janeiro de 2013

Dica: Diff no Eclipse

Estou postando essa dica, pois sei que muita gente esquece que o Eclipse possui um diff embutido…

Para ver a diferença do conteúdo de dois arquivos lado-a-lado, como nas ferramentas de controle de versão, selecione os arquivos, clique em um deles com o botão direito do mouse e acesse “Compare With” –> “Each Other”. Simples e rápido.

segunda-feira, 21 de janeiro de 2013

Tizen

No último post falei sobre um sistema operacional para dispositivos móveis que pretende brigar por um lugar ao sol, o FirefoxOS. Nessa linha, uma outra aposta seria o Tizen, a união do MeeGo e do Bada.

Nokia e Intel trabalhavam no MeeGo – um sistema operacional (realmente) opensource que poderia substituir o Symbian – desde fevereiro de 2010. Mais de um ano depois, com o sistema operacional já na versão 1.2, foi usado no Nokia N9, mas logo depois colocado para escanteio, por questões estratégicas. A Nokia criou parceria com a Microsoft para adoção do Windows Phone e o MeeGo saiu dos planos da empresa.

No ano passado (2012), um grupo de empresas, incluindo a Intel e a Samsung, resolveu pegar o MeeGo e dar prosseguimento à ideia, relançando-o com nome Tizen. Semelhante ao anterior, ele tem seu alvo em smartphones, tablets, notebooks e smart TVs.

O projeto continua sendo hospedado pela The Linux Foundation e no momento em que escrevo se encontra na versão 2.0 Alpha, lançada em setembro passado. Ele possui uma Web API baseada no HTML5 e com bom suporte a OpenGL ES.

Na última Consumer Electronic Show, as empresas se posicionaram em relação ao projeto e seu mercado. Assim como o FirefoxOS, o Tizen – num primeiro momento – visará atender celulares de custo mais baixo (como smartphones mais simples).

O grupo espera não cometer os mesmos erros do MeeGo e acelerar seu desenvolvimento, para não perder mercado. E para ganhar ainda mais terreno, pretende se unir, ao Bada (foto abaixo), que em 2011 tinha 2% do mercado de celulares (mais que o Windows Phone).

Bada

Há quem diga que o projeto é só barganha para empresas como a Samsung se protegerem da atual hegemonia da Google, mas não representaria uma real ameaça, uma vez que as empresas continuariam adotando o Android como primeira opção. Resta esperar pra ver…

quinta-feira, 17 de janeiro de 2013

FirefoxOS

Esse eu não adicionei na minha lista de Coisas que devem bombar em 2013, mas acho que futuramente ele poderá estar em muitos celulares e tablets que vemos por aí, concorrendo com o Android. Difícil acontecer? Também acho, olhando o cenário atual, mas há alguns bons motivos pra que isso aconteça.

Em 2011, o diretor de pesquisas da Mozilla Corporation, Andreas Gal, anunciou o projeto Boot to Gecko (pra quem não conhece, o Gecko é o renderizador de páginas usado pelo  navegador Firefox). A ideia básica do projeto é a de construir um sistema operacional realmente livre, baseado em padrões abertos da web, como o HTML5 e o JavaScript. O projeto foi rebatizado em 2012 como FirefoxOS.

firefox_os_screenshots

Tá, mas o Android não é opensource? Sim e não. Você pode baixar o código, compilá-lo em sua máquina, mas não pode gerar novas versões “oficiais” sem a liberação de sua mantenedora, a Google. Isso é bom por um lado, pois impede a explosão de versões, como acontece no Linux, e dá mais segurança aos fabricantes de celulares para construir hardwares compatíveis, mas é ruim por outro, pois o controle do sistema operacional não é da comunidade, o que prende o produto às políticas e estratégias da empresa, que não são necessariamente a dos desenvolvedores. Você pode ler mais sobre essa discussão aqui, aqui e aqui.

Os outros players do mercado são o iOS (Apple), o Windows Phone (Microsoft) e (ainda) o Blackberry, e, como você sabe, eles são totalmente fechados. Mas não é a questão “ser aberto” ou “ser fechado” que realmente importa. O problema maior talvez seja que os desenvolvedores de aplicativos para dispositivos móveis tenham que criar versões diferentes para cada sistema operacional com que queiram trabalhar, porque suas APIs são bem diferentes.

Talvez o mais importante do FirefoxOS é o uso de uma WebAPI, em que a comunicação entre o SO e a aplicação é realizada através de HTTP, deixando a aplicação desacoplada dos detalhes do SO. Você envia a requisição via GET ou POST e recebe a resposta como XML ou JSON, o que é extremamente comum hoje para quem desenvolve aplicações web. Além de ser natural para muitos desenvolvedores, diminuindo a curva de aprendizado em comparação à outras APIs, reduz o custo de investimento da empresa, tanto na contratação de funcionários fortemente especializados, como em treinamento, uma vez que esses padrões abertos (HTML, CSS, JavaScript, JSON, XML, etc.) já estão bem difundidos.

Será bastante difícil que o FirefoxOS cresça tão rápido como foi com o Android e, ainda assim, ameace sua hegemonia atual. Muita gente já investiu nessa plataforma e não quer jogar fora o que gastou. Mas pode ser que comecem a considerar o FirefoxOS como uma opção interessante, de baixo investimento e possível bom retorno. Para isso, é preciso o apoio – e investimento – dos fabricantes (como já fez a Qualcomm e a Deutsche Telekom e está fazendo a Telefónica), ganhar visibilidade (o que está acontecendo, em vista de sua participação nas grandes eventos da área, como a Mobile World Congress) e mostrar seus benefícios frente aos concorrentes. Nesse último item, entra a web como plataforma.

The web is the plataform

A ideia de “web como plataforma” pode consagrar frameworks como o PhoneGap para a construção de aplicações que rodem nos diversos SOs e pode acabar com os problemas de criar aplicações diferentes para cada sistema operacional.

Se a web se tornar o padrão para dispositivos móveis, criar aplicações usando o Android SDK, o Windows Phone SDK, o iOS SDK, ou qualquer outro, será coisa do passado.

E com todos os recursos do HTML5, CSS3 e do JavaScript (ECMA Script 5, vindo a versão 6 por aí…), é possível que isso acabe acontecendo.

Enfim, mesmo que o FirefoxOS não emplaque, a ideia de ter a web como o padrão para construção de aplicações faz cada vez mais sentido.

domingo, 13 de janeiro de 2013

IllumiRoom

A Microsoft apresentou na CES 2013 (Las Vegas) o IllumiRoom, uma espécie de projetor sincronizado ao Xbox que permite melhorar a imersão no jogo, com a apresentação de conteúdo adicional ao redor da tela, expandindo a área de percepção do ambiente. O resultado parece muito bom…

 

O aparelho deve ser lançado em breve, talvez junto ao Xbox 720 ou ao Kinect 2.

quinta-feira, 10 de janeiro de 2013

Coisas que devem bombar em 2013

Recentemente surgiram algumas coisas que penso que devem bombar esse ano. Algumas já começaram a fazer sucesso lá fora e devem aparecer por aqui daqui a pouco tempo. Outras, acredito que demorarão um pouco. Se minha bola de cristal não falhar, veremos algumas destas coisas rodando por aí já este ano… (ou, no máximo, ano que vem).
 
crystal-ball2

Scratch

Conheci o Scratch em 2009 (ele foi criado, oficialmente, em 2006). Cheguei a instalá-lo na minha máquina e ver como funcionava. Lembro de ter achado ele bem interessante, como um grande potencial para criar aplicações sem ser necessário saber programar, ou mesmo para facilitar o ensino de programação. Desde lá, ele havia caído um pouco no (meu) esquecimento, até que há pouco tempo vi algumas notícias sobre seu uso em escolas, como ferramenta de ensino de programação para crianças de 6 a 8 anos. Sim, crianças estão aprendendo a programar, e isso não significa que elas irão ser programadoras no futuro. A ideia é que elas aprendam a aproveitar mais do computador, como uma ferramenta para criar coisas, não só se limitando à usar coisas.
 
As crianças aprendem matemática, biologia, física, química e outras disciplinas, mas por que não programação? Quantas horas um adolescente fica na frente do computador hoje em dia? Se ele soubesse como tirar mais proveito do hardware que tem nas mãos e começasse a construir coisas que pudesse resolver seus problemas (ou o dos outros), poderíamos ter um grande avanço na área. Então, por quê não? Penso que a pergunta feita pelas pessoas que o estão adotando seja justamente esta. E por isso acredito em seu potencial.
 
image
 
Para saber mais:

Raspberry Pi

O Raspberry Pi (RP) foi também criado em 2006, com o intuito de construir um computador barato, que pudesse ser usado por crianças. Com a queda dos preços, foi criado um computador razoável a um preço bem justo – algo entre 25 e 35 dólares. Daí, à medida em que a tecnologia vai evoluindo e os preços vão caindo, novas versões são lançadas.
 
raspberry_pi
 
Hoje ele é como na foto acima. O cartão de memória ao lado serve apenas para dar idéia do tamanho. Ele vem com processador ARM 11 de 700 Mhz, Videcore de 4 GPU (Full HD), 512MB de RAM, duas portas USB, uma Ethernet, uma saída HDMI, uma saída RCA, uma saída de áudio e uma entrada para cartão SD. Mede 85.60mm x 56mm x 21mm (é do tamanho de uma carteira) e pesa 45 gramas. Roda o (Linux) Debian. E funciona até com 4 pilhas AA alcalinas!
 
RaspiModelB-1024x902
 
Diferente do Arduíno que é uma plataforma de hardware opensource, o RP usa componentes proprietários, mas tem uma fundação sem fins lucrativos por trás, a Raspberry Pi Foundation. Veja que o Arduíno (que já fez e continua fazendo sucesso) costuma ser mais caro que um RP.
 
Bom, você deve estar se perguntando, você acha que ele vai bombar só porque é barato? Não só, mas acontece que isso é muito importante, pois faz ele entrar em casas e escolas de pessoas que não tem condição de comprar desktops, notebooks ou tablets.
 
Outro fato que penso que irá impulsionar seu uso é o Scratch. Sim, esse que você acabou de ler acima. O Scratch está sendo usado no Raspberry Pi, o que unirá o melhor dos dois mundos. E depois, se a molecada ficar esperta, pode aprender a programar em Python, a linguagem padrão do RP. :)
 
Para saber mais:

Ouya

O Ouya é um videogame opensource que ainda será lançado esse ano (2013). Sua ideia nasceu ano passado e foi submetida ao Kickstarter, uma plataforma de financiamento coletivo (crowdfunding). E foi um dos projetos de maior sucesso lá, levantando impressionantes US$ 8 milhões.
 
Feito pra ser acessível – o que deve impulsioná-lo –, custará 99 dólares (lá fora, claro). Rodará Android (4.1), o que significa (ao menos em tese) que games feitos pra Android rodarão nele. E, por ser opensource, possibilitará que desenvolvedores explorem seu potencial ao máximo.
OUYA Console
O hardware terá processador Tegra3 Quad-Core, 1GB de RAM, 8GB de armazenamento flash interno, conexão HDMI com suporte a Full HD, WiFi 802.11 b/g/n, Bluetooh LE 4.0, uma porta USB 2.o, uma porta Ethernet e dois joysticks sem fio.
 
Não, os games não serão gratuitos. Mas todos deverão ter uma versão jogável (tipo um demo ou trial). Isso é legal, pois dá pra experimentar qualquer jogo antes de comprar.
 
Por falar em games, se a plataforma não tiver jogos legais não fará sucesso. Por isso, algumas empresas – principalmente no Japão – já estão anunciando games para Ouya. A Square Enix, por exemplo, anunciou o Final Fantasy III. A Namco Bandai também está fazendo parceria com a Ouya. Mas há poucos games e parceiros por enquanto. Penso que muitos esperarão seu lançamento para começar a investir.
 
Mas, enfim, por que acho que um videogame barato, inferior ao Xbox ou ao Playstation em gráficos fará sucesso? Porque além de ser barato, o intuito do Ouya é parecido com o do Wii, o de fazer games divertidos, mas a um custo acessível. E principalmente, o que deve impulsioná-lo é o fato de ser opensource e assim facilitar a entrada de criadores de jogos independentes no mercado. Provavelmente haverá uma “Ouya Store” e as pessoas comprarão jogos de forma semelhante ao que fazem para iOS ou Android. E o diferente é que poderão jogar na TV, juntos (fisicamente) dos amigos, e não somente em rede, como acontece hoje para os smartphones.
 
Para saber mais:

quarta-feira, 9 de janeiro de 2013

return me;

Cerca de dois anos sem blogar e aqui estou... Peço desculpas aos meus eventuais leitores. Afinal, mesmo com o blog parado todo esse tempo, as estatísticas do Google informam, no momento em que escrevo, 6.479 acessos, sendo 368 no mês passado. Sei que é pouco, mas, sinceramente, nem esperava isso.
Nesse tempo, como dizia meu avô, "muita água passou em baixo da ponte". Então, vou tentar retomar as coisas aos poucos, escrevendo esporadicamente sobre alguns assuntos aleatórios. Espero que gostem. Aliás, sempre que puderem, deixem seus comentários.

PS: Só para registro, já que meu último post havia sido sobre o I Dojo, ocorreu um II Dojo naquele ano, ainda melhor que o primeiro. E como o tempo encurtou, não rolou nenhum outro depois. Mais isso deve mudar em breve... ;)