Kepler: Issueshttps://projects.ecoinformatics.org/ecoinfo/https://projects.ecoinformatics.org/ecoinfo/ecoinfo/favicon.ico?14691340362010-03-05T22:14:10ZEcoinformatics Redmine
Redmine Bug #4872 (Resolved): listen to director throws errorhttps://projects.ecoinformatics.org/ecoinfo/issues/48722010-03-05T22:14:10ZOliver Soongsoong@nceas.ucsb.edu
<p>Add an SDF Director and the Tools->Listen to Director. An error pops up on the console:</p>
<p>Error creating action for class: org.kepler.gui.RunWithFeedbackChkBoxAction : null<br />Error creating action for class: org.kepler.gui.RunWithFeedbackChkBoxAction</p>
<p>I'm not sure if this causes problems or not.</p> Bug #4846 (Resolved): error opening kar from local repositoryhttps://projects.ecoinformatics.org/ecoinfo/issues/48462010-02-25T22:50:11ZOliver Soongsoong@nceas.ucsb.edu
<p>This is with wrp at r23202. I deleted .kepler and KeplerData. I create a trivial workflow (default SDF and RExpression) and save it as a KAR in the default local repository. On restarting Kepler, the KAR and local repository are not listed in the components pane. If I go into Sources and manually trigger a re-build of the component library, I can see the KAR, but nothing happens when I attempt to open it (right-click menu) except an error in the console:</p>
<p>org.kepler.objectmanager.cache.CacheException: Exception occurred while deserializing object<br /> at org.kepler.objectmanager.cache.CacheManager.getObject(CacheManager.java:529)<br /> at org.kepler.kar.handlers.ActorMetadataKAREntryHandler.open(ActorMetadataKAREntryHandler.java:206)<br /> at org.kepler.kar.KARFile.open(KARFile.java:889)<br /> at org.kepler.kar.KARFile.openKARContents(KARFile.java:665)<br /> at org.kepler.gui.kar.OpenArchiveAction.openKAR(OpenArchiveAction.java:162)<br /> at org.kepler.gui.kar.OpenArchiveAction.actionPerformed(OpenArchiveAction.java:143)<br /> at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)<br /> at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)<br /> at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)<br /> at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)<br /> at javax.swing.AbstractButton.doClick(AbstractButton.java:357)<br /> at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)<br /> at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)<br /> at java.awt.Component.processMouseEvent(Component.java:6263)<br /> at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)<br /> at java.awt.Component.processEvent(Component.java:6028)<br /> at java.awt.Container.processEvent(Container.java:2041)<br /> at java.awt.Component.dispatchEventImpl(Component.java:4630)<br /> at java.awt.Container.dispatchEventImpl(Container.java:2099)<br /> at java.awt.Component.dispatchEvent(Component.java:4460)<br /> at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)<br /> at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)<br /> at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)<br /> at java.awt.Container.dispatchEventImpl(Container.java:2085)<br /> at java.awt.Window.dispatchEventImpl(Window.java:2475)<br /> at java.awt.Component.dispatchEvent(Component.java:4460)<br /> at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)<br /> at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)<br /> at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)<br /> at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)<br /> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)<br /> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)<br /> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)<br />Caused by: java.io.IOException: Error in ActorCacheObject(ReadExternal): null<br /> at org.kepler.objectmanager.cache.ActorCacheObject.readExternal(ActorCacheObject.java:250)<br /> at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792)<br /> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)<br /> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)<br /> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)<br /> at org.kepler.objectmanager.cache.CacheManager.getObject(CacheManager.java:517)<br /> ... 32 more</p> Bug #4832 (Resolved): python actor outputting to disconnected composite output throws errorhttps://projects.ecoinformatics.org/ecoinfo/issues/48322010-02-24T21:07:44ZOliver Soongsoong@nceas.ucsb.edu
<p>I have a composite actor with an output port. Inside, I have an Expression passing a token to the default python actor, which repeats the token to the composite output port. The composite output port is disconnected. I get an error:</p>
<p>ptolemy.kernel.util.IllegalActionException: Error in invoking the fire method:<br />line 7, in fire<br /> at java.util.Arrays$ArrayList.<init>(Arrays.java:3357)</p>
<pre><code>at java.util.Arrays.asList(Arrays.java:3343)</code></pre>
<pre><code>at org.kepler.provenance.PortConnector.sendIdToConnections(PortConnector.java:242)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecordingV8._recordPortEvent(SQLRecordingV8.java:1974)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecording.portEvent(SQLRecording.java:584)</code></pre>
<pre><code>at org.kepler.provenance.ProvenanceRecorder.portEvent(ProvenanceRecorder.java:819)</code></pre>
<pre><code>at ptolemy.actor.IOPort._notifyPortEventListeners(IOPort.java:4130)</code></pre>
<pre><code>at ptolemy.actor.IOPort.broadcast(IOPort.java:261)</code></pre>
<pre><code>at ptolemy.actor.TypedIOPort.broadcast(TypedIOPort.java:238)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)</code></pre>
<pre><code>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</code></pre>
<pre><code>at java.lang.reflect.Method.invoke(Method.java:597)</code></pre>
<p>java.lang.NullPointerException: java.lang.NullPointerException</p>
<pre><code>in .tpc03-veld-condition-herbs.Prepare Data.Spatial Join Landtypes.Herbaceous Site Landtypes.Spatial Join.Synchronize<br />Because:<br />Traceback (innermost last):<br /> File "&lt;string&gt;", line 7, in fire<br /> at java.util.Arrays$ArrayList.&lt;init&gt;(Arrays.java:3357)</code></pre>
<pre><code>at java.util.Arrays.asList(Arrays.java:3343)</code></pre>
<pre><code>at org.kepler.provenance.PortConnector.sendIdToConnections(PortConnector.java:242)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecordingV8._recordPortEvent(SQLRecordingV8.java:1974)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecording.portEvent(SQLRecording.java:584)</code></pre>
<pre><code>at org.kepler.provenance.ProvenanceRecorder.portEvent(ProvenanceRecorder.java:819)</code></pre>
<pre><code>at ptolemy.actor.IOPort._notifyPortEventListeners(IOPort.java:4130)</code></pre>
<pre><code>at ptolemy.actor.IOPort.broadcast(IOPort.java:261)</code></pre>
<pre><code>at ptolemy.actor.TypedIOPort.broadcast(TypedIOPort.java:238)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)</code></pre>
<pre><code>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</code></pre>
<pre><code>at java.lang.reflect.Method.invoke(Method.java:597)</code></pre>
<p>java.lang.NullPointerException: java.lang.NullPointerException</p>
<pre><code>at ptolemy.actor.lib.python.PythonScript._reportScriptError(PythonScript.java:604)<br /> at ptolemy.actor.lib.python.PythonScript._invokeMethod(PythonScript.java:560)<br /> at ptolemy.actor.lib.python.PythonScript.fire(PythonScript.java:254)<br /> at ptolemy.actor.AtomicActor.iterate(AtomicActor.java:469)<br /> at ptolemy.actor.sched.StaticSchedulingDirector.fire(StaticSchedulingDirector.java:188)<br /> at ptolemy.actor.CompositeActor.fire(CompositeActor.java:458)<br /> at ptolemy.actor.Manager.iterate(Manager.java:714)<br /> at ptolemy.actor.Manager.execute(Manager.java:349)<br /> at ptolemy.actor.Manager.run(Manager.java:1119)<br /> at ptolemy.actor.Manager$3.run(Manager.java:1160)<br />Caused by: Traceback (innermost last):<br /> File "&lt;string&gt;", line 7, in fire<br /> at java.util.Arrays$ArrayList.&lt;init&gt;(Arrays.java:3357)</code></pre>
<pre><code>at java.util.Arrays.asList(Arrays.java:3343)</code></pre>
<pre><code>at org.kepler.provenance.PortConnector.sendIdToConnections(PortConnector.java:242)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecordingV8._recordPortEvent(SQLRecordingV8.java:1974)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecording.portEvent(SQLRecording.java:584)</code></pre>
<pre><code>at org.kepler.provenance.ProvenanceRecorder.portEvent(ProvenanceRecorder.java:819)</code></pre>
<pre><code>at ptolemy.actor.IOPort._notifyPortEventListeners(IOPort.java:4130)</code></pre>
<pre><code>at ptolemy.actor.IOPort.broadcast(IOPort.java:261)</code></pre>
<pre><code>at ptolemy.actor.TypedIOPort.broadcast(TypedIOPort.java:238)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)</code></pre>
<pre><code>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</code></pre>
<pre><code>at java.lang.reflect.Method.invoke(Method.java:597)</code></pre>
<p>java.lang.NullPointerException: java.lang.NullPointerException</p>
<pre><code>at org.python.core.Py.JavaError(Unknown Source)<br /> at org.python.core.Py.JavaError(Unknown Source)<br /> at org.python.core.PyReflectedFunction.__call__(Unknown Source)<br /> at org.python.core.PyMethod.__call__(Unknown Source)<br /> at org.python.core.PyObject.__call__(Unknown Source)<br /> at org.python.core.PyInstance.invoke(Unknown Source)<br /> at org.python.pycode._pyx21.fire$2(&lt;string&gt;:7)<br /> at org.python.pycode._pyx21.call_function(&lt;string&gt;)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyFunction.__call__(Unknown Source)<br /> at org.python.core.PyMethod.__call__(Unknown Source)<br /> at org.python.core.PyObject.__call__(Unknown Source)<br /> at ptolemy.actor.lib.python.PythonScript._invokeMethod(PythonScript.java:512)<br /> ... 8 more<br />Caused by: Traceback (innermost last):<br /> File "&lt;string&gt;", line 7, in fire<br /> at java.util.Arrays$ArrayList.&lt;init&gt;(Arrays.java:3357)</code></pre>
<pre><code>at java.util.Arrays.asList(Arrays.java:3343)</code></pre>
<pre><code>at org.kepler.provenance.PortConnector.sendIdToConnections(PortConnector.java:242)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecordingV8._recordPortEvent(SQLRecordingV8.java:1974)</code></pre>
<pre><code>at org.kepler.provenance.sql.SQLRecording.portEvent(SQLRecording.java:584)</code></pre>
<pre><code>at org.kepler.provenance.ProvenanceRecorder.portEvent(ProvenanceRecorder.java:819)</code></pre>
<pre><code>at ptolemy.actor.IOPort._notifyPortEventListeners(IOPort.java:4130)</code></pre>
<pre><code>at ptolemy.actor.IOPort.broadcast(IOPort.java:261)</code></pre>
<pre><code>at ptolemy.actor.TypedIOPort.broadcast(TypedIOPort.java:238)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</code></pre>
<pre><code>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)</code></pre>
<pre><code>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</code></pre>
<pre><code>at java.lang.reflect.Method.invoke(Method.java:597)</code></pre>
<p>java.lang.NullPointerException: java.lang.NullPointerException</p>
<pre><code>at org.python.core.Py.JavaError(Unknown Source)<br /> at org.python.core.Py.JavaError(Unknown Source)<br /> at org.python.core.PyReflectedFunction.__call__(Unknown Source)<br /> at org.python.core.PyMethod.__call__(Unknown Source)<br /> at org.python.core.PyObject.__call__(Unknown Source)<br /> at org.python.core.PyInstance.invoke(Unknown Source)<br /> at org.python.pycode._pyx21.fire$2(&lt;string&gt;:7)<br /> at org.python.pycode._pyx21.call_function(&lt;string&gt;)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyTableCode.call(Unknown Source)<br /> at org.python.core.PyFunction.__call__(Unknown Source)<br /> at org.python.core.PyMethod.__call__(Unknown Source)<br /> at org.python.core.PyObject.__call__(Unknown Source)<br /> at ptolemy.actor.lib.python.PythonScript._invokeMethod(PythonScript.java:512)<br /> at ptolemy.actor.lib.python.PythonScript.fire(PythonScript.java:254)<br /> at ptolemy.actor.AtomicActor.iterate(AtomicActor.java:469)<br /> at ptolemy.actor.sched.StaticSchedulingDirector.fire(StaticSchedulingDirector.java:188)<br /> at ptolemy.actor.CompositeActor.fire(CompositeActor.java:458)<br /> at ptolemy.actor.Manager.iterate(Manager.java:714)<br /> at ptolemy.actor.Manager.execute(Manager.java:349)<br /> at ptolemy.actor.Manager.run(Manager.java:1119)<br /> at ptolemy.actor.Manager$3.run(Manager.java:1160)</code></pre> Bug #4808 (Resolved): ant clean-cache fails, NoClassDefFoundError, org/apache/commons/logging/Log...https://projects.ecoinformatics.org/ecoinfo/issues/48082010-02-18T20:02:37ZOliver Soongsoong@nceas.ucsb.edu
<p>Chris first reported this by e-mail, but I'm still seeing it. Aaron, svn says you put these lines in.</p>
<p>java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory<br /> at org.kepler.util.DotKeplerManager.<clinit>(DotKeplerManager.java:54)<br /> at org.kepler.build.CleanCache.run(CleanCache.java:48)<br /> at org.kepler.build.modules.ModulesTask.execute(ModulesTask.java:86)<br /> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j\<br />ava:39)<br /> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess\<br />orImpl.java:25)<br /> at java.lang.reflect.Method.invoke(Method.java:592)<br /> at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java\<br />:106)<br /> at org.apache.tools.ant.Task.perform(Task.java:348)<br /> at org.apache.tools.ant.Target.execute(Target.java:357)<br /> at org.apache.tools.ant.Target.performTasks(Target.java:385)<br /> at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)<br /> at org.apache.tools.ant.Project.executeTarget(Project.java:1306)<br /> at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExec\<br />utor.java:41)<br /> at org.apache.tools.ant.Project.executeTargets(Project.java:1189)<br /> at org.apache.tools.ant.Main.runBuild(Main.java:758)<br /> at org.apache.tools.ant.Main.startAnt(Main.java:217)<br /> at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)<br /> at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)</p> Bug #4807 (Resolved): GetMetadata does nothinghttps://projects.ecoinformatics.org/ecoinfo/issues/48072010-02-18T19:49:26ZOliver Soongsoong@nceas.ucsb.edu
<p>Search for any data, right click on a search result, and select the only option, "GetMetadata". This does not seem to do anything, and there are no errors on the console. There should probably also be a space in the label as well.</p> Bug #4805 (Resolved): searching for data gives an NPEhttps://projects.ecoinformatics.org/ecoinfo/issues/48052010-02-17T23:52:15ZOliver Soongsoong@nceas.ucsb.edu
<p>I searched for Kruger on both KNB and DEV using both authenticated and unauthenticated searches. I authenticated as necessary, and I got an NPE:</p>
<p>java.lang.NullPointerException<br /> at ptolemy.vergil.basic.KeplerDocumentationAttribute.createInstanceFromExisting(KeplerDocumentationAttribute.java:195)<br /> at org.ecoinformatics.seek.datasource.eml.eml2.Eml200DataSource.generateDocumentationForInstance(Eml200DataSource.java:1070)<br /> at org.ecoinformatics.seek.datasource.eml.eml2.EML2MetadataSpecification.transformResultset(EML2MetadataSpecification.java:252)<br /> at org.ecoinformatics.seek.datasource.eml.eml2.EML2MetadataSpecification.addResultsetRecordsToContainer(EML2MetadataSpecification.java:406)<br />ERROR (org.ecoinformatics.seek.datasource.eml.eml2.Eml200DataSource:generateDocumentationForInstance:1078) error encountered whilst generating default documentation for actor instance: null</p> Bug #4804 (Resolved): copy/paste relation changes width from Auto to 1https://projects.ecoinformatics.org/ecoinfo/issues/48042010-02-17T23:26:36ZOliver Soongsoong@nceas.ucsb.edu
<p>Drag 2 actors to the canvas and join them with a relation. Copy the actors and relation and immediately paste it. The relation width changes from Auto to 1. This is only a problem when the relation joins 2 multiports, but that will happen when a composite actor has a multiport.</p>
<p>This could be a ptolemy problem.</p> Bug #4789 (Resolved): multiport input to composite actor seems to only pass first tokenhttps://projects.ecoinformatics.org/ecoinfo/issues/47892010-02-11T19:01:26ZOliver Soongsoong@nceas.ucsb.edu
<p>See attached workflow. The problem is not likely to sit with RExpression itself, as I can move the RExpression actor out of the composite and things work as expected.</p> Bug #4767 (Resolved): error instantiating actor with port types from KARhttps://projects.ecoinformatics.org/ecoinfo/issues/47672010-02-06T02:52:36ZOliver Soongsoong@nceas.ucsb.edu
<p>Create an Expression actor, give it an input port of type boolean, save it as a KAR into a local repository, then try and drag it onto the canvas. I get an error:</p>
<p>ptolemy.kernel.util.IllegalActionException: TypeAttribute can only be contained by instances of TypedIOPort.<br /> in .Expression.kepler:input and ._type</p> Bug #4730 (Resolved): Kepler cannot run workflows stored in KAR files from the command-line.https://projects.ecoinformatics.org/ecoinfo/issues/47302010-02-03T23:44:46ZOliver Soongsoong@nceas.ucsb.edu
<p>If I run: <br />C:\kepler\build-area>ant run-workflow -Dworkflow="C:\Users\visitor\Desktop\kruger workflows\tpc01-buffalo-tb\tpc01-buffalo-tb.kar"</p>
<p>I get errors: <br />Unsupported file type or connection not available: file:/C:/Users/visitor/Desktop/kruger<br />Unsupported file type or connection not available: file:/C:/kepler/workflows/tpc01-buffalo-tb/tpc01-buffalo-tb.kar</p>
<p>If I run: <br />C:\kepler\build-area>ant run-workflow -Dworkflow="C:\Users\visitor\Desktop\kruger~1\tpc01-buffalo-tb\tpc01-buffalo-tb.kar"</p>
<p>I get this error: <br />Unsupported file type or connection not available: file:/C:/Users/visitor/Desktop/kruger%20workflows/tpc01-buffalo-tb/tpc01-buffalo-tb.kar</p>
<p>I'm guessing this applies to a number of other ant targets as well (most of the run-workflow ones, for example).</p> Bug #4710 (Resolved): RExpression fails to convert arrayType(niltype)https://projects.ecoinformatics.org/ecoinfo/issues/47102010-01-29T02:09:15ZOliver Soongsoong@nceas.ucsb.edu
<p>Create a workflow with 2 RExpressions. The first should output c(NA, NA). The second should take the output from the first as input. Hook a Display to the output of the second to observe the error in R. Basically, a token of arrayType(niltype) is sent, but the second RExpression doesn't know how to convert this and drops the token. I think it just needs another entry of "|| (token_type_string.startsWith("arrayType(niltype"))" around line 631 of RExpression.java.</p> Bug #4653 (Resolved): error message says "data cloumn"https://projects.ecoinformatics.org/ecoinfo/issues/46532010-01-08T01:13:53ZOliver Soongsoong@nceas.ucsb.edu
<p>The data cloumn didn't match head column</p> Bug #4534 (Resolved): add extra space before section headers when BREAK_BEFORE is falsehttps://projects.ecoinformatics.org/ecoinfo/issues/45342009-11-05T19:21:51ZOliver Soongsoong@nceas.ucsb.edu
<p>This is so incredibly trivial, but I can't lower the priority on this any more than it already is.</p>
<p>Section breaks, when BREAK_BEFORE is false, are tight to the previous content on the top, but there is plenty of room between the section header text and the section header horizontal rule. Right now, it looks like the section header text is part of the previous content, and it would look better if there were more space above the section header text.</p>
<p>A workaround is to add a couple of blank text entry boxes before the section header.</p> Bug #4511 (Resolved): There are 2 toolbars in the Kepler main windowhttps://projects.ecoinformatics.org/ecoinfo/issues/45112009-10-28T20:46:23ZOliver Soongsoong@nceas.ucsb.edu
<p>There are 2 toolbars in the Kepler main window, one of which is empty. I've seen this using wrp on Windows and linux. If you drag the main toolbar from its docked location, it is possible to drag a second empty toolbar from the docked area by clicking in just the right place between the menu bar and the tab bars.</p> Bug #3988 (Resolved): Rectangle shifts position on resizehttps://projects.ecoinformatics.org/ecoinfo/issues/39882009-04-17T19:11:11ZOliver Soongsoong@nceas.ucsb.edu
<p>If I create a rectangle (components->workflow->workflow documentation) and resize it, the entire rectangle shifts slightly up and left.</p>