Páginas

13 de setembro de 2012

Git rebase é o cara


Esses dias precisei fazer uma tarefa que ao meu ver não é trivial (pois não domino o Git). O estado da minha branch master era tipo esse:

- Commit 17
- Commit 16
- Commit 15
- Commit 14
.
.
.
.
- Commit 2
- Commit 1

Normal. Então eu precisava gerar uma tag stable e mandar pra produção, mas na master alguns commits (3, 6 e 14) não podiam entrar em produção em hipótese alguma.

Minha primeira solução seria fazer cherry pick do que poderia entrar no stable a partir da master.
Mas fazer cherry pick do 2 ao 17, só por causa de 3 commits, cansa.

Aí encontrei uma alternativa no rebase. Dado que tenho uma branch temporária igualzinha a master, faço o rebase no modo interativo, e APAGO as linhas/commits que não podem entrar no rebase.

git rebase -i [commit 2]~1


Irá abrir um arquivo editável:


Apagar, por exemplo, as linhas 3, 6 e 14, e salvar o arquivo (Deletar uma linha irá apagar o commit pra sempre):


Daí é só bater e tag stable e ser feliz :-)

21 de julho de 2012

Migrar SQLite para MySQL

Se você tem um"legado" no sqlite e pretende migrar para o MySQL, seguem alguns passos muito simples:

 1) Instale o Addon Sqlite-Manager no Firefox

 2) Após instalado, abra o SQLite Manager no Firefox
(eu instalei usando o idioma inglês, então vou passar as opções de acordo com o idioma que estou usando)

 3) Na opção "Connect Database" selecione o caminho do arquivo *.sqlite
 (se for o .sqlite3, dá pra renomear ou selecionar busca por qualquer extensão)

 4) Menu "Database" → "Export Database". Vai ser gerado o .sql, (quase) pronto para ser importado em outro tipo de base

 5) Edite o arquivo .sql fazendo replace das seguintes ocorrências:
5.1) AUTOINCREMENT → AUTO_INCREMENT
5.2) " → `
5.3) Caso houver algum comando com a ocorrência "sqlite_sequence" ou algo do gênero, pode tirar do arquivo

 6) Depois, só jogar pro MySQL:
mysql -h [host] -u [user] -p [password] database < [aquivo_exportado_e_editado].sql

Inspiração

1 de agosto de 2011

Gerar JSON a partir de objeto Ruby

Que eu saiba não existe algo pronto no Ruby que, a partir de um objeto, gere um Json com todas as propriedades dele.

Encontrei na web um exemplo que mostra como criar um módulo que gera o Json de todas as propriedades de algum objeto.

Porém este exemplo assume apenas que as propriedades sejam simples. Quando a propriedade for um Array (que não inclui o módulo em sua origem), ele chega vazio no Json.

Fiz duas adaptações no exemplo:
1) Gerar Json de elementos simples de um Array
2) Gerar Json dos elementos (do Array) que têm o módulo incluído



Então, o código abaixo deve funcionar :)

p = Person.new
p.name = "Leandro"
p.age = 24

n1 = Note.new("first note")
a1 = Address.new("cool!")
n1.addresses = []
n1.addresses << a1

n2 = Note.new("last note")

p.notes = []
p.notes << n1
p.notes << n2

p.simple_notes = []
p.simple_notes << "abc"
p.simple_notes << "123"
  
p.to_json
Tente imprimir "p.to_json" e verás todas as propriedades em cascata bonitinhas dentro do Json!

18 de abril de 2011

Enviar email utilizando Java

Criei uma estrutura em Java para enviar emails de forma simples. Basta apenas configurar o host do smtp (algum personalizado ou o próprio Gmail).

Forma de uso (mais detalhes no Github.):

13 de abril de 2011

Truncate com Jquery

Eu estava precisando truncar (cortar, diminuir) o tamanho de um texto na página e dar a opção para o usuário expandir/esconder, porém as bibliotecas disponibilizadas são muito pesadas.

Fiz um script, curto, simples, que trunca o texto selecionado recebendo a quantidade máxima de caracteres, e coloca um link para o usuário expandir/esconder o texto.

Além de ser leve tem a vantagem de manter o conteúdo do elemento original, permitindo assim a visualização do mesmo caso o browser não carregue javascript corretamente.

var len = $("#longText").text().length;
if (len > maxCharacters) {
    var truncated = $("#longText").text().
        substring(0, maxCharacters);
    truncated = truncated.replace(/\w+$/, '');
    var spanTruncate = "";
    $("#longText").after(spanTruncate);
    $("#longText").hide();
    $("#truncate").html(truncated);
    var linkToggle = "
more" $("#truncate").after(liknToggle); $("#truncate").show(); }

O evento para quando o usuário clicar no link expandir/esconder:
$("#toggle").click(function(event) {
    event.preventDefault();
    if ($(this).html() == "hide") {
        $("#longText").hide();
 $("#truncate").show();
 $(this).html("more");
    } else {
 $("#truncate").hide();
        $("#longText").show();
 $(this).html("hide");
    }
});

O código completo, com um exemplo de como utilizar, está disponibilizado no meu Github, para que possa ser melhorado sempre por quem estiver interessado em contribuir com o projeto.