quarta-feira, 25 de abril de 2007

Ubuntu 7.04 - Será desta que a MS se vai sentir?

Para quem não sabe, no dia 19 de Abril foi lançado o Ubuntu 7.04 e este tem muitas novidades.
Dentro delas destaca-se o Gestor de Controladores Restritos. Este gestor permite que se instale os drivers de uma placa gráfica (nVidia e ATI), wireless, etc... com apenas alguns cliques.
A nível de rede sem fios também foi melhorado, temos agora um assistente de redes sem fios (e com fios).
Mais suporte a hardware (isto agora tem a ver com o kernel), mais estável...

Basicamente são estas as mudanças. Já fiz update e está tudo ok :-)

Aconselho que façam o update.

Agora com estas melhorias todas, e sem ter aplicaçoes a comer ram para nos proteger de virus e afins.. será que é desta que a MS se vai sentir com o VISTA (sim, porque o vista é uma desilusão)? Quem sabe é desta que tudo migra para GNU/Linux ao ver a sua potencialidade e o baixo (nulo) preço!

sexta-feira, 13 de abril de 2007

Home Backup Script (Python)

Como prometi, venho aqui colocar uma nova aplicação.
Na altura precisava de algo que me fizesse um backup da homedir e uploadasse para um servidor o backup pus-me ao trabalho de fazer um script que o fizesse.

Consegui chegar à versão 0.3 desse script e comecei a fazer uma 0.4, quem sabe se daqui a uns tempos não continuo a 0.4

Ah e este script até faz logs e utiliza um ficheiro para as configurações :-P

----------------------------------------
from ftplib import FTP
import time, os, sys, ConfigParser

# Home Backup variabels, don't change this
home = os.environ["HOME"]
config = ConfigParser.ConfigParser()
config.read(home + "/homebackup/homebackup.conf")
hostname = config.get("FTP","hostname")
username = config.get("FTP","username")
passwd = config.get("FTP","passwd")
date = time.strftime("%d-%m-%Y-%H%M%S")
user = os.getenv('USER')
bkp = user + "-backup-" + date + ".tar"
log = open(home + "/homebackup/homebackup.log","a")
version = "0.3"

log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script started.\n")
print "\t\t\tHome Backup Script v" + version + "\t\t\t"
print "Where I will put the backup file?"
print "1. In this directory"
print "2. In a remote machine (You need FTP access)"
option = raw_input("=> ")

def backup():
print "\n" + time.strftime("[%H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ..."
os.system("tar --absolute-names -cf " + bkp + " " + home)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Compressing backup ..."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Compressing backup ...\n")
os.system("gzip -9 " + bkp)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n")
print time.strftime("[%H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
log.close()
def backup_ftp():
print "\n" + time.strftime("[%H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ..."
os.system("tar --absolute-names -cf " + bkp + " " + home)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Compressing backup ..."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Compressing backup ...\n")
os.system("gzip -9 " + bkp)
bkpfinal = bkp + ".gz"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n")
print time.strftime("[%H:%M:%S] ") + 'Backup created: ' + bkp + ".gz"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Now I will upload backup to " + hostname + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Now I will upload backup to " + hostname + " ..."
try:
ftp = FTP(hostname)
except:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Invalid hostname.\n")
print time.strftime("[%H:%M:%S] ") + "Invalid hostname."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
sys.exit()
try:
ftp.login(username, passwd)
except:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Username or Password invalid.\n")
print time.strftime("[%H:%M:%S] ") + "Username or Password invalid."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
sys.exit()
filebkp = open(bkpfinal,'rb')
uploadcmd = "STOR " + bkpfinal
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Uploading ...\n")
print time.strftime("[%H:%M:%S] ") + "Uploading ..."
ftp.storbinary(uploadcmd, filebkp)
localsize=os.path.getsize(bkpfinal)
remotesize=ftp.size(bkpfinal)
if localsize != remotesize:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Uploaded file is corrupted.\n")
print time.strftime("[%H:%M:%S] ") + "Uploaded file is corrupted.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
elif localsize == remotesize:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload completed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload completed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
filebkp.close()
ftp.quit()
log.close()

if option == "1":
backup()
elif option == "2":
backup_ftp()
elif option != "1":
print "Unknown option."
elif option != "2":
print "Unknown option."
Download completo pode ser feito aqui: http://hydrus.homeunix.net/~amg/homebackup/homebackup-0.3.tar.gz

quinta-feira, 12 de abril de 2007

Desculpem o tempo sem posts

Olá irmãos,
Para os que lêem (provavelmente ninguém ou quase ninguém) o meu blog, desculpem estar sem fazer posts uns tempinhos... é que tive várias coisas para fazer e esqueci-me disto. Esta fim de semana prometo que ponho uma nova aplicação.
By the way, ando a voltar para Python :-P por isso daqui a uns tempos novas aplicações de 2007 (já não faço aplicações em Python desde 2006, eheheh).

Bem, é isso.

Cumprimentos a todos(as)!

quinta-feira, 5 de abril de 2007

Voltei ao Loonix!

Olá irmãos, estou de volta ao Loonix.
Após uns tempos sem este a "doença" voltou. Sou de novo o paranóico que era antigamente. Viva ao Loonix!
Vim para Ubuntu porque agora tenho um laptop (sim, eu com laptop, linux lá e redes wireless é um perigo-- risos). Pus esta distribuição para não perder muito tempo com configurações e por ser mais indicada para portáteis. Para além disso tenho um sticker do Ubuntu na parte de trás do portátil para quando alguém me vir na rua com o portátil dizer: Uhh grande geek!
Deixando de mimos, eu como tenho uma placa gráfica de 128mb e 1gb de ram coloquei o Beryl+AIGLX para ver como ficava... e está mesmo excelente. O VISTA comia-me 50% de RAM (50% de 1gb = 500mb), o portátil aquecia um bocado e o disco rigido fazia um apito muito baixo e agudo. Agora com Ubuntu aqui já é outra coisa :-P
Uma das dificuldades que tive foi a resolução... como é Widescreen e a placa é Intel deu logo barraca. Mas felizmente no Feisty Fawn este problema já vem resolvido.
Para resolver este problema utilizei o 915resolution (podem ver o meu tutorial aqui: http://www.tux-linux.net/view.php?IDART=331).
Não tenho postado ultimamente porque tenho andado a ver LOST (hay, ja estou quase a apanhar a ABC e depois ver os lançamentos semanais).
Tenho andando também a ler a Revista Portuguesa de Linux (http://www.revista-linux.com/), lançada bimestralmente (de dois em dois meses) e que aceitam tutoriais por parte dos leitores. Para não falar que é distribuída livremente (em PDF, nice, estamos a salvar o ambiente, um problema que me preocupa seriamente).
Estou quase de volta à escola, mas são só mais 2 meses sensivelmente e depois tenho férias de verão :-)))
Provavlemente este fim-de-semana ainda coloco mais alguma aplicação minha e explicar como procedi para a sua elaboração.

Cumprimentos geekianos a todos os geeks(as)