python script template

#!/usr/bin/env python
"""
Some documentation:
Usage:
-h help
-r results file
"""
# Import libraries
import sys
import getopt
 
def process(arg):
  if arg.endswith(".results"):
   print_results(arg)
  else:
   print arg, "not recognized :'("
 
class Usage(Exception):
  def __init__(self, msg):
   self.msg = msg
 
def main(argv=None):
  if argv is None:
   argv=sys.argv
   try:
   # parse command line options
   try:
   opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
   except getopt.error, msg:
   raise Usage(msg)
   # process options
   for o, a in opts:
   if o in ("-h", "--help"):
   print __doc__
   return 0
   # process arguments
   for arg in args:
   process(arg)
   except Usage, err:
   print >> sys.stderr, err.msg
   print >> sys.stderr, "for help use -help"
   return 2
 
if __name__ == "__main__":
  sys.exit(main())

creating a bootable usb drive from a .img file on OSX

From https://help.ubuntu.com/community/Installation/FromImgFiles:

  • Download the desired .img file
  • Open a Terminal (under Utilities)
  • Run diskutil list to get the current list of devices
  • Insert your flash media
  • Run diskutil list again and determine the device node assigned to your flash media (e.g. /dev/disk2)
  • Run diskutil unmountDisk /dev/diskN (replace N with the disk number from the last command; in the previous example, N would be 2)
  • Execute sudo dd if=/path/to/downloaded.img of=/dev/diskN bs=1m (replace /path/to/downloaded.img with the path where the image file is located; for example, ./ubuntu.img). If you see the error dd: Invalid number `1m', you are using GNU dd. Use the same command but replace bs=1m with bs=1M.
  • Run diskutil eject /dev/diskN and remove your flash media when the command completes

copying files with rsync

rsync is a great way to copy files between computers as it can continue after partial copies and update directories when only a few files have changed, it also supports secure file copies over ssh as shown below:

copy files locally:

rsync -rtvzP --delete --exclude=.Trash /Users/evan/ /Volumes/backup/evan/

copy local files to a remote computer excluding all the mac .DS_Store folders in the path:

rsync -ravzP --exclude=**/.DS_Store -e ssh "/Users/evan/my files/" evan@someserver.codepit.ca:/home/evan/files/

copy remote files onto a local computer:

rsync -ravzP -e ssh 10.10.238.123:"/home/evan/my files/" /Users/evan/files/

NOTE the use of " when there is are spaces in the file paths

Useful switches:

-n == dry run, very useful with --delete :o
--delete == delete files when they are missing from the source computer and present on the target

installing trac

Installing the trac (http://trac.edgewall.org/) project to manage bugs and possibly even features/specifications for your projects. First install the trac dependencies

apt-get install python python-central python-setuptools 
python-pysqlite2 python-subversion libjs-jquery python-genshi 
python-tz python-pygments

use easy_install to install the latest version of trac (we had issues with the apt-get version and attachments)

easy_install -n http://svn.edgewall.org/repos/trac/tags/trac-0.11.4

create the directories that will contain our trac project files

mkdir /opt/trac 
mkdir -p /opt/trac/.trac-base/egg-cache 
cd /opt/trac

create the trac project

trac-admin trac-example initenv

create a password file and setup initial users

htpasswd /opt/htpasswd

make sure apache owns the trac directories

chown -R www-data:www-data /opt/trac

configure apache to handle trac as the root site

vim /opt/apache2/sites-enabled/trac

<VirtualHost *:80>
        Alias /trac/ /usr/share/trac/htdocs 
 
        ErrorLog /var/log/apache2/error.trac.log 
        CustomLog /var/log/apache2/access.trac.log combined 
 
         <Location "/">
                SetHandler mod_python 
                PythonInterpreter main_interpreter 
                PythonHandler trac.web.modpython_frontend 
                PythonOption TracEnvParentDir /opt/trac/ 
                PythonOption TracUriRoot / 
                PythonOption PYTHON_EGG_CACHE /opt/trac/.trac-base/egg-cache 
         </Location>

        # use the following for one authorization for all projects 
        # (names containing "-" are not detected): 
         <Location "/">
            AuthType Basic 
            AuthName "trac" 
            AuthUserFile /opt/htpasswd 
            Require valid-user 

        </Location>

</VirtualHost>

restart apache

/etc/init.d/apache2 restart

check the system with your browser by navigating to http://localhost/

 

keyboard and mouse sharing with synergy

So I don't have a dedicated keyboard for my mythtv and I hate to connect one for those little maintenance operations, one solution is to use http://synergy2.sourceforge.net/. Heres how I set it up on my dell mini9 and mythtv server;

install synergy on both systems:

sudo apt-get install synergy

edit the host file and ensure both computers can find each other: 

sudo vim /etc/hosts 

on the laptop something like this:

xxx.xxx.xxx.xxx myth

and on the mythtv server something like this: 

xxx.xxx.xxx.xxx mini9 

create a synergy configuration file on the laptop: 

sudo vim /etc/synergy.config 

section: screens
 mini9:
 myth:
end
section: links
 mini9:
  right = myth
 myth:
  left = mini9
end

start the server on the laptop (-f keeps the server in the foreground for logging/testing purposes):

synergys -f

now start the client end on the mythtv system (also in foreground mode):

synergyc -f mini9

make sure the 2 systems can communicate and that the mouse pointer can move from one system to the other. Set the synergy client to start when the mythtv user logs in: 

go to system -> preferences -> sessions in X and add a new command to run on login:

synergyc mini9

restart the mythtv server and make sure everything starts up correctly, now when you need to access your mythtv system using a mouse and keyboard you can do so from the comfort of your couch my starting the "synergys" server on your laptop.