Assuntos relacionados à programação, pedaços de códigos, pequenas dicas, pequenos tutoriais, alguns vídeos, algumas fotos e etc.

Rapidinha: instalando o MicroXP no VirtualBox

Posted: dezembro 14th, 2009 | Author: Carlan Calazans | Tags: , , , | No Comments »

Resolvi escrever (ou tirar do draft) sobre algo que faz parte do meu dia-a-dia no trabalho, ou seja, lidar com máquinas virtuais. A pouco tempo atrás quando se falava em máquina virtual o que me vinha na mente era o aplicativo VMWare. De lá pra cá, eu só tinha lido sobre o assunto e feito somente 01 único teste. Até por que o VMWare é pago.

Pesquisando sobre o assunto e procurando uma solução livre, um ex-chefe me sugeriu dar uma olhada no VirtualBox. Sem dúvidas ele me pareceu bem melhor do que o Qemu, por exemplo. Não que este último seja ruim, mas uma das facilidades que eu precisava era acesso a rede e a configuração da interface do hospedeiro não era nada simples. Por outro lado, no VirtualBox, através da documentação encontrei as informações que precisava e tudo funcionou corretamente. Comecei a gostar desse aplicativo.

No início do ano passado a Sun comprou a Innotek, empresa que criou o VirtualBox. O aplicativo melhorou muito desde que a Sun assumiu. As atualizações ficaram mais frequêntes, a configuração de rede se faz com dois cliques do mouse, a documentação ficou mais clara e objetiva, dentre outras coisas.

Abaixo se encontra o vídeo de instalação, veja como o processo é simples ;)

Get the Flash Player to see this player.


Download


Ruby calculando o dia da Páscoa

Posted: abril 10th, 2009 | Author: Carlan Calazans | Tags: , , , , , | No Comments »

A Páscoa é uma data comemorativa que serve de referência para datas comemorativas móveis como Carnaval, Quaresma, Corpus Christ e outras. Por isso é importante saber quando a Páscoa vai ser comemorada. Além de interessante, serve como uma brincadeira para os garotos(as) de programa de plantão que não tem nada para fazer no feriado.

Cálculo

No total são três formas de calcular a data da Páscoa. A primeira é recorrendo a uma tabela, a segunda é através ao algorítimo de Gauss para o intervalo de anos que se inicia em 1900 e termina em 2099 e a terceira com o algorítimo de Meeus / Jones / Butcher. Como exemplo, optei pela segunda forma por ter umas condições e por ela ser mais elaborada. Para quem se interessar, os algorítimos serão relacionados no final deste texto.

#!/usr/bin/env ruby

require 'date'

FIELDS = %w{Carnaval Pascoa Corpus\ Christ}

ano = 2009 #change me

x = 24
y = 5

a = ano % 19
b = ano % 4
c = ano % 7
d = (19 * a + x) % 30
e = (2 * b + 4 * c + 6 * d + y) % 7

if (d + e > 9)
  #april
  dia = d + e - 9
  mes = 4

  #exceptions  
  dia = 19 if (dia == 26)
  dia = 18 if (dia == 25 && d == 28 && a > 10)
else
  #march
  dia = d + e + 22
  mes = 3
end

dt = Date.new(ano, mes, dia)

result = []
result << dt - 47
result << dt
result << dt + 60

FIELDS.each do |d|
  puts "#{d}: #{result.shift.strftime("%d-%m-%Y")}"
end

Este texto tem uma pegadinha. Na verdade, meu intuito com ele não é ensinar Ruby nem mostrar como se calcula o dia da Páscoa. Foi uma forma que encontrei de mostrar como a linguagem chega perto do idioma, como poucas linguagens o fazem. Qualquer pessoa é capaz de entender as fórmulas matemáticas e relacioná-las com o exemplo mostrado. Sim, existe um açúcar, mas é fácil de entendê-lo também.

A maior parte do tempo, parece que estamos conversando com um editor de textos.

Referências:


Rapidinha: GIF animado com Ruby

Posted: abril 1st, 2009 | Author: Carlan Calazans | Tags: , , , , | No Comments »

A algumas horas atrás estava tentando criar um gif animado para o twitter. Esbarrei com uma solução usando Gimp, sugestão do oráculo. Fiz o gif animado. Alguns minutos depois, o lembrei de uma gem para Ruby chamada RMagick para processamento de imagens. Como nunca a tinha experimentado eis que veio a idéia de escrever uma classe para criar um gif animado.

A gem RMagick é baseada na biblioteca de imagens Image Magick comumente conhecida no mundo Linux pelo poder de seus utilitários em linha de comando. É, linha de comando, sem a necessidade de Gimp, FW, PS e similares. Quem nunca ouviu falar de import ou convert? ;)

A classe em questão é a:

require 'rubygems'
require 'RMagick'

include Magick

class AnimatedGif

  DELAY = 100
  LOOP = 0
 
  attr_accessor :source

  def save(file)
    load_files
    @list.delay = DELAY
    @list.iterations = LOOP
    @list.write(file)
  end

  private

  def load_files
    @list = ImageList.new
    Dir.new(source).entries.reject{|f| f =~ /^\./}.each do |f|
      @list.read "#{source}/#{f}"
    end
  end

end

#Usage:
gif = AnimatedGif.new
gif.source = 'img_src'
gif.save '/tmp/animated.gif'

O delay entre as imagens está fixo no código. O loop é infinito, ou seja, seu gif ficará se repetindo a vida toda. Após criar um objeto da classe AnimatedGif é necessário informar um diretório com imagens estáticas para gerar o gif animado. E por último, é só chamar o método save passando o caminho do arquivo gif final.

Demorou uns dois minutos a mais depois do entendimento da solução em Gimp para gerar esta classe em Ruby. Foram uns 3 minutos para entender a técnica do Gimp e 5 minutos para criar a classe em Ruby. A linguagem não morde!


Rapidinha: MDBTools

Posted: fevereiro 12th, 2009 | Author: Carlan Calazans | Tags: , , , | No Comments »

Esta semana precisei exportar o schema e os dados de um arquivo MDB (MS Access) para um formato que o MySQL pudesse entender.

No ubuntu, podemos contar com a ajuda de um pacote (via apt-get) chamado mdbtools. Com o pacote instalado, é possível realizar operações no arquivo MDB como: exportar schema e dados, listagem de tabelas, executar um comando SQL, etc. Abaixo, segue alguns exemplos de uso.

Exportando o schema

$ mdb-schema database.mdb mysql > schema.sql

Exportando os dados de uma tabela no formato SQL

$ mdb-export -I -R';\n' database.mdb table > table.sql

Exportando os dados de uma tabela no formato CSV

$ mdb-export database.mdb table > table.sql

Executar um SQL no arquivo MDB

$ echo "describe table table1" | mdb-sql database.mdb

Lista as tabelas

$ mdb-tables database.mdb

Depois dessa, MDB nunca mais!