Posts Tagged ‘python’

Livros de programação disponíveis para download

April 9th, 2010

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

June 28th, 2009

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

July 23rd, 2008

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)