People: Matt Bone
From Java CoG Kit
Contents |
General Todo:
Automate the build of webstart targets in Maven (Matt)
Get the gt4 provider working in the subversion repository (Matt)
Document the task and task graph connection problem in the abstraction layer as well as the temporary fix (Matt)
Play with AppleScript droplets (Matt)
Local provider mkdir still says it completed successfully even if the directory could not be created because of something like a permissions error (Matt)
Issue with connection manager and multiple users logged into the same machine?? (Matt)
DnD working outside the JVM? Should be easier to do now at least from the local machine to a remote connection. (Matt)
Develop simple test for gridant (Matt)
Develop simple documentation to add new ant tasks take the setup component as example if it is not already in gridant. (Matt)
List all of Matt's Tasks
Documentation
Experience Report
Participating in the Grid Computing and Bioinformatics REU for the second time was even more gratifying the first. I looked forward to returning, eager to review my code after two more years of experience and eager to see how the project had progressed as a whole. I was not disappointed and had the opportunity to do both of these things and more.
Looking back on my code was an insightful experience. Even my mentor admitted that I had been a little "green" during my first year, and my code showed this. Fortunately I had the opportunity to correct many of my previous mistakes. Also, since many of my tasks this summer focused on improving and updating code, I learned how to keep an eye towards writing maintainable programs. In particular I learned the importance of separation of concerns and as well as the importance of using time-tested and common sense design patterns. Maintaining my own code taught me another lesson, too; documentation is of the utmost importance. While I have gradually been learning the importance of documentation, this summer really highlighted it. Code, even your own, can be confusing and downright incomprehensible without comments. Similarly, high level supplemental documentation describing a program's general approach and providing an architectural overview is extremely helpful. I often utilized such documentation this summer and intend to annotate all my future code with similar material.
After nearly two years of working completely on my own, I re-learned the importance of collaboration this summer. Working closely with my coworkers and even participating in some pair programming, I saw how collaboration greatly improves the quality of code. When working on my own, I often forget little things such as simple error checks, but in a pair or a larger group it is easy to catch each others errors much quickly. Other collaboration tools this summer, in particular the wiki and the very active mailing list, enabled communication with team members around the world. It is impressive to see how much can get done in spite of geographic separation. And even with the benefits of all this collaboration, there will always be the need to work independently as well. I was glad, once again, to have the freedom to pursue some of my own ideas this summer. The feeling of independence and self-reliance is refreshing, and I was glad that my mentor provided such an environment.
All told, my experience this summer has been fantastic. It has once again cemented my intention to pursue graduate studies and a life in the research world.
Book Purchases
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissades
One of the first and most influential books on design patterns, this text is highly regarded even though it is now more than a decade old. I have always had an interest in software design, particularly how to write maintainable and readable code. It is interesting that some problems recur throughout software development, and this book identifies these common issues. They are given a name, and the text provides an approach to solving them. Yet, this is not a cookbook. The solutions are not step-by-step guides to solving specific problems; instead, they are rough outlines that encourage programming 'best practices.' In many ways these design patterns remind of mathematics where there are certain classes of proofs that can be applied to many problems. I have already used "Design Patterns" this summer in making several design decisions, and I believe this book will be continue to be useful in the future.
The Mythical Man-Month
by Frederick P. Brooks, Jr.
An even older text than my first book, the first edition of "The Mythical Man-Month" was released in 1975. Still, while searching for 'important' computer science books, this one often came up. This book is mostly aimed at managers of large scale software development projects. While I do not intend on managing anyone anytime soon, I hope this book will give me some insight into how I manage my own individual software projects. Likewise, it is interesting to see a more theoretical approach in light of the community-driven open source model I'm so familiar with. Though aimed at managers, I hope the lessons learned from this book will help me become a more active participant in the large scale projects it describes.
Summaries
Week 10 Summary
I have spent most of this week working out little bugs with the directory browser and documenting Maven and Simpletask. On Thursday I gained access to a GridFTP server for the first time. Fortunately the abstractions package really works, and the directory browser worked just fine (as it really has no clue what kind of server it is connecting to). The documentation is going just fine. I feel that the Maven documentation is most important as there are very few third party resources to be found. Much of what I've learned this summer about Maven has been through reading email lists and forum postings. It is certainly a project in need of more documentation.
Week 9 Summary
This week I worked on what I've been calling the gridface2 package. Essentially I've thrown some design patterns at the old gridface package to make it function like a coherent whole. Now there is a gridface superclass implementation that makes sense. It does things like call code that checks to see if the CoG Setup has run. Also, by imposing a consistent interface to all of our gridfaces, I can construct a 'shell' like Gregor and I talked about at the beginning of the summer, just through reflection. Right now this 'shell' is just a graphical panel with buttons to start gridfaces (important ones like the directory browser and simpler ones like the security panel), but it'd be quite simple to change the view to something more command line oriented as we had discussed previously.
Also, the directory browser is working and, I think, bug free. The main problem now is that the underlying FTP implementation seems fishy. It does not, for instance, work with the FTP server provided by Mac OS X, throwing some exception about not being able to parse the response. Now, being based on bsd, I doubt that this ftp server is anything special, so this, perhaps, points to a more serious underlying problem.
Also, I've converted the imageviewer over to the new simpletask system. This was such a pain-free and quick process, that I'm very reassured about simpletask. It is how end-users should get things done in the cog kit.
Week 7 Summary
- Finished move to Maven Repository Five
- Document Maven Repository MavenRepository
- Moved Simple task to own package and documented SimpleTask
- Pair programmed with Chris for command line version of java2karajan
Week 6 Summary
Most of my time this week was spent on refining the build system. It seems as if Maven is really the way to go. It will allow outside developers to create a CoGKit Project with very little work. It may even be beneficial to create such a sample project for them and offer it for download on the website. I still need to automate the creation of JNLPs and executables. Maven is still in it's infancy and lacks a lot of documentation, so I think I will accomplish these tasks by calling an ant script.
Week 5 Summary
Week 4 Summary
I spent more time on the directory browser this week, but again without a completely implemented task system (due to the switch from the GCM to the gridshell tasks), I've had to spend some more time working with the abstraction layer. I finished creating a task to do file transfers, but still have to generalize this to do directory transfers, too. Also, after a bit of an issue with task and task graph handlers, I started using graphs for things that need to happen atomically within the directory browser (for instance on connect we need to connect, cd, and ls). My struggles with the abstraction layer in this particular instance did lead to some interesting ideas. It seems as though a singleton hashtable across the entire abstraction layer holding all active connections would be beneficial. At the moment, each task handler instantiates its own hashtable. On the more mundane side of things, I've improved the exception handling in the directory browser and finished the DnD implementation (now I just need to complete the file transfer tasks that back it up).
Next week I hope to move the tasks to their own package, document their use, develop a general approach for using task graphs in the new task package, and move my transfer task into the package for generalized use.
Week 3 Summary
I did not get as much done this week as I would have hoped. However, while investigating certain problems with the directory browser and the task implementation inside the gridshell, I learned much more about the internal workings of the CoG kit. In particular, the abstraction package makes more sense to me. Though the abstraction package provides some simplifications, I do think it is important to have a working abstraction that lives at a higher level than the abstraction package itself. Both the grid command manager and the task implementation inside the gridshell are examples of this, but some synthesis of the two is required as neither fully implement all the functionality of the abstraction package. In particular, the task implementation inside the gridshell does not have support for file transfers (only file operations), and I have worked on adding this.
Old Stuff
Automate the build of webstart targets in Maven (Matt)
Get the gt4 provider working in the subversion repository (Matt)
Document the task and task graph connection problem in the abstraction layer as well as the temporary fix (Matt)
Play with AppleScript droplets (Matt)
Local provider mkdir still says it completed successfully even if the directory could not be created because of something like a permissions error (Matt)
Issue with connection manager and multiple users logged into the same machine?? (Matt)
DnD working outside the JVM? Should be easier to do now at least from the local machine to a remote connection. (Matt)
Develop simple test for gridant (Matt)
Develop simple documentation to add new ant tasks take the setup component as example if it is not already in gridant. (Matt)
Finish Implementing the SecurityPanel gridface (Matt)
Checkout the threading issue in the AsyncRunPool in Simple Task (Matt)
Document the SimpleTask package (Matt)
Add task graph support to the SimpleTask package (Matt)
Move file transfer task to the simpletask package, document it's use (Matt)
Finish documentation for ResourceLoaders (Matt)
Add file transfer task to Rob's task system (Matt)
Fix on close behavior for multiple windows (Matt)
Add button on directory browser to create a new directory browser in a new window (Matt)
Add fine grained exception handling (Matt)
Add specific exceptions for all operations that happen while connecting (Matt)
In DBUtil fix the pretty path method to not add a trailing slash (Matt)
Re implement DnD (Matt)
Fix GUI enable/disable issues. (Matt)
Fix submit and wait monitor bug (Matt)
Fix delete issues.
Move the tree path methods to their own class/utility class. (Matt)
Merge connector and task handler into one class {the task handler IS the connector} (Matt)
Create GUI for webstart (Matt)
Make modifications to pom.xml to have ant.jar included (Matt)
Move the Setup component & dependencies from trunk/7 to maven (Matt)
Move the directory browser component & dependencies from trunk/7 to maven (Matt)
Fix the image loader...it doesn't seem to be working from the maven generated jar files (Matt)
Remove extra ImageLoader and TextLoader from the Maven trunk & Fix broken files (Matt)
Find karajan dependencies in maven...com.thoughtworks... (Matt)
Get the jglobus jar file in a maven repository (Matt)
Work on Maven and Eclipse configuration so that org.cogkit.util.CoGAbout runs in both (Matt)
