Team:Berkeley Software/JoannaNotebook

Joanna's iGEM 2009 Notebook



Hi there, my name is Joanna Chen. Welcome to my notebook for iGEM 2009. I am on the UC Berkeley Computational Tools team. This summer we will be working on improving and adding to Clotho, a tool last year's team started making. I'm excited to be working on this project, and hope the team will have plenty to show by the end of iGEM. When school starts in the fall, I will be a senior majoring in Bioengineering at UC Berkeley.

Week of June 1, 2009
Monday was the first day of iGEM. We met as a team at 9am. Then, we went to a lab safety training, so we can go into the wet lab to work with the Berkeley experimental iGEM team when necessary. Following that, we had a pizza lunch with (almost) everyone at Berkeley involved with iGEM this summer. There, the computational and wetlab teams got to meet each other and hear both team leaders talk briefly about plans for the upcoming weeks. In the afternoon, Doug gave the computational team a brief overview of EDA (Electronic Design Automation) - his area of research - before showing us two webpages about Clotho and having each of us get an account on Bugzilla, the bug tracking tool we will be using. He then gave an overview of projects we could work on this summer to improve Clotho. We ended the day by setting up CVS with Netbeans so we could download the current source code for Clotho.

Tuesday morning, we had a long team meeting where Doug introduced us to editing this wiki, gave us a Clotho tutorial, and briefly discussed the Ptolemy coding standards which we will be using. Doug also assigned each of us a Clotho help file or two to be in charge of and edit by the end of the week. Mine was the Features Library. I spent the afternoon playing with Clotho, finding bugs in Clotho, and improving the help file.

Wednesday Doug gave us a tutorial on the Clotho Data Model. Later, I had my meeting with Doug to talk about my project area for the summer. I will be working on Visualization with Richard. We also decided my short term project would be to make a plugin with drag and drop functionality for icons (more on these shortly). Afterward, I spent a little more time playing with Clotho and looking for bugs.

Project description: Visualization

3 Areas we could work on: Some existing visualization tools to look at:
 * Design
 * Several levels of abstraction, from DNA sequence to icons of features (which ideally can be dragged and dropped in the window) to parts and even systems(??)
 * Data Management
 * Be able to visually represent the relationships between data
 * Simulation

Short-Term Task - 1st Plugin: Drag and Drop Icons
 * Create a new plugin in Views menu of Clotho's Main Toolbar
 * Have some icons and some connectors
 * Allow user to drag icons around and connect them
 * Talk to Richard about plugins
 * First assess what is already available with regard to Java and GUIs
 * NetBeans Visual Library?
 * Take a look at BioJADE and ProMoT source code

Thursday
 * More playing with Clotho and bug-finding, including testing the Parts Manager by adding random (and malformed) information for parts
 * Committed the changes I made in the Features Library help file
 * Looked into BioJADE (haven't found much that was useful)
 * Group meeting
 * Decided on meeting times for each of the project areas
 * Everyone reported the bugs they found to Doug

Friday
 * Adding more content to this page
 * Followed the NetBeans Visual Library tutorial to learn the basics about the NetBeans Visual Library API and to create a NetBeans module with drag and drop functionality

Week of June 8, 2009
Monday
 * Group meeting in the morning
 * Project area presentations next week, 10-15 minutes long
 * Visualization is on Monday 6/15
 * Tried to do something similar to Friday's NetBeans module exercise in a JFrame in a Java Application
 * Not as easy at it sounds, didn't get it to work yet
 * Tried to run BioJADE to reference what they did (maybe easier alternative??)
 * Not working either
 * Clotho Plugin Tutorial by Doug and Richard

Tuesday
 * Still messing around with BioJADE, still not working
 * Checked Clotho Features Library again, closed bugs are indeed gone
 * Set up the framework for my plugin

Wednesday
 * Went back to modifying the NetBeans module exercise to try to get it to work as a Java plugin to Clotho
 * Possibly just need to copy org-netbeans-api-visual.jar into the library
 * Need more work here
 * Early this afternoon, the campus wireless internet stopped working and I couldn't reconnect... annoying...
 * Movie social tonight with the team, we watched Goonies

Thursday
 * Still trying to get NetBeans module exercise to work as a Java plugin to Clotho
 * Visualization meeting with Doug and Richard
 * Still not much luck getting any drag and drop things to work
 * Things to look into:
 * Me:
 * Dig through BioJADE source to see what they did -> hard to pinpoint the useful pieces
 * AWT canvas (in Java) -> nope, it's just a rectangular area to paint stuff on
 * Icons in Swing -> maybe: icons can be inserted into labels, labels can be moved by writing handling code for mouse actions, labels not moving as I want them to though, also seems like it would be tedious to write an entire GUI this way
 * Richard:
 * Jython Tk
 * JavaFX -> might work
 * QT with Java
 * Group meeting

Friday
 * Trying some more things with moving icons in labels
 * Using JavaFX in Java demo that Richard found online runs successfully
 * Trying to modify to work as a Clotho plugin to see if we would be able to use JavaFX with Clotho
 * Not successful yet, Richard and I are still trying to track down the source of the problem(s)
 * Some key piece may be missing or somehow Clotho can't access it

Sunday
 * Prepare slides for visualization presentation with Richard
 * Useful link: http://syntheticbiology.org/Abstraction_hierarchy.html

Week of June 15, 2009
Monday
 * Group meeting - presentations from Data Model, Plug-ins, and Visualization (Richard and me!)
 * Richard discovered there was a new Substance.jar library (for the skins) that might possibly work with JavaFX
 * We spent the afternoon trying to get Clotho to work with the new Substance.jar
 * Got Clotho working
 * But JavaFX plugin still crashes Clotho

Tuesday
 * Did some searching for other toolkits for making drag and drop GUI's in Java
 * Turned up an example of a drag and drop GUI made with Java AWT at http://www.java2s.com/Code/Java/Swing-JFC/Draganddrop.htm
 * Drag and drop GUI definitely doable in Java AWT, but cumbersome
 * We (Doug, Richard, and I) decided at the end of the day that we would just make the visualization piece as a standalone using JavaFX and somehow connect it to Clotho

Wednesday
 * Learning JavaFX
 * GUI applications with JavaFX tutorial: http://java.sun.com/javafx/1/tutorials/ui/
 * Got an icon to drag and drop
 * Designing the layout of our visualization piece

Thursday
 * Visualization meeting
 * Concluded that connecting a JavaFX piece to Clotho would be more troublesome that it is worth
 * Richard discovered that the NetBeans Visual Library API could be used outside of a NetBeans Module
 * Concluded that would be the best way to go, keeps the visualization piece as a Clotho plugin
 * Things to work on
 * Thumbnail drag (me)
 * Grid scheme (Richard)
 * Listeners (for mouse events)
 * Object to picture relationships
 * Visual library as plugin to Clotho
 * Group meeting - presentations from Language, Robot, and Kepler

Thursday & Friday
 * Working on drag and drop from a thumbnail to a workspace
 * Reference code from NetBeans Visual Library tutorial and BlueMarine

Week of June 22, 2009
I spent most of this week trying to make a working thumbnail drag. That is, I wanted to be able to have a pane with thumbnails and another working pane. When the user drags a thumbnail image from the thumbnail pane to the working pane, a copy of the thumbnail image would appear on the working pane where the user let go of the mouse. However, this turned out to be a very difficult task in Java/Netbeans Visual Library. Netbeans Visual Library uses ImageWidgets to attach images to Scenes. Each pane that I had was its own Scene. Conceptually, I wanted an ImageWidget to detect a mouse drag gesture and make a copy of itself, then the Scene of the working pane to detect where the drag was released to place the ImageWidget there. However, there is no easy way to do that with the Visual Library.

After spending a good portion of the week trying to do the above, I tried ways of mimicking the drag and drop behavior by storing information about the thumbnail the mouse was pressed on and then retrieving that information to create a new ImageWidget when the mouse was released over the other Scene. However, I also ran into several problems with that. One was that the mouse released mouse listener didn't seem to work for some reason. I also had trouble storing the information for the new widget somewhere such that the other Scene could access it.

I finally had limited success on Thursday afternoon. I was able to double-click on a thumbnail and have it pop up a new ImageWidget in a default location on the working pane. (The mouse listener for the double-click actually creates the new ImageWidget in the other Scene, so I didn't need to worry about storing information.)

Friday morning Richard told me about the MoveProvider class in org.netbeans.api.visual.action, which allowed me to create the ImageWidget in the working pane after the mouse was dragged from a thumbnail and released. However, the ImageWidget will be dropped regardless of the ending location of the mouse, so even if the mouse is dropped outside of the visualization window, an ImageWidget will still be created. Another unintended behavior is that simply clicking on a thumbnail will trigger the creation of a new ImageWidget in the working pane. These should be fixed so that ImageWidgets are only dropped when the mouse is released in the working pane.

Friday afternoon, Richard merged the code he had been working on this week with what I had come up with for the thumbnail "drag". We now have a visualization piece in which one can click/drag thumbnails to create new ImageWidgets in the working pane and reorder them on a grid.

Week of June 29, 2009
This week we named the visualization piece Spectacles. I have been working on integrating Eugene (the language piece) into Spectacles. With some help from Adam and Lesia, I got the Eugene lexer and parser running from Netbeans. Later, we made it into a .jar file so we could use it as a library for Spectacles. Meanwhile, I added an Import Eugene feature to Spectacles. When the user selects a Eugene file, it will import the Devices specified in the file by storing and displaying its Components in order. (Eugene Components are analogous to parts and Eugene Devices are analogous to composite parts.) I also modified some existing code so Eugene Component objects are created when part thumbnails are clicked on to create new parts in the working pane. This is still a rather simple version of import and needs a number of improvements.

Things that are not working ideally, still need to be done, or need to be considered:
 * Importing Eugene appends to the end of the open sequence
 * If a Eugene file has multiple devices, they are concatenated and show as one sequence
 * The above two points should be fixed once we implement tabs in the working pane so that each device shows on a different tab
 * Import Eugene will break if there is a Device object within a Device (i.e. in the components list of the Device)
 * Should there be a Component object that represents nested Devices, or should import just flatten out the structure by inserting the Components of the Devices into the sequence?
 * Display information about the Components on double-click or right-click
 * How to determine names and type names for new components created when populating the working pane from the thumbnails?
 * Currently newly created Components only contain an image path
 * This may be more of an issue for exporting to a Eugene file

Week of July 6, 2009
Improvents to Spectacles made this week:
 * Nested Devices are now supported
 * (Components and Devices are now stored in a wrapper object, and it is this object that is now backing the image widgets shown)
 * Added a bottom pane that displays information about the component or nested device that is selected
 * After Richard added in tabs for the working pane, I was able to fix import to import each device into a new tab
 * All Devices are stored in a DeviceTracker so Device objects exist even for top level devices (i.e. those that are not nested within another device)
 * (Edit) Only imported Devices are stored, I need to fix this so that a Device is created when a new tab is opened by the user

Issues to think about/discuss:
 * Names of Components and Devices
 * If more than one file is imported and there are name conflicts, how to handle them?
 * They may or may not be the same object.
 * Check for object equality?
 * Ask the user to change the name? (may create more complications in trying to find everything that needs to be renamed)
 * Say Component c1 is in both Device d1 and Device d2. What if a user wants to change the name of c1 to c2 from d2, does c1 also change to c2 in d1 or does c2 in d2 become a new object?
 * How to keep track of name changes, since lookups in Component and Device hash maps are done by name?
 * What if a user attempts to rename something to an existing name?
 * Automatically disallow?
 * Or ask if the user wants to replace an object with another?
 * Editing Components or Devices
 * If something is used in more than one place, should editing from one place change all of them (currently, they all point to the same object) or should it create a new object?
 * What pieces of information can be changed?
 * Say Component c1 is in both Device d1 and Device d2, should c1 be represented by 1 object or 2? (currently 1)

List of things that still need to be done (from visualization meeting on Thursday):
 * Export
 * Implementations panel
 * Ways to edit information
 * Rules
 * Different views/display things in Clotho's sequence view
 * Preference menu
 * Image paths probably shouldn't be hardcoded
 * Color preferences for color-coding

On Friday, Cesar Rodriguez and Akshay from Stanford came to discuss Eugene, Spectacles, BOL/VBOL, and BioBrick Studio (something they are working on). They had updated the BOGL images, and now call them VBOL (Visual BOL). Also, they have plans to include a canvas in BioBrick Studio similar to Spectacles. We would like to maintain a collaborative effort and develop Spectacles and that part of BioBrick Studio together. They would also like to see a Eugene editor in Spectacles.

Week of July 13, 2009
This week I've continued to make changes to improve import. I've changed the DeviceTracker to a Manager, which stores the entire data structure created by Eugene, thus preventing information loss upon export. Export has also been implemented. In addition, Richard has added a notepad window based on Cesar's suggestion, and I've added buttons to import from notepad and export to notepad. We've also cleared up some miscommunication; components should actually be called parts.

Friday was our trip to Stanford to meet with Cesar, Prof. Drew Endy, and some of the people working with them. We left at 9 in the morning and drove down to Stanford, where we first had a meeting with Cesar about the big picture to agree on the pieces that were necessary to connect our two projects. We then had a mini tour of campus while walking to lunch. Afterward, we met with Prof. Endy and Cesar and showed them what we had of Spectacles and Eugene. They also talked about their projects. Later in the afternoon, we were invited to a seminar series Prof. Endy and some others were trying to start. Finally we had dinner in downtown Palo Alto. Unforntunately, no one brought a camera, so we don't have any pictures.

Week of July 20, 2009
This week I've been fixing things that weren't quite done or done right. These include:
 * Export after rearranging parts reflects those changes
 * Name changes to parts propagate throughout all devices in the frame
 * A unique wrapper for each widget (especially for those representing nested devices)
 * No longer need a HashMap storing wrapped parts, parts are stored directly in _eugeneComponentDecs in Manager
 * Properly put parts created from thumnail scene into Manager, including creating necessary ComponentDefs and PropertyDefs
 * Device name can be changed
 * Checks are in place to prevent the user from using illegal names
 * Names cannot be empty
 * Names can only contain letters, numbers, and underscores
 * Names must begin with a letter or an underscore
 * All parts and devices must have unique names

Week of July 27, 2009
This week, I implemented clear workspace and fixed the parts combo box so it creates parts properly. I also refactored names that had Component in them to have Part instead. Then I went about setting up a project for ClothoII and downloading the code for that so I could look at how to connect to it and a database and start thinking about the implementations pane we want to put in Spectacles.

Thursday was the SynBio BBQ. We drove up to Tilden Park in the Berkeley hills, where we filled ourselves with hot dogs and other goodies while mingling with iGEM teams from Stanford and UCSF as well as some high school students in a synthetic bio program at JBEI. Afterward, some people played volleyball or joined in a huge game of soccer. I had brought my kite, so a few people and I tried to fly it, but there was barely any wind. It would only be windy enough to fly the kite for a minute or so at a time.

Week of August 3, 2009
My goodness, it's August already! This week was "Operation Migration" - everyone on the team was migrating new and/or old tools to the new Clotho core framework. This meant that Richard and I moved Spectacles into Clotho. All sorts of little problems arose, and some of them took a while to figure out how to fix. The major ones were changing our temporary files to use the system's tmp directory and getting our images to load when running Spectacles from Clotho (the latter of which Richard finally figured out today). Everything should be working now. I've also been making a few icons for the various tools that have now been ported into Clotho. Finally, I've been working on connecting Spectacles to databases through Clotho's database connection, but things aren't quite working yet. Either I'm missing something that Clotho needs for the database connection to work, or the database piece is still buggy.

Week of August 10, 2009
Unfortunately, this week was not as productive as I had hoped. At first, there were some issues with the database connection code, so it wouldn't run. After some time and help from Bing, it finally worked. Yet the next day, it mysteriously stopped working again. Finally, by the middle of the week, all the problems seemed to have been solved, and I could focus on connecting Spectacles to the database and looking up parts. This however, was not trivial. I had tried some stuff and put together some code by Thursday's meeting, and showed the team the gist of what I wanted to do. From the meeting, I realized that different users may have the relevant pieces of data stored differently, even after taking bindings into account and using the Clotho keywords. I am now adding in an UI for the user to specify the object that contains information about parts; the fields that contain name, id, type, and sequence information; and the term to match to filter the results by. By late Friday afternoon, I found it harder and harder to concentrate, as I was getting anxious about taking my GRE on Saturday. The GRE turned out ok; I'm glad it's done with and out of the way now.

Week of August 17, 2009
This week the comp team got a chance to go the wet lab to learn about assembling parts and do some lab work. On Tuesday, we did some EcoRI/BamHI Transfers to move basic parts from entry vectors to assembly vectors. Wednesday, we picked some colonies to grow. Thursday, we did minipreps to isolate the plasmids from the cells and ran gels to check if we got the correct plasmids. We also started the assembly process with a "one pot" digestion and ligation. Friday, we went back in to pick colonies again. Sherine, who took us through all these steps, was going to finish up the assembly on Saturday (thanks =) ). It was nice to experience what goes on in the wet lab.  I now have a better understanding of what terms like Eco/Bam transfer and miniprep means and will hopefully be able to better understand what other wet lab people will be talking about at the Jamboree.

Meanwhile, on the computational side of things, I finally managed to get the database lookup of part implementations working by the end of Friday. Wet lab work ate up some time during the week, and I also spent a bit of time figuring out why the combo boxes weren't working as I thought they would. I still need to put in some checks and do some more testing.

School is starting next Wednesday! :o

Back to Berkeley Software notebook index