Acorda pra Web!

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

Arquivo de August, 2007

Não gosto do Ubuntu – Parte 2

Friday, August 31st, 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.

E ainda tem gente que rouba imagens

Friday, August 24th, 2007

Breve nota:

Parece que a Efectiva tem um parceiro bem incomum, olhem nessa página (screenshot aqui, caso já tenham arrumado).

Bom, não podemos ter preconceito com a opção sexual de ninguém, cada um escolhe seu parceiro, não é mesmo?

Uma pena eles terem definido o tamanho da imagem na tag, seria tão mais divertido poder substituir o logotipo da F2B que eles roubaram de mim por uma foto maior!

Quer saber mais?

Casas controladas por computador, ou quase

Thursday, August 23rd, 2007

Esses dias li lá no MeioBit sobre essas tecnologias que não pegam no tranco. Quem nunca pensou em ter uma casa controlada por algum tipo de computador? Nunca vi um troço desses pra vender.

Sim, estou me aventurando nessa, sem ter nenhuma experiência com programação em Geladeira Language ou Microondas Scripting, mas vou entrar nessa.

O Objetivo no começo é simples. Eu tenho um notebook barato (ahh sim eu sou pão-duro!) com menos espaço em disco do que um iPod. Mesmo com pouco espaço tenho bastante música por aqui e adoro ouví-las no meu som dos anos 90 (ele é grande e pesado, uma pena não ter válvulas).

Atualmente eu ligo um cabo do notebook até o som, o que me deixa irritado. Não gosto de cabos. A idéia inicial era usar um transmissor FM e ficar livre dos fios, sincronizando ambos através de ondas simples de rádio.

A Questão é que ondas de rádio diminuem a qualidade das músicas, e um transmissor é relativamente caro e ficaria desjeitoso plugado na saída de fone do notebook. Além disso não quero que as pessoas ouçam minhas conversas por Skype, quero que somente a música vá para o som.

Decidi matar dois problemas com uma solução só. Montarei uma rede wireless com o roteador wireless que possuo e criarei um NAS misto, com um player de rádio. O servidorzinho NAS será montado em uma solução VIA (com processador Samuel II) de baixo custo e baixo consumo, ficará ligada o dia inteiro.

Esse vai ser o primeiro passo da minha casa controlada por computador (e talvez seja o único… não quero geladeiras atirando em mim). Mais novidades assim que eu conseguir fazer isso, porque não tenho idéia de que software vou usar :)

Insatisfação é legal

Tuesday, August 21st, 2007

Eu admito, quando um cliente fala que não gostou de alguma coisa do meu trabalho, eu não me sinto bem. Fico irritado, passo noites sem dormir e refaço. O legal é que no final, após as críticas do cliente, o projeto geralmente fica melhor.

Mas a melhor insatisfação é a interna e pessoal. Ahh! Nada como sentir que tudo é ineficiente, improdutivo, infeliz, chato, entediante e terrivelmente monótono. É desse tipo de sensação que surgem as ferramentas úteis que deixam o trabalho eficiente, produtivo, alegre, divertido e entusiasmante. E esse é um ciclo constante de felicidade, infelicidade, esforço e felicidade novamente.

Um programador que sempre busca maneiras melhores de aprimorar a eficiência do seu trabalho é justamente o tipo de programador que desenvolve coisas geniais como o Rails e o jQuery.

Problemas sempre surgirão, e as ferramentas atuais, como o Rails, não duram pra sempre. Novos desafios surgirão, e sempre haverá o limite entre a última ferramenta-definitiva e a insatisfação de utilizá-la.

É isso. O importante é que as “ondas” de insatisfação durem pouco, e o trabalho gerado durante elas faça uma onda de satisfação permanecer por muito tempo!

Lógica tradicional às vezes é ruim

Monday, August 20th, 2007

Imagine uma loja virtual que vende praticamente de tudo, desde carros até CDs.

Agora pense em uma situação divertida, você tem 100 mil dólares e precisa comprar um carro. Que beleza não? Você pede pra loja listar todos os carros com valor entre 50 e 100 mil dólares e compara os carros, mas nenhum te agrada totalmente. Pense o quão irônico seria se esse carro hipotético que te agrada tanto custasse 100 mil dólares e 50 reais. Você não pagaria 50 reais a mais pra ter o carro ideal? Pois é, bancos de dados não compreendem isso, eles não listariam esse carro.

O desenvolvedor poderia até colocar uma função na busca do banco de dados que sempre dá uma margem de uns… 100 reais para qualquer produto, mas imagine como o comprador de CDs de 30 reais vai ficar furioso ao ver produtos de 130 reais em sua busca!

Pra piorar, o desenvolvedor não pode usar porcentagens pra calcular as margens. Uma margem ideal para um CD seria de 5 reais, enquanto de um carro seria de 50, são porcentagens muito diferentes uma da outra.

O mais próximo da realidade seria usar uma função de segundo grau. Quanto maior o preço do protudo, menor a porcentagem da margem de busca. Isso funciona pra carros e CDs, mas não funciona pra… capacitores!

Capacitores tem valor em centavos, ou talvez até reais dependendo do componente. Geralmente são valores bastante baixos, com diferenças minúsculas de um fabricante pra outro, no entanto diferenças que fazem toda a diferença. O nosso sistema hipotético com funções de segundo grau atribui porcentagens maiores pra produtos baratos e menores pra produtos caros. Na compra de 200.000 capacitores, um centavo por capacitor dá uma diferença de 2000 reais na conta final!

A solução do problema seria analisar o comportamento dos compradores, a forma com a qual refinam as buscas após não encontrarem o que desejam e armazenar isso em um banco de dados comportamental. As margens de erro pra buscas seriam calculadas com base no comportamento dos clientes em relação ao produto. Dessa forma, ao buscar capacitores o sistema identifica a quantidade média de capacitores encomendados por cliente, a diferença de preço entre capacitores similares, a forma com a qual os compradores de capacitores refinam suas buscas e etecetera.

Dá trabalho? Nem me pergunte, não sou louco de criar uma coisa dessas. E olha que estamos falando de preços, imagine construir um Google com tecnologia similar! Seria algo próximo da utópica inteligência artificial forte (aquela dos robôs conscientes).

Uma forma de facilitar esse trabalho é com a Web Semântica. Imagine que de alguma forma, todas as suas preferências gerais (gostos, preços, mulheres, carros e etc) estão armazenadas no seu site pessoal. A loja não precisaria manter um banco gigante com informações homogêneas de todos os compradores, ela pode simplesmente consultar o seu banco específico.

Sem dúvida, dá trabalho também. Ninguém é idiota de escrever um banco de dados pessoal com preferências na hora de comprar capacitores, e nem seria prático criar algo assim. O sistema teria que encontrar uma variável dentre as suas preferências “normais” (formas de pagamento, descontos que sempre pede, quanto gasta por mês, quais as marcas prediletas de produtos, etc..) e utilizar na busca.

Edição visual é má só pra completamente leigos

Thursday, August 16th, 2007

O podre, nojento, desprezível, gordurento e mal-cheiroso código que a maioria dos editores visuais gera não é tão ruim assim. O real problema é quando iniciantes tentam utilizar esse tipo de editor sem conhecimento algum de semântica e marcação.

Eu comecei com uma dessas desgraças, o Dreamweaver, na versão 3. Meu primeiro site tinha fundo de espaço sideral e textos em verde, e eu achava o máximo. O código dele eu nunca sequer vi, mas provavelmente era mais sujo do que uma bituca de cigarro jogada em privada de banheiro público.

Hoje eu uso editores visuais menos poderosos, como o TinyMCE e o WYMeditor (ambos web-based) e recentemente notei que o código gerado por eles é bastante limpo e geralmente requer poucas revisões. Bem, o código gerado por eles quando eu escrevo neles. Arrisquei implantar o FCKEditor no no painel de administração de um dos meus clientes e deixar o próprio cliente fazer as alterações nos textos do site. Nem precisa dizer o que houve né?

Após um suave treinamento, o cliente aprendeu como usar o editor e manter o código saudável (expliquei que era importante para manter os rankings nos buscadores) e também manter a identidade visual do site. Antes do treinamento, ele identava os parágrados com espaços, criava colunas com tabelas e insistia em colocar os títulos com cores diferentes em cada página, me senti em uma fábrica de chocolate (nada fantástica).

Ensinar o cliente a mexer em um simples editor visual foi provavelmente menos doloroso do que ensiná-lo HTML ou BBcode, o que prova que é possível fazer uma web com semântica tão ou mais usável do que a atual. Também prova que um desenvolvedor pode usar editores visuais, mas para tirar bom proveito dos mesmos tem que conhecer a semântica do documento que está desenvolvendo.

À partir de hoje, vou procurar incluir editores visuais em mais sites de clientes e testar os resultados antes e depois do treinamento com os mesmos. Pretendo criar um mini-manual de edição semântica visual para leigos, que pode colaborar até com pessoas que escrevem no Microsoft Word (sim, ele tem semântica), o que acham?

O Núcleo do Open Ideo Framework

Monday, August 6th, 2007

O nome do meu framework é Open Ideo. Depois, com mais tempo, eu explico a origem do nome, o propósito e todo o conceito por trás do desenvolvimento.

Nesse release, está presente apenas o núcleo controlador de toda aplicação, que pode servir de base pra trabalhar com qualquer classe em PHP. Baixe aqui o framework com os exemplos do post (execute os arquivos index.php 1, 2 e 3).

O Básico

Atualmente o framework possui um único arquivo, openIdeo.php. Basta colocá-lo no seu diretório web e incluir onde deseja utilizar, assim:

PHP
<?php
require 'openIdeo.php';
?>

Para criar uma classe controladora, declare-a como extendendo oiApp, com o sulfixo App sempre assim:

PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
}
new blogApp;
?>

Note que no final eu adicionei um new blogApp, é ele que inicia o objeto.

Se você salvar isso como index.php e abrir no navegador, verá a mensagem Hello World, simples e prático. Adicionar uma nova ação é simpes:

PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
echo 'Esse é o post '.$id;
}

}
new blogApp;
?>

Agora, chamando www.exemplo.com/index.php/post/alguma-coisa ele exibirá na tela Esse é o post alguma-coisa. Bastante prático não? Você pode adicionar quantos parâmetros você quiser no método, eles serão passados todos via URL:

PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
echo 'Esse é o post '.$id;
}
function arquivo($ano=NULL,$mes=NULL,$dia=NULL)
{
echo "Arquivos do ano $ano, mês $mes e dia $dia";
}

}
new blogApp;
?>

Se você chamar www.exemplo.com/index.php/2007/07/01 ele mostrará a frase Arquivos do ano 2007, mês 07 e dia 01.

Métodos-Índice (AKA redirecionamento de métodos)

Uma das coisas mais legais do framework, é a possibilidade de criar métodos-índice:

PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
static $index;
echo 'Esse é o post '.$id;
}
function postAdicionar()
{
echo 'Que tal adicionar um post?';
}

function arquivo($ano=NULL,$mes=NULL,$dia=NULL)
{
echo "Arquivos do ano $ano, mês $mes e dia $dia";
}

}
new blogApp;
?>

Agora se você chamar www.exemplo.com/index.php/postAdicionar ele exibirá Que tal adicionar um post?, mas o mais legal é que como declaramos static $index no método post, podemos chamar assim: www.exemplo.com/index.php/post/adicionar, bem mais humano.

Você pode optar por deixar a classe blogApp no arquivo index.php mesmo, ou pode salvá-la no arquivo blogApp.php, ela será carregada automaticamente quando você chamar o novo objeto através do new blogApp; no index.

O Morfador

Adicionalmente, você pode criar várias classes (por exemplo blogApp, enqueteApp e quizApp), e ao invés de chamar por cada uma delas com new, você faz um morfador, assim: oiApp::morph(). O morfador escolhe a classe que será carregada com base na URL, portanto www.exemplo.com/index.php/blog chama blogApp, www.exemplo.com/index.php/enquete chama enqueteApp e assim por diante.

Você pode inclusive limitar seu morfador, chamando oiApp::morph(‘blog|enquete’) ele apenas morfa entre as classes blogApp e enqueteApp, quizApp nunca será carregada por esse morfador. Caso você limite o morfador e ele não encontre o fragmento de inicialização na URL, ele pegará o primeiro da lista de limitações, nesse caso o blog.

Podem ser chamadas quantas classes ou quantos morfadores você quiser. Você pode chamar classes ou morfadores que retornam valores, que exibem coisas, que incluem arquivos. Adicionalmente, escrever módulos para o Open Ideo permite que você controle como eles serão auto-carregados e executados. Essas demais funções do núcleo eu explicarei assim que lançar os próximos componentes do sistema.

Sei que é simples, é apenas um controlador afinal, mas o controlador mais versátil e leve (menos de 4kb) que já vi :) Estou ansioso pra ouvir opiniões e bugs (infelizmente eles existem sempre)!