Milk News

1 Julho, 2009

Google DevDay’09 – Corporações, o próximo alvo!

Arquivado em: Google, Nerdices, Sem Categoria — Marcelo @ 12:31 am

Se na época do DevDay 2008 escrevi aqui que a mensagem subliminar do big brother, digo, Google,  era “desenvolvedores, eu preciso de vocês”, a mensagem subliminar do DevDay 2009 foi para o mercado corporativo. Calma ai que eu explico.

O Google fez sua fama em cima da  qualidade dos resultados das buscas e de produtos direcionados as pessoas, ao usuário final.  Criando, comprando empresas criativas, reinventando o que se acreditava não ter mais o que inventar (exceção ao Orkut que na verdade comecou mais como brincadeira de um dos seus engenheiros – O Orkut- do que um produto que formalmente saiu das trincheiras da empresa e talvez porisso no início seu servico era muito problemático),  montou  um  bom portifólio – pesquisa, redes sociais, mapas, vídeos, leitores de RSS, mensagens instantâneas e agora um browser-  e ganhou a simpatia de uma boa parte dos internautas no planeta.  Não vou entrar nos méritos de como consegiu um portifólio desses, mas no fato que muito usuário não acharia mais graça na internet se não existissem os seus produtos.

Mas, voltemos ao evento. Este ano não foi tão hot quanto o do ano passado, mas tiveram duas apresentações que se destacam e me fazeram chegar a conclusão daí de cima.

O primeiro produto é o Google Wave.  Disseram os engenheiros no evento que “repensaram como seria o e-mail se fosse criado hoje” e criaram um produto realmente fantástico. É mais que um email ou uma ferramenta de colaboração. É difícil de resumir o que o produto faz, é uma mistura entre rede social, fórum, email, blogs, edição de documentos e CMS.  Comece um tópico, adicione pessoas a este tópico, interaja, adicione as mídias que quiser (foto, vídeo, audio), contrua micro-aplicações se desejar.  Faça um live chat com alguém de língua nativa diferente da sua com correção ortográfica e  tradução simultânea.  Videoconferência. Tudo isso no mesmo produto, praticamente na mesma tela.

Legal? MUITO. Usuários vão gostar? Bastante!  Mas, a quem realmente interessa um produto desses?  O potencial cliente são as corporações.  Problemas de comunicação, de documentação de procedimentos e de tomadas de decisão, de entraves por conta da língua nativa de cada um dos interlocutores de uma conversa são problemas comuns entre sua família, seus amigos? Eu acho que não, mas é certo que já passou por esse tipo de problema durante sua jornada corporativa.

Aí o amigo leitor vai pensar “nossa, que produto fantástico, se fizer tudo isso mesmo vai custar fortunas”. Nada disso, é uma inciativa open-source.  “vai precisar de um monte de servidores, ser um produto que precisa muito de hardware…” hummm, talvez. Mas aí vamos falar do segundo produto que não é muita novidade, mas também me chamou a atenção.

O Google App Engine é um produto que permite que desenvolvedores hospedem suas aplicações nos  servidores da própria Google, a famosa nuvem.  Quem já participou de uma instalação de uma aplicação mais parruda sabe quanto tempo (e dinheiro) é gasto com estratégias de fail-over, cópia de segurança, testes de performance , maquinário…e mesmo assim, as falhas vez ou outra aparecem.

O que o google propõe é que o desenvolvedor se prenda somente ao desenvolvimento, a criar novas features e implementar as regras do (seu) negócio,  a instalação,  deixa com o Google que resolve.  Quanto custa toda essa facilidade?  Depende. Até certo número de utilização da CPU e de banda, sai de graça. Após isso, cobra alguns centavos pelo excedido.

Volto a pergunta, a quem interessa isso? Quantas aplicações o amigo leitor programador  já escreveu para resolver problemas corriqueiros da vida, da sua família, da sua casa?   Mas assim como eu ganho a vida escrevendo programas de computador, você deve ganhar o seu sustento direta ou indiretamente com desenvolvimento de software.  Então, a quem interessa mais um produto desses, que incentiva a colaboração interna e de terceiros e ainda de brinde desonera o custo de datacenter e suporte próximo a chegar a nenhum tostão?

Para resumir: na minha opinião, o Google agora além de dominar os serviços para o usuário final, bate na porta para entrar no mundo corporativo, inovando. Se eles já tem boa parte dos dados da sua vida, vão agora partir para as informações das empresas, dados trancados á 7 chaves dentro das intranets e dos emails corporativos.

Então…o que se propõe é isso:  Use o Wave e não precisa mais se preocupar com mantê-lo no ar.  O Google cuida disso para quem quiser a um custo muito baixo. E se tiver que escrever algum programa (inclusive alguma extensão para o Wave),  também pode se  hospedar no Google para  que se preocupe com o que realmente interessa.

Teoria da Conspiração? Sim, um pouco.
Se é bom ou ruim, também não sei. E eu vou é mandar meu currículo para lá . rsrsrs

Sobre o Google Wave, clique aqui (o vídeo é longo, mas vale muito a pena)
Sobre o AppEngine, clique aqui.

30 Junho, 2008

Sobre o “Google Developer Day”

Arquivado em: Google, Java, Nerdices — Marcelo @ 11:31 pm

- 800 e tantos participantes e no que eu contei, somente QUATRO participantes do sexo feminino. Por onde andam todas aquelas meninas da faculdade craques em cálculo e álgebra e que eu apostava todos meus centavos que seriam excelentes desenvolvedoras de software ?!?

- Ainda sobre a participação feminina, das 4 que eu vi, duas estavam com um cão-de-guarda ao lado (namorado, marido, peguete, sei lá!), uma eu não sei dizer e uma desacompanhada.  Até a hora do almoço, tinha sido o primeiro a puxar papo com esta última !!!

- A Google, com todas as letras, diz para os programadores do mundo: Eu preciso de vocês!

Tio Sam Google says: Developers, I want you!

- Ou se presta atenção na palestra ou se faz post ao vivo no blogger, twitter e coisas do tipo. Tem muita gente que prefere a segunda opção….

- Programadores que falam/lêem/compreendem Inglês é minoria.
Acho isso MUITO grave!

- Dick Wall:  Queira Deus que dia eu chegue no nível dele. O cara é muito, MUITO bom!

- Stephanie Liu: Uma nipo-americana simpática, que fez uma API fantástica, mas para mim, sem utlidade.

- Android: Cobro barato para desenvolver qualquer coisa nele, só pela diversão!

- TV Digital: Porque a Google ainda ignora um canal tão fantástico para distribuição de conteúdo ?

Em resumo: A Google deve ser um lugar muito divertido para trabalhar e se aposentar.
Se der, 2009 estarei lá novamente!

1 Junho, 2008

Tabelas em Memória no MySQL

Arquivado em: Google, MySQL, Nerdices — Marcelo @ 12:31 am

Venho de uma sequência de trabalhos de mais ou menos uns 7 anos só com o Oracle.
Por conta de uns sistemas legados do que estou tendo que mexar agora, estou aprendendo a lidar com o MySQL. Não é lá um BD ‘porreta’ como o Oracle, mas considerando que ele é de graça, dá pro gasto. :)

Um dos recursos bacanas que descobri é que se pode criar uma tabela em memória no BD.
Para uma máquina sobrecarregada com operações de I/O, tabelas com muita frequencia de leitura/escrita, mas que os dados sejam bastante voláteis (por exemplo, a navegação de um usuário de um website mantida na sessão) é um recurso bastante interessante.

Coisas importantes a saber sobre tabelas em memória:
- Uma vez criada uma tabela em memória, ela permanece no schema, mas se o BD for resetado, os dados nelas contidos são perdidos.
- Tabelas mantidas em memória não podem conter campos do tipo BLOB ou TEXT

No exemplo que fiz abaixo, crio uma tabela de frases em memória e logo abaixo, faço a inserção de conteúdos nesta tabela em memória a partir de outra tabela (o MySQL é ‘inteligente’ o bastante para entender que se acabei de criar uma tabela e logo abaixo estou fazendo uma consulta é para ele inserir o resultado desta na tabela criada na instrução acima)

CREATE TABLE tmp_frases (id INT not null,
frase varchar(100) null,
index(id))
ENGINE = MEMORY
SELECT @rownum:=@rownum+1 as id,
t.frase
FROM (SELECT @rownum:=0) r,
textos t
where t.categoria = ‘Piadas’;

Moleza!
Depois de criada e utilizada, convém fazer o DROP TABLE da tabela para liberar memória do servidor do MySQL.

Quer saber mais? MySQL.
Leia esse aqui também.

31 Maio, 2008

Google Developer Day 2008 Brasil

Arquivado em: Google, Nerdices — Marcelo @ 2:42 pm

é nóis nessa fita!  ;)

26 Maio, 2008

Como fazer uma chamada HTTPS

Arquivado em: Google, Java, Nerdices — Marcelo @ 1:27 am

Coisa mais comum em programação é ter que consultar algum sistema legado em uma interface HTTP. Não estou falando de Webservices ou qualquer coisa mais moderininha, mas simplemente fazer uma chamada HTTP a seja lá o que for. Desde a JDK 1.4 (se não me engano), temos a classe java.net.URL, que facilitou um bocado as coisas.

Mas…e quando se tratar de uma chamada a um servidor seguro (https) ?

Aí a coisa complica mais para quem é leigo e nunca estudou a fundo o protocolo HTTP.
Importar certificados, checar se o mesmo é válido e outras coisinhas que para explicar direito, teria que falar sobre alguns conceitos de como funciona o HTTPS. Mas, se você não está interessado em nada disso (se está aqui, eu acredito que não esteja) e confia no endereço que está chamando, sem checar certificados e validade das chaves, copie a classe Java abaixo.

Eu aceito postais como pagamento :)

package com.milknews.examples;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.log4j.Logger;

/**
 * Makes a HTTPS call and returns the content as string
 *
 * @author milknews.wordpress.com
 *
 */
public class HTTPSCaller {

    private static final Logger log = Logger.getLogger("com.milknews.examples.HTTPSCaller");

    /**
     * @param args
     */
    public static void main(String[] args) {
	String url = "https://example-to-https-site:8080";

	System.out.println(httpsCaller(url, "put the postdata here", 1000));
    }

    /**
     * httpsCaller
     *
     * @param URL
     * @param data
     * @param timeout
     */
    private static String httpsCaller(String URL, String data, int timeout) {
	log.info("[httpsCaller] called, URL: " + URL + " data: " + data
	        + " timeout " + timeout);
	String httpResponse = "";
	try {
	    URLConnection conn;
	    URL url = new URL(URL);
	    acceptSSL();
	    conn = url.openConnection();
	    conn.setReadTimeout(timeout);
	    conn.setDoOutput(true);
	    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
	    wr.write(data);
	    wr.flush();
	    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
	    String line;
	    while ((line = rd.readLine()) != null) {
		httpResponse = httpResponse + "\n" + line;
	    }
	    wr.close();
	    rd.close();
	} catch (IOException e) {
	    log.fatal("[httpsCaller] IOException", e);
	    e.printStackTrace();
	}
	httpResponse.replace("\n", "");
	httpResponse = httpResponse.trim();

	log.info("[httpsCaller] response is: " + httpResponse);
	return httpResponse;
    }

    /**
     * acceptSSL
     */
    private static void acceptSSL() {
	// Create a trust manager that does not validate certificate chains
	TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
	    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
		return null;
	    }

	    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {

	    }

	    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {

	    }
	}

	};

	// Install the all-trusting trust manager
	try {
	    SSLContext sc = SSLContext.getInstance("SSL");
	    sc.init(null, trustAllCerts, new java.security.SecureRandom());
	    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
	} catch (Exception e) {
	    log.fatal("[Exception]", e);
	}
    }

}

Blog no WordPress.com.