segunda-feira, 10 de janeiro de 2011

OpenJDK não abre o Eclipse (crash) depois de atualização do ubuntu?

Uma dica rápida, para começar a semana:

Atualizou o Ubuntu e seu eclipse simplesmente não abre mais?


Bem vindo ao time parceiro! =\

Cenário:

  • Ubuntu 10.10
  • Eclipse Galileo
  • OpenJDK Runtime Environment (IcedTea6 1.9.2)
Executando o eclipse no terminal, recebi o seguinte output (ou algo parecido):

# A fatal error has been detected by the Java Runtime Environment: 
#  SIGSEGV (0xb) at pc=0x088a2a0f, pid=12779, tid=9730928
#
# JRE version: 6.0_22-b04
# Java VM: Java HotSpot(TM) Client VM (17.1-b03 mixed mode, sharing linux-x86 )
# Problematic frame:
# V  [libjvm.so+0x3aca0f]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp


Pesquisando no launchpad do ubuntu, achei a solução: basta remover a biblioteca xulrunner-xpto que o eclipse volta a funcionar. Para simplificar ainda mais, eis o comando:
sudo aptitude remove xulrunner-1.9.2
(talvez a versão mude para vc).

É isso!

^^

Marcadores: , , , ,

quinta-feira, 6 de janeiro de 2011

Tutorial - jQuery Plugin - um slideshow bem simples!


Salve, salve galera!

Estava procurando algum slide show em jQuery bem SIMPLES que tivesse apenas as seguintes funções:

  • alternar entre as imagens com o efeito fade in;
  • interromper o slide show on mouse over;
  • seguir o slide show on mouse out;
  • possibilidade de inserir os botões prev e next para navegação nos slides;

Busquei na internet e apareceram centenas exemplos e plugins! Acontece que achei todos um pouco complicado de mais pro meu gosto. Eu queria algo bem simples mesmo!

Então resolvi fazer um o mais simples e fácil de se utilizar possível. ^^

Botando as mãos na massa


Em primeiro lugar precisamos saber criar plugins pro jQuery. Encontrei um excelente tutorial aqui.

Ok, agora, segue o código do plugin do slideshow (para manter o padrão, sugiro criar e inserir o código a seguir no arquivo jquery.slideshow.js):
(function($){  
    $.fn.extend({   
     slideshow: function(options) {  
      var div = this;
            var defaults = {
                interval: 2000            };
            var options =  $.extend(defaults, options);  
            $('img', div).hide().first().show();
            var timerId = timerSlide(div, options.interval);
            $(div).hover(function() {
             clearInterval(timerId);
            }, function() {
             timerId = timerSlide(div, options.interval);            });
            $(div).children('.navigator').each(function() {;
             $(this).children('.prev').each(function() {
              $(this).click(function() {
               prevSlide(div);              });             });;
             $(this).children('.next').each(function() {
              $(this).click(function() {
               nextSlide(div);              });             });;                         });
         function timerSlide(div, interval) {
          return setInterval(function() {
           nextSlide(div);
          },  interval);         }
         function prevSlide(div) {
          var element = $('img', div).filter(function() { return $(this).css("display") == 'inline'; }).hide()                    .prev();
          if($(element).attr("id") == undefined) {
           element = $('img', div).last();          }
          $(element).fadeIn('slow');         }
         function nextSlide(div) {
          var element = $('img', div).filter(function() { return $(this).css("display") == 'inline'; }).hide()                    .next();
          if($(element).attr("id") == undefined) {
           element = $('img', div).first();          }
          $(element).fadeIn('slow');         }                    }      });
})(jQuery);
Muito simples, né?

E para usa-lo é mais simples ainda.

Basta criar uma div q possua a class slideshow. As imagens que tiverem dentro dessa div serão exibidas na ordem em que aparecem:
slide 1 slide 2 slide 3
Agora é só incluir no load da página, a chamada para função slideshow. O trecho a seguir, configura todos os div's que contem a class slideshow:
$(function() {
 $('.slideshow').each(function() {
  $(this).slideshow();
 });
});
Agora sim: simples, fácil e indolor! ;D

Mais algumas opções


Por padrão, o plugin é configurado para alternar os slides de 2000 em 2000 milisegundos. Se deseja outro valor, por exemplo 5000, basta informar o parâmetro interval:
$(function() {
 $('.slideshow').each(function() {
  $(this).slideshow({interval: 5000});
 });
});

Se quiser incluir a função de navegação entre os slides, basta inserir uma nova div com a class navigation. Dentro dessa div, deve haver um link com a class prev e outro link com a class next. Dessa forma:
slide 1 slide 2 slide 3

O resultado desse ultimo código é mais ou menos esse:


Prontinho. O plugin atende todos os requisitos! ^^

Agora é só usar!

;D

É isso!

PS: Reparei um comportamento estranho ao selecionar a div utilizando o firebug. Aparenetemente, o javascript se perde e configura o setInterval diversas vezes, o que dá a impressão de que os slides estão alternando mais rápido. Por enquanto vou deixar assim, pois normalmente o usuário comum não sabe nem o que é firefox, imagina só se ele sabe o que é firebug! rs..

Marcadores: , ,