Journal  of my work

ME!        Tidbits

Week 1

The introduction week.  Learned about the department and their research interests and what projects they have going on right now.  Also learned a bit about Milwaukee and got orientated on the social aspect of the town.  Had a bit of background reading to do and worked on a small part of one of their projects.  This was supposed to take a few weeks, but we got done in 3 days!!  What we had to do was to annotate/label 16 dialogs between a nurse and patient in a semantic sense so we could semantically analyze an argument.  We found a few issues with the protocol for the labels, so revised the labels and are reannotating now.  

Week 2

After we finished annotating the dialogs semantically, we used another annotation scheme called DAMSL (Dialog Act Markup in Several Layers).  It is a more in depth look at how each utterence affects the over-all dialog; whether it is responding to something already said, or moving forward a dialog, etc.  Each sentence, or utterence, can fit into more than one category, so it takes time thinking and analyzing how it exactly affects the dialog.
I also talked to Professor McRoy about a more in depth project for the summer.  We decided that I would work on implementing a test for a previous project implemented by the NLKRRG, called Equuleus, which is an advanced tutoring system.  The test I will be implementing is similar to the Cloze Test.  So I spent the rest of the week reviewing Java and the swing package and starting a simple implementation of the intended program.  I haven't programmed in Java for two years, so it is taking me some time getting used to that again.  I have mainly been programming in interpretive languages the past two semesters since I have been concentrating on AI.  Also, I have not had much experience using swing to create GUI's, only a little group project a year ago, so I having to learn that almost from scratch.  Luckily, the internet provides some great  examples and tutorials, especially the Sun Microsystems page.

Week 3

I continued working on my cloze project this week.  I got most of the GUI working!  It is fun to see your program actually work with a GUI interface and have it look all professional and everything!  I still have a few wierd bugs, like when I add the text fields for the blank words, some will only allow one character to be entered.  It is random ones that do this, and I am not sure why since I am making them all the same way inside of a while loop.  And the way I had originally implemented it, you had to press the buttons in a certain order for it to work, but I figured out how to fix that one, so you can press them in any order now and it will work.  I also got a file mananger working, so the user can choose a file where the text is.  It really wasn't that hard, but it looks nice!  It is wierd programming for 7 hours a day.  I am not used to doing one task for that long.  At school, I can go between tasks to split up the day, so this format is definately something to get used to.  I wonder if industry work is like this, or if it is just the summer research format?

Week 4

I spent at least one day trying to figure out hash tables!!  Should have listened more carefully to that lecture two years ago!  But now that I have implemented one, they are fairly easy to use and to understand.  And they are fast!  I also implemented a cloze test that chooses low frequency words by using the hash table (the word is the index and the value is the number of times it was found in the document), so that took some time trying to work out the correct algorithm so that there are not two blank words next to each other.  I also worked more on trying to debug my code a bit.  I still can't figure out my text field bug!!  I am also working on getting a dialog to pop up asking the user to input the window size for the low frequency test (i.e. how many words to look through to find a low frequency word).  I was thinking about doing this with a text field, but then I would have to validate the text and make sure they entered a number and not a word.  I tried to implement this, and it didn't work too well, so I talked to my professor and we decided it would just be better to limit the users choices anyways, so I will be using a drop down box now, which is much easier to implement!

Week 5

Haha!  Turns out that my text field bug was actually a bug in JDK 1.4.1, so I downloaded and installed JDK 1.4.2 and that bug magically disappeared!  All that debugging for nothing!  At least I learned A LOT about JTextFields!  A professor on the team also took a look at my code and gave me some hints on how to make it more "black box" so other users can use it without knowing how it was implemented.  That was kinda hard to change since I knew how it was implemented.  So I added more accessory methods so users have more control over their data, so hopefully that helps.  My professor is thinking this program may be useful for some of her other projects, so it is important that I implement it cleanly.  My professor wanted another style of the test implemented too--where the user can hand pick which words will be left out in the test.  This is proving to be more difficult than I thought it would be at first.  JList and JCheckBox don't do exactly what I want them to do, at least not that I can see yet.  Maybe next week I will have an epiphany and it will work for me!

Week 6

I figured out how to get my JList/JCheckBox working.  I shoved it into a JDialog and that seems to do the trick!  I also made the interface more user-friendly by adding a menu bar instead of having it all with buttons and such.  This also helped with the inner logic, also, which was nice.  One problem I am having is how to make an instance of the test stay until the user wants to change it.  I will have to play around with this and see what I can come up with.  Another addition I need to make to my test, or the interface to make the test, is to make it serializable, meaning that an individual test can be saved to memory and thus reused.  I also started trying to integrate my test into the tutoring program, Equuleus.  One thing I have learned so far is to always assume other people will be reading your code so therefore intuitive names should be used in the naming of variables and methods, etc.  The person who wrote the original code has some random names in there which makes it hard to tell exactly what it is supposed to be used for.  Also, the version I received is not working, so it is important to have it demoed on your machine, too!!  But I think I did a good job implementing my test in the "black box" style becuase it should only take about 6-10 lines for me to integrate it into his code.  I also talked to my professor about starting a new project next week that will hopefully involve more natural language processing techniques, so my first task for that is to see how feasible it would be to generate Spanish text.  So, I have to find dictionaries and grammars and see what kind of format they are in, so that should be really interesting.  

Week 7

I got my test integrated into Equuleus.  It did only take a few lines of code to get it integrated.  I hadn't thought about making the test a dialog becuase I didn't need to capture any information from it using my front-end GUI, but I realized that the only way to wait for the user to take the test was to make the test a dialog, so I had to go and change my test class a little to incorporate that.  My professor also wanted to be able to have the test read in a file and use that file when testing for frequencies, so I implemented that, too, this week.  I was having some trouble in my front-end, knowing when to create a new test so the user wouldn't be asked multiple times the specifics of the test.  I had to play around with different ActionListeners and if statements, but I got that finally working, too!!  I also got it so that a cloze object can be saved and thus reused.  I had to figure out how to use the Serializable interface for this.  It was actually pretty simple once I figured it out.  After that, I learned how to make a JavaDoc file, so documented my code using that.

Week 8

I made the final touches on my project this week.  I tried to make my program as robust as possible (i.e. catch possible user errors) and learned that it worked well to wrap setX() functions to return a boolean if it was legal and false otherwise instead of throwing a zillion exceptions.  I also tried to test my class pretty extensively, which helped inform me of what kind of user errors could occur so I could try and catch them in some way before the program exploded.  I figured out how to use the JavaDoc feature of JBuilder so went through my code and created an API of sorts.  I also wrote a README for my program.  The main bug I found in my code was that the text fields would be placed at the beginning of the test instead of intermixed within the text of the test when calling the test from a main method outside of the GUI.  This was wierd because it didn't do this using the GUI or in Equelues, so I am not quite sure why it decided to act funny then.  So I spent some time figuring that out.  Turns out it was this small function that I had in my code at one point (borrowed from a book I was using) that I thought didn't do anything useful, so I deleted it.  Turns out it really did do something useful.  So I put that back in and everything is happy now.  I think I am completely done with that project now.  I am also starting a new project this week to give me something to do for the next two weeks.  It's a small project to see how feasible it would be to create a Spanish text generator, mainly getting the correct word form for verbs and nouns taking into account different aspects that would change the word, like plurality.  I am excited about this because I really wanted to do something with natural language processing, especially with Spanish.

Week 9

This week I worked more on my Spanish generator.  I finished generating nouns and adjectives.  I feel like I am hard coding the endings on becuase I have a lot of if statements, but maybe that is the best way to go about it.  This project  is very difficult because there are so many irregular words.  I also created a user manual for my Cloze Project and started creating a distribution package for it, with stand alone executables for different platforms and all the documents, etc.  I designed a PowerPoint presentation for my project also, because I am demoing my project to the group here next week.  I added some small extra features to my Cloze project also.  I really really think it is done now!  I need to stop touching it!!

Week 10

My last week researching at UWM and being part of the DMP.  This was a busy week getting all the last little details together.  I gave a presentation using the PowerPoint show I made last week.  I am working on making a distrubution CD with documentation and everything, so I have a professional looking distribution of my Cloze Project to show people.  I am also working on the final report for the DMP and getting my website all wrapped up.  I am trying to tye up any loose ends I may have left here, so that my research will not be lost or misunderstood.  I have had a really good time researching this summer and I really feel like I learned a lot.  It was definately an invaluable experience.