Acorda pra Web!

Tecnologia que vai mudar nossas vidas, depois do café.

Arquivo de May, 2007

Feeds no Orkut

Thursday, May 31st, 2007

Ok, foram duas postagens ontem, mas essa é necessária, e rápida. Finalmente o orkut adicionou integração de feeds ao serviço.

Ao entrar na recém-adicionada página de gerenciamento de feeds, o orkut detectou meus blogs construídos através do Blogger. Interessante. Posso adicionar links para leitura de feeds direto no meu perfil.

Ele parece ler qualquer feed por esse endereço, substituindo a parte do endereço com meu feed por outro qualquer, mas somente os cadastrados aparecem no perfil.

Só isso :) Prometi ser breve.

Microsoft e seu segundo produto inovador

Thursday, May 31st, 2007

Escrevi esse post pra responder ao Manoel Netto, do Tecnocracia. Acho interessante quando ocorrem debates inter-blogue e convido todos que estão lendo esse artigo e possuirem um blog a publicarem suas próprias conclusões acerca do assunto :) Se houver alguma, publico o link aqui.

Atualização: O futuro cada vez mais próximo, colaboração no debate por Aguinelo Pedroso.

Sobre o mundo dos dispositivos sensíveis a toque

A Microsoft por muitos anos foi dedicada a copiar descaradamente todos os conceitos de seus concorrentes. Desde o Windows até o Zune e o Windows Vista tudo que ela fez foi tentar atropelar seus concorrentes usando cavalos clonados.

Pela primeira vez ela lança um produto com uma idéia bastante inovadora. Pela primeira vez a sensibilidade ao toque é levada ao extremo em um produto comercial como o Surface.

As inovações no campo de multitoque multiusuário do Surface, que permitem que várias pessoas o operem são bastante interessantes, mas isso vai além de organizar fotos e vídeos e jogar poker. O Surface detecta objetos reais colocados sob ele, identifica os que também são computadores e interage com objetos.

Se levarmos em conta que tudo está se tornando cada vez mais móvel, o Surface talvez possa ser o contraste ideal com essa mobilidade. O Surface integra-se com dispositivos móveis como câmeras digitais e smartphones através de conexões sem fio, automaticamente. Ele tem um papel importante como doca, não estação de trabalho.

Há também uma tendência mundial de descarte ao computador pessoal destkop. Hoje em dia é cada vez mais comum usuários comprarem notebooks ao invés de desktops.

Em casa eu uso o notebook como desktop plugando-o no monitor, teclado e mouse externos. Criei minha espécie de doca e adoraria que tudo fosse sem fios e cabos. Na verdade, não uso o notebook como estação de trabalho móvel, apenas para navegar na internet fora de casa.

No futuro, tecnologias como o Surface permitirão computadores completos muito menores do que os atuais. Tanto a tela quando o teclado serão projetados em uma superfície, você só precisará carregar o “projetor” que poderá ser até do tamanho de um celular. Em casa você colocará ele em uma doca que tornará tudo mais confortável, com tela e teclado reais para trabalhar.

Caso não seja necessário digitar, apenas transferir músicas, fotos, vídeos ou ler notícias, algo como o Surface pode ser uma doca alternativa muito mais atraente e que pode ser compartilhada por diversas pessoas no estabelecimento.

Se supormos que um dia cada pessoa terá um computador pessoal que reflete sua personalidade e carrega consigo suas preferências, ao docar vários portáteis em um Surface conectado à televisão, o mesmo poderia sugerir programas que agradem a todas as pessoas presentes, ou manter um histórico do que foi assistido e todos que assistiam para traçar preferências futuras.

Ao contrário do que o Manoel afirma, acredito que o Surface é muito comercial. O público alvo do Surface até o momento (que é uma mesinha, mas no futuro pode ser um celular com projetor) é estabelecimentos que necessitem de interfaces de toque melhores que as atuais. Imagine um metrô equipado com um painel que mostra o mapa da região e a integração entre as linhas com interação por multitoque!

Um exemplo que gostei bastante foi o do restaurante. Após o jantar os convidados colocam o cartão de crédito (provavelmente com um SmartCard) em cima de um dispositivo baseado no Surface e arrastam os itens que consumiram cada um pra um cartão. Sensacional!

O único porém do Surface é o preço. Tem valor aproximado de um carro o que o torna um investimento arriscado. Pra restaurantes e hotéis de vinte e nove estrelas pode virar uma boa prova de conceito.

Ah, o primeiro produto inovador da Microsoft? Origami.

O Framework do Futuro – Parte 2

Wednesday, May 30th, 2007

Há um tempo atrás escrevi sobre minha insatisfação com os frameworks atuais de desenvolvimento web. Ando polindo a idéia, e cada dia me vejo infelizmente mais longe de um ambiente em que eu possa programar de maneira eficiente.

Testei recentemente o POG, um gerador de objetos para o PHP. Ele é próximo do que eu imaginava, mas só cria a parte realmente básica da programação. Os próprios criadores afirmam que é uma ferramenta e não um framework completo.

Estou lentamente construindo um sistema que use as propostas que apresentei no primeiro post:

  • Criar formulários para relações entre tabelas automaticamente (Adicionar produto ao carrinho, adicionar amigo na lista, adicionar contato, adicionar comentário ao post) baseado em Chaves Estrangeiras, sem nenhuma linha de código.
  • Definir foco da página atual automaticamente. (Essa página é sobre produtos? Sobre contato?)
  • Saber como formatar dados, AKA morte da escrita do HTML. (Como exibir um produto? Como exibir informações sobre uma pessoa? Como exibir informações sobre um mapa?)

O sistema será orientado à objetos, como o POG, mas será centralizado em propriedades. O que isso significa?

Um sistema orientado à objetos e centralizado em objetos possui objetos (meio óbvio não?) e cada objeto tem propriedades internas exclusivas do objeto.

No meu sistema as propriedades serão livres. Ao invés de ter um objeto produto com a propriedade preço e um outro objeto serviço com outra propriedade exclusiva preço, terei os objetos produto e serviço e a propriedade preço configurada para adequar-se a ambos. Na verdade, as propriedades no meu sistema também são objetos, os mais importantes.

Essa centralização em propriedades é baseada no esquema de vocabulários da Web Semântica, e todo o sistema utilizará esquemas de vocabulários ao invés de esquemas de bancos de dados.

Microformatos, dêem licença para o RDFa passar

Monday, May 28th, 2007

Problemas que deveriam ser resolvidos nos Microformatos

  1. São um padrão pra incluir dados no HTML, mas não fornecem nenhum padrão para extraí-los.
  2. Dificilmente podem ser validados. Você pode até validar um microformato separado, mas se você usar dois microformatos diferentes em conjunto, a coisa complica.
  3. Falta de padrões no desenvolvimento dos microformatos: Cada microformato é criado depois de discussões e discussões acerca do problema específico que deve resolver.
  4. Você não pode criar seu próprio microformato, afinal, não há maneira padrão de extraí-lo e desenvolvê-lo.

Soluções que o RDFa nos traz em relação aos Microformatos:

  1. Há um padrão para incluir dados no XHTML e um padrão para extrair dados do mesmo.
  2. Pode ser facilmente validado através de um DTD.
  3. “Módulos” são desnecessários no RDFa, há uma metodologia padrão pra descrever qualquer dado.
  4. É muito mais simples criar um leitor de RDFa.

Outros problemas que o RDFa nos trás:

  1. É construído em XHTML2, que não é suportado pelos navegadores, embora possa ser possível utilizá-lo em outras linguagens de marcação (com poréns).
  2. Requer que existam vocabulários RDFS para que se tire proveito da técnica.
  3. Sintaxe estranha pra quem está acostumado com HTML normal.

Conclusões

Na dúvida, use os Microformatos. Como eles mesmos (os criadores do padrão) dizem, ele é feito primeiro para humanos e depois para máquinas. Seu uso é bem limitado, mas se você está em dúvida provavelmente não é uma pessoa que vai exigir muito de metainformação entrelaçada. É uma conclusão bem diferente do que o título sugere :)

Orkut pilantra

Saturday, May 26th, 2007

Estava navegando em um tópico no orkut, clicando no botão “previous”.

orkut1.jpg

E subitamente…

orkut2.jpg

Olhem só o lugar do título do anúncio :)

orkut3.jpg

Cliquei sem querer no anúncio. O Google ganhou alguns centavos. Será que eles fazem de propósito!?

Três mitos do desenvolvimento nos padrões da web

Friday, May 25th, 2007

Basta alterar o css e…

Mudar o visual do site? Nem sempre. A maioria dos sites quando necessita de um redesign acabam alterando também o HTML. Não deveria ser dessa maneira.

Fácil de efetuar manutenção

Depende da manutenção. Trocar a cor de uma fonte em CSS é realmente simples, incluir uma coluna extra no lado direito de um layout líquido é um inferno. No cenário atual (no qual a adoção de padrões não é plena), apenas alterações simples são mais eficientes com CSS, as demais são realmente indiferentes desse fator.

Maior compatibilidade

Um dos motivos do Google usar tabelas em seus layouts é a compatibilidade. Atualmente é difícil tornar uma página com CSS tão compatível quanto uma página feita com tabelas. É possível, mas aí você acaba anulando naturalmente os dois primeiros mitos descritos nesse artigo.

Metadados, vocabulários, esquemas e ontologias explicados

Thursday, May 24th, 2007

Já falei o que são metadados, o que são ontologias e com esse artigo fecho o kit explicando o que são vocabulários e qual a relação deles com os outros dois termos.

Metadados, ou metainformação, é qualquer informação sobre determinada informação. A frase “A bola tem cor azul” é uma metainformação sobre a bola.

Alguns exemplos de metainformações:

  • A bola tem a cor azul
  • Esse blog tem como autor Alexandre Gomes Gaigalas
  • Alexandre Gomes Gaigalas nasceu em 1987

Interessante seria misturar essas informações, por exemplo:

  • A bola tem como autor 1987
  • Esse blog tem a cor Alexandre Gomes Gaigalas
  • A bola nasceu em azul

Percebe como nem toda propriedade pode ter qualquer valor, e nem todo recurso pode receber qualquer propriedade? Pra solucionar esse problema, foram criados os vocabulários, ou esquemas. Eles definem os recursos e as propriedades que um determinado conjunto de dados possui. Um esquema faz mais ou menos isso:

  • Bolas podem ter a propriedade cor, tamanho e esporte
  • A propriedade cor pode ter como valores azul, vermelho ou amarelo
  • Blogs podem ter como autores somente pessoas

Essas pequenas regras podem parecer óbvias para nós, mas são muito difíceis de serem concluídas por uma máquina, o que torna o processamento dos metadados muito difícil sem elas.

Basicamente, vocabulários e esquemas definem:

  • As propriedades que determinada classe tem
  • A quais recursos uma propriedade pode ser aplicada
  • Quais recursos podem ser usados como valores de uma propriedade

À partir desses esquemas, é que são criadas as ontologias. Com uma ontologia você pode por exemplo estabelecer relações entre dois esquemas diferentes:

  • O grupo de carnívoros é correspondente ao grupo de seres que come carne excluindo o grupo de seres que come vegetais
  • O grupo de herbívoros é correspondente ao grupo de seres que come carne excluindo o grupo de seres que come carne
  • O grupo de onívoros é correspondente ao grupo de seres que come carne, vegetais, peixes e frutos do mar, excluindo o grupo de carnívoros e o grupo de herbívoros

Através do conceito de ontologia acima, eu consegui descrever vários grupos de seres vivos sem usar propriedades novas, apenas intercalando esquemas já existentes. Ontologias descrevem a relação entre classes de recursos, e vocabulários e esquemas definem que propriedades esses recursos possuem.

Se já existissem ontologias prontas sobre tudo, seria muito simples por exemplo saber se um animal é carnívoro, herbívoro ou onívoro. Através de metadados e esquemas, cada ser vivo teria uma lista de outros seres vivos que o servem de alimento, e cada ser vivo estaria classificado como animal ou vegetal. Bastaria o sistema cruzar os dados de alimentação com a classificação de cada ser e concluir se um ser está incluso ou não em determinado grupo.

A vantagem desse sistema é óbvia. Ao invés de simplesmente dizer: o leão é carnívoro, eu preparei a máquina com as mesmas informações que me levaram a essa conclusão. Se no futuro essa classificação mudar e for incluído um novo grupo de alimentação, eu não teria que editar as informações de animal por animal, bastaria alterar a definição das ontologias e as relações entre os demais grupos.

Semântica no HTML – Microdicas

Tuesday, May 22nd, 2007

Aprenda a enfatizar palavras

  • Jamais use as tags <b>, <i> e <u> para enfatizar palavras. Elas são obsoletas.
  • Use as tags <strong> e <em>, com cuidado.
  • A tag <strong> não significa negrito, a tag <em> não significa itálico.
  • A tag <em> tem o mesmo significado da tag <strong>: ênfase. A diferença é que <strong> dá mais ênfase do que <em>.
  • Partindo do fato de que <strong> e <em> tem o mesmo significado, fica claro que não devemos utilizá-las juntas.
  • Você pode retirar o negrito do <strong> e o itálico do <em> utilizando CSS. Na verdade você pode adicionar qualquer estilo, cor e formatação à essas tags.

Modificando documentos já publicados

Às vezes é necessário alterar documentos e manter informações sobre a alteração. Você pode fazer isso utilizando as tags <del> e <ins>. O texto antigo, que não é mais válido, deve ser colocado dentro da tag <del> e o texto novo, que não existia anteriormente, deve ser colocado dentro da tag <ins>.

  • Coloque somente elementos inline, nenhum bloco dentro desses elementos.
  • Você pode ocultar o conteúdo anterior ao modificado com CSS e destacar o novo.
  • Por padrão, texto excluído fica tachado.

Listando coisas

  • Listas não precisam ter necessariamente itens pequenos. Você pode incluir grandes parágrafos e até mesmo títulos dentro de lista. Se algo obedece determinada ordem ou padrão, não hesite em colocá-lo em uma lista.

Autoloading no PHP – Um poder desconhecido

Monday, May 21st, 2007

Ranger Verde: O mais poderoso, embora praticamente desconhecido

Essa é a função menos explorada do PHP5. Vou explicar o porquê.

Sempre que vejo alguma página sobre a função autoload do PHP, leio algo parecido com isso:

PHP
<?php
function __autoload($classe) {
require_once($classe.'.class.php');
}
?>

Essa função faz com que qualquer classe chamada que ainda não esteja declarada, carregue o arquivo nomedaclasse.class.php. Ótimo, mas só isso? Esse não é o verdadeiro potencial dessa classe. Dá uma olhada nesse exemplo:

PHP
<?php
function __autoload($classe) {
eval('class '.$classe.' extends minhaClasse { } ');
}
class minhaClasse { }
?>

Aqui fizemos algo um pouco diferente. Qualquer classe chamada que ainda não esteja declarada, é declarada instantaneamente como uma extensão da classe minhaClasse. Podemos colocar qualquer coisa dentro da função __autoload().

PHP
<?php
function __autoload($reqClass)
{
if (!preg_match("#(Model|View|Controller){1}$#", $reqClass, $fragment));
$reqName = substr($reqClass, 0, strlen($reqClass)-strlen($fragment[1]));
eval('class '.$reqClass.' extends base'.$fragment[1].' { protected $__name = '.$reqName.'; }');
}

class baseModel {}
class baseView {}
class baseModel {}
?>

Nesse último exemplos temos algo ainda mais complexo. Ele divide os nomes das classes em duas partes, prefixos e sulfixos. Nesse caso eu determinei três sulfixos (Model, View, Controller). Sempre que uma classe for chamada com a síntaxe nomeSulfixo, a função extende uma determinada classe base. Se uma classe produtosView for chamada, ela imediatamente será uma extensão da classe baseView, e o objeto será instanciado instantaneamente, assim como nos demais sulfixos.

Isso particularmente me chamou atenção por transformar o PHP em uma máquina de frameworks. Você pode escrever uma classe genérica como base e criar uma regra base pra nomear objetos que a extendem. Na verdade, foi exatamente nessa idéia que eu comecei a criar o meu próprio framework, por estar frustrado com todos os demais.

Logicamente, encontrei uma barreira natural do PHP. Ao usar esse esquema com o eval, o PHP interpreta os prefixos das classes como tokens de constantes! Um mega-bug. Corrigi isso declarando os prefixos como constantes pouco antes de instanciar os objetos:

PHP
<?php
function __autoload($reqClass)
{
if (!preg_match("#(Model|View|Controller){1}$#", $reqClass, $fragment));
$reqName = substr($reqClass, 0, strlen($reqClass)-strlen($fragment[1]));
eval('class '.$reqClass.' extends openIdeo'.$fragment[1].' { protected $__name = '.$reqName.'; }');
/*hack pro constant bug*/ if (!defined($reqName)) define($reqName, $reqName);
}
?>

Bom, é isso. Abusem de uma das melhores características do PHP5 com orgulho, usem meu código (me citando, claro) à vontade! Aceito críticas, sugestões e possíveis elogios! ;)

Um pouco mais do que links

Monday, May 21st, 2007

A internet (incluindo a Web 2.0) funciona com links. Um link na internet é uma simples ligação entre um recurso e outro. Por mais ricos que os links sejam no HTML, eles continuam simples demais pra uma Web Semântica.

Basicamente, toda essa coisa de links na internet funciona como no mundo real. Na internet nós dizemos “tal página tem ligação com tal página”, no mundo real podemos dizer “tal pessoa conhece tal pessoa”.

Assim como no mundo real, surgiu uma necessidade de descrever melhor essas ligações entre coisas. Na vida real refinamos os nomes das relações entre pessoas criando novos termos, como pai, sobrinho, namorada, tio, irmão e por aí vai. Na internet existem muitos tipos de ligações, algumas complexas demais pra se resumir com apenas uma palavra.

Pra solucionar esse problema foi incorporado ao RDF, que é uma tecnologia para descrever coisas, a possibilidade de descrever ligações também utilizando o conceito de URI.

Na internet também há diversos tipos de relações. Não há somente relações entre pessoas, na verdade dentro da internet podemos descrever links (relações) entre qualquer coisa: objetos, pessoas, animais, páginas, funcionários de uma empresa, doadores de sangue e muito mais. Pra isso foram criadas as ontologias, que descrevem pedacinhos dessa imensidão de conhecimento que a Web pode representar.