The Google K-Blog

Perhaps the best way to understand the potential impact of Google upon content management is to remember the internet before Google. Back then, search engines relied upon html meta tags and text indexing. Because those who should have supplied the meta tags usually forgot and those who remembered usually lied [in an attempt to boost their search position], meta tags became almost useless. Consequently, successful searching depended upon one’s ability to select key words and form boolean queries.

Unfortunately, full text search is quite inefficient in determining the intent of any given piece of content. Yahoo responded by starting to read the web in order to categorize it. The genius of Google was in realizing that they could leverage the work of others who were reading the web and recording their understanding in the form of hyperlinks.

In principle, content management systems could leverage that same insight to improve their search. However, that also requires that the users read the content and provide a record of their understanding - in other words, a k-blog.

Google buys Pyra

I’ve done my time in content management and this could be big: Google buys Pyra. In my experience, the hardest parts about a Content Management System are finding the right content and getting the content into the system. When you mix the leader in search technology with a pioneer in user friendly content creation, then I think you’ve got a pretty potent combination.

I would not be surprised to see a Google branded knowledge blog offering in the near term. Until now, I didn’t think that k-blogs were ready for prime time. But Google could take them over the top.

Ant and JUnit

In this Ant tutorial installment, we’ll take a look at the JUnit task in ant. The JUnit task is moderately complex, so you’ll definitely want to read the Ant manual. I would also recommend taking a look at Java Development with Ant by Erik Hatcher and Steve Loughran (this link will allow you to download Chapter 4: Testing with JUnit). to complete your installation of JUnit. Finally, this example was developed using version 1.5.1 of Ant and version 3.8.1 of JUnit.

We’ll start with the test class shown below. For simplicity, we’ll use a test case that always succeeds and doesn’t really test anything. We’ll take a closer look at writing JUnit test cases later. For now we’ll just say that a JUnit test case extends the junit.framework.TestCase class. Please create this file in a sub-directory named test (or change the value of the build file tst-dir property to suit).

1
2
3
4
5
6
7
import junit.framework.*;
public class TestExample extends TestCase {
public void testOne()
{

assertTrue( "TestExample", true );
}
}

And here is the build.xml file that we’ll be using. Please modify this build file to reflect the location of junit.jar on your system. In addition, you must add junit.jar to your CLASSPATH or copy junit.jar to your Ant library from your JUnit library to enable the integration of JUnit and Ant.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<project default="all">
<property name="tst-dir" location="test" />
<property name="TALK" value="true" />

<path id="classpath.base">
</path>
<path id="classpath.test">
<pathelement location="/Projects/Java/Lib/junit.jar" />
<pathelement location="${tst-dir}" />
<path refid="classpath.base" />
</path>

<target name="compile-test">
<javac srcdir="${tst-dir}"
verbose="${TALK}"
>

<classpath refid="classpath.test"/>
</javac>
</target>
<target name="clean-compile-test">
<delete verbose="${TALK}">
<fileset dir="${tst-dir}" includes="**/*.class" />
</delete>
</target>

<target name="test" depends="compile-test">
<junit>
<classpath refid="classpath.test" />
<formatter type="brief" usefile="false" />
<test name="TestExample" />
</junit>
</target>

<target name="all" depends="test" />
<target name="clean" depends="clean-compile-test" />
</project>

There are three primary differences between this build.xml file and the ones used previously:

  1. Addition of the TALK property. We’ll use this as a flag to the verbose attribute of various tasks. Our example below will demonstrate the effect of the verbose attribute for the delete and the javac tasks. Note that we assign the property with the value attribute since this is not a file system location. This is different from the ant -verbose option. Setting verbose=true on a task causes that task to be more informative about it’s behavior. Passing the -verbose option to ant causes ant to be more informative about ant’s behavior.

  2. Explicit declaration of the Java Classpath. In this case we define a base classpath and then we define the test classpath relative to it. If we were actually testing a real class, then the base classpath would be used to compile that class. The test classpath adds the location of the JUnit tests and the JUnit jar file to the base classpath.

  3. The JUnit task. There are three nested elements to our JUnit task:

    1. The java classpath.
    2. The formatter, which controls the output from the task.
    3. The name, which defines a single test class to be run.

We can now execute our test as shown below.

1
$ ant -DTALK=false clean
Buildfile: build.xml

clean-compile-test:
   [delete] Deleting 1 files from /Tutorial/Ant/Junit/test

clean:

BUILD SUCCESSFUL
Total time: 2 seconds
$ ant -DTALK=false
Buildfile: build.xml

compile-test:
    [javac] Compiling 1 source file

test:
    [junit] Testsuite: TestExample
    [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.007 sec


all:

BUILD SUCCESSFUL
Total time: 4 seconds
$ ant clean
Buildfile: build.xml

clean-compile-test:
   [delete] Deleting 1 files from /Tutorial/Ant/Junit/test
   [delete] Deleting /Tutorial/Ant/Junit/test/TestExample.class

clean:

BUILD SUCCESSFUL
Total time: 2 seconds
$ ant
Buildfile: build.xml

compile-test:
    [javac] Compiling 1 source file
    [javac] [parsing started /Tutorial/Ant/Junit/test/TestExample.java]
    [javac] [parsing completed 81ms]
    [javac] [loading /Projects/Java/Lib/junit.jar(junit/framework/TestCase.class)]
    [javac] [checking TestExample]
    [javac] [loading /Projects/Java/Lib/junit.jar(junit/framework/Assert.class)]
    [javac] [loading /System/Library/.../1.3.1/Classes/classes.jar(java/lang/Object.class)]
    [javac] [loading /Projects/Java/Lib/junit.jar(junit/framework/Test.class)]
    [javac] [loading /System/Library/.../1.3.1/Classes/classes.jar(java/lang/String.class)]
    [javac] [wrote /Tutorial/Ant/Junit/test/TestExample.class]
    [javac] [total 866ms]

test:
    [junit] Testsuite: TestExample
    [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.005 sec


all:

BUILD SUCCESSFUL
Total time: 4 seconds

Disclaimer: I don’t claim to be an expert on ant. Please send comments and corrections.

I'm not worried about LeBron James

The system may be working him hard, but I think that he’s working just as hard back at the system. From all reports, he’s ready to go to the NBA, he wants to go to the NBA, and the NBA wants to give him a lucrative contract.

We talk of paying college basketball and football players, but we never talk about paying baseball players. There are probably more complicated explanations, but I attribute that to the presence of the minor leagues. Colleges have been forced to act in that role because of the absence of developmental leagues for basketball and football.

Why is it that signing a professional contract has become equivalent to eating the forbidden fruit? What is the harm in having college athletes who have washed out of the professional leagues? I think they would return with a greater appreciation for a college education. We may not want to have college athletes who are currently under contract to the pros. But what is the harm in having each year as a pro only cost a year of eligibility?

Why have College Athletics?

Yes, I know that it is an important part of the college experience, but that just begs the question. Anyhow, I’ve been thinking about pay for play in college athletics and it seems to me that we need to start by understanding why we have them in the first place.

I accept that participation in sports helps teach teamwork and leadership. I concede that it helps promote self respect, that participants learn to take calculated risk and to handle failure as well as success. But how does that provide a justification for intercollegiate athletics? A strong intramural program would be more cost effective and apply to more people.

It seems to me that the purpose of college athletics is to build community. What other event can draw thousands of students together in a common cause? What else can bind alumni to their schools decades after they have left?

And that is why I am a starry-eyed idealist when it comes to college sports, and that is why I object to pay for play. The current state of big time athletics has already strained that community by introducing a separate class within the student body. There are already too many athletes who ignore academics and think they’re better than their fellow students. Introducing paid athletes into the mix would be too great a stress on the community.

__

If you’re coming from the BallBlog, I’ve added a follow up here.

Another USOC Mistake

USOC CEO Lloyd Ward keeps job, loses bonus. Another mistake by the USOC.

One of the great things about Sports is that everyone has to stand up and be counted. Some are shown to be the Buffalo Bills, unable to get over the top in the ultimate game. Some are shown to be Edwin Moses, unbeaten for almost 10 years. Some arrive as the Pittsburgh Barry Bonds, missing in action. And some reappear as the 2002 San Francisco Barry Bonds, dominating on the big stage.

What bothers me about Ward is that he has squandered his opportunities to be a stand-up guy. He could have stood up and said that he made a mistake in guiding his brother’s company, and that he was ready to accept his penalty. Instead, he brushed it off as a technical violation. He could have stood up and said that it was wrong for the Augusta National to exclude women, been an activist and dared Hootie Johnson to throw him out. Instead, he proclaimed his desire to work for change from within and disappeared into the woodwork.

Keep the Professionals out of College

The recent LeBron James flap has reignited talk of paying college athletes. Ok, maybe I’m a starry-eyed idealist, but count me dead set against.

The fundamental argument for paying college athletes is that they produce a lot of revenue for the college and the athletes should share in the bounty. I think the math on this topic is quite suspect and that once the cost of facilities is included most football programs and many basketball programs lose money.

Let’s ignore the money question and take a look at the participation numbers for football and basketball. There are over 300 Division 1 mens basketball teams, over 100 Division 1 football teams and only 29 NBA teams and 30 NFL teams. Keeping in mind that a Division 1 roster is about twice the size of an NFL roster, fewer than 10% of these college athletes will make a living as a professional. To my way of thinking that means that over 90% are student-athletes not athletes (whether they know it or not). And letting the needs of the athletes outweigh the needs of the student-athletes is letting the tail wag the dog.

Googlize Me

Hey, Google has noticed me. When you search on my name, “Take the First Step” has made it to the first page. I’m notorious for seeming to drop off the face of the earth, so it’s nice to have a way for people to track me down. Plus, most of my hits are for things that I did long ago (zsh, gwm, emacs) - it’s nice to be in the 21st century.

Battle of the X-Planes

If you’ve ever been bitten by the airplane bug (I have a BS in aeronautical engineering), then you need to watch Battle of the X-Planes. It premiered on most PBS stations last night. The Nova documentary follows the Joint Strike Fighter competition between Boeing and Lockheed-Martin. Even if you haven’t been bitten by the bug, you may be interested in how the Department of Defense goes about spending a couple of hundred billion dollars.

USOC Implosion Continues

One down. One to go?

Marty Mankamyer resigned as USOC president. It was apparent that she had lost any semblance of effectiveness in the ongoing USOC mud-slinging. I doubt that we’ve heard the last words about her behavior, but at least she had the good sense to resign.

But what about USOC CEO Lloyd Ward? He offered to step down if Mankamyer did the same. Now is his chance, he should take responsibility for his actions and get out of Dodge.