sexta-feira, 12 de dezembro de 2014

Scala em pt-BR: Primeiros passos

Começo aqui uma série de posts explicando os principais pontos da linguagem de programação Scala. A ideia é apresentar em bom português tudo sobre essa linguagem que tem muito potencial para entrar para o primeiro escalão de linguagens (C/C++, Java, PHP, Python, Ruby...)

Scala é uma linguagem que mistura características de linguagens funcionais com características de orientação a objetos. Scala tem tipagem estática, ou seja, o tipo/classe de uma expressão ou coisa é conhecido sem que o programa precise ser executado. Mas diferente de outras linguagens "estáticas" como C/C++ e Java, Scala tem um jeitão mais dinâmico e limpo. Isso se deve, principalmente, à inferência de tipos (já já explico).

Para acompanhar o código é só instalar Scala e rodar o REPL (só rodar "scala" na linha de comando). Em Unixes é só rodar apt-get install scala (ou ports ou brew ou...)

blablabla QUERO CÓDIGO!!

Começando do começo: variáveis


Todas as declarações de variáveis são precedidas por val ou var. Se você pretende alterar o valor da "variável" use var e ela será mutável, senão use val. Usar val por padrão é uma boa prática.

Apesar de não ter deixado explícito os tipos das variáveis (Int e String) o compilador sabe que val numero é do tipo Int e que val texto é do tipo String. Isso é possível por que o compilador de Scala usa um algoritmo que infere qual o tipo daquela expressão. Isso é o que chamamos de inferência de tipos (ou type inference). 

Pra quem vem de Java val e var são análogos a colocar ou não final antes de uma variável. Em C/C++ é análogo (mas não igual) ao const antes de declarações. Em PHP, Python e outras linguagens não temos um conceito similar, apesar de existirem formas de declarar constantes no código (Javascript aparentemente não tem). 

O fato de Scala forçar você escolher, o tempo todo, entre val e var faz com que você rapidamente perceba que você não precisa de mutabilidade na maioria das vezes. Você acaba usando val pra quase tudo. Simplificando bastante na hora de entender qual valor determinada variável contém. Simples: sempre o valor atribuído na sua declaração.

O uso de val se alinha com o discurso de tentar usar sempre final e const que vemos na
literatura de Java e C++ (em livros como Effective Java e Effective C++).



Funções


Mesmo com a inferência de tipos, uma hora você tem que dizer o tipo de alguma coisa, não tem como inferir o tipo de tudo (Haskell discorda). Um dos momentos de dizer os tipos é nos parâmetros de funções:

Se você veio de Java, C, C++ ou C# já deu pra ver que a declaração do tipo é na posição inversa. É só pegar o que era String variavel e transformar em variavel: String. Ahhh meu deus, tá tudo invertido!!! Como sobreviver??!? Relaxa. Em uma semana você se acostuma e o compilador não vai te deixar errar mesmo.

Coleções

Scala tem uma biblioteca de coleções (ou collections) bem completa e poderosa. A sintaxe para listas (List), dicionários (Map) e conjuntos (Set) é intuitiva e bem semelhante a linguagens dinâmicas.

Sendo uma linguagem meio funcional meio orientada a objetos, Scala possui formas funcionais de acessar, modificar e criar novas coleções.

Scala, assim como Java, possui tipos genéricos (ou generics). Galera de Go adora #sqn. No exemplo acima vemos nomes: List[String], isso significa uma List que contém elementos do tipo String assim como uma List[Int] contém Inteiros e List[MeuObjetoMagico] contém elementos do tipo MeuObjetoMagico.

No exemplo mais acima, quando criamos coleções passando o conteúdo (List(1, 2, 3)), não tivemos que dizer o tipo. O compilador, esperto como só ele, consegue inferir. Então, algo como List(1, 2, 3, 4) é exatamente o mesmo que List[Int](1, 2, 3, 4).

Classes


De cara a maior diferença das classes em Scala para as mesmas em Java, PHP ou C++ é que o construtor da classe é declarado junto do nome da própria classe. Ao invés de declarar uma função/método separado que age como construtor, o próprio corpo da classe já é seu construtor. Isso acaba economizando espaço.


Mas o maior ganho é o fato de você poder declarar atributos diretamente nos parâmetros do construtor. Basta colocar val ou var antes de um parâmetro do construtor que ele vira um atributo da classe. Em Scala não existe a necessidade desse tipo de código:

Isso já acaba removendo uma boa quantidade de código inútil (ou boilerplate).

Esse foi o primeiro post. Nos próximos vamos entrar em mais detalhes em cada um dos pontos falados aqui.

Ah! Quase esqueci de comentar. Pra quem não percebeu: ponto-e-vírgula é opcional em Scala! \o/

segunda-feira, 29 de julho de 2013

Arquitetura do NewsMonitor


Pra quem não conhece, o NewsMonitor é uma ferramenta para busca e monitoramento de notícias com alguns aspectos sociais. Ele surgiu a partir de um "pivot" do antigo busk.com, um leitor de notícias social aberto ao público. No NewsMonitor dá para salvar notícias em painéis organizados só por você ou curados com várias pessoas. Nossa base possui milhões de artigos, crescendo na faixa de 3 milhões por mês, então dá pra achar de tudo.

Nesse post vou mostrar partes da nossa arquitetura. Nossos servidores estão no EC2, apesar de sempre olharmos com carinho Linode e DigitalOcean, algumas facilidades do EC2 valem o preço "mais caro". O site em si usa LAMP (Linux, Apache, MySQL e PHP). Os serviços no backend são todos implementados em Scala com coisas menores em Python.

A escolha por Scala partiu do interesse depois que algumas grandes startups começaram a usá-la como linguagem principal: Twitter, LinkedIn, Foursquare. Scala tem todas as qualidades de Java e da JVM: bibliotecas pra tudo, tooling, IDEs, performance, ampla comunidade, base de desenvolvedores. Apesar de estar na JVM, Scala é uma linguagem muito mais sucinta e robusta do que Java. Muito dessas qualidades vêm das raízes funcionais da linguagem, mas isso deixo para outro post.

Notícias mais importantes em 23 de julho

Nossa arquitetura é composta de 3 sistemas:
  • Crawler - Tudo começa na coleta de notícias dos milhares de sites que temos em nossa base.
    • Ele é dividido em dois, o "Source Crawler" encontra todas as novas notícias a serem processadas e guarda numa fila (no Redis) enquanto em outras instâncias temos os "URL Crawlers" processando as notícias e inserindo no nosso banco de dados. Quando necessário, escalamos o número de Crawlers com Spot Instances.
    • O processamento da notícia consiste da extração de informações da página HTML como o título, corpo e imagem principal da notícia. Para essa tarefa usamos o Goose que funciona muito bem mesmo contra soluções baseadas em Machine Learning. Mas depois de certa inatividade do projeto e pull requests parados, resolvemos forkar e seguir nosso caminho.
      Hoje, o "nosso Goose" já tem centenas de modificações, especialmente na parte de encontrar a melhor imagem e melhorias de performance.
  • Stark - Esse sistema agrega todos os pós-processamentos que fazemos em cima das notícias.
  • Agrupamento de notícias
    • Agrupamento de notícias. Para cada notícia que entra em nosso banco de dados tentamos encontrar notícias similares sobre o mesmo assunto/evento. Por exemplo, agrupamos mais de 700 notícias (em português) que falam sobre o importante nascimento do bebê da Família Real Britânica. Dessa forma o usuário pode ver em um só lugar tudo sobre o assunto.
      O agrupamento também nos ajuda a montar nossa "capa" de forma 100% automática (mostrada na primeira imagem do post). Mostramos nela as notícias mais populares/importantes das últimas horas. Melhor que qualquer capa de portal :)
    • Classificador de tópicos. Para cada notícia atribuímos "tópicos" ou "conceitos" importantes presentes na notícia. Por exemplo, para a notícia Snowden vai permanecer no aeroporto de Moscou, diz advogado os tópicos encontrados são: Edward Snowden, Moscou, Rússia, Inteligência, Espionagem, Prism. Ainda estamos experimentando e aperfeiçoando para podermos usar essa informação na interface.
    • Classificador de língua e trending topics. São duas novas funcionalidades que estão sendo testadas no momento.
  • Máquina de Busca - Após o pós-processamento da notícia podemos indexar e deixá-la disponível em nossa busca.
    • Usamos o ElasticSearch (por baixo Lucene) para indexação e buscas das notícias. Escolhemos o ES principalmente pela facilidade de escalar shards, replicas e máquinas, além da API REST que simplifica bastante.
    • Como alguns devem ter imaginado, fazer uma busca simples (usando o ElasticSearch ou Lucene) numa base de dezenas de milhões de artigos não vai retornar bons resultados, por isso usamos o custom scoring do ES com algumas evidências para deixar o resultado o mais perfeito possível.
    • Temos um suggest as you type também:


Entre nossos próximos desafios estão:
  • Detecção de entidades. Para cada notícia saber quais entidades do mundo real são citadas. 
  • Recomendação de notícias. Já estamos testando internamente um sistema de recomendação de notícias baseado nas atividades do usuário dentro do NewsMonitor.
  • Classificação por categoria. Gostaríamos de classificar nossas notícias de acordo com uma taxonomia abrangente (ex: Política, Tecnologia, Economia) de forma automática.
  • Qualquer coisa interessante. Com uma base de mais com milhões de artigos de diversas línguas e 13M de imagens armazenadas, acho que sempre vamos ter coisas interessantes para criar e fazer!
  • Encontrar pessoas qualificadas que queiram trabalhar com essas tecnologias. Ficou interessado? Envie-nos seu curriculum (felipe.hummel at spixdiscovery.com)!

quarta-feira, 6 de abril de 2011

Nhemu - Comparador de preços Nacional feito com Tecnologia!

Estou a um bom tempo longe do blog, tenho trabalhado com algumas coisas. Há alguns meses tenho trabalhado no Nhemu (http://www.nhemu.com), um comparador de preços baseado nas principais tecnologias da área de Recuperação de InformaçãoExtração de Dados e Aprendizagem de Máquina (Machine Learning).  

Nhemu é provavelmente o único comparador de preços nacional que contém um coletor de ofertas automático, ou seja, ele não precisa que o lojista gere um arquivo XML (ou qualquer outro formato) e envie suas ofertas. No Nhemu, os sites cadastrados (hoje, cerca de 200 lojas e crescendo) são 
diariamente varridos por robôs visando encontrar as ofertas disponíveis nessas lojas virtuais e adicioná-las ao Nhemu. Esses robôs são desenvolvidos a partir das técnicas apresentadas nos principais trabalhos publicados na área de pesquisa em Web Crawling.

Além do Crawler (Robô), o Nhemu desenvolveu um sistema de classificação automática de ofertas em categorias. Isso é necessário já que as ofertas são coletadas automaticamente. O Nhemu precisa indicar a qual categoria determinada oferta pertence. Por exemplo, ao obter as informações de um celular Nokia N8, o Nhemu determina que aquele é um Celular da sub-categoria Smartphone.  Esse sistema de classificação também foi desenvolvido baseando-se em trabalhos publicados na área de Aprendizado de Máquina.

Outra importante parte do Nhemu é o sistema de busca, desenvolvido a partir de tecnologias em Recuperação de Informação. Totalmente personalizado e aperfeiçoado para buscar ofertas em e-commerce (não adianta só colocar o Lucene e achar que vai ficar bom).
Além disso nossa busca também possui uma funcionalidade experimental chamada "nuvem de tags". Construída de forma automática, assemelha-se a busca facetada na medida que auxilia os usuários a filtrarem suas respostas. Entretanto a nuvem de tags não precisa dos dados estruturados dos produtos, podendo ser facilmente implementada em qualquer base de produtos. Finalmente, a busca também a  possui a funcionalidade "Você quis Dizer" que está em constante aperfeiçoamento. "Consertando" consultas com erros de digitação ou ortografia errada (especialmente de palavras estrangeiras).


Por fim, temos o componente de nosso sistema que torna o Nhemu um comparador de preços de fato, o Agrupador. Esse programa recebe um conjunto de milhões de ofertas e determina quais ofertas de diferentes lojas são na verdade o mesmo produto mas com descrições diferentes. Dessa forma, podemos agrupar ofertas do mesmo produto de diferentes lojas e comparar seus preços. Como ele faz isso? De forma totalmente automática usando técnicas de Recuperação de Informação e alguns outros processos mágicos.


É engraçado como muitas pessoas se espantam ao saber que apenas 6 pessoas conseguem desenvolver e manter um comparador de preços com milhões de ofertas de mais de 200 lojas. A explicação é óbvia, usamos a tecnologia a nosso favor. Com isso conseguimos deixar nossos custos bem baixos (sério, baixos!).


Portanto não deixem de acessar: http://www.nhemu.com

sexta-feira, 2 de abril de 2010

Quais as profissões mais comuns dos Deputados Federais?

Já faz um tempo que queria "brincar" de extrair dados interessantes de fontes sobre políticos do Brasil. Sites como Transparência da câmara e Excêlencias.org.br facilitam essa tarefa. No primeiro site é possível encontrar essa planilha que traz informações triviais de cada Deputado Federal. Entre elas a profissão de cada um.

Depois de algum tratamento dos dados (profissões repetidas ou similares, escritas erroneamente, incompletas e etc...) Cheguei ao seguinte gráfico com as 10 ocupações mais comuns entre nossos excelentíssimos Deputados Federais.







Como alguns já imaginaram, advogado é a mais comum seguida por "Empresário" e médico. Este último sendo uma pequena surpresa para mim. Interessante também a quantidade razoável de professores universitários. Se bem que não tem como ter certeza se eles realmente ainda atuam como professores e em que tipo de instituição eles o faziam.

Como, também, era de se esperar os radialistas aparecem na 10o posição. Apresentadores de televisão na 26o posição com 5 deputados (uns 2 devem ser aqui do Amazonas =/).

Ministros/bispos/pastores evangélicos aparecem na 17o posição com 10 deputados. Posição mais tímida do que eu imaginaria.


Quem quiser a planilha com todas as profissões está disponível em: Profissão dos Deputados Federais.

Ah, é claro que eu não contei isso tudo na mão. Python estava comigo.

sexta-feira, 14 de agosto de 2009

A Lição Final

 Não sei se acontece com vocês, mas, dependendo do dia que vou ao cinema, não gosto de assistir dramas. Não estou falando de dramas tipo Titanic, mas sim daqueles dramas que foram feitos para ficarmos apreensivos e talvez tristes durante o filme todo. E para no final ainda falarmos: "é... o mundo tá uma merda mesmo =\". Quem viu "Senhor das Armas", por exemplo, sabe do que eu falo. Em certos dias, prefiro filmes mais "lights" (minha namorada agradece).

Quando vi o livro do Randy Pausch A Lição Final na prateleira da Saraiva lembrei de alguns dramas do cinema. Pensei logo que aquele não era o tipo de livro que eu iria curtir. Pra quem não lembra, ele é aquele Professor de Ciência da Computação que fez uma belíssima 'palestra de despedida'. Ele tinha câncer no pâncreas e o diagnóstico dizia que tinha apenas alguns meses a mais de vida. Infelizmente ele faleceu.

É neste contexto que o livro foi escrito. Então ao olhá-lo, já imaginei que seria um livro triste e melancólico. Talvez, mesmo evitando, o autor não poderia evitar falar do seu sofrimento e de seus parentes.

Bem, eu me enganei. O livro, ao meu ver, não trata da "morte". Muito pelo contrário, Pausch tenta ao longo do livro passar inúmeros motivos de por que ele (e nós) devemos viver a vida ao máximo e o mais importante: conquistas nossos sonhos de infância!

Boa parte dos capítulos do "meio" do livro falam sobre experiências cotidianas da vida de Randy Pausch que, segundo ele, fizeram ele aprender sobre o que é importante de verdade na vida. Algumas situações bobas, outras estranhas (como um treinador de baseball gritando com crianças de 10 anos), mas todas dando pequenas lições. Todos esses ensinamentos juntos criaram o maior presente que um pai pode deixar para os filhos, esse foi o intuito de Randy tanto com a palestra quanto o livro. Ele queria dar uma última lição aos seus filhos. A gente aproveita e aprende umas coisas também.

quinta-feira, 30 de julho de 2009

Livro Outliers e as oportunidades

Li já faz algum tempo o livro Outliers - Fora de Série do Malcom Gladwell. Resumindo bem resumido: o livro fala que o sucesso ou fracasso de pessoas/organizações não se deve apenas ao esforço, dedicação e/ou competência. Ele afirma que inúmeros outros pequenos fatores influenciam. Ele cita, como exemplo, a história de Bill Gates que teve a sorte de ser filhos de pais ricos que eram liberais a ponto de deixá-lo trabalhar no computador de madrugada, além de estudar numa escola com um dos raros computadores da época a disposição.







Apesar de repetir alguns argumentos de forma ligeiramente cansativa, o autor consegue demonstrar através de fatos algumas coisas bem interessantes. No princípio parecem conceitos meio óbvios: "Claro que o sucesso de um indivíduo não depende só de seu esforço, tem muita sorte envolvida também!!".

Muitas vezes parecemos só lembrar do esforço e achar que só isso importa. Sempre tentamos "não dar bobeira pro azar". No entanto, temos que também saber, e muito bem, "dar chance a sorte". Criar oportunidades para si mesmo, pode ser tão importante quanto perder o último fio de cabelo trabalhando na madrugada. Esse é um ponto presente no livro e que parece óbvio, mas na maioria das vezes esquecemos. Para que as coisas boas (e ruins) aconteçam temos que criar e aproveitar as oportunidades. Essa foi a lição que tirei do livro e se você ler, vai acabar tirando também. Recomendo!

terça-feira, 10 de março de 2009

Por que insistem em tentar ir contra a maré?

É engraçado como muitas vezes quem tem o dinheiro/poder fecha os olhos pra não ver as mudanças, as inovações, as novas possibilidades. Quem está ganhando dinheiro quer continuar ganhando dinheiro e qualquer mudança no paradigma pode botar "tudo" a perder, eles não querem isso.

A indústria fonográfica e os estúdios de Hollyword sofrem de um mal a quase 10 anos que ainda não conseguiram se curar. Eles ainda querem continuar ganhando o mesmo dinheiro de sempre, da mesma forma de sempre. Eles sempre venderam discos/fitas/CDs/DVDs e ganharam muito dinheiro com isso. Agora não querem que a internet atrapalhe.

Mas a internet já está "atrapalhando" e vai continuar "atrapalhando". Isso é fato. O mundo do consumo, em especial do entretenimento, mudou totalmente com a Web. Por que ainda há gente com medo de perder terreno? Por que não procurar caminhos para também participar dessa nova "era".

O Napster a quase uma década atrás mostrou para os empresários da grande mídia a mudança que estava vindo. Não deram ouvidos. Hoje continuam a briga para manter o antigo paradigma. O processo contra o site The Pirate Bay já se encerrou e deve ter resultados nos próximos dias. Para completar a IFPI (mesmo grupo que entrou com o processo) exigiu que a Telenor (a maior operadora de internet da Suécia) bloqueasse o acesso de seus clientes ao site Pirate Bay.

Ragnar Kårhus, presidente da Telenor, foi firme e sensato: “Agimos dentro da lei. Bloquear o P2P é como se pedíssemos para o correio abrir todas as cartas e decidir quais podem e quais não podem ser entregues aos destinatários”.

Essas grandes empresas pecam por achar que esses processos vão resolver alguma coisa. Que são como brigas entre empresas, ou empregado e patrão, que depois de a ordem judicial ser executada não há como voltar atrás. Um processo contra o P2P pode ser ganho, mas vai ser apenas uma batalha ganha. A guerra de verdade, já foi perdida. O velho modelo de vender entretenimento já foi vencido. Se o Pirate Bay fechar, 1 mês depois vários outros vão estar no lugar. Com o Napster foi assim, não vai ser diferente com o Pirate Bay, alguém não vê isso?

Agora é a hora de as grandes corporações do entretenimento procurarem novas formas de ganhar dinheiro e isto envolve NOVAS formas de vender e entregar conteúdo para os usuários. Será tão difícil fazer isso?

segunda-feira, 12 de janeiro de 2009

Conceitos do futuro aplicados nos produtos de hoje

Acho interessante como as pessoas gostam muito de pensar no futuro. Como ele vai ser, quais coisas maravilhosas vão existir nele. Faz parte dessa admiração os produtos "Conceitos". Vejam só os laptops conceitos como o VAIO, de monitor transparente, ao lado.

Mas além de admirar como o futuro pode ser, também gosto de pensar em como iremos chegar até lá e especialmente o que do futuro pode ser aplicado hoje.

E quem soube olhar o futuro tentando extrair algo que pudesse ser feito hoje? A Apple! Querem exemplo melhor? Imaginem se 1 ano antes do anúncio do iPhone, alguém mostrasse um celular conceito multi-touch screen com uma tela maior que os celulares da época, leve e de pouca espessura. Alguém iria imaginar que um celular como aquele podia, de fato, ser lançado no ano seguinte?

Os computadores Mac da década de 90 até os atuais e o próprio iPod, também tinham suas caras de "conceito", mas continuam sendo bem reais.


Outro exemplo interessante é o navegador conceito da Adaptive Path com a Mozilla Labs, o Aurora. Um navegador que apresenta informações de uma maneira diferente e que, além disso, proporciona uma interatividade absurda com qualquer coisa dentro das páginas Web. Coisas como ver uma tabela cheia de dados estatísticos numa página e com apenas um comando transformar aqueles dados em gráfico, com outro comando enviar para um amigo que, por sua vez, altera o gráfico e te manda de volta. Tudo no navegador. Bem interessante né? Imagine poder fazer isso com qualquer fonte de informações em qualquer página Web! Os trabalhos escolares ficariam bem mais cheios de gráficos né?

Depois de assistir os vídeos do Aurora, a gente fica com uma vontade que aquelas coisas existissem hoje. O pessoal que fez o Ubiquity do Mozilla Labs pensou a mesma coisa. As idéias contidas no Ubiquity lembram o Aurora: usar APIs e mashups de serviços Web para facilitar e agilizar nossas tarefas.
O exemplo mais notório do serviço é o de selecionar um endereço, dar um comando no ubiquity e pronto você já tem um mapa apontando para o endereço selecionado.
Meio futurista né? Há algum tempo atrás sim! Mas o Google Maps e sua API já estão aí a algum tempo esperando para alguém fazer esse tipo de coisa.

Quantas outras coisas "futurísticas", mas possíveis, devem existir e ninguém pensou em fazer?
O que pode ser aproveitado hoje dos produtos "conceitos" que tentam refletir o futuro?

 
Outros artigos que podem ser interessantes:

terça-feira, 18 de novembro de 2008

Como funciona o Akinator, o Gênio!

Sei que já é um pouco velho (quase 1 mês já é velho na Web), mas quem não conhece, por favor conheça: Akinator

É um jogo que a partir de perguntas objetivas respondidas pelo usuário consegue "adivinhar" com uma precisão considerável em quem você estava pensando.

Uma pequena lista de quem o Gênio já adivinhou por aqui: biscoito falante do Shrek, bruxa do 71 (chaves), chupa-cabra, maísa (do SBT), wally (onde está wally?),  Bob (moleque do Caverna do Dragão), o um anel (Senhor dos Anéis) entre muitos outros (não sou tão vagabundo assim).

Aqui na faculdade ficamos discutindo que técnica/algoritmo eles usam pra fazer isso (nerd é dose).

A primeira intuição é a Árvore de Decisão, uma técnica que classifica um determinado objeto de entrada baseando-se nas respostas a perguntas objetivas.

Entretanto, mesmo que o usuário erre uma pergunta ainda é possível que o Gênio advinhe seu personagem escolhido. Um comportamento estranho a árvores de decisão.

Uma outra forma de enxergar o problema é que cada pessoa/personagem/coisa no jogo seja representado por um ponto num espaço n-dimensional onde cada dimensão representa a presença ou ausência de uma característica, se ele é careca ou se é americano, por exemplo. A cada pergunta respondida este espaço vai sendo restringindo. Este é conceito é similar para problemas de classificação usando Support Vector Machine (ou só SVM).

Um detalhe é que no final ele mostra outras possíveis pessoas que ele poderia ter respondido. Ou seja, durante o jogo ele provavelmente guarda uma espécie de ranking das possíveis respostas.

Outra forma poderia ser dar "pontos" para as possíveis respostas. Por exemplo, se respondo a pergunta "ele é negro?" com Sim, pode-se atribuir uma quantidade X de pontos a todos os Negros do banco de dados. A cada pergunta dá-se pontos e depois ordena-se as pessoas. A resposta final é quem possui mais pontos.

Por último, vale relembrar que o banco de dados (gigantesco, aliás) é constantemente realimentando pelos próprios usuários, adicionando pessoas, perguntas e fotos. Então, a tendência é o jogo ficar cada vez mais completo e talvez mais preciso.

Não preciso dizer, também, que uma hora esse jogo vai ficar sem graça. Enquanto não fica, ficamos aqui brincando. Alguém arrisca um palpite de como ele é feito?

Leia também:

sexta-feira, 7 de novembro de 2008

Como deixar seu Desktop limpo!

Todo mundo tem ou já teve esse problema. As coisas vão acumulando no Desktop do computador e quando você percebe não dá nem pra enxergar o papel de parede.

Vou comentar alguns pontos que me livraram desse problema e espero que ajudem vocês também:


Nunca deixe o seu Desktop como pasta de Downloads do Navegador

Evite esta prática, por que facilita a bagunça. Coloque os downloads em outro lugar, nem que seja em uma pasta "downloads" na própria área de trabalho.
Desta forma, você sabe que tudo que tu baixou vai estar naquela pasta e não em algum lugar obscuro dos 200 ícones da área de trabalho.


Atalhos para programas? Só os que você REALMENTE USA!


É comum instalar um novo programa e deixar um atalho de execução no Desktop. Evite! Instalou, criou atalho? Tira na mesma hora.
Deixe apenas os aplicativos que você usa todo ou praticamente todo o dia.
Se você usa programa de mensagens (MSN, Gtalk) toda vez que entra no computador, não precisa colocar um atalho, configure-os para inicializar junto com o computador.


Agrupe arquivos relacionados


É comum baixarmos vários arquivos (PDFs, músicas, vídeos) relacionados e enquanto estamos pesquisando queremos ter rápido acesso a estes arquivos, por exemplo, músicas ou vídeos de um artista ou PDFs sobre um determinado assunto. Neste caso, crie o mais rápido possível uma pasta separada dentro da sua pasta de downloads (fora do Desktop!).

Se você não quiser criar uma pasta, pelo menos agrupe visualmente os arquivos relacionados em um canto da pasta. Você tem liberdade pra brincar com a posição dos ícones, use-a.

O mais óbvio

Não deixe acumular! Na medida do possível, dê uma olhada de vez em quando na sua área de trabalho e remova ou mova de lugar coisas que não deveriam estar ali. Deixe apenas coisas que você realmente quer ter a vista nos próximos dias, como arquivos de um trabalho ou projeto.


Alguém tem mais alguma dica?





segunda-feira, 13 de outubro de 2008

O Google é Lento

Vocês também acham que os serviços Google são pouco atualizados? O Gmail em português, por exemplo, mudou muito pouco. Mesmo o Gmail Labs com todas as suas novas funcionalidades, não possui muitas atualizações significativas/úteis, sem contar que provavelmente a maioria foi desenvolvida numa tarde.

O meu ponto é que os serviços do Google, não só o Gmail, demoram muito para sofrer atualizações significativas. Para mim, isso deveria ser uma oportunidade para outras empresas tentarem roubar mercado. No Google Reader, ainda estou esperando o Compartilhamento especial para grupos. Por que não surgiu nenhum leitor de feeds semelhante ao Reader, só que com mais funcionalidades? Algumas startups tentam, mas acabam mergulhando num mar de coisas inúteis, como o excesso de foco no lado "social".

Aliás, por que o Google Reader não usa a tecnologia do Google News/Blogsearch para agrupar itens de feed similares? Seria uma funcionalidade perfeita pra evitar ler a mesma notícia 20 vezes.

Outro exemplo é o próprio Blogger, serviço que hospeda este blog, que joga todas as suas atualizações num tipo de versão beta do serviço, o Blogger in Draft. Enquanto a versão "oficial" continua com pouquíssimas atualizações.

Alguém sabe quantos funcionários do Google trabalham em cada serviço? Sei que mais da metade deles trabalha com a máquina de busca e AdSense/AdWords, mas e os outros serviços?

Será que os serviços do Google são melhores que os concorrentes, ou os usamos apenas por inércia?

sábado, 13 de setembro de 2008

Os Sistemas Operacionais serão irrelevantes?


Lendo o post do Fugita comecei a pensar em toda essa onda de "computação nas nuvens", até o Jornal da Globo já falou disso. Uma afirmação recorrente em vários lugares é de que o Sistema Operacional está se tornando cada vez menos importante e o foco passa a ser no Navegador.

Eu concordo com essa afirmação, mas deve haver cuidado nas generalizações. Computação nas nuvens já é fato, mas dizer que o uso de serviços através do navegador vai se generalizar pra todo tipo de programa e que ninguem mais vai usar aplicativos desktop é perigoso e provavelmente exagero.

Os profissionais vão deixar de usar o seu Photoshop/Corel/Dreamweaver/3D Studio Max no desktop? Existem vários softwares que são inerentemente pesados/complexos. Sendo assim, não faz sentido colocá-los dentro de um outro processo, no caso o navegador. Além do mais, javascript não é a linguagem ideal pra desenvolver esse tipo de aplicação. Silverlight e outras iniciativas estão aí para possivelmente resolver essa questão.

Outro problema é o costume dos usuários. Eu, por exemplo, não gosto de usar Instant Messengers no navegador como o Meebo ou o próprio Gtalk no Gmail. Projetos como o Prism do Mozilla Labs, podem ajudar nisso. O Prism faz com que aplicações Web sejam "instaladas" no sistema operacional de forma similar a outros programas. Desta forma você pode ter um ícone na área de trabalho para o Meebo, sendo aberto numa janela separada. Dando a impressão de ser um aplicativo desktop.

Ainda é muito cedo para dizer que o Sistema Operacional será irrelevante e tudo que importará será o navegador.
O Sistema Operacional ainda é a interface dos computadores com o usuário e vai continuar sendo por uns bons anos.

Um processo no Linux é consideravelmente diferente do Windows. Vírus vão continuar a existir, mesmo com o browser sendo o centro de tudo. As diferenças entre sistemas vão continuar a existir.

Ainda vai demorar um bom tempo para termos uma camada de abstração tão forte que poderemos sentar num computador sem distinguir e sem se importar com qual sistema operacional está por baixo.

quinta-feira, 14 de agosto de 2008

Web Semântica será feita de APIs e padrões de dados

Muito tem se falado da Web Semântica e de como ela fará com que informações possam ser extraídas de forma estruturada facilmente de sites. Essa suposta nova tendência aponta para uma Web onde qualquer coisa (texto,imagem, vídeo, etc...) mostrada na tela do navegador tenha meta-dados (informação sobre os dados) anexados. Uma imagem em HTML possui o mínimo de informação (título, nome do arquivo...), mas com um acréscimo de Semântica, poderia-se saber, por exemplo: onde ela foi tirada, por quem e quando, apenas olhando o código-fonte da página.

A primeira pergunta que vem à mente é:

Como será colocado esse tipo de informação dentro do código fonte da página?

A resposta ainda não é clara. Mesmo já existindo software para extrair esses dados estruturados de dentro da página, como o Firefox já faz, ainda há uma carência de ferramentas para facilitar a inserção e leitura de dados nos formatos específicos.

Os Microformats, por exemplo, são utilizados para "marcar" texto com meta-dados, veja o exemplo:

<div class="vevent">
<a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
  Web 2.0 Conference:
  <abbr class="dtstart" title="2007-10-05">October 5</abbr>-
  <abbr class="dtend" title="2007-10-20">19</abbr>,
 at the Argent Hotel, San Francisco, CA
 </div>


Dessa forma, uma aplicação externa pode visitar essa página e extrair essas informações. Como elas estão estruturadas em campos (título, data de início e término, local...) esses dados podem ser utilizados para outros fins. Uma aplicação pode acessar a página de um evento, extrair as informações e mandar um e-mail para usuários próximos do evento ou interessados.

O exemplo acima também pode ocorrer de outra forma: uma aplicação externa pode utilizar uma API pública e extrair informações do banco de dados de um site/serviço.

Qual a diferença?

Muita gente acredita que na Web Semântica, todos os sites vão ser marcados com meta-dados. Entretanto, essa visão põe confiança demais na vontade dos desenvolvedores de fazer isso.

Por outro lado as APIs públicas, disponibilizadas por sites e serviços oferecem um ambiente mais seguro e amigável. Fazer chamadas a uma função da API é mais simples que requisitar uma página Web e extrair dados diretamente do código HTML.

A questão é que nem todos as empresas estão cientes das vantagens de abrir seu banco de dados através de APIs. Imagine, por exemplo, uma companhia aérea fazendo isso (pelo menos para consulta de vôos), o quão útil poderia ser.

O último ponto a ser tocado é que não adianta todas as empresas criarem APIs para seus dados, se cada empresa os disponibiliza em formatos diferentes. Por exemplo, e se uma companhia aérea disponibiliza os dados em um padrão XML e a sua concorrente disponibiliza em outro padrão? Para o desenvolvedor que quer utilizar ambas APIs será uma dor de cabeça.

Iniciativas como a DataPortability.org querem acabar com esses problemas tentando definir padrões para diferentes tipos de aplicações.

Quando o desenvolvedor puder trabalhar com dados de várias fontes e tratá-las de uma única forma, o foco passará a ser criar interfaces e aplicações para que os usuários possam usufruir das possibilidades que a chamada Portabilidade de Dados provê. Não espera-se da Web que ela seja "inteligente", mas que aplicações possam conversar facilmente entre si, facilitando a vida do usuário. O caminho para que isso ocorra? APIs públicas e padrões de dados bem estabelecidos, suportados e aceitos.

Leia também:

segunda-feira, 11 de agosto de 2008

As telas Multi-Touch Screen são as interfaces do Futuro?

É inegável o impacto que o iPhone teve no mercado de tecnologia. As telas touch screen foram elevadas a um novo patamar, bem longe das canetinhas stylus. O iPhone mostrou que interfaces multi-touch screen podem ser muito mais intuitivas e "divertidas". Agora, o conceito de telas sensíveis ao toque ameça se espalhar para os computadores. Será esse o futuro? O mouse será substituído pelas mãos?

Rumores dizem que um MacBook Touch da Apple estaria por vir ainda este ano. Seria essa a confirmação de uma nova tendência? Embora os PCs tablet não sejam mais novidade, o seu uso/utilidade ainda é muito restrito a aplicações específicas. Talvez o novo computador da Apple comece a mudar de vez como interagimos com os nossos PCs.

Imagine fazer tudo no computador através das mãos? Abrir uma janela, clicar num link, trocar de aba no navegador. Parece bastante interessante e intuitivo, certo? Mas, nem tudo é maravilhas. Utilizar um computador o tempo todo através de toques na tela pode ser cansativo. Imagine que agora o teclado e o monitor ficam no mesmo plano. Colocar a tela deitada na mesa como um teclado, vai fazer o usuário ficar olhando para baixo (depois de 2 horas, olha o torcicolo). Colocar a tela em pé como um monitor tradicional, vai fazer o usuário digitar com os braços erguidos (depois de 2 horas, olha o ombro doído). Um meio termo é necessário: inclinação e apoios?

Outro detalhe é que um usuário podendo usar todos os dedos vai ser sempre mais ágil que um bicampeão mundial de Counter Strike usando o Mouse MX900 Ultra Mega 1.000.000 dpi!  É com essa promessa de agilidade e facilidade que a tecnologia Multi-touch screen avança e ganha mais fãs. Comparando um iPhone com um celular convencional com teclado alfa-numérico, é inegável a intuividade e agilidade no celular da Apple. O acesso a Web, por exemplo, torna-se muito mais dinâmico e pouco cansativo no iPhone.

Mas será que as pessoas vão se acostumar com interfaces touch screen? A quebra de paradigmas no âmbito da tecnologia sempre causa desconfortos e dores de cabeça, mas uma hora ou outra as pessoas acabam se acostumando, geralmente quando o novo paradigma é realmente mais útil. Por exemplo, a mudança da interface do Office na versão 2007 causou muita insatisfação nas pessoas, mas com o tempo as pessoas vão se acostumando e gostando.


É fato que muitas pesssoas não acreditam na idéia. Iniciativas como o Microsoft Surface e provavelmente um futuro MacBook Touch mostram que a indústria já caminha em direção a novos conceitos de interação entre homem e máquina. Acredito que a tecnologia evolui sempre para a comodidade das pessoas. Se esse for o caso, daqui a alguns anos teremos inúmeros modelos de computadores multi-touch screen, para todos os gostos.


Leia também:

terça-feira, 1 de julho de 2008

APIs e os novos modelos de negócio na Web

Até alguns anos atrás, prevalecia um modelo fechado onde cada website guardava os dados do seu serviço e dos seus usuários trancados em seus bancos de dados. Agora, qualquer site pode disponibilizar APIs que possibilitam o acesso (quase) irrestrito aos dados. A informação começa a se libertar. Como isso muda a nossa Web de todo dia?
Possuir muitos usuários gerando ou acessando conteúdo no seu site (redes sociais, blogs, microblogs, youtubes...) sempre significou sucesso. O Youtube, por exemplo, foi vendido por U$1,6 bilhões de dólares. Líder absoluto em vídeos na Web.
Por outro lado, recentemente foi lançada uma API completa para o Youtube, tão completa que é possível criar todo um site de vídeos (inclusive upload) sem precisar armazenar nenhum no seu servidor. Até que ponto isso pode tirar usuários do Youtube e repassar a outros sites?

Com a popularização das APIs públicas, já não importa ONDE os dados estão, mas sim O QUE é feito com os dados.


Um ótimo exemplo é o FriendFeed. O serviço usa APIs ou feeds de outros sites (blogs, twitters, redes sociais...) para juntar numa só página a "vida online" de um usuário. 
Os dados-chave do serviço oferecido pelo FriendFeed não estão em seus servidores, mas espalhados pela Web. Apesar de, obviamente, haver a necessidade de guardar estes dados para uso dentro do seu site, o FriendFeed não se preocupa em fazer seus usuários postar artigos, compartilhar notícias, postar fotos no Flickr. Ele já adquire isso tudo pronto.
A demanda por APIs é tão grande que surge serviços como o Gnip que alivia o peso nos servidores dos grandes sites, ajudando na hora de responder as requisições às APIs.

Essa é a nova cara da Web. Os dados são livres para irem de um site para outro. Dessa forma o usuário fica livre para acessar informação de onde quiser. O Twitter, por exemplo, tem dezenas de interfaces diferentes, mas os dados (microposts e informações dos usuários) residem num lugar central. Isso tira o poder dos grandes sites e democratiza o acesso aos dados. 
Essa é a nova tendência? Abertura dos dados?
Essa já é a realidade. A cada dia surgem novos sites, novas APIs, possibilitando inúmeras oportunidades pra quem não produz conteúdo, mas sabe como usá-lo. 

Nessas ondas de Web 2.0, não vence quem produz mais conteúdo e informação. Ganha quem sabe usá-las corretamente, criando o melhor serviço pare seus usuários.
Artigos relacionados: