Software
Having grown up with computers, it was inevitable that I would learn how to program them. I've been doing it on and off for something like ten or eleven years and in nearly as many languages (programming languages that is). Even the its somewhat of a hobby most of what I've produced over the years hasn't really been worth releasing to the public. Most of it was just to see if I could get something to work for my own personal satisfaction. The only personal projects that anyone other than myself has seen are the ones that get incorporated into my websites. On the other hand, I've also taken lots of programming courses in school. So most of that code I feel is worthy enough to at least be seen by other people. All of the projects listed here were done for college classes, except for one which I did in high school.
All except the project from high school have some special requirements, so the average person won't be able to run them. Also, chances are good the average person will stop reading this page as soon as they read the phrase "Finite Impulse Response Filter." That said, for everyone else can at least see what I've done. I am releasing the source code under a modified MIT License so that who ever wants to can look at it and use it in their own projects if they so desire. And I'm sure I'll eventually write something that's worth using.
Real-Time Digital Signal Processing
01.14.2006 - 04.30.2006
Title: Finite Impulse Response Filter
Author: Ian Ferguson
Requirements: Code Composer Studio, Texas Instrument's DSK6713 DSP Board, audio cables
File: ECE539 FIR.zip
Description: The Real-Time DSP class I took during grad school was one of the more
fun programming classes I took at WPI because I actually got to apply my signal processing
knowledge. This was one of the first projects, where we had to implement a FIR Filter in real time.
This program calculates the filter coefficients on the fly, given a few simple parameters. I've
provided the report on wrote for it along with the code in case you want more information.
Title: Adaptive Filter
Author: Ian Ferguson
Requirements: Code Composer Studio, Texas Instrument's DSK6713 DSP Board, audio cables
File: ECE539 Adaptive.zip
Description: This program operates in two modes. In training mode, the filter takes
in a desired signal and a noise source. The noise source is used to corrupt the desired signal. The filter
than processes the corrupted signal and compares the output to a copy of the original desired signal. It
updates its filter to minimize the error between its output and the desired signal. In filtering mode, the
filter again takes in a desired signal and a noise source and filters the corrupted signal, but it does not
attempt to update the filter coefficients.
Title: QPSK Acoustic Communication System
Author: Ian Ferguson
Requirements: Microsoft .NET Framework, Code Composer Studio, Texas Instrument's DSK6713 DSP Board, audio cables
File: ECE539 Final Project.zip
Description: For my final project in ECE539 I decided to apply what I had learned from my MQP
and create a real-time digital acoustic communication system. Rather than just duplicate my MQP,
I changed the modulation scheme, increased the bit rate, and made it full duplex. It kind of works.
If I had had more time I'm sure I could get it to work better, and the VB.net API that I used to communicate
to the DSP board could be vastly improved, but it works fairly well.
WPI MQP
08.26.2004 - 04.30.2005
Title: Digital Acoustic Software Radio
Authors: Ian Ferguson, David Bresnick, Megan Marcantonio
Requirements: Matlab, Speaker, Microphone
File: MQP.zip
Description: While the nearly 200 page report may be the bulk of my MQP, these files
are the heart of the project. These files let you convert text into binary, modulate those bits
using either On-Off Keying or Binary Frequency Shift Keying, transmit them acoustically, where the
counterpart program will record the transmission, demodulate the bits and display the text. At least,
it will do this up to 15 feet. After that it's kind of a gamble. If you'd like to find out more I suggest
you read said 200 page MQP report, conviently located here.
Computer Networks
10.22.2004 - 12.17.2004
Title: BS/MS Project
Authors: Ian Ferguson, Stuart Floyd
Requirements: Two networked Unix/Linux machines
File: CS4514 Proj.zip
Description: In order to earn graduate credit in addition to undergraduate credit for
CS4514 I had to create a program that ran a networked application and simulating three layers of
the TCP/IP protocol stack (the Application Layer, the Data Link Layer, and the Physical Layer).
For those who don't know, the Application Layer allows the application to interface to the lower layers,
the Data Link Layer handles data transmissions and error checking, and the Physical Layer is that part that
actually links the programs together, as well as introduces errors. My partner and I decided to write a
tic-tac-toe program. He handled the program frame work, I handled the data link layer, and we split the
application logic. It was a fun project, although it did take a lot of work. The best part was that it was
so robust that it could function with a 95% error rate (95% of the time a error would occur and the data packet
would have to be resent. It was really slow with that many errors, but eventually all of the data made it through.
I'd have to say that this was by far the best programming project I've ever done for a class.
Distributed Computing Systems
03.14.2004 - 04.30.2004
Title: Custom Linux Filesystem Attributes
Authors: Ian Ferguson, Daniel Polnoff, John Hajeski
Requirements: A modifiable Linux installation
File: CS4513 Proj1.zip
Description: The goal of this project was to modify the Linux kernel so that you can create hidden
files that contain metadata about regular files. The project adds system calls to the kernel that allow for
setting, reading, and removing custom file attributes. It also modifies current system calls so that when files
are moved, their attributes move with them.
Title: Primitive Network Filesystem using RPCs
Authors: Ian Ferguson
Requirements: Two networked Unix/Linux machines
File: CS4513 Proj2.zip
Description: The goal of this project was to learn how to implement and use Remote Procedure Calls (RPCs)
to build a primative network filesystem. After the client program connects to the server, the client can browse the server's
filesystem as if it were a local directory. Several standard linux commands are available (ls, rm, mv, etc).
Operating Systems
08.26.2003 - 10.12.2003
Title: Counting Context Switches
Authors: Ian Ferguson, Daniel Polnoff, John Hajeski
Requirements: A modifiable Linux installation
File: CS3013 Proj1.zip
Description: I hate to disappoint you but unless you have multiple cores or processors, your computer is not
multitasking. A single CPU can only run one program at a time. So why does it look like we can have multiple programs
running a time? Because the CPU fakes multitasking by switching between programs so fast that it looks like they are running
simultaneously, when in reality they run for a short amount of time and then get put on hold until the processor gets back to
them. It does it fast enough to create the illusion that multiple programs are running at the same time. Every time the
CPU changes programs is called a context switch. This project adds code to the linux kernel to count the number of context
switches and the time it takes to actually change between programs.
Warning: The zip file contains a kernel image, unless you are running a SuSE 8.2.something-or-other I would recommend
just adding the included code files to the kernel and recompiling.
Title: Cloaking (and Decloaking) Processes
Authors: Ian Ferguson, Daniel Polnoff, John Hajeski
Requirements: A modifiable Linux installation
File: CS3013 Proj2.zip
Description: This project modifies the Linux kernel to allow you to hide processes (programs basically) from
being reported as running. It adds a cloaked attribute to every process, and if that attribute is set to true, when
a program queries the system for running programs, any process with that attribute set does not display. It still runs,
but you can't see it unless you use the included Radar program that uses a separate system call that reports all processes.
It was definetly a fun task.
Title: Linux Chat Device
Authors: Ian Ferguson, Daniel Polnoff, John Hajeski
Requirements: A Linux installation
File: CS3013 Proj3.zip
Description: I'm not sure whether I had more fun on this project or on the previous one, but
(once we got it working) this program is pretty clever. The server sits on a Linux installation and looks like
a device (a special type of file). When the user opens the device with the client program, he or she enters a chat room.
Any number of people can leave messages and see what others have said. It took a heck of a long time to get the thing to work
right (I recall Dan, John, and I spent two full days in the lab) but once it did it was pretty sweet.
Programming II
01.30.1999 - 06.19.1999
Title: Tic-Tac-Toe
Authors: Ian Ferguson
Requirements: Microsoft .Net Framework
File: tictactoe.zip
Description: The Tic-Tac-Toe game playing routine for the computer on hard mode was one of the first
times I actually sat down and planned out an algorithm. If this game lacks polish its because I was a sophomore in
highschool when I wrote it. I've ported it to VB.NET since I don't have a copy of VB 6.0 on my computer anymore. It
has a couple of minor bugs, more in the user interface than anything wrong with the game logic itself. Perhaps someday
I'll sit down and redo it. In any event, enjoy a vintage Ian programming project.
Extra
Auiiui uieiouo auuaa oiaue uaou iioiiou uiio a io ieeoai uaouoe uoiaau eeauauou u oiauuie eo ui.
For extra cool things to be put here
Aaeao aiieuouiu io ueuiieu uei oeio uooiau uue ooiea ooiaui eue ouue i uiaoo iouieiuia uueeo ieieuiiau ueaooa iou iaeieuo uoao iauoi u i oeioooe auo a ooe u uuuo oaooaae uoa iuiuiaeu iioaeu uuiu eeu ea eouoiuo ua o.
Iiuiuaea ouea ieuuio o i iuo oiei uoeeou ieoau uaeeiu uouooa uiaiaue ii oo iei eiaiueoo iaoa euiaou uoia uuei ua aoauia ieoae eioiaia eu uiueeiui ueuaiuo uaa eie oaeee uau ooieoi uoii oeuioei uouiiuu ioeiuoe eaeuoi.
Iueuouii eei iueoie i iooououe eoio eeeuoeio u eu ee uueeo eiuoi iooeiu uuiei uiaeo oaaoo iuu uuue auo au o ooueooii oueui aeeeau uoeoeee aeuaea aoeuoieeo aio aaiio iuouau e aouueuuie oiieae eioii oeeiu uaeuueuu eeue ieu.