Posts Tagged ‘python’

Livros de programação disponíveis para download

No Comments »

Indico um link para diversos livros (em inglês) de programação disponíveis para download grátis. São livros sobre diversas linguagens de programação: Python, Ruby, C, C#, C++, CGI, JavaScript, Perl, Delphi, Pascal, Haskell, Java, Lisp, PHP e Prolog além de programação de jogos e engenharia de software.

Os livros estão em formatos para leitura online e para download.


Python chega à versão 3.1

No Comments »

Lançada no dia 27 de junho, a versão 3.1 do Python. Traz as seguintes melhorias:

  • Novo tipo para dicionário ordenado
  • Várias otimizações no tipo int
  • Novas funcionalidades do unittest
  • Um modulo  io muito mais rápido
  • Nova sintaxe para declarações with aninhadas

Informações adicionais podem ser obtidas nos links:


Script Simples de Backup do Servidor Trac e Subversion

4 Comments »

Existem várias estratégias possíveis de backup do servidor do Trac e do Subversion, mas executar o backup diretamente sobre os repositórios não é a melhor alternativa. Para os repositórios do Subversion usando o formato FSFS, um backup direto até funciona, mas para o Trac, que usa um banco de dados internamente, o backup pode acabar pegando o banco de dados em um estado intermediário e depois haverá problemas para restaurá-lo.

A estratégia usada no script mostrado neste artigo é criar uma cópia dos repositórios em um lugar específico e aí sim, esse lugar específico deverá usado para fazer o backup total dos repositórios.

Tanto o Trac quanto o Subversion possuem comandos administrativos para criar uma hotcopy, isto é, uma cópia do repositório enquanto o original ainda está em uso. Este comando executa automaticamente todo o procedimento para eliminar quaisquer inconsistências que poderiam ser produzidas durante a cópia de um repositório em uso.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import shutil

def limpa_diretorio_backup(diretorio):
    if os.path.exists(diretorio):
        print 'rm -rf %s' % diretorio
        shutil.rmtree(diretorio)
    print 'mkdir %s' % diretorio
    os.mkdir(diretorio)

def hotcopy(diretorio_origem, diretorio_destino, comando_hotcopy):
    limpa_diretorio_backup(diretorio_destino)
    for nome_repos in os.listdir(diretorio_origem):
        caminho_repos = os.path.join(diretorio_origem, nome_repos)
        if not os.path.isdir(caminho_repos):
            continue
        destino_repos = os.path.join(diretorio_destino, nome_repos)
        print comando_hotcopy % (caminho_repos, destino_repos)
        os.system(comando_hotcopy % (caminho_repos, destino_repos))

diretorio_repos_svn   = '/srv/svn'
diretorio_backup_svn  = '/srv/backup/svn'
svnadmin_hotcopy      = 'svnadmin hotcopy %s %s'

diretorio_env_trac    = '/srv/trac'
diretorio_backup_trac = '/srv/backup/trac'
trac_admin_hotcopy    = 'trac-admin %s hotcopy %s'

hotcopy(diretorio_repos_svn, diretorio_backup_svn, svnadmin_hotcopy)
hotcopy(diretorio_env_trac, diretorio_backup_trac, trac_admin_hotcopy)