Utilidades
Abreviando um texto sem cortar palavras no PHP
14Olá Pessoal!
Como apresentar soluções para problemas cotidianos, é um dos objetivos deste blog, vou compartilhar com vocês uma solução que escrevi para que vocês possam abreviar um texto, sem cortar qualquer palavra pela metade.
É extremamente chato, quando estamos lendo o resumo de uma notícia e nos deparamos com uma palavra cortada, dificultando a compreensão do texto. É feio, principalmente para a estética do layout.
A maioria das funções escritas (em qualquer linguagem) para abreviar um texto, acabam cortando o texto pela metade. Você passa 2 parâmetros: String Texto e Int Limite.
Texto é o texto própriamente dito, e Limite é o tamanho máximo que o texto deve ocupar. Se o texto for maior que 250 caractéres, o script abrevia o texto sem estourar o limite e sem cortar palavras pela metade, caso contrário, deixa o textocomo está.
A solução que escrevi foi esta:
public function abreviaString($texto, $limite, $tres_p = '...')
{
$totalCaracteres = 0;
//Retorna o texto em plain/text
$texto = Biblioteca::somenteTexto($texto);
//Cria um array com todas as palavras do texto
$vetorPalavras = explode(" ",$texto);
if(strlen($texto) <= $limite):
$tres_p = "";
$novoTexto = $texto;
else:
//Começa a criar o novo texto resumido.
$novoTexto = "";
//Acrescenta palavra por palavra na string enquanto ela
//não exceder o tamanho máximo do resumo
for($i = 0; $i <count($vetorPalavras); $i++):
$totalCaracteres += strlen(" ".$vetorPalavras[$i]);
if($totalCaracteres <= $limite)
$novoTexto .= ' ' . $vetorPalavras[$i];
else break;
endfor;
endif;
return $novoTexto . $tres_p;
}
Note que eu chamei uma função estática chamada somenteTexto(). Quem quiser o fonte dela e saber como ela está implementada, está ai:
public static function somenteTexto($string)
{
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return trim(strip_tags(strtr($string, $trans_tbl)));
}
Esta é a solução enviada pelo Carlos André Ferrari nos comentários do blog:
function abreviaString($texto, $limite, $tres_p = '…') {
//Retorna o texto em plain/text
$texto = Biblioteca::somenteTexto($texto);
if (strlen($texto) <= $limite)
return $texto;
return array_shift(explode('||', wordwrap($texto, $limite, '||'))) . $tres_p;
}
É importante que, antes de abreviarmos um texto, recebermos o texto puro, livre de tags htmls, scripts ou qualquer outra coisa que não faça parte do texto. Quando isso ocorre, dificulta a abreviação pois o algoritmo não sabe o que é texto e o que é metacaracter.
E é isso aí pessoal, o código está bem comentádo e documentado, caso vocês tenham alguma dúvida, fiquem a vontade para perguntar nos comentários.
Qualquer outra implementação que vocês tenham, que faça a mesma coisa, até mesmo em outras linguagens, o share é totalmente bem-vindo.
[]‘s
Igor.
Posts Relacionados:
Screenshots com PHP
3
Salvar screenshots de um site não é uma tarefa muito comum de um programador, porém, esta é uma tarefa interessante de ser feita. Existem algumas soluções interessantes para se resolver esta tarefa, porém, existe um cara em especial que me chamou a atenção e atendeu muito bem as minhas necessidades. Requisito para prosseguir com a solução apresentada neste post é instalar o wkhtmltoimage. Se você acessar o site do projeto vai ver que o nome dele é wkhtmltopdf e não wkhtmltoimage, como é mencionado. O wkhtmltoimage existe nos downloads do projeto, você só precisa instalar a versão adequada para o seu sistema operacional. Tem versões para Linux, Mac e Windows. Vou guiá-los com base no texto Taking screenshots of websites with PHP.
O wkhtmltoimage é um simples utilitário para ser executado via shell que faz a conversão de HTML para imagem usando o WebKit Engine e QT. Não é bem uma conversão. A ferramenta renderiza o endereço requisitado utilizando o WebKit Engine e tira um screenshot desta renderização utilizando o QT.
Fazendo sua primeira screenshot
Levando em consideração que você já tenha o wkhtmltoimage instalado corretamente, abra o seu terminal e digite:
wkhtmltoimage http://www.google.com google.jpg
O código acima vai converter toda a representação HTML do Google e vai converter isso para jpg usando o wkhtmltoimage.
Customizando a saída
O comando wkhtmltoimage tem uma série de opções:
- Desabilitar a renderização de imagens.
- Controlar a qualidade da imagem de output.
- Salvar o screenshot com uma resolução específica.
- Salvar uma região especifíca do screenshot (crop).
- Desabilitar o javascript da pagina requisitada.
Exemplos
//renderiza sem imagens wkhtmltoimage --no-images http://www.google.com google.jpg //não carrega os javascripts wkhtmltoimage --no-javascript http://www.google.com google.jpg //reduz a qualidade da imagem de output wkhtmltoimage --quality 50 http://www.google.com google.jpg //personaliza a largura e a altura do screenshot wkhtmltoimage --height 600 --width 1800 http://www.google.com google.jpg //faz um crop de 300x300 pixels partindo do eixo x0 e y0 wkhtmltoimage --crop-h 300 --crop-w 300 --crop-x 0 --crop-y 0 http://www.google.com google.jpg
Utilizando com PHP
Como já era de se imaginar, toda esta façanha não é feita somente com PHP. Você precisa da ajuda de alguns caras e para que o PHP consiga executar estes comandos, vamos precisar da ajuda de um método chamado shell_exec do PHP. Também podemos utilizar um wrapper escrito em PHP5 que abstrai os métodos do wkhtmltoimage e wkhtmltopdf chamado Snappy escrito em PHP5 do PHP.
Método 1: shell_exec
shell_exec('./wkhtmltoimage --quality 50 http://www.google.com google.jpg');
Método 2: Snappy
<?php
namespace Knplabs\Snappy;
require_once('Knplabs/Snappy/Media.php');
require_once('Knplabs/Snappy/Image.php');
/* 'wkhtmltoimage' executable is located in the current directory */
$snap = new Image('./wkhtmltoimage');
/* Displays the bbc.com website index page screenshot in the browser */
header("Content-Type: image/jpeg");
$snap->output('http://www.bbc.com');
?>
Com alguns métodos adicionados…
<?php
namespace Knplabs\Snappy;
require_once('Knplabs/Snappy/Media.php');
require_once('Knplabs/Snappy/Image.php');
$options = array('zoom' => 0.5, 'no-images' => true);
/* 'wkhtmltoimage' executable is located in the current directory */
$snap = new Image('./wkhtmltoimage-i386',$options);
/* Displays the bbc.com website index page screen-shot in the browser */
header("Content-Type: image/jpeg");
$snap->output('http://www.bbc.com');
?>
É isso aí!
Qualquer dúvida, estou à disposição.
Posts Relacionados:
Git: Visualizando versões anteriores de um arquivo
0
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.
Posts Relacionados:
Personalizando o terminal para trabalhar com Git
2Olá 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.
Posts Relacionados:
Treinamento PHPUnit Gratuíto
1
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!
Posts Relacionados:
Capturando miniatura de vídeos com PHP
11Hoje 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:
//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()
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:
if ( ! extension_loaded ( 'ffmpeg' ) ) exit ( 'ffmpeg não foi carregado!' );
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.
// 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 ();
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:
$thumbnailOf = $movie->getFrameRate() * 5;
Miniatura do meio do vídeo:
$thumbnailOf = round ( $movie->getFrameCount() / 2 );
Neste exemplo vou pegar fazer um calculo para receber um frame do meio do vídeo e salvar no HD.
// 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);
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:
// 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 );
Podemos também, redimencionar esta imagem e fazer um crop nela:
// colei esta linha somente como referencia $frame = $movie->getFrame ( $thumbnailOf ); // redimencionamos o frame para 200x100 e mas com o acrescimo de um crop de 30x30x30x30. $frame->resize ( 200, 100, 30, 30, 30, 30 );
É isso aí!
Maiores informações, na documentação oficial do ffmpeg-php.
[]‘s
Igor.
Posts Relacionados:
Torne-se excelente.
5Olá 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?
Posts Relacionados:
jGallery – A jQuery Plugin for Image Gallery’s
6Olá 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
Posts Relacionados:
Javascript: OnUnload VS OnBeforeUnload
10Fico pensando em um caso mais familiar possível para ilustrar a utilidade das duas funções, e a melhor que me vem à cabeça é o Gmail. Já pensou em fazer algo parecido com o Gmail? Quando o usuário fechar a janela e alguma requisição estiver em processamento, ele dá um aviso sobre ela, para evitar que você perca alguma alteração.
Muita gente pensa que o evento utilizado para fazer tal proeza é o evento “onunload” mas não é. Existe uma pequena diferença entre os dois eventos.
O evento OnUnload
O evento OnUnload em sua tradução quer dizer: “quando descarregar”. Ele é responsável por executar uma instrução quando a página for fechada, mas CUIDADO!. A utilização deste evento não é muito confiável quando se trata de navegadores como Internet Explorer e AJAX ao mesmo tempo. Quando o IE está de mal humor e simplesmente ignora o evento, não executando a instrução que você programou para ele fazer. Se a instrução envolver AJAX, ela está ainda mais fadada ao fracasso e o seu usuário provavelmente vai ficar muito triste.
Exemplo
<script language="JavaScript">
window.onunload = Sair;
function Sair()
{
return "A página foi fechada";
}
</script>
O evento OnBeforeUnload
Traduzindo OnBeforeUnload para o português, quer dizer: Antes de descarregar. O evento OnBeforeUnload funciona um pouco diferente do OnUnload. O evento OnBeforeUnload é chamado ANTES da janela ser fechada. É mais eficiente, pois ele não é executado em concorrência (junto/ao mesmo tempo) com o fechamento da janela, o que pode fazer com que algo seja carregado pela metade (de forma interminada).
Exemplo
<script language="JavaScript">
window.onbeforeunload = ConfirmExit;
function ConfirmExit()
{
//Pode se utilizar um window.confirm aqui também...
return "Mensagem de fechamento de janela....";
}
</script>
Pesquisando sobre este evento eu notei que o jQuery não da suporte ao eventoOnBeforeUnload. Se alguém descobrir por que, ganha um doce. x)
[]‘s
Posts Relacionados:
Detectando o iPad com PHP e Javascript
4Não me pergunte como, não me pergunte o por quê mas o Steve Jobs conseguiu mais uma vez. Tudo começou com rumores de perda de tempo, ele não vai conseguir e bla bla e no final das contas a poeira abaixou e o iPad foi lançado no dia 3 de abril. Logo após o final de semana de seu lançamento oficial, 700 mil iPads foram vendidos só nos Estados Unidos.
Sendo assim, é importante saber identificar estes dispositivos para conseguirmos otimizar nossos serviços para que nos possibilite atingir uma nova fatia de mercado, dando origem a novos negócios e oportunidades.
O novo iPad da Apple é identificado pelo seguinte User Agent:
Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
Sabendo como os novos iPads são identificados aqui vão algumas soluções para que vocês possam identificá-los e fazer suas versões dedicadas a partir daí:
Detectando iPad com PHP
$isiPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');
Detectando iPad com Javascript
var isiPad = navigator.userAgent.match(/iPad/i) != null;
Detectando o iPad com .htaccess
RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.seudominio.com [R=301]
Espero que ajude!
[]‘s



