Posts com Tags programação

Utilizando svn em linha de comando

Estava trabalhando em projeto com o @Joe e como estavamos em lugares diferentes tinhamos que sincronizar nosso trabalho assim sempre que terminassemos um feature simples como uma página, um layout ou qualquer coisa simples mas funcional nós mandamos para o servidor e o outro poderia pegar as atualizações e seguir com seus próprios códigos.

Para que possamos fazer isso é necessário que nossos códigos estejam sob um servidor de arquivos que faz esse controle de versionamento e outras coisas.

Esse servidor é conhecido como subversion ( http://subversion.tigris.org/ ) ele nos dá inúmeras possibilidades como adicionar arquivos, remover arquivos, sincronizar, verificar updates, avançar para novas versões, retroceder para versões anteriores de arquivos e outras coisas mais.  Assim não precisamos ficar fazendo os malditos .old, .old1, .old2, .old3.

Depois dessa micro historinha vamos aos codigos.

Para fazermos o download de um projeto para trabalharmos teremos que ter um usuário e senha cadastrados junto ao servidor isso quem tem de fazer é o administrador do projeto.

Considerando que você tenha um usuário e senha valido no servidor vamos listar as pastas e arquivos do projeto.

# Lista a raiz do projeto
svn list svn://url/servidor
# Lista a pasta path do projeto
svn list svn://url/servidor/path

Seria básicamente um ls no servidor svn.

Agora vamos fazer o download ou melhor o checkout do projeto para nossa máquina para começarmos os trabalhos, afinal tempo é dinheiro.

#fazendo o download da pasta path para uma url local
svn co svn://url/servidor/path /url/onde/ficara/projeto

Caso você não esteja logado vai ser requisitado a senha e o usuário que você esta usando no momento na maquina local vai ser
passado como parametro para o checkout no servidor svn

Caso você tenha outro usuário cadastrado no servidor svn você pode passar esse usário como parâmetro.

svn --username outroUsuario co svn://url/servidor/path /url/onde/ficara/projeto

A cada novo commit (envio de codigos para o servidor svn) será criado um novo número de controle de versão (revision).  Pensando que poderiamos mandar um código incorreto(bugado) para o servidor e um companheiro queira pegar  uma versão anterior ou seja a ultima versão correta do projeto pois você ou alguém mandou um código bugado.
Vamos pedir ao servidor informações sobre o projeto para sabermos o número da última revisão.

#Descobrindo informações sobre o projeto
# o que interessa neste momento e saber qual o numero de revision
svn info svn://url/servidor/path
#Visto o numero da ultima revisão podemos escolher qualquer versão anterior a essa passando o -r no checkout
svn --username outroUsuario -r numerorevisao co svn://url/servidor/path /url/onde/ficara/projeto

Pronto temos os códigos todos em nossa máquina agora mãos a obra vamos trabalhar com codificação.

Quando terminarmos vamos precisar mandar nossa modificações para o servidor, para isso temos um comando bem bacana e simples.

#Voce pode commitar uma pasta inteira ou  um arquivo você escolhe
svn commit -m "Seu comentário ou justificativa para as mudanças do codigo isso vai para o log do commit"  /path/a/ser/commitado /path/arquivo/commitar

Podemos verificar todos os arquivos que estão modificados em seu computador e no servidor.

svn status -u path/a/ser/verificado

Com alguma frequência dois desenvolvedores modificam o mesmo arquivo quando isso acontecer o arquivo vai ser marcado como conflict
Para ver as diferenças é possivel fazer um

 svn diff  arquivoNovo arquivoVelho

Depois de ter corrigidos todos os erros basta marcar esse arquivo como resolvido.

 svn resolv  arquivoNovo

Logo

 svn resolved  arquivoNovo

Para depois fazer seu commit corretamente, agora como você vai resolver os conflitos do arquivo…. isso é com você …

E por ultimo e não menos importante podemos ver o commit das pessoas envolvidas no projeto além de seus comentários e arquivos modificados.

#Pegando a saida do log e redirecionando para o less caso seja muito grande esse log.
svn log | less

E para uma leitura completa do log escolha um revision r visto no log visualizado anteriormente.

svn -r  -v  log

Atenção a dicas básicas, nunca apague fisicamente um arquivo com nosso amigo rm, utilize

svn del /path/arquivo
#ou
svn rm /path/arquivo

#ou para pasta com recursividade
svn rm -r /path/past

E para adicição de arquivos ao projeto.

svn add /path/arquivo

#ou para pasta //Nao testado 🙁 

svn add -r /path/pasta

Acredito que com esses comandos básicos já de para se divertir a vontade com o subversion, aconselho sempre usar um servidor de controle de versão. Existem outros como o CVS, GIT dentre outros mais esses ainda não experimentei , quando o fizer posto aqui alguma coisa.

Abraços

Dinei

Tags: , , ,

Editando tags id3 com python

Ola a todos,

Hoje vou falar de um problema que muitas pessoas devem ter. Ao baixar uma música qualquer da internet os carinhas colocam o nome do site no Titulo da música, no artista e nos comentários mas como isso se o o arquivo esta com nome correto?
Eles usam as tags ID3, mas então o que é a tag ID3?

“A etiqueta ID3 (em inglês: ID3 Tag) é um conjunto de informações mais usados junto com o formato de áudio MP3. Ela permite armazenar informações como o título, artista, album, número da faixa, ou outra informação sobre o arquivo no próprio aquivo.” Wikipedia [1]

Depois de ler um pouco a respeito resolvi mudar as tags das músicas para que quando as estiver escutando apareçam os dados válidos como nome da música e do Artista que a canta. Eu uso o Rhythmbox[2] e este pode até ser integrado ao seu software para conversa instantanea como AMSN[4], PIDGIN[4] dentre outros. Fazer isso na mão seria muito cansativo e não divertido, solução …. python.

Para este script utilizei uma biblioteca não padrão do python o mutagen[5], este serve para mostrar/editar as tags ID3 das músicas em formato mp3.

De acordo com o exemplo do site bastam 4 linhas para abrir->modificar->salvar o titulo de uma música em formato mp3 em seu HD.

 
 from mutagen.easyid3 import EasyID3
 audio = EasyID3("sua_musica.mp3")
 audio["title"] = "Somente um exemplo no titulo"
 audio.save()

Agora vamos a meu script, não vou comentar pois o código já esta bem comentado.

 
#!/bin/env python 
#!-*- coding: utf-8 -*-
from sys import exit
from os import walk, path
from os.path import isfile, join

"""
@author: Valdinei dos Santos 
@twitter: http://twitter.com/valdineisantos 
@site: http://www.valdineidossantos.com/
@date: 16 Janeiro 2010
"""

try:
    from mutagen.easyid3 import EasyID3
except:
    print "Necessario instalar a biblioteca mutagen"
    print "Site: http://code.google.com/p/mutagen/"
    print "Python Setup Tools: easy_install mutagen"
    exit(1)


#Diretorio que vai ser pesquisado
directory_root = "/home/valdinei/Musica/Downloads/"

def getInformations(track):
        fileAtributes = dict()
        """
        O Padrão das músicas estavam "01 - Artista - Album.mp3"
        Nesta parte de Código vc deve se adequar a sua realidade mas isso é só trabalhar com strings.
        """
        #split por "- " me dará com resultado 3 strings
        trackNumber, artist, title   =  track.split("- ")

        #Que depois de tratadas serao retorandas como valor final
        fileAtributes["trackNumber"] =  trackNumber.strip() 
        fileAtributes["artist"]      =  artist.strip() 

        #Tratando a string como um lista. O .mp3 esta sendo ignorado pois pego tudo -4 casas do final
        fileAtributes["title"]       =  title.strip()[:-4]

        return fileAtributes 

"""
Caso tenhamos mais diretorios internos sera recursivo.
Mais sobre Walk em : http://docs.python.org/library/os.html#os.walk
"""
for (original,  directoryname, filenames) in walk (directory_root):
    filenames.sort()
    
    total = len(filenames)

    cont = 0;

    for filename in filenames:
        """
        Calculando a porcentagem de arquivos feitos
        (parcial * 100)/numero total de músicas
        """
        cont = cont +  1
        percent = round (cont * 100 / total )
        print "%02d%%" % percent

        info = getInformations(filename)
        
        #Verifico se o endereço do arquivo é valido realmente e se ele continua la.
        if isfile( join(original,filename) ):
            """
            Agora vamos começar a modificar as tags ID3 dos arquivos MP3 depois salva-los.
            """
            try:
                mp3 = EasyID3( join(original,filename) )
                mp3["title"] = info["title"] 
                mp3["artist"] = info["artist"]
                mp3["tracknumber"] = info["trackNumber"]

                #Salva as informações no arquivo
                mp3.save()
            except Exception, e:
                print "%s %s" % (e.__doc__, e )

print "Todos os Arquivos foram modificados"

E com isso suas mp3 agora vão ter o formato que você definiu que teriam. Atenção eu em momento algum modifiquei o nome físico do arquivo, somente as meta informações baseadas no nome que era o que eu tinha em mãos.

Não estou em momento nenhum incentivando a NINGUÉM baixar NADA da internet. A idéia original aqui era simplesmente python + programação e algumas boas práticas.

Algumas coisas que derrepente podem ter passados despercebidas foi o uso do os.walk, os.join, os.isfile todos importados no cabeçalho. Mas isso pode ser um outro assunto de post.

Seguem os links de referencia:

[1] Wikipedia : http://pt.wikipedia.org/wiki/ID3

[2] Rhythmbox: http://projects.gnome.org/rhythmbox/

[4] AMSN: http://www.amsn-project.net/ (esse projeto originalmente era feito por um brasileiro)

[5] PIDGIN: http://www.pidgin.im/

[6] Mutagen: http://code.google.com/p/mutagen/

Tags: , , , , , , ,