Acorda pra Web!

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

SobreAquelasCoisasHiperVerborrágicas (Uma Breve Crítica ao W3C)

6/12/2007

O W3C sem dúvida é especialista em uma verbose desnecessária. Aquelas documentações supertécnicas que ninguém entende, cheias de expressões de gramática técnica, são um saco. Custa lançar uma nota um pouco mais voltada pra humanos normais? :)

Além da documentação, as linguagens também são um pouco exageradas. O DOM por exemplo é cheio dos getAlgumaCoisaDeTalForma, encadeados, cheios de parentNode e childNode por toda parte. Iniciativas interessantes como o SimpleXML, desenvolvido pela equipe do PHP, são muito mais simples. Bibliotecas JavaScript por aí trocam o tão usado getElementById por um mero $ (cifrão).

Sinceramente, o próprio XML é uma baita bizarrice. Ótimo formato, mas não para ser lido por pessoas, como em sua proposta. YAML é bem mais legível e simples.

E o XSLT, simplesmente o melhor sistema de templates que existe, completíssimo e ultra-poderoso não é usado por quase ninguém por ser muito complexo e pouco legível.

Nada contra complexidade. Às vezes você só consegue desenvolver certos tipos de sistemas com ferramentas complexas. Web Semântica, o tema desse blog, é bastante complexa, mas e em relação aos sistemas simples e modestos? Soluções existem, mas quando virá uma solução padrão?

Dica PHP: Tempo de execução da página

5/12/2007

Durante o desenvolvimento do meu framework descubro a cada dia técnicas cada vez mais interessantes no PHP. Na medida do possível, vou intercalar algumas dessas dicas com os posts aqui no Acorda.

O código abaixo, de uma maneira simples, calcula quanto tempo demorou para a página ser processada no sistema. É uma ótima dica para usar durante o desenvolvimento de qualquer sistema.

PHP class pageExecutionTimer {   private $executionTime;   public function __construct()   {   $this->executionTime = microtime(true);   }   public function __destruct()   {   print(&#039;<hr>&#039;.(microtime(true)-$this->executionTime));   } } $p = new pageExecutionTimer();

Usar um loop que executa o mesmo código várias vezes faz a diferença entre o tempo de execução de ambos ser mais evidente. Eu até poderia comparar usando microsegundos, mas não sei realmente qual a diferença entre 0.0015 e 0.0009. Além disso, assegura que a maior parte do processamento do código será daquele trecho, impedindo que outros trechos de código interfiram na sua medição.

PHP for ($i=0;$i<1000000;$i++) { /* Trecho que desejo testar */ }

O funcionamento é simples: Ele cria um objeto que registra o horário de criação em uma precisão de microsegundos e exibe a diferença com o horário de termino do script, que é chamado através do método __destruct.

Não me recordo ao certo em que site vi esse código, que não é meu. De qualquer forma, parabéns ao autor pela excelente idéia prática e simples :)

Um projeto bacana sobre Web Semântica

3/12/2007

Recentemente foi lançado o novo site do ARC, um projeto do Benjamin Nowack que tem como objetivo criar um sistema que interpreta, cria e trabalha com RDF e SPARQL em geral.

Os planos da sua pequena startup, a SemSol, são de criar um pequeno CMS, o Trice, tendo como base o ARC e com banco de dados todinho em RDF, com consultas todinhas em SPARQL.

O SPARQL (ainda estou devendo um post sobre isso) é a linguagem similar ao SQL desenvolvida pelo W3C especificamente para fazer consultas em fontes de dados RDF, ou seja, para “consultar” nós de Web Semântica.

A idéia é bacana e a plataforma excelente. PHP e MySQL é tão comum que até minha calculadora deve suportá-los. Já tive oportunidade de conversar com o Benjamin sobre o sistema enquanto eu desenvolvia algo similar à primeira versão do ARC Store e suas idéias são realmente legais.

Pode parecer papo de geek, mas o grande objetivo do Trice é mostrar que a Web Semântica pode ser indolor! O aplicativo será aos moldes do Wordpress, fácil de usar e instalar. A diferença é o conteúdo, totalmente focado pra essa nova tecnologia.

Provavelmente em alguma versão futura do Base Cube, meu próprio framework, haverá um sistema similar ao ARC desenvolvido totalmente em PHP5 e SQLite, um banco de dados que é um chuchu

Formulários totalmente semânticos com HTML e CSS

30/11/2007

Acabei de bolar uma nova versão de um velho CSS para formulários semânticos em HTML. A nova versão é muito, muito mais bacana. O HTML é puríssimo e o CSS mínimo, funciona em todos os navegadores modernos e valida! E tem gente que ainda usa tabelas ou -pior ainda- listas pra formulários :)

O grande truque é colocar os controles do formulário dentro das labels, chamado de label implícito, você sequer precisa declarar um atributo for=”" para especificar o controle relacionado à aquela label. Encontrei a solução desenhando o novo sistema de templates do meu micro-framework, o Base Cube.

Fiz ele em HTML4, mas é facilmente transformável em XHTML, basta apenas mudar pequenos detalhes na sintaxe.

Portanto, recomendo darem uma olhada no meu formulário semântico em HTML e CSS, pode poupar bastante tempo na hora de desenvolver!

Base Cube no Google Code

29/11/2007

Está no ar a página do meu projeto de framework em PHP5 no Google Code. No post anterior eu já havia mudado temporariamente o nome dele de openIdeo para Base Cube, agora é definitivo.

O nome “openIdeo” eu provavelmente usarei para outro projeto, baseado no framework porém mais próximo de um CMS e não de uma biblioteca.

Para quem não acompanhou, Base Cube é um framework que estou desenvolvendo para PHP5 com características únicas:

  • Não copiar frameworks de outras linguagens.
  • Usar as vantagens exclusivas do PHP5.
  • Não repetir bibliotecas e frameworks já existentes, integrá-los.

Não há por exemplo, uma classe de conexão com bancos de dados nativa. O Base Cube usa as bibliotecas do Zend Framework (única integração disponível no momento) para tal.
Na página principal do projeto há links para uma pequena introdução em português e também a versão em inglês. Há alguns exemplos por lá que podem ajudar!

Ah! E já tem link pra download ;)

Breve atualização no openIdeo

9/11/2007

Vim dar uma breve tirada de poeira por aqui, com duas atualizações no meu framework.

A primeira é uma adaptação do conceito pra PHP4 (arrepios) que eu tive que fazer, arrhg! Odeio ter que trabalhar em servidores com ferramentas precárias, mas fazer o que né?

O funcionamento é parecido com o núcleo do framework anterior, apenas não há o autoCoolMagicAutoloading. Você pode baixar o arquivo (é um só, sem exemplos, brevemente comentado) aqui mesmo. Ah, mudei o nome (só dessa versão) pra baseApp.

A segunda novidade é uma outra versão do framework que desenvolvi para ser usada em conjunto com o Zend Framework. Dessa forma, usando as várias classes do Zend você pode apenas aproveitar o núcleo do openIdeo, que é bem mais simples de usar. Além disso, ele implementa o autoloading pra componentes Zend e uma maneira prática de criar singletons.

O nome dessa versão é baseCube, não me perguntem o porquê. Ainda pretendo lançar uma versão do openIdeo chamada hiperLex, que será um framework com arquitetura semelhante com versões para várias linguagens (PHP5 e C# inicialmente).

Você pode baixar o baseCube suavemente comentado no padrão phpDoc exatamente aqui. Pra funcionar com o Zend Framework você terá que baixá-lo separadamente e colocar o diretório Zend na pasta padrão.

Só pra deixar o post colorido, um breve exemplo de como é simples conectar à um banco de dados com o baseCube+Zend:

PHP
require 'baseCube.php';
$app = new algumacoisaApp;
$db = $app->Zend->Db_Adapter_Pdo_Mysql(array(
'host'=>'localhost',
'username'=>'root',
'password'=>'',
'dbname'=>'information_schema'
));

Pronto! Conectado ;) Agora pra fazer uma consulta simples e exibir o debug dos resultados, coloque apenas isso:

PHP
print_r($db->query('SELECT * FROM nomedatabela')->fetchAll());

Pra aproveitar melhor o baseCube, dê uma olhada na documentação do Zend e nos comentários do código do baseCube.

Ainda falta aquela coisa que encaixa perfeito na rede social, sabe?

3/10/2007

Antes das redes sociais como o orkut, o mais próximo de uma web social eram os fóruns. Ainda muito populares, os fóruns tinham um problema: muito fragmentados. Um fórum pra animes, um fórum pra geeks, um fórum de RPG. Era um saco, muita coisa repetida (no fórum de animes sempre tinha uma seção de RPG, no fórum de geeks algo de animes e por aí vai) e tudo inconsistente.

O orkut e seus similares popularizaram os fóruns pra massa. Todo mundo discute qualquer coisa, em qualquer lugar. Mas foi perdida uma grande parte da personalização. No orkut é impossível anexar documentos, fotos, usar HTML, instalar um script PHP personalizado… enfim, é restrito demais.

Eu tive um fórum que era bacana, infantil porém bacana. Posts valiam pontos, e você podia trocá-los por vantagens em um mini-shop. Quem postasse mais, tinha mais vantagens. Era até possível criar sua própria seção dentro do fórum, mudar determinadas cores, comprar níveis de personalização específicos. Pra quem não desse a mínima pra isso, era apenas um fórum normal, simples e direto.

Blogs, por outro lado, tem bastante personalização. Você faz o que quiser com seu blog, fala sobre o que quiser, mas é difícil atingir massas, é difícil conseguir colaboração em um blog. Redes de blogs são raras também, você vê troca de links mas não vê conversas reais entre blogs, como vê em tópicos com centenas de páginas nesses fóruns ou mesmo no orkut.

Eu, por exemplo, comprei meu notebook após ler um tópico de mais de 80 páginas no fórum do Clube do Hardware com detalhes minuciosos de pessoas que já haviam comprado, testado, aberto, fuçado, mexido em tudo.  Não foi apenas uma pessoa que fez todos os testes e postou um artigo completo em um blog, foram dezenas de pessoas que deram pequenas contribuições para atingir um objetivo maior: juntar o máximo de informações possível sobre o notebook. Também foi criada uma comunidade no orkut, bastante rica em detalhes sobre modelos similares e demais informações.

Se houvesse uma maneira de trazer essa massa de gente dos fóruns pra blogs, tornar as redes de blogs mais conversantes do que competitivas,  o mundo seria melhor, sem preconceitos, sem poluição e com mais arco-íris nas janelas.

Mais bla bla bla sobre linux

26/9/2007

Sabe aquele meu ódio do Ubuntu? Confesso que era não-justificado e mesmo sabendo que para solucionar os poucos problemas que eu tive com o danado o sacrifício seria pouco, preferi criticar.

Windows é difícil também se você quer tirar proveito do sistema, mas a vantagem é que já faço essas coisas difíceis há uns 8 anos. Se eu quero mudar, quero algo que seja parecido com o que eu sei.

Agora, definitivamente, eu justifiquei meu ódio pelo Ubuntu. Resolvi instalar o sistema mínimo, do zero. Tudo foi feito com um CD de instalação de 10MB que apenas conecta na internet, instala o sistema mínimo (que bizarramente eles chamam de “server install”, que não tem nenhum pacote pra servidor) e te dá uma bela linha de comando.

Fiz isso umas 20 vezes. Sim, eu instalei o Ubuntu do zero, pela linha de comando, umas 20 vezes. Testei as mais diversas configurações. Desde a mais pesada usando KDE com Compiz-Fusion até a mais simples usando apenas um único Firefox aberto numa sessão sem janelas reais. Fiz isso no meu notebook que é razoavelmente moderno e também em uma solução thin-client modificada, com processador VIA Samuel II e 128MB de memória (esse usando soluções mais moderadas, claro).

No final, não contente com o Ubuntu, resolvi testar o Debian (o pai do Ubuntu). Testei a versão estável (um porre), a testing (melhor de todas) e a instável (um micropesadelo, mas bacana).

O Debian é praticamente a mesma coisa que o Ubuntu (se você instalar a versão mínima), mas a coisa é mais sóbria. Enquanto o Ubuntu tem foco em lançar pacotes com mais velocidade, o Debian testa as coisas exaustivamente. É por esse motivo que a versão testing do Debian chega a ser mais estável que a versão estável do Ubuntu.

O Debian é mais leve. Enquanto no Ubuntu o mínimo de espaço em disco que consegui utilizar foi de 414MB (Gutsy Gibbon), no Debian caiu para 290MB (Lenny Testing). A memória consumida por um sistema Debian baseado em Xfce comparada ao Xubuntu (que usa Xfce) é bem menor também

Enfim, Eu sei que deveria estar falando sobre Web Semântica, mas atualmente estou nessa fase de expandir o máximo de conhecimento que tenho pra várias áreas. Tenho a péssima mania de reinventar a roda sempre, porque não gosto do jeito que as outras rodas giram.

Ócio focado em aprendizado

6/9/2007

Quando estou no computador, meu entretenimento geralmente está ligado ao aprendizado. Eu leio notícias, leio fóruns de discussão e pesquiso sobre projetos recentes. Meu tempo dedicado ao trabalho em si (aquele que paga as contas) é pouco, quatro ou cinco horas por dia, e mesmo nessas horas eu pesquiso bastante, sempre uso coisas novas em meus projetos.

Acredito que aprendizado seja essencial. Conheço amigos que começaram a fazer sites pessoais por hobby (não gosto dessa palavra) e começaram a ganhar dinheiro depois, com pequenos serviços, deixando de aprender e apenas aplicando somente o que já conheciam. Esse é um grande erro de alguns profissionais na informática.

Aboli completamente os jogos online da minha vida. Sou o tipo de neo-nerd que não se dá bem com nenhum jogo (esse tipo existe?), não tenho video-game também.

Em outras palavras, eu mato meu tempo aprendendo coisas novas. Todo mundo gosta disso, quando não é forçado a aprender coisas que não suporta. O grande desafio é sempre encontrar algo que te interessa, que desperta a vontade de aprender, ou então necessidade extrema de solucionar problemas macabros.

Um desses problemas recentemente foi envolvendo meu notebook, um amigo derrubou coca-cola nele sem querer e o teclado começou a dar problemas. Primeiro algumas teclas pararam de funcionar, depois algumas teclas ativavam outras junto e tudo mais. Pesquisei na internet como retirar o teclado, que procedimento fazer pra limpar e no final, após pincelar ele todo com álcool etílico (o isopropílico seria o ideal, mas eu não tinha) e esperar algumas horas pra secar, tudo voltou a funcionar perfeitamente, e meu amigo pode se livrar da cadeira elétrica.  Nesse caso, agi rápido porque já tinha tudo meio que “pré-mastigado”. Já tinha lido algo sobre como retirar o teclado do notebook pra trocar a memória e também já tinha lido sobre celulares molhados que ressucitam quando imersos em álcool.

Esse pré-aprendizado é importante. Acabo lendo um monte de coisa que fica hibernando no meu cérebro, depois quando preciso de algo urgentemente, fica mais simples de encontrar. Eu costumo dizer que não conheço muitas coisas, não sou um programador excelente e nem um sabe-tudo em informática, mas sou muito bom em encontrar soluções que não conheço (e isso me torna dependente da internet pra trabalhar).

Enfim, esse post é puro desabafo e uma forte justificativa pra não postar nada relacionado a tecnologia de internet ultimamente, devido a todo esse meu… ócio.

Não gosto do Ubuntu - Parte 2

31/8/2007

Decidi dar outra chance ao Ubuntu, alguns meses depois da minha infeliz primeira tentativa.

Dessa vez, baixei o Xubuntu, que usa o xfce ao invés do Gnome. Minha primeira impressão foi boa, reconheceu o teclado, touchpad e som do notebook sem problemas, mas os problemas começaram por aí.

O infeliz não entendeu que meu monitor era widescreen, e empacou nos 1024×768. Depois de muito rodar por aí, descobri que ele não gosta do novo driver da Intel (minha placa de vídeo), baixei uma versão anterior e ele liberou o 1280×800, menos mal.

Logo que instalei, tentei conectar a rede wireless. Não tinha nem noção de como fazê-lo. Ele não exibiu as redes ativas por padrão, e pior, o driver não funciona. Ele reconheceu a placa (que acendeu o led indicativo) e exibiu os dispositivos. No entanto, não conecta na rede, mesmo que eu digite o SSID e chave pra conexão.

Tentei o ndiswrapper, usando drivers do Windows. Ele não associou o driver ao dispositivo, ou sei lá o que. Não funcionou, sem rede denovo. Minha placa é a RT7x da Ralink, e por incrível que pareça, sequer o driver do site do fabricante consegui instalar.

Desisti, estou baixando o PcLinuxOS, ouvi falar que ele reconhece essa placa automaticamente. Posto novidades se conseguir.