Git: Visualizando versões anteriores de um arquivo

Um dos principais objetivos que me fez criar este blog é ajudar as pessoas que me acompanham a resolver problemas corriqueiros quando se trabalha com desenvolvimento de software.

No último mês trabalhei em um projeto onde tive vários problemas com versões de arquivo. As coisas simplesmente sumiam de onde deveriam estar ou cagadas decorrentes de comandos espartanos.

Então, aqui vai um comando do git bem interessante, que me salvou diversas vezes:

 git show HEAD~2:/caminho/do/arquivo.txt 

Só para você conseguir entender melhor o comando, a estrutura é bem simples. HEAD seria a revisão onde o arquivo se encontra e o que tem depois do “~” seria a versão do arquivo onde 1 seria a versão atual e a 2 seria a anterior a atual e este número pode ser o numero que você quiser (desde que a versão existe). E após os dois pontos seria o caminho do arquivo que você quer ver a versão.

E foi assim que eu consegui resolver vários problemas sem ter que re-escrever tudo denovo.

Conclusão

Use o git (ou qualquer controle de versão) não importa o tamanho ou a importância do projeto. Use um controle de versão. Além dele garantir o versionamento dos seus arquivos, ter uma boa gama de recursos para melhor organização, dinâmica de projeto, trabalho em grupo e etc., ele proporciona uma camada a mais de segurança dos seus arquivos. Se não fosse pelo git eu estaria atrasado com o meu prazo ou muito provavelmente teria madrugado algumas noites a mais.

[]’s

Igor.

Personalizando o terminal para trabalhar com Git

Olá Pessoal,

Esta é uma dica bem simples para deixar o seu terminal um pouco mais intuitivo. Muitas vezes quando estamos trabalhando com git, precisamos saber exatamente onde estamos no repositório. Vou compartilhar um simples snippet de código que pode deixar a vista algumas informações bem úteis para vocês quando você estiver dentro e fora de um repositório git.

Configurando o Terminal

Abra o seu arquivo .bashrc:


$> vim ~/.bashrc

E insira o seguinte código no final do arquivo:

PS1='\[\033[0;37m\][\t]\[\033[0;32m\][\u]\[\033[31m\][\h]`git branch 2>/dev/null | grep \* | head -1 | sed "s/\* //g" | awk "{ print \"[ \"\\\$1 \" ]\" }"` \[\033[1;33m\]\w\a\[\033[0m\]\n\$ '

Execute o seu .bashrc para que as alterações entrem em vigor:


$> . ~/.bashrc

E o seu terminal vai ficar parecido com assim:

Ele vai informar para você Hora, Usuário, Máquina, Branch, Diretório e também organiza a área onde você digita seus comandos na linha de baixo para aumentar a área útil do terminal.

[]’s

Igor.

Detectando Requisições Ajax com PHP

É bem comum trabalharmos com requisições Ajax que batem em um servidor rodando alguma aplicação PHP. O problema é que as vezes utilizamos o mesmo método para atender tanto a arquitetura do seu sistema quanto as requisições que são feitas via Ajax.

Por exemplo: Temos um objeto PHP que tem como objetivo recuperar todas as notícias cadastradas na base de dados.
[php]
<?php
class MinhaClasse {
public function getAllNews(){
// implementação para receber as notícias

return $news;
}
}
?>
[/php]

Como eu faço para que este mesmo método supra as minhas requisições Ajax sem que eu tenha que criar outro?

É bem comum vermos por aí programadores criando dois objetos diferentes para atender as duas necessidades (aplicação e Ajax). Sendo que a única diferença entre eles é como o método retorna.

Podemos utilizar o mesmo método e fazer com que retorne de forma diferente dependendo de como eu estou chamando o método.

Vamos criar um método chamado isAjax():

[php]
public function isAjax(){
return (!empty($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’);
}
[/php]

Funciona de forma simples: Sempre que uma requsição Ajax é disparada um header é setado nesta requisição chamada HTTP_X_REQUESTED_WITH e o valor dela é setado como XMLHttpRequest.

Desta forma a nossa classe ficaria assim:

[php]
<?php
class MinhaClasse {
public function isAjax(){
return (!empty($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’);
}
public function getAllNews(){
// implementação para receber as notícias
// ..

// se o metodo for invocado via Ajax, retorne um JSON
if($this->isAjax()) {
echo json_encode($news);
} else {
return $news;
}

}
}
?>
[/php]

Veja que se a requisição for feita via Ajax o método dar um echo JSON de $news. Se o método for invocado de qualquer outra forma ele irá retornar normalmente.

É isso. Post rápido, pá pum 😀

[]’s
Igor.

Treinamento PHPUnit Gratuíto

Dia 4 de novembro, Nick Belhomme criou um treinamento gratuito para PHPUnit e divulgou em seu blog no formato SlideShare. Para que não está por dentro, PHPUnit é uma ferramenta criada por Sebastian Bergmann para criamos suites de testes dentro de nossas aplicações PHP para garantirmos as funcionalidades e entrega de nossa aplicação. A abrangência da ferramenta é gigantesca, da pra fazer muita coisa. Requisitos de funcionalidade, navegação, integração, integridade etc. Se você nunca ouviu falar de TDD (Test Driven Development) esta é a sua chamada. TDD é umas das vertentes do XP (Extreme Programming) onde você desenvolve toda a sua aplicação orientada a testes. Se serve de atrativo e porcamente falando, TDD é a forma que temos de garantir o funcionamento de todas as funcionalidades do software estão funcionando, incluindo suas camadas. Protege sua aplicação do famoso “Corrige aqui, Quebra alí”. O treinamento é em inglês e está logo abaixo.

Post rápido. Como alguns já sabem, agora eu trabalho como PHP Engineer na LBS Local (Apontador & MapLink) em São Paulo e o tempo tem ficado bem corrido. Sempre que der vou tentar divulgar por aqui bons materiais que vão acrescentar na vida acadêmica e profissional de cada um. Se não gosta de esperar, estou diáriamente divulgando bons links no meu twitter, follow me!

Redes Sociais Aplicada no Desenvolvimento de Aplicações Web

Com a Internet cada vez mais presente na vida de todos, as redes sociais estão ganhando força (muita força). A influência de uma marca nas redes sociais já pode ser convertida em lucro e a grande maioria das empresas já perceberam isso. Essas redes têm sido alvo de muitas empresas para fidelizar e conquistar novos clientes através de ações geniais e muito criativas.

Assim como qualquer outra profissão, as coisas mudam. As tendências mudam. As metodologias mudam. As tecnologias mudam. Tudo muda. Inclusive os desejos e prioridades de nossos clientes. Atualmente as empresas querem estar cada vez mais presentes na vida de cada um de seus clientes. FacebookTwitterOrkutYouTube, etc.. está tudo muito comum e nós precisamos aprender a interagir com estas comunidades para poder dar possibilidade ao seu cliente e potencializar a possibilidade de conversão.

Se você não está familiarizado com o termo “conversão”, podemos dizer que conversão é quando você anuncia e este anúncio é clicado. Isso é chamado de conversão.

O motivo para eu estar aqui hoje, falando sobre redes sociais para vocês, é para dar um puxão de orelha nos profissionais que ainda não estão dando a mínima para este novo (nem tanto assim) conceito de interação. As redes sociais são mais um leque de aplicações que surgiram com a web 2.0. Neste boom, o conceito de interação foi explorado em uma escala muito maior. Junto com todas as inovações e as modificações na forma como interagimos com os sites e aplicativos web hoje, a web 2.0 trouxe o que chamamos hoje de redes sociais.

O meu foco com este post é evangelizar. É fazer com que após você ter lido este post você comece a criar já pensando na integração com as redes sociais. Não faz ideia de como?

Vou te dar algumas ideias:

  • Já pensou que nas notícias do seu site poderia ter a possibilidade dos usuários comentarem nas notícias e replicarem o seu comentário para o Twitter?
  • Os comentários estão protegidos por login? Use o usuário do Twitter do seu visitante para possibilitar mais uma alternativa de autenticação.
  • Upload de vídeos? Dê uma folga para o seu data storage e faça o upload direto para o YouTube e busque as informações através da API.
  • Quer fazer transmissão ao vivo para os seus visitantes? Utilize toda a interação que ferramentas como o Twitcam oferecem para você.
  • Crie aplicativos para Orkut, Facebook e Smarthphones. Os seus usuários poderão ter um nível de interação muito maior e a experiência deles será muito mais rica.
  • Dê a possibilidade do usuário divulgar suas notícias, fotos, albuns e vídeos através das redes sociais que eles participam.
  • Crie aplicações onde o seu usuário possa acompanhar as atualizações das suas redes sociais através da aplicação da sua empresa ou start-up.

Essa lista pode crescer muito ainda. O importante é você ter a criatividade e começar a incluir as redes sociais no planejamento do novo produto ou site da sua empresa ou cliente.

[]’s
Igor.

Capturando miniatura de vídeos com PHP

Hoje vamos falar de um assunto bastante divertido e que é de muita utilidade para todos nós. Vamos aprender como capturar a miniatura (thumbnail) de um vídeo em PHP e posteriormente salva-las no HD. Todo serviço que trabalha com algum tipo de mídia precisa de algumas ferramentas para fazer esta manipulação. O PHP não oferece suporte utilizando funções nativas para manipular arquivos de audio ou vídeo. Por isso, vocês precisam de 3 coisas muito importantes que são descritas logo a frente para seguirmos com este artigo.

Requisitos

  • ffmpeg-0.4.9_pre1 ou superior.
  • ffmpeg-php 0.5.3 ou superior.
  • gd-2.0 ou superior. (a versão que vem compilada com o PHP funciona também)

obs: Neste artigo não é meu objetivo ensinar a fazer a instalação destes recursos pois com uma rápida googada você resolve o problema.

O que é o ffmpeg?

O ffmpeg é um conjunto de bibliotecas de uso livre e open-source que oferece um suporte completo para você converter e interagir com praticamente qualquer tipo de mídia.

O que é o ffmpeg-php?

O ffmpeg-php é uma extensão php desenvolvida para que nós, programadores PHP, possamos interagir com o ffmpeg sem utilizarmos a “perigosa” função system() (e derivadas) do PHP. Mas vale lembrar que ela cobre “em partes” as funções do ffmpeg. Você não consegue com ffmpeg-php converter vídeos por exemplo, mas com o ffmpeg você consegue.

Recebendo as informações do vídeo com PHP

Antes de começar a brincar com o vídeo, nós precisamos aprender como pegar as informações do vídeo. O ffmpeg-php permite que você acesse estas informações do video:

[php]
//Return the duration of a movie or audio file in seconds.
$movie->getDuration()
//Return the number of frames in a movie or audio file.
$movie->getFrameCount()
//Return the frame rate of a movie in fps.
$movie->getFrameRate()
//Return the path and name of the movie file or audio file.
$movie->getFilename()
//Return the comment field from the movie or audio file.
$movie->getComment()
//Return the title field from the movie or audio file.
$movie->getTitle()
//alias $movie->getArtist() Return the author field from the movie or the artist ID3 field from an mp3 file.
$movie->getAuthor()
//Return the copyright field from the movie or audio file.
$movie->getCopyright()
//Return the artist ID3 field from an mp3 file.
$movie->getArtist()
//Return the genre ID3 field from an mp3 file.
$movie->getGenre()
//Return the track ID3 field from an mp3 file.
$movie->getTrackNumber()
//Return the year ID3 field from an mp3 file.
$movie->getYear()
//Return the height of the movie in pixels.
$movie->getFrameHeight()
//Return the width of the movie in pixels.
$movie->getFrameWidth()
//Return the pixel format of the movie.
$movie->getPixelFormat()
//Return the bit rate of the movie or audio file in bits per second.
$movie->getBitRate()
//Return the bit rate of the video in bits per second.
$movie->getVideoBitRate()
//Return the audio bit rate of the media file in bits per second.
$movie->getAudioBitRate()
//Return the audio sample rate of the media file in bits per second.
$movie->getAudioSampleRate()
//Return the current frame index.
$movie->getFrameNumber()
//Return the name of the video codec used to encode this movie as a string.
$movie->getVideoCodec()
//Return the name of the audio codec used to encode this movie as a string.
$movie->getAudioCodec()
//Return the number of audio channels in this movie as an integer.
$movie->getAudioChannels()
//Return boolean value indicating whether the movie has an audio stream.
$movie->hasAudio()
//Return boolean value indicating whether the movie has a video stream.
$movie->hasVideo()
//Returns a frame from the movie as an ffmpeg_frame object.
//Returns false if the frame was not found.
//framenumber – Frame from the movie to return.
//If no framenumber is specified, returns the next frame of the movie.
$movie->getFrame([Integer framenumber])
//Returns the next key frame from the movie as an ffmpeg_frame object.
//Returns false if the frame was not found.
$movie->getNextKeyFrame()
[/php]

No nosso caso, os únicos métodos que vão nos interessar seram: getFrameRate, getDuration, getFrameCount, getFrameHeight , getFrameWidth e getFrame.

No início do seu script, coloque esta linha só por segurança:
[php]
if ( ! extension_loaded ( ‘ffmpeg’ ) ) exit ( ‘ffmpeg não foi carregado!’ );
[/php]

Para receber as informações do vídeo dentro do seu arquivo PHP você precisa utilizar a classe ffmpeg_movie do ffmpeg-php e passar como parametro o caminho do vídeo que você quer manipular.

[php]
// instancia a classe ffmpeg_movie para pegarmos as informações que queremos o vídeo
$movie = new ffmpeg_movie($movie_file);
// pegamos a duranção do video em segundos
$duration = round ( $movie->getDuration() , 0 );
// recebemos o número de frames do vídeo
$totalFrames = $movie->getFrameCount();
// recebemos a altura do vídeo em pixels
$height = $movie->getFrameHeight ();
// recebemos a largura do vídeo em pixels
$width = $movie->getFrameWidth ();
[/php]

Recebendo o frame do vídeo e salvando

Agora que já temos as informações do vídeo, podemos capturar a miniatura de um determinado frame do vídeo e salva-la em nosso HD. Vamos utilizar outra classe do ffmpeg-php chamada ffmpeg_frame e utilizarmos a função toGDImage para convertermos o frame para uma imagem GD.

Para escolhermos o frame podemos utilizar algumas técnicas:

Miniatura de um segundo especifico:
[php]
$thumbnailOf = $movie->getFrameRate() * 5;
[/php]
Miniatura do meio do vídeo:
[php]
$thumbnailOf = round ( $movie->getFrameCount() / 2 );
[/php]

Neste exemplo vou pegar fazer um calculo para receber um frame do meio do vídeo e salvar no HD.

[php]
// precisamos criar uma imagem GD para o ffmpeg-php trabalhar nela
$image = imagecreatetruecolor ( $width , $height ) ;
// criamos a instancia do frame com a classe ffmpeg_frame
$frame = new ffmpeg_frame ( $image );
// escolhemos o frame que queremos salvar como jpeg
$thumbnailOf = (int) round ($movie->getFrameCount() / 2.5);
// recebe o frame
$frame = $movie->getFrame ( $thumbnailOf );
// converte para uma imagem GD
$image = $frame->toGDImage ();
//salva no HD.
imagejpeg($image, $movie_file.’.jpg’, 100);
[/php]

Pronto! Agora não tem desculpa. Vocês já sabem capiturar o frame de um video e salvar uma miniatura dele.

Redimencionando o frame do video

Este capitulo é um bonus. Vocês também podem salvar um frame especifico do video como jpeg e redimenciona-lo antes e salvar no HD. A função resize() da classe ffmpeg_frame faz isso para gente:

$frame->resize(Integer width, Integer height [, Integer crop_top [, Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]]])

Utilizando o mesmo código acima, acrescentando somente uma linha:
[php]
// colei esta linha somente como referencia
$frame = $movie->getFrame ( $thumbnailOf );
// redimenciona o frame para 200 de lagura por 100 de algura.
$frame->resize ( 200, 100 );
[/php]

Podemos também, redimencionar esta imagem e fazer um crop nela:

[php]
// colei esta linha somente como referencia
$frame = $movie->getFrame ( $thumbnailOf );
// redimencionamos o frame para 200×100 e mas com o acrescimo de um crop de 30x30x30x30.
$frame->resize ( 200, 100, 30, 30, 30, 30 );
[/php]

É isso aí!

Maiores informações, na documentação oficial do ffmpeg-php.

[]’s
Igor.

Feliz Dia Do Programador!

Esta é uma data nerd especial!

O Dia do Programador (em russo: День программиста) é um feriado profissional oficial na Rússia, celebrado no 256º dia do ano (255º dia, se 1 de janeiro for considerado o dia 0). O número 256 (28) foi escolhido para esta data porque 256 é o número de valores distintos que podem ser representados com um byte de oito bits, um número bem conhecido entre os programadores.

Além disso, ‘256’ em hexadecimal é ‘100’ (‘0x100’), e é a maior potência de 2 abaixo de 365 (o número de dias em um ano). Nos anos bissextos, a data comemorativa é 12 de setembro (13 de setembro em outros anos).

http://pt.wikipedia.org/wiki/Dia_do_programador
Parabéns para nós!

[]’s
Igor.

Torne-se excelente.

Olá pessoal!

Sem muito tempo para postar. Me deparei com um link que estava perdido aqui no meio das minhas coisas que não entendo como não divulguei ele aqui para vocês. O texto é excelente. Fala muito sobre o nosso trabalho e sobre como podemos conduzir nossas vidas. Se você é um profissional ou quer se tornar um da área de Internet, você não pode deixar de ler o que vem a seguir:

By Klaus Wuestefeld

1) Torne-se excelente.

Seja realmente bom em alguma coisa. Não fique só choramingando ou
querendo progredir às custas dos outros. Não pense q pq vc sentou 4
anos numa faculdade ouvindo um professor falar sobre software q vc
sabe alguma coisa. Jogador de futebol não aprende a jogar bola tendo
aula. Ele pratica. Instrumentistas geniais nao aprendem a tocar tendo
aula. Eles praticam. Pratique. Chegue em casa depois do trabalho e da
aula e pratique. No final de semana, pratique.

Crie seu próprio virus, seu proprio jogo, seu proprio SO, seu proprio
gerenciador de janelas, seu proprio webserver, sua propria VM, qq
coisa. Varias coisas.

Nao precisa ser só programacao. Pode ser networking, vendas, etc. Só
precisa ser bom mesmo. Tenha paixão pela coisa.

As melhores praticas do mercado sao polinizadas primeiro nos projetos
de software livre. Aprenda com eles.

Discípulo, Viajante, Mestre: Primeiro seja um discipulo, tenha mestres
locais, aprenda alguma coisa com alguem realmente bom, qq estilo.
Depois viaje, encontre outros mestres e aprenda o estilo deles. Por
fim, tenha o seu estilo, tenha discípulos, seja um mestre.

Vou fazer o curso da Mary Poppendieck em SP semana q vem e qdo tiver o
curso de Scrumban do Alisson e do Rodrigo quero fazer tbem.

"Torne-se excelente" tbem pode ser chamado de "Melhoria Continua" ou "Learning".

2) Não seja deslumbrado.

Desenvolvimento de software é a mesma coisa há 60 anos: modelo
imperativo. Há 30 anos: orientação a objetos. Bancos de dados
relacionais: 30 anos. ("Web", por exemplo, não é uma tecnologia ou um
paradigma. É meramente um conjunto de restrições sobre como
desenvolver e distribuir seu software).

Não corra atras da ultima buzzword do mercado. Busque a essência, os
fundamentos.

Busque na wikipédia e grokke: determinismo, complexidade de algoritmos
"O()", problema de parada de turing. Pronto, pode largar a faculdade.
Falando sério.

Trabalhe com software livre. Não dê ouvidos a grandes empresas,
grandes instituições ou grandes nomes só pq são grandes.

Vc acha q vai aprender mais, ter mais networking e mais chance de
alocação no mercado trabalhando em par comigo no Sneer por um ano, 8h
por semana, ou passando 4 anos na faculdade, 20h por semana, pagando
sei la qto por mes?

Vc acha q vai aprender mais trabalhando em par com o Bamboo 6 meses na
linguagem boo e na engine do Unity ou fazendo um ano de pós em "a
buzzword da moda"?

"Nao seja deslumbrado" tbem é conhecido como "Coolness".

3) Mantenha-se Móvel.

Com a demanda q temos hoje no mercado, se vc é desenvolvedor de
software e n consegue negociar um contrato com uma empresa onde vc é
pago por hora e pode trabalhar qtas horas quiser com um minimo de meio
periodo, vc precisa rever a sua vida.

É melhor ter dois empregos de meio-periodo q um de periodo integral,
pq vc pode largar um deles a qq momento.

Vc nunca vai conseguir nada melhor se nao tiver tempo, se nao tiver
disponibilidade pra pegar algo melhor qdo aparecer.

Vc sustenta seus pais e 7 irmaos? Nao. Entao para de ser ganancioso e
medroso no curto prazo, para de pagar facu, mestrado, pós, MBA,
sei-la-o-q e vai aprender e empreender.

Trabalhe remoto. Não é o mais fácil, mas é perfeitamente possível.

Não fique reclamando q está trabalhando demais. Aumente seu preço e
trabalhe menos.

4) Emparceire-se Promiscuamente.

Participe de dojos, de congressos, de projetos de software livre.
Tenha amigos, colegas, conhecidos. Seja conhecido. Nao faça ruído em
seis  projetos e doze fóruns. Ajude de verdade em um ou dois projetos
de cada vez. Ao longo do tempo, vc terá ajudado em varios projetos,
trabalhado em varias empresas.

5) Mentalidade de Abundância.

Ajude seus amigos sem cobrar (a "camaradagem" do Vinícius). Dê
palestras gratuitas. Cursos gratuitos. Participe de projetos de
software livre.

Pare as vezes uma tarde pra receber um amigo seu e explicar seu
projeto. Vá visitar seus amigos nos projetos deles. Viaje com algum
amigo seu pra visitar um cliente dele, só pra conversar e fazer
companhia.

Vc tem um espaço onde dá cursos? É uma Aspercom, Caelum da vida? Chama
os brothers p dar curso. Porra, bola um modelo em q as pessoas podem
se inscrever para cursos variados, pagando um sinal, e mantém tipo uma
agenda pre-combinada: "Será numa terça e quinta a noite, avisadas com
duas semanas de antecedencia". Se rolar, beleza, se depois de meses
nao der quorum, devolve o sinal. Pode ser curso de Prevayler, de
Kanban, de Scrum, de Lean, de Comp Soberana, de Restfulie, de
Cucumber, de Rails, de Teste Automatizado Mega-Avançado, qq coisa.

Chame amigos seus pra dar curso em dupla com vc. Divida clientes.
Divida projetos, mesmo q nao precise de ajuda.

Dizia o pai de um brother meu de infância: "Tudo q custa dinheiro é barato."

6) Busque modelos de custo zero.

Trabalhe em coisas q tem custo administrativo/burocratico/manutencao
zero. Por menos ganho q tragam, depois de prontas, estarao tendo uma
relação custo/beneficio infinitamente vantajosa.

7) Ganhe notoriedade.

Faça coisas massa. Participe de projetos de software livre. Dê
palestras gratuitas. Promova eventos (dojos, debates, grupos de
usuarios, etc).

By Dairton Bassi:

8 - Não tenha medo!

Meta a cara. Arrisque empreender. Arrisque inovar. O que você tem a perder? 
No máximo um emprego, mas isso pode ser revertido facilmente em um mercado 
aquecido como o atual. O pior que pode acontecer é não dar certo. Mesmo assim 
você terá aprendido muito mais do que batendo cartão.
Saia da zona de conforto. Se o seu trabalho estiver fácil e sob controle, 
isso significa que ele não está mais agregando para a sua evolução técnica e pessoal. 

Não desperdice a chance de trocar de função se a nova oportunidade 
for mais desafiadora. Isso fará você crescer tecnicamente e o preparará 
para desafios maiores ainda. Conhecer pessoas novas é tão importante 
quanto manter-se em contato com código.

Não se detenha por insegurança ou pela sensação de despreparo. 
Como você acha que vai ganhar experiência em alguma coisa se sempre adiá-la?

Mais um Zend Certified Engineer

Mais uma etapa da vida concluída. No dia 19 de julho, ao meio dia, eu me tornei mais um PHP5 Zend Certified Engineer. Não vou te enganar não, não foi fácil. A prova tem muita pegadinha o inglês da prova é bem tecnico e você precisa de muita calma e paciência para fazer a prova.

Após “aquele” cagaço de clicar em “Finish Exam”, eu fechei os olhos, contei até 10. Ao abrir os olhos, vejo a notícia no monitor:

CONGRATULATIONS! YOU’RE NOW A PHP5 ZEND CERTIFIED ENGINEER.

#nerdpride. Enfim, acho que vocês já estão de saco cheio de tanto que eu falo desta certificação aqui no blog. O post é só para comunicar que eu consegui. Afinal, começou!, termina!. Muita gente ficou torcendo por mim deste o começo e nada mais justo do que vir até aqui e anunciar a conquista da mesma forma que eu anunciei a luta.

Obrigado à todos os que me ajudaram nos tempos de estudo e todos os que torceram por mim.

😀 Até o próximo post 😀

jGallery – A jQuery Plugin for Image Gallery’s

Olá Pessoal!

Mais um projeto pessoal. Com a oportunidade de um novo trabalho surgiu o jGallery. Um cliente me pediu um plugin parecido com o Lightbox, porém, ele queria que as fotos aparecessem logo abaixo, como uma galeria de fotos onde o usuário pudesse navegar entre as fotos sem sair da famosa “lightbox”. A partir desta necessidade surgiu o jGallery. Um plugin feito em jQuery para exibir de forma elegante uma galeria de fotos.

Características

  • Atalhos de teclado.
  • Se a imagem estourar a área útil do navegador a mesma é redimencionada de forma proporcional.
  • A galeria sempre se ajusta a sua resolução, inclusive a imagem (caso estoure a área útil).
  • Efeitos de transição.
  • Pre-loading de imagem.
  • Interface intuitiva e fácil de utilizar.
  • Compatibilidade com Internet Explorer, Chrome, Safari, Firefox e Opera (foi os que eu testei).

Código-Fonte

http://github.com/igorescobar/jGallery

Demo

http://igorescobar.com/projects/jGallery/

Sugestões

blog [at] igorescobar [dot] com