State of the Term Fall '10
January 14th, 2011
This post is long over due, but with the term completely over, it seems this post is right on time. The past term by far was my most difficult to date, consisting of Senior Design, Artificial Intelligence and Finite Automata (the beast of the bunch). Though it was also my most successful to date. Given that the term is over, I figure a recap is more appropriate than a status update.
Senior Design – My senior project was entitled Intelligent Network Security Using Genetic Algorithms. The project was more of a research project than a project in which the goal was merely to develop some random application. In brief, I created a network simulator to analyze pseudo UDP datagrams based on a set of rules and applied a GA to rank, select and generate new datagrams of the most highly ranked. The goal was to investigate the effectiveness of GAs in assisting in developing network rules for systems such as SNORT. Ultimately, my conclusion was that using GAs would be useful to a network administrator investigating possible threats on a network, but alone, they would likely not be a complete solution to developing network rules.
More important than my conclusion were the things I learned while doing the project which was comprised of an implementation, presentation and a written report. Initially, I approached each aspect of the project individually which proved inefficient. Upon realizing this, I began working on each aspect simultaneously so as not to have to revisit material I had covered/completed some time back which was no longer fresh in my mind.
With regard to programming the project I broke the project into components which I believe is a pretty common practice especially with object oriented implementations. For the straight forward sections of my project, I went directly to the terminal and began coding, but for most of the project it proved useful for me to write pseudo-code for the various components. For the longest, I was not a fan of taking this intermediate step, but it really allows for separation of algorithm design and actual development – in the long run, it’s an uber time saver.
At the completion of the project, I realized it’s much harder to write about what you’re doing than to do it. But from the writing I could see much more clearly, how effective/ineffective the project really was. It actually prompted me to change some aspects of the project (conclusion aside). If I could do it again, I would start writing what each section of code was to do before I began programming (I did it vice versa) – that being said, I’d probably have an entirely different project.
Finite Automata – I’m just glad this class is over. I still find it hard to really describe the concepts learned but the overall focus was on investigating the theory of what is computable.
Artificial Intelligence – This class was not quite what I was expecting, at least in content. I assumed we would delve more into intelligent systems and the like, but I think we really just scratched the surface of AI. There was a heavy emphasis on predicate calculus and Prolog. Though I see a direct connection between knowledge representation and Prolog, I still don’t care for the language. Despite that, we had to solve interesting riddles like Wirth’s, I’m My Own Grandpa using Prolog.
The highlight of the material in my opinion was Expert Systems. Though not a difficult idea to grasp, Expert Systems were the most practical of concepts and information we covered. It was near the end of the class, so maybe I was just fed up with Prolog. Relatedly, CLIPS for OS X is a pretty straight forward tool for developing expert system with good documentation. Though similar to Prolog, I picked it up much easier.
Now, only four class remain after which I’ll be to able finally close this chapter of my life.