Showing posts with label software. Show all posts
Showing posts with label software. Show all posts

Wednesday, January 21, 2015

Πως θα σβηνεις/σταμπαρεις σαν διαβασμενα μαζικα mail στο gmail

Το gmail δινει πλυθωρα λυσεων για να οργανωσεις τα mail σου. Και αρχιζεις φτιχνεις label, filters και οτι αλλο καλο θα βρεις. Στην πορεια ομως βλεπεις πως το mailbox μεγαλωνει και γινεται ολο και πιο δυσκολο να το διαχειριστεις. Και πιο δυσκολο να τα διαβασεις ολα. Αν λοιπον φτασεις στο σημειο να εχεις 20 labels και εκει μεσα χιλιαδες!! email που δεν εχεις διαβασει ή που θες να σβησεις τι κανεις?

Σιγουρα η λυση δεν ειναι να πας να τα σβησεις ανα page... Αλλα δε βρίσκεις και πουθενα μια επιλογη να το κανει αυτοματα. Ενα καλο trick λοιπον ειναι τα φιλτρα. Η λογικη ειναι δημιουργεις ενα φιλτρο στο label στο ηδη υπαρχον, και επιλεγεις την διαδικασια που θες, πχ να τα μαρκαρει ολα σαν διαβασμενα ή να τα σβησει. Το μονο που εχεις να κανεις πριν πατησεις το create filter ειναι να θυμηθεις να επιλεξεις Also apply filter to matching conversations. Φυσικα μετα θα πρεπει να πας στα settings και να διαγραψεις το συγκεκριμενο φιλτρο γιατι λογικα δεν θες να εκτελειτε η συγκεκριμενη ενεργεια καθε φορα. Η ουσια ειναι οτι εχεις μαζεψει παρα πολλα και πρεπει να κανεις κατι γιατι χανεις ας πουμε και το πλεονεκτημα του νεου μυνηματος οταν μαζευονται παρα πολλα unread mails και δεν 3ερεις/δεν μπορεις να δεις ευκολα οτι ενα καινουργιο mail ηρθε στο inbox σου.

Sunday, March 16, 2014

mini notes: emacs | modes και whitespaces, trailing whitespaces, indentation

Το emacs ειναι σιγουρα ενα εργαλειο το οποιο δεν το μαθαινεις over a night. Αν καταφερεις ομως να ασχοληθεις και μαθεις καποια πράγματα, δυσκολα ξανακοιτάς πίσω.

Σ'αυτο το κειμενο θα δουμε μερικα κολπάκια για να κανουμε ευκολα τη κατάλληλη διαμόρφωση ενος κειμένου ή του κώδικα. Γιατι είναι σημαντικό αυτο? Ο λόγος ειναι οτι τα λειτουργικα και ο κάθε editor "διαβάζει" διαφορετικά τις αλλαγές γραμμής και τα κενά. Ακόμα και ο ιδιος editor μπορει να ειναι διαφορετικα σεταρισμένος. Ετσι, οταν στέλνεις ενα κείμενο να εμφανίζετε διαφορετικα απο τον εναν στον αλλο. Σε ενα project που πολλοι πειραζουν το ιδιο αρχειο, το σωστο είναι να κρατάνε την ιδια διαμόρφωση.

Επισης σε καθε γλώσσα υπάρχουν διαφορετικοι κανόνες για code styling, κατι που βοηθάει γενικοτερα την καλυτερη αναγνωση του κωδικα. Η οπως σε άλλες γλωσσες ειναι καθοριστικο χαρακτηριστικο, μέρος της δομής της γλώσσας.

Modes

Το emacs συμπεριλαμβάνει διαφορα modes. Τα modes καθορίζουν διαφορετικές συμπεριφορες και features. Ουσιαστικα ειναι βιβλιοθήκες Lisp  libraries που επεκτείνου, διαμορφώνουν και βελτιώνουν τον emacs. Οταν θα ανοιξετε ενα αρχειο με και το σωσετε με την αναλογη καταληξη o emacs θα φορτωσει και το αναλογο mode, το οποιο μπορουμε να δουμε στα δεξια της status bar. Οι περισσοτερες γλωσσες θα πρεπει να αναγνωρίζονται.

Πριν προχωρησω καποια πραγματα για οσους κανουν τα πρωτα βηματα. Οταν θελουμε να εκτελεσουμε μια λειτουργια και αν δεν θυμόμαστε το συνδιασμο πλήκτρων η μονη περιπτωση να εκτελεσεις μια εντολη ειναι ο συνδιασμος M-x και της εντολης. M==Meta==Alt || Esc. Οταν δινουμε M-x μπορουμε να αρχισουμε να πληκτρολογουμε μια εντολη και με το <ΤΑΒ> να εμφανιστουν ολες οι εντολες που συμπληρωνουν τη συγκεκριμενη λεξη που ξαχνουμε. Δοκιμαστε να σωσετε ας πουμε την εντολη indent και πατηστε tab.

highlight-changes-mode

Πες λοιπον οτι ανοιγεις ενα αρχειο example.pyκαι γραφεις ενα κομματι κωδικα. Το σωνεις και μετα απο καιρο το ξανανοιγεις. Αν θες τωρα να παρακολουθεις τις αλλαγες που κανεις σε συγκριση με το υπαρχων κειμενο, guess what?? Υπαρχει συγκεκριμένο mode. M-x highlight-changes-mode. Καντε τωρα μια αλλαγη και θα δειτε να εμφανιζετε με κοκκινο χρωμα καθως επεξεργαζεστε το κειμενο. Παρατηρηστε οτι στη status bar επισης εμφανιζεται η ενδειξη +chg

Απο τη στιγμη που εχει ενεργοποιηθει το συγκεκριμένο mode μπορεις να κανεις και αλλα. Με το highlight-changes-rotate-faces αλλαζει τα χρωματα στις αλλαγες που εχουν γινει. Δοκιμαστε να κανετε ξανα αλλαγες και ξανατρεξτε highlight-changes-rotate-faces για να δειτε πως συμπεριφερετε.

Μπορεις να πας στη προηγουμενη αλλαγη με highlight-changes-previous-change ή στην επομενη με highlight-changes-next-change. Αν θες να απενεργοποιησεις για λιγο το συγκεκριμενο mode πατας highlight-changes-remove-highlight, Το status bar τωρα εμφανιζει την ενδειξη -chg.

whitespaces

Ας πουμε οτι εχουμε αυτο το κειμενο:

my $h = { alpha => 1,
<TAB><TAB><SPC><SPC>beta => 2,
<TAB><TAB><SPC><SPC>gamma => 3
<TAB><TAB>};
if ($items->{beta} < 3) {
<TAB>do_something();
}
 
 
αυτο θα εμφανιζεται καπως ετσι:

my $h = { alpha => 1,
          beta => 2,
          gamma => 3
        };
if ($items->{beta} < 3) {
    do_something();
}
 
Νομιζω τωρα μπορείτε να δωσετε ευκολα την εντολη

M-x whitespace-mode

Αμεσως θα δειτε καποια σημαδακια που υποδουλωνουν tabs, κενα(whitespaces),τελος γραμμης και διαφορα αλλα. Θα μπούμε τωρα στην ενοια του region. Region ειναι η επιλεγμενη περιοχη που μαρκαρουμε. Για να επιλεξεις μια περιοχη πατας Ctrl+spacebar με τον κερσορα απο το σημειο που θες και τον πας μεχρι εκει που θες να μαρκαρεις. Με αυτον τον τροπο μπορουμε να σβησουμε ευκολα οσα κενα εχουμε μεσα στο κειμενο καταλαθος. Η εντολη για αυτο ειναι M-x whitespace-cleanup ή whitespace-cleanup-region. Αν ειναι ενεργοποιημένο το mode για τις αλλαγες, θα δειτε αμεσως και που εχετε κενα και ποια διαγραφηκαν.

trailing whitespaces

Υπαρχει και η delete-trailing-whitespace που μπορει να διαγραψει ολα τα trailing whitespaces χωρις μαρκαρισμα. Επισης με ενεργοποιημενο το  whitespace-mode και το highlight-changes-mode ειναι εμφανεις οι αλλαγες. Αμεσα και γρηγορα.

indentation

Τωρα ισως εχετε και κάποια tabs μπροστα απο καθε γραμμή για τη σωστη στοιχηση. Κατα βαση ο emacs χρησιμοποιει tabs και spaces. Μπορειτε να ορισετε να χρησιμοποιει μονο το ενα απο τα δυο σαν προεπιλογη, να τα αλλαξετε αναλογα με την περισταση, ή να ορισετε ενα αρχειο μεμονομενα να συμπεριφερετε αναλογα.

Ας πουμε για να ορισουμε απο default να χρησιμοποιει μονο spaces, ανοιγουνε το αρχειο ~/.emacs και προσθετουμε στο τέλος:

(setq-default indent-tabs-mode nil)
 
Ο emacs χρεισιμοποιει 8 spaces/tab. Για να αλλαξει αυτο μονιμα σε 4 χαρακτηρες, παλι στο αρχειο .emacs μπορει να μπει:
 
(setq tab-width 4)

Επιλεγοντας ενα region και δινοντας M-x untabify μετατρεπεις τα tabs σε spaces. Αυτο είναι όλο. Μπορειτε να βρειτε πολυ περισσότερα και να κολήσετε. Γενικα το να πεις για το emacs ειναι ενα μεγαλο κεφαλαιο. Αλλα ειναι και ενα ιδιοφυες εργαλειο που μπορεις να κανεις απιστευτα πραγματα. Μεχρι και να παιξεις παιχνιδια.



  

Tuesday, October 08, 2013

Πρωτα βηματα με OpenWrt

Αφου δεν κρατηθηκα αλλο, μετα την καινουργια εγκατασταση ADSL στο σπιτι απο τον παροχο, ειπα επιτελους να βαλω το δικο μου ρουτερακι και να παιξω με ενα πιο ανοιχτο συστημα. Για αρχη, λοιπον, αποφασισα να εγκαταστησω OpenWrt. Μετα επρεπε να διαλεξω ενα ρουτερακι που να υποστηριζετε απο το συγκεκριμενο software. Η επιλογη ηταν το TL-WR741ND της TP-LINK. Καταληλο για τη δουλεια που ηθελα και σε πολυ χαμηλη τιμη.

OpenWrt

Το OpenWrt ειναι ενα λειτουργικο συστημα Linux για embedded συστηματα. Δηλαδη ενα... Linux για ρουτερ. Με βαση αυτο, συνεπαγεται οτι συμπεριλαμβανει ενα kernel, ενα package manager και πολλα features που μπορουν να χρησιμοποιηθουν... Μερικα απο αυτα ssh server, bittorent client, VPN, Proxy server...  Μπορει να χρησιμοποιηθει για traffic-shaping ή QoS, για captive portal, για firewall, για portforwarding, για packet injection, monitoring, DNS και πολλα αλλα.

Εκδοσεις

Η τρεχουσα εκδοση ειναι η Attitude Adjustment 12.09. Πριν απο αυτη θα βρειτε την backfire ενω μπροστα μας ετοιμαζεται η Barrier Breaker.

Για το ποια θα εγκαταστησουμε θα το βρουμε στο wiki στη σελιδα του μοντελου που θα χρησιμοποιήσουμε. Οπου trunk σημαινει οτι το branch ακομα δεν εχει ονομα, και πιθανοτατα ακομα δουλευεται που σημαινει οτι αν δεν βρειτε καποιο πακετο ισως να υπαρξει αργοτερα.


Εγκατασταση

Τα βηματα περιγραφονται στο link του router. Καποιες σημειωσεις λοιπον:

  • το πακετο εχει περιγραφη *-factory.bin (πχ openwrt-ar71xx-generic-tl-wr741nd-v4-squashfs-factory.bin).
  • Κατεβαστε και το firmware του κατασκευαστη μηπως κατι δεν παει καλα.
  • Στο  tl-wr741nd λογω καποια πιθανης περιπτωσης που ισχυει σε καινουργια μοντελα, μπορει να χρειαστει να αλαξετε το *-factory.bin με το ονομα του αρχειου του κατασκευαστη. Προσωπικα εμενα δεν μου χρειαστηκε.
  • Σιγουρα θα χρειαστειτε Putty ειδικα αν ειστε σε windows και ακομα περισσοτερο αν κατεβασετε καποια εκδοση χωρις web interface εγκατεστημενο.  Κατι που μπορειτε να το βαλετε αργοτερα.
  • Αν θελουμε να επεκτεινουμε το χωρο αποθηκευσης υπαρχει ενα καλο αρθρο απο το φιλο Γιαννου στο Deltahacker. Google it...
Command Line Interface

Αφου ακολουθησετε τα βηματα  του οδηγου και εισαγετε των κωδικο του root
θα δειτε την παρακατω εικονα να εμφανιζετε στην κονσολα

BusyBox v1.19.4 (2013-09-25 00:25:36 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 BARRIER BREAKER (Bleeding Edge, r38167)
 -----------------------------------------------------
  * 1/2 oz Galliano         Pour all ingredients into
  * 4 oz cold Coffee        an irish coffee mug filled
  * 1 1/2 oz Dark Rum       with crushed ice. Stir.
  * 2 tsp. Creme de Cacao
 -----------------------------------------------------
Καποια πραγματα που θα δειτε εδω ειναι την εκδοση του build-in bash που ονομαζετε ash και την εκδοση του BusyBox, ενω απο τα βασικα components (εκτος απο τον πυρηνα, το αλλο ειναι το uClibc) του OpenWrt το οποιο περιεχει καποια χρησιμα tools. Απο δω μπορουμε να χρησιμοποιησουμε τον package manager δινοντας opkg εγκαταστησουμε, διαγραψουμε ή να κανουμε update το συστημα.'Η να κανουμε σχεδον ολο το σεταρισμα με το uci.

Ας πουμε οτι θελουμε να εγκαταστησουμε το luci

opkg update
opkg list luci-* <Θα μας δωσει ολα τα διαθεσιμα πακετα>
opkg install luci-ssl <για υποστηριξη ssl>

Επισης θα προσεξατε τη συνταγη για το κοκτειλ. Ισως να προσεξατε οτι και τα ονοματα των εκδοσεων ειναι ονοματα απο κοκτειλ!!!!!

Χρηση σαν repeater

Για να το χρησιμοποιησουμε σαν repeater στο ηδη υπαρχον δικτυο, απλα συνδεουμε με ενα καλωδιο δικτυου ενα lan port στο wan port του openwrt router. Με την εγκατασταση ερχονται καποιες ηδη αρχικες ρυθμισεις οποτε αυτο θα παιξει αυτοματα λογικα.

Αν θελουμε να συνδεθουν wirelessly ακολουθουμε τα βηματα:
  1. Συνδεουμε lan port με lan port. 
  2. βρισκουμε την ip που μας εδωσε ο dhcp
  3. και αν εχουμε εγκατεστημενο web interface, παμε και δινουμε εκει την ip.
  4. Ενεργοποιουμαι το wifi
  5. Network>Wifi>Scan και βρισκουμε το δικτυο που θελουμε να συνδεθουμε
    1. essid: <wifi name>
    2. mode: client or client wps
    3. επιλεγουμε να δημιουργησει ενα αλλο δικτυο
    4. επιλεγουμε επισης advanced settings και στο ht mode διαλεγουμε 40MHz second channel above
  6. Παμε στο wifi που ενεργοποιησαμε πριν και δινουμε τα ιδια στοιχεια εκτος απο το mode. Επιλεγουμε AccessPoint για αυτο.Αν θελετε βαζετε διαφορετικα security settings
  7. Ελεγχουμε οτι τα δυο δικτυα εμφανιζονται κατω απο το Associated Stations
Δημιουργια Subnet

Για το WAN στο Hostname to send when requesting DHCP δινουμε hostname. Και κραταμε υποψιν οτι αν το modem εχει 192.168.1.1 πρεπει να αλλαξουμε το subnet στο router αλλιως δεν θα μπορεσει να δουλεψει το ιντερνετ.

Βασικα αφου ειναι ολα τα παραπανω οκ το μονο που θα κανουμε ειναι να παμε Network>Interface>lan>edit>General Setup και στο protocol δινουμε static address και IP4 address οριζουμε ενα αλλο δικτυο.

Και η αρχη εγινε...

Thursday, February 14, 2013

python script for send mails

ok. Πειραματίζομαι με την python. Δεν ξερω αν εχω αναφερει ποτε ποσο συμπαθω τη συγκεκριμένη γλωσσα. Ενας λογος είναι οτι μερικα πραγματα τα κάνει πολυ ευκολα και γρήγορα. Κατι το οποιο ειναι ζητουμενο πιστευω! Και το να γραψεις ενα προγραμματακι να στελνει mail με python ηταν πραγματικα παιχνιδακι. Δε θελετε να εχετε κατι ετοιμο στον υπολογιστη σας, ωστε οταν θα θελησετε να στειλετε ενα mail στη δουλεια σας, αντι να ανοιγετε browser, να πηγαινετε στη σελιδα του παροχου, να περιμενετε να φορτωσει η σελιδα και γενικα ολα οσα πρεπει να κανεις για να στειλεις ενα απλο email, απλα απο την κονσολα να τρεχετε το προγραμματακι, να γραφετε παραληπτη και το μηνυμα στο πι και φι.

Η version που χρησιμοποιησα ειναι 2.7.3. Το μοναδικο module που ουσιαστικα χρειαζεσαι για να υλοποιησεις την πιο απλη εκδοση ειναι το smtplib. Αυτο!! Τιποτα αλλο. Η υλοποιηση λοιπον περα απο το module απιτει να φτιαξουμε ενα smtp object, να κανουμε login στο server, και να στειλουμε το mail. Πραγματικα ποιο πολλα ειναι οσα γραφω παρα ολο το script.

Στην πραξη, οι παρακατω γραμμες κανουν ολη τη δουλεια που περιεγραψα:

 import smtplib

server = smtplib.SMTP_SSL(host,port,timeout=5)

server.login(usernm,passwd)

server.sendmail(fromaddr,toaddr,msg)
Οπως θα παρατηρειται το αντικειμενο που δημιουργησα ειναι SMTP_SSL. Και αυτο γιατι για Gmail λογαριασμους απαιτειται κρυπτογραφιση ssl. Ευτυχως το smtp module εχει αυτη και πολλες αλλες δυνατοτητες.

Τωρα το αντικειμενο smtp και smtp_ssl περνει καποιες παραμετρους. Η host ειναι η διευθυνση του smtp server. Η port η πορτα του server. Και τα δυο μπορουν να παραλυφθουν και τοτε θα χρησιμοποιήσουν το localhost και τη default πορτα για smtp, δηλ 25. Εγω απλα ελεγξα και το timeout, επιπλεον. Και για τα δυο αντικειμενα υπαρχουν επιπλεον επιλογες τις οποιες μπορειτε να βρειτε το doc της python.

Για να κανω πιο ενδιαφερον, πιο λειτουργικο και για να δειξω κατι ακομα απο το smtplib συνδυασα το παραπανω με μερικα ακομα πραγματα. Ηθελα λοιπον να ξεκιναω το προγραμμα με παραμετρο το mail account μου. Οταν ξεκιναγε λοιπον με ρωταγε που θα στειλω το μηνυμα και ποιο ηταν αυτο. Ολα περναγανε σε μεταβλητες που καταχωρουνταν στις παραπανω μεθοδους. Τελος ενεργοποίησα το debug mode για να βλεπω ολα τα μηνυματα της επικοινωνιας του server. Χωρις αλλα λογια:
import smtplib
import sys, getpass

usernm=sys.argv[1]
passwd=getpass.getpass("Give a passwd: ")

host='smtp.gmail.com'
port=465
def prompt(prompt):
    return raw_input(prompt).strip()

fromaddr=usernm
toaddr=prompt("To: ")
print "enter msg, end with ^D:"
msg=("from: %s\r\nTo: %s\r\n\r\n" % (fromaddr, ", ".join(toaddr)))

while 1:
    try:
        line=raw_input()
    except EOFError:
        break
    if not line:
        break
    msg=msg+line
print "Message length is "+repr(len(msg))

try:
    """create an SMTP object"""
    server = smtplib.SMTP_SSL(host,port,timeout=5)
    server.set_debuglevel(1)
    """log in to the server"""
    server.login(usernm,passwd)

except smtplib.SMTPException:
    print "General Error!!!"


""" send the mail"""
server.sendmail(fromaddr,toaddr,msg)
server.close()

Λιγα λογια ακομα. Το passwd αποθηκευει το password του λογαριασμου για το login. Ακομα δεν εχω πιστει αν αυτος ειναι ο πιο ασφαλες τρόπος αλλα anyway. Χρεισιμοποιουμε τις host, port, fromaddr, toaddr & msg για αποθηκευσουμε οτι πληροφοριες χρειαζομαστε. Και εχουμε μια loop για να διαβαζει γραμμη γραμμη το μηνυμα. Το οποιο τερματιζει οταν σε καινουργια γραμμη αντι για χαρακτηρας πληκτρολογηται ^D. Αυτο για Linux. Για Windows θελει ^Z.

Απο δω και περα ισως θελετε περισσοτερα, οπως το να βαλετε subject, ή να συμπεριλαβετε συννυμενα. Οκ γινεται αλλα πρεπει να παιξετε με ενα αλλο module, το email. Γενικα εμενα ολα αυτα μου φερανε πολλες εφαρμογες στο μυαλο για τη συνεχεια, αλλα το βασικα ειναι οτι τωρα εχω το δικο μου, γρηγορο και απλο τροπο να στελνω mail.

Thursday, October 25, 2012

Incremental backup

Σιγουρα δεν είναι στα high priority activities. Δεν ξέρω και γω ποσοι μου ανεφεραν corrupted filesystems, broken blocks και άλλα πολλα ωραία και όμορφα που συμβαινουν και σπαταλας το χρόνο σου για να φτιαξεις. Σε μια προσφατη κουβεντούλα, συζητάγαμε σχετικά, γελαγαμε και σχολιαζαμε καθε τρελή υλοποίηση για ασφαλια και backup.

Θα σας πω τη γνωμη μου εν συντομία. Το backup πρεπει να είναι σαν software απλο και ελκιστικό. Μπορεί να γίνει επώδυνη διαδικασία αν ζητάς ταυτόχρονα συμπίεση, κρυπτογράφιση, logs κα.

Για το Linux υπάρχουν απειρα εργαλεία για όλες αυτές τις δουλειές. Το γνωστότερο όλων ίσως το rsync. Για να μπώ κατευθείαν στο θέμα, θέλω να παρουσιάσω ένα εργαλείο που εκμεταλευεται το rsync γραμμένο σε perl και μας παρέχει ακριβως αυτά που ανέφερα λιγο πιο πάνω, απλα και όμορφα...

rsnapshot

Το project ειναι φυσικα open source και μπορειτε να το βρείτε και στο sourceForge.net. Μπορείτε να γραφτείτε στη maillist, να συμμετεχετε και ολα τα καλα ενος open source project.

Η εγκατάσταση απλη. Στην ιστοσελιδα του project θα βρείτε πακέτο σχεδόν για καθε διανομη, μεχρι και για bsd. Επίσης απλο το σετάρισμα μεσα απο το αρχειο διαμόρφωσης που πιθανότατα θα βρείτε στο /etc/rsnapshot.conf.
Εκει θα δωσετε που θα αποθηκευτει το backup(επιλογη snapshot_root),
να ενεργοποιήσεις remote ssh backups, το schedule, να ορισεις τι μυνηματα θα εμφανιζονται και τι θα καταγραφετε στα logs(επιλογη μεσα στο GLOBAL OPTIONS), ποια αρχεια θα συμπεριλαβεις και ποια οχι μεσα στο backup.
Το  rsnapshot.conf σου δίνει και άλλες ενδιαφέρον επιλογες να ενεργοποιήσεις, οπως και εντολες. Δυο απο αυτές ας πουμε είναι η rsnapshot_du και rsnapshot_diff. Η πρωτη σου επιστρεφει το χωρο του backup και η δευτερη τις αλλαγές. Γαμάτο??? Ακομα πιο γαμάτο??? Σου δινει επιλογη να τρεξει script πριν και μετα το προγραμμα.

Τέλος το τρέχεις με μια επισης απλη εντολη:
rsnapdhot daily ή rsnapshot weekly

Λόγω του οτι το προγραμμα ειναι incremental τα backups δεν θα σας πιανουν μεγαλυτερο χωρο καθε φορα, απλα μετα τη πρωτη εκτελεση θα ανανεωνουν τα αρχεια που εχουν αλλαξει. Ετσι σωνεται χωρο και χρονο. Η δυναμη του ειναι η δημιουργια hard links αναμεσα στα backups. Θα προσθετα επισης την δυνατορητα για αντιγραφα ασφαλειας απομακρυσμενα μεσω ssh, και τη συνεργασια με το cron.

Δοκιμαστε το και οπως παντα περιμενω απορίες ή οτι άλλο...