August 27, 2007

Blog Entry from my PDA

It just occurred to me that I could simply use the web browser to post blog entries directly. Since the blog software is pretty light bandwidth wise it works Ok. So this means my blog will be even more like a kitty-blog journal. This week I am off to Heerlen NL to visit the Open University of NL and then on Wednesday I am off to Tilburg NL to participate in the Ticer Digital Libraries ala carte 2007 course and then back Saturday. I am typing this as the door closes on my flight from Newark to Amsterdam.

Posted by csev at 05:13 PM

OzzFest - Detroit

I am on the bus to the airport at 7:15 AM entoute to Open University of the Netherlands and the Ticer Digital Libraries course in Tilburg, NL. I am pretty foggy due to lack of sleep (no alcohol was involved). I was at OzzFest with Brent yesterday.

Pictures and Video

OzzFest is amazing - it is like a controlled explosion - it is like a real festival - starts at noon and goes to midnight with about 10 bands - finishing up with Ozzy Osborne.

We had a good time - early in the day they do less well kinown bands at the second-stage and there is a continuous mosh pit - you come and go as you like and get as close as you like / dare. We watched two bands with rest periods in between. We got close to a mosh pit - about four layers of people away - at one point a dude came flying out in our general direction and scattered the people and almost knocked us all down. Just close enough to get a sense - not so close to be in any dnager.

We moved at a slow pace because of Brent's crutches so we walked and sat a lot.

As the day moved into evening, we switched to the main stage - five great bands -I kept in my earplugs 50% of the time to make sure I could hear Ozzy :). We had great seats with good sight lines - and thank heaven we were not on the lawn.

Ozzy was great - all in all a great way to spend the last day o summer vacation.

The bus is pulling up to Detroit Airport so I have to cut this short.

Posted by csev at 08:21 AM

August 22, 2007

This is great fun - Future Casting - Education 2020

Take a look at this - it is very fun and cool.

rtsp://educause.rmod.llnwd.net/a680/o1/edu2020.rm

I like the "out of the box" thinking this video makes me think about.

My problem is that its hypothesis is that teaching and learning will become increasingly about technology and not about humans. I just don't believe this.

My problem is that what we need to know is always increasing - so just at the moment that we think that we have the perfect BA degree on a CD - things change and we need to know more - the world and society and technology is constantly changing - we always need to understand the newest and latest and that which is only emerging at this moment or the day after tomorrow.

The only thing that can teach us that which is not yet known - is a human - frankly we all learn at the edge of knowledge together and then write down what we learn for others to follow and clarify.

But other than this problem of ever-expanding knowledge - the video is a blast to watch.

Posted by csev at 12:24 AM

August 19, 2007

Ruby Fun

Well I figured out a few things.

How to make a ruby app set up to use sqlite3

rails app-name -d sqlite3

How to properly install sqlite3's dll - put it in ruby/bin

How to check to see if you have a gem installed

gem list sqlite3

I am working towards a nice simple version of rails that will run on Windows and Mac from a USB stick.

On the Mac, I am happy with Locomotive. On Windows - I like InstantRails - but do not like MySql as the database.

The SQLite browser is dang cool and dang simple to install on both mac and PC.

http://sqlitebrowser.sourceforge.net/

Textmate is a very very fun editor for the Mac and Rails. It instant-installs right from Locomotive. Sweet.

On the PC - I like e-texteditor http://www.e-texteditor.com/

The dang sweetest thing so far is

After running

ruby script/generate model Thing

And making a simple database migration script like this:

class CreateThings < ActiveRecord::Migration
def self.up
create_table :things do |t|
t.column :key, :string
t.column :value, :string
end
end

def self.down
drop_table :things
end
end

Then run this:

ruby script/console

And type this:

x = Thing.new
x.key='123'
x.value = 'fred'
x.save

Absolutely sweet - able to interact with the ORM from the command line - dang dang dang. Hib can eat its heart out.

I still am confused as to why folks don't use SQLite3 all the time for simple stuff - like for teaching. These one-click installers should all use SQLite3 IMHO.

Also I wonder why people ever use anything other than migrations using the DB-independent syntax to populate/organize tables. Urg.

It is too bad that the ruby / rails stuff does not put consistent line-ends in place. Some things work in vi others fail in notepad.exe - ah well - a good reason to get a sweet editor like TextMate or e-texteditor - and pay for them.

TTFN - time to go buy some more 1GB USB sticks and a USB-2 controller.

Posted by csev at 05:03 PM

Emulating Right-Click in Parallels (not left-click)

To emulate right-click in Parallels running Windows use Ctrl-shift - click

Often I mistakenly call this "left-click" because I mean the "other click" and I am right handed.

Posted by csev at 12:13 PM

August 14, 2007

Ruby - First (almost) disappointment

When you are learning a new language, when something is different often the first reaction is that it is bad - after all we fear change.

As I was learning about Ruby objects, I was learning that all members variables are private and that the only way to get at the variables was through setters and getters. I got used to setters and getters when I went from C++ to Java - it has always bugged me that I had to add 10 lines of code and 8 lines of comments just to access a dang member variable the "cool Java" way.

With one of the tenents of Ruby is to dispense with unnecessary cruft - "convention versus configuration" I was surprised when all the books immediately introduce setters and getters right away. I would have thought that there would be a simple way to do this - code like this bothered me:

class Thermo
def set_temp(x) # a setter
@temp=x
end
def get_temp # a getter
@temp
end
end

And they described this in books as if this was a *good thing*. To me it was crap and too much "me-tooing" Java patterns - it was the absolute antithesis of "convention not configuration" - it was overblown syntax - something I hoped to get away from in Ruby - but here in Chapter 3 - was creeping cruft - when would it end? And with this crufty syntax needed for *every* member variable - as far as I was concerned - Ruby was already a failure at delivering on "convention not overblown wasteful, repetitive, and redundant syntax". Grr. I was only a few weeks into the new language.

So I started reading my five Ruby books and looking in the indexs and searching for things like "ruby sucks" and "ruby setters and getters suck" in Google and trying to learn if there were others as peeved about this as me. I found some peeved folks - and even some folks peeved about this issue. But somewhere along the line I got a clue.

Actually I had a clue all along - ActiveRecord does *not* use the setter/getter pattern faux-Java style - and since ActiveRecord is written in Ruby - it must be doing something much niftier than faux-Java setters and getters. You just refer to

thermo.id

Not

thermo.get_id thermo.set_id(1234)

To get the Id of an active record object - I liked that - how do they do that? So the hunt was on.

By the way there needs to be a newbie list where people like me can ask dumb questions like this and get a boot to the head to quickly learn this stuff. Like dummies@ruby.org or some such.

So I was sure there was a better idea - there was hope. I will bypass all the pages that I waded through until I found this one.

http://www.ruby-doc.org/docs/UsersGuide/rg/accessors.html

It shows two patterns of setters that make a LOT of sense - far more sense than the drivel above. I will switch to his code here:

class Fruit
def kind=(k)
@kind = k
end
def kind
@kind
end
end

f2 = Fruit.new
f2.kind = "apple"
f2.kind

Now that is a sweet syntax - particularly when accessing and setting the member variable. Kind of like C++ again - operator overloading - a nice clean syntax that allows me to do things "in context" - working with the compiler as my pal rather than pounding it with syntax as in Java (sorry - still a little bitter about the loss of operator overloading when I left C++ five years ago).

Of course - Ruby does this one better below.

This *is* "convention over configuration" - or at least "don't repeat yourself". "Don't repeat yourself" is a very important concept in programming as it keeps us from making transcription mistakes. So the super-sweet Ruby-regains-absolute-advantage syntax is as follows:

class Fruit
attr_accessor :kind
end

f2 = Fruit.new
f2.kind = "apple"
f2.kind

Ah - I am back happy with Ruby again - no wasted moves - all graceful - like a ballet dancer - I can express what I want in a concise syntax that clearly communicates my intent to the future reader of the code. And if I want to add a little "special stuff" to my setter - simply drop back to the attr_reader and do my own setter as in the previous example.

Whew! I was kind of grouchy with Ruby for a few hours - but I am feeling better now - and in addition the Ruby approach is am improvement beyond C++ and Java IMHO - simple syntax for simple situations with the option to go deeper using more syntax only when there is a real need.

Also I got a little back on the operator overloading front... Cha-Ching.

Let me know if there is a mailing list to help me get through these mental blocks more easily.

Posted by csev at 02:31 PM

Chuck on Vacation Until Saturday

I am taking my vacation this year in northern Michigan at a cottage by a lake with fishing and motorcycling. The best news is that the cottage also has free Wifi. So I will be busy reading and playing with Ruby stuff while I am bass fishing.

Posted by csev at 01:52 PM

August 13, 2007

Pedagogy: Teaching with Sakai - pre-class start

I will be putting up notes about how I am teaching with Sakai - I will code them all with the string pedagogy in them to make searching easier in amonsgt all the nerdy posts as well.

So far I am having great fun with Sakai - pre class start I have made my course site and published it - I have very few tools enabled:

Announcements
Polls
E-Mail Archive

I set it up knowing that students are still adding and dropping the course - as soon as they see it - they see the "welcome announcement" and are told to review the E-Mail archive.

I am taking a very valuable (both to me and the students) poll to gauge student experience level and am involving the students in the book selection via the E-Mail archive.


I make it very clear in the welcome announcement that any pre-class start participation is completely *optional*. Being able to later delete announcements is pedagocialy important to me because once class starts - the pre-class announcement is no longer relevant at all and would be distracting if I could not delete it.

This is a good reason to let faculty pre-setup and publsh their classes under their own control - not waiting for tech support to run some script. I will reveal Sylabus, Resources, iTunesU, etc on my schedule - not tech support's schedule.

Here are my poll results so far:

I know multiple programming languages 7 18.421%
I have taken one intro programming class 11 28.947%
I have had a job as a software developer 4 10.526%
I have never written any software 10 26.316%
I have written a program with more than 1000 lines of code 6 15.789%

These results, while incomplete - really paint a clear picture of where the class needs to go - it must be slow enough for beginners and interesting enough for strong students. I am expecting to try to get the stronger students to help the weaker students.

Posted by csev at 02:05 PM

I just got SVN to work on hostmonster.com

I tried SVN 1.3 and SVN 1.4 - it would not get through configure.

SVN 1.2.0 worked - but it even spewed some errors - but it worked well enough to get command line svn working - which was all I cared about.

cd
mkdir dev
cd dev
curl -O http://subversion.tigris.org/downloads/subversion-1.2.0.zip
unzip subversion-1.2.0.zip
cd subversion-1.2.0
./configure --prefix=`pwd` --without-berkeley-db --with-zlib --with-ssl
make

make install (this failed with an error message)
./subversion/clients/cmdline/svn help (yay)
cd
alias svn=~/dev/subversion-1.2.0/subversion/clients/cmdline/svn
mkdir zap
cd zap
svn co https://source.sakaiproject.org/contrib/csev/trunk/scripts/ zzz

This bit was helpful:

http://www.hostmonsterforum.com/showthread.php?t=1294&highlight=subversion

Posted by csev at 01:56 PM

Open Letter to www.1and1.com

I sent this letter to 1and1 tech support - figured I would share it here.

Domain: dr-chuck.com

I just wanted to drop you a note about Ruby on Rails hosting. I really like 1and1 a *lot* - I have used it for four years - and while I started in the free professional package - I have spent a lot of money and felt that my 1and1 services were a good value - I am so pleased that I put 1and1 ads on all my main pages.

Recently I became interested in Ruby on Rails - I initially tried to get ROR running on my 1and1 account and was even thinking of adding a second hosting plan just to do RoR - but since it was hard to set up - I decided to go with a service that simply supports RoR directly - hostmonster.com.

I will stay with 1and1.com - probably forever for my basic web hosting and domain name stuff - but as my interest grows in RoR - I will naturally begin to do new work at hostmonster.com.

So I am just wishing and suggesting that you come up with a supported RoR service - I would be happy to pay another $5-10 for it and happy for it to be another service. I really would like to stick with one vendor - keeps my life simpler for these hobby web sites.

Thanks for such a fine service.

Dr. Charles Severance
www.dr-chuck.com

Posted by csev at 11:23 AM

Getting a Java + Maven 2 Application on the NMI Testbed

Last week I got Sakai automatically building on the NMI test facility at Wisconsin. Here is a status page:

http://grandcentral.cs.wisc.edu/pavlo/index.php?page=results%2Foverview&opt_user=csev

Here are my scripts in SVN:

https://source.sakaiproject.org/contrib/csev/trunk/nmi/sakaimvn/

The submit file is the master control - here is my sample:

$ cat sakaiMaven2.submit
project = sakai
component = Trunk Build
component_version = 1.0.0
description = Auto-build of Sakai trunk (cron)
run_type = Build
inputs = sakaiMaven2.scp, sakaiMaven2.svn, m2-repo.scp
remote_task = buildSakai.sh
remote_task_args = "sakai/trunk sakai"
platforms = x86_macos_10.4
prereqs_x86_macos_10.4 = java-1.5.0_06
notify = csev@umich.edu

I need Java 1.5 - the simplest is to use the mac OS 10.4 systems for my builds. Later I will develop scripts for other operating systems.

The inputs specify what you want on your execution machine and how to get it there. I have three inputs.

The first copies all my shell scripts from the current directory to the destination machine using SCP.

[csev@nmi-s003 sakaimvn]$ cat sakaiMaven2.scp
method = scp
scp_file = /home/csev/sakaimvn/*.sh
recursive = true

The second input checks a particular tag out of SVN of the Sakai source.

[csev@nmi-s003 sakaimvn]$ cat sakaiMaven2.svn
method = svn
url = https://source.sakaiproject.org/svn/sakai/trunk sakai

The third copies a copy of a populated Maven 2 repository from my home directory on the submitting machine to the executing machine.

[csev@nmi-s003 sakaimvn]$ cat m2-repo.scp
method = scp
scp_file = /home/csev/.m2
recursive = true

As the source changes the .m2 repo will become out of date so I have to tar up a full repo from my dev machine from time to time and copy it over.

The script to be run is pretty complex - I will point out a few important steps.

In link-repo.sh the key line is

ln -s `pwd`/.m2 ~/.m2

The input directive will insure that the .m2 directory makes it into the execution directory - by soft linking it into home, Maven 2 will find it.

In nmi-bootstrap.sh the code is a bit tortuous - probably the clever bit is downloading a copy of Maven 2 and using the local copy.

I debugged this script separately on my mac before making it work on the NMI test bed.

I instlal Maven 2 each time the script runs - I use:

curl -O http://mirrors.ibiblio.org/pub/mirrors/apache/maven/binaries/maven-2.0.7-bin.tar.gz

Then extract it into my local directory and simply use

`pwd`/maven-2.0.7/bin/mvn

As my call to maven 2. This way I install my own pre-requisite and don't have to depend on anything except for Java.

Once this is done, I put in a crontab to automate this:

[csev@nmi-s003 ~]$ crontab -l
MAILTO=csev@umich.edu
22 04 * * * $HOME/nightly.sh

[csev@nmi-s003 ~]$ cat nightly.sh
#!/bin/sh
PATH=$PATH:/nmi/bin:/usr/local/condor/bin
cd sakaimvn
nmi_submit sakaiMaven2.submit

Thanks to Jim Basney and everyone who helped walk me through the process. it took less than a day to get it all working.

Also thanks to the folks at Wisconsin who walked me through the process.

One of the things I do in by launch script is dump out variables and check the version of Java I have just for my sanity. Here is that part of the script:

which javac
javac -version

echo
echo shell vars
set

echo Env vars
env

Here is that output:

Which java are we running
/prereq/java-1.5.0_06/bin/java

Where is curl
/usr/bin/curl

What about javac
/usr/bin/javac

shell vars
BASH=/bin/sh
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="powerpc-apple-darwin8.0")
BASH_VERSION='2.05b.0(1)-release'
DIRSTACK=()
EUID=4294967294
GROUPS=()
HOME=/Users/condor/execute/dir_3996
HOSTNAME=nmi-0068.cs.wisc.edu
HOSTTYPE=powerpc
IFS='
'
MACHTYPE=powerpc-apple-darwin8.0
NMI_BIN=/Users/condor/execute/dir_3996/bin
NMI_CONDOR_RELEASE_DIR=NMI_PLACEHOLDER_DEFAULT_VALUE
NMI_GNUTAR=tar
NMI_PLATFORM=x86_macos_10.4
NMI_USER_HAWKEYE_DIR=/tmp/nmi-hawkeye/
NMI_component=SakaielloWorld
NMI_component_version=1.0.0
NMI_description='This is a simple example'
NMI_inputs=sakaiMaven2.scp
NMI_notify=''
NMI_platforms=x86_macos_10.4
NMI_prereqs=java-1.5.0_06
NMI_project=sakai
NMI_remote_task=helloWorld.sh
NMI_remote_task_args='"Remote_Task Task"'
NMI_run_type=test
OPTERR=1
OPTIND=1
OSTYPE=darwin8.0
PATH=/prereq/java-1.5.0_06/bin:/bin:/usr/bin:/Users/condor/execute/dir_3996/userdir
PIPESTATUS=([0]="0")
POSIXLY_CORRECT=y
PPID=3998
PS4='+ '
PWD=/Users/condor/execute/dir_3996/userdir
SHELL=/usr/bin/false
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=2
TERM=dumb
UID=4294967294
USER=nobody
_=vars
_CONDOR_ANCESTOR_171=8042:1186004412:1008764864
_CONDOR_ANCESTOR_3996=3998:1186671661:3296594176
_CONDOR_ANCESTOR_8042=3996:1186671660:1921037768
_CONDOR_SCRATCH_DIR=/Users/condor/execute/dir_3996
_CONDOR_SLOT=1
_NMI_PREREQ_java_1_5_0_06_ROOT=/prereq/java-1.5.0_06
_NMI_TASKNAME=remote_task

Env vars
NMI_USER_HAWKEYE_DIR=/tmp/nmi-hawkeye/
_NMI_TASKNAME=remote_task
NMI_inputs=sakaiMaven2.scp
NMI_description=This is a simple example
_CONDOR_SCRATCH_DIR=/Users/condor/execute/dir_3996
NMI_project=sakai
USER=nobody
NMI_component=SakaielloWorld
_CONDOR_ANCESTOR_8042=3996:1186671660:1921037768
NMI_notify=
PATH=/prereq/java-1.5.0_06/bin:/bin:/usr/bin:/Users/condor/execute/dir_3996/userdir
NMI_GNUTAR=tar
PWD=/Users/condor/execute/dir_3996/userdir
NMI_PLATFORM=x86_macos_10.4
_NMI_PREREQ_java_1_5_0_06_ROOT=/prereq/java-1.5.0_06
NMI_remote_task_args="Remote_Task Task"
_CONDOR_SLOT=1
SHLVL=2
HOME=/Users/condor/execute/dir_3996
NMI_remote_task=helloWorld.sh
NMI_component_version=1.0.0
_CONDOR_ANCESTOR_3996=3998:1186671661:3296594176
NMI_platforms=x86_macos_10.4
NMI_CONDOR_RELEASE_DIR=NMI_PLACEHOLDER_DEFAULT_VALUE
NMI_prereqs=java-1.5.0_06
NMI_run_type=test
_CONDOR_ANCESTOR_171=8042:1186004412:1008764864
NMI_BIN=/Users/condor/execute/dir_3996/bin
_=/usr/bin/env

Posted by csev at 12:04 AM

August 09, 2007

Making a cool Query for Sakai

I am down at NCSA right now working on pulling site membership info out of Sakai for the Maeviz project so it can be stuffed into SAML assertions to pass to other systems. We are using MyProxy and GridShib.

My job was to come up with a queru whcih for a particular Enterprise ID (i.e. csev) - find all the sites they are in, give the site ID, Site title, and whether they were the owner or just a member (I used site.upd for this).

I seldom get to play in the DB - after a few hours I came up with this query. Feel free to criticize - it only works on MySql 2.3 for sure:


SELECT SAKAI_SITE.SITE_ID,SAKAI_SITE.TITLE, NOT ISNULL(SAKAI_REALM_RL_FN.FUNCTION_KEY) AS POWER
FROM SAKAI_USER_ID_MAP
JOIN SAKAI_SITE_USER
ON SAKAI_USER_ID_MAP.USER_ID = SAKAI_SITE_USER.USER_ID
join SAKAI_SITE
ON SAKAI_SITE_USER.SITE_ID = SAKAI_SITE.SITE_ID
JOIN SAKAI_REALM
ON SAKAI_REALM.REALM_ID = CONCAT('/site/',SAKAI_SITE.SITE_ID)
JOIN SAKAI_REALM_RL_GR
ON SAKAI_REALM.REALM_KEY = SAKAI_REALM_RL_GR.REALM_KEY
AND SAKAI_SITE_USER.USER_ID = SAKAI_REALM_RL_GR.USER_ID
LEFT JOIN SAKAI_REALM_RL_FN
ON SAKAI_REALM.REALM_KEY = SAKAI_REALM_RL_FN.REALM_KEY
AND SAKAI_REALM_RL_GR.ROLE_KEY = SAKAI_REALM_RL_FN.ROLE_KEY
AND SAKAI_REALM_RL_FN.FUNCTION_KEY IN (SELECT FUNCTION_KEY FROM SAKAI_REALM_FUNCTION WHERE FUNCTION_NAME = 'site.upd')
WHERE
SAKAI_USER_ID_MAP.EID='tmclaren'
;

Here is sample output:

+---------------------------------------+--------------------------+-------+
| SITE_ID | TITLE | POWER |
+---------------------------------------+--------------------------+-------+
| !admin | Administration Workspace | 1 |
| ed4fd8d8-a717-4a3d-00f0-f1e368ac1faa | MAEviz | 0 |
| ~1d722376-bd33-44a0-80ba-de56ba912175 | My Workspace | 1 |
+---------------------------------------+--------------------------+-------+

Good fun.

Posted by csev at 03:39 PM

August 08, 2007

Postfix Customization on Mac OS/X Server

Just meaningless notes.

http://www.stepwise.com/Articles/Workbench/eart.1.3.1.html

http://www.stepwise.com/Articles/Workbench/eart.1.3.3.html

http://www.macosxhints.com/index.php?topic=server&page=7

http://manuals.info.apple.com/en/Command_Line_v10.4.pdf

Posted by csev at 08:46 AM

August 06, 2007

Motorcycle Racing Part II

This weekend was all about motorcycling - Friday and Saturday were up at Leota MI with Brent, and my brother Scott and his son John. We had a great time sharing three vehicles with four people. This allowed for plenty of time relaxing around a campfire between rides.

On Friday evening the three went out without me and went farther than told them to go and got sort of lost - they had left without the maps and GPS and my instructions as to what to do and not to do. I spend a nervous hour sitting at the campfire, thinking I would have to call the sherrif to haul them in - the trails at Leota are great and easy and fun - but a wrong turn can send you on a 50 mile trip. But as the sun set they came back - they had gotten a little lost but found their way back. Whew - I immediately gave Scott a map and the trail riding lesson :)

We stayed the night in Harrison, MI - had dinner at a bar with a live band - pretty cool. I did not like the place we stayed (won't mention any names) - AC was not working and the shower ran out of water. But the next morning we did visit a really nice place that we will stay for our next trip the Lakeside Motel and Cottages. Fishing, swimming, boats to rent, all right on on Budd Lake and in downtown Harrison.

This is the first time I have ever been to Harrison, MI - going up to Makinaw all these years - I have driven *by* Harrison 100+ times - it is a very lively town - with local restaraunts, flea markets, nice little shopping center - it is not a"cute" town - just a very functional town and nicely close to mid-Michigan and to motorcycling and snowmobiling.

On Saturday John and Brent spent time in the scramble areas and really short trail rides on their own. Scott and I took a longer trail ride and explored some new areas - we found way points four and five finally and found the way back to waiypoint 3 from the hill climb that has eluded me for all these years. Scott increasingly became more skilled on the ATV and I had more trouble keeping up with him. By the time we got back from our 10 miles my bike had been ridden harder than in a few years - a few bolts loosened up.

Sunday morning was another Vintage Motocross event - this time at the Battle Creek Motorcycle Club. I wanted a video of it so I asked Scott and John to come along as cameramen.

The day dawned with the first rain in 5 weeks - great for lawns - bad for me on a morotcycle - but I pressed on. I met Ben Wanke - the Vintage MX Chairperson and he introduced me around. The Vintage MX group is like a family. They even helped pull start my bike when it flooded and would not start.

The track was VERY sliick and muddy. I fell down for the first time - I was coming out of a curve and gunned it before I had enough traction and the bike just slipped out from under me - thankfully that was during practice. During the first moto - my goggles got wet and muddy and I had to take them off - it just meant blinking your eyes when a faster bike flies by throwing mud everywhere - not so bad. Later I noticed that lots of riders rip off their goggles after they get gunked up.

I used my strategy to start last and be behind the riders - but that kind of failed because they ran two classes at the same time - I was in the first class - about a minute later they dropped the flag on the second group of about 10 riders - many of these guys caught and passed me - so plenty of mud in the face.

While there are about 25 riders on the track at the same time - there are multiple classes running at the same time. I am in a class called Evolution for bikes that are 1981 and older. (Vintage <= 1974, Evolution <= 1981, Innovation <= 1989) - for this race there were only two entrants in my Evolution class.

After the race I went up and found out that I had come in first in my class. And that if I raced a second time I and came in first again - I would win a trophy. So while Scott and John had to go home - I convinced Brent to hang out for another hour so I could race my second race. This time I knew who was in my class - racer 641 from Clio MI (I forget his name). At the start this time - I actually wanted to compete - not just survive. When we started out - I stalled my bike in the excitement - and watched 641 absolutely fly away from me - by the time my bike was restarted - he was long-gone - and I could tell he was a good rider - much better than me - so instead of competing with him - I just wanted to survive and go fast enough not to be lapped (and get mud in my face).

Again the pre-1974 bikes started a minute behind me (they are supposed to be slower bikes :) ). Soon they began to catch and pass me - and for a few seconds I was actually racing two abreast and keeping up - but then I would slow down for something and they would fly away. I actually passed a guy who was having some kind of trouble with his bike and going slowly (my first motocross pass) - then three turns later - his malfunction was apparently fixed and he flew by me - throwing dirt in my face. So again I came in last (second place) and got no trophy because if there is a tie the person placing higher in the second race gets the trophy - I was 1-2 and the other guy was 2-1 as he won the trophy.

After the race 641 came over and introduced himself and his two children - they also had a Polaris Predator ATV they were using as a pit bike. He explained that he had run out of gas in the first race - that explained a lot - because I had won first place starting out last and never passing anyone. That also explained why in the second race he kicked my arse so handily.

Ah well. Back to low expectations. I know I will never be competitive in motocross - when I was 16 I was not competitive - I am not crazy enough to be competitive - even old racers are pretty competitive. But racing is fun - even without winning - I may continue to do it for the exercise and comraderie.

Here are the pictures - things are pretty muddy as you can see. I am feeling pretty tired, muddy and waterlogged.

http://www.dr-chuck.com/images/2007/08/index.php?img=05-08-07_105716_01.jpg

Sorry Georgia Tech - the T-Square t-shirt was at the top of the pile because I wear it a lot - I did not know how muddy it would get - I am sure it will clean up with a good washing - it is just sand.

Posted by csev at 09:40 AM

August 03, 2007

Taking a day off - Motorcycling

I will be off morotcycling friday and Saturday with Brent, my brother Scott and his son John. Then Sunday there is another Motorcross race in Battle Creek MI. Scott has agreed to go with me and perhaps I will make a Dr. Chuck Motocross races video :).

Posted by csev at 02:35 PM

August 02, 2007

A new course I am working on - SI201

I am working with a number of others to build a new Undergraduate curriculum in Informatics at the University of Michigan. Paul Conway is our leader. My main role is to define a new course - SI201 - a beginning programming course focusing very much on Web 2.0 approaches to information.

I attach my *DRAFT* course descripton below. Comments/improvements welcome.

SI201 will teach the students about web-based information environments. The course will focus on technologies and approaches such as the mashup, reuse, and remixing of information to produce and expand information environments. The students will learn how to both produce, consume, and add value to information available on the network. Topics covered include: social networks, content syndication, folksonomies, web development frameworks, data mashup, functionality mashup, data storage and persistence, the design of web applications, and programming in general. Students will develop software using a modern software development framework to explore these concepts. This is a beginning programming class with information environments, web-based programming, and web 2.0 as the overarching theme.

Posted by csev at 08:17 AM

Figuring Apple Mail Services...

I think that we can make Apple Mail Services do what we need.

/etc/postfix/main.cf is a key file

These instructions are key as well

http://article.gmane.org/gmane.comp.cms.sakai.devel/6139/

Autostart is done using launchctl - do

man launchctl
man launchctl.plist

Notes - some sakai.properties values:

# EMAIL CONFIGURATION
# smtp server for outgoing emails
smtp@org.sakaiproject.email.api.EmailService=mail.yale.edu

# dns addresses used by James for incoming email
smtp.dns.1=130.132.1.9
smtp.dns.2=130.132.1.10


smtp at org.sakaiproject.service.framework.email.EmailService=mail.unisa.ac.za
smtp.dns.1 = 163.200.97.20
smtp.dns.2 = 163.200.97.131
smtp.port = 25
smtp.enabled = true

serverName = vula.uct.ac.za
serverUrl = https://vula.uct.ac.za
# dns addresses used by James for incoming email
smtp.dns.1 = 137.158.128.11
smtp.dns.2 = 137.158.128.4
# SMTP port on which James runs. Default is 25. Recommend running on 8025,
# and using a standard mailer on 25 to forward mail to Sakai.
smtp.port = 8025
# flag to enable or disable James for incoming email (true | false)
smtp.enabled = true
# smtp server for outgoing emails
smtp@org.sakaiproject.service.framework.email.EmailService=localhost

Posted by csev at 01:15 AM