Este blog tem andado meio parado. O tempo anda muito curto e não tenho tido tempo de ficar atualizando o blog. O interessante é que existem alguns outros programadores que também querem escrever artigos para ajudar a comunidade, mas não tem tempo de manter um blog sozinhos. Então agora resolvemos nos reunir para manter um novo blog grupal sobre programação.

Estamos agora estreando o blog Not For Dummies, blog sobre desenvolvimento mantido por diversos autores. Vamos falar de XHTML, CSS, PHP, Ruby On Rails, Usabilidade, e muito mais. Com vários autores, o blog vai ficar menos tempo parado.

Então a partir de hoje vou passar a escrever sempre por lá. Ainda não sei o que vou fazer com este blog, mas com certeza vai ficar parado por um tempo até eu me decidir.

Então se você assina o feed deste blog ou visita com frequência, passe a visitar o Not For Dummies. Você vai gostar.

Quer um guia para falta de sucesso online? Faça como este site.

Recebi o link para este site pela web designer da empresa onde trabalho. O site contém um “guia de como ter sucesso online” (em inglês), mas o site é um grande exemplo do que NÃO fazer ao se criar um site. Começando pelo fato do site ser todo feito em flash.

Fazer site todo em flash, com navegação “diferentinha” é bem coisa de web designer (não os bons, vocês estão perdoados). Criar um site assim é o mesmo que pegar todo o avanço que tivemos na usabilidade na web até agora, e jogar fora.

Vamos analisar. O site dá as dicas numa animação em flash no formato de um livrinho, onde o usuário clica no canto para virar a página e continuar lendo. Agora vamos analisar o show de problemas de interface e usabilidade.

  • A fonte é pequena demais. Uma pessoa com visão boa tem que espremer os olhos para ler. Quem quiser ver maior tem que clicar na lupa e usar um péssimo sistema de zoom que implementaram no livrinho. Se não fosse em flash, a pessoa teria total liberdade de aumentar o texto como quiser.
  • Clica clica clica. Cada página tem pouca informação, e são MUITAS páginas. A pessoa tem que ficar clicando, e clicando, e clicando para poder ler tudo. Não chega nem perto da facilidade de rolar com o mouse.
  • Não dá pra escanear a página com os olhos. As pessoas não lêem na web como lêem um livro. Elas vão escaneando o site rápido com os olhos em busca da parte mais interessante do conteúdo. E não dá pra fazer isso neste site. Você não pode ir rolando até ver um conteúdo que te interesse, porque você não pode rolar! Não pode escanear rápido o site com os olhos.
  • Você não pode usar a busca do seu navegador para encontrar alguma coisa. Na verdade, você não pode buscar nada! Se você está na página 70 (de 337) tem que clicar 69 vezes até voltar ao índice e procurar o que você quer.
  • Não dá pra usar os botões de Voltar e Avançar do navegador, e nem seus respectivos atalhos de teclado. Você fica preso à navegação que a pessoa implementou no flash, e só. Se a navegação feita no flash for ruim, não tem como fugir. O clica-clica-clica é péssimo.
  • Sites de busca não podem indexar o conteúdo. O google até tá inventando jeitos de indexar flash, mas tá mais na tentativa ainda. Sites em flash não podem ser indexados corretamente. Não dá pros robôs entenderem o que o site diz.
  • Um flash gigante. Em sistemas operacionais que não tem um suporte tão bom do flash (linux e mac, olá?) essa página vai ficar muuuito pesada. E lenta. Vai irritar o usuário e ele vai fechar. E isso significa uma média de 10% dos visitantes que você vai ter mandado embora sem ler seu conteúdo.
  • Só funciona com quem tem flash! A quantidade de acessos através de celulares inteligentes tem aumentado num ritmo alucinante (principalmente graças ao iphone). E uma boa parte desses acessos vindos de celular não podem ver flash. Isso significa que aquele site vai aparecer vazio pra essas pessoas. Uau, legal. Mostra mesmo que o criador NÃO tem visão e não está preparado pro futuro.

Eu poderia ainda citar muitas outras coisas. Não permite que o usuário selecione e copie conteúdo com o mouse, não permite que alguém aponte um capítulo específico pra alguém, etc etc etc. É apenas um grande exemplo de como se criar uma péssima interface.

Eu achava que os sites feitos todos em flash tinham ficado em 1995, mas parece que continuam surgindo uns aqui e ali. Eu me pergunto como um site desses pode ousar dar dicas para a web. Mas também não é nenhuma surpresa que não tenha nenhum site em flash entre os mais famosos e conhecidos.

Vocês conhecem mais algum desses péssimos exemplos de sites feitos por designers ruins?

Uma das coisas que eu mais gostei ao programar com Ruby On Rails foi o seu sistema de plugins. Como estou trabalhando com o CakePHP, que é copiado inspirado no Rails, resolvi dar uma olhada nos plugins que ele tinha online e acabei encontrando muita coisa boa. De tudo que vi, dois me chamaram a atenção:

URL Aliasing

Há uns dias eu postei como capturar missing_actions (quando o usuário acessa uma URL com action que não existe) e redirecionar para um controller que lidaria com o problema. Muito legal, mas não resolve o problema quando a URL aponta também para um controller que não existe.

O plugin URL Aliasing resolve exatamente esse problema, fornecendo um meio bem simples de lidar com erros de missing_controller.

Link: URL Aliasing

Symbi0nt’s Model Validation

Este não é exatamente um plugin, e sim um app_model.php pré-construído com métodos que facilitam bastante a parte de validação de dados do Model.

O principal é que ele define uma série de constantes com validações pré-definidas. Em vez de escrever suas validações, você usa constantes como VALID_IF_NOT_EMPTY, e VALID_IF_EMAIL. A mensagem de erro é especificada por você, então pode ser usado perfeitamente em projetos que não sejam em inglês.

Link: Symbi0nt’s Model Validation

Link: Exemplos de uso

O site Tableless, do pessoal da Visie, publicou um artigo bem interessante que me fez lembrar de algo que eu odeio em alguns programadores web: código CSS muito mal estruturado. Por favor, não “otimize” seu código.

Eu gosto do meu código muito certinho. Indentação correta e consistente, e um uso inteligente de linhas em branco para separar e organizar tudo em blocos. Mas tem gente que faz uma coisa bizarra, e sai escrevendo o código todo junto, como se os parâmetros precisassem ficar colados uns aos outros para não morrer de frio ou solidão. Aí fica um troço assim:

div{padding:10px;border:1px solid #CCC;width:485px;height:37px;background:#EEE}

Se você faz isso, eu te odeio. Pura e simplesmente. Te odeio e nunca te convidaria pra tomar chá com biscoitos. Pronto, falei.

Agora vá lá ler o post do tableless, que é muito bom.

Acho que já falei aqui sobre a minha paixão pelo Ruby on Rails, um framework de Ruby que me fez enxergar o desenvolvimento web de uma forma bem diferente. Percebi que as coisas poderiam ser feitas de uma forma muito mais rápida. Há cerca de 3 semanas comecei a trabalhar com o framework CakePHP, que é uma cópia do Ruby on Rails para a linguagem PHP, e nesse pouco tempo já aprendi algumas coisas que posso compartilhar.

Essa semana um trouxa moço muito simpático aqui do trabalho queria uma forma de redirecionar pra uma certa página caso o usuário digitasse um endereço inexistente dentro do site criado com o cake. A primeira coisa que se pensa é procurar um jeito de fazer isso através das rotas, mas eu procurei e não encontrei nenhuma forma de criar uma rota específica para controllers ou actions não existentes.

Como fazer, então? A solução é usar um misto dos recursos do Cake, com o básico do próprio PHP. Que venha a nós o beforeFilter e a herança de classes.

Como Redirecionar Endereços Inválidos

O CakePHP permite que você defina um método beforeFilter nos seus controllers, que será chamado antes da action (método do controller) ser chamada pelo framework. E como queremos que TODOS os nossos controllers saibam responder a um endereço inexistente, a melhor opção é criar o método beforeFilter no app_controller.php

Se seu projeto no cake ainda não tem o app_controller, é só você criar um arquivo chamado app_controller.php dentro da pasta app (e não na pasta controllers), e dentro dele colocar o código:

<?php
class AppController extends Controller {
 
}
?>

E dentro da classe vamos adicionar nosso beforeFilter:

<?php
class AppController extends Controller {
    function beforeFilter() {
        if( !empty($this-&gt;params['action']) &amp;&amp; !method_exists($this, $this-&gt;params['action']) ) {
            $this-&gt;redirect(array('controller' =&gt; 'main', 'action' =&gt; 'missing'));
        }
    }
}?>

O que fizemos acima? A função method_exists é um recurso do PHP que testa se um método existe em um dado objeto. Passamos $this como o objeto, e $this->params['action'] como o método a testar. Se retornar false significa que a action não existe, e o usuário está tentando acessar uma action inexistente. Então o beforeFilter redireciona o usuário pra um lugar que realmente existe, antes mesmo que o framework tente chamar a action. Do exemplo acima, você pode trocar o controller ‘main’ e a action ‘missing’ pelo que for melhor para o seu projeto. Basta ter certeza de que está redirecionando pra um controller e uma action que realmente existam.

Note que isso só funciona se o usuário tentar acessar um endereço que aponte para uma action inválida, mas em um controller válido. Se o usuário acessar apenas site.com/pudim, o CakePHP vai buscar um controller pudim e aí vai dar erro mesmo. Uma solução possível seria criar uma rota definindo que caso acessem um endereço com apenas um parâmetro depois do domínio, ele redirecione pra um controller específico e passe aquele parâmetro único como rota. Pra quem não sabe configurar as rotas, amanhã eu explico.

Deve ter mais de dois anos que escrevo em blogs na internet, e sempre usei o Google Adsense pra ganhar um dinheirinho. Mês passado fiquei vendo vários blogs falarem sobre a Super Loja, um script php criado pelo Jobson Lemos (não sei pra onde linkar) que gera uma loja do mercado livre pra você. Nunca havia dado bola pra esses programas de afiliados, mas depois de uma semana testando a Super Loja eu descobri que ela funciona muito bem, e muita gente clica e compra produtos. Vale a pena.

Mas a Super Loja não é perfeita. Pra maioria das situações ela funciona muito bem, mas se você precisar ser um pouco mais específico ao listar os produtos, ela não ajuda. Algumas vezes você quer exibir o resultado da busca por um produto, mas acaba vindo muito lixo junto. Por isso, resolvi criar meu próprio script de loja do mercado livre, também em PHP.

A Mega Loja é um script completo em PHP que usa usa a API do Mercado Livre para fazer uma busca por produtos. O Mercado Livre retorna uma lista de produtos em XML, e então o script usa essa listagem para montar uma vitrine de produtos, onde você ganha em dinheiro uma porcentagem do preço de cada produto vendido.

A Mega Loja terá compatibilidade com o sistema de URLs dinâmicas da Super Loja. Ou seja, se você já usa o script do Jobson, poderá trocá-lo pela Mega Loja e todos os links continuarão funcionando. A maior diferença se encontra no fato de que agora você terá a possibilidade de usar a URL também para definir a categoria do mercado livre onde deseja buscar os produtos, e a faixa de preço.

Por exemplo, se você quisesse listar iPhones, ordenando pelos mais vendidos, na Superloja você adicionaria /iphone/ven/ no final da URL. Com a Mega Loja, você poderá fazer /iphone/ven/39328/1000:2000/para também definir que quer buscar apenas na categoria 39328 (iphone), e apenas resultados entre R$1000 e R$2000. É claro, qualquer parâmetro é opcional, e você pode simplesmente usar da mesma forma que usa a outra loja atualmente.

Se posso usar da mesma forma, porque usar a Mega Loja? Existem outras vantagens! Uma delas é que você pode configurar uma lista de produtos recomendados em um menu lateral. Não importa por qual URL a pessoa entre na loja, os produtos recomendados aparecerão sempre os mesmos ali na lateral. Muito útil para recomendar os produtos da moda, ou para usar como acesso rápido para os mais vendidos.

Uma outra e útil diferença é na exibição dos produtos. A Mega Loja exibe os produtos com uma aparência melhorada, mais agradável. Em uma versão futura vai inclusive ser possível configurar as cores da loja, se quiser.

Ainda estou terminando de trabalhar no sistema, mas ele vai ser liberado para qualquer um utilizar em seu site, e é totalmente open source. Se você se preocupa pela loja do Lemos rodar as partes importantes no servidor dele sem você ver o que está acontecendo, meu script da Mega Loja é totalmente transparente, e roda 100% no seu próprio servidor.

Quem é desenvolvedor e sabe usar repositórios git pode dar olhada no projeto enquanto desenvolvo, pois a Mega Loja está no github. Qualquer pessoa interessada em contribuir para o projeto é só entrar em contato. Até agora meu maior contribuidor foi o Xaxá, que escreve comigo no Tomate Cru e mantem o blog Quinquil.

Mais notícias sobre a Mega Loja em breve.

Se você é um dos usuários do meu site emprestei.com, provavelmente já percebeu o que está acontecendo: o site está fora do ar. E provavelmente ficará fora do ar por mais alguns dias. Em parte a culpa é minha, e em parte é do servidor.

Tudo começou quando o meu maravilhoso host me deu a possibilidade de ser um dos primeiros transferidos para um novo servidor, diferente dos anteriores, que me permitiria ter espaço ilimitado, e transferência mensal ilimitada. Havia um aviso de que aplicativos poderiam deixar de funcionar na transferência, mas pra ter hospedagem ilimitada vale tudo, não? Aceitei na hora, e fiquei torcendo para tudo dar certo.

Depois disso, esqueci do assunto. Um ou dois dias depois a transferência de todos os meus sites para o novo servidor começou e, no mesmo dia, tive uma entrevista de emprego. Fui mostrar o emprestei.com para o entrevistador e, para minha surpresa, o site estava fora do ar. Uau, o que teria acontecido? Foi só quando voltava pra casa que me lembrei: a transferência pro novo servidor! Que droga. O Emprestei acabou saindo do ar, e meu repositório subversion também. No dia seguinte o repositório voltou, mas o Emprestei não.

Ainda não tive tempo de ver exatamente porque o Emprestei parou de funcionar depois que foi movido para o novo servidor, mas o que importa é que está dando algum problema com o Rails e ele não inicia mais. Eu poderia buscar o erro e colocar o site de volta no ar ainda hoje, mas resolvi fazer outra coisa.Já tem um tempo que eu estou querendo melhorar o Emprestei. Originalmente ele havia sido feito para participar do desafio Rails Rumble, onde você deve construir um site em no máximo 48 horas.

Pois é, o site inteiro foi feito em dois dias, e até que ficou bem feito. Mas ele foi feito bem antes de sair o Rails 2.0, que trouxe vários novos recursos, então eu já precisava melhorá-lo há tempos. Esse erro que o deixou fora do ar é a desculpa perfeita pra eu finalmente parar de enrolar e criar uma versão maior, melhor, e mais verde.

Acredito que a nova versão estará online ainda essa semana, e terá tudo que uma boa aplicação rails deve ter. Será todo RESTful, e ainda permitirá exportar em XML as coisas que você emprestou, para que outras aplicações possam ler sua lista de empréstimos e integrá-la a outros serviços.

Como diria o senhor Didi Mocó Sonrisal Colesterol Novalgino Mufumbo, aguarde e confie.

Eu já havia postado aqui antes sobre a Dreamhost, um dos melhores servidores de hospedagem de sites que eu já encontrei. No meu post anterior eu falava sobre como eles davam muito espaço em disco, e direito a uma transferência enorme, mas agora eles estão loucos! LOUCOS! A Dreamhost agora está oferecendo hospedagem com espaço ilimitado, e transferência mensal ilimitada para os próximos 30 que assinarem. E o melhor é que eu e o pessoal do meu outro blog (Tomate Cru) ainda estamos oferecendo um desconto pra quem assinar!

Veja abaixo o cupom de desconto, e um guia de como assinar.

Hospedagem com tudo ilimitado!!

O serviço de hospedagem da Dreamhost suporta PHP e Ruby, com banco de dados MySQL. Eles possuem um ótimo painel de controle, e possuem várias aplicações web prontas para instalar com um simples clique, incluindo o próprio sistema Wordpress que uso neste blog. Mas o melhor de tudo é que eles não são daqueles hosts chatos que proibem um monte de coisa. Na Dreamhost, você é bem livre, e ainda pode se conectar por SSH para realizar algumas operações mais rapidamente.

Código de desconto: TOMATECRU.

Se você está pensando em assinar, aqui vem o melhor de tudo: Nós do Tomate Cru estamos oferecendo um cupom de desconto! Ou seja, estamos anunciando uma hospedagem sem limites, e ainda vamos dar desconto! Basta assinar a dreamhost e usar o cupom TOMATECRU, e já ganhará desconto. Se você assinar o plano mensal, vai ganhar $50 dólares de desconto (mais de R$100 de desconto!!). E se assinar o plano anual, você ganha $67 dólares de desconto. Independente do plano que assinar, você ganha direito a um domínio internacional de graça!

Deixa eu explicar direito aqui… o plano anual custa $120 dólares. Nosso cupom dá um desconto de mais de 50%! O preço cai abaixo da metade! Assine agora! Eu quero saber o que você está esperando! Eles só tem mais 30 vagas pra hospedagem ilimitada, corra para assinar!

(Clique abaixo para ler o restante do texto e ver um guia passo a passo de como assinar uma hospedagem ilimitada na Dreamhost. Se não quiser ler o guia, a parte de inserir o cupom de Desconto está na etapa 7 do registro).


Leia todo o texto »


© 2007 Leonardo Bighi | iKon Wordpress Theme by TextNData | Powered by Wordpress | rakCha web directory