THE COMPUTER SCIENCE COURSE LIBRARY

The Computer Science Course Library (CSCL) contains Java software used in courses taught by Professor Alan Kaminsky in the Department of Computer Science at the Rochester Institute of Technology.

See:
          Description

Packages
edu.rit.crypto Package edu.rit.crypto provides various cryptographic classes.
edu.rit.crypto.blockcipher Package edu.rit.crypto.blockcipher provides classes for block ciphers.
edu.rit.crypto.gradefile Package edu.rit.crypto.gradefile provides a cryptographic Context for storing Prof.
edu.rit.crypto.hash Package edu.rit.crypto.hash provides classes for one-way hash functions.
edu.rit.crypto.mac Package edu.rit.crypto.mac provides classes for message authentication codes (MACs).
edu.rit.crypto.securechannel Package edu.rit.crypto.securechannel provides a cryptographic Context for transferring messages (wrapped objects) securely over an insecure communication channel.
edu.rit.crypto.test Package edu.rit.crypto.test contains test programs for the cryptographic classes in package edu.rit.crypto and its subpackages.
edu.rit.datacomm1.bw Package edu.rit.datacomm1.bw contains a main program that demonstrates what happens when a data signal is transmitted through a bandwidth limited channel.
edu.rit.datacomm1.nhw Package edu.rit.datacomm1.nhw provides classes for the Network Hello World program, the very first networking program anyone writes.
edu.rit.discreteopt Package edu.rit.discreteopt provides classes and algorithms for discrete optimization (also known as combinatorial optimization).
edu.rit.discreteopt.test Package edu.rit.discreteopt.test provides unit test programs for the classes in package edu.rit.discreteopt.
edu.rit.discreteopt.v1 Package edu.rit.discreteopt.v1 provides classes and algorithms for discrete optimization (also known as combinatorial optimization).
edu.rit.discretesim Package edu.rit.discretesim provides classes for writing discrete event simulation programs.
edu.rit.discretesim.v1 Package edu.rit.discretesim has superseded this package; use the classes in package edu.rit.discretesim for new development.
edu.rit.discretesim.v1.test Package edu.rit.discretesim.v1.test provides unit test programs for package edu.rit.discretesim.v1.
edu.rit.draw Package edu.rit.draw contains classes and programs for drawing diagrams and slides of all kinds.
edu.rit.draw.item Package edu.rit.draw.item contains classes for the different kinds of drawing items that can appear in a Drawing.
edu.rit.draw.item.test Package edu.rit.draw.item contains classes for the different kinds of drawing items that can appear in a Drawing.
edu.rit.ds Package edu.rit.ds contains components for developing distributed systems.
edu.rit.ds.demo Package edu.rit.ds.demo has simple demonstrations of Java remote method invocation (RMI).
edu.rit.ds.registry Package edu.rit.ds.registry contains the Registry Server, an alternative RMI registry.
edu.rit.ds.registry.test Package edu.rit.ds.registry.test contains unit test programs for the Registry Server in package edu.rit.ds.registry.
edu.rit.ds.space Package edu.rit.ds.space contains a simple tuple space.
edu.rit.ds.space.test Package edu.rit.ds.space.test contains test programs for a simple tuple space in package edu.rit.ds.space.
edu.rit.ds.test Package edu.rit.ds.test contains unit test main programs for the classes in package edu.rit.ds.
edu.rit.io Package edu.rit.io contains general input/output components.
edu.rit.nt Package edu.rit.nt contains classes and programs illustrating various aspects of number theory.
edu.rit.numeric Package edu.rit.numeric contains common classes for numerical computation.
edu.rit.numeric.fft Package edu.rit.numeric.fft provides classes for doing Fourier analysis using fast Fourier transforms (FFTs).
edu.rit.numeric.fft.test Package edu.rit.numeric.fft.test provides unit test programs for package edu.rit.numeric.fft.
edu.rit.numeric.plot Package edu.rit.numeric.plot provides classes and interfaces for plotting data.
edu.rit.numeric.plot.impl Package edu.rit.numeric.plot.impl provides low-level implementation classes for the high-level plotting classes in package edu.rit.numeric.plot.
edu.rit.numeric.prob Package edu.rit.numeric.prob provides classes and interfaces for generating pseudorandom numbers with various probability distributions.
edu.rit.numeric.stat Package edu.rit.numeric.stat provides classes and interfaces for computing statistics (mean, variance, and so on) and performing statistical tests.
edu.rit.numeric.stat.test Package edu.rit.numeric.stat.test provides unit test programs for package edu.rit.numeric.stat.
edu.rit.os1 Package edu.rit.os1 contains classes and programs illustrating concurrent software design and programming techniques for the Operating Systems I course.
edu.rit.os1.cpu Package edu.rit.os1.cpu contains classes and programs for simulating and analyzing CPU scheduling algorithms in an operating system.
edu.rit.os1.cpu.test Package edu.rit.os1.test contains main programs for testing the CPU scheduling algorithm simulation classes in package edu.rit.os1.cpu.
edu.rit.os1.disk Package edu.rit.os1.disk contains classes and programs for simulating and analyzing disks and disk head scheduling algorithms in an operating system.
edu.rit.os1.trace Package edu.rit.os1.trace contains classes and programs for simulating and analyzing memory address traces in an operating system.
edu.rit.os1.trace.test Package edu.rit.trace.test contains main programs for testing the memory address trace classes in package edu.rit.os1.trace.
edu.rit.swing Package edu.rit.swing contains GUI components designed to work with Java Swing.
edu.rit.util Package edu.rit.util contains general utility components.
edu.rit.util.test Package edu.rit.util.test contains test and demonstration programs for the general utility components in package edu.rit.util.

 

The Computer Science Course Library (CSCL) contains Java software used in courses taught by Professor Alan Kaminsky in the Department of Computer Science at the Rochester Institute of Technology.


System Requirements

The Library was developed using Java Development Kit (JDK) 1.5.0. Some classes in the Library use the Java generics and concurrency utilities introduced with JDK 1.5.0. Classes in the Library that do not use JDK 1.5.0 features may work with earlier JDK versions.


Installation

There are two versions of the CSCL distribution, an executable distribution and a source distribution.

Executable distribution. The executable distribution comes in a Java Archive (JAR) file named "csclYYYYMMDD.jar", where YYYYMMDD are the year, month, and date. The executable distribution includes the CSCL class files only. To install the executable distribution, simply store the JAR file somewhere. You may wish to change the file name, say to "cscl.jar".

Source distribution. The source distribution comes in a Java Archive (JAR) file named "csclsrcYYYYMMDD.jar", where YYYYMMDD are the year, month, and date. The source distribution includes the CSCL class files, source files, and documentation files (Javadoc). To install the source distribution, just unpack the JAR file. The source distribution expands into a subdirectory named "cscl". If you already have a subdirectory of that name which you want to save, be sure to unpack the JAR file in some other directory. Documentation is stored under the directory "cscl/doc"; point your HTML browser to that directory. Java source files and class files are stored under the directory "cscl/lib".


Usage

Executable distribution. When compiling and executing Java programs that use the Library, if you have installed the executable distribution, you must set your classpath to include the CSCL JAR file. Here is an example of a command for the bash shell to set the classpath to the current directory plus the CSCL JAR file:

export CLASSPATH=.:/home/fac/ark/public_html/cscl.jar

Here is an example of a command for the csh shell to set the classpath to the current directory plus the CSCL JAR file:

setenv CLASSPATH .:/home/fac/ark/public_html/cscl.jar

Source distribution. When compiling and executing Java programs that use the Library, if you have installed the source distribution, you must set your classpath to include the top-level directory under which the Library's Java class files are stored. Here is an example of a command for the bash shell to set the classpath to the current directory plus the CSCL directory:

export CLASSPATH=.:/home/fac/ark/public_html/cscl/lib

Here is an example of a command for the csh shell to set the classpath to the current directory plus the CSCL directory:

setenv CLASSPATH .:/home/fac/ark/public_html/cscl/lib


License

The documentation and Java source files in the Computer Science Course Library ("The Library") are copyright © 2002-2013 by Alan Kaminsky. All rights reserved. For further information, contact the author, Alan Kaminsky, at ark­@­cs.rit.edu.

The Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

The Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A copy of the GNU General Public License is provided in the file gpl.txt. You may also obtain a copy of the GNU General Public License on the World Wide Web at http://www.gnu.org/licenses/gpl.html.


Revision History

01-Mar-2013
In package edu.rit.os1.trace.cpu: Fixed a bug in class CpuScheduler; the during of the running job's CPU burst was not calculated correctly in all cases. Thank you to Oleg Vyshnyvetskyi for discovering the bug.

05-Feb-2013
In package edu.rit.os1.trace.cpu: Fixed a bug in class CpuScheduler; the time at which the running job becomes blocked was not calculated correctly in all cases. Thank you to Oleg Vyshnyvetskyi for discovering the bug.

28-Jan-2013
In package edu.rit.os1.trace.test: Added a feature to class VM; the data for the optimal (OPT) page replacement algorithm is plotted along with the data for the given page replacement algorithm, if the given page replacement algorithm is not OPT.

28-Dec-2012
In package edu.rit.ds: Fixed a bug in class RemoteEventGenerator; an exception was thrown if an event registration was added while in the process of reporting an event.

In the unnamed package: Added class ncsl, a program that computes the non-commentary source lines (NCSL) metric for a Java source file or files.

15-Mar-2011
Fixed bugs in package edu.rit.swing; the JTextField subclasses incorrectly overrode the JComponent.isValid() method; this method's name was changed to isOkay().

29-Apr-2010
In interface edu.rit.ds.space.Space: Fixed an error in the Javadoc for the takeWithLease() method with a timeout; the description of the return value was incorrect.

16-Mar-2010
In class edu.rit.numeric.XYZSeries: Added the ability to calculate a linear regression of (x,y) data with z being the standard deviation of the measurement error in y, assuming the measurement error distribution is a zero-mean Gaussian.

23-Jan-2010
In package edu.rit.ds: Added the currentTicket() operation to class TicketQueue. Fixed a bug in class Ticket; when a ticket was canceled, the superclass's remote object was unexported prematurely.

19-Jan-2010
In class edu.rit.ds.Lease: Added the expire() operation.

16-Jan-2010
In class edu.rit.ds.Lease: Added the stopRenewing() operation. Fixed a bug; when one process canceled a lease, the other process was not notified of the cancellation in all cases. Thank you to Philip Doughty for discovering the bug.

07-Jan-2010
Changed class edu.rit.ds.registry.RegistryServer so that if the multicast discovery thread cannot be created, the Registry Server will proceed anyway without the multicast discovery capability. This lets the Registry Server run on the "localhost" network interface even if the host is not connected to an external network.

23-Dec-2009
In package edu.rit.ds.space: Changed one of the rules for matching templates and tuples. Now, a null slot (wildcard) will match another null slot.

12-Dec-2009
In class edu.rit.ds.registry.RegistryEvent: Added some accessor methods to retrieve information about the event.

03-Dec-2009
In package edu.rit.ds.space, interface Space: Added the takeWithLease() operation; this establishes a lease on the take operation; if the lease expires, the take operation is automatically undone. Changed the behavior of the write() operation with a lease; if the lease is canceled, the tuple will stay in the tuple space forever. Removed the antiRead() operation.

In package edu.rit.ds.space.test: Removed the AntiRead program.

23-Oct-2009
Rewrote the reactive tabu search classes in package edu.rit.discreteopt to be more flexible and more object-oriented. The classes formerly in package edu.rit.discreteopt were moved to package edu.rit.discreteopt.v1. Added package edu.rit.discreteopt.test with a reactive tabu search program for the graph coloring problem.

06-Oct-2009
Fixed bug in class edu.rit.numeric.plot.impl.XYPlot: An exception was thrown if a plot series had fewer than two data points.

02-Oct-2009
Fixed bugs in class edu.rit.discretesim.BoundedFifoSingleQueue: The buffer array was declared as the wrong type, causing runtime exceptions; the read and write indexes were not incremented properly when removing and putting items.

29-Sep-2009
In class edu.rit.discretesim.Server: Added the ability to put Items removed from a Queue into a Place.

25-Sep-2009
In package edu.rit.discretesim: Made the item class a generic type parameter in all classes and interfaces that deal with items. Added interface Place to represent a place to put items. Some minor changes in the API.

19-Sep-2009
Added some minor refinements to package edu.rit.discretesim.

18-Sep-2009
Rewrote the classes in package edu.rit.discretesim to be more flexible and more object-oriented. The classes formerly in package edu.rit.discretesim were moved to package edu.rit.discretesim.v1. The classes formerly in package edu.rit.discretesim.test were moved to package edu.rit.discretesim.v1.test.

04-Sep-2009
Removed the following packages which I no longer use in my classes: edu.rit.datacomm1.ants, edu.rit.datacomm1.whack, edu.rit.datacomm2, edu.rit.graph, edu.rit.petrinet, edu.rit.ron, edu.rit.slides, edu.rit.thcompalg.

20-Aug-2009
Added package edu.rit.crypto.gradefile with classes for secure grade files using AES-256 for confidentiality and HMAC-SHA-256 for authentication and integrity. Wrote a new secure grade file viewing program, edu.rit.crypto.gradefile.View.

04-Feb-2009
In package edu.rit.ds.space: Fixed a bug in class SimpleSpaceBackend; if an anti-read operation was waiting for a tuple to go away, and the tuple was removed because the tuple's lease expired, the anti-read operation would not immediately detect the tuple's disappearance. Thank you to Tejas Dharamshi for discovering the bug.

20-Jan-2009
The following packages were removed, as I no longer use them in my teaching (all are under package edu.rit): dscv1, dscv2, dscv3, dscv4, dscv5, dwsv1, dwsv2, dwsv3, dwsv4, dwsv5, dwsv6, net, net.test, rmi, rmi.demo, rmi.impl, rmi.impl.basic, rmi.impl.test, space, space.test.

In package edu.rit.ds.space: Fixed several bugs in class SimpleSpaceBackend; the logic for detecting non-matching tuples for the "anti-read" operation was incorrect.

02-Jan-2009
In package edu.rit.ds.space: Added the "anti-read" tuple space operation to interface Space and class SimpleSpace. In package edu.rit.ds.space.test: Added the AntiRead program to test the "anti-read" tuple space operation.

28-Oct-2008
In package edu.rit.os1.disk: Removed programs SimulatorFifo and SimulatorSstf. Replaced them with a single program, class DiskSimulator, that takes the name of the disk head scheduling algorithm class as a command line argument.

10-Oct-2008
In package edu.rit.os1.cpu.test: Added class Test02, another program to illustrate CPU scheduling algorithms.

16-Sep-2008
In package edu.rit.os1: Added class UpDown5 to demonstrate thread synchronization using an atomic compare-and-set operation.

In class edu.rit.numeric.plot.Plot: Changed the default title font to sans-serif, bold, 14 point. Changed the default axis and label font to sans-serif, plain, 12 point. Increased the default margins and title offsets.

14-Jul-2008
In packages edu.rit.draw and edu.rit.draw.item: Removed the ability to rotate a DrawingItem. Added the ability to scale, shear, and rotate a Group. To apply transformations to one or more DrawingItems, put the DrawingItems in a Group and apply transformations to the Group. This change reduces the size of a serialized Drawing object. As a result of this change, Drawing objects serialized with previous versions of the Library are incompatible with the present version of the Library.

01-May-2008
Redesigned package edu.rit.crypto and its subpackages. The package now has "cryptographic contexts" that produce "wrapped objects." Subpackages provide implementations of the AES block cipher with a 256-bit key, the SHA-256 one-way hash function, the HMAC-SHA-256 message authentication code with a 256-bit key, and a two-party cryptographic context for secure communication over an insecure channel.

Removed package edu.rit.rmi.impl.securev1 which contained a secure RMI implementation.

10-Jan-2008
Added class edu.rit.util.Hex with static methods for converting primitive types and byte arrays to and from strings in hexadecimal notation.

12-Dec-2007
In package edu.rit.ds.demo: Fixed documentation bugs in classes Eratosthenes, Factor, and Matlock; the Java command lines referred to the wrong class names.

In the unnamed package: Added class View, a main program that can display either a drawing (class edu.rit.draw.Drawing) or a plot (class edu.rit.numeric.plot.Plot) stored in a file. The new View program supersedes the old edu.rit.draw.View program which was removed.

In class edu.rit.numeric.plot.Plot: Made the class serializable. Added static methods to read and write Plot objects from and to files. Removed the display() and repaint() methods; their functionality is now available through the Viewable interface.

In package edu.rit.swing: Added interface Viewable which extends interface Displayable; to show itself on the screen, a Viewable object can return a DisplayableFrame. Drawings and plots are now Viewable objects. Changed class DisplayableFrame so that when it saves the displayable object in a PNG file, the object is saved at its zoomed size.

08-Dec-2007
In the unnamed package: Added class ncc, a main program to compute the Non-Comment Characters (NCC) metric for a group of Java source files.

27-Nov-2007
The Computer Science Course Library is now released under Version 3 of the GNU General Public License.

In package edu.rit.draw.item: Added class Polygon.

21-Oct-2007
In class edu.rit.os1.disk.Scheduler: Added the number of tracks on the disk and the number of sectors on the track as arguments of the getRequest() method. (Some disk head scheduling algorithms require this information.)

20-Oct-2007
In package edu.rit.os1.disk: Added program SimulatorSstf, which simulates the Shortest Seek Time First (SSTF) disk head scheduling algorithm.

18-Oct-2007
Added package edu.rit.os1.disk with classes and programs for simulating disk head scheduling algorithms. Program SimulatorFifo simulates the First In First Out (FIFO) disk head scheduling algorithm.

Upgraded packages edu.rit.numeric, edu.rit.numeric.plot, and edu.rit.numeric.plot.impl with the latest versions from the Parallel Java Library.

In class edu.rit.numeric.Plot: Added a "Format" menu to the plot window that lets the user change plot attributes interactively.

In class edu.rit.swing.DisplayableFrame: Added a "Fit Window" menu item to the "View" menu that resizes the window to fit the displayable object.

26-Sep-2007
Upgraded class edu.rit.swing.DisplayableFrame and package edu.rit.draw and its subpackages with the latest versions from the Parallel Java Library.

24-Sep-2007
In package edu.rit.os1: Added class DP5, an implementation of Dining Philosophers that addresses both deadlock and starvation.

Removed class edu.rit.util.CpuStopwatch. This class needs to be rewritten not to use native methods.

Removed package edu.rit.thcompalg.sort, which uses class edu.rit.util.CpuStopwatch.

01-May-2007
In package edu.rit.ds.registry: Changed the Registry Server to listen for socket connections on all network interfaces by default.

22-Mar-2007
In package edu.rit.draw.item: Added the ability to specify bold, italic, superscript, and subscript characters in a Text item.

07-Feb-2007
In package edu.rit.ds: Fixed a bug in class Lease; a race condition could cause renewing a lease to throw a NullPointerException.

04-Feb-2007
In package edu.rit.ds: Added components for distributed mutual exclusion -- class Ticket, class TicketQueue, interface TicketListener.

13-Jan-2007
In package edu.rit.ds.space: Fixed a bug in class SimpleSpaceBackend; if multiple read requests were pending, writing a matching tuple would cause only one of the read requests to succeed, not all of them.

08-Jan-2007
In package edu.rit.ds.space: Fixed a bug in class SimpleSpaceFrontend; an iterator could fail with an incorrect lease expiration even though the tuple space had not failed.

07-Jan-2007
Wrote a new version of the simple tuple space. The new version is in package edu.rit.ds.space and uses Java RMI. The old version remains in package edu.rit.space and uses the RMI in the Computer Science Course Library.

In package edu.rit.ds: Added the leaseRenewed() method to interface LeaseListener. Added the leaseRenewed() method to all classes throughout the Library that implement interface LeaseListener. Changed class Lease not to hold the lease object's synchronization lock when calling the lease listener; this eliminated various possible deadlock situations.

12-Dec-2006
Changed the remote object launcher program, Start (in the unnamed package), to install a security manager if the "java.security.policy" Java system property is defined.

Fixed a bug in class edu.rit.ds.registry.RegistryBackend: When a new object is rebound to the same name as an existing object, the existing object's lease was not canceled.

10-Dec-2006
Added packages edu.rit.ds, edu.rit.ds.demo, edu.rit.ds.registry, edu.rit.ds.registry.test, and edu.rit.ds.test. These packages contain components for building distributed systems using Java RMI.

In package edu.rit.draw.item: Added class Arc.

22-Oct-2006
In class edu.rit.os1.cpu.CpuScheduler: Changed the definition of response time for a job. Now, a job's response time is the amount of time from when the job entered the ready state to when the job finished its subsequent CPU burst, averaged over all the CPU bursts. Before, a job's response time was the amount of time from when the job entered the system to when the job finished its first CPU burst.

04-Oct-2006
In package edu.rit.datacomm1.ants: Fixed a bug in class ClientImpl; not all of the methods were synchronized.

24-Sep-2006
In package edu.rit.os1: Added program ReaderWriterDemo1 to demonstrate the reader-writer pattern for thread coordination.

In package edu.rit.draw.item: Added the ability to rotate any DrawingItem by an arbitrary angle around an arbitrary center point.

07-Sep-2006
In package edu.rit.nt: Changed the 32-bit prime number classes to obtain the list of primes from a URL (such as a web address) instead of a disk file.

20-Jul-2006
Added package edu.rit.swing with classes for Swing components. Moved interfaces Drawable and Displayable from package edu.rit.numeric.plot to package edu.rit.swing. Moved classes DisplayableFrame, DisplayableIO, DisplayableList, DisplayablePanel, and FileTypeFilter from package edu.rit.numeric.plot to package edu.rit.swing. Moved classes Transcript and TranscriptFrame from package edu.rit.util to package edu.rit.swing.

Added package edu.rit.io with I/O components. Added classes SuffixFileFilter and SuffixFilenameFilter.

In package edu.rit.numeric: Added class FileXYSeries to read an X-Y data series from a file.

In package edu.rit.numeric.plot: In class Label, added the ability to position a label in pixel coordinates rather than plot coordinates. Added class Plot, an easy-to-use high-level API for creating and displaying plots.

12-Jul-2006
In package edu.rit.draw.item: Changed class DottedOutline to draw outlines with round dots. Added class SquareDottedOutline to draw outlines with square dots. Added the ability to draw round-cornered lines to class Line.

Added package edu.rit.draw.item.test with unit test programs for the drawing classes.

In package edu.rit.numeric.plot: Fixed a bug in class DisplayableIO; the background of a displayable object was not filled in properly in all cases when writing the displayable object to a PNG file.

11-Jul-2006
Added packages edu.rit.draw and edu.rit.draw.item. These provide capabilities for making drawings and slides similar to packages edu.rit.slides and edu.rit.slides.items, except they have been redesigned to make it easier to write Java programs for making drawings and slides. Packages edu.rit.slides and edu.rit.slides.items were deprecated.

In package edu.rit.numeric.plot: Added the ability to zoom the display in classes DisplayablePanel and DisplayableFrame.

11-May-2006
In package edu.rit.ron.rmtp: Added the third, fourth, and fifth versions of connections for the RIT Overlay Network (RON) Message Transport Protocol (RMTP). In version 5, connections can be set up, torn down, and used to transfer data. A stop-and-wait protocol is used for flow control. Connections assume the underlying Network Layer is unreliable and use timeouts and retransmissions to recover from lost packets. The timeout interval is calculated using the algorithm in RFC 2988.

09-May-2006
In package edu.rit.ron.rmtp: Added the second version of connections for the RIT Overlay Network (RON) Message Transport Protocol (RMTP). At present, connections can be set up, torn down, and used to transfer data. However, connections assume the underlying Network Layer is reliable and never loses or reorders packets.

04-May-2006
In package edu.rit.ron.rmtp: Added the initial implementation of the RIT Overlay Network (RON) Message Transport Protocol (RMTP). At present, connections can be set up and torn down, but they do not transfer data.

01-May-2006
Added package edu.rit.ron.rmtp with the initial version of the RIT Overlay Network (RON) Message Transport Protocol (RMTP), which is analogous to TCP.

27-Apr-2006
Added package edu.rit.datacomm2.delay back with classes rewritten to use the new discrete event simulation classes and a program to simulate a network delay problem posed in Andrew Tanenbaum's original Computer Networks textbook.

25-Apr-2006
Rewrote the discrete event simulation classes in package edu.rit.discretesim to make them easier to use and easier to understand. Changed the test programs in package edu.rit.discretesim.test accordingly. Temporarily removed packages edu.rit.datacomm2.delay and edu.rit.datacomm2.routing; these need to be updated to use the new discrete event simulation classes.

In package edu.rit.numeric.stat: Split class Accumulator into a base class and several subclasses. The subclasses provide different tradeoffs between functionality and processing/storage requirements.

19-Apr-2006
Added package edu.rit.ron.delay with programs for measuring packet delays in the RIT Overlay Network (RON).

In package edu.rit.ron.rcmp: Added the Timestamp Request and Timestamp Reply messages to the RON Control Message Protocol (RCMP).

13-Apr-2006
In package edu.rit.datacomm2.traffic: Added class ConnectedNetwork03 with a Monte Carlo analysis of network connectivity for another network.

11-Apr-2006
Added the reportUnreachablePorts() method to class edu.rit.ron.RouterInterface.

23-Mar-2006
Added package edu.rit.ron.rcmp with the initial version of the RIT Overlay Network (RON) Control Message Protocol (RCMP), which is analogous to ICMP. Modified classes in packages edu.rit.ron and edu.rit.ron.test to incorporate RCMP.

21-Mar-2006
Added package edu.rit.ron with the initial version of the RIT Overlay Network (RON). Added package edu.rit.ron.test with a unit test program for the RON router.

16-Mar-2006
Added package edu.rit.datacomm2.echo with several versions of the Echo Server, a network application that illustrates Java New I/O. Two traffic generator programs for the Echo Server are also included.

Removed packages edu.rit.image, edu.rit.mpi, and edu.rit.openmp. These contained parallel programs written in Java. Equivalent programs can now be found in the Parallel Java Library.

08-Feb-2006
In packages edu.rit.dscv4 and edu.rit.dscv5: Added the isReleased() method to class TicketBackendImpl. Changed the subclassTicketFinished() method of class TicketQueue to pass in the TicketBackendImpl object for the ticket that finished.

25-Oct-2005
Added package edu.rit.os1.trace with classes for analyzing memory traces and simulating virtual memory page replacement algorithms.

Added package edu.rit.os1.trace.test with programs to display a plot of a memory trace and to simulate virtual memory page replacement algorithms.

22-Oct-2005
Moved class ServerAdapter from package edu.rit.datacomm1.whack.tcp to package edu.rit.datacomm1.whack.

Added package edu.rit.datacomm1.whack.udp with client and server programs for the Game of Whack using UDP with object serialization for network communication.

20-Oct-2005
In package edu.rit.os1.cpu: Added class PriorityReadyQueue to simulate the ready queue for the highest priority first CPU scheduling algorithm.

In package edu.rit.os1.cpu.test: Added program HPF to simulate the highest priority first CPU scheduling algorithm.

19-Oct-2005
In package edu.rit.os1.cpu: Added class SjfReadyQueue to simulate the ready queue for the shortest job first CPU scheduling algorithm.

In package edu.rit.os1.cpu.test: Added program SJF to simulate the shortest job first CPU scheduling algorithm.

Added package edu.rit.datacomm1.ants.tcpbin with client and server programs for the Advanced Number Theory Server using TCP with binary I/O for network communication.

Added package edu.rit.datacomm1.ants.udp with client and server programs for the Advanced Number Theory Server using UDP with object serialization for network communication.

16-Oct-2005
Added package edu.rit.datacomm1.whack.tcp with client and server programs for the Game of Whack using TCP for network communication.

12-Oct-2005
In package edu.rit.os1.cpu: Renamed class JobQueue to ReadyQueue. Renamed class FifoJobQueue to FifoReadyQueue. Changed the design of the ready queue to support preemption of the running process due to jobs being added to the ready queue or due to expiration of a time quantum. Added class GeneralJob with a more general implementation of a job.

In package edu.rit.os1.cpu.test: Added program FCFS to simulate the first-come-first-served CPU scheduling algorithm. Added program RR to simulate the round robin CPU scheduling algorithm.

11-Oct-2005
Added package edu.rit.datacomm1.ants.tcp with the Advanced Number Theory Server (ANTS) client and server programs using TCP for network communication.

10-Oct-2005
Added package edu.rit.os1.cpu with classes for simulating CPU scheduling algorithms. Added package edu.rit.os1.cpu.test with a couple simple CPU scheduling algorithm simulation programs.

09-Oct-2005
In package edu.rit.datacomm1.ants for the Advanced Number Theory Server (ANTS): Added the AntsTest unit test main program.

In package edu.rit.datacomm1.whack for the Game of Whack: Revised the server and client interfaces and the application protocol design. Added the server and client implementation object classes. Added the client UI classes. Added the WhackTest unit test main program.

02-Oct-2005
In package edu.rit.datacomm1.ants for the Advanced Number Theory Server (ANTS): Revised the server and client interfaces and the application protocol design. Added the server and client implementation object classes. Added the client UI class.

Added package edu.rit.datacomm1.whack with server and client interfaces for the Game of Whack.

28-Sep-2005
In package edu.rit.os1: Rewrote class DP1 and added classes DP2, DP3, and DP4, the Dining Philosophers Versions 1 through 4.

27-Sep-2005
Removed packages edu.rit.datacomm1.clb, edu.rit.datacomm1.clb.tcp, edu.rit.datacomm1.clb.udp, edu.rit.datacomm1.dataio, and edu.rit.datacomm1.nhw2. These packages contained old examples of network applications that will be superseded by new examples.

Added package edu.rit.datacomm1.ants with server and client interfaces for the Advanced Number Theory Server (ANTS).

In package edu.rit.datacomm1.nhw: Tweaked the client and server programs a bit.

In package edu.rit.os1: Fixed a bug in class ReaderWriterMap1; the iterator released the read lock too soon. Added class ReaderWriterMap2. Added class DP1, the Dining Philosophers Version 1.

26-Sep-2005
Updated package edu.rit.os1 with additional classes and programs illustrating concurrent software design and programming techniques for the Operating Systems I course.

20-Sep-2005
Updated package edu.rit.os1 with additional classes and programs illustrating concurrent software design and programming techniques for the Operating Systems I course.

In package edu.rit.util: Added class Transcript and class TranscriptWindow for displaying a text transcript in a separate window on the screen.

18-Sep-2005
Updated package edu.rit.os1 with additional classes and programs illustrating concurrent software design and programming techniques for the Operating Systems I course.

Added package edu.rit.nt containing classes and programs illustrating various aspects of number theory.

12-Sep-2005
Added package edu.rit.os1 with classes and programs illustrating concurrent software design and programming techniques for the Operating Systems I course.

10-Sep-2005
The graph classes in package edu.rit.graph and the network flow classes in package edu.rit.graph.test were rewritten to use Java generics. A graph's vertex objects and edge label objects can now be of specified types which are checked at compile time.

All classes in the Library that use the new generic classes were updated accordingly. These include the Petri net classes in packages edu.rit.petrinet and edu.rit.petrinet.test; and the network analysis programs in packages edu.rit.datacomm2.protocol and edu.rit.datacomm2.traffic.

In package edu.rit.util: Added class ArrayStack.

23-Aug-2005
In package edu.rit.numeric: Added class BasicFloatXYSeries to provide an XY series of type float. Added class LinearSolve to solve linear systems of equations using LU decomposition.

09-May-2005
In package edu.rit.crypto.pki: Added interface IdentityChecker, class AnyIdentityChecker, and class FixedIdentityChecker. This allows more flexible user-defined checking of identities during digital signature verification. Changed package edu.rit.crypto.keyexchange to use identity checkers during the key exchange protocol.

Added package edu.rit.space with an implementation of a simple tuple space, plus package edu.rit.space.test with unit test main programs for the simple tuple space.

Added package edu.rit.dwsv6 with the Document Workflow System Version 6, implemented using the simple tuple space.

In package edu.rit.util: Added class SerialNumberMap.

04-May-2005
Added package edu.rit.crypto.random with classes for cryptographic pseudorandom number generators. Added package edu.rit.crypto.pki with classes for RSA digital signatures and a certificate authority for a simple public key infrastructure. Rewrote package edu.rit.crypto.keyexchange with classes for Diffie-Hellman key exchange authenticated using the public key infrastructure.

20-Apr-2005
Made some changes to the implementation of RMI. In package edu.rit.net: Added method isInputShutdown() to class Mailbox. In package edu.rit.rmi.impl: Added method isRemoteCallInProgress() to class RemoteObject. In package edu.rit.rmi.impl.basic: Fixed a bug in classes BasicServerChannel and BasicServerRequest; the mailbox was not closed properly when a basic remote object was unexported.

Made some changes to the design of tickets in the Distributed System Components Version 4 in package edu.rit.dscv4. In the new design, a ticket is issued without blocking, and the client must then call waitForTurn() on the ticket before proceeding. Interfaces TicketFrontend and TicketBackend, and classes TicketFrontendImpl and TicketBackendImpl, were added to implement the new design.

The Document Workflow System Version 4 client programs and Processor class in package edu.rit.dwsv4 were changed to use the new ticket design.

23-Mar-2005
Changed the implementations of the classes in package edu.rit.rmi and subpackages thereof to use the new features of Java 5. The RmiContainer was changed to use a cached thread pool from the Java Concurrency Utilities to perform remote method invocations. All uses of classes from the Java Collections Framework were changed to use generics and for-each loops.

15-Feb-2005
Added package edu.rit.openmp.sort with sequential and SMP parallel programs for sorting algorithms. Added package edu.rit.mpi.sort with sequential and MPI parallel programs for sorting algorithms.

10-Feb-2005
In package edu.rit.mpi.particles: Added program ProtonClu4 to illustrate overlapped computation and communication done another way.

Added package edu.rit.mpi.number with programs to calculate the Prime Number Function. This illustrates parallel reduction and memory scalability.

In package edu.rit.mpi.util: Fixed a bug in class IntParallelMatrix; the sendReceive() methods' arguments had the wrong type.

In package edu.rit.mpi.image: Fixed a bug in class FullColorImage; the image's dimensions were swapped -- height should have been width and vice versa.

08-Feb-2005
In package edu.rit.mpi.util: Added send-receive operations to classes DoubleParallelMatrix and IntParallelMatrix.

In package edu.rit.mpi.particles: Added program ProtonClu2 to illustrate pipelining. Added program ProtonClu3 to illustrate overlapped computation and communication.

03-Feb-2005
In package edu.rit.mpi.util: The concept of matrix cursors was eliminated. Now, matrix elements are accessed by calling methods directly on the matrix object. Added classes Vector2D and Vector2DArray for manipulating two-dimensional vectors of double precision floating point values in an MPI-based parallel program.

Added package edu.rit.mpi.particles with the Particle Simulation, an N-body problem. This uses the all-to-all broadcast pattern.

01-Feb-2005
Redesigned the parallel matrix classes in package edu.rit.mpi.util. One set of classes provides matrix storage allocation (DoubleMatrix, IntMatrix). Another set of classes, layered on top of the previous set of classes, provides matrix communication operations (DoubleParallelMatrix, IntParallelMatrix). A third set of classes, extending the previous set of classes, provides further matrix communication operations (DoubleRowSliceMatrix, DoubleColumnSliceMatrix, (IntRowSliceMatrix, IntColumnSliceMatrix).

Added package edu.rit.mpi.network with MPI-based parallel network algorithms. These use the one-to-all broadcast pattern.

31-Jan-2005
In package edu.rit.datacomm2.delay: Added a simulation of a network with constant packet sizes to programs Tanenbaum03 and Tanenbaum04.

In package edu.rit.numeric.plot: Added diamonds to class Dots as another shape for plotting points.

27-Jan-2005
In package edu.rit.mpi.util: Added class IntRowChopMatrix providing a parallel "row chopped" matrix. Added class RangeScheduler for writing programs using the parallel master-worker pattern.

In package edu.rit.mpi.util.test: Added class Test04 with a unit test main program for class edu.rit.mpi.util.IntRowChopMatrix.

In package edu.rit.mpi.fractal: Added class MandelbrotSetClu2 with a parallel program to compute the Mandelbrot Set; the program uses the parallel master-worker pattern to achieve load balancing.

In package edu.rit.mpi.timing: Added class TimeInit with a program for timing MPI initialization.

25-Jan-2005
In package edu.rit.mpi.util: Added class Cursor as the abstract base class for parallel matrix cursors. Redesigned the double precision parallel matrix classes. Class DoubleMatrix now supports only broadcasting. Subclass DoubleRowSliceMatrix supports scattering and gathering of row slices. Subclass DoubleColumnSliceMatrix supports scattering and gathering of column slices.

Added package edu.rit.mpi.image with components for parallel images of various kinds, layered on top of parallel matrices. Only full color (24-bit color) images are supported at this time.

Added package edu.rit.mpi.fractal with MPI-based parallel programs for computing images of fractals. These are typically massively parallel problems that require load balancing for optimum performance.

In package edu.rit.slides: Added class SlideShowToHtml, a program that converts a slide show to a series of HTML pages for publishing a slide show on the Web.

20-Jan-2005
In package edu.rit.mpi.util: Added methods to class DoubleMatrix for broadcasting, scattering, and gathering a matrix (two-dimensional array) of double precision floating point values. Added the contains() method to class Range.

Added package edu.rit.mpi.util.test with unit test programs for the classes in package edu.rit.mpi.util.

18-Jan-2005
Added package edu.rit.mpi.timing with programs for measuring how long it takes to do an MPI message send and an MPI message broadcast.

In package edu.rit.mpi.util: Added class DoubleMatrix with an initial version of a matrix (two-dimensional array) of double precision floating point values.

17-Jan-2005
In package edu.rit.datacomm2.traffic: Added classes NetworkDesign04, NetworkConfiguration04, NetworkConfigurationFactory04, and NodeInfo with another reactive tabu search program for solving an optimal network design problem.

In package edu.rit.slides: Added class SlideShow to encapsulate a whole slide show. Added class Projector to display a slide show on the screen.

In package edu.rit.numeric.plot: Added class DisplayableList. Added autofitting to class DisplayablePanel.

13-Jan-2005
Added package edu.rit.mpi.keysearch with MPI-based parallel programs for a known plaintext attack on AES using exhaustive key search.

Added package edu.rit.mpi.util with utility classes for writing MPI-based parallel programs.

12-Jan-2005
In package edu.rit.datacomm2.traffic: Changed class ConnectedNetwork01 to measure network failure probability versus link failure probability for a network whose topology is an N-node complete graph using Monte Carlo simulation. Added class ConnectedNetwork02 to measure network failure probability versus link failure probability for a certain 12-node, 16-link network using Monte Carlo simulation.

06-Jan-2005
Added package edu.rit.openmp.monte with OpenMP-based parallel Monte Carlo programs.

Added package edu.rit.openmp.network with OpenMP-based parallel network algorithms.

In package edu.rit.numeric.plot, class LogarithmicAxis: Added the autoscale() method.

03-Jan-2005
Added package edu.rit.openmp.fractal with OpenMP-based parallel programs for computing images of fractals. These are typically massively parallel problems that require load balancing for optimum performance.

In package edu.rit.datacomm2.protocols: Added class rdt30a to analyze a simplified version of Kurose & Ross's Reliable Data Transfer Protocol 3.0.

In package edu.rit.image: Fixed a bug in class FullColorPen, method setPixelHue(); the pixel color was not set correctly when the hue was exactly 1.0.

In package edu.rit.numeric.plot: In class Grid: Added the ability to draw gridlines at major and minor divisions of the axes.

In package edu.rit.slides: Fixed a bug in class Slide; an annoying gray stripe appeared at the edge of the image if the slide was not an integral number of pixels wide or high. Fixed a bug in class View; the viewer program aborted if it tried to read the slide file while another program was writing the slide file.

31-Dec-2004
Added package edu.rit.image with components for creating images of various kinds and writing them to a file in Portable Network Graphics (PNG) format.

Added the parjob and parjoblist programs for submitting parallel programming jobs to a special-purpose job queue on one of the RIT Computer Science Department's parallel computers.

16-Dec-2004
In package edu.rit.openmp.keysearch, added more OpenMP-based parallel programs for a known plaintext attack on AES using exhaustive key search.

In package edu.rit.numeric.plot, changed class LogarithmicAxis so that the lower and upper bounds of the axis must be integer powers of 10.

09-Dec-2004
Added package edu.rit.openmp.keysearch with OpenMP-based parallel programs for a known plaintext attack on AES using exhaustive key search.

In package edu.rit.crypto.blockcipher, added the setKey(byte[]) method and the encrypt(byte[],byte[]) method to class BlockCipher and class AES256Cipher.

Added packages edu.rit.slides and edu.rit.slides.items for creating and displaying slides and diagrams of all kinds.

12-Oct-2004
In package edu.rit.datacomm2.traffic, added another program (class NetworkDesign03) to solve an optimal network design problem using a reactive tabu search.

09-Oct-2004
Revised the classes and interfaces in package edu.rit.discreteopt to make it easier to write reactive tabu search programs. Revised the classes in package edu.rit.thcompalg.tsp accordingly. In package edu.rit.datacomm2.traffic, added two programs (class NetworkDesign01 and NetworkDesign02) to solve an optimal network design problem using a reactive tabu search.

07-Oct-2004
Added class edu.rit.datacomm2.traffic.ConnectedNetwork01, a Monte Carlo program that determines the probability that a network is connected, given the probability that each potential link in the network exists.

13-Sep-2004
Added class edu.rit.numeric.Complex for doing double precision complex arithmetic.

07-Jun-2004
Changed the method of calculating the standard deviation of measurement error in class edu.rit.thcompalg.sort.Measure.

14-May-2004
Fixed a bug in the subgraph() method in class edu.rit.graph.Digraph and class edu.rit.graph.UndirectedGraph. In the subgraph, edges were not eliminated properly if the edge predicate returned false.

06-May-2004
Fixed a bug in class edu.rit.rmi.impl.basic.BasicServerRequest. Because the basic server request objects used the default timer thread to send keepalive messages during remote method calls, the keepalive messages might not get sent on time if the application also used the default timer thread. This was fixed by giving the basic server request objects their own separate timer thread.

05-May-2004
(1) Added package edu.rit.crypto.keyexchange with a demonstration of Diffie-Hellman Key Exchange. (2) Changed some details in the design of the Secure RMI Channel Version 1.

03-May-2004
(1) Added package edu.rit.rmi.impl.securev1, providing the Secure RMI Channel Version 1. All remote objects exported with this channel perform remote method calls with authentication and encryption using a fixed session key. (2) Made some changes to class RmiInvocationHandler and class RmiContainer in package edu.rit.rmi.impl, which were needed by the Secure RMI Channel Version 1. Existing code using the Basic RMI Channel is not affected. (3) Added a secure version of the RMI factoring demonstration in package edu.rit.rmi.demo.

27-Apr-2004
(1) Added classes QueueFactory, SingleServerFifoQueueFactory, and BoundedSingleServerFifoQueueFactory in package edu.rit.discretesim. (2) Added class Tanenbaum04 in package edu.rit.datacomm2.delay with another network delay simulation program using bounded link queues.

23-Apr-2004
(1) Fixed a bug in class edu.rit.rmi.impl.basic.BasicClientRequest. Because the basic client request objects used the default timer thread to do timeouts on remote method calls, it was possible to get into a deadlock if the application also used the default timer thread. This was fixed by giving the basic client request objects their own separate timer thread. (2) Changed class edu.rit.discretesim.MMGenerator no longer to require the mean arrival rate to be less than the mean service rate.

06-Apr-2004
Added several programs, classes, and interfaces to package edu.rit.datacomm2.protocols to simulate the operation of the Ethernet CSMA/CD channel access protocol.

31-Mar-2004
Changed the design of the RMI channel to allow the server channel object to validate an object's remote interfaces before exporting the object; this lets different RMI channel implementations enforce different remote method call semantics (see interface edu.rit.rmi.impl.ServerChannel). Fixed a bug in class Monitor2 in packages edu.rit.dwsv2, edu.rit.dwsv3, edu.rit.dwsv4, and edu.rit.dwsv5; the system could deadlock if the monitor was polling a document processor object at the same time as the document processor object was reporting a remote event to the monitor.

25-Mar-2004
Fixed a bug in class edu.rit.rmi.impl.basic.BasicServerChannel. The server thread was not marked as a daemon thread. If a program exported any basic remote objects, this prevented the process from exiting when the main() method returned.

18-Mar-2004
Added class Bell212ASpectrum in package edu.rit.datacomm2.signals, illustrating a multibit differential phase shift keying (DPSK) modem waveform's frequency spectrum.

16-Mar-2004
Added class QAMSignal in package edu.rit.datacomm2.signals, illustrating a quadrature amplitude modulation (QAM) modem waveform.

15-Mar-2004
Added package edu.rit.net with: Also changed the remote method invocation (RMI) system in package edu.rit.rmi to use mailboxes instead of sockets.

16-Feb-2004
Added a simulation of the Tanenbaum Network's routing algorithm performance in package edu.rit.datacomm2.routing.

12-Feb-2004
Added package edu.rit.thcompalg.tsp with programs for solving the Traveling Salesman Problem.

11-Feb-2004
Added the static autoscale() method in class edu.rit.numeric.plot.Axis. Changed the plot formats slightly in class edu.rit.datacomm2.routing.TorusNetwork04.

22-Jan-2004
Changed class Net in package edu.rit.petrinet: For greater readability of Petri net models (and so as not to break existing code), the event() method no longer checks whether an event with the same name already exists.

21-Jan-2004
Fixed a bug in class Net in package edu.rit.petrinet: The event() method did not properly check whether an event with the same name already existed.

19-Jan-2004
Added classes PlotSeries and SegmentedPlotSeries in package edu.rit.numeric.plot. Class PlotSeries is now the abstract base class for a plot series. Changed class XYPlotSeries to extend class PlotSeries. Changed class XYPlot to take a PlotSeries instead of an XYPlotSeries. Changed class Test01 in package edu.rit.datacomm2.traffic to display a plot of the optimal network design.

14-Jan-2004
Added interface XYZSeries and class ListXYZSeries in package edu.rit.numeric for (x,y,z) triplets of data points. Added classes CurveFit, AsymptoticCurveFit, and IncompleteGamma in package edu.rit.numeric.stat for doing least-squares curve fitting and calculating goodness of fit. Added classes Measure and Fit in package edu.rit.thcompalg.sort for measuring the running time of a sorting algorithm and fitting the measured running times to an asymptotic function.

18-Dec-2003
Added class edu.rit.util.CpuStopwatch for measuring a process's CPU time. Added package edu.rit.thcompalg.sort with classes for various sorting algorithms and programs for measuring the sorting algorithms' running times for the Theory of Computer Algorithms course.

04-Dec-2003
Added package edu.rit.thcompalg.asymptotic with programs for illustrating the asymptotic behavior of functions for the Theory of Computer Algorithms course.

30-Nov-2003
The initial version of the Computer Science Course Library was made by consolidating three separate course libraries from the Data Communications and Networks I, Data Communications and Networks II, and Distributed Systems courses.



Copyright © 2002-2013 by Alan Kaminsky. All rights reserved. Send comments to ark­@­cs.rit.edu.