Scripts
Here are some scripts I've written for various purposes.
AirBearsLogin.py
While at Berkeley, I would use this following script to log in to AirBears (the wireless network).
#!/usr/bin/python
#
# Replace USERNAME with your username and PASSWORD with your password.
# You may need to install the python mechanize module. The command
# sudo apt-get install python-mechanize
# might do the trick
try:
from mechanize import Browser
import re
br = Browser()
br.open("https://auth.berkeley.edu/cas/login?service=https%3a%2f%2fwlan.berkeley.edu%2fcgi-bin%2flogin%2fcalnet.cgi%3fsubmit%3dCalNet")
br.select_form(nr=0)
br["username"]="USERNAME"
br["password"]="PASSWORD"
page = br.submit().read()
errors = re.findall('<h2 id="status" class="error">[^<]*</h2>',page)
if len(errors)==0:
print "Logged into AirBears (probably)."
else:
for error in errors: print error[30:-5]
except IOError, e: print "Couldn't connect to wireless login page:\n", e
except KeyboardInterrupt: print "Ouch! Ok, quitting."
unpnup
A modified version of Harald Hackenberg's unpnup bash script for converting two-page-per-page pdfs into one-page-per-page pdfs.
I've stopped using this script in favor of the awesome program Briss.
#!/bin/bash
#script: unpnup
# This script reformats pdf files where two portait pages
# are joined on one landscape page (like pnup does). After
# completion each page is on one single fullframe page
# Copyright (c) 2007 F5 GmbH
# Author: Harald Hackenberg <hackenberggmx.at>
#
#programs required:
# pdftk, pdftops, poster, epstopdf
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version. See http://www.gnu.org/copyleft/gpl.html for
# the full text of the license.
#
# modified by Anton Geraschenko, 03-2009
if [ $# != 1 ] || [[ "$1" != *".pdf" ]]; then
echo "Usage: `basename $0` FILE.pdf"
else
tmpdir=`mktemp -d`
echo "bursting $1"
pdftk "$1" burst output $tmpdir/pg_%04d.pdf
cd $tmpdir
echo -n "converting "
for file in pg*.pdf; do
## if this loop runs into troublesome pages, try pdftops
## then ps2pdf then pdftops rather than just pdftops
echo -n "${file%.pdf} "
pdftops -eps $file
poster -pA4 -mA5 -c0% ${file%pdf}eps > ${file%pdf}tps
epstopdf --outfile=x$file ${file%pdf}tps | grep -i error
done
echo ""
cd - > /dev/null
pdftk $tmpdir/xpg*.pdf cat output "${1%.pdf}_unpnuped.pdf"
rm -r $tmpdir
fi
djvu2pdf
A bash script I use for converting djvu to pdf so that I can read the document on a kindle or iLiad.
#!/bin/bash
# djvu2pdf script by Anton Geraschenko 2009; use at your own risk.
# requires djvulibre-bin and libtiff-tools
#
# "bug": Blank pages get removed. You can tell this happened
# if you see the message "ddjvu: Cannot render image"
# exit codes
X_DDJVU_OR_TIFF2PDF=1
X_BAD_OPTION=2
X_USER_INTERRUPT=13
USAGE ()
{
echo "Usage: `basename $0` [OPTIONS] FILE.djvu
Convert a djvu file into a pdf.
-b Keep blank pages. Not yet implemented.
-o OUTFILE Set the output file to OUTFILE.
-q Quiet mode."
}
clean_up ()
{
echo
[ $QUIET ] || echo "cleaning up"
if [ -e $tmpdir ]; then
rm $tmpdir/pg[0-9]*.*
rmdir $tmpdir
fi
}
while getopts "o:qb" OPTION ;
do
case "$OPTION" in
b) echo "Sorry, the -b option is not yet implemented. Blank pages will be stripped out." ;;
o) OUTFILE="$OPTARG" ;;
q) QUIET=1
set +v ;;
*) USAGE 1>&2
exit $X_BAD_OPTION ;;
esac
done
shift $(($OPTIND - 1))
if [ $# != 1 ] || [[ "$1" != *.djvu ]]; then
USAGE 1>&2
exit 1
else
trap 'clean_up; exit $X_USER_INTERRUPT' SIGINT
tmpdir=`mktemp -d`
pages=`djvudump "$1" | head -n2 | tail -n1 | sed -e 's/^.*files \([0-9]*\) pages)/\1/'`
[ $QUIET ] || echo -n "converting page"
for i in `seq -w $pages`; do
[ $QUIET ] || echo -n " $i"
ddjvu -format=tiff -page=$i "$1" $tmpdir/pg$i.tiff &&
tiff2pdf -j -o $tmpdir/pg$i.pdf $tmpdir/pg$i.tiff || [ $?=10 ] ||
( echo encountered trouble; exit $X_DDJVU_OR_TIFF2PDF; )
# ddjvu exits with exit code 10 when the page is blank
# if any other trouble comes up, exit
done
[ $QUIET ] || (echo ;echo -n "creating ${OUTFILE-${1%djvu}pdf}")
pdftk $tmpdir/pg[0-9]*.pdf cat output "${OUTFILE-${1%djvu}pdf}"
clean_up
fi