<?xml version="1.0" encoding="UTF-8"?>

	<!--
	 ***************************************************************
	 * Licensed to the Apache Software Foundation (ASF) under one
	 * or more contributor license agreements.  See the NOTICE file
	 * distributed with this work for additional information
	 * regarding copyright ownership.  The ASF licenses this file
	 * to you under the Apache License, Version 2.0 (the
	 * "License"); you may not use this file except in compliance
	 * with the License.  You may obtain a copy of the License at
         *
	 *   http://www.apache.org/licenses/LICENSE-2.0
	 * 
	 * Unless required by applicable law or agreed to in writing,
	 * software distributed under the License is distributed on an
	 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
	 * KIND, either express or implied.  See the License for the
	 * specific language governing permissions and limitations
	 * under the License.
	 ***************************************************************
   -->
<DOC>
<TITLE>UIMA Summer School</TITLE>
<DATE>1 August 2003</DATE>
<TEXT>
August 26, 2003
UIMA 101 - The New UIMA Introduction 
(Hands-on Tutorial)
9:00AM-5:00PM in HAW GN-K35

August 28, 2003
FROST Tutorial
9:00AM-5:00PM in HAW GN-K35

September 15, 2003
UIMA 201: UIMA Advanced Topics 
(Hands-on Tutorial)
9:00AM-5:00PM in HAW 1S-F53

September 17, 2003
The UIMA System Integration Test and Hardening Service
The "SITH"
3:00PM-4:30PM in HAW GN-K35



UIMA Summer School Tutorial and Presentation Details
UIMA 101: The new UIMA tutorial  
Tuesday August 26 9:00AM - 4:30PM in GN-K35

UIMA 101 is a hands-on programming tutorial.

UIMA 101 is intended for people who want a first introductory course to UIMA or for people who would like a refresher.

The tutorial covers the same concepts in the first UIMA tutorial given in 3Q 2002 except for some key updates:

1) It uses a new interface to the CAS that makes it more natural to access and update CAS feature structures using ordinary Java objects (i.e., the JCAS) and
2) It uses updated TAE interfaces that give the application developer more control over managing multiple CASs. 

Please NOTE expert users of UIMA can skip this one and should consider attending the Advanced Topics tutorial.

Prerequisites for the UIMA 101 Tutorial
1) Java Programming
2) Some experience with Eclipse IDE helpful

FROST Tutorial
August 28  9:00AM - 5:00PM  in GN-K35

Visitors from the FROST team will be here to talk to us about FROST.

UIMA 201: The UIMA Advanced Topics Tutorial
September 15:   9:00AM - 5:30PM in Hawthorne 1S-F53

UIMA 201 will introduce some new UIMA concepts and walk the student through hands-on examples.

The advanced topics tutorial is designed for people who have some experience with UIMA and want 
to use new capabilities of UIMA 1.0 to address one or more of the following 
Advanced Topics:

1) Collection Processing and Collection Processing Engines (CPEs)
2) Multi-Threading and CAS Pooling
3) Using the UIMA adapter framework to integrate network TAEs with Java TAEs
4) A Semantic Search Application that brings it all together	

Prerequisites for UIMA 201
1) UIMA 101 Tutorial OR Extensive UIMA Experience

The UIMA Integration Test bed Service (The "SITH")
September 17 3:00PM - 4:30PM in HAW GN-K35

We have developed the first version of the UIMA Integration Test bed service.

This service is being developed to help test, evaluate, certify and publish UIMA compliant components.

In this talk we will explain the service and what it is intended to provide the UIMA community. We will address the following topics:

1. SITH Services
2. How to submit components and what to expect in return
3. Overview of the test bed implementation using Collection Processing UIMA and Juru. 
4. Next Steps for the SITH
</TEXT>
</DOC>

