Modify

Opened 3 years ago

Closed 2 years ago

#9215 closed defect (fixed)

[Patch] Doesn't appear in IE9, and now Firefox 7

Reported by: rjollos Owned by: ChrisNelson
Priority: normal Component: TracJsGanttPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.11

Description

For some time, we haven't been able to see the chart in IE9. Now, on upgrade to Firefox 7, we aren't able to view it in that browser either. Platform is Win 7 x64.

From the Firefox error console:

Error: malformed Unicode character escape sequence
Source File: https://trac.physiosonics.com/wiki/ProjectStatusNotes/M1-I10
Line: 262, Column: 195
Source Code:
t = new JSGantt.TaskItem(311,"#311:UsEngine unit tests fail to run when executed from matlab (assigned task)","2011-09-28","2011-09-28","class=ticket-class7","/ticket/311",0,"Anybody",0,0,0,1,"","UsEngine unit tests fail to run when executed from matlab. The error that results is:\n\n{{{\n#!matlab\n>> runUSEngineUnitTests\nInvalid MEX-file\n\'C:\Users\RjOllos\Workspace\T994-RO\usengine\MatlabSupport\mexRunUsEngineUnitTests.mexw64\':\nThe specified procedure could not be found.\n\nError in runUSEngineUnitTests (line 2)\nmexRunUsEngineUnitTests();\n}}}\n\nThe unit tests run normally when executed from Visual Studio. (assigned task)"); 

Characters 194 and 195 in line 262 are "".

From the IE9 error console:

SCRIPT1023: Expected hexadecimal digit 
M1-I10, line 132 character 486

Line 132 is:

t = new JSGantt.TaskItem(950,"#950:Intellisense is not working correctly after an upgrade to Visual Studio 2010 (assigned defect)","2011-09-27","2011-09-28","class=ticket-class3","/ticket/950",0,"Paul Kline",0,0,1013,1,"","== Problem Description ==\nFollowing the upgrade to VS 2010 in #617, Intellisense has not been working correctly. The \'\'\'Error List\'\'\' pane shows 100 errors, the first 11 of which are:\n{{{\n	1	IntelliSense: cannot open source file \"LoggingModule.h\"	c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h	4\n	2	IntelliSense: cannot open source file \"Printable.h\"	c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h	5\n	3	IntelliSense: cannot open source file \"PsiIntTypes.h\"	c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h	6\n	4	IntelliSense: cannot open source file \"SmartPointer.h\"	c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h	7\n	5	IntelliSense: cannot open source file \"verasonicshal.h\"	c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h	4\n	6	IntelliSense: cannot open source file \"Loggable.h\"	c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h	6\n	7	IntelliSense: Loggable is not a template	c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h

Character 486 in line 132 is the u in:

c:\users\rjollos\work ...

Attachments (1)

tracjsgantt-t9215.diff (5.5 KB) - added by jun66j5 3 years ago.

Download all attachments as: .zip

Change History (25)

comment:1 Changed 3 years ago by rjollos

I'm seeing this issue with r10583 of the macro. I'm upgrading now and I'll report back whether the issue is still seen with never versions of the macro.

comment:2 Changed 3 years ago by rjollos

It looks like this issue may be resolved with r10701 of the plugin. I'll be able to do additional testing after we resolve #9216.

comment:3 Changed 3 years ago by rjollos

With r10710, after resolving the issues in #9216, I still see this same errors in Firefox 7 and IE9. In each case, I checked the console and saw the same JavaScript errors, in general. The errors occur now on different line numbers, but in general IE seems to be having a problem with characters that come after a backslash, and Firefox doesn't like the empty quotes "".

comment:4 Changed 3 years ago by ChrisNelson

Can you view page source on a page that doesn't display and post at least the embedded JS that builds the chart? I'm guessing that there are unusual characters in ticket descriptions or summaries and the plugin isn't escaping them right.

comment:5 Changed 3 years ago by rjollos

Happy to! Here is the source on Firefox 7:

<div style="position:relative" class="gantt" id="GanttChartDIV"></div>
<script language="javascript">
var g = new JSGantt.GanttChart("g",document.getElementById("GanttChartDIV"), "day", "1");
var t;
window.addEventListener("resize", function () { g.Draw();
 }, false);g.setShowRes(0);
g.setShowDur(1);
g.setShowComp(1);
g.setLeftWidth(600);
g.setCaptionType("Resource");
g.setShowStartDate(0);
g.setShowEndDate(0);
g.setDateInputFormat("yyyy-mm-dd");
g.setDateDisplayFormat("mm/dd/yyyy");
g.setFormatArr("[u'day', u'week', u'month', u'quarter']");
g.setPopupFeatures("location=1,scrollbars=1");
t = new JSGantt.TaskItem(274,"#274:Add support for sequence events with multiple sequence controls (closed task)","2011-08-24 03:00","2011-08-24 08:00","class=ticket-class1 ticket-closed","/ticket/274",0,"Allan Ortiz",100,0,763,0,""," (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(798,"#798:Document the process for compiling the Qt and Qwt libraries (closed task)","2011-08-31 04:00","2011-08-31 08:00","class=ticket-class1 ticket-closed","/ticket/798",0,"Allan Ortiz",100,0,0,0,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(584,"#584:Implement sequence with simultaneous echo and color Doppler (assigned task)","2011-08-31 00:00","2011-09-01 08:00","class=ticket-class2","/ticket/584",0,"Ryan Ollos",62,0,164,1,"","== Detailed Summary ==\nThe purpose of this ticket is to determine if it is possible to determine the quality of the acoustic window based upon the b-mode image or RF data analysis.\n\nIt appears that it may be possible to identify a good acoustic window by analysis of the echo from the contra-lateral skull. This will be explored by performing b-mode imaging and power Doppler imaging simultaneously.\n\nThe RF data from multiple channels will also be displayed and analyzed to determine if a good indicator for the acoustic window can be found.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\nAdded a magnitude processing block that computes the magnitude of an interbuffer buffer/frame/page and stores the output in an imagebuffer buffer/frame.  This allows for simultaneous B-mode and power Doppler processing without the additional overhead of the specific B-mode reconstruction.\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(755,"#755:Add functionality to serialize a sequence to disk (closed task)","2011-09-01 01:00","2011-09-01 08:00","class=ticket-class1 ticket-closed","/ticket/755",0,"Allan Ortiz",100,0,0,0,"","== Detailed Summary ==\nTo allow us to safely refactor and modify sequence related code we need the capability to create a textual representation of the sequence.  This representation can then be saved to disk and used as the input to an automated test.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nModified system to support arbitrary number of loggers and added a logger to the blackbox test that only writes the HalSequence.\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(973,"#973:Annotate spectral Doppler processing code with target of porting to C++ (closed task)","2011-09-02 06:00","2011-09-05 08:00","class=ticket-class1 ticket-closed","/ticket/973",0,"Allan Ortiz",100,0,451,0,"","== Detailed Summary ==\nThis task will be useful in planning work porting the spectral Doppler processing from Matlab to C++ and estimating the effort required.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nNotes have been collected describing the major spectral Doppler processing pathway and C++ equivalents of any specialized Matlab functions used.\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(582,"#582:Integrate Field II pressure/intensity field simulation with prototype codebase (assigned task)","2011-09-07 00:00","2011-09-07 08:00","class=ticket-class2","/ticket/582",0,"Ryan Ollos",0,0,0,1,"","== Detailed Summary ==\nThe FieldII simulations will be interfaced with the setup scripts so that we can quickly and efficiently execute the simulations using the runtime parameters.\n\nPrevious work on optimizing the transmit pressure field was done in #173.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(316,"#316:Populate HalSequence DmaControls and Receives using global collections (closed task)","2011-09-08 06:30","2011-09-09 08:00","class=ticket-class2 ticket-closed","/ticket/316",0,"Ryan Ollos",100,0,0,0,"","== Requirement ==\n\nThe `VsSequence` `Vs_DmaControls` and `Vs_Receives` will be populated using objects from the global collections.\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nThe `HalSequence`\'s `Vs_DmaControl` and `Vs_Receive` structure are now populated using the global collections. The `DmaTransfer` class no longer has an encapsulated `Vs_DmaControl`. (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(289,"#289:Ambiguous access error when inheriting from ModeSpecificObject and Loggable (closed defect)","2011-09-08 04:00","2011-09-10 08:00","class=ticket-class1 ticket-closed","/ticket/289",0,"Allan Ortiz",100,0,0,0,"","To reproduce: At r7646 of the trunk, add the following to line 760 of `ReceiveEvent.cpp`:\n{{{\n#!cpp\n    Verbose();\n}}}\n\nThe following error results:\n{{{\n1>ReceiveEvent.cpp(761): error C2385: ambiguous access of \'Verbose\'\n1>          could be the \'Verbose\' in base \'Printable\'\n1>          or could be the \'Verbose\' in base \'Printable\'\n1>ReceiveEvent.cpp(761): error C3861: \'Verbose\': identifier not found\n}}} (closed defect)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(734,"#734:Break up VdasController class into several classes (accepted task)","2011-09-08 00:00","2011-09-12 08:00","class=ticket-class2","/ticket/734",0,"Ryan Ollos",0,1,0,1,"","== Detailed Summary ==\n\nThis ticket will follow from the implementation of the PsiHalInterface in #747.\n\nSome tasks associated with this ticket are:\n * The VdasConfiguration class will be merged into the VdasController class (#286).\n * The ScanheadIsMonitored property will be added (#821).\n * Further develop in #281 the mock hardware interface was created in #747.\n * Add utilities to simplify handling of errors reported by the HAL (#754).\n * Improve error reporting when the sequencer is stopped due to a scanhead connect/disconnect ([comment:6:ticket:666] and [comment:47:ticket:666]).\n * Improve error reporting when sequence fails to start because the scanhead is not in the proper state (connected or disconnected) ([comment:26:ticket:630]).\n * Implement consistent use of \'\'\'!GetHardwareState\'\'\' ([comment:59:ticket:666], [comment:61:ticket:666], [comment:62:ticket:666], [comment:64:ticket:666])\n\nAdd methods to logger module that simplify error handling and verbosity of log messages (#754).\n\n== Requirement ==\n\n== Analysis ==\n\nDesign and coding guidelines:\n * All invocations of Vs_* functions should be wrapped in a Psi_* function in the PsiHalInterface layer.\n * All calls to Psi_* functions should be made in VdasController member functions. Existing calls to Psi_* functions throughout the project should be extracted into VdasController member functions.\n * There should be no external object declarations. All objects should be passed by reference.\n * `Vs_Return_Code`s will not be returned by any VdasController member functions.\n\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(294,"#294:Implement a DmaServer class to encapsulate functionality that currently exists in VdasController (closed task)","2011-09-23 06:00","2011-09-23 08:00","class=ticket-class2 ticket-closed","/ticket/294",0,"Ryan Ollos",100,0,734,0,""," (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(997,"#997:Develop a script to regression test the receive data pipeline in the FPGA (accepted task)","2011-09-13 00:00","2011-09-14 08:00","class=ticket-class2","/ticket/997",0,"Ryan Ollos",3,0,0,1,"","== Detailed Summary ==\n\nThe scripts created in #611 should serve as a useful example. These scripts can be found in `sandbox\hwtest`: `SetUpRXresponseTest`, `SetUpADrateDecTst` and `SetUpTRchanneltest`.\n\n== Requirement ==\n\n== Analysis ==\n\nThe example scripts demonstrate how to couple select transmit channels on one side of the MUX through the BIST network to select receive channels on the other side of the MUX. To acquire receive data for a particular channel group, the pair of pulsers spaced two channel groups away are activated. For example, to acquired on CG1 on board1 (channels 1-8), the pulsers on CG3 are activated (channels 17-24 and 145-153).\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]][[Image()]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(974,"#974:Modify SocketMessageCommunicator to function as a thread object. (new task)","2011-09-15 00:00","2011-09-15 08:00","class=ticket-class1","/ticket/974",0,"Allan Ortiz",0,0,0,1,"","== Detailed Summary ==\nThis work will unify the behavior of the {{{SocketMessageCommunicator}}} class - as currently it has a set of functions for operating both with and without an event-loop.  As many of the difficulties experienced with the class have been in getting it to operate in an event loop free environment, this work is likely to simplify the class and at the same time make it more robust.\n\nThere is also the possibility of an increase in throughput performance, due to the object running in its own thread.  By placing the asynchronous operation in this class, this decreases the burden from the users of this class by lessening their need to also run asynchronously.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(933,"#933:Upgrade development environment to MSVC Runtime 2010 (new task)","2011-09-15 04:00","2011-09-16 08:00","class=ticket-class1","/ticket/933",0,"Allan Ortiz",0,0,0,1,"","== Detailed Summary ==\nFollow-on to #617. Upgrade the MSVC Runtime to 2010. Project dependencies that exist as binaries in our repository, such as Pthreads and Qt, will need to be recompiled. MSVC Project files will need to be created or converted for these projects.\n\nOnce we are running only under MSVC 2010, `commandVS9.bat` can be deleted and `commandVS10.bat` renamed to `command.bat` (follow-up to [7497]).\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(302,"#302:PRI of the first two transmit events in the Color Doppler ensemble may not be correct (closed task)","2011-09-19 02:00","2011-09-19 08:00","class=ticket-class2 ticket-closed","/ticket/302",0,"Ryan Ollos",100,0,0,0,"","The Hal calculates a \"dummy receive\" when one is not specified for an event. The time duration between the start of the RUN_ACQ signal and the start of transmit may be different for \"transmit-only\" events in our Color Doppler ensemble, which would results in the interval between the start of `TransmitEvent`s 1 & 2 and 2 & 3 being different then 3 & 4, 4 & 5, 5 & 6, ...\n\n== Resolution Summary ==\n\nThe following calculation is done in the HAL function `VdasRunAcqDurationOverheadTransmitGet` to \'\'get the Verasonics VDAS hardware overhead that occurs before \"time zero\" for transmitting that is due to \"DelayAdClocks * AdPeriod\".\'\':\n\n{{{\n( 48.0 + 12.0 * DecimationFactor / QuadratureDecimationFactor ) * ADSampleRate / 180.0\n}}}\n\n 1. When a `ReceiveEvent` is not specified, the defaults `DecimationFactor = 1`, `QuadratureDecimationFactor = 1` and `ADSampleRate = 9` result in the value `3`.\n 2. For `DecimationFactor = 4`, `QuadratureDecimationFactor = 2` and `ADSampleRate = 6`, the value is `2.4`.\n 3. For `DecimationFactor = 6`, `QuadratureDecimationFactor = 2` and `ADSampleRate = 4`, the value is `1.8667`.\n\nThese values do not match those measured and shown in comment:6 and comment:8, however the calculated and measured duration are both shorter for `DecimationFactor = 6` that for `DecimationFactor = 4`, so at least the trend is correct. The measured values are less than the calculated values, so the calculated values may be assuming a worst case.\n\nIt appears that the HAL only uses these values to calculate the total duration of the RUN_ACQ signal, so it is likely that this is just an estimate of what the FPGA code implements, and that the actual time between the start of RUN_ACQ and the start of transmit is unknown to the HAL. Furthermore, we see no change in the time between the start of the RUN_ACQ signal and the start of transmit when adding a `ReceiveEvent` to our two \"transmit-only\" events. However, this was implemented in [7768] to prevent issues that may arise in the future if the sample rate, decimation factor or quadrature decimation factor are changed.\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(304,"#304:Cleanup PixelGrid Size, Origin, and Delta using a Triple class (closed task)","2011-09-16 07:00","2011-09-19 08:00","class=ticket-class1 ticket-closed","/ticket/304",0,"Allan Ortiz",100,0,0,0,"","== Summary ==\nIn both Matlab and the UsEngine, the calculations done with PixelGrid\'s Size, Origin, and PixelDelta properties frequently mix up dimensions.  By changing the properties from a plain array into a container (the Triple object) with specifically labelled slots (each slot represents a location in a dimension), we should be able to minimize this kind of error.  \n\nThis work will also help going forward, whenever we need to work with these properties.\n\n== Resolution Summary ==\nAdded A Triple class in Matlab and cleaned up the PixelGrid class by modifying its Size, Origin, and PixelDelta properties to be Triple objects. (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(301,"#301:Notifications from Trac should include a link to the comment (closed task)","2011-09-20 07:00","2011-09-20 08:00","class=ticket-class2 ticket-closed","/ticket/301",0,"Ryan Ollos",100,0,0,0,"","Trac\'s built-in notification system includes a hyperlink to the comment from which the email was generated. After installing the enhanced notification system plugin, th:AnnouncerPlugin, the emails only contain a link to the ticket. Here is an example:\n\n[[Image(TracNotification.png,100%)]]\n\nThis issue was reported in th:#9004. The patch attached to that ticket will be tested. (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(784,"#784:Port the computeDelays method of the TransmitEvent class to C++ (accepted task)","2011-09-20 00:00","2011-09-20 08:00","class=ticket-class1","/ticket/784",0,"Allan Ortiz",0,1,0,1,"","== Detailed Summary ==\nThe computeDelays function must be executed each time we change the transmit focus. It is therefore necessary to rewrite this function in C++ so that we can run independent of MATLAB.\n\n#544 should be completed prior to the start of work on this ticket.\n\n== Requirement ==\n\n 1. UsEngine can compute transmit delays.\n 1. UsEngine has a test that compares the transmit delays loaded from Matlab with those computed.\n\n== Analysis ==\n\nImplementing this work includes porting the computeDelays from the Matlab TransmitEvent classdef to the UsEngine TransmitEvent class.  The computeDelays function requires defining a TransmitEvent, a Transducer, & a TransmitWaveform.  \n\nThe test to compare the delays loaded with those computed can be run at the same time as  runSequenceBuildTest.m (as that test requires a Mat file containing a populated Matlab workspace).\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(544,"#544:Verify that the transmit delays are correct for z > 0, z = 0, z < 0 and write test cases for the Transmit class (assigned task)","2011-09-20 04:00","2011-09-20 08:00","class=ticket-class2","/ticket/544",0,"Ryan Ollos",0,0,784,1,"","== Detailed Summary ==\nVerify that the transmit delays are correctly computed for the 3 conditions:\n * z < 0\n * z = 0\n * z > 0\nThe delays should be verified for the cases:\n * (x, y) = 0\n * (x, y) != 0\n\nSee also #784.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(971,"#971:Send spectral envelope from UsEngine to Measurements Module (new task)","2011-09-20 00:00","2011-09-20 08:00","class=ticket-class1","/ticket/971",0,"Allan Ortiz",0,0,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(635,"#635:Create UsEngine Command class and queue (new task)","2011-09-22 00:00","2011-09-22 08:00","class=ticket-class1","/ticket/635",0,"Allan Ortiz",0,0,0,1,"","== Detailed Summary ==\nCurrently the mexFunction acts as a command interpreter, receiving an array of commands from Matlab upon each entry and performing appropriate actions.  This work is performed in a flat, non-hierarchical, fashion.\n\nWe need a formalization/abstraction of this behavior for a number of reasons:\n - As we add and modify imaging modes we will likely need to modify existing commands and/or add new ones.  This work will be easier and less bug prone due to code-reuse.\n - Adding or transitioning to a C++ UI will require a command queue to enforce proper system state.  This UI will also be able to benefit from re-use of the same Command code that the Matlab UI is using.  By this requirement, this ticket is related to Ticket #625 (Create first version of C++ UI).\n _ Similarly, this structure should help with triggering sequence loads, TPC HV updates, TGC updates, etc ... (see #630, #598)\n - It will be possible to test the Command class and queue independently from the rest of the system (at a unit test level VS at a black box level).\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1009,"#1009:Update ELO Touchpanel to the latest Driver and Utilities (new task)","2011-09-23 04:00","2011-09-23 08:00","class=ticket-class3","/ticket/1009",0,"Kang Yu",0,0,0,1,"","== Detailed Summary ==\nThe current prototype presto system is configured with ELO driver and tools that appear to be out of date.  They are:\n\nElo Configuration tool:  version 1.3.0.0  8/31/2010\nElo Driver:              version 1.2.82   7/29/2010\n\nThe \"TouchTools\" CD that came with the latest batch of Elo Monitors have driver version 5.2.0.41  (dated 9/22/2010).\n\nAccording to the Elo website ( www.elotouch.com ) the latest version is 5.3 (as of 9/16/2011).\n\nI have tried both 5.2 and 5.3 on my system and both work fine.\n\nA specific reason why I would like to bump up to 5.2/5.3 is that they both support a stand-alone application for touch screen alignment (EloVa.exe).  With the earlier version, the alignment utility comes bundled with the broader utility program that provides for other services that we don\'t want the end user to have access to.  With the newer version, the Presto UI application can easily provide a feature to allow the user to launch the alignment utility, as needed, to keep the system well tuned.\n\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(459,"#459:Increase maximum PRF in Spectral Doppler mode to 8 kHz (assigned task)","2011-09-23 04:00","2011-09-23 08:00","class=ticket-class2","/ticket/459",0,"Ryan Ollos",0,0,0,1,"","== Detailed Summary ==\nThe maximum PRF of the system is currently 4 kHz.  If the PRF is increased to 5 kHz the display stutters.  If the PRF is increased to 8 kHz, the HAL reports that the \'time to next acquisition\' is too short.\n\nWe first need to investigate why the system cannot run at the desired PRF.\n\nOne potential source of optimization is reducing the value of Receive.endDepth - Receive.startDepth, so that less data is transferred for each PRI. A function will need to be written to modify the Receive start and end depth when the sample volume is placed at a particular location.\n\nAcoustic power testing will need to be repeated after this change is made. We may want to set the maximum transmit voltage based on the PRF, to allow for higher transmit voltages at lower PRFs than will be possible if we have a single fixed maximum transmit voltage.\n\n== Requirement ==\n\n== Analysis ==\n - Add a callback that sets the `ReceiveEvent` `StartDepth` and `EndDepth` based on the location of the sample volume position.\n - Modify the uicontrol and/or setter to allow PRF values in the range 2 - 8 kHz, with 500 Hz increments.\n - Check whether y-axis scaling on the Spectral Doppler UI is correct and modify as necessary.\n - Perform velocity measurements with the string phantom for verification.\n - Do acoustic power testing to determine new voltage limits.\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(958,"#958:User Interface Tasks for Milestone I10 Delivery (assigned task)","2011-09-27 04:00","2011-09-27 08:00","class=ticket-class4","/ticket/958",0,"Tom Anderson",0,1,0,1,""," (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(384,"#384:Develop Trend module, initialize and register with system framework (closed task)","2011-08-22 00:00","2011-08-31 08:00","class=ticket-class4 ticket-closed","/ticket/384",0,"Tom Anderson",100,0,958,0,"","== Detailed Summary ==\nThe Trends Module should provide the following capabilities:\n * Receive spectral measurements from the Measurements Module and compute averages as appropriate for the measurement type.\n * Make the trended measurement vectors available to the UI for display and reporting.\n * Make the trended measurement vectors available to the Alerts Module for alert reporting.\n * Provide storage and retrieval methods for the trended measurement vectors.\n \n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(942,"#942:Develop the Trend Review Dialog of the User Interface (closed task)","2011-08-26 00:00","2011-09-02 08:00","class=ticket-class4 ticket-closed","/ticket/942",0,"Tom Anderson",100,0,958,0,"","Design and implement a dialog to allow the user to browse through the trended measurements collected by the system.  \n\nThe initial U/I concept is covered by the attached file: \nPresto_UserInterfaceMeeting_ReviewTrends.pptx\n\nThe scope of this ticket is just the user presentation of the measurements, not the computation and storage of the measurements, which will be covered on other tickets, including the following:\n\n#384 Develop the Trend Module\n#323 Develop system interface for Measurements module\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(957,"#957:Adding .ini file to Settings object in User Interface (closed task)","2011-08-19 04:00","2011-08-19 08:00","class=ticket-class5 ticket-closed","/ticket/957",0,"Marlena Ma",100,0,958,0,"","== Detailed Summary ==\n\nAdd the following capabilities to Settings object with UI:\n\n•    In the constructor, after the default initialization, attempt to initialize the parameters from a .ini file using the services of the QSettings object. \n• Each time the user commits (i.e. pushes the “Apply” or “OK” buttons) a change on the screens of the SettingsDialog, a call to one of the Settings “set” functions will be made (like Settings::setPatientNameAndID()).  Those calls should save the parameters within the object (as is currently done now) and then use QSettings to save the settings to a .ini file.\n\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(977,"#977:Develop Trend Module database Interface for Save/Restore (closed task)","2011-08-24 00:00","2011-09-02 08:00","class=ticket-class5 ticket-closed","/ticket/977",0,"Marlena Ma",100,0,958,0,"","The Trends module receives measurements from the Measurements module for realtime display on the Monitor Screen, as well as saving to disk for later review.  The realtime flow of the data is being implemented on ticket #384, and this ticket should track the implementation of the database and the related save and restore methods.\n\nSQLite has been selected as the database for the Presto product.  (see www.sqlite.org).\n\nThe database schema is very simple:\n\nTable PatientData\n  QString patientFirstName      (as per Settings)\n  QString patientLastName       (as per Settings)\n  QString patientID             (as per Settings)\n  qint64  patientExamStartTime  (the value returned by QDateTime::currentMSecsSinceEpoch()\n  qint32  patientKey            (a unique key for this patient/exam)\n\n\nTable TrendData\n  qint32  patientKey            (hash key matching PatientData.patientKey)\n  int     measurementType       (matches values of MeasurementType)\n  qint64  trendTime             (QDateTime::currentMSecsSinceEpoch())\n  double  trendValue\n\n\nThe types above are shown as they would be in Qt C++ code, but they may need to be adapted to the field types available for SQLite.\n\nThe patientKey type needs study, too.  I have shown it as qint32 for now, but we need to find the most convenient hash key type for this purpose.\n\n\n\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(443,"#443:Modifications to UI for dual channel operation (accepted task)","2011-09-22 00:00","2011-09-23 08:00","class=ticket-class4","/ticket/443",0,"Tom Anderson",25,0,958,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(954,"#954:Develop a Snapshot Report to Capture the Content of the Monitor Screen (closed task)","2011-09-28 00:00","2011-09-30 08:00","class=ticket-class4 ticket-closed","/ticket/954",0,"Tom Anderson",100,0,958,0,"","The high-level user interface requirements for the Snapshot Report are captured in the following presentation material (pages 71 and 72):\n\nPresto/Docs/Current/Unreleased/Meeting Minutes/User Interface Concept Review/Presto_UserInterfaceMeeting_20110726.pptx\n\nDevelop prototype code for such a report to facilitate evaluation and refinement of the concept and requirements.\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(956,"#956:Develop the Settings Module to maintain the system/user settings (closed task)","2011-08-12 04:00","2011-08-19 08:00","class=ticket-class5 ticket-closed","/ticket/956",0,"Marlena Ma",100,0,958,0,"","Develop the Settings Module that will maintain the user-programmable settings, and provide the means to save and restore the values to disk.\n\nThe QSettings class should be used to facilitate the storage, with the use of \".ini\" files (and not the system registry).\n\nPrototype versions of Settings.cpp and SettingsDialog.cpp exist in the current (v.02) appui software build, but no means to store and retreive the settings is currently in place.\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(998,"#998:Update UI source files with doxygen comments (closed task)","2011-09-15 00:00","2011-09-16 08:00","class=ticket-class4 ticket-closed","/ticket/998",0,"Tom Anderson",100,0,958,0,"","== Detailed Summary ==\nUpdate all the header files in the Software/appui folder to ensure that the public interface for each module is defined.  At present, a small percentage of the modules have doxygen comments in them.\n\nThe scope of this task is to complete the initial pass of providing at least a brief definition of every element of the public interface.\n\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(999,"#999:Develop the Trend Report (to print the contents of the Review Trends screen) (closed task)","2011-09-12 00:00","2011-09-16 08:00","class=ticket-class4 ticket-closed","/ticket/999",0,"Tom Anderson",100,0,958,0,"","== Detailed Summary ==\n\nThe high-level user interface requirements for the Trend/Snapshot Report are captured in the following presentation material (pages 71 and 72):\n\nPresto/Docs/Current/Unreleased/Meeting Minutes/User Interface Concept Review/Presto_UserInterfaceMeeting_20110726.pptx\n\nI have also attached a PDF file representing a more recent mockup of the report.  (trendreport_20110831091255.pdf)\n\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1001,"#1001:Develop the Site Attributes Module (closed task)","2011-09-16 00:00","2011-09-20 08:00","class=ticket-class5 ticket-closed","/ticket/1001",0,"Marlena Ma",100,0,958,0,"","== Detailed Summary ==\nDevelop the Site Attributes data model component to go along with the user presentation layer shown on the \"Site Attributes\" tab of the \"Special Functions\" dialog.  The dialog is captured on the attached file.\n\nThere are only three items in the Site Attributes:\n * Institution Name\n * Language\n * Time Zone\n\nThis module should be patterned after the Settings module, which manages user clinical settings.  The data should be recorded in a separate .ini file, though.  This strategy is based on the notion that we will someday want to have multiple instances of user settings, but even in that case we will not want multiple instances of the Site Attributes.  The Institution Name is more constant than the user preferences captured in the user settings.\n\nThe Language should be fixed at \"English\" for now, but someday this will be a user programmable selection so we need the infrastructure in place for it.\n\nThe Time Zone may be a field in the .ini file, or maybe it can be stored directly in the equivalent setting in the OS once the setting is applied.  This detail is left to the designer.\n\nLet\'s keep some symmetry with the name of the user settings file (presto.ini), so maybe something like this:\n\n  prestoSiteInfo.ini\n \n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1002,"#1002:Update UI Concept Presentation to align with the draft FRS (accepted task)","2011-09-15 00:00","2011-09-16 08:00","class=ticket-class4","/ticket/1002",0,"Tom Anderson",100,0,958,1,"","== Detailed Summary ==\nUpdate the User Interface Concept Presentation material to align with recent changes to the draft FRS.\n\nThe most recent UI Concept presentation is captured in the following file:\n\nPresto_UserInterfaceMeeting_20110726.pptx\n\nin folder:\n\nPresto/Docs/Current/Unreleased/Meeting Minutes/User Interface Concept Review/\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1003,"#1003:Draft User Interface Specification - Main Window (accepted task)","2011-09-21 00:00","2011-09-30 08:00","class=ticket-class4","/ticket/1003",0,"Tom Anderson",0,0,958,1,"","== Detailed Summary ==\nPrepare the initial draft of the User Interface Specification covering a small portion of the overall application as a pilot task to arrive at an agreed-upon format for the document.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1008,"#1008:Develop Measurement Group Widget (closed task)","2011-09-15 00:00","2011-09-16 08:00","class=ticket-class4 ticket-closed","/ticket/1008",0,"Tom Anderson",100,0,958,0,"","To better meet the needs of users who like to see the full set of the flow-based measurements (both R & L) on the screen at the same time, we need a measurement group widget that can be selected to fill one of the display slots on the realtime Monitor screen.\n\nAn instance of the MeasurementGroup widget should display the most current (averaged) measurement value for the following:\n * Mean Velocity (MV)\n * Peak Systolic Velocity (PSV)\n * End Diastolic Velocity (EDV)\n * Pulsatility Index  (PI)\n * Systolic/Diastolic Ratio (S/D)\n\nThe user should be able to select a \"Right\" or a \"Left\" instance of the MeasurementGroup.\n\nI have attached a screen snap to illustrate.\n (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1010,"#1010:Develop the Alerts Tab/Dialog (closed task)","2011-09-22 00:00","2011-09-23 08:00","class=ticket-class4 ticket-closed","/ticket/1010",0,"Tom Anderson",100,0,958,0,"","== Detailed Summary ==\nThe \"Alerts\" tab of the Settings Dialog provides the means for the user to enable/disable various alerts and set the associated thresholds.  \n\nThe high-level user concept of this dialog is captured on page 57 of the following document:\n\nPresto/Docs/Current/Unreleased/Meeting Minutes/User Interface Concept Review/Presto_UserInterfaceMeeting_20110729.pptx\n\nThe development of the Alert detection module and the alert assertion dialog will be covered by separate tickets.\n\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1023,"#1023:[MasterTicket] Improve tests and testing framework in M1-I10 (new task)","2011-09-27 04:00","2011-09-27 08:00","class=ticket-class2","/ticket/1023",0,"Ryan Ollos",0,1,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(281,"#281:Create a Mock for the hardware interface (assigned task)","2011-09-12 06:00","2011-09-13 08:00","class=ticket-class2","/ticket/281",0,"Ryan Ollos",0,0,1023,1,"","See also #734. (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(311,"#311:UsEngine unit tests fail to run when executed from matlab (assigned task)","2011-09-27 04:00","2011-09-27 08:00","class=ticket-class6","/ticket/311",0,"Anybody",0,0,1023,1,"","UsEngine unit tests fail to run when executed from matlab. The error that results is:\n\n{{{\n#!matlab\n>> runUSEngineUnitTests\nInvalid MEX-file\n\'C:\Users\RjOllos\Workspace\T994-RO\usengine\MatlabSupport\mexRunUsEngineUnitTests.mexw64\':\nThe specified procedure could not be found.\n\nError in runUSEngineUnitTests (line 2)\nmexRunUsEngineUnitTests();\n}}}\n\nThe unit tests run normally when executed from Visual Studio. (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(439,"#439:Refactor blackbox test (closed task)","2011-09-01 00:00","2011-09-03 08:00","class=ticket-class1 ticket-closed","/ticket/439",0,"Allan Ortiz",100,0,1023,0,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nRefactored Black-box test; improved run-time performance and accuracy of reported Hz by removing the additional \'return-to-matlab\' operations performed on every frame and only returning at the end of the sequence. (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(10000,"MS:M1 - I10","2011-09-27 08:00","2011-09-27 08:00","class=ticket-class7","/milestone/M1%20-%20I10",1,"",0,0,0,1,"","Milestone M1 - I10 ( milestone)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1014,"#1014:Create software release at conclusion of M1-I10 (accepted task)","2011-09-30 00:00","2011-09-30 08:00","class=ticket-class2","/ticket/1014",0,"Ryan Ollos",0,0,0,1,"","== Detailed Summary ==\n\nTest software and do acoustic power testing prior to creating a tag in the repository at the end of M1-I10.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(152,"#152:Research station keeping algorithm (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class1","/ticket/152",0,"Allan Ortiz",0,1,0,1,"","Following the completion of #225,\n\nInvestigate station-keeping algorithms using reconstruction in a volume around the PW sample volume, to allow station-keeping while doing PW.  Or, consider a steered and focused TX and smaller receive volume for Power Doppler in the station keeping mode.\n\n{{{\n#!email\n-----Original Message-----\nFrom: Ken Linkhart [mailto:KenLinkhart@comcast.net] \nSent: Tuesday, June 29, 2010 23:25\nTo: Kendrick Wong; Ryan Ollos; Allan Ortiz\nSubject: Some more brainstorming based on today\'s discussion...\n\n...\n\nOn the way home, I was thinking about Ryan\'s point that from all of  \nour experience, it seems the system\'s Doppler sensitivity is acutely  \ndependent on the probe location- in an optimal position, the system  \ncan easily find a strong flow signal with our current power Doppler  \nprocessing- but if you then move the probe position by a very small  \nincrement, we can\'t detect any flow signal at all.  So the question  \nthen becomes: is this an indication that acoustic window/ probe  \nposition really is that critical, or is this just an indication that  \nour power Doppler search mechanism has inadequate sensitivity?  I was  \nthinking that if we had station-keeping implemented, and if it works  \nas well as we think it should, then we could use it to answer that  \nquestion:\n\nFirst, locate the flow from the \'good\' window with power Doppler, as  \nwe would do today.  Then, switch to PW with the station keeping  \nfunction enabled.  Then, translate the probe slightly and slowly to  \nthe \'bad\' window.  If the station-keeping algorithm can adjust the SV  \nposition and maintain a good PW spectral trace, that would be an  \nindication that sensitivity of our search mode is really the problem.   \nBut if the station-keeping can\'t preserve the PW signal, that would be  \na confirmation that precise probe positioning really is as critical as  \nwe think it may be.\n\nAnother screwball idea, to further enhance the sensitivity and  \nperformance of the station-keeping algorithm:  If we are acquiring a  \ngood PW spectral Doppler signal and applying the peak-velocity  \nenvelope detection algorithm to it, then we can use that information  \nto identify the point in the heart cycle with highest peak velocity,  \nand use that point in time to trigger the station-keeping processing  \nof the 3D volume region around the current PW sample volume location.   \nThat way the power Doppler processing of the neighboring pixels would  \nhave the best possible Doppler signal to work with, which should  \nimprove its ability to make any incremental SV position updates to  \nfind the strongest and/or highest velocity PW Doppler sample volume  \nlocation.  Another benefit would be that then the station-keeping  \nprocessing would only have to operate on one frame per heart cycle,  \nwhich would be a much lower computational overhead than we have with  \nour search mode, running at 20 - 25 Hz because we are asynchronous to  \nthe heart cycle.\n\nAll of which would seem to confirm that if there is a fair amount of  \nwork to do to re-integrate the PW spectral analysis functions, and to  \nmake the PW spectral processing more efficient so we can  \nsimultaneously do the station-keeping processing, then we should do  \nthat first rather than going off on any of the tangents we discussed  \nas alternative ways to do a better job of the search mode, etc.\n\n-Ken\n}}} (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(948,"#948:Implement b-mode based station movement detector (closed task)","2011-09-06 04:00","2011-09-08 08:00","class=ticket-class1 ticket-closed","/ticket/948",0,"Allan Ortiz",100,0,152,0,"","== Detailed Summary ==\nA simple metric such as SAD (sum of absolute differences - generating a disparity value) can be applied to the volumetric echo data obtained from an interleaved echo/sdop sequence to determine if the transducer has moved in relation to the patient\'s head.  This metric can be used as an input to trigger a station keeping action.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nAdded a sum-of-absolute-difference (SAD) disparity metric to use as an input to the station-keeping algorithm.\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(972,"#972:Implement station-keeping logic module (accepted task)","2011-09-05 03:00","2011-09-13 08:00","class=ticket-class1","/ticket/972",0,"Allan Ortiz",100,0,152,1,"","== Detailed Summary ==\nThe {{{StationKeeper}}} is a SystemController level object that processes signals from Targeting mode\'s {{{FlowDetector}}} process event and Monitoring mode\'s {{{StationMonitor}}} process event.\n\nThe {{{StationMonitor}}} is intended to be a ProcessEvent within the Monitoring mode\'s sequence.  It will likely be ran after each acquired echo frame.  It will compare incoming frames with a reference frame that is set with the first processed frame.  If the measured disparity exceeds a threshold then a signal will be emitted to the SystemController indicating that station-keeping action is necessary.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(298,"#298:Implement control of Apodization through TransmitEvent.Apodization (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/298",0,"Ryan Ollos",0,0,0,1,"","In the Verasonics implementation, `TX.Apod` applies apodization by controlling the duty cycle and number of cycles of the active `TW`. This feature was omitted in our redesign (#510), but will be implemented in this ticket. (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(901,"#901:Misc system defects and enhancements (new task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class7","/ticket/901",0,"",0,1,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(300,"#300:Extract functionality from SystemController into a CommandQueue class (accepted task)","2011-09-30 05:00","2011-09-30 08:00","class=ticket-class2","/ticket/300",0,"Ryan Ollos",50,0,901,1,"","In matlab, extract the command queue properties and methods into a `CommandQueue` class. (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(662,"#662:MATLAB xUnit framework silently skips test classes that have syntax error (assigned task)","2011-09-30 06:00","2011-09-30 08:00","class=ticket-class6","/ticket/662",0,"Anybody",0,0,901,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(739,"#739:In MatlabDataInterface, reading objects is slower than reading structs (assigned defect)","2011-09-16 04:00","2011-09-16 08:00","class=ticket-class2","/ticket/739",0,"Ryan Ollos",0,0,901,1,"","== Problem Description ==\n\n== Analysis ==\n\n== Cause ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned defect)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(900,"#900:Improvement to MATLAB scripting environment (new task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class7","/ticket/900",0,"",0,0,901,1,"","== Detailed Summary ==\nVarious improvements will be made to the MATLAB scripting environment to increase the robustness, usability and maintainability of the scripts that configure the system.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(967,"#967:Measure disk performance of SSD while application is running (closed task)","2011-09-02 05:00","2011-09-02 08:00","class=ticket-class1 ticket-closed","/ticket/967",0,"Allan Ortiz",100,0,901,0,"","== Detailed Summary ==\n\nSee also #894 in which the data rates for saving receive and IQ data to disk are calculated.\n\n== Requirement ==\n\n== Analysis ==\n\nPerformance of the SSD can be measured using [http://www.nodesoft.com/diskbench DiskBench], while the application is running and the available bandwidth of the bus is presumably reduced by the DMAs.\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nThe SSD we\'ve chosen is capable of ~159 MB/s throughput while imaging in monitoring mode.\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(979,"#979:Fallback ticket for week of 2011-08-30 (closed task)","2011-09-06 04:00","2011-09-06 08:00","class=ticket-class8 ticket-closed","/ticket/979",0,"PSI Admin",100,0,901,0,"","== Detailed Summary ==\n\nAll commits that aren\'t specifically associated with an active ticket and are of small scope, therefore not warranting a dedicated ticket, should reference this ticket.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(980,"#980:Fallback ticket for week of 2011-09-06 (closed task)","2011-09-13 04:00","2011-09-13 08:00","class=ticket-class8 ticket-closed","/ticket/980",0,"PSI Admin",100,0,901,0,"","== Detailed Summary ==\n\nAll commits that aren\'t specifically associated with an active ticket and are of small scope, therefore not warranting a dedicated ticket, should reference this ticket.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(981,"#981:Fallback ticket for week of 2011-09-13 (closed task)","2011-09-20 04:00","2011-09-20 08:00","class=ticket-class8 ticket-closed","/ticket/981",0,"PSI Admin",100,0,901,0,"","== Detailed Summary ==\n\nAll commits that aren\'t specifically associated with an active ticket and are of small scope, therefore not warranting a dedicated ticket, should reference this ticket.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(982,"#982:Fallback ticket for week of 2011-09-20 (accepted task)","2011-09-27 04:00","2011-09-27 08:00","class=ticket-class8","/ticket/982",0,"PSI Admin",0,0,901,1,"","== Detailed Summary ==\n\nAll commits that aren\'t specifically associated with an active ticket and are of small scope, therefore not warranting a dedicated ticket, should reference this ticket.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(904,"#904:Transducer, transmit and receive path characterization and optimization (new task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class7","/ticket/904",0,"",0,1,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(315,"#315:Add code for processing acoustic tank data to source control (closed task)","2011-09-30 07:00","2011-09-30 08:00","class=ticket-class3 ticket-closed","/ticket/315",0,"Kang Yu",100,0,904,0,"","The software developed by Bill Beck for post-processing the data from the AMS acoustic measurement software will be added to source control. (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(952,"#952:XZ/YZ measurement scan of acoustic field (closed task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2 ticket-closed","/ticket/952",0,"Ryan Ollos",100,0,904,0,"","== Detailed Summary ==\n\n * Determine procedure for performing an XZ or YZ scan of the acoustic field.\n * Create a script to display this data.\n * Acquire data for Transducer 000-214 sn008 and generate an image of the acoustic field for comparison with simulation (#173).\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(317,"#317:Create a class to manage allocation, loading and execution of the hardware sequence (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/317",0,"Ryan Ollos",0,0,0,1,"","== Requirement ==\n\nExtract into a new class the parts of the VdasController class involved in allocation, loading and controlling execution of the HalSequence.\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(340,"#340:Breakup the Common superclass into several mixin classes (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/340",0,"Ryan Ollos",0,0,0,1,"","== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(923,"#923:Software configuration management enhancements (new task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/923",0,"Ryan Ollos",0,1,0,1,"","== Detailed Summary ==\nMasterticket for enhancements to Trac, SVN and development environment occurirng in the M1-I9 milestone.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(235,"#235:Allow author and log messages to be edited (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/235",0,"Ryan Ollos",0,0,923,1,"","Implement the \'\'\'pre-revprop-change\'\'\' hook to allow the author and log messages to be edited after a checkin. Initially, only the repository administrator (username: \'\'\'psi\'\'\') will be allowed to edit log messages. We will consider allowing users to edit log messages on branches for checkins for which they are the author.\n\nSubversion does not retain a history of revision properties (i.e. they are unversioned), so previous property values are lost on edit unless some mechanism is implemented to save the previous values.  The following mechanism is proposed:\n * The \'\'\'pre-revprop-change\'\'\' hook receives the new value of the property via \'\'stdin\'\'. Call the [http://trac.edgewall.org/browser/tags/trac-0.11.4/contrib/trac-pre-commit-hook Trac pre-commit hook] to reject changes to the log message that don\'t reference an open ticket.\n * The \'\'\'post-revprop-change\'\'\' hook receive the old value of the property via \'\'stdin\'\'. Retrieve the new value of the property using \'\'\'svnlook\'\'\' and format a message that contains:\n  * old author / log message\n  * new author / log message\n  * username attempting property change\n  * timestamp at time of change\n  * revision being changed\n * Use the [http://trac.edgewall.org/browser/tags/trac-0.11.4/contrib/trac-post-commit-hook Trac post-commit hook] to insert the formatted message into the referenced Trac ticket.\n * The \'\'\'post-revprop-change\'\'\' hook will resync the Trac database with the repository for the specified revision.\n\nRestrictions:\n * Will not allow date to be modified by any user.\n * Author can only ever be modified by the repository administrator.\n\nPotential Issues:\n * If only the author property is changed, I\'m not sure how we will reference a ticket. We may need to enforce editing of either log message only or author and log message.\n\nReferences:\n * [http://subversion.tigris.org/faq.html#change-log-msg Subversion FAQ: How do I change the log message for a revision after it\'s been committed?]\n * [http://tortoisesvn.tigris.org/faq.html#editlog TortoiseSVN FAQ: How do I change the log message or author after committing?]\n * [http://svnbook.red-bean.com/nightly/en/svn.ref.reposhooks.pre-revprop-change.html Version Control With Subversion: Repository Hooks: pre-revprop-change]\n * [http://svnbook.red-bean.com/nightly/en/svn.ref.reposhooks.post-revprop-change.html Version Control With Subversion: Repository Hooks: post-revprop-change]\n\n== Resolution Summary ==\n\nThe revision property change hooks were implemented, providing the following behavior:\n * The repository administrator can edit the log message for any revision.\n * A user can edit the log message for a revision for which they are the \'\'author\'\'.\n * The edited log message must reference an open ticket.\n * No user can edit the \'\'author\'\' of a revision. (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(337,"#337:Add to wiki guidelines for documenting source code using Doxygen (closed task)","2011-09-07 03:30","2011-09-07 08:00","class=ticket-class2 ticket-closed","/ticket/337",0,"Ryan Ollos",100,0,923,0,"","== Requirement ==\n\nAdd to the wiki the Doxygen guidelines document that Tom wrote, so that we can collaboratively edit this document.\n\nFrom an email on 08/30:\n{{{\n#!email\nFrom: Tom Anderson \nSent: Tuesday, August 30, 2011 09:36\nTo: Allan Ortiz; Ryan Ollos; Marlena Ma\nSubject: Doxygen Guidelines\n\nI have been trying to catch up on documenting the appui components, and in so doing I have scratched down some guidelines for the use of doxygen.  It is based on common practices I have observed in Qt and USEngine code.  Please take a look and let me know if you have any comments.\n}}}\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(484,"#484:Configure more restrictive per-directory access policies for repository (assigned task)","2011-09-30 06:00","2011-09-30 08:00","class=ticket-class6","/ticket/484",0,"Anybody",0,0,923,1,"","== Detailed Summary ==\nThere are certain operations that only the software configuration manager should be able to perform on the repository. A simple example is deletion of all directories from the root of the repository. Currently, this could be done (most likely by accident), by any PSI employee. More restrictive per-directory access policies will be implemented to prevent issues such as this.\n\n== Requirement ==\n\n== Analysis ==\n\n[http://svnbook.red-bean.com/en/1.5/svn.serverconfig.pathbasedauthz.html Path-Based Authorization] will be configured to grant and revoke access.\n\nThe polices implemented should be documented at SysAdmin/SvnConfiguration.\n\n== Implementation ==\n\nImplementation is made easier by the completion of #760.\n\nThe \'\'\'developers\'\'\' group will have r access to the repository root.\n\nThe \'\'\'developers\'\'\' group will have rw access to the following directories:\n\n`^/Docs/Current`\n`^/Projects/Common/trunk`\n`^/Projects/Common/branches`\n`^/Projects/Presto/Docs`\n`^/Projects/Presto/RnD`\n`^/Projects/Presto/Software/trunk`\n`^/Projects/Presto/Software/branches`\n`^/Projects/Presto/Software/sandbox`\n`^/Projects/TestAndMeasurement/trunk`\n`^/Projects/TestAndMeasurement/branches`\n`^/Projects/Verasonics/trunk`\n`^/Projects/Verasonics/branches`\n`^/Projects/Verasonics/sandbox`\n\nThe \'\'\'developers\'\'\' group will therefore implicitly not have w access to the following directories:\n\n`^/Admin`\n`^/Docs/Obsolete`\n`^/Projects/Common/external`\n`^/Projects/Common/tags`\n`^/Projects/Presto/Software/tags`\n`^/Projects/Presto/Software/external`\n`^/Projects/TestAndMeasurement/tags`\n`^/Projects/Verasonics/tags`\n`^/Projects/Verasonics/external`\n\nThe \'\'\'verasonics\'\'\' group will have access revoked for all directories that they are not explicitly granted r and/or w access to.\n\nThe \'\'\'verasonics\'\'\' group will have rw access to the following directories:\n`^/Projects/Common/trunk`\n`^/Projects/Common/branches`\n`^/Projects/Presto/Software/trunk`\n`^/Projects/Presto/Software/branches`\n`^/Projects/Presto/Software/sandbox`\n`^/Projects/Verasonics/trunk`\n`^/Projects/Verasonics/branches`\n`^/Projects/Verasonics/sandbox`\n\n== Test Case ==\n\n== Resolution Summary == (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(896,"#896:Implement software development procedures and policies (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class6","/ticket/896",0,"Anybody",0,1,923,1,"","== Detailed Summary ==\nThere are numerous procedures and policies that we are following in our development process in an informal manner. These will documented and training material will be generated.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(270,"#270:Document protocol for feature development on branches (assigned task)","2011-10-03 04:00","2011-10-03 08:00","class=ticket-class2","/ticket/270",0,"Ryan Ollos",0,0,896,1,"","Document on the wiki the procedures for branching and merging when developing features and fixing bugs. (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(636,"#636:Update Software Design Guidelines and add C++ / MATLAB coding standards (assigned task)","2011-09-30 00:00","2011-09-30 08:00","class=ticket-class6","/ticket/636",0,"Anybody",0,0,896,1,"","== Detailed Summary ==\nHaving the \'\'Software Design Guidelines\'\' on the wiki will allow for easier reference and cross-referencing from tickets and the code review tool (see #486). This will also allows for easier collaborative editing in revising the guidelines for additional languages (C++, MATLAB, system-level scripting [e.g. Bash, Python]). The guidelines currently apply primarily to the C/C++/C# languages.\n\nThe \'\'Software Design Guidelines\'\' are currently contained in an MS Word document in the [browser:\'/Projects/Presto/Docs/Current/Unreleased/Software/000-215 Software Design Guidelines.docx@4106\' repository]. These need to be revised and then posted on the wiki.\n\nSee comment:35:ticket:979 for some interesting comments on guidelines we might follow for class variable prefixing.\n\nSee also #721, for a ticket that focuses on the general issues involved with managing wiki-based documents.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\nThe \'\'Software Design Guidelines\'\' are posted at [wiki:ManagedDocs/000-215].\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(975,"#975:Code review TransmitEvent class to evaluate the code review process with existing tools (accepted task)","2011-09-02 04:00","2011-09-02 08:00","class=ticket-class2","/ticket/975",0,"Ryan Ollos",0,0,923,1,"","== Detailed Summary ==\n\nThe TransmitEvent class was chosen because it is sufficiently complex as to provide a reasonable use case for how we might code review classes. In this ticket, we\'ll code review the class using just TracLinks, the th:CodeExampleMacro and WikiProcessors.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1012,"#1012:Write the \"guideline for writing guidelines\" on the wiki (new task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class6","/ticket/1012",0,"Anybody",0,0,923,1,"","== Detailed Summary ==\n\nThe guideline that outlines how guidelines (procedures) should be written on the wiki will be located at SwDev/Guidelines/WritingGuidelines.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1013,"#1013:[MasterTicket] Initial tasks for software configuration management administrator (assigned task)","2011-10-04 04:00","2011-10-04 08:00","class=ticket-class9","/ticket/1013",0,"Paul Kline",0,1,923,1,""," (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(950,"#950:Intellisense is not working correctly after an upgrade to Visual Studio 2010 (closed defect)","2011-10-04 00:00","2011-10-04 08:00","class=ticket-class9 ticket-closed","/ticket/950",0,"Paul Kline",100,0,1013,0,"","== Problem Description ==\nFollowing the upgrade to VS 2010 in #617, Intellisense has not been working correctly. The \'\'\'Error List\'\'\' pane shows 100 errors, the first 11 of which are:\n{{{\n  1   IntelliSense: cannot open source file \"LoggingModule.h\"   c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h  4\n 2   IntelliSense: cannot open source file \"Printable.h\"   c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h  5\n 3   IntelliSense: cannot open source file \"PsiIntTypes.h\" c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h  6\n 4   IntelliSense: cannot open source file \"SmartPointer.h\"    c:\users\rjollos\workspace\trunk\usengine\modespecificobject.h  7\n 5   IntelliSense: cannot open source file \"verasonicshal.h\"   c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 4\n 6   IntelliSense: cannot open source file \"Loggable.h\"    c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 6\n 7   IntelliSense: Loggable is not a template    c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 12\n    8   IntelliSense: name followed by \'::\' must be a class or namespace name c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 12\n    9   IntelliSense: identifier \"Vs_DmaControl\" is undefined c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 13\n    10  IntelliSense: shared_ptr is not a template  c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 25\n    11  IntelliSense: shared_ptr is not a template  c:\users\rjollos\workspace\trunk\usengine\dmatransfer.h 26\n}}}\n\nPresumably, 100 is the limit at which the IDE stops displaying more errors.\n\nThese errors are also highlighted in the text editor:\n\n[[Image(IntellisenseErrors.png)]]\n\nThere is a possibly related error that existed prior to the upgrade. Attempting to open an include file (using CTRL+SHIFT+G or right click and select \"Open Document\") results in an error. VAX\'s ALT+G \'\'\'DOES\'\'\' work correctly in this case.\n\n[[Image(OpenIncludeFileError.png)]]\n\n== Analysis ==\n\nSome experimentation confirmed that the issue is with files being in different directories, not just in different projects.\n\n 1. Open `usengine\SequenceControlEvent.h`.\n 1. Attempt to open the include file `usengine\EnumTypes\SequenceControlCommand.h` using CTRL+SHIFT+G => Error.\n 1. Move `SequenceControlCommand.h` to `usengine\SequenceControlCommand.h` and attempt to open using CTRL+SHIFT+G => No Error. Note that the file was not re-added to the project after the move, so the reference in the project file was incorrect but this does not seem to make a difference. By extension, the file filters in the project also seem to have no effect on the behavior.\n\n[[Image(OpenIncludeFileError2.png)]]\n\n== Cause ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed defect)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(649,"#649:Batch files should check that the paths of all dependencies are valid (assigned task)","2011-10-04 05:00","2011-10-04 08:00","class=ticket-class9","/ticket/649",0,"Paul Kline",66,0,1013,1,"","== Detailed Summary ==\n\nThe batch files that start matlab and visual studio for the presto project do not currently check that the paths added in `startup.bat` are valid. This path checking will be implemented.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1025,"#1025:Generate documentation from source code (accepted task)","2011-10-04 04:00","2011-10-04 08:00","class=ticket-class9","/ticket/1025",0,"Paul Kline",0,0,1013,1,"","== Detailed Summary ==\nThis ticket follows from some earlier work done in #652 and #337. There are several tasks associated with this ticket:\n * Configuring tools to parse project header files and generate HTML documentation (using Doxygen and possibly CppDoc).\n * Creating a single HTML page that provides links to all of this documentation, so that it can be easily accessed from a working copy.\n * If necessary, updating the batch files that generate the HTML documentation and reorganizing the directory structure under `$PRESTO_ROOT/doc`.\n * Add support for adding Latex markup in the \'\'PrestoUI\'\' and \'\'UsEngine\'\' documentation. We\'ll need a Latex package that can be installed on the Windows developer machines.\n\nSee comment:28:ticket:652 for description of initial work done by Tom Anderson.\n\n== Requirement ==\n\n== Analysis ==\n\nPrimary tasks are to be able to generate documentation for the \'\'Presto UI\'\' and \'\'UsEngine\'\' projects. We\'d like to have a single HTML page under `doc` that links to all of this documentation. We can then add to the HTML page as necessary with other procedures and work instructions, and/or add links to the wiki.\n\nThe secondary tasks, depending on how much work will be required, would be to create documentation for the libraries we are using. It would be nice to generate this documentation from the source; alternatively we could just drop the HTML pages into our repository, as is currently done with the Verasonics documentation.\n\nThe third party libraries are:\n * CImg\n * Pthread\n * UnitTest++\n * PortAudio\n * Verasonics[[FootNote(Verasonics uses CppDoc to generate documentation from their source. I haven\'t looked at whether the syntax is compatible with Doxygen - see previous email discussion in comment:19:ticket:652)]]\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1028,"#1028:Cleanup environment configuration scripts (new task)","2011-10-04 04:00","2011-10-04 08:00","class=ticket-class9","/ticket/1028",0,"Paul Kline",0,0,1013,1,"","== Detailed Summary ==\n\nThe `setup*.bat` files that configure environment variables for the Visual Studio projects use an inconsistent naming scheme. The naming scheme we\'ve inherited from Verasonics is `HOME_*`, e.g. `HOME_HAL`.  We\'ve since used several inconsistent naming schemes.\n\nThe naming scheme is open for discussion, but recently I\'ve been using the following:\n{{{\nPATH_PROJ\nPATH_PROJ_SRC\nPATH_PROJ_INC\nPATH_PROJ_EXE\n...\n}}}\n\nSo, for example, I\'d perform the following cleanup operations.\n * In `startup.bat`, `set HOME_QT=C:\Qt\%QT_VERSION%` -> `set PATH_QT=C:\Qt\%QT_VERSION%`\n * In `startup.bat`,\n  `set QT_LIB=%HOME_QT%\lib` ->\n  `set PATH_QT_LIB=%PATH_QT%\lib`\n * In `setup_usengine_proj.bat`,\n  `set AcqserverProjIncludes=%AcqserverProjIncludes%;%QTDIR%\include`\n  ->\n  `set UsEngineProjIncludes=%UsEngineProjIncludes%;%PATH_QT_LIB%`\n\nIn `setup_usengine_project.bat`, the variables are named, e.g. `AcqserverProjIncludes`, which is a reference to the `AcquisitionServer` project, which has been renamed to `UsEngine`. The variables should be renamed accordingly to reduce potential confusion during maintenance. For example, `AcqserverProjIncludes` -> `UsEngineProjIncludes`.\n\nWe should also consider any reorganizations to our project directory that might improve maintainability. For example, we have previously discussed combining the `build` and `startup` directories into a single directory, since there are often files in those directories that need to be updated together.\n\nThis ticket follows from earlier work done in #800.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(522,"#522:Develop and write procedure for accessing and administering the NAS (closed task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class3 ticket-closed","/ticket/522",0,"Kang Yu",100,0,0,0,"","== Detailed Summary ==\nThere are several tasks associated with this ticket:\n * Determine if/how we can map a web folder on Windows 7 x64 (this was not possible in Vista x64, so we first need to investigate whether the defect has been resolved).\n * If we cannot map a web folder, we can investigate using a WebDAV client.  One such software is [http://www.crossftp.com/ CrossFTP], though its user interface is a bit clunky (see also #99 for a related issue that this might solve).\n * Document steps for accessing WebDAV at HowTo/AccessWebFileShare.\n * Describe in [wiki:ManagedDocs/000-047] which files should be stored in Subversion and which should be stored on a read-only WebDAV file share (c.f. #419).\n\nIt is most important that we have a mechanism for Kendrick to access WebDAV with write access in the near future.\n\nSee also #99 and #517.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(541,"#541:Generate documentation from MATLAB classdef files in presto package (assigned task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class6","/ticket/541",0,"Anybody",0,0,0,1,"","== Detailed Summary ==\nThe \'\'Verasonics Sequence Programming\'\' document will be replaced with documentation generated from the PSI Sequence Objects. All of the necessary documentation for working with the PSI Sequence Objects will be contained in the source code.\n\nCreate a script or procedure for generating MATLAB documentation from the class definitions in the classdef files. Also, add skeleton files for all other documentation that will exist in the +presto package. This will serve as a basis for partitioning and rewriting the \'\'Verasonic Sequence Programming\'\' document for PSI.\n\n== Requirement ==\n000-047 Configuration Management Plan\n\n== Analysis ==\nThe MATLAB documentation provides information on how to create help documentation that integrates with the Help Browser: \'\'\'MATLAB\'\'\' > \'\'\'User Guide\'\'\' > \'\'\'Desktop Tools and Development Environment\'\'\' > \'\'\'Customizing Help and Demos\'\'\' > \'\'\'Providing Your Own Help and Demos\'\'\'.\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(828,"#828:Add more buffer record and playback functionality to scripts and simplify usage (new enhancement)","2011-09-30 00:00","2011-09-30 08:00","class=ticket-class2","/ticket/828",0,"Ryan Ollos",0,0,0,1,"","== Detailed Summary ==\n\n * Add functionality to record and playback receive buffers.\n * `AcquisitionParameters.simulateMode` should be part of the `SystemController` class, and renamed to be more descriptive of the fact that it also controls live acquisition and playback modes. Care should be taken to preserve the behavior implemented in #787.\n * The `*DataRecorderMode` string parameters should be replaced with an enumeration.\n * The integer `simulateMode` parameters \'\'\'might\'\'\' be replaced with an enumeration.\n\nSee also #733.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (new enhancement)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(850,"#850:Add support for multiple ImagingMode objects on the hardware (closed task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class1 ticket-closed","/ticket/850",0,"Allan Ortiz",100,1,0,0,"","== Detailed Summary ==\nThis ticket follows from #836, in which support was added for multiple imaging modes in memory in the USEngine.\n\nSupport will be added to have all of the EventData objects for the imaging modes defined in the setup script resident on the hardware (for those EventData objects that are written to the hardware). The EventSequence will be a separate entity from the EventData. Objects will be associated with one another using references in the USEngine and MATLAB, and using indices for the HAL sequence.\n\nThe new method will be to load all of the objects initially, concatenating them into a collection of global arrays.  Then when switching modes, all that is required is to stop the sequencer, change the start event, and resume acquisition.\n\nAt a lower level, here is an outline of the mechanisms necessary to effect these changes:\n\nIn Matlab, each imaging mode specific object needs to know two indices:\n 1. The object\'s global index.\n 1. The object\'s mode specific index.\n\nIn UsEngine, when reading in an imaging mode, two data structures are populated:\n 1. The global vector.  Each object read is placed into the global vector for the object\'s type.  This work can be checked to ensure that the vector is populated contiguously and that no indices are entered twice.\n 1. The imaging mode vector.  Each object read is first placed into the global vector, and then within the imaging mode. In the vector specific to the object type, a vector is populated with pointers that are stored at the mode specific index and point to the actual object in the global vector.\n\nHaving objects accessible by both their imaging mode specific index and by their global index will respectively allow both the processing blocks and the HalSequence to function without any modification.\n\nAfter we have this system working to our liking, we can then move toward storing pointers/references within the processing blocks to their associated objects, rather than looking them up by index through their parent imaging mode.\n\nThis ticket depends on the completion of ticket #587 (Modify sequence loading to take objects as explicit inputs rather than reading objects from the Matlab workspace), but the work on this ticket can proceed in parallel.  As the sequence objects are reconfigured to be read from the UsEngine layer, we can instead read these objects from the global array.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(288,"#288:Implement EventSequence as a single global array that contains SequenceEvents for all modes (closed task)","2011-09-09 04:00","2011-09-11 08:00","class=ticket-class2 ticket-closed","/ticket/288",0,"Ryan Ollos",100,0,850,0,""," (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(869,"#869:Integrate next generation transducer (assigned task)","2011-09-29 00:00","2011-09-30 08:00","class=ticket-class6","/ticket/869",0,"Anybody",0,0,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (assigned task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(870,"#870:Integrate next generation SHI (accepted task)","2011-09-30 00:00","2011-09-30 08:00","class=ticket-class2","/ticket/870",0,"Ryan Ollos",0,1,0,1,"","== Detailed Summary ==\n\nIntegrate the new SHI and add support for controlling the HVMuxes to switch between the left and right transducers.\n\nSee also #868, in which software support was added for controlling the HVMuxes on the new SHI, and #441 in which a function was added to the HAL that returns the revision of the SHI board.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(291,"#291:ScanHeadMontioringMode\'s MonitorForStateChange does not work with new SHI (accepted task)","2011-09-30 06:00","2011-09-30 08:00","class=ticket-class2","/ticket/291",0,"Ryan Ollos",0,0,870,1,"","The option `MonitorForStateChange` does not work with the new SHI because it is only monitoring one connector, and the `ScanHeadInterface` class is hard-coded to monitor two connectors. See #441 for specific details. (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(441,"#441:Add a HAL function that returns SHI board revision info (accepted task)","2011-08-31 07:00","2011-09-01 08:00","class=ticket-class2","/ticket/441",0,"Ryan Ollos",100,0,870,1,"","== Detailed Summary ==\n\nAll connectors are monitored for scanhead connect/disconnect in the 6.0.0 Verasonics release. In the earlier releases, only connector number one was monitored (the HAL supports monitoring up to 4 connectors, numbered one through 4).\n\nFollowing #996, we can automatically determine the whether to monitor the ScanHeadInterface for scanhead connect or scanhead disconnect, however this depends on knowing the number of connectors that must be monitored. Previously, we would have to set a parameter in the setup script to determine whether the ScanHeadInterface should be monitored for scanhead connect or disconnect, and the hardware sequencer would halt if an invalid connection state was detected. Additionally, it should be noted that although this feature does not seem to be of any use to us because we don\'t have probes with HVMuxes, it does not seem to be possible to disable the monitoring in the HAL.\n\nCurrently, the `ScanHeadInterface` class is hard-coded to monitor two connectors because the original SHI board in the 4-board Verasonics chassis (our original development platform) has two connectors. The SHI that is being developed for the Presto project has only one connector and the scanheads cannot be disconnected without disassembling the system. The pin that indicates scanhead connection status is shorted so that the system sees one scanhead always connected.\n\nTo support both system configurations, we will need to be able to read the board revision (or part number, if available) of the SHI and use that to determine whether one or two connectors need to be monitored. After this ticket is complete, support for running both hardware configurations will be added in #291.\n\nAdditionally, the overall implementation of the ScanHeadInterface control in the `ScanHeadInterface` class will be reviewed and updated as necessary. The error messages on scanhead connect and disconnect will be checked and updated as necessary since these have been incorrect or inaccurate in the past.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary == (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(890,"#890:Upgrade to MATLAB r2011b (closed task)","2011-09-30 07:30","2011-09-30 08:00","class=ticket-class2 ticket-closed","/ticket/890",0,"Ryan Ollos",100,1,0,0,"","== Detailed Summary ==\n\nUpgrade to MATLAB r2011b when it is released in September 2011. Some evaluation will be done with the pre-release version and notes posted to this ticket.\n\nBenchmarking should be performed prior to the upgrade with consideration to the performance issues described in #739.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\nThe project was upgrade to MATLAB r2011b and several performance issues were resolved.\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1007,"#1007:Following upgrade to MATLAB r2011b, `close all` and `clear all` take a long time to execute (closed defect)","2011-09-09 05:00","2011-09-09 08:00","class=ticket-class1 ticket-closed","/ticket/1007",0,"Allan Ortiz",100,0,890,0,"","== Problem Description ==\n\nFollowing the upgrade to MATLAB r2011b (#890), we see the following profiling results (from my Dell E6500 dual core laptop):\n{{{\n#!matlab\nprofile on, setuppsi256, close all, clear all, profile report\n}}}\nTotal time = 21 s.\n\n{{{\n#!matlab\nprofile on, setuppsi256, clear all, close all, profile report\n}}}\nTotal time = 21 s.\n\n{{{\n#!matlab\nprofile on, setuppsi256, profile report\n}}}\nTotal time = 4 s. \n\n~17 seconds is being spent in `close all, clear all`, and we\'ve observed this to be as high as 200+ seconds under certain similar conditions.\n\n== Analysis ==\n\n== Cause ==\n\nRemoving the following listeners from the class, or changing the callback to be a method from a class other than `SystemController` resolves the issue. The exact cause is unknown.\n\n{{{\n#!matlab\nsdop.addUIControl( { \'Key\', \'Mode Change\', ...\n                     \'Listener\', { @(src,event)sysController.changeActiveMode( sdop ) }, ...\n                     \'Parent\', \'ControlUI\', ...\n                     \'Style\', \'Pushbutton\', ...\n                     \'Parameters\', { \'Position\', [ 155 005 070 040 ]; ....\n                                     \'String\', \'SDop\' } } );\n}}}\n\n{{{\n#!matlab\naddlistener( cdop.Process.get( \'FlowDetection\' ), \'HasDetectedFlow\', @(src,event)sysController.autoChangeMode() );\naddlistener( sdop.Process.get( \'DopplerParams\' ).Display, \'HasWrapped\', @(src,event)sysController.autoChangeMode() );\n}}}\n\n== Implementation ==\n\nThe issue is resolved by deleting `SystemController`\'s array of listener handles in its `delete` method.\n\n== Test Case ==\n\n== Resolution Summary ==\nEliminated slowness in calls to `close all, clear all` following execution of `setuppsi256` by deleting `SystemController`\'s array of listener handles in its `delete` method.\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed defect)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(908,"#908:Evaluate MATLAB Coder for generating C++ code (closed task)","2011-09-29 04:00","2011-09-30 08:00","class=ticket-class2 ticket-closed","/ticket/908",0,"Ryan Ollos",100,0,451,0,"","== Detailed Summary ==\nEvaluate the MATLAB Coder for generating C++ code. This tool might help with porting MATLAB code to C++, and ticket #874 and #875 in particular.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (closed task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(983,"#983:Fallback ticket for week of 2011-09-27 (accepted task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class8","/ticket/983",0,"PSI Admin",0,0,0,1,"","== Detailed Summary ==\n\nAll commits that aren\'t specifically associated with an active ticket and are of small scope, therefore not warranting a dedicated ticket, should reference this ticket.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1006,"#1006:Upgrade to Verasonics software release 6.3.0 (accepted task)","2011-09-30 04:00","2011-09-30 08:00","class=ticket-class2","/ticket/1006",0,"Ryan Ollos",0,0,0,1,"","== Detailed Summary ==\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
t = new JSGantt.TaskItem(1004,"#1004:Conduct UI Concept Review with Internal Stakeholders (Round 2) (accepted task)","2011-10-13 00:00","2011-10-14 08:00","class=ticket-class4","/ticket/1004",0,"Tom Anderson",0,0,1031,1,"","== Detailed Summary ==\nConduct a second review of the User Interface Concept once it has been updated to align with the draft FRS.  \n\nThe update to the UI concept is tracked on ticket #1002.\n\n== Requirement ==\n\n== Analysis ==\n\n== Implementation ==\n\n== Test Case ==\n\n== Resolution Summary ==\n\n{{{\n#!comment\nDo not edit below this line. The FootNote macro will insert a resulting list of FootNotes if you use the FootNote macro within this document, and if you do not use it, then nothing will be added to the document.\n}}}\n[[FootNote]] (accepted task)");
g.AddTaskItem(t);
g.Draw();
g.DrawDependencies();
</script>

comment:6 Changed 3 years ago by ChrisNelson

  • Status changed from new to assigned

Obviously, IE9 is running on Windows. Can you tell me what version? Are you also running FF7 on Windows?

Does the sample display in these browsers?

comment:7 Changed 3 years ago by ChrisNelson

I can display Gantts in IE9 on W7. I suspect that there is funky text in your ticket Summary or Description that isn't being properly escaped. I noticed sequences like \'\'\' in your failed example. I'm not sure if that's in the raw text or the result of the plugin trying to escape '''.

comment:8 follow-ups: Changed 3 years ago by rjollos

I've been testing both browsers on Windows 7 x64. The sample Gantt chart displays without any issues.

The error in Firefox is occurring right after "", which is the empty string from the predecessors field. This string is empty because I'm not yet using the th:MasterTicketsPlugin.
Here is a snipet from that line:

0,0,1023,1,"","UsEngine unit

Firefox reports the error at character 210, which is the comma after the "".

Perhaps that is somehow misleading us though, because IE9 just happens to report an error for the same ticket, but in the case of IE9 it seems to have a problem with some markup in a code block. The ticket's description is:

UsEngine unit tests fail to run when executed from matlab. The error that results is:

{{{
#!matlab
>> runUSEngineUnitTests
Invalid MEX-file
'C:\Users\RjOllos\Workspace\T994-RO\usengine\MatlabSupport\mexRunUsEngineUnitTests.mexw64':
The specified procedure could not be found.

Error in runUSEngineUnitTests (line 2)
mexRunUsEngineUnitTests();
}}}

The unit tests run normally when executed from Visual Studio.

The error is "SCRIPT1023: Expected hexadecimal digit" at character 397, which is the character that follows: 'C:\Users\RjOllos\Workspace\T994-RO\u

Would you be able to make a ticket on your end with that same description and see if you get an error as well?

comment:9 in reply to: ↑ 8 ; follow-up: Changed 3 years ago by ChrisNelson

Replying to rjollos:

I've been testing both browsers on Windows 7 x64. The sample Gantt chart displays without any issues.
...
Would you be able to make a ticket on your end with that same description and see if you get an error as well?

Yes, I'll do that. Thanks for nailing it down. However, we're on deadline here so this hobby of mine has to take a back seat for a few days.

comment:10 in reply to: ↑ 9 Changed 3 years ago by rjollos

Replying to ChrisNelson:

Yes, I'll do that. Thanks for nailing it down. However, we're on deadline here so this hobby of mine has to take a back seat for a few days.

Thanks for looking, as time permits. I'll report back if I can find anything else.

comment:11 in reply to: ↑ 8 ; follow-up: Changed 3 years ago by ChrisNelson

Replying to rjollos:

I've been testing both browsers on Windows 7 x64. The sample Gantt chart displays without any issues.
.09...
The error is "SCRIPT1023: Expected hexadecimal digit" at character 397, which is the character that follows: 'C:\Users\RjOllos\Workspace\T994-RO\u
...

In FF 7.0.1 on Linux adding your description to one of my test tickets causes the Gantt to not show up. No error, must no chart. Looking at page source, the JS to create the chart is there but it doesn't show up.

Looking at what you've posted above, "\u" is the escape for "a unicode character follows in hex" and if you have, say, "\user" then 's' isn't a valid hex character. I know my quoting algorithm is home-grown and weak:

        def _safeStr(str):
            # No new lines
            str = str.replace('\r\n','\\n')
            # Quoted quotes
            str = str.replace("'","\\'")
            str = str.replace('"','\\"')
            return str

I suppose I should escape escapes (turn '\' into '
'), at least. That might solve this particular problem but I'm sure it'd leave holes.

comment:12 Changed 3 years ago by ChrisNelson

(In [10732]) Escape escapes. Refs #9215.

This is experimental but maybe it'll get Ryan further in his testing.

comment:13 Changed 3 years ago by rjollos

I updated to [10732] and it's displaying in both FF7 and IE9. Additionally, I see no JsGantt-related errors in the error console.

comment:14 Changed 3 years ago by rjollos

Thank you very much, btw!

Changed 3 years ago by jun66j5

comment:15 in reply to: ↑ 11 Changed 3 years ago by rjollos

Replying to ChrisNelson:

I suppose I should escape escapes (turn '\' into '
'), at least. That might solve this particular problem but I'm sure it'd leave holes.

I'll get back to you within the next week and let you know if I see any other changes in behavior.

comment:16 follow-ups: Changed 3 years ago by jun66j5

I think that it should use javascript_quote in trac.util.text, the function is available in Trac 0.11.3 or later.
And the escaping is needed for the other codes. Otherwise, a attacker can use the vulnerability.

See attachment:tracjsgantt-t9215.diff.

comment:17 in reply to: ↑ 16 Changed 3 years ago by rjollos

Replying to jun66j5:

I think that it should use javascript_quote in trac.util.text, the function is available in Trac 0.11.3 or later.

Yeah, that looks nice. I can test this out tomorrow on my Trac testing mirror and report back.

comment:18 in reply to: ↑ 16 Changed 3 years ago by ChrisNelson

Replying to jun66j5:

I think that it should use javascript_quote in trac.util.text, the function is available in Trac 0.11.3 or later.
And the escaping is needed for the other codes. Otherwise, a attacker can use the vulnerability.

See attachment:tracjsgantt-t9215.diff.

Thanks very much. There's a lot about programming in the Trac environment that I don't know. This is a great find.

comment:19 Changed 3 years ago by rjollos

  • Summary changed from Doesn't appear in IE9, and now Firefox 7 to [Patch] Doesn't appear in IE9, and now Firefox 7

comment:20 Changed 3 years ago by rjollos

Chris, in case it makes it easier for you to pull in and test this patch, I pushed this into the BitBucket repository and have started testing it. I'll report back within a week or so.

https://bitbucket.org/rjollos/tracjsganttplugin/changeset/e135e6c1ac6f

comment:21 Changed 3 years ago by rjollos

After installing the patch, I'm seeing syntax errors due to strings such as:

iz",18,0,,1,"","=

Note the adjacent commas.

This does not look like an issue with how the Javascript strings are escaped, however. It looks like the string for pParent (parent task ID) starting on line 983 is not handling some particular case.

comment:22 Changed 3 years ago by rjollos

comment:23 Changed 3 years ago by ChrisNelson

(In [10820]) Use javascript_quote to protect strings passed to jsGantt. Refs #9215.

Thank you very much to jun66j5 for the patch.

comment:24 Changed 2 years ago by rjollos

  • Resolution set to fixed
  • Status changed from assigned to closed

I'm pretty sure this is fully resolved, so I'll go ahead and close it, but please let me know if you prefer to keep tickets open for a while.

Add Comment

Modify Ticket

Action
as closed .
as The resolution will be set. Next status will be 'closed'.
to The owner will be changed from ChrisNelson. Next status will be 'closed'.
The resolution will be deleted. Next status will be 'reopened'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.