RafaelXavier


Quick script to fetch diff history [of a file] using svn

Posted in Tech by admin on the June 2nd, 2009

If you wanna see the whole history differences of some file in svn repository, you could use this:
$ svndiffhist file
Retrieving releases...
OK (found 17 steps)
## 908:895
diffs...
## 895:890
diffs...
## 890:880
... etc

Where svndiffhist is the following script:

function svndiffhist {
    FILE=$1

    echo -n "Retrieving releases..." >&2
    releases=$( svn log $FILE | grep '^r[^a-z]' | cut -d " " -f1 |
                cut -dr -f2- )
    num_steps=$( echo $releases | wc -w )
    echo -e "tOK (found "$num_steps" steps)" >&2

    # Sort them in ascrending order
    #releases=$( echo $releases | tr " " "n" | sort -n )
    # Group them as A:B B:C C:D
    releases=$( echo $releases | sed 's/ ([0-9]+)/:1 1/g' )

    for EACH_STEP in $releases; do
        #svn diff -r $EACH_STEP $FILE | gvim -
        echo "## $EACH_STEP" >&2
        svn diff -r $EACH_STEP $FILE
    done
}

A REST client interface for Python

Posted in Tech by admin on the July 15th, 2008

The py-restlib: [http://code.google.com/p/py-restlib] is a GNU GPL library that implements a REST client interface for Python.

Here it goes its Getting Started section:

Introduction

Py-restlib is supposed to be a simple REST client interface for python. But, it also claims that writing a python client to communicate with RESTful applications on the Web should be an easy task.

Getting Started

Download

Check out the latest release using svn:
svn checkout http://py-restlib.googlecode.com/svn/trunk/ py-restlib
svn checkout http://py-restlib.googlecode.com/svn/trunk/ py-restlib

If you want support for translating JSON format into python structures, download json-py package, and unzip it to json-py subdir.

Examples

The REST client


from restlib import *

users = Resource("http://hostname/api/users")

# List all users (GET /api/users)
users.get()

# List user where id==1 (GET /api/users/1)
users.get(1)

# List user where id==1 && foo=='bar' (GET /api/users/1?foo=bar)
users.get(1, foo='bar', ...)

# Create a new user (POST /api/users)
users.create(foo='bar', ...)

etc...

# You are also able to use it that way:
api = BaseResource("http://hostname/api")
api.users.get()
api.users.create(foo='bar')
etc...

The REST server (in this case a Ruby on Rails application)


class Api::UsersController < ApplicationController
    protect_from_forgery :except => :create
    # GET /api/users
    def index
        @users = User.find(:all) # FIXME: if param[id] - under construction

        request.format=:json if request.format=:html
        respond_to do |format|
            format.xml {render :x ml => @users.to_xml}
            format.json {render :json => @users.to_json}
        end
    end

    # POST /api/users
    def create    # FIXME: under construction
        request.format=:json if request.format=:html
        respond_to do |format|
            format.xml {render :x ml => params.to_xml}
            format.json {render :json => params.to_json}
        end
    end
end

Python POST request

Posted in Tech by admin on the July 14th, 2008

If you’re trying to send a python POST request with httplib, but it’s not working like example tells. Try this minor fix:

Here is an example session that shows how to “POST” requests:

>>> import httplib, urllib
>>> params = urllib.urlencode({’spam’: 1, ‘eggs’: 2, ‘bacon’: 0})
>>> headers = {”Content-Type”: “application/x-www-form-urlencoded”,
… “Accept”: “text/plain”}
>>> conn = httplib.HTTPConnection(”musi-cal.mojam.com:80″)
>>> conn.request(”POST”, “/cgi-bin/query”, params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
200 OK
>>> data = response.read()
>>> conn.close()

Thanks to wireshark and the working command below, so example above could be compared.

curl -d foo=bar http://localhost

vim – highlight search

Posted in Tech by admin on the November 12th, 2007

Para setar seu vim (vi) para destacar o que procura (to highlight the searched text), use:

:set hlsearch

keywords: highlight destaque destacar search procurar procurado searched text string

vim – smart command completion

Posted in Tech by admin on the November 12th, 2007

Para completar os comandos (:) com TAB (^I):

:set wildchar=<Tab>
:set wildmode=full

Compiz Fusion – linux ao estilo Mac OSX parte2

Posted in Tech by admin on the November 4th, 2007

Em 2006, surgiram as primeiras aparições de um desktop 3D tangível no linux, com o XGL. http://www.dicas-l.com.br/dicas-l/20060606.php

Algum tempo se passou e muito se evoluiu…

O projeto Compiz juntou-se com seu fork Beryl e, agora, chama-se:
http://www.compiz-fusion.org

Criptografia em Linux, utilizando EncFS

Posted in Tech by admin on the November 2nd, 2007

Introdução (o que?)

Este tópico descreve o procedimento para criptografia de dados no GNU/Linux, utilizando o sistema de arquivos EncFS.

Público Alvo (pra quem?)

Este tópico deve ser útil para usuários de laptop.

Vantagens e Desvantagens de utilizar o EncFS

Modos de criptografia

TODO

Como utilizar

Instalação

Instalar os pacotes: (utilizar o gerenciador de pacotes de sua distribuição)

  • FUSE (Filesystem in Userspace)
  • EncFS

Criação do diretório criptografado

Na 1a tentativa de montar seu volume criptografado, ele é criado.

Existem várias opções de criptografia. Caso opte-se pela praticidade, siga os valores default.
$ mkdir ~/.pessoal.enc # dados criptografados (raw data)
$ mkdir ~/pessoal # ponto de montagem (dados legíveis)
$ encfs ~/.pessoal.enc ~/pessoal # na 1a tentativa de montagem, o volume criptografado é criado
Volume key not found, creating new encrypted volume.
Password: [password entered here]
Verify: [password entered here]

O diretório ~/pessoal, agora, é um ponto de montagem de ~/.pessoal.enc e todo o conteúdo que estiver dentro dele (~/pessoal) estará seguro quando offline.

Montando/Desmontando

Montando.

$ encfs ~/.pessoal.enc ~/pessoal
Password: [password entered here]

Diretório legível: (montado)

$ cd ~/pessoal
$ echo "hello foo" > foo
$ echo "hello bar" > bar
$ ln -s foo foo2
$ ls -l
total 8
-rw-r--r-- 1 vgough users 10 2003-11-03 21:44 bar
-rw-r--r-- 1 vgough users 6 2003-11-03 21:44 foo
lrwxrwxrwx 1 vgough users 7 2003-11-03 21:44 foo2 -> foo

Diretório criptografado: (de fato, armazenado)

$ cd ~/.pessoal.enc
$ ls -l
total 8
-rw-r--r-- 1 vgough users 6 2003-11-03 21:44 eEM4YfA
-rw-r--r-- 1 vgough users 10 2003-11-03 21:44 gKP4xn8
lrwxrwxrwx 1 vgough users 7 2003-11-03 21:44 i7t9-m,I -> eEM4YfA

Desmontando.

$ fusermount -u ~/pessoal

Criptografando os dados de seus aplicativos: Firefox, Thunderbird, etc.

Deseja ter criptografados seus emails, informações de calendário, conversas do instant messenger e informações de seu browser? Mova o diretório de configuração de cada aplicativo para dentro do volume criptografado e crie um link de volta. Como no exemplo abaixo:

Antes de iniciar os aplicativos (óbvio), mova seu diretório de configuração para dentro do volume criptografado e link-o de volta. Por exemplo:
cd ~
mv .mozilla ~/pessoal
ln -s ~/pessoal/.mozilla .

Faça o mesmo para mozilla-thunderbird, gaim, evolution, entre outros.

Ambiente Gráfico

Em ambiente gráfico, pode ser mais prático criar starers de aplicativos que, antes de inicializar o aplicativo em si, cheque se a unidade criptografada está montada. Caso não esteja, o próprio starter poderá montá-la, utilizando gtk2-ssh-askpass, x11-ssh-askpass ou zenity. Exemplo:
encfs --extpass=/usr/bin/zenity-encfs $ENC $MNT

http://gentoo-wiki.com/TIP_EncFS

Backup!

Uma vez que todos os dados estão concentrados no diretório criptografado ~/.pessoal.enc, torna-se fácil a realização de backup. Basta copiá-lo para uma mídia removível e, sim, o backup também estará criptografado.

Exemplos de como realizar o backup:

  1. Compactar o diretório tar -czf ~/pessoal.enc.tgz ~/.pessoal.enc e copiá-lo para um DVD (sugestão: k3b).
  2. Utilizar alguma forma de backup diferencial/incremental (é copiado apenas o que alterou), sem sugestões…

Links externos

Segue: