Link to Original Source
The most powerful idea IMHO is the use of function scopes as the main data structure instead of dictionaries. Another idea is avoiding or skipping completely some language features that behave in unusual ways and using simpler more fundamental constructs instead. I think the new-operator is the classic example of these.
If you solve the dual NAT problem separately then Duplicity is one good complete solution. It adds backup schedules, strong client-side encryption and is still able to do incremental backups. Setting it up requires one line of cron on the client side and some kind of remote account for storing the backup archives (SSH, SFTP, FTP). Choosing the correct command line options and handling the passwords requires some care though.
Duplicity uses the same base tech as rsync (librsync) and it's written in Python. It tries hard not to reinvent the wheel using tar for archive files and gpg for encrypting them. This means that extracting files from backups can even be done with standard tools if things get bad. It's available out of the box at least on Ubuntu and Debian. Also installing on CentOS went pretty smoothly with RPM available from project site.
If Windows and Windows programs insist on controlling the boot sector (and stuff that comes after it), you can still boot Linux.
At least starting with Vista, Windows has completely extensible boot loader of its own (the configuration data is called BCD).
The idea is that the Grub (or whatever) is installed on the same Linux *partition* where all the system files are installed (not on the MBR).
(At least Ubuntu installer has the option to install Grub on a partition instead of MBR out of the box.)
Windows boot loader is then used to load Grub from the beginning of that partition. No matter what
windows updates, programs etc. do this does not break.
Too bad that the default Linux installers don't support this option, since it
has been very hassle free for me at least. The initial setup could just as well be automatic.
Instructions for doing this manually here: