Scroller Made in Mootools

Mesmo a Mootools sendo a biblioteca perfeita (pra mim, pelo menos), algumas vezes é preciso de uma pequena ajudinha externa. Exemplo de hoje: scrollers! Nada mais fácil do que fazer um deles exclusivamente com Mootools, mas é meio chato ter que criar os controladores (ou setinhas) e saber quem é o anterior ou o próximo.

Como acabei precisando de um scroller assim, aproveitei e criei uma classe que poderei reutilizar em algum outro projeto em que ela se faça necessária. Já que gostei do resultado, vou aproveitar e deixar o script pra vocês. O resultado será algo parecido com esse exemplo. Prontos? Então vamos lá!

O Código

Scroller Made in Mootools

O script não poderia ser mais simples, em torno de umas 50 linhas de código (você precisaria de centenas se não fosse a Mootools, ou alguma outra biblioteca que faça o serviço sujo). Você pode fazer o download dele aqui. Para “instalá-lo”, basta incluí-lo em seu documento, assim como a Mootools. Além disso, você também vai precisar do plugin Fx.Scroll, que pode ser conseguido no More Builder da Mootools, e incluí-lo no seu documento também.

Update: logo que precisei usar a classe novamente, vi que cometi um erro grotesco. Código atualizado, com erro corrigido e uma nova funcionalidade, explicada logo abaixo. Valendo uma mariola pra quem descobrir minha estupidez, os dois códigos estão disponíveis para download.

O HTML

O HTML necessário é a parte que eu considero a mais complicada, chata e sem graça. Sem o HTML criado direitinho, o scroller não vai funcionar. A lógica é a seguinte: precisamos de um container (geralmente uma div) de uma largura (ou altura) fixa. Esse container é quem vai esconder os itens que não serão mostrados no scroller. Dentro desse container, vamos precisar de mais um container (geralmente mais uma div, ou então uma lista), também de altura/largura fixa, mas que seja igual a toda a extensão dos itens. Ou seja, o container de dentro será maior do que o container de fora.

<div id="container">
    <div></div>
</div>

Acredite, é mais complicado do que parece. Agora sim, podemos colocar nossos itens dentro do container que está dentro de outro container (hein?). Fora isso, precisamos apenas de mais dois elementos (podem ser links) para serem os handlers de anterior e próximo e pronto, aí está o HTML. Só precisamos do CSS que vai ajudar na mágica do script.

O CSS

Como o nosso container externo precisa esconder o que há no container interno (que é maior), ele precisará de um overflow: hidden. Sem isso, tudo o que há no container interno ficará exposto, e aí o scroller perde a graça. Também não podemos nos esquecer de definir as alturas/larguras dos containers e itens. Vamos fazer primeiro um scroller vertical, ligeiramente mais fácil:

* {
  margin: 0;
  padding: 0;
}
#container {
  height: 20px;
  overflow: hidden;
  width: 100px;
}
#container div {
  /* Não é necessário definir a altura, o elemento irá "crescer" sozinho */
  width: 100px;
}
#container p {
  /* A mesma altura de #container, mas isso pode variar com o gosto do freguês */
  height: 20px;
}

O Script

Agora sim, vamos colocar a mão na massa. Minha classe, quando instanciada, leva apenas dois parâmetros: o container exterior (o container interior é deduzível…) e as opções. Dentre elas, temos à disposição todas as opções da classe Fx, e também previousButton e nextButton, que são os handlers para o elemento anterior e posterior do scroller.

var myScroller = new Fx.Scroller("container", { previousButton: "previous", nextButton: "next" })

Aproveitando a atualização da classe, também criei vergonha na cara e adicionei os eventos onNext e onPrevious, executados quando o scroller vai para frente ou para trás, respectivamente.

Pronto! Você escreveu apenas uma linha de script e seu scroller já está funcional, passando de um elemento para outro com apenas um clique!

Scrollers Horizontais

A termos de script, um scroller horizontal é idêntico. A mágica se esconde toda no CSS para este caso. Primeiro precisamos colocar os elementos um ao lado do outro dentro do container interior, certo? Certo. Para isso, usamos a propriedade float, sinta-se à vontade para escolher a qual lado flutuar.

Passando ao segundo passo, devemos definir a largura. A fórmula é a seguinte: número de elementos vezes a largura de qualquer um deles. Se você usar margins ou paddings, não esqueça de levá-los em consideração também.

Usando a técnica de scrollers horizontais, também podemos criar scrollers “mistos”. Nesse caso, há várias linhas e várias colunas de itens ao mesmo tempo. O efeito, se bem usado, pode ficar muito interessante. Quem teve a oportunidade de observar os demos da versão 1.1 da Mootools deve saber do que estou falando.

Dicas para Ir Além

Bem, só fazer itens se mexerem pode não ter tanta graça assim pra você. Como eu disse, minha classe usa todas as opções da classe Fx, ou seja, eventos, transições, offsets, enfim. Agora é sua vez de brincar! Use o offset para mudar a posição dos itens, eventos para mudar sua opacidade, criatividade! Também sinta-se livre para usar os métodos da classe também: next, previous, scrollTo, enable e disable (para ativar ou desativar os botões).

Espero que isso sirva pra alguma coisa! E também espero postar em um intervalo um pouco menor… O pessoal deve ter pensado que eu fugi do país depois de uma certa polêmica. Mas não, só estive ocupado mesmo… Até mais!

04 de agosto, 2008

CodeCast #5 – Frameworks

CodeCast #5 - Frameworks

Depois de uma longa espera, cá estamos nós novamente com mais uma edição do CodeCast! Dessa vez o assunto é Frameworks. Com a presença do Jader Rubini, falamos de tudo um pouco sobre PHP, Ruby, Python e JavaScript, e seus respectivos CakePHP, Rails, Django, jQuery e Mootools. Um bate papo bem interessante pra quem ainda não adotou alguma dessas ferramentas ou semelhantes.

Pesando 39MB, ultrapassando a marca dos 55 minutos, esperamos que gostem, enviem feedback, sigam nossas dicas, enfim. Também gostaria de agradecer muito ao Jader por aceitar nosso convite, que além de tudo rendeu um bate papo muito legal, do chimarrão ao pão de queijo, de Mootools a Django.

Até mais!

15 de junho, 2008

Frameworks: Por um PHP Menos Ruim

Frameworks - Por Um PHP Menos Ruim

O PHP não é a linguagem mais “cool” para se desenvolver para web no momento. Outras linguagens estão tomando o posto por serem mais compatíveis com o ambiente web que temos hoje. Um dos fatores que mais influencia nessa “tomada de território” é a agilidade no desenvolvimento que, aliado aos frameworks dessas linguagens, tornam o PHP quase obsoleto. Há como manter o PHP a pelo menos um nível competitivo com essas linguagens?

Apesar de todos os seus defeitos, o PHP ainda é a linguagem mais usada no mercado, embora venha perdendo espaço para novas tecnologias, como Ruby e Python. Aliadas a poderosos frameworks, essas “novas” linguagens (Ruby e Python são muito mais antigas que você imagina) tornam o desenvolvimento muito mais rápido. Só com o PHP, raça e vontade nunca será possível alcançar tais níveis de produtividade. A solução é seguir a mesma idéia: adotar um framework.

Não culpo o PHP por ser uma linguagem bem mais lenta em termos de desenvolvimento, a culpa é dos próprios desenvolvedores. Eles geralmente escolhem o lado mais difícil da coisa, recriando toda a estrutura para cada novo sistema. Poucos se preocupam em pesquisar por novas soluções que resolvam seus problemas de maneira mais rápida e automatizada. Ruby e Python, apesar de serem linguagens mais ágeis em minha opinião, só se tornaram “modinha” após o aparecimento dos frameworks. Por que os programadores PHP não escolhem o mesmo caminho?

Apesar de estar migrando, agora passo a acreditar que o que realmente importe talvez não seja somente a linguagem, mas sim as ferramentas que nos auxiliam com elas (leia-se frameworks), além dos próprios programadores. Pra que sofrer? Provavelmente alguém com mais tempo e conhecimento já tenha criado uma solução para determinado problema, bem melhor do que você mesmo poderia fazer, sem tempo e às vezes sem tamanho conhecimento.

Confesso que nunca havia usado um framework para PHP, embora já tenha sentido necessidade. Sempre praguejava a cada sistema iniciado, mas mesmo assim desenvolvia minhas próprias soluções para tornar o desenvolvimento menos doloroso. Isso durou até um mês atrás, quando me vi diante de um sistema bem complexo a ser desenvolvido na agência onde trabalho. Sem um framework, levaríamos meses para acabar. A única solução foi a adoção de um framework para PHP. Agora, o desenvolvimento do sistema flui rapidamente, e de maneira bem menos dolorosa, chata e sem graça.

A solução escolhida por nós foi o CakePHP, talvez o framework mais conhecido para PHP. Sem dúvida alguma, é uma ferramenta de grande poder na hora de desenvolver, principalmente na versão 1.2 (ainda beta, com documentação escassa até o momento, e que talvez dê algumas dores de cabeça até que esteja completa). Para mim, o tempo de desenvolver em PHP puro se encerrou para sempre.

Talvez você não goste tanto do Cake quanto eu, e prefira outras opções. Opções não faltam, há o Code Igniter, o Zend, o Symfony, entre dezenas de outros. Não importa qual seja o framework, desde que ele traga um ambiente mais rápido e agradável para desenvolvimento. Pra falar bem a verdade, uma das maiores razões para eu ter escolhido um framework em lugar de criar minha própria biblioteca de funções foi a implementação de orientação a objetos nesses frameworks, que pra mim dão muito mais sentido à programação.

Para programadores de outras linguagens, o mesmo princípio se aplica: não importa qual solução se use, desde que ela traga benefícios. Me direcionei para PHP pois é onde mais trabalho no momento e, por ironia, a linguagem que menos gosto. Os frameworks foram algo que me fizeram tomar um pouco mais de gosto pela linguagem. E se você não utiliza nada para ajudar no desenvolvimento, está na hora de rever seus conceitos…

14 de junho, 2008

Lançada a Mootools 1.2

E foi lançada a nova versão da Mootools! E juntamente com isso, várias novidades: um novo visual do site, nova documentação, muitas funcionalidades interessantes. Nem mesmo o blog oficial não anunciou a nova versão (inclusive está “fora do ar”, como diz a página inicial, assim como os demos), mas tudo bem.

Mootools 1.2

Dentre as novidades, podemos citar o Swiff (plugin para integração com Flash), Element Storage, entre várias outras, como foi anunciado na versão beta (que eu não testei, diga-se de passagem).

Pelo visto, mais coisas interessantes para descobrir nessa biblioteca que eu acho simplesmente incrível, e agora facilitando nossas vidas como nunca! Vai lá, faça o download, teste, e garanto que você vai gostar!

12 de junho, 2008

Backup: Um Salvador de Vidas

Quanto tempo você leva desenvolvendo algum projeto, trabalhando em um freelance, mantendo um blog? Não muito pouco, creio eu. E quanto tempo você pode levar para perder tudo isso? Uma “catástrofe” pode acontecer a qualquer momento, levando todo seu trabalho embora. Não teria sido muito mais fácil manter um backup?

Ninguém está livre de um desastre. A qualquer momento seu HD pode queimar, seus arquivos podem ser infectados por algum vírus, algum raio pode cair em cima de seu computador, ou até mesmo o seu servidor de hospedagem pode explodir (pergunta, vai!). Esse é o tipo de coisa que ninguém espera, e não há como dizer “hoje vou perder todos meus arquivos, é bom fazer uma cópia”. O destino é cruel e impiedoso, principalmente com os descuidados.

A maneira mais eficaz, e também mais sensata, é sempre manter um backup de seus dados importantes. É bom sempre fazer isso com uma certa regularidade. Backups diários podem ser custosos e até impraticáveis em certos casos, então realizá-lo uma vez por semana já parece suficiente. Por pior que seja a catástrofe, você sempre terá para onde correr.

Mantendo cópias regulares, com certeza em pouco tempo você terá uma quantidade enorme de dados armazenados. Aí o jeito é organizar! Manter uma lista dos arquivos copiados, data de gravação, enfim. Não adianta TER os dados e não saber onde encontrá-los. Pode acreditar, essa sensação é ainda pior.

Por que esse texto estilo sermão? Eu explico. Semana retrasada, uma explosão no data center H1 do The Planet derrubou uma montanha de servidores (e três paredes, segundo me consta), e eu estava em um deles. Antes que eu ficasse sabendo de mais informações, se abateu o pânico: eu não tinha um backup. Por sorte não houve perda de dados, mas já foi o suficiente para abrir o olho, e ser um pouco mais cauteloso. Nem mesmo armazenados remotamente nossos dados estão seguros.

Um pequeno esforço que pode salvar muito retrabalho, e até sua vida, dependendo de quão dependente ela seja de seu trabalho. E você, mantém um backup? Nem que seja mensal, apenas de trabalhos correntes, ou o que quer que seja importante para você guardar?

11 de junho, 2008