Journal
I will update this journal weekly about my progress on the project, my experiences with the CDMP, and my summer in Kingston, ON.
Week 1
This has been a very busy week. I met with my mentor last Friday to outline my project and goals for the summer. I am going to begin the summer by adding some features to the toolkit that the team developed last summer. I am then going to start on a new project, looking at traceability of changes in business processes. Dr. Zou gave me a paper to read as a starting point for my research. She also told me that I will be attending CSER with some other students from the lab in June.
Student leases in Kingston usually end on May 1st, so this time of year means that the student "ghetto" is filled with an assortment of moving trucks. After three years in my apartment, I spent this week moving to a new place. When I wasn't in the lab this week, I was unpacking boxes, and dealing with all the usual problems when moving (e.g. my landlord accidentally deducted my rent twice from my bank account!).
During the school year, I had noticed a logic error in one specific case in the WBI Modeler conversion, so my first task was to debug it. In my software engineering class this semester we had talked about how testing is not showing that the code works properly but to try to make it fail. Using this idea, I built some test cases and managed to quickly find the source of the error.
I spent the rest of the week adding some features to the Eclipse toolkit. The code has changed structure in the 8 months since I last worked with it, so I had to quickly refresh my understanding. I managed to add all the extentions that had been defined during the school year as necessary.
This weekend I am going to Toronto for a Shad Valley fifth year reunion. Some people are even flying out from Newfoundland!
Week 2
This week I spent a lot of time familiarizing myself with the project. I read papers written by my mentor and other students in the lab on the topic of change impact, and looked at their references. I found I sometimes had to read a paper several times to understand it's focus. I also had to learn to read academic papers. Although I have done this for class before, I haven't had to read them so critically. I usually ended up printing the articles, writing all over them, and looking up topics that I didn't understand. I think I managed to come across every topic from my Introduction to Software Engineering class last semester. I'm very grateful for that course.
Midway through the week I began to develop my ideas for the project. Originally, my mentor wanted me to look at how changes in business processes will impact source code. I decided to look at ways to minimize impact in the first place, in other words, find ways to make the source code more maintenable. I proposed my idea to my mentor, and she suggested that I read the book Refactoring: Improving the Design of Existing Code by Martin Fowler. I started to look for papers on this idea, but I'm having difficulty. I'm going to try some more general searches next week.
This is my fourth summer in Kingston so I'm looking forward to a lot of annual events such as the Snowbirds demostration in a few weeks. This month I signed up for a cake decorating class. It's only two hours a week in the evening, but I find my brain tends to still be thinking about the project. I've been thinking up some of my best ideas during lunch! I'm excited for my homework this weekend. I have to bake and frost a multi-layer cake. It's Victoria Day this weekend, so I'm hoping that Kingston will be having fireworks this year!
Week 3
I started this week by finishing to read the book my mentor suggested to me this week. Using the book as a guide, I came up with a list of new refactorings that could be applied to source code based on business processes. Using a paper written by my mentor and other students in the lab, Supporting Change Impact Analysis for Service Oriented Business Applications, I tried to get an idea of how they could minimize the impact of a change to a business process.
As I worked on the project, I found that it was getting a bit out of hand. It was becoming too big a project to complete in four months. I would have to spend most of the four months catching up on background information. After speaking with my mentor, she suggested that I change the focus of my project to synchronizing changes in the different levels. She thinks that I have enough of a background from last summer that the learning curve will be minimized. She helped me work out a plan to tackle the project.
Currently I am investigating different techniques to solve the problem. I am working with Websphere Business Modeler, since I will eventually have to develop a plug-in to track changes. I am frustrated with the lack of resources available for plug-in development for Websphere. It is based on Eclipse, so I decided to start using techniques I figured out last summer for Eclipse. Many packages available for Eclipse do not exist in Websphere, or are difficult to import. After playing around with some code, I am starting to work out what information is available about process models in Websphere. It is difficult to develop a technique if I do not know what information is available.
Week 4
I spent a lot of time this week trying to add a plug-in to Websphere Business Modeler. My idea currently is to try to implement the solution as a WBM plug-in. This eliminates the need for a user to export and import files when synchronizing. After spending a lot of time in newsgroups and forums and not gathering very much information about the WBM API, I had to start guessing how to implement the plug-in. My main problem is I cannot figure out how to get a handle on the process editor so I can attach a listener.
I eventually gave up searching, and started to guess how to get a handle on the process editor using what I know about Eclipse plug-ins. I found some useful methods in the Eclipse API, but the version of Eclipse that WBM is built on would not let me update to the latest package. This means that I can't use newer methods within the org.eclipse.ui packages. This is frustrating. I am guessing and testing to see if I can figure out which methods I have access to.
I put together a Scenario to try to plan out my idea thus far:
- BusinessAnalyst makes changes to the business model in Webpshere.
- Changes are recorded in a view in WBM, the ChangeLog
- BusinessAnalyst commits changes by clicking a button in the view.
- ChangeLog determines the file name of the process currently in the editor.
- ChangeLog finds the associated Eclipse IDE process model, currently stored in a predefined location.
- ChangeLog updates the Eclipse IDE process model. It does this using a set of predefined mappings, which may be generated as needed, or stored in a file.
- ChangeLog updates mappings if they are stored in a file
- Developper clicks a button in the workflow viewer in Eclipse to refresh the Eclipse IDE process model. The process model currently in the view is refreshed and the updated process appears.
Week 5
At the beginning of this week, my mentor told me that I would not only be attending CSER with other members from the lab, but I that I would have to prepare a poster for the student poster reception. I was a bit confused, since I thought that I would have to have a full implementation with results, but she said that I would be preparing more of a proposal poster. I spent most of this week preparing my poster, which is titled "A method for keeping business process models and software synchronized."
When I wasn't working on my poster, I was trying to get a handle on the process editor, like last week. I had a bit more success this week. I figured out I need to define a EContentAdapter and attach it to the resource set of the process editor. I can manage to attach it to the project, but not the process specifically. This is frustrating.
Week 6 and CSER
Success! I managed to track changes within the WBM. I updated the WBM to the latest version, which had expanded capabilities. It allowed me to attach an adapter to the model, and it gives me the information I need. I don't want to spend too much time on that, so I have changed my focus to tracking changes in Eclipse.
I just got back from CSER in London, ON. I got to spend the weekend talking with grad students and professors from all over Canada. The advice I keep getting from everyone is to pick the advisor, not the school. After hearing about all the different experiences, I'm beginning to believe that they are right. About 80% of the presenters at CSER were women. It was very impressive. I had difficulty understanding many of the lectures, especially many of the acronyms, but thankfully the grad students were willing to explain concepts to me. I'm very excited about all the different courses I can take next year, and hearing the grad students talk about all the graduate courses, I wish I could take them too.
I presented my poster in the student poster reception last night. I think it went well. One professor told me to describe my poster in two sentences using only two verbs. That was a challenge! I didn't receive a lot of feedback, most were asking me to justify why this is a meaningful problem. I got to meet professors from other universities, but I wasn't very familiar with their names or backgrounds. I can understand why conferences are important, and next time I will be much more familiar with people.
My mentor did a presentation to the whole conference. She was describing the future direction of her work, with is tracking usability in mobile devices. She is a very strong presenter, giving a clear and interesting presentation.
I was starting to get frustrated with my project, but after this conference, I almost went straight to work when I got back. I hope I can keep up this momentum for the next ten weeks!
My mentor took a picture of me with my poster with her BlackBerry:
Week 7
This week I focused on trying to track changes in Eclipse. I succeded in doing this, but it does not give me enough information about which object the change occurs. I did this by attaching a listener to the document of the active editor. I started to work with the model as a DOMModel, instead of just as text, and it seems that I can get different information this way. I'm thinking that I will be able to track the changes using a combination of both models.
Before I could track the changes, I had to figure out how to upgrade the Webtools Platform plug-ins within eclipse. A lot of the Business Process Explorer code is written using version 1.1, and I needed to bring it up to 2.0. I was given a set of plug-ins from other students, but they all needed to be updated. Eventually I stopped using all the plug-ins given with the BPE and used a clean copy of Eclipse with WTP 2.0 installed. I then had to bring some of the BPE code up to date. This took me two days to figure out.
The Snowbirds were in town this week. Here is a picture:
Week 8
This week I learned a lot about the structure of Eclipse. I keep trying to track changes in Eclipse, which I managed to do for add and change events, but I could not track deletions.
I was getting frustrated, so I completely changed focus, and started trying to get access to the "undo" stack within Eclipse. I managed to track all changes in everything EXCEPT the XML Editor that I need to track. I had a meeting with my mentor, and she told me to assume the generic editor in Eclipse, and not worry about getting the implementation to work exactly for the existing system. She told me that the goal is to show that the method works, not that it works for that specific implementation. We agreed that I would spend one more day trying to implement an "Undo" listener, and if that doesn't work then give up on that specific implementation.
The timetable was released this week, so I had to pick my classes for next year. I only need five classes to graduate, so I had to pick at least another three classes to remain a full-time student. I want to take more computer science classes so that I have more breadth to my degree. I had a meeting with my mentor and she recommended classes which she thought would give me a solid background for graduate studies. Unfortunately the timetable restricted which classes I can take, but I hope to take classes in operating systems, distributed systems, and databases.
Week 9
Happy Canada Day!
This week went by really fast. It felt like a three day week because of Tuesday being a holiday. I celebrated Canada Day by going downtown to the Canada Day celebrations and then taking the ferry to Wolfe Island.
I looked into INodeAdapter this week, and tried to figure out how the current xml editor deals with changes. I went into the Eclipse CVS and manually inspected the code to determine how it works. I learned about INodeAdapter and INodeNotifier. By attaching an extention of INodeAdapter to each node in the xml editor tree, I can receive notifications when a change occurs. For the first time I can track node deletions!
I can now record the location of a change in a tree, and am notified when a change occurs, but these two events occur in separate classes, so I need a way to correlate the two. My goal for next week is to put this altogether in a viewer for the user.
Week 10
I finished working on the viewer for tracking Eclipse changes this week. By researching viewers in Eclipse using Safari, I wrote a plug-in that notifies the viewer when a user selects an object in the xml viewer. This is stored in a temporary class. If a change occurs, the adapter class retrieves the most recently selected element from the temporary class, and inserts the change as a line in the change viewer. Once the user is done tracking changes, they can save the changes to a file. Here is a screenshot of the final product:I registered for the GRE this week. Some of my friends who have written it registered the week before for an August date. It seems to be much more popular this year. The soonest date I could get in Toronto is October. I managed to get a date in Ottawa the first week in September. I found some friends who were willing to write it on that date too, and we will carpool to Ottawa all together.
Week 11
This week started so slowly! I went back to work with the WBM so that I could track changes. I wanted to use the code from the Eclipse viewer to save time, but I found that the adapters that notify when changes occur did not give me the pathing information of the objects. I also had a lot of trouble figuring what types of changes occured, since many notifiers are triggered for each change. For example, when a remove occurs, all children of the object fire a change notification, the object fires a notification, and its parent object fires a notification. I spent all week sorting through the "noise". I have compiled a list of all types of changes that need to be tracked, and have implemented listeners for about half of them.
I went back to Toronto on Saturday for my high school reunion. Although traditional reunions are every five years, many of the girls are heading to graduate schools around the globe. We wanted to get together before they all leave. It was fun catching up with people I haven't seen in a few years.
Week 12
This week I was still working on tracking changes in WBM. I talked to my mentor, since this is taking a lot longer than expected. I was considering pulling back the project to just consider primitive changes, but she said that completing the tracking changes component is more important than getting to merging changes. So I am still working on tracking all the changes, including structural changes in WBM. I find that even if a simple change occurs, many change notifiers are fired, and I need to figure out a way to cut through the noise. A simple "add a business item to an output" can cause dozens of change notifications. I have to hard code which types of notifiers to listen to for each change.
At this point I have completed most of the primitive changes, including small changes to elements. I spent a day trying to listen for task deletions. I then tried to make my code much more abstract by using parent classes. I hoped that by doing this I could cut out having to cover the cases for all types of elements. This is a trade-off, since i may need to consider smaller cases, but can remove a lot of similar (but not duplicate) code.
Week 13
This week I worked on tracking deletions of all elements. When an item is deleted, every component of it fires a notification. I had to figure out which notifications to ignore, but still make sure that they will be tracked in other cases. For example, I want to ignore an input deletion if a task is deleted, but if just the input is deleted, I want to track that. To get around this, I made it so that if certain types of notifications are fired (such as a task deletion), the change list is pruned so that only the task deletion is recorded.
I was having trouble tracking the deletion of an input branch on a join. I then went back to eclipse to see how it was done. It was then that I realised that the input branches are created only if input data exists. In other words, if a branch is deleted, it is assumed that the input on the join is deleted too.
I went across the border for the weekend. The line at the border was a few hours, so I spent that time working on code! I even rigged up a shelter to block out the sun so I could dim the screen!
Week 14
Short week! I'm getting my wisdom teeth out next week, so I had to go to Toronto for the consultation. I worked Monday (a holiday) so I could take Friday off. Any time I miss next week for the surgery I'll make up at the end.
I worked on adding elements this week. This is the last thing I have to track. When an element is added, I had to come up with a way to discover where it was placed. I decided that the best way to do this is to track the addition or deletion of "connection arrows". When an arrow is added or deleted, I record the source and target of the arrow. I am done tracking deletions of the arrows. Next week I will work on "adds".
Week 15
I finished tracking all elements in WBM this week! It's been very frustrating, but it's nice to be finished!
I talked with my mentor about how to proceed, since I will not have enough time to implementing the merging step. At this point, she wants me to make my code more robust so that someone else (or me!) can take over. She wants me to prepare the report for CDMP based on this work, and describe ideas for implementing change merges.
My mentor has given me some new work, which is to help out one of the graduate students with an implementation. It is based on my work from last summer. It would be much more time efficient if I can do the implementation work. This work needs to be done quickly for a conference that is coming up, so it will be my prority for the next week.
I got my wisdom teeth out this week, so I'm going to work extra days at the end, but thus far I've been working every day (including the weekend). The surgeon called to check on me and was surprised that I was even awake! I can't eat but I can still code!
Week 16
I worked from Toronto this week. I was expecting to be back in Kingston by Tuesday, but my surgeon didn't want me to leave the city. I put in some really long days (10+ hours!) trying to get all the work done for one of the graduate students. We communicated via msn messenger and email. It can be a challenge to describe a problem to someone in words. We had some problems with Vista compatibility. I'm running Vista so I can't use any Eclipse versions less than 3.2.2. She uses XP and was using Eclipse 3.2.1. Eventually we figured out how to upgrade the project so that it could run in 3.2.2.
The project I was working on was about Clone Detection. I had to integrate the implementation into the Business Process Explorer. This meant that I had to gather all the required information from the user, extract the required data from files, and then call the clone detection methods. Some of the processes involved several steps, so I had to come up with a display that would show the user all the required steps. Once again I used skills I learned my CISC323 (software engineering) class. I had to make quick mock-ups of potential layouts to send to the rest of the team. The buttons didn't work, but it gave the team an idea of how it would work.
I've been living on milkshakes this week. I'm an ice cream addict, but I think I've had enough ice cream for the next few months!
Week 17
I finished all the implementations for the clone detection on Monday. The output was wrong on my computer, but it was fine for the graduate student. We figured out that there were some values that she had hard-coded that did not exist on my computer.
On Tuesday and Wednesday I worked to make my code more robust. I added a lot of commenting, explaining not only how it works, but why I did things the way I did. I also tried to make the code a lot simpler by eliminating unecessary code.
The 16 weeks are over, but my work isn't finished. I'm taking the next week off to prepare for the GRE exam. I will be back to work the first week of school. I'll finish overhauling my code and write the report. I spoke to my mentor and she agreed to this schedule.
Week 18 - Sept 8 to 14
I met with my mentor this week to show her all my work. She went through my project line by line and wanted me to explain how it all works. There were other graduate students there since they will now be working with my program. We identifies areas that it can extended and how to proceed from here.
We talked about the report, and she wants me to take a slightly different direction with it. She wants me to create a case study to show that my implementation work. So it's back to coding and writing for me! I hope to get this report done before school gets busy.
Week 19 - Sept 15 to 21
i met with a graduate student this week to transfer my project to him and to explain it. He did not have any background in eclipse plugins so I gave him links to some readings. I will probably meet up with him again in a week once he has caught up on the background information.
News
The web site is up and running!
(2008-05-05)