Index: web/TODO
===================================================================
--- web/TODO	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
+++ web/TODO	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
@@ -0,0 +1,15 @@
+1) make this look pretty (CSS, better layout, etc.)
+2) add AJAX to automatically refresh the website when the queue
+   changes
+3) add a volume slider (use remctl, see http://sipb.mit.edu/sipbmp3
+4) package the script and the lighttpd config file, and have it
+   automatically run
+5) make the queue interactive:  ability to pause, reorder songs,
+   remove songs, etc.
+6) ability to upload/queue songs?  maybe only with certs -- need to
+   figure out the best way to have an ACL -- probably bad to let
+   anybody upload songs.  The same probably goes for deleting and
+   reordering songs too, though.
+
+See http://sipbmp3.mit.edu/sipbmp3 for inspiration in general
+
Index: b/gutenbach-web.pl
===================================================================
--- web/gutenbach-web.pl	(revision 30beeab008c68e1e024ed39a16b17a5d50ed07a3)
+++ 	(revision )
@@ -1,57 +1,0 @@
-use Net::CUPS;
-use Net::CUPS::Destination;
-use Image::ExifTool qw(ImageInfo);
-use CGI ':standard';
-
-use strict;
-use warnings;
-
-my $cups = Net::CUPS->new();
-
-my $printer = $cups->getDestination("buildsmp3");
-#print header();
-print start_html();
-my @jobs = $printer->getJobs( 0, 0 );
-my $job_ref;
-my $jobid;
-my $attr;
-print  <<EOF;
-<TABLE SUMMARY="Job List"> 
-<THEAD> 
-<TR><TH> USER</TH><TH>TITLE</TH><TH>ARTIST</TH><TH>ALBUM</TH></TR> 
-</THEAD>
-<TBODY>  
-EOF
-foreach $jobid(@jobs) 
-{       
-	$job_ref = $printer->getJob($jobid);
-	#print "$job_ref->{ 'id' }\t\t$job_ref->{ 'user'}\t\t$job_ref->{ 'title' }\n";
-	my $filepath = "/var/spool/cups/d00$job_ref->{ 'id' }-001";
-	my $fileinfo = ImageInfo($filepath);
-	my $magic = $fileinfo->{FileType};
-	#print"$job_ref->{ 'user' } is playing:\n";
-	print "<TR VALIGN=\"TOP\">";
-	print "<TD>$job_ref->{ 'user'}</TD>\n";
-	if($magic)
-	{
-	   # print "MAGIC";
-	    if (exists $fileinfo->{'Title'}) {
-		printf("<TD>%s</TD>\n", $fileinfo->{'Title'});
-	    }
-	    foreach my $key (qw/Artist Album AlbumArtist/) {
-		if (exists $fileinfo->{$key}) {
-		    printf("<TD>%s</TD>\n", $fileinfo->{$key}) if exists $fileinfo->{$key};
-		    
-		}
-	    }
-	}
-	else
-	{
-	    print "<TD>$job_ref->{ 'title' }</TD><TD></TD><TD></TD> \n";
-	}
-	print "</TR>";
-
-}
-print "</TBODY>\n</TABLE>";
-	
-print end_html();	    
Index: web/lighttpd.conf
===================================================================
--- web/lighttpd.conf	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
+++ web/lighttpd.conf	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
@@ -0,0 +1,165 @@
+# Debian lighttpd configuration file
+#
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# mod_access, mod_accesslog and mod_alias are loaded by default
+# all other module should only be loaded if neccesary
+# - saves some time
+# - saves memory
+
+server.modules              = (
+            "mod_access",
+            "mod_alias",
+            "mod_accesslog",
+            "mod_compress",
+	    "mod_cgi",
+#           "mod_rewrite",
+#           "mod_redirect",
+#           "mod_evhost",
+#           "mod_usertrack",
+#           "mod_rrdtool",
+#           "mod_webdav",
+#           "mod_expire",
+#           "mod_flv_streaming",
+#           "mod_evasive"
+)
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root       = "/home/jhamrick/project/gutenbach/web"
+
+## where to upload files to, purged daily.
+#server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
+
+## where to send error-messages to
+server.errorlog            = "/var/log/lighttpd/error.log"
+
+## files to check for if .../ is requested
+index-file.names           = ( "index.php", "index.html",
+                               "index.htm", "default.htm",
+                               "index.lighttpd.html" )
+
+
+## Use the "Content-Type" extended attribute to obtain mime type if possible
+# mimetype.use-xattr = "enable"
+
+#### accesslog module
+accesslog.filename         = "/var/log/lighttpd/access.log"
+
+## deny access the file-extensions
+#
+# ~    is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+#      of the document-root
+url.access-deny            = ( "~", ".inc" )
+
+##
+# which extensions should not be handle via static-file transfer
+#
+# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
+static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
+
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## Use ipv6 only if available. (disabled for while, check #560837)
+#include_shell "/usr/share/lighttpd/use-ipv6.pl"
+
+## bind to port (default: 80)
+# server.port               = 81
+
+## bind to localhost only (default: all interfaces)
+## server.bind                = "localhost"
+
+## error-handler for status 404
+#server.error-handler-404  = "/error-handler.html"
+#server.error-handler-404  = "/error-handler.php"
+
+## to help the rc.scripts
+server.pid-file            = "/var/run/lighttpd.pid"
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/var/www/"
+
+## virtual directory listings
+dir-listing.encoding        = "utf-8"
+server.dir-listing          = "enable"
+
+## send unhandled HTTP-header headers to error-log
+#debug.dump-unknown-headers  = "enable"
+
+### only root can use these options
+#
+# chroot() to directory (default: no chroot() )
+#server.chroot            = "/"
+
+## change uid to <uid> (default: don't care)
+server.username            = "www-data"
+
+## change uid to <uid> (default: don't care)
+server.groupname           = "www-data"
+
+#### compress module
+compress.cache-dir          = "/var/cache/lighttpd/compress/"
+compress.filetype           = ("text/plain", "text/html", "application/x-javascript", "text/css")
+
+
+#### url handling modules (rewrite, redirect, access)
+# url.rewrite                 = ( "^/$"             => "/server-status" )
+# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
+
+#
+# define a pattern for the host url finding
+# %% => % sign
+# %0 => domain name + tld
+# %1 => tld
+# %2 => domain name without tld
+# %3 => subdomain 1 name
+# %4 => subdomain 2 name
+#
+# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
+
+#### expire module
+# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#### rrdtool
+# rrdtool.binary = "/usr/bin/rrdtool"
+# rrdtool.db-name = "/var/www/lighttpd.rrd"
+
+#### variable usage:
+## variable name without "." is auto prefixed by "var." and becomes "var.bar"
+#bar = 1
+#var.mystring = "foo"
+
+## integer add
+#bar += 1
+## string concat, with integer cast as string, result: "www.foo1.com"
+#server.name = "www." + mystring + var.bar + ".com"
+## array merge
+#index-file.names = (foo + ".php") + index-file.names
+#index-file.names += (foo + ".php")
+
+
+#### external configuration files
+## mimetype mapping
+include_shell "/usr/share/lighttpd/create-mime.assign.pl"
+
+## load enabled configuration files,
+## read /etc/lighttpd/conf-available/README first
+include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
+
+#### handle Debian Policy Manual, Section 11.5. urls
+## by default allow them only from localhost
+## (This must come last due to #445459)
+## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
+$HTTP["remoteip"] =~ "127.0.0.1" {
+   server.document-root = "/home/jhamrick/project/gutenbach/web/www"
+   $HTTP["url"] =~ "/cgi-bin/" {
+       cgi.assign = ( ".pl" => "/usr/bin/perl" )
+   }
+}
+
Index: web/www/cgi-bin/gutenbach-web.pl
===================================================================
--- web/www/cgi-bin/gutenbach-web.pl	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
+++ web/www/cgi-bin/gutenbach-web.pl	(revision 9c72c3b2f492e608e2c8c51ffb32fdec8e02092b)
@@ -0,0 +1,59 @@
+#!/bin/perl
+
+use Net::CUPS;
+use Net::CUPS::Destination;
+use Image::ExifTool qw(ImageInfo);
+use CGI ':standard';
+
+use strict;
+use warnings;
+
+my $cups = Net::CUPS->new();
+$cups->setServer("lbsg.mit.edu");
+my $printer = $cups->getDestination("pikamp3");
+#print header();
+print start_html();
+my @jobs = $printer->getJobs( 0, 0 );
+my $job_ref;
+my $jobid;
+my $attr;
+print  <<EOF;
+<TABLE SUMMARY="Job List" cellpadding="5px"> 
+<THEAD> 
+<TR><TH> USER</TH><TH>TITLE</TH><TH>ARTIST</TH><TH>ALBUM</TH></TR> 
+</THEAD>
+<TBODY>  
+EOF
+foreach $jobid(@jobs) 
+{       
+	$job_ref = $printer->getJob($jobid);
+	#print "$job_ref->{ 'id' }\t\t$job_ref->{ 'user'}\t\t$job_ref->{ 'title' }\n";
+	my $filepath = "/var/spool/cups/d00$job_ref->{ 'id' }-001";
+	my $fileinfo = ImageInfo($filepath);
+	my $magic = $fileinfo->{FileType};
+	#print"$job_ref->{ 'user' } is playing:\n";
+	print "<TR VALIGN=\"TOP\">";
+	print "<TD>$job_ref->{ 'user'}</TD>\n";
+	if($magic)
+	{
+	   # print "MAGIC";
+	    if (exists $fileinfo->{'Title'}) {
+		printf("<TD>%s</TD>\n", $fileinfo->{'Title'});
+	    }
+	    foreach my $key (qw/Artist Album AlbumArtist/) {
+		if (exists $fileinfo->{$key}) {
+		    printf("<TD>%s</TD>\n", $fileinfo->{$key}) if exists $fileinfo->{$key};
+		    
+		}
+	    }
+	}
+	else
+	{
+	    print "<TD>$job_ref->{ 'title' }</TD><TD></TD><TD></TD> \n";
+	}
+	print "</TR>";
+
+}
+print "</TBODY>\n</TABLE>";
+	
+print end_html();	    
