Written in C


This is a command line utility to encrypt and decrypt strings and files by either Polybius cipher or Fractionated Morse cipher. Using "-h" command or checking "hw1/include/const.h" for details of this project.


This is explicit free list dynamic memory allocator with best-fit placement, immediate coalescing, and block splitting without creating splinters. It's my favorite one.


This is a shell that offers these functions: scripting support, redirection support, builtins, ability to run executables and simple job control.


This is an in-memory, multi-threaded, caching server functionally similar to Memcached. Multithread-safe hashmap and queue are implemented, used in this project.

This is an online dating web application that constructed from designing MySQL database to writing front end using HTML/JSP.
ALl transactions/queries in database level have been finished. Some front end and JSP work are still in progress by me.


This is a simple hangman game with the following function.

  • Rendering the target word space

  • Displaying guessed letters

  • Dynamically rendering the hangman graphic

  • Incorporating a hint/End Game

  • Handling illegal keys/Filtering the choice of target words

This project is larger than hangman with following functions supported.

  • Check for validity of profile credentials before allowing a user to start game play of any sort 

  • User will unlock higher levels by passing easier ones

  • Asking User if wanting to exit when exit button is clicked.

  • Hint the user with first few letters

  • Highlight the letters entered by user


Threads are scheduled according to their priority. Threads with the same priority are to be scheduled according to the time they were inserted in the ready queue.

The priority is calculated by the following expression: 

  • 1.5 * total time the thread was waiting in the ready queue minus total CPU time the thread has used so far minus 0.3 * total CPU time all the threads in the same task have used so far.

  • LRU page replacement algorithm (the real LRU, with timestamps, not the clock algorithm) and dirty-bit optimization

  • Proactive page cleaning daemon. The daemon kicks in every 20,000 clock ticks and swap out the 5 least recently used dirty frames. (If the number of dirty frames is less than 5, swap out whatever there is.)

Initially there is one queue of I/O requests.

  • When the device starts processing the first request in that queue, the queue is closed and any subsequent I/O requests are added to another queue.

  • When the device is done with the first queue, it switches to the second. That second queue is then closed and new requests go into a third queue, etc.

  • Within each queue, requests are processed using SSTF (shortest seek time first)