quinta-feira, 12 de setembro de 2013

Agendando tarefas com crontab

Em manutenções de sistemas e de sites, é preciso realizar tarefas de backup e checagem [ou outras tarefas] periodicamente. Todo sistema Linux vem com um programa chamado cron e ele serve justamente pra isso: Agendar tarefas e/ou executá-las com uma certa periodicidade

Para configurar uma crontab [crontab é o nome de uma configuração do cron] para um usuário [crontabs globais do sistema são criadas somente pelo usuário root, esse arquivo global é encontrado em /etc/crontab]. O crontab pode ser usado das seguintes formas:
crontab -e # Edita o crontab para o usuário atual
crontab -l # Lista as tarefas
crontab -r # Apaga a crontab do usuário


Vamos supor que você queira executar o comando echo "Você é demais!" todo dia às 8h:00min, então é só adicionar a seguinte linha depois de rodar crontab -e
0 8 * * * echo "Você é demais"

Agora, vamos entender como é a sintaxe de uso:
minuto hora dia_do_mes mes dia_da_semana programa_a_ser_executado
O * [asterisco] funciona como um caractere coringa e que quando utilizado ele pega toda a faixa de valores para cada parâmetro. Ainda existem mais caracteres especias com diferentes "poderes", por exemplo:
0,30 6,11 * * * echo "Hey, how is going your day?"
0,30 6-11 * * * echo "Relax, bro"
*/2 * * * * echo "Se passaram meia hora"
Vírgula (,): 0,30 quer dizer "aos 0min e 30min execute..."
Hífen (-): 6-11 quer dizer
Dica: Você também pode trocar o dia_da_semana [6o argumento] pelo usuário que executará a tarefa. Ex:

*/2 * * * * root rm -rf /tmp/*

A linha acima diz: "A cada 30 minutos execute o comando como root"

Pois é pessoal, esse é o basicão. Prometo que, quando der, vou aprofundar mais um pouco.

domingo, 8 de setembro de 2013

Engine de animação em JavaScript

function now(){
 return ( new Date ).getTime();
}
 
function animate( time, fn, fps ){
  var start = now(),
      intrval = fps ? 1000/fps : 20,

      id = setInterval(function(){
        var diff = now() - start, p = diff/time;
     
        if( p > 1 ) p = 1;
         fn( p );
        if( p == 1 ) clearInterval( id );
     
      }, intrval);
}
Acima um exemplo  de uma engine simples de animação em JavaScript. 
Simbora ver lá como funciona!
A priori você tem que entender o que é uma animação
O exemplo acima usa a melhor técnica (na minha opinião) de se animar algo, 
que é com porcentagem.
Suponhamos que você queira animar o width de uma div de 200px para 300px em 1 segundo. 
A animação se dá numa transição de 200px até 300px. Então vai ser assim:
width = 200 + (300 - 200) * p
Essa é a "fórmula mágica", onde p é a porcentagem definida por: p = ( now - start )/time [linha 9]
Onde now [veja a function now  - linha 1] representa o tempo agora, 
start o tempo no inicio da animação e time o tempo total em que a animação deverá ocorrer (por exemplo: 1000 milisegundos). 
O FPS [Frames Per Second] representa em que interval a função será chamada para 
atualizar o p [como o nome fps já é bem auto-explicativo, vou pular essa parte]
Quando p = 1 significa que a animação chegou ao fim, então só é preciso "desligar" o setInterval e fim!
Vamos testar a função animate no console:
  1. animate( 1000, function(p){
  2. console.log( p );
  3. });
Viu? Agora tente animar algo simples, por exemplo:
  1. var box = document.getElementById('box'), startWidth = 200, toWidth = 300;
  2. animate( 1000, function(p){
  3. box.style.width = startWidth + ( toWidth - startWidth ) * p;
  4. });
Espero que você tenha entendido tudo, caso não, pode comentar :D

sábado, 25 de maio de 2013

Entediado por não ter nada pra programar?

Tédio. Sem Desafios.
Com certeza um período chato na vida de todo programador é não ter nada para se divertir (é claro que eu tô falando de codificar ainda né). Se você, assim como eu, anda meio entediado aqui vai uma dica: Project Euler. Um site cheio de problemas matemáticos só a espera de você criar um código para solucioná-los. Tem problemas de todos os níveis para todos os tipos de tédio.

Good coding!

terça-feira, 5 de março de 2013

Uma dica

Se você está fazendo um script Ruby e de repente se depara com
syntax error, unexpected keyword_end, expecting $end
Não está sozinho! Lembro da vez que passei horas procurando o motivo da exception. Mas pra lhe ajudar, se for esse o seu caso, provavelmente foi um do que você esquece

require "sinatra"

get "/"
   ...
end

# correto


get "/" do
   ...
end


# Um exemplo de código que daria a exception acima


segunda-feira, 5 de novembro de 2012

Valores Complexos | JavaScript

  1. var arr1 = arr2 = [ ];
  2. arr1.push( 5 );
  3. console.log( arr2 );
No exemplo acima o log daria o output "[5]", isso porque ao alterar o Array arr1 o Array arr2 também é alterado. O mesmo vale para objetos:
  1. var obj1 = {}; 
  2. var obj2 = obj1;
  3. obj1.man = "Man!!!";
  4. console.log( obj2.man );
O output no console seria a mensagem "Man!!!".

Curioso pra saber porque isso ocorre? DON'T PANIC!

Primeiro de tudo, você deve entender como JavaScript armazena os valores das variáveis.
O Array e o Objeto diferem dos outros tipos por serem tratados como valores complexos ( WHAT?! ) e o que ocorre quando eu faço var arr1 = arr2 = [ ]; é que eu não estou copiando o valor de arr1 em arr2 e sim copiando para arr2 a referência da memória arr1, e assim ocorre com todos os demais valores complexos em JS. Então entenda: Valores complexos são armazenados e manipulados por referência de memória.

Os outros tipos, os primitivos, - Number, String, Boolean - são armazenados/copiados por valor mesmo. Nos próximos posts eu vou continuar explicando melhor como isso funciona :D

Espero que tenha entendido, qualquer dúvida ou sugestão será bem-vinda nos comentários.

quarta-feira, 31 de outubro de 2012

Konichi-wa noobies!

http://aprendaaprogramar.rubyonrails.com.br/ 
Pra quem ainda tá querendo aprender programação de um jeito mais fácil ou tiver com dificuldade de entender algum conceito. :D 
Para aprender com o tutorial "Aprenda A Programar - Ruby" você vai precisar de:

  • - Um Cérebro
  • - Foco
  • - Tempo, à gosto.

Bonne étude! - E qualquer dúvida que não dei pra resolver sozinho, comente abaixo que lhe ajudarei com o maior prazer! -

sábado, 6 de outubro de 2012

Wordor, Ruby File Organizer

Esses dias resolvi criar um script mais simples que o Leran (o código parece meio POGamado pra mim hoje, mas o Gabriel do passado fez o código achando-o incrível :p). Então a esse novo script feito em Ruby, claro, dei o nome de WordOr (Word Organizer).

Tá, chega de blá blá e enrolações e vamos ao ponto que você já deve estar se pergutand: "O que ele faz?".
Primeiro vamos a uma demo de uso:
# Entra na dir e "joga" os arquivos que contiverem no seu nome o trecho '.mp4' em
# uma pasta chamada .mp4 (o script cria automaticamente a pasta caso ela não exista)
ruby wordor.rb /home/gabriel/Videos .mp4

Nice? Yeah! Que tal organizar os arquivos que contiverem no seu nome a o trecho 'ga'?

ruby wordor.rb /home/gabriel/Documentos ga

Casaria com 'gabriel', 'gato', 'gatildo', 'agataiado', etc...

Bom, espero que tenha gostado. :D