Pages

Friday, November 9, 2012

November 2012 Update

Here is what I have been up to in the last nine months.

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.

CyberPatriot

Preparing lessons as a CyberPatriot mentor has been a good way to rehearse my skills and get more practice with Windows security and diagnostic tools, especially Local Security Policy and Sysinternals. There was not much time for me to get familiar with these things in previous semesters, and nothing helps memorization more than checking and double-checking for mistakes in your configuration instructions.

Wednesday, February 1, 2012

February 2012 Update

Thanks to the Hackathon, my coursework, and various Greyhats-related officer duties, it has been a while since I was last able to write anything. Here is what has happened since my last entry for ICS 314:

CityCamp Honolulu Hackathon

On January 20-21, I participated in the CityCamp Honolulu Hackathon, a 24-hour programming competition to design a web-based or mobile application based on data provided by the state or city government. Our team designed a Javascript-based application that used the Google Maps API to pull data from a GPS coordinates-storing site called CartoDB. Our GPS data and site descriptions were pulled from state government-maintained hiking-related websites or directly from Google Maps as much as possible, with the intent that anyone unfamiliar with local hiking trails and beaches would be able to use the application as a starting point.

Unfortunately, I cannot claim credit for any of the web application visible in the above screenshot.

My lack of Javascript knowledge made me somewhat useless on this project except as an informal beta tester and data gatherer for the CartoDB database, combing through state websites and Google Maps results to try to gather previously separated information in one place. It was definitely an educational experience to watch the more experienced web designers and Javascript coders at work, however, and I hope to participate in this kind of competition in the future, when I have hopefully filled in some more of the gaps in my knowledge.

Though we did not place at the Hackathon, I saw some very polished applications made by the other teams, including a pothole-reporting application and a bus route application that measured the distance to nearby bus stops and recalculated arrival schedules in real time. It really is amazing that people are able to create fully functioning, error-free mobile and web applications in only 24 hours, and makes for a good demonstration of what is possible through the skilled recombination of open-source libraries. Though there are definitely security and performance risks in blindly integrating third-party code into an application, being able to do so does allow applications to be made with a speed that one would probably never have seen even five years ago.

University of Hawaii at Manoa Greyhats

The Greyhats, a cybersecurity-oriented Registered Independent Organization at the University of Hawaii at Manoa, are going to be competing in the at-large regional for the 2012 Collegiate Cyber Defense Competition in March. I joined the club after the last CCDC had ended, so this is the first one I will be eligible to participate in. I am not sure how it will work out; I sort of ended up on the team by default this year, so I'll do my best to get up to speed.

I have also become the club's Treasurer. We are trying to secure funding from UH's Student Activity Program Fee Board to buy a server for virtualization purposes, so that those of us who are not graduating will have an easier time training next year's team, and anyone else who wants to learn information security skills at our meetings.

Algorithms and Database Software

The two ICS courses I am taking at the University of Hawaii this semester are ICS 311 (Algorithms) and ICS 321 (Data Storage and Retrieval). Now that I'm taking junior-level courses, it is obvious that the real work has begun. (In a year or so, when I start in on 400-level courses, I am sure that I will be saying the exact same thing.)

ICS 311 is a successor to my previous classes in discrete mathematics, which has unfortunately not been one of my strong points during my time in the ICS program. I know that having at least a basic understanding of discrete mathematics is the key to writing cleaner, faster-running code and being able to justify its efficiency through analysis, so hopefully I will be able to make up for past mistakes and misunderstandings and make the most of this course.

ICS 321 teaches the syntax and relational algebra of SQL, both as logical operations and through the use of IBM's free DB2 Express-C software. Up until now, my understanding of SQL has been limited to a superficial security-related understanding of its weaknesses. Accessing and modifying databases is an important part of many enterprise applications, and this course should definitely fill in a glaring gap in my resume.

Time allowing, I will definitely pick up in my C++ education where ICS 212 left off. Due to time constraints and delays during the units on C, the class was only able to briefly cover C++ in the last two weeks of class. Though C, as a widely used and efficient language and as the predecessor to most later object-oriented languages, was definitely important enough to warrant the time it took, I was still a little disappointed.

Like any skill, learning about programming only gets harder (or at least, more complicated). The important thing is to keep going.