30 março 2009

Leverage EIP with Apache Camel and Twitter: Part 2

On my first post I introduced you about a problem a customer brought to me to solve. And I thought using Apache Camel to advertise on Twitter could actually fit into his business needs (and mine as well). The first thing I had to think about was on how to receive ads from different customers in different formats. This way I could let them continue to use any format they are already using to publish ads online.


Fig 1. receiving advertisements

To receive messages in different formats is easy. Just open endpoints where they can connect to and publish their files/messages/whatever. Camel comes with a lot of different components to implement these “incoming” endpoints. I had to put some Pipes and Filters before the Message Normalizer to load data into Message Exchange headers, and to drop invalid messages.

After a valid message arrives into CamelContext, they need to be normalized to a common format. Using the pattern Message Normalizer (a Content-based routing connected to different message translators), I convert all messages into TweetAd Java objects. This class looks like this:
public class TweetAd {
private TwitterAccount account;
private String advertisement;
// getters and setters
}

To translate messages, I did something like this kind of route:
    from("file:ads-inbox")
.to("bean:loadTwitterAccountHeaders")
.to("bean:transformIntoTweetAd")
.to("direct:tweets");

Cool, now I have a normalized Twitter Advertise a. What's next? Just forward it to a Message Endpoint that publishes TweetAd objects.

I didn't want my Twitter Publisher to require all incoming messages to be a TweetAd object type. So I've coded it in a way that could also publish whatever String context that message could supply. If the Message Exchange's body wasn't a TweetAd, with a valid TwitterAccount object associated to it, this endpoint would require username and password.
This is how my route looks like after having a valid TweetAd object:
    from("direct:tweets").to("twitter:publisher");

And I could have routes like this, for non-TweetAd objects:
    from("bean:amazonAWSAds")
.transform(body().convertToString())
.to("twitter:amazon?user=amazon&pass=nozama");

Done. Now I can publish ads coming from different customers, in different formats, to different Twitter accounts massively. Problem 1 solved. On my next post I will show you the code of Twitter Publisher.

See ya!

26 março 2009

Leverage EIP with Apache Camel and Twitter

I had no clue Enterprise Integration Patterns could actually work together with Twitter, for a business need. The thing is that, everybody is looking for ways to integrate everything within everything. And that's what this article tries to explain.

The idea to integrate Apache Camel and Twitter came when a customer was looking for a way to advertise on Twitter into different accounts, each one for different segments as no one actually wants to follow 100+ departments in the same account. That said, the enterprise will have 100+ Twitter accounts and its customers will now be able to follow only the departments they actually want to.

To create a lot of different accounts, there's nothing we could do about it. But to tweet a lot, well, that was piece of cake. Now, the advertisement system can be easily integrated with Web Services, file upload, Web requests, etc. A server that can tweet for different enterprises, sending messages in any format, to advertise.

Another interesting thing to do is to follow customers from these enterprises. If they put on their accounts their Twitter screen names, we can easily follow them and massively process everything they are talking about. Then see what's going on about new tendencies, products and services.

Apache Camel is a great EIP framework that can be embedded into different applications, from Web to Desktop. Twitter4J is a great API developed by Yusuke Yamamoto. With these two libraries all I mentioned previously can be easily achieved.

To give an idea, here is an example:


public class TwitterRoute extends RouteBuilder {
public void configure() throws Exception {
// Message Channel - polling ads from files
from("file:ads-inbox")
// MessageTranslator
.transform(body().convertToString())
// Tweet it!
.to("twitter:tweetit?user=cameltweet&pass=***");

// get all friends timeline from user 'brunoborges' and wire tap them
from("twitter:tweets?user=cameltweet&pass=***&type=FRIENDS&follow=brunoborges")
.transform(body().convertToString())
.to("bean:wiretap");
}
}


On my next post I've put more details about the architecture involving Camel and Twitter.

** UPDTE 03/30/09 **
If you are interested in this component and architecture, please read the Part 2.

See ya!

20 março 2009

Era digital: tweets, blogs e a evolução humana

Séculos atrás, ou talvez nem tanto assim, eram poucas as pessoas com quem podíamos nos comunicar. Hoje qualquer humano na Terra, conectado à Rede, pode saber quem você é, o que você faz, quem você conhece, o que você pensa, o que você ouve, onde você já foi ou ainda onde você está neste exato momento. Nos tempos atuais, também é possivel saber o que você anda comprando na Internet, quais seus interesses, seu perfil econômico-social e suas tendências.

Tudo isso é possível porque em algum momento, você permitiu. É irônico ver pessoas reclamarem de serviços que permitem isso ou aquilo. O que estes sociofóbicos não percebem é que nós, seres humanos, queremos ser públicos, ser vistos, ser notados por outros seres humanos. Nós optamos em deixar privacidade de lado.

É sensato dizer que a tempos atrás, pouco sabíamos das pessoas residentes de alguns bairros distantes do nosso. Ou mesmo de apenas 3 ou 4 quadras ao final da rua. Hoje, sabemos mais de um estrangeiro residente em Veneza, do que talvez um primo que ainda não possui Internet em casa.

Com a possibilidade de tornar a nossa vida pública, também vem a possibilidade de deixar que todos nos vejam pisando na bola, fazendo alguma besteira ou simplesmente, pagando o maior mico. E eu estou falando de atos leves; imagine outros pesados. Sim, aquele comentário que você fez no blog da sua amante, quando nem imaginava que a sua esposa assinava o RSS dela. :-)

"Vivemos a era da exposição e do compartilhamento. Público e privado começam a se confundir. A ideia de privacidade vai mudar ou desaparecer.” (Revista Época - 13/03/09)
Antes de realizarmos qualquer atitude hoje em dia, pensamos se não há alguém com um celular filmando a cena, ou se o que postaremos em um site poderá ser visto por alguém que não deveria. A Maldição dos Scraps no Orkut é um exemplo típico de "medo" que temos, por ter feito algo errado na vida real. Ter ficado com aquela garota na balada, ela te achar no Orkut e mandar um recado inocente, sem perceber que o seu estado civil é casado, é um de muitos casos onde nossas atitudes na vida real, podem ser facilmente divulgadas na vida virtual.

Entre querer ser público, e querer ter medo de um flagra, a maioria de nós prefere a primeira opção. É do ímpeto humano não querer admitir medo, e convenhamos, todos nós gostamos de um carinho no nosso ego. Nada melhor do que saber que existem outros por ae interessados em nossas vidas.

A evolução humana pode estar diretamente relacionada com a era digital. Fidelidade, companheirismo, honestidade, voluntarialismo, amizade, sinceridade, são adjetivos que queremos colher. Se nos abdicarmos da privacidade nos ajudar indiretamente a sermos pessoas melhores, então estamos diante talvez do ponto mais acelerado da evolução humana na história.

Aos que optam por tornarem suas vidas públicas, o medo de "vacilar" se transforma em coragem de fazer o que é certo, e consequentemente, evoluir. Blogs que expressam idéias, tweets que expressam sentimentos, álbuns de fotos que mostram o passado, redes de relacionamento que definem nosso gênero cultural. Estes fatores da nova era digital, e tantos outros serviços que servem para tornar público o que antes queríamos que ninguém soubesse, acabam de se tornar em os catalizadores da evolução humana.

Eu quero evoluir, e você?

10 março 2009

TIM Web: A farsa do Pacote Ilimitado


Matemática. A TIM, e tantas outras operadoras de telefonia não devem lembrar muito dessa disciplina. Ou então talvez alguém esqueceu de ensinar a eles que um carro (A) a 50km/h só consegue percorrer 50km em 1h, enquanto um carro (B) a 100km/h pode ... olha só ... percorrer 100 km no mesmo tempo.

Mas é claro, não podemos esquecer que os motores destes carros possuem limitações. Mecânica e etc. Então, vamos imaginar que o máximo, em 100% de performance, num "Sistema Ideal" (essa veio das aulas de Física), de velocidade que eles podem atingir sejam, respectivamente 50 km/h e 100 km/h.

Continuando neste simples exemplo, fica fácil determinar quantos kilometros cada carro pode percorrer em 1 mês (de 30 dias - Fevereiro não faz parte do S.I... certo?):


CarroVelocidade1 dia1 mês
A50 km/h1.200 km36.000 km
B100 km/h2.400 km72.000 km


Ora vejam só. O carro B consegue percorrer em 1 mês o dobro que o carro A! :-) A matemática é fascinante, não? Tenho certeza que você leitor conhece muito bem esta maravilhosa disciplina. Mas eu preferi revisar para que possamos alinhar nossos pensamentos, e tentar nos próximos parágrafos, entender que tipo de Matemática os gênios do Departamento de Produtos das operadoras, utilizaram para definir os planos de Internet Banda Larga 3G.

Vamos às compras!

Que tal começarmos com a mais poderosa, a que... não possui limites! Ou melhor, a que "vive sem fronteiras! A TIM!! Esta operadora oferece incríveis "carros" para o consumidor brasileiro. Os 3 planos "ilimitados" de 600Kbps, 1Mbps e 7Mbps. Antes de calcularmos estas velocidades, vamos revisar as siglas de transferência de dados e de taxas de comunicação.

Kbps / Mbps = taxas de comunicação
Estas referem-se à velocidade em que o seu modem, ou o celular, se comunica com a central. Devemos ler desta forma: Kbps = Kilo bits por segundo. Ou, Mbps = Mega bits por segundo.
Observação: Kilo = mil; Mega = milhão.


KBs ou MBs = taxas de transferência de dados
Estas referem-se à velocidade que nós estamos acostumados a visualizar nos programas de download. Algo como... "nossa, baixei um MP3 a 80KBs!".

A diferença entre estas notações está na letra "B". Quando minúscula, significa "bit". E maiúscula, significa "byte". Para realizarmos o cálculo do máximo que cada plano pode trafegar (ou percorrer) no mês, vamos converter os planos para as taxas que entendemos melhor:

600 Kbps = 075 KB/s 001 Mbps = 125 KB/s 007 Mbps = 875 KB/s
Não entendeu? 1 byte possui 8 bits. Então basta dividir 600 por 8. ;-)

Ok. Melhorou assim? Tenho certeza que sim. Agora, que tal aquela tabela dos carros, mas agora vamos ver como ficam os planos. Primeira coisa que precisamos fazer, é calcular quantos KBs podemos trafegar por hora. Huma hora possui 3600 segundos. Então:

PlanoVelocidade1 hora1 dia1 mês
600 Kbps75 KB/s263 MB6 GB189 GB
1 Mbps125 KB/s440 MB10 GB308 GB
7 Mbps875 KB/s3 GB72 GB2 TB


Nossa!! Você viu quanto que o plano de 7 Mbps pode baixar de dados? 2 Tera bytes! Isto permitiria você vender a sua televisão e daqui pra frente assistir somente ao YouTube! Televisão online, rádio online, tudo! Incrível, não? :D Pena que isto só aconteceria num "Sistema Ideal", onde as operadoras possuissem infra-estrutura de qualidade que aguentasse toda esta demanda.

Mesmo em um sistema heterogêneo, com variações nas velocidadesdevido a condições naturais como clima, localização, prédios e interferências de outras antenas, estes valores teriam uma variação em média de 35%. Ainda assim continuaria elevado demais para o que as operadoras podem efetivamente atender. Ora, qual a solução? Um rapaz no canto da sala, provavelmente estagiário no Departamento de Produtos, recém chegado do Departamento de Marketing, com toda a sua experiência em anunciar o que não pode oferecer, sugeriu: "vamos colocar uma cláusula que diga que possamos diminuir a velocidade a qualquer momento!". Ninguém lembra o nome dele, mas eu juro que o filho da mãe recebeu uma bela de uma bonificação!

Pronto. As operadoras resolveram o problema da falta de infra-estrutura. Ao invés de investir para agradar os clientes, eles preferiram irritar os clientes, cobrar caro, e a bom gosto limitar os pacotes para que as suas infra-estruturas de redes não entrassem em colapso geral.

Vamos ver na prática a solução sugerida pelo fdp do estagiário. No caso da TIM, após transferir (não importa se é upload ou download) pela rede o total de 1GB, ela tem direito de reduzir a velocidade do cliente para qualquer valor que a mulher do presidente cuspisse no prato pela manhã, no dia em que o infeliz estava redigindo o contrato. Ela cuspiu, vejam só... 200! Sim... 200 Kbps é o limite imposto pela TIM. Sabe o que isso significa? Um carro lento. Lento pacas! Mais lento que os planos básicos de Internet Discada (aquelas do barulhinho estranho vindo do computador). E para piorar, esta velocidade é imposta para qualquer plano. Isso meu garoto: qualquer. Não importa se você possui 7Mbps ou 1Mbps. Quando você estourar 1GB, vai a 1/3 daquele seu vizinho pobre que só pôde assinar o plano de 600 Kbps. A única diferença entre vocês, é que o vizinho pobre só vai estourar 1GB, mesmo que em um sistema ideal, alguns dias depois de vocês. Vamos ver algumas tabelas:

Primeiro, vamos ver o limite que a TIM impõe para TODOS os seus clientes dos tais "Pacotes Ilimitados"


LimiteVelocidade1 hora1 dia1 mês
200 Kbps25 KB/s88 MB2 GB61 GB


Esse meus amigos, é o máximo de dados (arredondado é claro), que vocês poderão obter e/ou enviar pela Internet: 61 Giga bytes em 30 dias - não importa o plano que você contratar. Ele possui limite sim. E mesmo que você contrate o de 7 Mbps, não adianta. :-) Sabe porquê?

Por causa deste cálculo: saber em quanto tempo a franquia de 1GB é atingida em cada plano. Para isso, basta dividir a velocidade em KB/s de cada plano, pelo valor de 1GB em KB (1024MB * 1024K = 1048576). Nesta mesma tabela, coloquei também o preço de cada plano, para você entender o que você realmente está pagando:

PlanoVelocidadeFranquia 1GB emPreço
600 Kbps75 KB/s233 minutosR$ 89,90
1 Mbps125 KB/s139 minutosR$ 119,90
7 Mbps875 KB/s20 minutosR$ 189,90


Rapidamente a explicação: quem assinou o plano de 7 Mbps, atinge a franquia de 1GB em apenas 20min de uso intenso da Internet (sim, vendo YouTube ou assistindo a CNN, Globo News, etc). O cara que tinha menos grana, estoura a franquia de 1 Mbps após longos 139 minutos. Já o cara que mal tem dinheiro pra comprar um mouse sem fio, estoura o seu plano em 233 minutos. Ai dele se ele for assistir um filme de 4 horas e deixar o computador baixando arquivos.

Após estes períodos, todos estarão reduzidos aos míseros 200 Kbps. Ou seja, Tem gente pagando R$ 189,90 para ter Banda Larga de verdade por apenas 20 min, e que só terá este poder, no próximo mês. Minha dica: vá pelo menor plano, sempre. Se você quer mesmo ter uso intensivo da Internet, melhor esquecer os planos 3G.

Ah, aqui fica uma nota para os entendedores. A ANATEL exige que qualquer operadora cumpra com pelo menos 10% da velocidade contratada. É notório que 200 Kbps está longe dos 10% do plano de 7 Mbps! E agora? O que fazemos? Sentamos e choramos, pois o que se vê por ae é muita gente reclamando e pouca entidade (Anatel, OAB, Ministério Público) tomando uma atitude contra as operadoras.

Uma vergonha...

[]'s
Bruno
Contato

Email:bruno.borges(at)gmail.com

LinkedIn: www.linkedin.com/in/brunocborges
Twitter: www.twitter.com/brunoborges
Comprei e Não Vou
Rio de Janeiro, RJ Brasil
Oracle
São Paulo, SP Brasil