PROJECT 1

Project 1 lets you play with a collaborative Web tool architecture. You have less than four weeks to deliver Project 1 on February 17th. You have chosen one of three tools to work on. Your assignment asks you to understand how the tool you've chosen works as best as you can and figure out how to extend the code to make it collaborative and more functional. Within your project team, you should discuss what work you should do to best demonstrate your understanding.

Your code is already on-line waiting for you to use. Try running the sample pages here. The page shows screen shots of each tool and provides you a link to run the code you are being given. Then, grab a copy of your project code off of our class server, sambucus.cev.washington.edu. Use your favorite SSH 2 capable Internet tool to login with the inde498a userid and the password I gave you in class (The UWick package from the University of Washington Web site comes with an SSH Communications Tool).

Upon login, you will arrive at the home directory for the inde498a account. There, you will find four directories that map to the four projects illustrated on the OWorld project page. The directories are named 3d, board, chat, and meet. 3d contains the code for the Meetspaces project. board contains the code for the Drawspaces project (a shared, enhanced whiteboard). meet contains the code for the MeetingPages project.

I will grade you on thoroughness, design, and functionality. The goal is for you to learn by doing. So, try making changes to the code that confirm any assumptions you make. Make changes for the sake of seeing the result. You don't have to turn in all the changes you make, just the changes you think add value. As you work, always think in terms of the components of collaborative software. They are:

Complex Java projects usually place each of the above components into a separate package. Packages enhance reusability as they are tied to folders in your file system and can be incorporated into multiple projects. You will be given 2 packages, one which I have created for your use and another which is maintained by an Open Source project team (see the VNet networking package) with lead developer from The Rochester Institute of Technology. Our collaboration server for the project is the VNet server enhanced to add channels (and the result named the OWorld server).

Code Description

I now review the different files you are to work with for Project 1.

index.html is the Web page you can use to set up and launch your collaboration tool. The page you create will use HTML, JavaScript, and embed a Java applet that contains your version of the code you downloaded. You should focus on HTML presentation and extending the JavaScript within this page. I will be testing your changes on the Internet Explorer 6.0 Web browser (the most versatile Web browser available at this time). Read through the page and test yourself as to whether you understand all that it is doing. Discuss it with your team and ask questions in class whenever we have project question time.

Project 1 Client Code

org/oworld/client/ is your shared directory for all OWorld projects. Your tool will startup with a class extends the Applet class that is part of all Java language versions. You reference your Applet-derived class within your index.html Web page and that class is then responsible for distributing control to all your other Java classes. You are responsible for extending the code to demonstrate that you understand how to do it by delivering an attractive and functional application. Required steps are listed after this Code Description section. I will explain the rest of these classes further in class. Wait until you've had that lecture to ask questions to me via email. For now, think about how you would learn more if you were doing this project by yourself without an instructor.

Chatter.java is where you store all the attributes you need to know about each participant in the collaborative session. So far, you will see a name and unique ID for each participant. Consider adding to this class to include other important information pieces to store on each participant.

UserList.java provides a visual scrollable list of all the current participants in a collaborative session (i.e. all the names of people currently on-line sharing the same application). UserList keeps an internal hashtable (a hashtable is a very popular programming data structure that stores values based on keys (usually short text values) and can search to find the stored details when requested to do so).

UserListObserver.java provides an interface (we'll discuss interfaces a lot in class over the next few weeks) for all your classes to use when they want to be notified of events that occur within the UserList. Observers and Listeners are important programming concepts inate to the Java programming language. For now, just think of UserListObserver as a way to standardize events within your project.

Project 1 Networking

ClientThread.java sets up a separate thread for messaging. Since messages arrive from other participants asynchronously (without any synchronization to local user interactions), it is good programming technique to run messaging in a separate thread. Each thread is a separate process which can share the computer's components in a sequential instruction processing manner. Threads compete for resources and a good operating system makes sure they all run optimally. Threads are an interesting and invaluable concept to understand. We'll cover them in class thoroughly.

ClientThreadObserver.java lets other classes know when events have occurred within the ClientThread. Try to see all the similarities to the UserListObserver class.

Dispatcher.java is the only class within the vnet networking package that knows about the other packages in your project. So, if a message is to come from or go to the network within Project 1, it has to be directed to do so from the Dispatcher class. Think of a taxi dispatcher and the job he or she does. Only the Dispatcher can add new message types or change existing message types within Project 1. I am making that a requirement.

VFieldInputStream.java
makes it easier for you to interpret the bits coming in from the network by parsing them into fields. We won't really be using the fields much for Project 1 but you will need to understand the idea for Project 2.

VFieldOutputStream.java
forces you to package your bits into fields so they can be more easily interpreted by the application receiving them. We won't really be using many field types much for Project 1 but you will need to understand the idea for Project 2.

The other four classes from the vnet package define the fields you will have access to for VField input and output streams:

VField.java
VIP.java
VMFString.java
VSFString.java

Specific Project Tasks

You should start by satisfying the requirements here:
  1. First, look at the messaging and how it works from the server's point of view. You will find that the code you start with does not do any message passing. You want to pass strings of text with delimeters (or fixed width fields) that can be parsed by your application and perform meaningful work. Start by tracking how a message that is generated or received by your tool gets transmitted and where it comes into other participants' tools.
  2. Once you understand messaging, get basic message passing to work. Spend a fair amount of time on this step since it is the most important, general skill to learn when considering collaborative tool development.
  3. Getting the messaging working is a significant accomplishment. You should be well on your way at this point. Try adding more features to your tool. Update the user interface to track when your new feature is selected and add to your messaging so that the actions are shared by each participant.
  4. After you complete these three tasks, you should be creative as a team to add more functionality to the whole collaborative tool environment. You should also make the tool look more attractive. You can get a lot of bonus points by doing so and you'll have a better understanding of what is possible when you define your own Project 2 assignment. Consider adding more control features in the JavaScript. Consider adding more Java class files with more features. Consider any work that will help you learn about how collaborative software is written.

Team Identification

Here are your teams again. Each team will connect to a different port on the collaboration server and each team will have their own directory on the server as well from which to deliver your tool over the Web. I provide a table to help you identify the necessary information here:

DIRECTORY:3dboardmeet
PORT:828882908292
---------------------------------
MEMBERS:TrinaBrianJen
GordonCurtisDan
GildasRachelleMatt
MichelleBrianRick
BrandonRussCathy
TrongJustinSheila
BinhElisabeth