My Contribution to the Project

Even though many of the files of this software package were touched by several members of the team, each of us can point directly to some areas that we worked on individually. From the start of the project each team member was assigned different tasks to work on. Some of the task were exchanged in the middle of the project. Some tasks were worked on by one person with some assistance and fresh ideas from other team members. All this demonstrates how this project benefited from a team effort. However, if it was not for each team members individual accomplishments, this project would of never got off the ground. I was assigned the following tasks for contribution to the project: version control, the text object, the HTML files, testing of the application, the color palette, and many other contributions to other objects.

Version Control

One of the most important tasks I was given at the beginning of the project was to come up with a means to manage several files for the team. This configuration management was extremely important and became imperative to have. Version control consists of 12 c-shell script files written for a UNIX platform modeled after Source Code Control System (SCCS).

Though the version control was an extra addition to this project, it benefited the project in many aspects. The version control was used to manage numerous files among several team members that had to have access to the files. Version control provided a centralized location of the most current and up to date files of the project. Version control was also developed for the purposes of backups. Backups were one of the greatest contributions to this project.

The method to manage files within the project was needed, because as many as five team members need to have access to the same files. At times the same file was being reviewed and edited by two or more people at the same time. In this version of the version control there is no easy means to check the differences between files. Many of the team members are fluent in UNIX, so they used the diff command in our to do this operation. Because version control lacked this operation the team members were required to do their own integration of their code into the version controls code.

Example of Text Fonts

Figure 16
The organization of the version was setup to allow any team member to have access to the files while maintaining a minimal security to the files as illustrated in figure 16. A two step locking mechanism was used to ensure only one person at a time had rights to change the contents of any given file. All members were allowed to retrieve a copy of the file for their use and development, but only one person was able to sign a copy of the file out and make changes and return it back to version control. As according to figure 16, the directory is simply laid out. The method that I chose to monitor the version control was through log files. Various directories were not readable such as the my root directory (~mehl). So only those users on the system that knew the directory name (sccs) would be able to get to the version control files. Second once inside the version control directory I took additional measure such as making links to the appropriate directories that one needed access to, instead of actual directories. This permitted me to move whole directories around without effecting other team members. Both sccs and current are links to directories. As depicted in figure 16, current is a link to the version control directory. Consequently if any one was to duplicate my version control code, one would be required to put in this link. Some of the files absolute paths are hard coded too, like the docs directory where the log files are keep. Due to system constrains and usual results from the execution of the scripts the file paths had to be hard coded into the scripts. Therefore any user that want to try to duplicate the scripts should be aware of this, if they use my scripts.

Therefore the simplicity of the scripts and the ability to run the scripts from any directory on the system made it very easy to use the version control commands. Because it was of this easy, so the version control became the centralized area for the most current and working files for the project. A beneficial addition to this, was that version control also became the central location for maintaining backup copies of previous versions.

Backups of old versions of files and database records came in very handy. Doing a backup of any project or system is always a good practice to have. For this project there were three different types of backups that were made: version control backups, floppy disk backups and remote system backups. It turned out that all three of these methods were used through out the project.

Version control backups came in handy when integration of files did not work properly or team members accidentally delete portions of code. The easy and the safest way to get their modifications back was from version control backups. The second type of backup used was floppy disks. Many of the team members did a lot of their own work on remote systems and made modifications. Once they had working coded they brought the code back to the main system at Villanova University and tested it and integrated their changes, which then was put back into version control. So once again, just like the first form of backup, floppy disk backups were useful. The third form of backup made was remote system backups. This type of backup is good to have, specially if something happens the system which one is working on. It just happened that in the later stages of our project the team experienced several system difficulties: power outages, and damaged disk containing the user directories. So remote system backups proved to beneficial. Every night the entire project was down loaded to a IBM PC as well as disks of various team members.

Due to time restrictions, there was not enough time for an installation of a version of SCCS or time for all the team members to get familiar to such a complex application. Only main concepts of the SCCS software were captured and implemented in my version of the version control software. The following is a description of the SCCS software and a condensed description of the sub-commands with I modeled my version control software after. To see a detailed description of the sub-commands refer to Appendix B. If any one wants to see the source code, it can downloaded upon request.

The sccs command is a comprehensive, straight forward front end to the various utility programs of the Source Code Control System (SCCS). Many of the following sccs sub-commands invoke programs that reside in /usr/sccs (of most UNIX based systems if it was installed). Many of these sub-commands accept additional arguments that are documented in the reference page for the utility program the sub-command invokes.

check
Check for files currently being edited. Like info and tell, but returns an exit code, rather than producing a listing of files. check returns a non-zero exit status if anything is being edited.
create
Create (initialize) history files. create performs the following steps: edit Retrieve a version of the file for editing. `sccs edit' extracts a version of the file that is writable by you, and creates a p.file in the SCCS subdirectory as lock on the history, so that no one else can check that version in or out. ID keywords are retrieved in unexpanded form.
enter
Similar to create, but omits the final `sccs get' This may be used if an `sccs edit' is to be performed
get
Retrieve a version from the SCCS history. By default this is a read-only working copy of the most recent version; ID keywords are in expanded form.
help
Supply more information about SCCS diagnostics
info
Display a list of files being edited, including version number checked out, the version to be checked in, the name of the user who holds the lock, and the date and time the file was checked out.
print
Print the entire history of each named file.
tell
Display the list of files that are currently checked out, one filename per line. unget "Undo" the last edit or `get -e', and return the working copy to its previous condition. unedit backs out all pending changes made since the file was checked out.

The Text Object

The text object is simply a graphical form of text that can be written to the Easel Page and not to the Chat Window. An example of the text object is shown in figure 17. Essentially the text object was a special case of most of the other objects. All the object are created in whiteBoard.java. WhiteBoard.java is the file where most software communication messages were composed and to be sent out across the Internet. On the mouse down the white board would get the top left hand corner coordinates and on the mouse up, the white board would know the bottom right coordinates of the object. So the exact location and type of object to be drawn was already known when the software communication message was ready to be broadcasted. However, it had to be a little different for the text object. On the text object you would only need a mouse down to indicate the starting location of the text. This difficult was be handled with ease, because there were other operations that only required the mouse down too. Even though the coordinates and the object type were known, the text object did not have all the information it was needed in order to draw it on the easel page. What was to be actually written is still unknown. This was the first hurdle that had to be over come for the text object.

Example of Text Fonts

Figure 17

In order to handle the problem of not having the text to draw posed the first of many design issues concerning the text object. The object could create its message and broadcast it across the network, so this way the other white board would know the new object does exist. This would not hurt anything, because basically it would draw nothing on the screen. This was not a very good approach since it would cause a lot of network traffic. A message would have to be sent in order to create the new object. Then the client had to find and update the object with the current text to be typed. Now this posed the next question. How would the text object be drawn.

Should the text object be drawn directly on the easel page or be temporarily stored and then sent when the whole message was complete. If the text was drawn directly on the Easel Page, the white board would have to handle a message sent across the network every time a key was pressed. The white board would be required to read the character that was typed in, know which text object the character belonged to as well as find that object in the list of objects on the Easel Page and then send a message across the network Since requiring the capability to draw on the Easel Page would cause a huge amount of time and waste of network band width the option to temporarily store the message and then send the message as a whole was the decided option to take.

The next design question then arose. Who should send out the message to be broadcasted to every one when a new text object was ready to be created? And to whom to send this message. Because of hierarchical conditions there were difficulties on how and what to pass to whom. This problem started with who instanciates what, and how are the required functionality to be passed on. The decision of creating a temporary location for the message to be typed and stored until the message was broadcasted to all other white boards forced this message board to become an object. The message board had to be instanciated by the white board, because this was the general location for creation of objects for the Easel Page. The white board also knows the initial starting location that the message should appear and the color of the message. Also the first part of the message for communication purposes is created in the white board. So this was a logical place to instanciate and initialize the text object (the message board). The text object will them be created by the message board. Therefore the message board is passed the partial message too and will complete the message for board casting. This is the first variation from the other objects. The other objects to be placed on the Easel Page are instanciated by the white board then the message board does not know the white board exists. So the problem lied in how to tell the Easel Page to create and draw and broadcast the new object including the text of the object.

So the solution developed required the partial network message to be passed to the message board so it can be added to until the message was completed. Also the current entire white board was passed to the message board. This was the only way the message board could communicate with the server in order to update all white boards. The entire white board was also passed to the message board, so the message board could communicate with the white board such as to kill the window for the message board, so that frame (window that housed the message board) would disappear. And so the white board of the client that created the message gets it displayed on his own Easel Page. The way communications was set up was the sender never gets a copy of the message that is sent out back. So the sender of the network message must report the change to his own Easel Page personally.

The functionality of the rest of the text object acts just like any of the other object that can be placed on the Easel Page. The object can be cut and moved. The text appears on everyone white board if they join the session late. However, there are two other remaining problems that I had to deal with. The first problem was I was not able to correctly adjust the text font size in the message board when the user select the font list button and selected a different size. For some unexplained reason the current font size did not want to erase the characters from the screen completely. The message with the new font size would over lap the same message with the previous font size. Hopefully this can be changed in future versions.

The second problem was when drawing the text message on the Easel Page the location of the text was actually shifted up from where the text was expected to appear. This is due because text draw would place the coordinates at the top of the text, but when drawing an object on the Easel Page as a string the draw operation would place the coordinates at the bottom of the text. This caused additional problems because the user would try to click on the text object in order to move or cut it and the coordinates for the object would be completely off. This problem was solved, but it was not cleanly solved.

The Color Palette Object

The color palette has gone through multiple design and implementation phases. The original design of the color palette was it was going to be its own little box of colors like a painters palette. This was nice when the conference room layout was using frames for its layout and then after redesign issues all frames were switched over in order to support card windows. Figure 18 shows you an example of how the color palette use to be setup. The black bar on the toolkit was the color button. By simple clicking on the color button, this would ensure that the color palette would appear in case the color palette was not displayed or if it was hidden by other. In addition the color button on the tool kit would become the same color as the active color. old color palette
Figure 18

However, due to difficulties with communications between the white board and the Tool Kit, this feature caused problems. As the project proceeded more tools were being added to the Tool Kit and frames (independent window) layout were being implemented. The size of the frames including the number of frames that were need to be displayed started to become difficult windows to manage. After several redesign strategies the color palette was going to be moved inside the Tool Kit. Yet again due to difficulties of seeing the buttons for the colors in the Tool Kit, a list button was created. This solved a number of problems such as easily showing the active color.
Figure 19 Figure 20
Tool Kit  Window This is done by default by the list button class type. When you click on the color button as shown in figure 19 a menu of colors would be display in a pull down menu format as illustrated in figure 20. The background color of the menu tells the user the last active color. This allows the user to identify with the current color status at all times. Keeping mind on the windows 95 platform Tool Kit  Window showing color choses
colorsdo not show up on buttons. This limitation was posed by Java and not the implementation.

HTML files

The project specification stated that this Java project was required to run as an applet. Because of this restriction HTML files here required to be created. A total of six HTML files were created in order to permit users to find out information about the Java project and to invoke the applet through a World Wide Web browser.

Name of FileDescription of File
readme.htmlGave a brief over view of the Java applet and explained what the applet could do.
howto.htmlThis HTML file informed the user on how to invoke the Java applet
techinfo.htmlThis HTML file informed the user on some technical issues the user must be aware of in order use this Java applet
intro.htmlPresented the user with a welcome screen and a menu to go to all the other HTML files
names.htmlA list of the members that created the Java applet
conference.htmlThe HTML file that actually invoked the Java applet

Each of these HTML files were nothing fancy. They consisted of a simple text lay out and included a image of the Villanova University seal.

Contribution to Other Objects

I assisted in many aspects of the other objects, such things as creating segments of code, helping with design issues that other team members had a difficulty with, and assistance with code debugging. Below is a list of the most popular features I assisted with.

required by the Page Manager and the Chat Window. These methods allowed the specified windows to disappear and reappear on the desktop.

Contribution to Other Aspects of the Project

Testing

Testing was a rigorous task to do. It was touch because there were so many scenarios to try. Many could of been over looked very easily. I was ultimately responsible for the Tool Kit and Easel Page testing. Toward the end of the project I assisted with system integration. The testing was done on many different platforms in order to test the portability of the Java byte code. Solaris, Windows 95, and Linux (kindly provided by Mark Juliano and myself ) were the platforms used. Testing was an important aspect to this project. The more testing and the testing on a regular basis provided errors and overlooked aspects of the project. Many of these aspects brought about several major changes to the code. Some of the errors found in the code influenced the direction the code was developed often.

I performed a rigorous testing in three stages. The first stage was at the object level. Even though many of the team members did their own testing of the objects as the implemented them. I tested them on the different platforms. The Second stage was a group level. I made sure all objects for the Tool Kit and Easel Page group worked together as a whole. Since many of the team members were focusing on the objects they were making, I made confirmation that the object interacted correctly. It is understood that all team members required other object to help theirs work, I performed the final testing of all group objects.

The third stage of testing I assisted in was the system testing. I helped create network scenarios that tested the application across the network. I brought up several clients and tested the network communication among clients. It was not until the very end was it possible to run clients remotely from different machines. This kind of testing I was not able thorough test enough and should be investigated further.

Testing became every difficult toward the end. Many team members were continually making changes faster then I could test them. As the deadline approached only system and object testing was done. The other factor that made it difficult to do testing was the continual integration that was occurring. The code could not be thoroughly tested until every one completed their integration. This resulted in doing much of the testing in the late hours of the night, because the code was continually being integrated on daily basis.

Documentation

The term documentation can take on many meanings in software development. The documentation I did was focused on the following areas: design report documentation, code standards, and code documentation (commenting).

Writing the documentation was not to difficult because many of the team members formed many of the source code standards that I had set. Such standard consisted of the format of file names, which was provided by Mark Juliano. Many of the variable names match with their function and purpose. Method names were logically chosen. And code appearance made the code easier to understand.

The challenging part was commenting the code. Many of the team members did not comment the code as they went. Therefore much of the time I spent trying to understand the code they wrote in order to document it. However, once it was understood it was easy to comment other portions of code because the team made a great effort to reuse the code.


Villanova Univ. Seal Top of Paper | Previous Page | Next Page | Bottom of Paper

Written By Graham L. Mehl
Last Modified on April 23, 1996
© Villanova University