October 2002 Archives

OpenSSH on Solaris 8

|
It took me a while to piece this together. So, I thought I'd increase the likely hood it would show up on a google search by putting it on my high profile web site. Read on for instructions.

If you just try to install it straight you'll ge an error "error: PRNG not seeded." Becuase the /dev/random entropy generator was added with a later patch to Solaris 8. You'll need a patch. Then get ssl and ssh from sunfreeware. Then install with

gunzip openssl-0.9.6g-sol8-sparc-local.gz
pkgadd -d ./openssl-0.9.6g-sol8-sparc-local
gunzip openssh-3.4p1-sol8-sparc-local.gz
pkgadd -d ./ openssh-3.4p1-sol8-sparc-local

You'll then need to add a user sshd and the /var/empty directory to facilitate privilege seperation.

Then start sshd and ssh away. Here is the startup script I wrote /etc/init.d/sshd


#!/bin/sh

SSH_DAEMON=/usr/local/sbin/sshd

[ -f $SSH_DAEMON ] || exit 0

case "$1" in
  start)
        echo "Starting sshd: "
        $SSH_DAEMON
        echo "done."
        ;;
  stop)
        echo "Shutting down sshd: "
        kill `cat /var/run/sshd.pid`
        echo "done."
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: sshd {start|stop|restart}"
        exit 1
esac

exit 0

two inputs

|
I never really thought about vision like this. But most of the experiments we've been doing in physics have entailed taking two samples of some datum in time; start time and stop time. Then through the wonder of algebra we calculate some other quantity. It's the Δ of values between the two times that let's you see the differences. Binocular vision provides a similar mechanism in that we can identify physical diffences in one time sample.

New Job!

|
Yes! I signed my Appointment Letter this morning for my promotion from Callcenter Technician to Academic Technology Services (ATS) Engineer. Isn't that a mouthful. Let me tell you about it.

Firstly, I'll be out of the callcenter. I really love callcenter because I've been so intimate and worked so hard toward the development of it's current incarnation. And it's just going to get better (yes, even without me). And I /love/ working for my manager at Callcenter. She's 70% of the reason I enjoyed and stayed with such a high stress customer service outfit. And the innevitable but is...BUT I'm tired of taking calls and outgrew the role some time ago. My Irreverant father would say, "But Jim what of the team. Who will lead them into the light in your absence?". And I would reply "Dad, we'll always be a team. That's what teams are really about."

ATS is responsible for distance education and faculty training on popular software products and on our web based learning system, blackboard. My goals as their engineer is to setup a development house for blackboard and to rollout streaming media services on campus. It's going to be very exciting. Lot's of servers and I get to keep my TiBook, which was a big question for me.

And what it call comes down to, money. I'm getting a hefty raise in all this which is excellent timing.

So good things

  • new job
  • new office
  • keep TiBook
  • fun challenges
  • prestiges title
  • new team
  • more money
And the bad things
  • Diane's no longer my supervisor
  • Not as much time for pet projects for a while :: sighs ::

So this is great news, I've got some exciting challenges to work with, A new team that I'm barely acquainted with, Some extra money and A LOT OF READING TO DO!

Multiple [code ] blocks in geeklog

| | Comments (1)
Geeklog has a cool feature that allows you to post php/perl/html code into a story and have it render correctly. But the original design only allowed one block. I fixed that. Read on to see the details.

There are two chunks of code below; the old function and the new one. The old one checked once for a [code ] block and stopped. The new one loops through occurences of [code ]'s. You can download my haxxed lib-common from here.

Beware if you put a [code ] or [/code ] inside a [code ] block you will get stange behavior because the parser is simple. I got it to work in this story by replacing [ and ] with [ and ] respectively

Here is their original


/**
* This function checks html tags.
*
* The core of this code has been lifted from phpslash which is licenced under
* the GPL.  It checks to see that the HTML tags are on the approved list and
* removes them if not.
*
* @param        string      $str        HTML to check
* @see function COM_checkHTML
* @return       string  Filtered HTML
*
*/

function COM_checkHTML( $str ) 
{
    global $_CONF;
        
    $str = stripslashes($str);

    // Get rid of any newline characters
    $str = preg_replace( "/\n/", '', $str );
    
    // Replace any $ with $ (HTML equiv)
    $str = str_replace( '$', '$', $str );
    
   

    // loop through consecutive  meta tags
    $start_pos = strpos( strtolower( $str ), '' );
    $end_pos = 0;
    while ( !( $start_pos === false ) )
    {
        if( !( $start_pos === false ))
        {
            $end_pos = strpos( strtolower( $str ), '[/code]', $end_pos  );
            $end_pos += 7; // to account for the length of the tag

            $orig_pre_string = substr( $str, $start_pos, $end_pos - $start_pos );
            $new_pre_string = str_replace( '', '', $orig_pre_string );
            $new_pre_string = str_replace( '', '>', $new_pre_string );
            $new_pre_string = str_replace( '[code]', '', $new_pre_string );
            $new_pre_string = str_replace( '[CODE]', '', $new_pre_string );
            $new_pre_string = str_replace( '[/code]', '', $new_pre_string );
            $new_pre_string = str_replace( '[/CODE]', '', $new_pre_string );
            $new_pre_string = nl2br( $new_pre_string );
            $str = str_replace( $orig_pre_string, '[code]' . $new_pre_string . '', $str );
        }
        $start_pos = strpos( strtolower( $str ), '', $end_pos );
    } // ends while loop

    if( !SEC_hasRights( 'story.edit' ) || empty ( $_CONF['adminhtml'] ))
    {
        $str = strip_tags( $str, $_CONF['allowablehtml'] );
    }
    else
    {
        $str = strip_tags( $str, $_CONF['adminhtml'] );
    }

    return COM_killJS( $str );
}
Here is my new version of the code.

/**
* Makes an ID based on current date/time
*
* This function COM_creates a 17 digit sid for stories based on the 14 digit date
* and a 3 digit random number that was seeded with the number of microseconds
* (.000001th of a second) since the last full second. NOTE: this is now used for more than
* just stories!
*
* 10/13/2002 4:19AM jim AT jimweller.net added handling for mulitple  meta-tags
*
* @return	string	$sid  Story ID
*
*/

function COM_checkHTML( $str ) 
{
    global $_CONF;
	
    $str = stripslashes($str);

    // Get rid of any newline characters
    $str = preg_replace( "/\n/", '', $str );
    
    // Replace any $ with $ (HTML equiv)
    $str = str_replace( '$', '$', $str );
    
   

    // loop through consecutive [code] meta tags
    $start_pos = strpos( strtolower( $str ), '[code]' );
    $end_pos = 0;
    while ( ! ( $start_pos === false ) )
    {
        $end_pos = strpos( strtolower( $str ), '[/code]', $end_pos  );
        $end_pos += 7; // to account for the length of the tag
        $orig_pre_string = substr( $str, $start_pos, $end_pos - $start_pos );
        $new_pre_string = str_replace( '\\', '\', $orig_pre_string );
        $new_pre_string = str_replace( '<', '<', $new_pre_string );
        $new_pre_string = str_replace( '>', '>', $new_pre_string );
        $new_pre_string = str_replace( '[code]', '', $new_pre_string );
        $new_pre_string = str_replace( '[CODE]', '', $new_pre_string );
        $new_pre_string = str_replace( '[/code]', '', $new_pre_string );
        $new_pre_string = str_replace( '[/CODE]', '', $new_pre_string );
        $new_pre_string = nl2br( $new_pre_string );
        $str = str_replace( $orig_pre_string, '<pre><code>' . $new_pre_string . '</code></pre>', $str );
        $start_pos = strpos( strtolower( $str ), '[code]', $end_pos );
    } // ends while loop

    if( !SEC_hasRights( 'story.edit' ) || empty ( $_CONF['adminhtml'] ))
    {
        $str = strip_tags( $str, $_CONF['allowablehtml'] );
    }
    else
    {
        $str = strip_tags( $str, $_CONF['adminhtml'] );
    }

    return COM_killJS( $str );
}

A Moveable Feast

|
To keep with the Hemingway kick. I've just finished "A Moveable Feast." I enjoyed it as mental masturbation. The book is seemingly plotless, but filled with that awesome narrative prose that Hemingway is notorious for. Read on...

The book recounts, with an air of fiction, Hemingway's personal experiences in Paris in the twenties. It was actually published after his death.

The book deals closely with Hemingway's relations with some of the art sheik of the time; Ezra Pound, Ford Maddox Ford, and Scott Fitzgerald just to name a few for the cocktail party. He offers his insights into their creative muse and work quality.

Probably most fascinating to literary pack rats is his introspective analysis of his own creative drive. He discusses the mood, places, and patterns that are condusive to good writing or any art. Sometimes I felt like it was a writer's howto.

It's this very happy, fullfilling book right up until the last page, when Hem, the scoundrel, dedicates one paragraph to his affair that violated the eden of a relationship he had with his adoring wife, Hadley. It's a particularly strong blow because if it's emotional and ethical contrast with the rest of the book where Ernie is well intentioned and aware.

The man has a real way of looking at things and making you look at them his way. It's fun stuff. This one is kind of like an Elvis Impersonator, fun and indicative of the real thing, but trying too hard.

Fruffie Girlie Stuff

|
My girlfriend, Olivia, has been living with me for a few months now. This is a new thing for me. I'd just gotten used to living alone. And this is my first femail cohabitant. It's going to get interesting.

We've both been enjoying each other's company and I love her to death. It's a really great sitch. There's a lot of little anectdotes about the deal if you read on.

Script to convert phpWebsite to geeklog

|
This is the perl script I used to convert my phpwebsite to geeklog. It's pretty smart. Note that it doesn't do 'polls' since I never really use them. You can download this zip file or read the below (if it renders ;)


#!/usr/bin/perl


#geek log notes
#
# I need to write a script to copy all of the data from my phpWebsite database 
# into my new geek log database. The Items I'm interested in are.
#
#
#stories
#boxes (menu, ephemera, in the mix, on the press, capitalist flicka, friends and colleages)



use strict;
use DBI;
use Digest::MD5  qw( md5 md5_hex);


# geeklog config (g)
my $ghost = "localhost";
my $gdb = "geeklogjimwellernet";
my $guser = "jim";
my $gpass = "perfectpassword";
my $ghomedir = "/home/jim/jimweller.net/www/geeklog/public_html/"; # must have trailing slash

# appstate config (a)
my $ahost = "localhost";
my $adb = "jimweller";
my $auser = "jim";
my $apass = "perfectpassword";
my $ahomedir = "/home/jim/jimweller.net/www/phpwebsite/"; # must have trailing slash


my $geeklog_dbh = DBI->connect
  ("DBI:mysql:$gdb:$ghost::3306",
   "$guser",
   "$gpass",
  );


my $appstate_dbh = DBI->connect
  ("DBI:mysql:$adb:$ahost::3306",
   "$auser",
   "$apass",
  );


# for storing stuff for later use
my %usermap;
my @topicmap;
my @storymap;


&convert_blocks;
&convert_users;
&convert_topics;
&convert_stories;
&convert_comments;

$geeklog_dbh->disconnect();
$appstate_dbh->disconnect();




sub convert_users(){
	# first we convert the users. I make a UID map for later reference
	# to assign the right objects to the right user. I do this b/c I don't want to overwrite
	# geeklogs builtin  accounts
	#
	# appstate/geeklog
	# ----------------
	# uid/uid
	# name/fullname
	# uname/username
	# email/email
	# pass/passwd
	
	my $query = "SELECT uid,name,uname,email FROM users";
	my $sth = $appstate_dbh->prepare($query);
	$sth->execute();
	my $hashref;
	
	my $usercount = $sth->rows;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
		my ($uid,$name, $uname, $email) = @$hashref{'uid','name','uname','email'};
		my $textpass = md5_hex("password");
		$query = "INSERT INTO gl_users (fullname,username,email,passwd) VALUES ( '$name','$uname','$email','$textpass' )";
		#print $query,"\n";
		my $tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		my $uid = $geeklog_dbh->{'mysql_insertid'};
		$usermap{$uname} = $uid;
		$tempsth->finish();

		$query = "INSERT INTO gl_group_assignments (ug_main_grp_id,ug_uid)  VALUES (2,$uid);";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();

		$query = "INSERT INTO gl_group_assignments (ug_main_grp_id,ug_uid)  VALUES (13,$uid);";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();


		$query="INSERT INTO gl_userprefs (uid) VALUES ($uid)";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();

		$query="INSERT INTO gl_userindex (uid) VALUES ($uid)";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();

		$query="INSERT INTO gl_usercomment (uid) VALUES ($uid)";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();

		$query="INSERT INTO gl_userinfo (uid) VALUES ($uid)";
		$tempsth = $geeklog_dbh->prepare($query);	
		$tempsth->execute();
		$tempsth->finish();


	}
	$sth->finish();
}


# Next we convert the topics. I also keep a topic map so later stories are assigned the
# right topic ID number
#
#
# appstate/geeklog
# ----------------
# topicid/tid
# topictext/topic
# topicimage/imageurl

sub convert_topics{

	my $query = "SELECT topicid,topictext,topicimage FROM topics";
	my $sth = $appstate_dbh->prepare($query);
	$sth->execute();
	my $hashref = undef;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
	    my ($tid, $topic, $imageurl) = @$hashref{'topicid','topictext','topicimage'};
		$query = "INSERT INTO gl_topics (tid,topic,imageurl) VALUES ('$topic','$topic','/images/topics/$imageurl')";
		my $cp_pix = "cp $ahomedir"."images/topics/"."$imageurl $ghomedir"."images/topics";
		#print "$cp_pix   : $query \n";
		system($cp_pix);
		my $tempsth = $geeklog_dbh->prepare($query);
		$tempsth->execute();
		$topicmap[$tid] = $topic;
		$tempsth->finish();
	}
	$sth->finish();
}



# Next we convert the stories. Use the user and topic maps from earlier to line things up.
# We keep a story map here as well so we can make comments line up
#
# appstate/geeklog
# ----------------
# sid (integer)/sid (YYYYMMDDHHMMSS)
# aid/uid+owner_id
# time (YYYY-MM-DD HH:MM:SS )/date
# hometext/introtext
# bodytext/bodytext
# comments(?)/comments
# counter/hits
# topic/tid
# informant/
# notes/
# exp_date/
# NA/postmode (html)
# NA/group_id (3)
# NA/perm_owner (3)
# NA/perm_group (3)
# NA/perm_members (2)
# NA/perm_anon (2)
sub convert_stories {

	my $query = "SELECT * FROM stories ORDER BY time";
	my $sth = $appstate_dbh->prepare($query);
	$sth->execute();
	my $hashref = undef;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
	    my ($sid,$aid,$title,$time,$hometext,$bodytext,$comments,$counter,$topic,$informant,$notes) = @$hashref{'sid','aid','title','time','hometext','bodytext','comments','counter','topic','informant','notes'};

		# geeklog uses a different format for most of there records so there is a bunch of mangling here
		my $gl_user = $usermap{$informant};
		if( $gl_user eq "" || $gl_user == undef ){
			$gl_user = $usermap{'Jim'};
		}
		
		if( $comments eq "" || $comments == undef ){
			$comments = 0;
		}

		if( $counter eq "" || $counter == undef ){
			$counter = 0;
		}
		
			
		
		my $gl_sid = $time;
		
		$gl_sid =~ s/[: -]//g;
		my $rand_secs = sprintf("%02d",int rand(61));
		$gl_sid =~ s/(\d\d)$/$rand_secs/g;
						
		my $gl_topic = $topicmap[$topic];
		
		
		$query = "INSERT INTO gl_stories (sid,uid,tid,date,title,introtext,bodytext,owner_id,group_id,comments,hits) VALUES ('$gl_sid',$gl_user, '$gl_topic','$time',".$geeklog_dbh->quote("$title").",".$geeklog_dbh->quote("$hometext").",".$geeklog_dbh->quote("$bodytext").",$gl_user,3,$comments,$counter)";
		#print $query,"\n";
		my $tempsth = $geeklog_dbh->prepare($query);
		$storymap[$sid] = $gl_sid;
		$tempsth->execute();
		$tempsth->finish();
	}
	$sth->finish();
}



sub convert_comments {
	my $query = "SELECT tid,pid,sid,date,name,email,url,host_name,subject,comment,score,reason FROM comments;";
	my $sth = $appstate_dbh->prepare($query);
	$sth->execute();
	my $hashref = undef;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
	    my ($tid,$pid,$sid,$date,$name,$email,$url,$host_name,$subject,$comment,$score,$reason) = @$hashref{'tid','pid','sid','date','name','email','url','host_name','subject','comment','score','reason'};


		# geeklog uses a different format for most of there records so there is a bunch of mangling here
		my $gl_user = $usermap{$name};
		if( $gl_user eq "" || $gl_user == undef ){
			$gl_user = $usermap{'Jim'};
		}
		
		my $gl_sid = $storymap[$sid];
				
		my $gl_topic = $topicmap[$tid];
		
		$comment =~ s/<br \/>//g;
				
		$query = "INSERT INTO gl_comments (type,sid,date,title,comment,uid) VALUES ('article','$gl_sid','$date',".$geeklog_dbh->quote("$subject").",".$geeklog_dbh->quote("$comment").", $gl_user)";
#		print $query,"\n";
		my $tempsth = $geeklog_dbh->prepare($query);
		$storymap[$sid] = $gl_sid;
		$tempsth->execute();
		$tempsth->finish();
	}
	$sth->finish();	

}

# convert all the left and right blocks to geek log blocks
# id/
# title
# content
# order_id
sub convert_blocks(){
	
	# right blocks
	my $query = "SELECT id,title,content,order_id FROM rblocks";
	my $sth = $appstate_dbh->prepare($query);
	$sth->execute();
	my $hashref = undef;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
	    my ($id, $title, $content, $orderid) = @$hashref{'id','title','content','order_id'};
	    my $blockname = $title . "_block";
	    $blockname =~ s/ +/_/g;
	    $title =~ s/\W+//g;
		$query = "INSERT INTO gl_blocks (title,name,content,onleft,owner_id,group_id) VALUES ('$title','$blockname',".$geeklog_dbh->quote("$content").",0,2,4)";
#		print "$query\n";
		my $tempsth = $geeklog_dbh->prepare($query);
		$tempsth->execute();
		$tempsth->finish();
	}
	$sth->finish();




	# left blocks
	$query = "SELECT id,title,content,order_id FROM lblocks";
	$sth = $appstate_dbh->prepare($query);
	$sth->execute();
	$hashref = undef;
	
	while ( $hashref =$sth->fetchrow_hashref() ){
	    my ($id, $title, $content, $orderid) = @$hashref{'id','title','content','order_id'};
	    my $blockname = $title . "_block";
	    $blockname =~ s/ +/_/g;
	    $title =~ s/\W+//g;
		$query = "INSERT INTO gl_blocks (title,name,content,onleft,owner_id,group_id) VALUES ('$title',".$geeklog_dbh->quote("$blockname").",".$geeklog_dbh->quote("$content").",1,2,4)";
#		print "$query\n";
		my $tempsth = $geeklog_dbh->prepare($query);
		$tempsth->execute();
		$tempsth->finish();
	}
	$sth->finish();
}

1;

Zio! Broke in MacOS 10.2

| | Comments (1)
I bought the Zio! Smartmedia reader because it supported OS X and because it was tiny. It worked great for a while, but with each OS X release the software broke. Microtech International kept up for a bit, but they haven't fixed 10.2 support. Don't trust OS X support claims unless you get it from Apple. I'm bailing on Zio. Read on if you want to see the email I sent their customer service group.

From: Jim Weller
Date: Thu Oct 10, 2002 6:57:06 PM America/Anchorage
To: MicroTech International Customer Service
Subject: Zio! Smartmedia & MacOS 10.2

It's been over 2 months since this was posted on your help forums. I bought the Zio! because it was conveniently small without the USB extension cord and because it had the Mac smiley face offering OS X support *without drivers*. It was great while it lasted, but with each OSX upgrade the software support from microtech has gone down the tubes. Not only did I have to upgrade drivers (why not just comply with the SDK?), but I now I have NO Zio support! I guess I just wanted to let you know how disappointed I am. I know it hardly matters because it's my initial purchase that counts in your coffers, but you should know that I and the other 5 people that bought this product at my suggestion are selling them on eBay and have replaced them with Lexar or Sandisk products.

Sadly,
Jim Weller
http://www.jimweller.net

MS Ad on Slashdot.org

|
I think this is a the first time that I've seen anything selling MS software on slashdot. They have a history of being anti-ms. They would get into a semantic discussion about MS' ethics versus the company itself, but that's splitting hairs. It's actually a mighty blow to have MS footing the bill for slashdot to bitch about them. All hail marketing the great equalizer.

AK PFD $1540.76

|
Ahh..The Permanent Fund Dividend. $1540.76 from the state government just for living in the most beautiful state in the union. It's a good life. It's nice to see:

10/09 SOA PFD DIVISION/2002 PFD/021009 1540.76

in your bank statement. Read on...

You can read about the history and finances of the PFD on your own.

But I should tell you that Alaska goes into a spending CRAZE when this money comes out. So, many pockets with burning holes. Don't even try to go to the new Best Buy in Anchorage. You'll be trampled only to see an empty store. They clean all the electronics and appliances and everything else out of the whole state.

Beyond the stampede to spend money. There is a marketing thrust to take it. Car dealerships will take your PFD as a downpayment. Travel agencies have PFD specials to Hawaii, Mexico, or you name where. There is a PFD everything sale.

Me? I'm saving mine. I don't need any new toys or equipment and I wouldn't fight the masses for them anyway. Besides I had to get my brakes fixed with some of the money.

Kitten Hate

|
I'm really speechless about this follow up to the Killing Kittens blip. It's an evil use for an RDBMS. I just thought you should know. If you think hot or not was evil then read on.

Kittenhate.com is a website that allows visitors from anywhere in the world to log their sexual activities [...]

From: "Kittenhate.com Info"
Date: Wed Oct 9, 2002 6:05:22 AM America/Anchorage
To: "Jim Weller"
Subject: Addendum to 'Killing Kittens'

Hey Jim,

Nice site, though you could really use some more content! Since your top story relates directly to my site I thought I'd give you a shout out and attach my site's little e-press release. :) Maybe it's worthy of a news followup on your page.

Keep up the good work/struggle,

sully, lead KH developer

--

Kittenhate.com
http://www.kittenhate.com

Admin contact: sully@kittenhate.com

What is Kittenhate.com about?

Kittenhate.com is a website that allows visitors from anywhere in the world to log their sexual activities in a way that is both self-informative and entertaining. After all, sex and masturbation don't have to be taken too seriously. Self-informative? By providing our users with an easy-to-understand framework to log and compile information about their most private of habits, we provide an opportunity to distinguish any patterns or oddities in a user's sexual diet. The user can then use that information to compare themselves with other users in their state, province, country or across the entire world and see exactly how they stack up.

Entertaining? Never before have statistics been compiled on such a grand and simultaneously finite scale on such a personal topic. Think of Kittenhate.com as the SETI@home of pseudo-sex sites. In the same way, you can race against other Kittenhate.com users in your home state, province or country, or even join a group and compete against others in kind. On a different tack altogether, you can join solely to participate in our community forums where users are encouraged to discuss and demystify the topic of sex, share their stories and encounters or simply chat it up.

__________________________________________________
Kittenhate.com - Keeping track of your fantasies since 2002.
http://www.kittenhate.com/

My POS AMC Eagle

|
For those of you that don't know it, I drive a 1984 AMC 4x4 Eagle Station Wagon with 198,180 miles on it. It's a damn sheet metal tank. My poor eagle needed some brake work. I spent some $1000+ dollars. Read on for the gore.

It started when my brakes almost bottomed out and started "sliding." I'd get to a light and hold the brakes, but the pressure would slowly fade away. Leak in the line right? Well I took it to Meineke, and they wanted $800 dollars to replace pads, rotors, and shoes claiming that the rear cylinder would quit leaking once it wasn't over extending (because of low pads on the rear shoes). Well I'm a po' college boy without that money. So I bought the parts for $290 and spent 6 hours putting them on. Pain and suffering for sure.

After the parts were on I had marvelous brakes, but they still lost pressure. This hadn't fixed my leak. But I was broke so I drove very carefully for a month. It was like a lesson in ballistics and defensive driving, because I couldn't stop quickly so I had to look way ahead.

Well I went back to Meineke and had them look for leaks. They said it was the rear wheel cyclinder (Duh? was it the fluid that tipped you off?). But they said the master cylinder was fine. They wanted $480 to fix it. Did I mention Meineke has 550% markup on parts?

So, I did the right rear cylinder myself. But that still didn't fix the problem.

Finally, I took it to Midas (only 300% markup). Loa and behold. The master cylinder was shot, the left rear wheel cylinder was bad, and I put the shoes on backwards on one wheel. Plus, the front brake lines had the inner lining worn. Basically, because of liability, they wouldn't do any work unless I hade them fix the lines and master cylinder. I had them to the work to the tune of $617. Thank god for the PFD tomorrow.

In my estimation I'm still doing ok. A new car with a $300/mo car payment would cost me $3600 annually. If I can expend less than that in repairs on my piece of shit, then I think I'm doing all right. Granted a newer car would use less gas (hypothetically), but I'm still spending about $2000 dollars a year less. I'm sure that accounts for any gas my beast guzzles. Plus, this thing is an alaskan winter tank that takes me to all the XC ski spots no matter how much snow!

But now my brakes work so good I can stop world hunger. And I'm looking forward to a long winter of skiing in my 4x4 sheet metal tank.

Physics Test

|
I'm back in school this semester to finish my BS in CS (heh...rhymes). I'm taking basic physics. We had our first test Thu of last week. I didn't get enough time to study for a lot of reasons, but I only had 2 hours the night before the test. Thankfully I went to all, but one lecture (which I got the notes from) and have a knack for physics. I got an 'A'. KeeYaaa!

Job Interview

|
I had my job interview for the "Software Engineering" positions today. It was at 8:30 am which is not my finest hour. I did great on all of the leadership and team type questions, but I failed on two technical questions. Read on so you don't make the same mistakes.

The first question I didn't do great on was about RDBMS normal forms. My reading from that is about 2 years old and I always build to be compliant with at least the third normal form. But they asked about a specific product I'd written and how it fit into that model. I wasn't able to remember the criteria for the forms well enough to answer.

The second thing I missed was SDLC (system develpment life cycle). That just refers to the development model used to create a product/project (waterfall, fountain, spiral etc.). I'm not sure what they wanted there. Nor am I sure they knew themselves ;) So, I spouted some stuff about design, implementation, feedback, and review.

The last thing I messed was a logic problem that I'd answered before, but I couldn't muster it under pressure.

Given a 5 gallon bucket and a 3 gallon bucket how would you measure 1 gallon of water?

Answer: 

fill the 3 gallon bucket
pour it into the 5 gal bucket
fill the 3 gallon bucket again
pour it into the 5gal bucket
The 5 gal will only take 2 more gallons.
So 1 gallon is left in the 3 gal bucket.

All and all the interview went fine for being early in the morning. I hope that I get at least one of those jobs so I can quit working at the callcenter. I'm really holding out for a System's Engineering job in the same unit, but that is pending approval by HR and could be a year out. So this will do in the meantime. Plus, it's a good $5,000 a year pay raise for me.

A Farewell To Arms

|
A Farewell to Arms by Hernest Hemingway made me cry like a baby. That's right! I picked up this book out at Cliff's cabin on Nancy Lake, because I'd finished "Round Ireland with a Fridge." I had to have something. Now, I'm hooked on Hemingway. Read on and I'll tell you about it.

The story itself is a romantic tragedy set in World War I in Italy. The male protaganist, Frederic Henry, is an American enlisted in the Italian army. He's an officer in the ambulence because of his gentler nature. He's introduced to and falls in love with an English nurse, Katherine Barkley.

Miss Barkley has lost her childhood friend and romance to the war's violence and is a little crazy from it. She's maddened by her remorse for not having made love to and married the dead boy. She's out of her element and distraght.

The relationship has a disfunctional but pure feeling to it despite it's desperate beginnings. He goes off to the front only to get heroically wounded by a mortar. From the field hospital, he arranges to get Catherine assigned to his destination hospital for some of that special nursing.

This is the good stuff. I really respect this character. He drinks with every meal. He reads all the time. But best are the torrid (for those days) allusions to love scenes. Wounded man in hospital, lovely nurse, suspicious supervisor, bottles of brandy. You get the jist. He's a fine fellow indeed.

Hemingway makes a point to poke fun at the three bumbling commitee style doctors. Finally, our hero get's all fixed up by a skilled surgeon. And, as wars go, he's sent back to the front. There's some nice allusions to love scenes in the splendor of a hotel before he departs. Did I mention she's pregnant from all these allusions?

His forces are defeated. The army is on the retreat. He's currying across the countryside trying not to be captured. The Italian battle police (his own forces) ultimately arrest our protaganist and some of his company (including the character that introduced him to Catherine in the beginning). They are prosectuted with deserting. After most of the officers around him are judged guilty and shot on sight, Tenente makes a bolt for the river to escape.

He escapes, gets Catherine and they row a boat for 2 days to get to Switzerland. Harrowing boat row I must say. They are happily accepted in Switzerland because they have passports, money and a policeman that met them was willing to recommend a fine place where they could partake in winter sports; his mother's hotel.

Well there is much peace and many happy winter walks. Our lovers are waiting to marry until Catherine loses the added weight of child. The calm is broken by a short labor room scene. She dies in child birth. It is very sad. I cried a lot.

It was dismal. Thank god he actually meant to write a tragedy huh? Hemingway has a real way of making you consider the forces surrounding the situation he's describing. His characters are richly aligned to bring elements of larger consideration into your mind. The pictures he paints are cool. They are rich and juicy. Like literary gummie bears.

I watched the movie recently thanks to my dad recording it off of AMC for me. Dad flew it all the way to Alaska :) It had Rock Hudson. Ironic!? It was pretty faithful to the original dialogue, with a few minor plot tweaks. I was pretty impressed all and all. I'm kind of a Hemingway junkie at this point. I'm really digging him. I'm halfway through "A Moveable Feast." So, keep an eye out for that review here soon.

Round Ireland With A Fridge

|
John Field was kind enough to give me "Round Ireland with a Fridge" by Tony Hawks (no not the skater). It's a comic tale of Tony's real life experience Hitchiking around the circumference of Ireland with a refrigerator. He's a British comedian that placed a bet with a bloke that he could do it. He goes through all kinds of pub adventures with that fridge and gets coverage from a local radio station. It's a short funny read.