Scripts

From stacky wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

Scripts for managing notes

update.sh

#!/bin/bash
#
## tar the files into HalgSource.tgz
tar cfz HalgSource.tgz Halg.tex HalgPreamble.tex HalgBib.bib HalgLec??.tex HalgBibliography.tex

## move HalgSource.tgz to the math servers and execute the mathupdate script
scp HalgSource.tgz $math:/home/u2/grad/anton/public_html/written/Halg
ssh $math bash /home/u2/grad/anton/public_html/written/Halg/mathupdate.sh

mathupdate.sh

## untar the source
cd /home/u2/grad/anton/public_html/written/Halg/
tar xfz HalgSource.tgz -C ./

## make sure all files are readable (maybe not necessary)
chmod 666 HalgLec??.tex

## uncomment any \input commands that I had commented and uncomment table of contents
## (before I implemented this, people would often tell me that only the most recent lecture is posted)
cp Halg.tex halg.tex
sed -e 's/\% \\input/\\input/g' -e 's/\% \\tableofcontents/\\tableofcontents/g' halg.tex > Halg.tex

## compile and convert to pdf
latex Halg.tex
latex Halg.tex
latex Halg.tex
dvips Halg.dvi -o Halg.ps
ps2pdf Halg.ps Halg.pdf

## get rid of garbage
rm `ls | grep -ve .pdf -ve .sh -ve .tgz -ve .html -ve .sty -ve .txt`

pinq

It's ping, but with trimmed output.

#!/bin/bash

ping ${*?"
Usage: `basename $0` [OPTIONS] HOST"} | (trap '' SIGINT; sed -e 's/ttl=[0-9]* time=//' -e 's/.*: icmp_seq=//')

# trap '' SIGINT is there so that if you hit CTRL-C, you still get the summary statistics from ping