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!

Da série “é ruim, mas eu gosto”

Arquivado em: Música — Marcelo @ 10:23 pm
Sabe aquelas coisas que ninguém tem coragem de admitar que gosta?  Esse disquinho aqui entra para essa minha (complicada) lista. A princípio juntar sucessos da Madonna, The Clash e outras bancadas perdidas nos anos 80 num ritmo “cool jazz” soaria meio esquisito. E é verdade, soa.

Mas quem disse que não é bom? Tá afim de escutar uma musiquinha tranquila, para desligar os neurônios? Bota na vitrola e seja feliz ;)

20 Junho, 2008

O Teorema do “Vou, Não Vou”

Arquivado em: Nerdices — Marcelo @ 1:34 am

Tendo na mão as seguintes variáveis:

A: Quantidade de álcool na cabeça;
B: Tempo (em dias) que o sujeito não pega ninguém;
C: Feiúra da mulher, num grau de 0 a 10 (quanto mais feia, menor a nota)

resulta na seguinte fórmula:

K=A x B x C , onde K é uma constante

Conclusão do teorema:
Não existe mulher feia.
Beba mais ou fique um bom tempo sem pegar ninguém.

(O teorema original foi publicado aqui. Não consegue ler em outra língua? Se vira!)

7 Junho, 2008

Enquanto isso, no Messenger…

Arquivado em: Diarinho, Nerdices — Marcelo @ 12:52 am

Sexta á noite, eu cansado demais (das 24 horas de um dia, hoje eu passei 5 no transito!) e estou eu conversando com uma amiga minha, de RH e Headhunting:

(ela) – Estou pasma…tem um anúncio de uma lista de empregos que quer um candidato bissexual.
(eu) – Como assim?
(ela) – É…isso mesmo, um Bissexual
(eu) – Mas…que anúncio é esse?
(ela) – Está aqui escrito. Analistas de Sistemas BI.

Ela é uma pessoa super divertida e muito inteligente, e por essa razão eu ainda não sei se ela estava falando sério ou resolveu fazer uma piadinha boba comigo (coisa que não é incomum).

Mas isso serviu de um lembrete para eu prestar mais atenção no que escrevo. ;)

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!  ;)

27 Maio, 2008

Meus Padrões de Projeto

Arquivado em: Design Patterns, Java — Marcelo @ 1:40 am
Seus problemas acabaram! Se você é um programador que gosta de fazer as coisas do jeito certo e tem gosto por fazer os códigos mais belos de toda a equpe, já deve ter por alguma vez caído na seguinte questão d’alma:- O que estou escrevendo é a melhor solução?

Ou ainda, no meio de um problema que está difícil encontrar a solução que te agrade:

- Caramba, mas será que ninguém já passou por esse problema ?

Situação pior ainda, quando por algum motivo, você tem que fazer manutenção naquele código que escreveu anos atrás quando ainda era um menino juvenil na arte de escrever um bom codigo:

- P#$%!@! Porque escrevi essa m#%$@ desse jeito! Agora vai dar maior trabalhão alterar isso.

Se respondeu “SIM” a alguma dessas questões, seus problemas acabaram! Design Patters é o produto que vai solucionar todos os seus problemas! :)

Brincadeiras a parte, pense:

- A não ser que você esteja prestes a solucionar o teorema de Gödel, alguém já passou pelo seu problema e ver a solução do outro no mínimo te trará uma margem de comparação para dizer se a sua solução é a ideal;

- Todo o código (eu disse, TODO) é passível de no futuro ser alterado. Mesmo aquela “cosinha rápida”, “que vai sair do ar mês que vem”, pode apostar: um dia você ou outra pessoa terá que mexer.

É aí que aparece a necessidade para, problemas parecidos se tenham soluções parecidas.

As vantagens a primeira vista são facilidade de manutenção (já se conhecendo a lógica e estas serem flexíveis, as alterações se tornam mais rápidas) e a diminuição do tempo de aprendizagem de um sistema para manutenção (se o código é todo padronizado, basta que o mantenedor da aplicação conheça os padrões aplicados para começar a produzir) . Mas, acredite, as vantagens são maiores do que essas duas que citei.

Mas nem tudo são flores.

Aplicar algum Design Pattern a uma solução é algo que sempre tem de ser elogiado, mas tome cuidado! Exagerar no seu uso pode ser um tiro no pé: a manutenção ficar complicada demais, o nível de abstração para o entendimento tornar o código ilegível, enfim…bom senso sempre!

Design Paterns é um assunto que quanto mais se estuda, mais aparece um padrão novo, em contraposição a um existente. Cada um tem suas vantagens e desvantagens, cabe a cada a um a inteligência para usá-los na situação correta.

Eu pretendo aqui apresentar os que conheco e mais utlizo (acho que uns 20 no total).

and…be welcome!

É ensinando que se aprende!

Arquivado em: Diarinho, Nerdices — Marcelo @ 12:38 am

Em algum lugar no passado, não sei aonde, li ou escutei que a maior taxa de retenção de conhecimento se dá quando se ensina algo. Se é assim, vou ensinar um monte de coisas que preciso fixar melhor na cabeça.  ;)

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);
	}
    }

}
Próxima Página »

Blog no WordPress.com.