Andre Metzen


Framework mais que ágil

Publicado em Aplicativos Web,php por Andre Metzen, 24 de fevereiro de 2009

Já faz algum tempo que não posto por aqui, e acho que é melhor eu colocar alguma coisa antes de fazer aniversário de ausência nesse blog. :)

Como eu havia prometido para algumas pessoas, gravei um rápido (não tão rápido assim, tem 16min) screencast demonstrando alguns recursos do framework que estou trabalhando há algum tempinho. Não é nada revolucionário, mas com certeza pode ajudar e muito aqueles que querem criar aplicações web que não sejam muito complexas em pouquíssimo tempo (quanto me refiro a pouco tempo digo questão de minutos).

Vale lembrar que para não estender muito a duração do vídeo eu só demonstrei algumas poucas funcionalidades – se eu fosse mostrar tudo ia durar algumas horas – então quem tiver alguma dúvida, só entrar em contato.

Veja em uma resolução maior

BlogCamp-ES

Publicado em Blogosfera,Eventos por Andre Metzen, 24 de março de 2008

Eu não sou um exemplo de blogueiro, não posto com regularidade e não faço parte da panelinha da blogosfera brasileira, mas não podia deixar de me fazer presente a este evento que aconteceria justamente no prédio (e mais precisamente nas salas) onde estudo, no CT9 da UFES (Universidade Federal do Espirito Santo), além de ter um blog e estou sempre acompanhando o que se passa na rede dos blogs.

Estavam presentes no evento figuras muito conhecidas e também muitas pessoas que nunca tinha ouvido falar (ou cujo blog nunca tinha visitado), e isso é muito interessante, é um sinal de que há muito mais blogueiros do que eu podia imaginar (principalmente aqui no estado).

O evento em sí, para mim foi muito proveitoso. Fiz ótimos contatos (RafaCST, Lu Monte, Lu Freitas, Jonny Ken, Jonnhy C, Saulo, Alexandre Sena, Dulcetti, Marquin05, Karyne Lira, Pedro Cardoso, Thalles Waichert e outros) e presenciei interessantissimos debates. Mas essa não foi a opnião de todo mundo (talvez até da maioria), que achou que o clima de desconferencia do evento passou do limite. Outros acreditam que o modelo de blogcamps está esgotado ou se esgotando, o que eu não concordo, apesar de ser o primeiro blogcamp que participo. Acho que o que faltou foi uma pessoa de referencia, alguem da Confraria ou simplesmente alguem desinibido o suficiente para puxar um assunto, formar uma roda de pessoas e começar a debater.

Mas apesar de tudo, quem ficou presente o tempo todo no evento pode presenciar ótimos debates e grandes trocas de experiências e idéias. Principalmente no podcast (muito bom por sinal) produzido no sabado a tarde e na desconferencia que rolou no inicio da manhã do domingo.

Quem tentou acompanhar pelo Twitter talvez tenha tido a impressão de que as coisas não rolaram muito como esperado, mas a opnião de quem esteve sempre presente, diz que o saldo do evento foi positivo, e descrevendo em apenas uma palavra como disse o Rafael: “Uhuullll!!!”.

Fotos do BlogCamp-ES no Flickr

Fotos Oficiais com descrição de quem é quem (por Flickr de Jonny Ken):

Outros posts sobre o BlogCamp-ES:

Standard PHP Library – Parte 2

Publicado em php por Andre Metzen, 6 de março de 2008

Há algum tempo havia escrito sobre a SPL e fiquei por publicar outros artigos sobre o assunto. Infelizmente não consigo manter a regularidade de publicação que gostaria aqui no blog, mas vou indo na medida do possivel.

A partir da versão 5 do PHP a SPL já vem importada nativamente, o que facilita a utlização dos recursos que ela oferece. Desde então os desenvolvedores do PHP vem trabalhando pesado para melhorar o suporte a orientação a objetos. É claro que até lá ainda há um longo caminho a percorrer e isso requer um grande esforço de toda comunidade.

Isso certamente trará beneficios, tornando a linguagem mais madura, robusta, sem perder a simplicidade que a tornou tão popular. Há também os lados negativos, por exemplo a incompatibilidade de scripts desenvolvidos para versões anteriores, mas acredito que o "prejuizo" seja por uma boa causa. Já está na hora de resolvermos problemas de inconsistencia na padronização da nomeclatura das funções das bibliotecas nativas da linguagem (algumas utilizam o separador undescore como str_replace e outras não, como strlen), o que provoca em perda de produtividade.

A SPL veio com o objetivo de prover funcionalidades básicas, organizadas através de classes e interfaces, que evitam que o programador precise reinventar a roda e permitindo que ele possa focar suas atenções para a solução dos reais problemas. Nada pior do que perder horas para resolver problemas que foram criados pela própria linguagem.

A seguir demonstrarei como utilizar as classes de manipulação de arquivos SplFileInfo e SplFileObject.

SplFileInfo

Esta classe fornece todas as informações disponíveis para um determinado aquivo, passado como paramento na instanciação do objeto.

PHP:
  1. <?
  2. $file = new SplFileInfo("./meu_arquivo.txt");
  3. ?>

A partir disso, o objeto fornece os seguintes métodos:

  • getATime(): Data em timestamp do último acesso ao arquivo.
  • getCTime(): Data em timestamp da criação do arquivo.
  • getGroup(): Retorna o group do arquivo (disponível apenas em sistemas unix).
  • getInode(): Retorna o inode do arquivo (disponível apenas em sistemas unix).
  • getMTime(): Data em timestamp da última modificação do arquivo.
  • getPath(): Retorna o diretório no qual o arquivo está contido.
  • getPerms(): Retorna as permissões do arquivo.
  • getRealPath(): Retorna o caminho completo até o arquivo.
  • getSize(): Retorna o tamanho do arquivo em bytes.
  • isDir(): Retorna um valor booleano informando se o arquivo é do tipo diretório
  • isExecutable(): Retorna um valor booleando informando se o arquivo é um executável válido.
  • isFile(): Retorna um valor booleando informando se o arquivo é mesmo um arquivo, e não um diretório ou um link.
  • isLink(): Retorna um valor booleando informando se o arquivo é um link para outro arquivo ou diretório.
  • isReadable(): Retorna um valor booleando informando se o arquivo pode ser lido ou não.
  • isWritable(): Retorna um valor booleando informando se o arquivo pode ser alterado ou não.
  • openFile(): retorna um objeto do tipo SplFileObject, que será apresentado abaixo.

Estas funções fornecem os principais dados que podemos obter dos arquivos, e com certeza pode resolver muitos problemas. Principalmente as funções getMTime(), isWritable() e getSize() são comumente utilizadas no nosso dia-a-dia.

SplFileObject

Esta classe herda a classe SplFileInfo. Logo ela possui todas os métodos que a classe explicada acima possui, porém implementa também a manipulação do conteúdo do arquivo.

PHP:
  1. <?
  2. $file = new SplFileObject("./meu_arquivo.txt");
  3. ?>

Colocarei apenas os métodos mais importantes a seguir:

  • eof(): Retorna um valor booleando indicando se o ponteiro está no fim do arquivo.
  • fflush(): Força a escrita em disco do buffer do arquivo.
  • fgetc(): Retorna uma string contendo apenas um caracter lido do arquivo.
  • fgets(): Retorna uma linha do arquivo.
  • fscanf($format): Interpreta a leitura de um arquivo de acordo com o formato passado como parametro.
  • fseek($pos): Move o ponteiro do arquivo.
  • fstat(): Retorna um vetor com detalhes do arquivo.
  • ftell(): Retorna um inteiro com posição do ponteiro no arquivo.
  • ftruncate($size): Reduz o tamanho do arquivo ao tamanho especificado.
  • fwrite($string): Escreve o conteúdo da string no arquivo.
  • rewind(): Volta o ponteiro para o inicio do arquivo.
  • seek($line): Muda o ponteiro para linha especificada.

Estas funções são basicamente as funções oferecidas pela biblioteca atual do PHP, organizadas em objetos e permite a iteração já que esta classe também estende a interface Iterator. É importante relembrar também que estes métodos são nativos e tão eficientes quanto as funções já existentes.

Vale a pena dar uma conferida nas ferramentas oferecias pela SPL na sua oculta documentação.

Standard PHP Library

Publicado em php por Andre Metzen, 18 de outubro de 2007

A SPL (Standard PHP Library) é uma ferramenta ainda muito pouco conhecida do PHP. Um dos principais motivos disso é o fato de possuir pouca documentação oficial. Porém você pode encontrar a especificação completa escondida aqui.

Ela é basicamente um conjunto de classes e interfaces criadas para resolver problemas comuns e prover acesso eficiente a alguns tipos de dados. Como demonstração irei criar uma classe Collection, que será um conjunto de elementos quaisquer. Esse conjunto poderá ser acessado a principio como apenas como um vetor, e mais posteriormente publicarei outros artigos onde o tornarei mais poderoso.

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess
  4. {
  5.     protected $array = array();
  6.  
  7.     public function offsetExists($offset) // verifica se existe o elemento cujo indice é $offset
  8.     {
  9.         return isset($this->array[$offset]);
  10.     }
  11.    
  12.     public function offsetGet($offset) // retorna o elemento cujo indice é $offset
  13.     {
  14.         return $this->array[$offset];
  15.     }
  16.    
  17.     public function offsetSet($offset, $value) // atribui $value ao indice $offset
  18.     {
  19.         if ($offset)  $this->array[$offset] = $value;
  20.         else  $this->array[] = $value;
  21.     }
  22.    
  23.     public function offsetUnset($offset) // reseta o indice $offset
  24.     {
  25.         unset($this->array[$offset]);
  26.     }
  27. }
  28.  
  29. ?>

O "segredo" está na interface ArrayAccess, ela exige a implementação dos métodos offsetExists(), offsetGet(), offsetSet() e offsetUnset() que podem ser facilmente criados. Dessa forma podemos executar o seguinte código:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[0] = "Olá";
  6. $x[] = "Mundo!";
  7.  
  8. //echo implode(" ", $x); // isso não funciona pois o tipo do objeto $x não é um vetor
  9. //echo count($x); // isso também não funciona pois $x não é "contavel"
  10. echo $x[0]." ".$x[1];
  11.  
  12. ?>

Agora precisamos de mais um recurso muito importante: poder contar quantos elementos há nesta Collection, já que não podemos ter acesso externo a propriedade Collection::array. Basta adicionar a interface Countable e adicionar o método count().

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess, Countable
  4. {
  5.     protected $array = array();
  6.  
  7.     ...
  8.  
  9.     public function count()
  10.     {
  11.         return count($this->array);
  12.     }
  13. }
  14.  
  15. ?>

Agora podemos percorrer o vetor em um for:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[] = 1;
  6. $x[] = 2;
  7. $x[] = 4;
  8. $x[] = 8;
  9.  
  10. for($i=0; $i<count($x); $i++) // agora funciona!
  11. {
  12.     echo $x[$i]."\n";
  13. }
  14.  
  15. ?>

Bom, vou ficando por aqui, em breve escreverei um pouco mais sobre a SPL e mostrarei alguns exemplos úteis desse recurso.

Abraços!

Crie um sistema de busca eficiente

Publicado em Usabilidade,Web 2.0 por Andre Metzen, 16 de outubro de 2007

Não pretendo aqui abordar meios técnicos de se criar um sistema de busca eficiente. Quem deveria nos ensinar essa parte do trabalho, por motivos óbvios, é o pessoal do Google!

Então irei descrever rapidamente alguns itens importantes que acredito que possam ajudar os seus visitantes a utilizar melhor o seu sistema de busca e encontrar mais rapidamente as informações.

Porque criar um sistema de busca para meu site, se já existe o Google?

A primeira pergunta que grande parte das pessoas faria é: "Porque eu não coloco a caixinha de busca do Google pra vasculhar meu site e pronto?". Basicamente devemos considerar que por mais eficiente que sejam os mecanismos de busca existentes no mercado, nenhum deles conhece melhor seu publico e o conteúdo do seu site do que você. Deve-se levar em consideração também que há muito menos conteúdo em seu site do que em toda internet, logo isso deve fazer com que o trabalho seja mais fácil de ser realizado por você, do que por outros mecanismos.

Também deve ser levado em consideração o fato de você conhecer quais sãos as paginas de maior (e de menor) importância no seu site, ao mesmo tempo em que você tem mais acesso a meta-dados do que qualquer outro, o que faz de você a pessoa mais indicada a criar um buscador para seu site ;)

Além disso podemos citar outros detalhes que te beneficiam.

  • Confiança em seus próprios dados
  • Não há necessidade de se preocupar com pessoas tentando burlar seu sistema de busca
  • Conhecimento de seu próprio vocabulário

Acho que estes já são motivos suficientes para investir um pouco de nosso precioso tempo com o desenvolvimento de nosso próprio buscador.

O que o usuário espera de um sistema de busca?

Nada mais importante do que apresentar ao seu usuário justamente aquilo que ele espera ver! Portanto o mais importante é que você mantenha-se sempre próximo ao design e interação esperados. Ou seja, apresente claramente (preferencialmente no canto superior direito, pois é ali que os usuários normalmente a procuram) uma caixa de texto, seguido de um botão com o rotulo "pesquisar" ("buscar" também serve, mas evite expressões como "busca rápida", "ir" e etc...) que ao ser clicado deve levar o usuário a uma nova pagina com os resultados apresentados linearmente(um abaixo do outro, sequencialmente).

Além disso é importante que a caixa de busca esteja em todas as paginas, já que não podemos prever quando o visitante irá querer realizar uma busca, e não queremos lhe dar ao trabalho de voltar a pagina inicial somente para fazê-lo. Detalhes como comprimento da caixa de busca também deve ser levado em conta. É irritante você ter que voltar para ver o que foi digitado, além de incentivar os usuários a digitar consultas maiores o que normalmente leva a melhores resultados. Segundo Jakob Nielsen o ideal é uma caixa que suporte 27 caracteres (não, esse número não foi retirado da cartola mágica do tio Jakozão. Ele foi feito com base em estudos e estatísticas geradas por um grande número de pesquisas).

Busca avançada

A busca avançada pode ser realmente útil para aqueles mais experientes, mas pode ser um grande problema para os usuários mais leigos. Recursos como "e", "ou", "não" e semelhantes não costumam ser bem utilizados por estes usuários, o que pode, na maioria dos casos, prejudicar a busca e acabar tornando a experiência do usuário em algo frustrante. Um recurso comummente utilizado e que costuma ser interessante é a utilização de aptas para realizar uma busca de texto literal.

A pesquisa restrita, na qual você pode limitar a busca a uma categoria ou área especifica, é um método muitas vezes útil mas que pode acabar sendo um tiro no próprio pé. Ao mesmo tempo que faz com que o visitante consiga filtrar os resultados, este recurso pode impedir que ele encontre outros resultados que também seriam relevantes. Por exemplo uma loja que vende um livro e um DVD de um filme baseado nesse livro, se o visitante estiver restringindo a busca apenas a livros ele não não encontrará o DVD e isso pode resultar numa redução de vendas.

Apresentação dos resultados das buscas

Quando imaginamos um resultado de busca, o que nos vem a cabeça é uma lista de blocos de texto, onde cada bloco começa com um titulo em azul, com uma fonte um pouco maior e sublinhado, seguido de um pequeno paragrafo complementar. É justamente assim que você deve apresentar os resultados. Além disso nada mais claro do que colocar os resultados mais relevantes em cima.

Se nenhum resultado é encontrado devemos deixar claro que não foi retornado nenhum item com as palavras-chaves que ele digitou, e preferencialmente oferecer opções para que ele possa corrigir a consulta ou oferecer dicas de como melhora-las. Nunca, jamais, nem em sonho, deixe a pagina em branco! A não ser que você queira que seu visitante fique esperando indefinidamente os resultados aparecerem magicamente.

Bom, acho que por enquanto é isso, se vocês tiverem alguma critica, ou sugestão, é só deixar um comentário.

Abraços.

Quem eu leio e acompanho

Publicado em Blogosfera,Geral por Andre Metzen, 26 de agosto de 2007

Demorei um pouco para responder ao meme que Newton Wagner me convidou, de dizer quais os blogs que eu leio e acompanho. Vou procurar ser breve, pois se fosse listar todos não terminaria hoje.

  • Bruno Dulcetti: Gosto muito do estilo dos posts dele, sempre descontraidos e interessantes. Assim como eu deveria tentar publicar com mais frequencia.
  • Leandro Vieira: Grande amigo, sempre trocamos muitas ideias pelo MSN. O que esse garoto não tem de altura tem de conhecimento!
  • Luli Radfahrer (DWD3): Esse aí é bastante conhecido. Esteve presente no InterCon 2005 e 2006 e pude assistir suas excelentes palestras palestras. Em seu blog normalmente escreve sobre assuntos polêmicos de uma forma impressionantemente simples.
  • El Micox: esse camarada também mantem um bom blog. Publica com frequencias dicas simples e bastante uteis no dia-a-dia dos desenvolvedores.
  • Bruno Torres: Este é bem conhecido e sempre bastante polêmico :) Costuma abordar uma visão bem diferente em seus posts.

Bom, é claro que há muitos outros blogs além desses eu eu acompanho (fechaTAG, Japs, Cris Dias, Garota Sem Fio, Rafael Dohms ...), mas para não me prolongar vou ficando por aqui.

Usabilidade e links patrocinados: uma relação íntima

Publicado em Tendências,Usabilidade por Andre Metzen, 25 de agosto de 2007

Terminei de ler o livro Usabilidade na Web de Jakob Nielsen e Hoa Loranger. O livro é excelente, realmente vale a pena a leitura! Vou tentar explicar aqui um tópico abordado por ele sobre a relação entre usabilidade e links patrocinados e como os sistemas de buscas estão "fadados" a ficar com o lucro proveniente dos esforços de nós profissionais da web:

Hoje em dia é claro a importância de ferramentas de busca na internet. Isso se deve principalmente ao fato de que a maioria pessoas das pessoas recorrem a internet para encontrar uma informação especifica ou com um objetivo bem especifico. Não é uma pratica comum uma pessoa navegar a toa esperando a sorte para que apareça algo que lhe interesse. Portanto, recorremos aos sistemas de busca (Google, Yahoo, MSN Search e etc...) para encontrarmos nossas informações, e seguirmos a trilhas (ou links) que mais se encaixam com o nosso objetivo.

E é ai que entra os famosos links patrocinados. Não há hora e local melhor para expor um anuncio do que um sistema de busca pois é justamente nesse local que o usuário está buscando um produto, serviço ou até mesmo uma informação (imaginem se a televisão pudesse apresentaranúncios relevantes, com base naquilo que você está querendo naquele exato momento!). Isso justifica a eficácia dos links patrocinados.

Esse novo sistema de anúncio funciona de uma forma muito interessante, na qual não vou entrar em detalhes agora, mas podemos descrevê-la como sendo um leilão de palavras-chave, onde uma empresa considera quanto vale pagar para tentar atrair um visitante que está buscando por uma determinada palavra-chave e consequentemente interessado por alguma coisa relacionado a ela. O sistema de busca exibe um número limitado de anunciantes que ofereceram as melhores quantias por aquela palavra. Simples e eficiente!

Assim, a medida que as empresas inteligentes forem observando que o ROI (return on investment) deste sistema é bem acima das técnicas publicitárias que se adequam as antigas mídias, eles passarão a transferir os investimentos para links patrocinados. Isso claramente ia provocar um aumento dos preços das palavras-chaves até um certo limite, por exemplo: se você paga R$ 0,50 por clique em uma determinada palavra-chave, e em média a cada 10 usuários que vieram deste link você consegue obter um lucro de R$ 10,00 fica claro que você está ganhando R$ 1,00 por clique tendo um retorno de R$ 0,50. Logo o máximo que você poderia pagar ao sistema de busca seria R$ 0,99 para que você ainda obtenha lucro (mesmo que ele seja de 1 centavo).

E é ai que entra a usabilidade! Realizando testes de usabilidade, fazendo um estudo de como seus usuários se comportam nele, você poderia aperfeiçoa-lo para que a taxa de conversão (média de visitas que se convertem em lucro) subisse, utilizando o caso acima como exemplo, uma média de R$ 15,00 de lucro a cada 10 usuários. Agora seu lucro seria de R$ 1,50 e o retorno de R$ 1,00. Com isso seriapossível aumentar o valor que você paga por clique na palavra-chave. se o web site de seu concorrente possui problemas de usabilidade e não consegue uma taxa de conversão como a sua, ele não poderá elevar o lance da palavra-chave acima do que ele ganha por clique, caso ele esteja interessado em obter lucros.

Isto levará a uma concorrência por aprimoramento da usabilidade dos web sites, para permitir uma taxa de conversão melhor, consequentemente ter uma margem de lucro maior e por fim poder pagar mais pelo lance da palavra-chave e ficar acima de seus concorrentes nos links patrocinados dos sistemas de pesquisa.

E dessa forma é possível concluir como a usabilidade, em longo prazo, está diretamente relacionada ao valor pago pelos anunciantes aos sistemas de buscas para exibir seus links nos resultados de busca. Quem sai lucrando com isso obviamente são os sistemas de busca que ficam com todo o lucro enquanto as empresas fazem todo o esforço para melhorar seusweb sites.

Será que estamos prontos para sermos mobile?

Publicado em Tendências por Andre Metzen, 11 de maio de 2007

Não sei quanto a vocês, mas eu tenho um desejo incontrolável de possuir todas as minhas informações em qualquer lugar, do modo mais pratico e barato (se possível gratuito). É absurdamente tentadora a ideia de ter acesso a todas os meus documentos, minhas músicas, vídeos e e-mails em qualquer lugar, sem se preocupar com estar gastando horrores em tarifação de dados ou semelhante.

Talvez isso esteja um pouco fora da realidade hoje, mas eu acredito que isso não está longe de se tornar algo tão comum como camera VGA em celular é hoje em dia. Se bobear vão lançar radinho de pilha que tira foto de tão popular que ficou as tais camerazinhas (que por ironia meu celular não tem). Se você não tem camera no seu celular, não fique chateado, é bem possível que nos próximos 2 anos você venha a ter, considerando que em média uma pessoa troca de celular de 2 em 2 anos. E é nessa onda que deve vir a popularização das novas formas de transmissão de dados via celular como W-CDMA, EV-DO, WiMax e etc...

Hoje são mais de 2,5 bilhões de celulares e esse número deve chegar a 3 bilhões até o final de 2007 segundo pesquisa da GSM Association e da consultoria Ovum. Levando em conta esses número, podemos estimar que até o final de 2009, aproximadamente 3 bilhões de usuários estarão de celular novo (ou algo próximo disso, não fiz as contas precisamente) e se essas novas tecnologias se popularizarem (e ficarem acessíveis, é claro) teremos um novo mercado com um crescimento absurdo que é o de consumidores móveis de informação. Esse novo mercado talvez será maior até que o número de pessoas conectadas a internet através de computadores pessoais, devido a praticidade e acessibilidade dos celulares.

E a pergunta é: nós estamos prontos para atender as necessidades desses novos consumidores móveis?

Minha especialidade não é a área móvel, mas acho que está bem claro que em breve deverão surgir novos serviços web para atender a esse mercado, vamos ficar atentos e não vamos deixar as oportunidades escaparem!

Abraços!

Favicon do iMasters entre os memoráveis

Publicado em iMasters por Andre Metzen, 7 de fevereiro de 2007

Mais vindo do blog do Elcio, dessa vez sobre o iMasters. Segundo o smashing magazine o Favicon do iMasters está entre os 50 mais memoráveis e bonitos. Parabéns a todos nós da equipe iMasters! ;)

Explicação visual para Web 2.0

Publicado em Web 2.0 por Andre Metzen, 7 de fevereiro de 2007

Mesmo viajando não consigo abandonar completamente meus feeds. Vi hoje no Google Operation System e posteriormente no blog do Elcio um video muito interessante explicando aquilo que muitos de nós chamamos de Web 2.0. Vale a pena ver!

Próxima Página »