Open Source Code on Linux

Hi, I'm Bob! My latest project is an extension of the VisAD package . Here is the code and here is the API generated by JavaDoc. For a complete description (in English) please refer to my Master's Thesis. It's all part of the research done by the Scientific Database Research Group at the University of New Hampshire.

(some) applications written

(some) algorithms written

  • class: Operating Systems, University of New Hampshire
  • language: C for UNIX
  • input: commands from user
  • output: a message indicating success or failure.
  • brief description: This program develops an NFS simulator using messages to communicate between the client and server (machines). (Since message queues are used, the client and server are on the same machine.) The server supports multiple clients.
    A set of procedure calls are provided that enables an application program running on a client machine to perform standard UNIX file system operations on the remote files. Each of these routines communicates with the server via messages which are packed using a prearranged protocol. Note that the message format protocol is designed such that the file server is stateless . Therefore, every message is self contained.
    Here is the Makefile.
  • Source Code: client.c The client program is interactive and continually prompts the user for the operation to be performed and the parameters for this operation. The client then packs this information in the standard message format and sends it to the server. When a response is received from the server, the status of the request and the response are displayed on the output screen. Multiple client processes can be running simultaneously.
    message.h -contains definitions of message queue data structures.
    server.c - The response from the server has fields that refer to the status (whether the request could be carried out).
    The file operations supported for this NFS simulator are mapped directly onto the UNIX file system operations. The following file operations are supported:
    1. Create a file. This function maps into the creat() system call. The user supplies the file name and the mode parameter.
    2. Read a file: This function maps into the open(), lseek(), and read() system calls. The user supplies the file name, seek offset, and the number of bytes to be read.
  • class: Operating Systems, University of New Hampshire
  • language: C for UNIX
  • input: any data file
  • output: blocks of data from a software cache
  • brief description: The program simulates a buffer cache mechanism to store copies of recently read blocks of disk files. All read operations are block oriented. Assume that the block size is 512 bytes. When a read of file data is to be performed, the buffer cache is searched first for the data. A hash table is used to locate these blocks. If the desired block is not located in cache, then the data is read from the disk. A copy of this data is stored in the cache. The cache uses the Least Recently Used (LRU) page replacement policy.
  • Source Code: xread.c -the main program that continually prompts the user for input data which includes: file name, seek address (byte offset 0), and number of bytes (not blocks) to be read. It then prints the bytes read to screen. cache.h -contains definitions of cache data structures. cache.c -contains all the software cache buffer functions. Here is the Makefile.
  • class: Operating Systems, University of New Hampshire
  • language: C for UNIX
  • input: matrix data files
  • output: more matrix data files
  • brief description: The program simulates matrix algebra in parallel in the following manner: The parent process forks off 3 child processes, one for matrix addition, one for matrix subtraction, and a third for matrix multiplication. The child processes are each their own executables. It's a handy demo of the fork(), exec(), and wait() system calls.
  • Source Code: matrix.c -the parent process, child1.c -the child process that performs matrix addition, child2.c -the child process that performs matrix addition, child3.c -the child process that performs matrix multiplication (tricky). Here is the Makefile.
  • class: Database Techniques, University of New Hampshire
  • language: C, SQL
  • input: sample database
  • output: sample queries
  • brief description: The first program populates a sample database. The second program runs some queries on it showing results. The code is SQL embedded in C. This is no ordinary version of SQL though. This is SQL for POSTGRES95, a database management system developed at the University of California, Berkeley. Thus, it's not quite as user friendly as other standard versions. For example, aggregate functions like SUM() are written separately by the programmer. The database keeps track of a company's employee expenses.
  • Source Code: projectdb.c populates a sample database and project.c runs the queries.
  • class: Operating Systems, University of Massachusetts
  • language: C++
  • input: a list of characters or numbers
  • output: a sorted doubly linked list of data
  • brief description: The program creates a doubly linked list of the data and sorts it using the bubble sort algorithm. It also uses a template class to operate on either characters or integers.
  • Source Code: dlist.h contains the class definitions dlist.cc contains the procedures.
  • class: Architecture and Assembly Language, University of Massachussetts
  • language: SAL (Symbolic Assembly Language)
  • input: 2 numbers read in from the keyboard, one character at a time, separated by a comma
  • output: the addition of the 2 numbers
  • brief description: This program adds 2 numbers. It performs a number of checks like to see that the numbers are within the proper range and also to see if there's a comma. It also adds negative numbers.
  • Source Code
  • class: Architecture and Assembly Language, University of Massachussetts
  • language: SAL (Symbolic Assembly Language)
  • input: a string read in from the keyboard, one character at a time using I/O interrupts
  • output: another string identifying each character in the input string as upper case, lower case, or numeric
  • brief description: This program reads in a string using interrupts and then determines whether each character is upper case, lower case, or a number. The output must be done one character at a time, also using interrupts.
  • Source Code
  • class: Algorithms, University of Massachussetts
  • language: C
  • input: file -a dictionary of about 70,000 entries
  • output: a list of all anagram classes in the dictionary
  • brief description: For example: tops, stop, opts, and pots form an anagram class. The program must run as fast as possible and use 2 vital sorting algorithms. (Uses two versions of the Quicksort algorithm)
  • Source Code
  • class: Algorithms, University of Massachussetts
  • language: C
  • input: file -a graph with up to several thousand nodes
  • output: whether or not the graph is 2-colourable
  • brief description: An efficient program to determine whether or not an undirected graph is 2-colourable. The Depth First Search (DFS) algorithm is implemented.
  • Source Code