Copter Pilot John Li reporting in for the ROFLCopter Squad, a group in the Fall 2008 CEN3031 Software Engineering course at the University of Florida.
| Date | Activity | Est. Time | Actual time |
| 2008-09-02 | Discussion | 0:50 | 0:50 |
| 2008-09-03 | Email exchange with group about version control | 0:15 | 0:30 |
| 2008-09-03 | Create individual web page and timesheet | 0:30 | 0:30 |
| 2008-09-03 | Research distributed revision control systems | 2:00 | 2:30 |
| 2008-09-03 | Set up example Mercurial hosting site (freehg.org) | 0:30 | 0:01 |
| 2008-09-08 | Group meeting | 0:20 | 0:20 |
| 2008-09-09 | Discussion | 0:50 | 0:55 |
| 2008-09-09 | Group meeting | 0:45 | 0:55 |
| 2008-09-09 | CodeDivers subgroup meeting | 1:30 | 1:45 |
| 2008-09-15 | Group meeting | 0:20 | 0:20 |
| 2008-09-15 | Research GatorMail framework technologies JSP, Tomcat, Jakarta, authentication, Model-View-Controller, Struts | 2:00 | 2:30 |
| 2008-09-16 | Discussion | 0:50 | 0:50 |
| 2008-09-17 | Further research into GatorMail backend to determine specifics | 1:00 | 1:00 |
| 2008-09-17 | Contact the GatorMail maintainer to inquire about how webmail.ufl.edu is set up. | 0:15 | 0:30 |
| 2008-09-19 | Set up an Apache Tomcat server | 1:00 | 0:30 |
| 2008-09-20 | Attempt to set up a sample GatorMail system. * Read Tomcat documentation, including deployment guide * Struggled to get GatorMail instance running. Getting 404 errors, bizarrely. * Suspect that the gatormail.xml file in the $CATALINA_HOME/webapps is not being read properly. | 2:00 | 3:30 |
| 2008-09-22 | Send project requirements to the Requirements Team: * Check for attachments when "attach" appears in message body * Change "<<", "^", and ">>"links to more descriptive, longer text * Change "Add Another Attachment" button when no attachments uploaded * Nested/hierarchical display for message threads | 0:45 | 0:45 |
| 2008-09-22 | Further attempts to set up sample GatorMail system. * Progress: no 404, now there is a 500. Detailed exception error message mentioning permissions * Though, still no cigar. | 2:00 | 1:30 |
| 2008-09-23 | Discussion | 0:50 | 0:50 |
| 2008-09-26 | Further work on server. * Read Struts technologies primer. * Fixed previous permissions issue. * New issues: "Exception processing TLD". Suspected cause: different version incompatibilities. | 2:30 | 2:45 |
| 2008-09-27 | Continue to work on setting up GatorMail instance. * Read Tomcat deployment guide. * Fixed previous TLD processing issue. * Got a running instance working. ** No authentication issues: was able to use my Gatorlink credentials. ** Error: could not access address book (because it's stored in a database, which hasn't been set up). | 3:00 | 3:30 |
| 2008-09-28 | Research requirements proposed by me. See above. | 2:00 | 1:00 |
| 2008-09-28 | Examine what code is throwing the address book and user information errors. | 1:30 | 1:45 |
| 2008-09-29 | Added a page to internal wiki linking to various parts of the software stack, which will be useful for looking up documentation. | 0:15 | 0:15 |
| 2008-09-29 | Wrote how-to document for setting up personal test server on Linux. Windows portion not there yet. | 1:15 | 1:00 |
| 2008-09-30 | Discussion | 0:50 | 0:50 |
| 2008-09-30 | Further examined code to figure out how to plug a database into GatorMail. Limited success. Did figure out that GatorMail uses "DataSource" and not "DriverManager" (whatever that means). | 0:45 | 1:00 |
| 2008-10-02 | Attended JSP/Struts group tutorial session. | 1:00 | 0:45 |
| 2008-10-02 | Researched Java DataSource objects: javax.sql API, Java JBDC guide, Tomcat JNDI DataSource how-to. | 1:00 | 0:40 |
| 2008-10-02 | Work on setting up a database, resolving address book errors. Despite initially high hopes, still not solved. Documentation on what the database holds is essentially nonexistent. And I don't know how to debug Java. God I miss Lisp. | 2:30 | 1:30 |
| 2008-10-03 | Learn about log4j and how to turn on more informative debug information. | 2:30 | 1:00 |
| 2008-10-06 | More: Work on setting up a database, resolving address book errors. | 2:30 | 2:00 |
| 2008-10-07 | Discussion | 0:50 | 0:50 |
| 2008-10-08 | Finally finish setting up database: configured Tomcat and GatorMail to use DataSource | 3:00 | 5:00 |
| 2008-10-09 | Implement requirement 17: improved message view browsing controls. | 0:30 | 0:15 |
| 2008-10-09 | Finish how-to document for setting up personal test server (MySQL setup, DataSource configuration). | 1:00 | 0:30 |
| 2008-10-13 | Update all requirements with the manager for it on internal documentation. | 0:30 | 0:30 |
| 2008-10-14 | Discussion | 0:50 | 0:50 |
| 2008-10-16 | Attended managers meeting. Discussed goals for the upcoming few weeks. | 1:00 | 0:45 |
| 2008-10-16 | Modified database server configuration to: (1) not require having the user's plaintext password in the db, (2) not require logging in as root. | 0:45 | 0:45 |
| 2008-10-16 | Investigated user preferences db error. Discovered it was not a DB error, but a libraries thing. Worked at fixing, not done. | 1:30 | 1:45 |
| 2008-10-20 | Attended managers meeting. Discussed what to talk about with implementors, the presentation, and what was required for discussion tomorrow. | 0:20 | 0:15 |
| 2008-10-20 | Worked on test plan for attachment reminder with Marlies. Helped her set up a build. | 0:30 | 0:45 |
| 2008-10-20 | Completed design for the attachment reminder requirement. | 0:15 | 0:20 |
| 2008-10-20 | Completed story card, test plan, and design for the "simplified add attachment" requirement. | 0:30 | 0:30 |
| 2008-10-21 | Discussion | 0:50 | 0:50 |
| 2008-10-23 | Added visual changes to mark the code as the Roflcopters fork. | 0:30 | 0:30 |
| 2008-10-23 | Read about JNDI, tried to load the ManageSieve library, but failed. | 2:00 | 1:45 |
| 2008-10-26 | Tried to load the decompiled ManageSieve code that Hat John sent me. Failed. | 1:00 | 0:45 |
| 2008-10-26 | Commented out ManageSieve code to work around the preferences page error. | 0:30 | 0:30 |
| 2008-10-26 | Reconfigured JavaMail to use authenticated, encrypted SMTP on port 587 instead of 25. Allows us to send mail when using an ISP that blocks outbound connections on port 25. | 1:30 | 0:45 |
| 2008-10-27 | Worked on implementing the attachment reminder requirement with Marlies. Got some basic coding done, but discovered that the system is not configured correctly for uploading attachments. | 2:00 | 1:30 |
| 2008-10-27 | Read about ant ("make" in XML for Java). Configured the system to allow attachments for both Linux and Windows. | 1:00 | 1:00 |
| 2008-10-28 | Discussion | 0:50 | 0:50 |
| 2008-10-28 | Further work on attachment reminder requirement with Marlies. Function now searches the message body and subject line, and began work on the frontend and backend for a global preference to turn off the reminder. | 2:00 | 2:30 |
| 2008-10-28 | Prepare for the CodeDivers portion of the presentation. Time how long it takes to talk and do the demo. | 0:45 | 2:30 |
| 2008-10-29 | Read Robert's (very good) Struts tutorial. | 0:30 | 0:30 |
| 2008-10-30 | Read more Struts tutorials online. | 1:00 | 0:45 |
| 2008-10-30 | Further work on attachment reminder. The user is not kept from sending the email if the warning has already been displayed. Learned quite a bit about Struts in the process of this. | 1:30 | 1:15 |
| 2008-11-01 | Met with Marlies to finish the attachment reminder global preference and integrate our work. Spent an annoying amount of time wresting with TortoiseSVN. | 1:00 | 1:45 |
| 2008-11-01 | Did research on other requirements, will likely pick up the drafts requirement next. | 0:30 | 0:30 |
| 2008-11-02 | Made attachment reminder testing slightly more intelligent - it won't warn when the string "attach" is a substring of a subject line that begins with "Re:" (e.g., a reply to another message). Bulk of time was spent wrestling with multiline CRLF regular expressions, which I ended up giving up on. | 1:00 | 2:30 |
| 2008-11-02 | Fixed exception-causing error in attachment reminder code, triggered by trying to access a preference that has not been set through the Preferences page yet. | 0:30 | 0:30 |
| 2008-11-03 | Worked on message view pattern matching code. Original code would rewrite URLs into clickable HTML links. Now, the code also rewrites email addresses into mailto: links, rewrites street addresses into Google Maps links, and rewrites Youtube URLs to include the embedded video. | 1:30 | 1:30 |
| 2008-11-03 | Practiced Code Divers portion of presentation. Can get it done in ~6.5 minutes. | 0:30 | 0:45 |
| 2008-11-04 | Discussion | 0:50 | 0:50 |
| 2008-11-04 | Practiced demo portion of presentation. Mailed Gram how much time I'll need. | 0:45 | 0:30 |
| 2008-11-05 | Discussed Code Diver work during presentation in class today. Presented a demo of the system, showing the WYSIWYG editor, the i18n work we've done, the attachment reminder, and the message text rewriting. | 0:50 | 0:50 |
| 2008-11-06 | Worked on researching, designing thread-view requirement with Marlies. Spent some time explaining how "In-Reply-To" and "References" headers work. Wrestled with TortoiseSVN. Created separate "awesomeThreads" branch. | 2:00 | 3:00 |
| 2008-11-06 | Read Javamail FAQ. Sent Evan, Andy, and Patrick an email pointing them to a discussion of MIME multipart/alternative messages, which they'll need to implement for the WYSIWYG editor. | 0:30 | 0:30 |
| 2008-11-06 | Added proper "In-Reply-To" and "References" header support to GatorMail. Now people receiving email from others using GatorMail can display the message thread properly. | 1:30 | 1:30 |
| 2008-11-06 | Read Javascript tutorials. Learned where to place Javascript, basic programming constructs, how to trigger functions on events like mouse clicks, how to display alert boxes, how to look up elements in the HTML document, and how to change display properties of those elements | 0:45 | 1:00 |
| 2008-11-06 | Tried to understand message list display code. Played around with adding data structures for keeping track of which message is the last in a thread. Played with CSS and Javascript code for hiding all parent messages in a thread, using knowledge acquired above. Currently, code only hides the non-leaf nodes, as opposed to hiding all but the most recent message in a thread. Considering building a real tree, and perhaps using the YUI TreeView module to display it. | 2:00 | 3:30 |
| 2008-11-07 | Further experimented with message list display code. Wrote Javascript function to toggle the visibility of non-leaf nodes in the message display. Added buttons to call the function, so messages in the thread can be collapsed and expanded dynamically. | 2:00 | 1:30 |
| 2008-11-07 | Came up with initial design for better display of message list. The design enables hiding entire threads as opposed to only hiding interior nodes of the thread tree. Decided to use sets to hold the messages for each thread, with each set identified by the root of the thread (1st message sent for the thread). To display only 1 row per thread in the message list, each set will be sorted by date and the last (most recent) message will be the one displayed. Upon clicking on a button next to this message, all other messages in the thread will appear, allowing the user to go to any specific message. To build all the sets for the threads: iterate through the list of messages to be displayed; if there is a "References" header, add the message to the set of messages for its thread, if there is no "References" header, move the message to the "postprocessing" list; after all messages have been either moved to the "postprocessing" list or added to a thread set, iterate through the "postprocessing" list; two possibilities: the message is the 1st message in a thread, or the message was sent by a bad email client that doesn't add a "References" header; if the former, add the message to the appropriate thread set, if the latter, do guessing based on subject line. | 1:30 | 1:30 |
| 2008-11-07 | Researched the spell checker requirement Prof. Dobbins surprised us with in class. Decided to use Speller Pages. It is open source and the demo worked better than most solutions I found (including closed-source, for-pay solutions). | 0:30 | 0:15 |
| 2008-11-07 | Worked on integrating Speller Pages into the GatorMail compose page. Configured to check the subject line and main message composition text area. Speller Pages calls out to a server-side script to do the actual spell checking, with PHP, Perl, and ColdFusion scripts available. Configured Tomcat to run CGI scripts in order to run the Perl version with the help of this tutorial. Installed GNU Aspell for the actual spell checking functionality. Integrated Speller Pages into compose page (uses bean:message for button text: ripe for i18n!). Added preference to turn off spell checking functionality. Created "plaintext-spellchecker" branch in repository. Commited all my work for fully functioning spell checker, a scant 4 hours after it was assigned (which includes going to another class, the commute back home, researching a solution, and making coffee). | 0:45 | 1:30 |
| 2008-11-09 | Worked on using Speller Pages for the compose page for the FCK Editor WYSIWYG compose page as well. The WYSIWYG team was supposed to look into enabling spell checking for the WYSIWYG compose page, but were having trouble. FCK's spell checking is based on a customized version of Speller Pages, so I took responsibility for implementing WYSIWYG spell checking. I simply copied FCK's modified Speller Pages script to the same directory (/src/webapp/WEB-INF/cgi/) as the script for plain text spell checking. With my previous Tomcat CGI configuration in place, a rebuild and restart resulted in working WYSIWYG spell checking. | 1:00 | 1:30 |
| 2008-11-10 | Met with Marlies to discuss message threads design. Realized that we would need to create at least one new class for a message thread object, which would be composed of an array of messages as well as a key (the Message-ID field of the "root" of the thread). The real object we're interested in is a list of message threads, which we will iterate through for the message list. However, this does not require another class. In the FolderAction class (which populates the "messages" object for the messageList.jsp display), we will build the message thread list object. Instead of having a separate message thread list object, we'll have a hash table, keyed by "thread key" (Message-ID of root message). The value will be the array of messages for the thread. The result of this design will enable us to move a lot of logic out of messageList.jsp (currently, cross-referencing threads based on subject line is Javascript, done by the user's browser!). As part of this design work, I read parts of the documentation for Java sets, arrays, lists, arraylists, hashtables, hashmaps, and all the documentation for LinkedHashTables, which is what we will be using. | 2:00 | 2:00 |
| 2008-11-11 | (No Discussion) | N/A | N/A |
| 2008-11-16 | Met with Marlies to begin implementation of message threads design. Had some problems, namely: an opaque Java error that we thought we understood how to solve, but remains unsolved. Iterating through a LinkedHashMap in the JSP display code throws a cast error, saying the entry cannot be cast to an ArrayList. However, the entry is most certainly an ArrayList. The LinkedHashMap generics stuff is set as String, ArrayList, so the problem is quite confusing. Because of this basic error, it's difficult to tell how much work the main body of the code still requires. | 3:00 | 5:00 |
| 2008-11-18 | Discussion | 0:50 | 0:50 |
| 2008-11-20 | Worked around previous error. LinkedHashMaps do not have an iterator() method, so replaced Struts "foreach" code in messageList.jsp with Java for loops, iterating over the threads and the messages. Continued work on the back-end buildThreads method. Appears to build the threads objects correctly, but had trouble with front-end code for displaying the information. Productive. | 3:00 | 4:00 |
| 2008-11-21 | Met with Marlies, finished front-end code in messageList.jsp. Also displays number of messages in thread as the button text when thread is collapsed. Doesn't display a collapse button for "threads" with single messages. Doesn't try to match based on subject line, so messages sent by mail clients that don't set "References" and "In-Reply-To" properly will not be threaded properly. | 4:00 | 4:00 |
| 2008-11-24 | Met with Marlies and began testing of the EAP team's requirements. Discovered that the Unicode requirement, which that team thought was not completely correct, works fine on my computer. Currently, we suspect that Tomcat on Windows behaves differently in a way that selectively (apparently randomly) mangles characters, but that Tomcat on Linux works fine. | 1:30 | 1:30 |
| 2008-11-24 | Had an informal managers' meeting with Patrick and Hat John, tested the code from a few other branches. Discussed issues we need to address in discussion tomorrow. | 1:30 | 1:300 |
| 2008-11-25 | Discussion | 0:50 | 0:50 |
| 2008-11-26 | Polished the attachment reminder a bit. There was some uncommited code on my computer that handled some bugs that Patrick found while testing. The code enabled case-insensitive matching, as well as detecting if instances of "attach" actually appeared in a reply. However, the code only correctly detected reply subject lines, not quoted reply text. So, the line "> see my attachments" would trigger the warning, even though that line is from the original messages being replied to. After much testing, I figured out a set of regexes to match all the cases I could think of. | 1:30 | 2:00 |
| 2008-11-30 | Worked on integration. Reapplied r124, which Patrick accidentally overwrote when he was merging EAP into trunk. Merged my own EAP-FCK-spell-checking branch into trunk. Merged awesomeThreads branch into trunk. No major difficulties (yay git). Did brief testing after each merge. | 1:00 | 1:30 |
| 2008-11-30 | Tested Hat John's ubersearch branch. Did not perform slowly on my system, which he was worried about. I like the simplified appearance. However, the branch only has 1 commit, and that commit appears to touch the entire codebase, not just the few files that should have required changes. Emailed Hat John about it. | 0:15 | 0:15 |
| 2008-12-01 | Worked on integrating the abkTeam branch. Git auto-merged most conflicts, and most of the remaining conflicts were easy to handle. As I thought, it wasn't as hard as originally imagined. However, it did cause a weird bug with the navigation bar. Convinced that it wouldn't be too difficult to fix, I didn't spend much time on it. Debugging will just be saving a working and a bugged copy of the page and diff. | 2:00 | 1:30 |
| 2008-12-02 | Discussion | 0:50 | 0:50 |
| 2008-12-02 | Implemented Firefox 3 mailto handling (requirement 6), mostly. Big John didn't realize that actual code had to be added to GatorMail to handle the protocol. The code is straight-forward: it simply parses the URL for an "extsrc" parameter. If it's set to "mailto", then we know that the Firefox user clicked a mailto link. Then we just have to parse the URL for the email address and possible subject line. Took longer than I anticipated, because I wasn't sure how to parse the URL with regexes in Java. Also spent way too much time figuring out how to get the GET parameters from the request. This is not completely finished, because the user needs a way to make Firefox use GatorMail as the mailto protocol handler. Joir-dan was supposed to add the link "soon". If he doesn't by tomorrow, I will. | 1:30 | 2:30 |
| 2008-12-03 | Did some quick integration work, in case of having to do the demo in class. No real difficult-to-solve conflicts. Did not integrate Hat John's ubersearch branch. Applied my mailto handling code from yesterday, though. | 1:30 | 1:45 |
| 2008-12-07 | Hat John essentially did the same work I did on Wednesday (though not in time for me to adequately test, before the presentation). However, people have made more commits to the abkTeamStable branch since Wednesday. Unhelpfully, many of the commits do not have commit messages, making integration slightly more difficult, but it was completed. Did basic integration testing. Noticed some brokenness with drafts and complex HTML layouts, sent a message to the mailing list about it. Fixed a small drafts bug that threw an exception. Modified the attachment reminder code to integrate with drafts and the HTML compose page better. | 1:30 | 2:15 |
| 2008-12-09 | Discussion | 0:50 | 0:50 |
Per Monday Tuesday Wednesday Thursday Friday 1 7:25 2 8:30 3 9:35 4 10:40 EEL3701C COP4600 EEL3701C COP4600 EEL3701C 5 11:45 CEN3031 COP4600 6 12:50 7 1:55 8 3:00 CEN3031 CEN3031 CEN3031 9 4:05 COP4620 EEL3701C COP4620 COP4600 COP4620 10 5:10 EEL3701C 11 6:15 EEL3701C E1 7:20 E2 8:20 E3 9:20
Keep on rofling.