Spring 2012
Algorithms (ICS 311)
All in all, I think that I should have waited to take this course until later. Our Java software development projects involved multithreading (pausing and restarting threads), extensive graphical user interfaces (this was not taught much in 111 or 211), updating GUI text fields from within a looping method (I suspect this would have been possible with multithreading but I never succeeded in implementing it) and displaying and updating visual representations of discrete mathematics problems. Most of these skills were not covered in any of my prior Java courses, and it proved difficult for me to assimilate these skills to a high enough degree to make them work in the projects themselves.It was probably a mistake to take this course immediately after my sophomore-level C and Java courses; I noticed that most of the other students were juniors and seniors with more development experience under their belts.
Databases (ICS 321)
For the final team project in this class, the team I was in designed a database to store the medical information of patients and their doctors. We spent a long time planning before we got to the implementation, and the database schema I designed proved to be difficult to implement because of the large degree of key dependencies between the table attributes. The original design had many separate tables using insurance policy number, social security number, and doctor license ID as part of their keys / dependencies, which is what might be logically true in real life but means that most of the sample data cannot be easily randomly generated, since it must reference existing sample data.The dependencies made it difficult to update or delete entries without our class's database software (IBM DB2 Express-C) experiencing conflicts, and the task of generating sample data sets that were all dependent on each other took time away from debugging and testing. In the end, we made a tradeoff between how well a database represents the relationships it describes versus how easy it is to implement and use, and the final product was much simpler.
Greyhats
I joined the Greyhats' (a cybersecurity "registered independent organization" at UH Manoa) competition team for the 2012 Collegiate Cyberdefense Competition, which won third place in the virtual regional (a competition for schools without membership in any of the other U.S. regionals) back in March. Though I cannot much credit for any of our results due to my then more-limited knowledge of Linux and Windows security, I learned a lot by watching the techniques of others and I hope to do better in Spring 2013.Summer 2012
Oceanit Internship
I was lucky enough to obtain a ten-week internship with Oceanit, a local engineering and software development company. I got exposure to iOS development in Objective-C, debugged Visual Basic applications for some of the company's clients, and performed internal technical support work. All in all, it was a good experience, and I was able to get a glimpse of the ways in which software development work is done in the private sector. I also learned a lot about the state of the local engineering and software development industries.Fall 2012
Programming Language Theory (ICS 313): Common Lisp
Learning Lisp is my first experience with a functional programming language. Of course, Lisp's built-in methods make recursively searching lists or making associative lists-within-lists much easier than in C or Java. Hash tables made associating two values an easy process in Java, but associating three or more values required custom objects or multiple hash tables.I feel that programming in languages that are more restrictive about syntax and the placement of local variables (C and Lisp) has helped reduce some of the bad habits I had when I began programming in Java (instantiating local variables in the middle of a method, building too much of a program's behavior into one function or method, etc.).
Greyhats
As the vice president, I have been taking a much more active role in the Greyhats this semester and have been working through basic lessons in virtual machine and network configuration with the group members. Things have going a little more slowly than we would like, but hopefully we will be able to get off to a faster start come January.The group has been working with Metasploitable and the iptables firewall. Metasploitable is a terminal-only Linux distribution based on Ubuntu Server that is pre-configured with several security flaws.
I had not updated VirtualBox in a while and was pleasantly surprised to find that 4.1.22 and later had added the ability to use .vmdk (VMWare) virtual devices right out of the box, which saved a lot of time in setting up Metasploitable virtual machines.
