Como fazer o restore de um dump do MySQL?

Em outro post eu expliquei como agendar backup (dump) do MySQL com shellscript, agora vou explicar como fazer um "restore" desses dados.

Quando você faz um dump ou um "export" pelo PHPMyAdmin, ele gera um arquivo .sql, o comando abaixo vai ler esse SQL e executar ele no banco indicado.

Supondo que você tenha gerado um dump chamado "dump.sql", para inserir isso no banco chamado "andafter", faça o seguinte:

Fazendo restore do MySQL no terminal

mysql -u root -p andafter < dump.sql

No exemplo acima meu usuário (parâmetro -u) é "root", e o parâmetro -p pede que a senha solicitada após o comando (para que a senha não fique gravada nos comandos do terminal). O nome do banco é "andafter" e ele irá executar o dump.sql.

Import no PHPMyAdmin

Pelo PHPMyAdmin acesse o banco que vai receber a importação e clique em Import.

Selecione o arquivo sql que você vai usar para importar os dados (lembre-se que existe um limite de upload setado no PHP, o padrão é 2Mb, se o dump ultrapassr o limite do servidor você precisa fazer este processo ou em partes ou por terminal).

Clique em GO e aguarde, a importação aqui é um pouco mais lenta do que pelo terminal.

Como criar uma pasta com o PHP

Mais uma vez estava implementando melhorias para a melhor loja nerd da internet e resolvi compartilhar um tutorial básico!

Como criar pasta com PHP?

Estou usando o Code Igniter e fui implementar melhorias no upload de fotos do Eu Compraria, para isso precisava criar diretórios específicos para cada produto.

Para criar uma pasta com o PHP você precisa:

  • PHP instalado (doooh…)
  • Permissão de escrita no pasta onde você vai escrever

O comando é simples, quase o mesmo utilizado em terminal:

mkdir ("/var/www/dominio/media/imagens/eu-compraria-shop", 0755 );

O primeiro parâmetro da função mkdir do PHP é o caminho da pasta que você vai criar, o segundo parâmetro é o código CHMOD de permissões para a pasta que você vai criar, a permissão tem que estar em modo octal (começando com 0).

Fácil, não? 🙂

Switch no javascript

Este é um post muito básico sobre javascript, se você é ninja provavelmente não tem o que aprender com este post.

Switch é uma forma de fazer verificações diversas (do tipo "else if") em uma váriavel, estava criando um código que começou com uma verificação (um if) e com o tempo foi crescendo, quando percebi estava com 4 verificações if else até um colega me alertar para o uso do switch.

switch(n){
case 1:
  execute code block 1
  break;
case 'lorem':
  execute code block 2
  break;
default:
  code to be executed if n is different from case 1 and 2
}

Útil para quando você só precisa fazer comparação com uma única variável e mais performático que uma corrente de "if else".

Utilizando o cronômetro que o Chris postou aqui fiz um teste de performance no javascript comparando o switch e o if else (usando Firefox).

Código do teste de performance

function TimeCounter() {
this.startDate = null; this.ellapsedTime = null; this.start = function() { this.startDate = new Date(); } this.stop = function() { return (new Date() - this.startDate)/1000; } }

v = 0;
n = 'label';
var t = new TimeCounter();
t.start();
for(var i = 0;i < 1000000;i++){
switch(n){
case 'lorem':
v = v+1;
break;
case 2:
v = v+1;
break;
case 'llam':
v = v+1;
break;
case 'label':
v = v+1;
break;
default:
v = v+1;
}
}
i = t.stop();
console.log('Switch: ' + i);
v = 0;
t.start();
for(var i = 0;i < 1000000;i++){
if(n == 2){ v = v+1; }
else if(n == 'llam'){ v = v+1; }
else if(n == 'label'){ v = v+1; }
else{ v = v+1; } }
i = t.stop();
console.log('Else if: ' + i);

Resultados:

Switch: 4.345 s

Else if: 6.262 s

Sem querer levantar muito preciosimo para o código (vai só atrapalhar sua produtividade), fica aí a dica de fazer benchmark de código de suas aplicações quando estiver notando algum problema de performance, é uma boa forma de encontrar gargalos!

Lazy Load com jQuery [update]

Veja a página oficial do Lazy Load.

[changelog]

Saiu a nova versão do Lazy Load, veja o changelog completo da nova versão.

Visite o Github do projeto.

v1.0

  • Funciona sem classes
  • Otimização de performance – imagens já carregadas são arrancadas do array e não são mais percorridas

v0.5

  • Só funciona com seletor de classes nas imagens

Apliquei uma melhoria de performance no plugin (para não varrer repetidamente os elementos), ainda não consegui subir no Fiddle. Farei isso este final de semana e também vou documentar melhor o que ele faz para que mais pessoas possam contribuir com melhorias. 🙂

[/changelog]

 

Esta semana estava trabalhando em otimizações para a recém lançada home do iG e resolvemos aplicar o lazy load para melhorar ainda mais a experiência do usuário.

 

O que é Lazy Load?

Lazy load (ou "carregamento preguiçoso") é uma técnica de otimização de front-end que torna o carregamento inicial de uma página mais veloz inibindo o carregamento de imagens que não estão visíveis para o usuário.

Em páginas com uma altura grande e com uma quantidade alta de imagens razoável a técnica torna o carregamento muito mais veloz, e a medida que o usuário desce o scroll da página as imagens são carregadas para serem exibidas conforme a demanda.

A experiência do usuário é melhor pois a página é renderizada de forma mais rápidas, a fila de requisições é cortada portanto CSS e javascript são carregados e executados com menos tempo, e como acabei de ler As Leis da Simplicidade posso afirmar: reduzir tempo é um dos "processos de simplicidade" com o qual nós desenvolvedores devemos nos preocupar muito!

Mais um plugin de Lazy Load?

Tive a oportunidade de participar de todos os processos de desenvolvimento da nova home do iG e como estou pilhado em otimização nos últimos meses gostei muito da oportunidade de implementar otimizações após o lançamento. Dentre as otimizações aplicadas até agora uma das mais significativas no lado do usuário foi o Lazy Load.

Ps: até onde pesquisei o iG é o primeiro portal brasileiro a implementar a técnica 😀

Busquei diversas alternativas prontas e fiz vários testes, mas conclui que é impossível executar com sucesso o lazy load se o html for escrito com o link da imagem no atributo src.

os navegadores modernos (Chrome e Firefox, que consegui testar perfeitamente isso) na leitura inicial do DOM já identificam os links das imagens e adicionam na fila de requisições. Os plugins davam o efeito visual e até faziam uma nova requisição da imagem, sem nenhum efeito positivo para performance.

 

Plugin jQuery Lazy Load

A solução para realmente não carregar as imagens é não colocar o source da imagem no atributo src, para isso utilize uma imagem já carregada uma imagem transparente.

Para acessar a versão mais atualizada do plugin acess este fiddle.

jQuery Lazy Load

Adicione o plugin a sua página, necessita de jQuery (testado com v1.4.4)

/* lazyLoad */
(function($){
$.fn.lazyLoad = function() {
   var images = this,
       classe = this.selector.replace('.','');
   showVisible();
   $(window).scroll(function(){ showVisible(); })
   function showVisible(){
      images.each(function(){
         var img = $(this);
         if(img.hasClass(classe)){
            var imgTop = img.offset().top, wTop = $(window).scrollTop() + $(window).height() + 100;
            if(wTop > imgTop){ 
               img.removeClass(classe).attr('src', img.data('src')).fadeIn();
            } 
         }
      })
   }
};
})( jQuery );

Iniciando o plugin

Como a regra dos bons plugins manda, a inicialização do plugin é extremamente simples e o seletor deve ser uma classe que deve ser aplicada em todas as imagens que irão utilizar a técnica:

$('.lazy-load').lazyLoad();

 

O Html

O plugin utiliza o atributo data do HTML 5, portanto o HTML de todas as imagens que utilizam devem ficar da seguinte forma:

< img data-src="url-real-da-imagem" height="100" src="url-de-imagem-de-1px-transparente" width="100" / >

 

Testado em:

  • IE 7, 8, 9
  • Firefox
  • Chrome
  • Safari

Pegar o elemento script que está sendo escrito

Em um script eu precisava pegar o elemento pai do script que estava escrevendo (parent do elemento script atual), surgiu uma dúvida então de como selecionar o script que eu estava escrevendo e é o que vou compartilhar neste post.

Como o javascript é executado em tempo de carregamento, o último elemento script será o que você está trabalhando, para pegar este elemento é só fazer o seguinte:

var scripts = document.getElementsByTagName( 'script' );
var thisScriptTag = scripts[ scripts.length - 1 ];

A explicação do código:

Primeiro pegamos todos os elementos script da página – como ela só foi carrega até o momento do código, na verdade pegamos todos os elementos script carregados até o momento. A segunda linha pega a última tag script carregada até o momento, que sempre será a que estamos trabalhando.

Com o elemento selecionado é só navegar no DOM da forma que você achar melhor!