domenica 18 gennaio 2009

How to automatically backup a folder

I'm crazy for backups. Really paranoid about this.
I've written a little sh script to make automatic and incremental backups of my daily work.
This script makes an incremental backup of your work and shows a popup with a progress bar.

#!/bin/sh
path=/Desktop

path_backup=/media/disk/LACIE
cp -u -r -b $path $path_backup | zenity --width 200 --progress --auto-close --pulsate
zenity --info --text='Backup done!'

where "path" is the working directory to backup, while "path_backup" is the destination path.
Change them to fit your needs and save the script with .sh extension.
Give execution permission to it and the put it in cron to automatically execute it.
Have fun!


mercoledì 14 gennaio 2009

Aprire un socket in python

Chiunque ha sempre sognato di aprire una connessione socket implementando magari un protocollo di comunicazione con il proprio telescopio.
In questo post vediamo alcune semplici righe di codice Python per l'apertura di una porta di comunicazione socket e l'invio di alcuni semplici comandi.
In un documento di testo inseriamo la riga:

#! /usr/bin/env/python

richiamiamo le librerie python necessarie al funzionamento del codice con i comandi:

import sys
import socket

la prima è una libreria di funzioni basilari mentre la seconda è quella che ci permetterà di implementare la comunicazione.

Memorizziamo l'indirizzo dell'host in una variabile per comodità:

host="ID:~numero_ip#"

ed ora impostiamo i parametri di connessione al server e apriamo la comunicazione con esso:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, "porta"))

il primo parametro "socket.AF_INET" è la famiglia socket, mentre il secondo è il tipo.
Questi due valori sono generalmente compatibili con la maggior parte delle esigenze.
Il secondo comando appena visto apre la connessione con il server host sulla porta specificata.

A questo punto possiamo spedire i comandi al server in ascolto con il comando:

sock.send("comando")

e leggiamo la risposta con:

data=sock.recv(1024)

memorizzandola nella variabile "data".
Alla fine sarà necessario chiudere la comunicazione semplicemente con il comando:

sock.close()

se vogliamo che il codice al momento del lancio passi degli argomenti al socket possiamo utilizzare le variabili sys.arg["numero argomento"].
Supponiamo infatti di aver salvato lo script sotto il nome "sock.py" e di voler spedire al server il comando "ciao". Diamo allo script i permessi di esecuzione e lanciamo l'interprete con il comando:

python sock.py ciao