TidBits
Mar 3

[Vídeo] Montagem futurista da microsoft para os próximos 10 anos

O Fabrício que também trabalha aqui na click mandou um link hoje de um vídeo de ficção da Microsoft que mostra como o mundo poderá ser até 2019.

A montagem futurista dá exemplos de várias tecnologias que hoje estão em pesquisas mas que podem, um dia, se tornar realidade:

No site Microsoft Office Labs fala mais sobre o vídeo que chamaram de Future Vision Montage.

Pra completar o post falando sobre variação no tempo, eis uma montagem legal que foi postada no Capinaremos, pedindo para nós analisarmos o presente antes de imaginarmos o futuro.

Analisem o presente

[]s

bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Mar 2

Calendário em Javascript em português usando jQuery

Este, é um plugin de jQuery, para mostrar calendário ao escolher uma data em um input, foi desenvolvido por mim (Danilo Augusto), para ser usado em alguns projetos na Click. O plugin tem uma série de opções para ser customizadas e pesa 9kb de javascript (ou 7kb na versão minificada).

Clique aqui para ver o post com todas as opções do calendário, um pequeno tutorial de como utilizá-lo além de um zip disponível com todos os exemplos e scripts.

bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Feb 26

Jogo Pong em Javascript e jQuery – Passo a passo

Quem não se lembra do famoso jogo do tele game, pong?

Bom, se você tem minha idade, talvez você nunca nem tenha ouvido falar em pong ou tele game, então veja a foto abaixo que talvez você reconheça, afinal já tem pong até pro iphone.

pong

Baseado nisso, e tendo como inspiração a onda recente de jogos em javascript, decidi fazer desse, meu primeiro jogo em javascript, fiz do zero, e aqui vou mostrar passo a passo a evolução do script em 12 momentos.

Veja o resultado final:

Ainda deve ter bugs, mas a intenção é somente desenvolver um jogo simples e praticar lógica e conceitos em Javascript. Antes de começar a falar, devo dizer que quem quiser dar uma olhada em como foi feito, tem aqui todos os 12 passos para download.

Então vamos aos passos:

Passo 1 – Montando o HTML / CSS

No passo mais simples de todos, o html e css usado no jogo é montado:

Clique aqui para ver o passo 1.

Passo 2 – Movendo a bolinha

No passo dois é começo da movimentação do jogo, a bolinha começa a se movimentar pra uma direção, aleatóriamente e depois ela bate nas “paredes” e inverte sua direção.

Clique aqui para ver o passo 2.

Passo 3 – Calculando o ponto

Do passo 2 pro três, eu calculo na hora em que a parede passa pela posição da raquete, se ela “bate” na raquete, ou não, caso não bata, é marcado o ponto. (É necessário testar algumas vezes pra conseguir ver o efeito, já que a bolinha começa numa posição randômica).

Clique aqui para ver o passo 3.

Passo 4 – O placar

Agora, toda vez em que um ponto é marcado, o placar é atualizado.

Clique aqui para ver o passo 4.

Passo 5 – Reiniciando a partida

Após um ponto, não é mais necessário apertar F5 pra reiniciar a partida. Em 3 segundos a partida é reiniciada automaticamente. Agora o jogo não tem mais fim.

Clique aqui para ver o passo 5.

Passo 6 – Movendo as raquetes (2 players)

Nesse passo, é onde começa a mover a raquete, e este, é o único em que é possível mover as duas raquetes (o que parece legal, mas não é muito não, é impossível mover as duas raquetes ao mesmo tempo ).

Clique aqui para ver o passo 6.

Passo 7 – Jogando contra o computador

Aqui, a raquete da direita já está automática, qndo a raquete da esquerda rebate, é calculado a trajetória da raquete da direita, que se posiciona automaticamente.

Clique aqui para ver o passo 7.

Passo 8 – Aumentando a velocidade

Agora, a medida em que o jogo for rolando a velocidade da bola vai aumentando, até que o ponto seja efetuado. Depois quando o jogo é reiniciado, a velocidade é voltada ao normal.

Clique aqui para ver o passo 8.

Passo 9 – Batendo na ponta da raquete

Como a direção inicial da bolinha é sorteada, foi implementado o recurso de “bater na ponta da raquete”, que aumenta o angulo da rebatida da bola, e ajuda a enganar o adversário. Nesse passo, também foi implementado um recurso para as raquetes voltarem ao centro da mesa após um ponto for concluído.

Clique aqui para ver o passo 9 .

Passo 10 – Configurando a dificuldade

Pra não ficar muito banal, é possível definir a dificuldade do jogo, antes de começar a partida, a dificuldade interfere na velocidade inicial da bolinha e na velocidade da raquete adversária.

Clique aqui para ver o passo 10 .

Passo 11 – Game Over

Depois de tantos passos, finalmente o jogo tem um fim, vence que fizer 5 pontos primeiro. O jogo pode ser reiniciado depois e ter a dificuldade alterada.

Clique aqui para ver o passo 11 .

Passo 12 – Mouse Wheel

Para facilitar a movimentação da raquete, no passo 12, foi implementado o controle por mouse wheel, baseado naquela função de mouse wheel postada aqui a pouco tempo atrás.

Clique aqui para ver o passo 12 .

Depois do passo 12 alguns ajustes ainda foram (e talvez outros serão) feitos, como velocidade do jogo, e algumas melhorias de desempenho.

Exportando:

E se alguém quiser colocar o jogo em algum lugar, basta chamar o iframe com o código:

<iframe width="460" height="430" frameborder="0" scrolling="no" src="http://www.tidbits.com.br/download/pong/pong.html"></iframe>

Lembrando que deixei disponível todos os 12 passos para download.

E pra quem nunca ouviu falar de tele game, segue uma imagem do que foi um dos primeiros vídeogames:

tele-game

Quando eu tiver tempo livre, vou fazer um jogo estilo arkanoid, com fases, records e tudo mais.

[]s

bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Feb 13

Zoom de Imagem em Javascript e jQuery – Passos 5 e 6

Resolvi fazer mais um passo do último post Imagem com zoom em Javascript e jQuery – ImageZoom. Apesar de ser o último passo não é o mais complicado e achei interessante

Passo 5 – botões para aumentar e diminuir Zoom

Passe o mouse sobre a imagem e clique em + e – para aumentar e diminuir o zoom.

A partir do passo 2, foram adicionados dois botões que aumentam ou diminuem 3% do tamanho da imagem e depois recalcula tudo para fazer o parallax, bem simples.

Passo 6 – MouseWheel

E pra finalizar, fiz um script (na verdade comecei ele, não cheguei a finalizá-lo) que usa o mouse wheel para controlar o zoom, se você não sabe trabalhar com isso, dê uma olhada num post antigo meu que mostrar como adicionar um evento ao mouse wheel . Esse script deixei num arquivo a parte (pq senão atrapalharia o scroll aqui), então veja o ImageZoom com mouse wheel aqui

O que eu disse que não terminei no script é que, quando o mouse está sobre a imagem e ao mesmo tempo roda o wheel, dá umas travadas bruscas que precisam ser suavizadas.

Devo lembrar que todos os passos, htmls e scripts estão disponíveis para download.

[]s

bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Feb 11

Imagem com zoom em Javascript e jQuery – ImageZoom

Você já deve ter visto imagens com zoom, feito em flash ou em javascript, é bastante comum em sites de e-commerce. Eu fiz um modelo em javascript / jQuery em 4 passos.

Todos os passos, htmls e scripts estão disponíveis para download.

Passo 1 – MyParallax

Passe o mouse sobre a imagem, que se deslocará horizontalmente:

O primeiro passo não vai ter nenhuma explicação pois ele já é um post antigo meu, explicando parallax e o evento mousemove>, o myParallax Parallax com javascript com jQuery. Quem não viu, veja pois é interessante, e quem já viu o post, reveja, pois vou utilizar esse script de base para o ImageZoom.

Lá no post eu explico linha por linha, o que o Javascript faz.

Passo 2 – Mouse Move Horizontal e Vertical

Passe o mouse sobre a imagem, que se deslocará horizontalmente e verticalmente:


E o que mudou do passo 1?

Agora o “parallax” é horizontal e vertical, quem abrir o código vai ver que basicamente só duplicamos o script do passo 1, alterando left por top, width por height, x por y.

Passo 3 – Mouse Move Horizontal e Vertical sobre outra imagem

Passe o mouse sobre o thumb:


O que mudou do passo 2?

Pouco, só que agora temos o thumb, e quando passamos o mouse em cima do thumb, obtenho uma porcentagem (por exemplo, se eu passar o mouse bem no meio do thumb seria 50% e 50%.

Depois é só posicionar a imagem dentro do container, com top e left.

E pra dar um efeito maior de zoom, coloquei a imagem da lupa como cursor.

Passo 4 – Caixa de luz

Passe o mouse sobre o thumb:


O que mudou do passo 3?

Esse teve a maior mudança, como funciona a caixa de luz?

São quatro quadrados com opacidade:

imagezoom passo 4

E quando movemos o mouse em cima do thumb os quadrados são redimensionados e reposicionados. E pra dar um efeito melhor, tirei o mouse no css com o cursor: none;

Lembrando que todos os exemplos, scripts e htmls estão disponíveis para download.

[]s

bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Feb 5

Técnicas para deixar seus scripts em jQuery mais rápido

Um grande amigo, programador de interface também, me indicou artigo interessante falando de 25 técnicas e truques para aumentar a velocidade dos seus scripts em jQuery. O artigo está em inglês, quem tem fluência no idioma é legal ler a matéria dele também, quem não tem fluência, ou tem mais facilidade em ler em português mesmo, segue as dicas que achei mais interessantes, com meus humildes comentários.

Antes de começar, devo dizer que algumas técnicas são radicais, e merecem ser analisadas se realmente necessitam disso, então se você considera que o desempenho da sua página está bom, e o código vai ficar desorganizado, não faça. Agora mais aos truques:

Carregue o jQuery pelo Google Code

Se você é como eu, você não deve gostar de fazer requisições externas no seu site, mas carregar o jQuery pelo Google Code pode trazer vantagens ao seu site:
- Se muitas pessoas fizerem isso, é provavel que ao entrar no seu site, o usuário não precise baixar o arquivo novamente pois já tem ele em cache, de outro site que também faz a requisição do jQuery pelo Google Code.
- Diminuição no tráfego da banda, o jQuery, muitas vezes representa de 10% a 30% do peso total de uma página, se carregado pelo google, pode diminuir o tráfego (se isso for um problema no seu servidor).

E para carregar pelo google code é fácil:

<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js" type="text/javascript"></script>

Junte seus scripts num arquivo

Nem sempre isso é possível, mas, se você tem um javascript pra lightbox, outro pra validação, outro pra sei lá o que, e eles sempre são carregados, vale a pena juntar todo o código num script só. A vantagem é que, ao invés do servidor fazer 5 requisições http, ele faz uma só, dando velocidade no loading da página na hora mais importante, quando a página fica em branco, fazendo download dos scripts e css do head. É lógico que fica mais difícil de trabalhar, menos organizado, por isso é bom fazer isso só depois do site estar pronto. Outra forma de melhorar, é que, em um só script, podemos fazer apenas um $(document).ready() , ao invés de ter várias funções espalhadas pelos scripts.

Minifique seus scripts

Outra medida para se fazer após o término da produção do site, é minimizar os scripts, basicamente minificar significa retirar todos os comentários, tabs, quebras de linha, e espaços desnecessários para execução do script, deixando todo o código em um linha só, esse processo diminui em média 30% do tamanho do arquivo javascript, deixando o load da página mais rápido. Para minificar seu script, existem diversos sites onde se cola o script original e eles minificam seu script pra você, no post original ele recomenda o Packer do Dean Edwards, mas também tem um o javascript compressor que também faz a mesma coisa, mas é mais fácil de decorar sua url.

Evite processamento desnecessário nos loop’s (como seletores)

Isso não vale só pra jQuery / javascript, vale pra qualquer linguagem de programação. Verifique se nenhum processamento dentro de um for é desnecessário. Ex.:

for (i = 0; i < 1000; i++) {
var container = $('#container ');
container.append('Este é o ítem: ' + i);
}

ou assim:

for (i = 0; i < 1000; i++) {
$('#container ').append('Este é o ítem: ' + i);
}

Os seletores são processos complexos que envolve diversas funções ( getElementById, getElementsByTagName, getElementsByClass entre outras ) além de diversos loops para obter somente os elementos desejados.

Então, o melhor jeito é assim assim:

var container = $('#container ');
for (i = 0; i < 1000; i++) {
container.append('Este é o ítem: ' + i);
}

Diminua suas manipulações em DOM

Contrariando o exemplo acima, tem um melhor jeito ainda de fazer o for.

var htm = '';
for (i = 0; i < 1000; i++) {
htm +='Este é o ítem: ' + i;
}
$('#container ').append(htm);

Ao invés de dar 1000 appends no seu elemento, você dá um só, e monta a lista numa variável javascript, tal processo é aproximadamente de 6 vezes.

Use ID’s ao invés de classes sempre que possível

Desde que não atrapalhe seu css, e que não se repita nenhum id no html, use id’s para posteriormente selecionar o objeto.veja mais tidbits O javascript trabalha mais rápido com ID (getElementbyId) do que com classes (getElementsByClass).

Veja o exemplo com class que no teste feito pelo autor, rodou em 5066 milisegundos (5 segundos):

var lista = '<ul>';
// Adicionando li's com class
for (i = 0; i < 1000; i++) {
lista += '<li class="item' + i + '">Este é o ítem '+i+'</li>';
}
lista += '</ul>';
$('body').append(lista);
// Selecionando elementos com class
for (i = 0; i < 1000; i++) {
var itemSelecionado = $('.item' + i);
}

Já no segundo exemplo, faremos a mesma coisa com id’s que no teste feito pelo autor, rodou em 61 milisegundos (83 vezes mais rápido):

var lista = '<ul>';
// Adicionando li's com id
for (i = 0; i < 1000; i++) {
lista += '<li id="item' + i + '">Este é o ítem '+i+'</li>';
}
lista += '</ul>';
$('body').append(lista);
// Selecionando elementos com id
for (i = 0; i < 1000; i++) {
var itemSelecionado = $('#item' + i);
}

Use diversas ações sobre um seletor (chaining)

Evite selecionar o mesmo elementos várias vezes, atribua todas as funções em um seletor só:

Ao invés de usar:

footer = $('#footer');
footer.find('a.reprovar_comentario');
footer.html('aprovar');
footer.attr('class','aprovar_comentario');
footer.attr('title','aprovar');
footer.unbind();
footer.click(aprovarComentario);

use somente uma seleção :

footer = $('#footer');
footer
	.find('a.reprovar_comentario')
	.html('aprovar')
	.attr('class','aprovar_comentario')
	.attr('title','aprovar')
	.unbind()
	.click(aprovarComentario);

Use sempre a última versão do jQuery

veja mais tidbitsNormalmente novas versões de programas, sistemas operacionais, etc… são mais pesadas com um monte de funções que 99% dos usuários nunca vão usar, mas John Resig, criador do jQuery, continua trabalhando em cima disso, só pra melhorar e deixar o jQuery mais rápido, a atual versão, 1.3.1 ganhou muita velocidade em cima da 1.2.6, o que gerou algumas incompatibilidades, principalmente com plugins. Então, não precisa refazer (se não estiver mega lerdo) seus antigos sites, mas ao criar um novo, tente usar sempre a última versão do jQuery.

Se alguém ler isso e tiver mais alguma dica legal, diz aí.

[]s

bookmark bookmark bookmark bookmark bookmark bookmark bookmark