#!/usr/bin/perl # use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); BEGIN {$ENV{HOME} ||= (getpwuid($<))[7]} # in case $HOME isn't set BEGIN {require "$ENV{HOME}/.cgiEnvVars.pm"} use CGI; use Data::Dumper; my $data = parse(<<'EOF'); $153 1366x768 16" http://www.newegg.com/Product/Product.aspx?Item=N82E16824009132 $159 1024x768 15" http://www.ewiz.com/detail.php?p=ACER-1516B&c=pw $159 1024x768 15" http://www.newegg.com/Product/Product.aspx?Item=N82E16824009093 $163 1440x900 17" http://www.newegg.com/Product/Product.aspx?Item=N82E16824254018 $168 1280x1024 17" http://www.newegg.com/Product/Product.aspx?Item=N82E16824009117 $169 1440x900 17" http://www.ewiz.com/detail.php?p=ACE-X17WB&c=pw $2000 1920x1080 37" http://www.pcmag.com/article2/0,1759,1885043,00.asp EOF print "Content-Type: text/html; charset=utf-8\n\n"; #cgidmp($data); exit; print <<'EOF';

Building a monitor wall from heterogeneous LCDs

Synergy: making vast amounts of screen real-estate actually usable, today. (it may be the best solution until we get better window managers)

shipped cost resolution diagonal megapixels $/mp PPI seller EOF my $orig_data = $data; $data = [ sort {$a->{cost_per_mp} <=> $b->{cost_per_mp}} @$data ]; foreach my $display (@$data) { printf q{
$%d %dx%d %d" %5.2f $%5.2f %5.2f %s}, $display->{url}, $display->{price}, $display->{resolution}[0], $display->{resolution}[1], $display->{diagonal_inches}, $display->{megapixels}, $display->{cost_per_mp}, $display->{ppi}, $display->{seller}, ; print "\n"; } my $underlying_database = CGI::escapeHTML(join("\n", map {$_->{original_line}} @$orig_data)); print <<"EOF";


Places to find decent prices:



Underlying text "database":
$underlying_database
EOF sub parse { my @ret; foreach my $line (split /[\n\r]+/, shift) { next unless ($line =~ /\S/si); my @f = split ' ', $line; my %display = ( price => $f[0], resolution => [ split 'x', $f[1] ], diagonal_inches => $f[2], url => $f[3], original_line => $line, ); $display{price} =~ s/^\$//si; $display{diagonal_inches} =~ s/"$//si; # analysis/synthesys ($display{seller}) = ($display{url} =~ m#^http://(?:[^\./]*\.)*([^\./]+\.[^\./]+)/#si); $display{megapixels} = ($display{resolution}[0] * $display{resolution}[1]) / 1000000; $display{cost_per_mp} = $display{price} / $display{megapixels}; #$display{diagonal_resolution} = sqrt($display{resolution}[0]**2 + $display{resolution}[1]**2); #$display{ppi} = $display{diagonal_resolution} / $display{diagonal_inches}; # von http://en.wikipedia.org/wiki/Pixels_per_inch $display{ppi} = ($display{resolution}[0] / $display{diagonal_inches}) * sqrt(1 + $display{resolution}[0] / $display{resolution}[1]); push(@ret, \%display); } return \@ret; } sub cgidmp {print "
", CGI::escapeHTML(join("", Dumper(@_))), "
"}