Permalink
Fetching contributors…
Cannot retrieve contributors at this time
3619 lines (2742 sloc) 153 KB
<style>
.doc_details {
margin-left:20px;
font-size:16px;
}
.doc_details summary { font-weight: 600; }
</style>
<details class="doc_details"><summary>v 2.5.11, Nov 11, 2018</summary>
Highlights: New "Ping" item on Jobs menu, bug fixes & tweaks.
<ul>
<li> New item on Jobs menu: "Ping a Dexter..."
gives you a dialog box allowing you to choose a Dexter to ping,
or a network address (sans host number) to scan the 256 possible
host numbers and display those hosts that are connected.
User Guide documentation on "ping" extended to alert users
to this new menu item.</li>
<li> Chrome debugger window no longer pops up when you launch Dexter.</li>
<li> DDE files menu puts file name before file folder for each item.</li>
<li> Fixed minor bug in Socket instruction_array_to_array_buffer
so that instructions sent to Dexter would end in semicolon but
NOT have a space before that semicolon.</li>
<li> calibrate_ui.js fixed bug with selecting the "Choose" value for a robot.
Now selecting Choose does nothing rather than presuming "Choose" is the name of a Dexter.</li>
<li> run instruction dialog has been set back to its previous behavior that
defines job_00 each time an instruction is run rather than add to the already
running job_00.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.10, Oct 29, 2018</summary>
<ul>
<li> Fixed bug with duplicate 'Calibrate optical encoder' buttons.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.9, Oct 24, 2018</summary>
<ul>
<li> User Guide debugging section: extended and slight re-organization.</li>
<li> Fixed socket code bug by putting a space between arguments in instructions.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.8, Oct 23, 2018</summary>
Highlights: Calibration dialog extended. Bug fixes.
<ul>
<li> Jobs menu/Calibrate Dexter isolated init_calibrate fn
to make redefining it easier.</li>
<li> Jobs Menu Calibrate Dexter dialog box extended.<br/>
When you select a robot, it does "robot_cal_init".<br/>
If there is only one robot defined when the user
choose Jobs menu/calibrate dexter,
automatically run robot_cal_init
else, have the "default" robot that shows up in the select box be "choose robot",
then all the defined robots are on that select menu below "choose robot",
BUT make the top one be Dexter.last_robot<br/>
robot_cal_init:<br/>
pop up modal show_window dialog (doesn't allow clicking outside of dialog)<br/>
Says "Please wait while initializing Robot for calibration".<br/>
Has button "Cancel".<br/>
Normal operation is that it creates a job with a
read_from_robot instruction,
and when the job completes, the show_window is automatically closed.</li>
<li> Fixed machine vision demos to load pictures with slight a delay,
so their data is accessible by subsequent code.
Reduced size of too-large show_windows.</li>
<li> Fixed the ref man, serial robot, testsuite, unknown failure.
Now all 1777 tests pass.</li>
</details>
<details class="doc_details"><summary>v 2.5.5, Oct 14, 2018</summary>
Highlights: move instructions extentions include handling joints 6 & 7,
NaN for "no change" and sending instructions to
any robot.<br/>
Documentation extensions include new Getting Started guide.<br/>
TestSuite extensions include the automaitc starting of Jobs
in tests with Job definitions.<br/>
Run Instruction dialog extensions include support for J6 & J7.<br/>
Robot Status dialog improvements.<br/>
gcode improvements.
<ul>
<li> Fixed 3 pieces of code in the RefMan that failed in running the
ref man test suite.</li>
<li>inspect: for "short info" of an object instance var val, increased
the potential length for an array being displayed from 6 to 10.</li>
<li> Bug fixed in Jobs menu/Run Instruction/Show Dialog for move cmds.</li>
<li> Added
<ul><li><code>Dexter.J6_ANGLE_MIN</code> => <samp> 0 </samp></li>
<li><code>Dexter.J6_ANGLE_MAX</code> => <samp> 296 </samp></li>
<li><code>Dexter.J7_ANGLE_MIN</code> => <samp> 0 </samp></li>
<li><code>Dexter.J7_ANGLE_MAX</code> => <samp> 296 </samp></li>
</ul>
used only for Run Instruction dialog
</li>
<li> Run Instruction dialog added J6 and J7.
<li> Run Instruction dialog: the number spinner controls constrain the value
to be within the indicated range for the joint.
But you can type in other values in the input if you like.
</li>
<li> Run Instruction dialog: move_all_joints and move_to values can now be blank
signifying "no change" for that joint or x,y,z.
A tooltip on the input inputs explains this.</li>
<li> Run Instruction dialog now has a button in upper right named
"Insert Dexter Def" that inserts new Dexter
definition with its name and ip address.</li>
<li> For move_all_joints and "a" oplet instructions,
DDE converts the degrees given for J6 and J7 into
the dynamixel units of 0.29 of a degree
before sending that value to Dexter.</li>
<li> robot.status for J6_MEASURED_ANGLE and J7_MEASURED_ANGLE
are presumed to be in dynamixel units coming from Dexter.
These are converted to degrees for DDE's use in robot_status.</li>
<li><code>Job.prototype.gcode_to_instructions</code>
got rid of file_content call
with callback, which is no longer supported.</li>
<li> <code>Job.gobj_to_move_to</code>
extended to accept a line of gcode as a string.</li>
<li> The parameters to <code>Dexter.run_gcode</code> have been changed.
It used to take by_position arguments. Now it takes keyword arguments.
The scale parameter has been replaced with workspace_pose so that it
can perform scale, rotation and offset.
A new argument is gcode, used to pass in a string of gcode that
is prepended to the filepath arguments.
See Ref Man/Robot/Dexter/Dexter Instructions/run_gcode
for updated doc.</li>
<li> <code>Socket.send</code> Fixed bug in getting the JOB_ID out of the instruction array,
which prevented DDE from connecting to Dexter.</li>
<li> <code>Socket.close</code> 2nd argument now defaults to null
so that its default value
uses the value of the simulate radio button in DDE.
(This is obscure. Most users won't call this method directly.)</li>
<li> <button>Eval</button> button behavior w.r.t. selection has been improved.
When there's a selection in the cmd input, hitting ENTER will
eval just that selected source.</li>
<li> Doc: clarified the instructions to download DDE in the User Guide.</li>
<li> Extended User Guide/Configure Dexter/Data Connection
documentation about using an IP scanner to find and set a Dexter's IP address
in DDE.</li>
<li> Doc pane <b>Articles</b> moved down to below the Ref Man.</li>
<li> At hdrobotic.com/software
Now the documentation has twist-downs similar to the twist downs
in DDE doc pane for easier browsing</li>
<li> Doc: new <b>Getting Started</b> top level section in the Doc pane.</li>
<li> Fixed bug in User Guide/Data Connection near "Go to Start/Control Panel"</li>
<li> Simplified the Robot Status dialog to not let you choose a Job.
You can now only select a robot.</li>
<li> Fixed bug in Robot Status dialog whereby it did not automatically
update the displayed data as the selected robot's job is running.</li>
<li> Robot Status dialog now has a new button "run status job"
which runs a job to get the robot status.</li>
<li> Robot Status dialog now comes up even if no job has been run on
that robot. The data for the robot displays as "no status",
but you can click the new "run status job" button
to get data from the robot.</li>
<li> Fixed click help to scroll to doc for "Dexter.write_to_robot".</li>
<li> Fixed click help to display name of function being clicked on
when showing its source code.</li>
<li>Minor improvements to User Guide/Why Use DDE? and Installation.</li>
<li> Fixed Ref Man/Dexter.get_robot_status description.</li>
<li> Slight improvement to formatting in User Guide/Help System.</li>
<li> Clicking on a word in the cmd input now displays click help on it.</li>
<li> Test menu new item: <i>Run TestSuite File</i>
allows you to choose a file and run just the tests in that file.</li>
<li> Added make_html_testsuite.js to run all TestSuites.</li>
<li> Added move_all_joints_testsuite.js to run all TestSuites.</li>
<li> <i>Run all TestSuites</i> now displays a summary of
statistics at the end of its report.</li>
<li>A test in a TestSuite can now contain source code for
creating a Job. (i.e. <code>new Job({...})</code>.
When such a test is run, the Job is defined then
started. The Test suite is suspended until the
job is completed, then the test site is resumed.
This allows tests after the Job-defining test to
verify values in the Job that were created while
running the job.</li>
<li> Fixed bug in read_from_robot in getting its "payload".</li>
<li> Fixed bug in move_to_straight AND made it accept a robot subject
so that it can move a different robot than the default one for the job.</li>
<li> <code>Dexter.make_ins</code> is a synonym for shortcut make_ins.
This long cut is consistent with other dexter command and
more explicit.</li>
<li> <code>Robot.dexter0.make_ins</code>
syntax now works to send the instruction to another
Dexter instance.</li>
<li> Fixed bug in the simulator for recording of angles
for <code>Dexter.pid_move_all_joints</code> instructions.</li>
<li> Standardized examples of calls to move_all_joints to always take its
joint angles as an array.</li>
<li> <code>dexter0.pid_move_all_joints(...)</code> now works.
The joint angles passed can all be in an array.</li>
<li> <code>Dexter.move_all_joints</code>,<br/>
<code>Dexter.pid_move_all_joints</code>,<br/>
<code>Dexter.move_all_joints_relative</code><br/>
instructions can take 5, 6 or 7 angles.
Can take the angles passed in as one array or spread out as individual args.
Can take NaN angles (keep the same)
move_all_joints, pid_move_all_joints can take relative angles
(surrounded by square brackets).
if user specifies 5 or less items , send 5 to dexter.
if user specifies 6, send 6,
if user specifies 7, send 7.
When the degree values for joints 6 and 7 are sent to Dexter,
they are converted to Dynamixel units, each is worth 0.29 degrees.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.4, Sep 6, 2018</summary>
<ul>
<li>Lots of new docmmentation in the Ref Man for the
new features listed in DDE 2.5.0 release notes
including all the Dexter.move* instructions
and the new RobotStatus class.
More doc needs to be done for RobotStatus, but
this is a healthy start.
<li>Updated version of build script to help make Mac release</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.3, Sep 5, 2018</summary>
<ul>
<li>Updated version of npm serialport package to fix Mac release problems.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.2, Sep 4, 2018</summary>
<ul>
<li>The underlying software package for speech recognition was
interfering with building DDE releases so that
underlying support has been removed for now.
If you were depending on soeech reco, please use
an eariler version of DDE, and let us know what
you were doing with speech recognition.
</li>
<li>Insert Menu/Sound/recognize_speech item has been removed.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.5.0, Aug 29, 2018</summary>
Highlights: Jobs may run instructions on more than one Dexter.<br/>
Support for Joint 6 & Joint 7<br/>
Reconfiguration of robot_status 1D array.<br/>
New RobotStatus class<br/>
move_to_straight extended, including a new "T" oplet for it.
<p></p>
<i><b>Lots of low-level software has changed in this release.
Mostly this is backwards-compatible but there might be a few
unusual cases where this is not the case.
<p></p>
This is a "test" release for Haddington internal testing purposes.
The extensions in this release will be more formally documented in a subsequent
release. For now, please make-do with the below.</b></i></li>
<ul>
<li> Ref man entries for load_files and file_content now point at each other.</li>
<li>Undid first item in 2.4.6 release notes, regarding Sockets because
it caused bugs.</li>
<li>A job may now contain instructions for more than one Dexter.
The "move" instructions can take a subject of an instance of a Dexter,<br/>
i.e. <code>Robot.dexter0.move_all_joints([1, 2, 3, 4, 5, 6, 7])</code><br/>
These instructions don't incur an extra item added to the do_list like
they use to so they will be faster.</li>
<li> Most places you use an array or list of joints now take
7 joint angles instead of 5.<br/>
The "move_to" instructions also take new args for J6 and J7.<br/>
J6 is generally the "twist" of the end effector, and<br/>
J7 is generally the gripper motor degrees for opening
and closing a gripper.</li>
<li> <code>move_all_joints, pid_move_all_joints, move_all_joints_relative</code>
have their
params named: <code>array_of_5_angles</code> renamed to <code>array_of_angles</code></li>
<li> Dexter.robot_status_labels updated:
<pre><code>Depricated:
Dexter.DMA_READ_DATA = 6
Dexter.READ_BLOCK_COUNT = 7
Dexter.J1_PLAYBACK = 16
Dexter.J1_SLOPE = 18
Dexter.J2_PLAYBACK = 26
Dexter.J2_SLOPE = 28
Dexter.J3_PLAYBACK = 36
Dexter.J3_SLOPE = 38
Dexter.J4_PLAYBACK = 46
Dexter.J4_SLOPE = 48
Dexter.J5_PLAYBACK = 56
Dexter.J5_SLOPE = 58
</code></pre>
</li>
<li><code>Dexter.J1_FORCE_CALC_ANGLE</code> and on up to <code>J5_FORCE_CALC_ANGLE</code>
have been deprecated.
Now these values are set to the same index of the new
<code>Dexter.J1_MEASURED_ANGLE</code> (and friends)
so that asking for the value of the robot_status 1D array at <code>Dexter.J1_FORCE_CALC_ANGLE</code>
will now get the value at <code>Dexter.J1_MEASURED_ANGLE</code></li>
<li>New fields in the 1D robot_status array:
<ul><li><code>Dexter.J6_MEASURED_ANGLE</code>
<li><code>Dexter.J7_MEASURED_ANGLE</code>
<li><code>Dexter.J6_MEASURED_TORQUE</code>
<li><code>Dexter.J7_MEASURED_TORQUE</code>
<li><code>Dexter.JOB_ID_OF_CURRENT_INSTRUCTION</code>
<li><code>Dexter.CURRENT_INSTRUCTION_ID</code>
</ul>
</li>
<li> Socket.instruction_array_degrees_to_arcseconds_maybe can now take
"a" and "P" instructions with any number of angle args.</li>
<li><code>make-ins("a" ...)</code> calls now take any number of joint angle args.</li>
<li> <code>make_ins</code> new optional last arg of a robot_instance,
where the instruction is sent. If no such last arg exists,
the instrution will be sent to the "default" robot defined
in the Job instance.</li>
<li> <code>Dexter.pid_move_all_angles</code> & <code>Dexter.pid_move_to</code> now consistently
get default angles from and set robot.pid_angles.</li>
<li> <code>move_all_joints</code>, <code>pid_move_all_joints</code>,
<code>move_to</code>, <code>pid_move_to</code>, <code>move_to_straight</code>,
All default unpassed values for joint angles (or x, y, z) to their
previous values.</li>
<li> If a passed in degree (or x,y,z) value for a "move" command is
wrapped in an array,
then the first value of that array is considered to be "relative"
and is added to the existing value to come up with the new value.<br/>
Example: <br/>
<code>Robot.dexter0.move_all_joints([1, [2.5], 3, [4.5], 5, 6, 7])</code>
Above the values of 2.5 and 4.5 are <i>relative</i> to the previously
commanded degrees for joints 2 and 4.</li>
<li> <code>Dexter.HOME_ANGLES</code> <code>NEUTRAL_ANGLES</code>, <code>PARKED_ANGLES</code>
all are now of length 7 with two zeros on the end.</li>
<li>New Oplet "T" for the Dexter-side version of <code>Dexter.move_to_straight</code>.
Example:<br/>
<pre><code>make_ins("T",
x, y, z,
J5_direction[0], J5_direction[1], J5_direction[2],
config[0], config[1], config[2],
tool_speed, resolution,
j6_angle, j7_angle)</code></pre>
with an optional robot_instance as an additional last arg.
</li>
<li> <code>Dexter.move_to_straight</code> instruction has been extended
with a new param: <code>single_instruction</code>.
Default false. But if true,
a <code>make_ins("T" ...)</code> instruction is generated and sent to Dexter
instead of a long array of other low level instructions.
</li>
<li>To support the new "T" instruction, the Socket code now converts
tool_speed and resolution args from "meters" to "microns",
ie they are multiplied by 1,000,000</li>
<li> move_to_straight's generated make_ins instructions now take
a last array elt of the robot instance.</li>
<li> Bug fix: <code>Dexter.move_to_relative</code> changed
from using <code>job_instance.robot.pose</code>
to
<code>this.workspace_pose</code></li>
<li> <code>Dexter.move_to_straight</code> now takes a new <code>workspace_pose</code> arg.</li>
<li> <code>Dexter.move_to_straight</code> now takes keyword args.
This is an incompatible change.
An explicit error message is displayed when you call move_to_straight with
by_position args.</li>
<li> Bugs fixed in <code>Dexter.move_to_relative</code> with the workspace_pose.
It had some params misspelled of "workspace_pos".</li>
<li> <code>robot.pid_angles</code> used more consistently for the pid instructions.</li>
<li> <code>robot.angles</code> and <code>robot.pid_angles</code> now inited to
<code>[0,0,0,0,0,0,0]</code>
(was <code>[0,0,0,0,0]</code> ).</li>
<li>Updated Dexter simulator to the new 7 angles, etc. Fixes to
compution duration.</li>
<li>The "Show Robot Status" dialog box has been updated to the new
robot_status fields.</li>
<li><code>RobotStatus</code> class provides high level access to the robot_status array.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.6, Aug 3, 2018</summary>
Highlghts: Jobs gracefully finish under some conditions of the
socket connection between DDE and Dexter failing.
<ul>
<li> If the socket connection between DDE and Dexter is broken after
DDE has sent an instruction but before that instruction's reception is acknowledged
from Dexter to DDE, then DDE will stop the job formally.
DDE waits 200ms after sending the instruction to declare that the
socket connection is broken.
</li>
<li> Picture.make_classifier doc extended to say that you can't use a url for the path argument,
it must be a local file.
The doc also explains that the default xml works poorly with faces with glasses on.
</li>
<li> Picture.classifier_detect doc updated to explain the example.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.5, July 31, 2018</summary>
<ul>
<li> Fixed bug in display of Evaled source code in the Output pane header.
This bug was also responsible for breaking the Insert menu/Machine Vision/ demos,
and probably a bunch of other things, especially when evaling a large
amount of source code (that would likely include single quotes).
</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.4, July 27, 2018</summary>
Highlights: Serial port robot improved greatly.<br/>
new OpenCV classifier interface for detecting objects in images.<br/>
Click help for built-in JS constructs improved.<br/>
Eval&Start button can run a robot instruction.<br/>
patch_until helps manage software patches.<br/>
Improvements to the Vector library.<br/>
<ul>
<li> Removed console printouts when evaling a Job,
related to: inspect_set_new_object_onclick,
Inspect_next_value_id and not Inspect_prev_value_id
as their not indicating something that's wrong.</li>
<li> Removed undocumented & unused utility function dom_child_elts_of_class
Use <code>dom_elt_children_of_class(elt, a_class)</code> instead.
Note that dom_elt_children_of_class does not take a return_first_or_null,
it always returns an array (which might be empty).</li>
<li> When printing out a result of an eval in the output pane,
the source is now shown. Note that you can select the source
or a portion of it, then click the Eval button to eval it again.
If the source is long, only its first line, and maximally only 55 chars
is shown (with ... indicated it has been truncated).
But hovering over it gives a tooltip of the full source.</li>
<li> Bug fix for the run instruction dialog when you attempt to start
running a new instruction before the previous one has completed.</li>
<li> Extended the documentation for <code>Picture.show_video</code> for the content and camera_id
parameters.</li>
<li>The serial port Job example, simulate flag on the robot definition
has been changed from <code>false</code> to <code>null</code>
so that it pays attention to the Jobs menu/Simulate? flag.</li>
<li><code>new Serial()</code> can now take a simulate arg that is null,
so that the actual simulate comes from the Jobs menu/Simulate? submenu.
null is the new default.</li>
<li> Fixed bug that had the Instruction class for string_instruction
erroneously named "suspend".</li>
<li><code>Serial.string_instruction</code> and <code>Robot.grab_robot_status</code> have been extended
to accept a robot instance in place of <code>Serial</code> and <code>Robot</code>
respectively,
to direct the instruction to a particular robot regardless of the
default robot declared in the job.
Ref Man/Robot/Serial and
Ref Man/Robot/Robot Instructions/grab_robot_status
have been improved and extended to describe these
new capabilities.
See especially the new section: Ref Man/Robot/Serial/Multiple Serial Ports</li>
<li>New Series: JavaScript Object Names.</li>
<li>Improved click_help for built-in JS classes and misc DDE global functions.</li>
<li> Eval&Start button extended to run a selected Dexter (or other) Instrucdtion
on an automatically defined job.</li>
<li> new function: patch_until for helping to manage patch source code.
See Ref Man/Operating System, etc./patch_until</li>
<li> <code>Picture.mat_to_gray</code> documentation extended to include that
it mat_in is already gray, it is just returned.</li>
<li>New method: <code>Picture.make_classifier</code>.
Use an xml file to create a classifier.</li>
<li>New method: <code>Picture.classifier_detect</code>. Use a classifier to
identify objects in a picture. Especially good for face detection.</li>
<li> <code>Vector</code> Library - Matrix Math Test Suite #24 bug fixed.</li>
<li> <code>Vector.concatinate</code> improved to take in an unlimited number of matrices instead of just two.</li>
<li> New method: <code>Vector.ellipse_fit</code>.
This fits a shifted, tilted, and squished ellipse
to a set of data points that are passed as arguments of:<br/>
- an array of x numbers and<br/>
- an array of y numbers.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.3, July 18, 2018</summary>
Highlights: New methods: Picture.detect_blobs, Picture.similarity_by_detect_blobs.
Arrow keys in editor behave more conventionally. Sim pane more useful.
<ul>
<li> Sim Pane menu "Dexter Photo" now expands the photo as the user expands the pane.
"Reference Manual" displays the ref man in the sim pane.
"Choose File" allows you to choose and image file, HTML file
or various text files to display.</li>
<li> Insert menu/Machine Vision/Locate Object code cleaned up to
remove lint formatting warnings. Picture declared as a known value.</li>
<li> Insert menu/Machine Vision/Locate Object demo slightly improved.</li>
<li> New method: <code>Picture.detect_blobs</code>
See Ref Man/IO/Picture/High Level/detect_blobs</li>
<li> New method: <code>Picture.similarity_by_detect_blobs</code>
See Ref Man/IO/Picture/Similarity/similarity_by_detect_blobs</li>
<li> New Insert menu/Machine Vision/Picture Similarity demo</li>
<li> All Picture.similarity methods now take keyword, instead of by-position args.</li>
<li> <code>Picture.show_picture</code> dialog box now has a more informative title when
displaying a mat, giving its type and size.</li>
<li> Choosing Insert menu/Machine Vision/Locate Object and
Insert menu/Machine Vision/Picture Similarity
scrolls the doc to the appropriate method.</li>
<li> Robot status dialog box fixed for displaying non-numbers.</li>
<li> In the previous releases, using the arrows keys in the editor
navigated TestSuites and Series. This conflicted with more
conventional uses of the arrow keys for text editing operations.
In this release, DDE's special uses of arrow keys have been switched
to Alt- arrow key, and the conventional use of the arrow keys
is now available.
Test menu/Navigation and User Guide/TestSuite have been
updated accordingly.</li>
<li> Joint limits: Now the Dexter instructions:
<ul><li><code>move_to</code></li>
<li><code>pid_move_to</code></li>
<li><code>move_all_joints</code></li>
<li><code>pid_move_all_joints</code></li>
</ul>
do not error when they are passed angles that exceed the joint limits.</li>
<li> <code>show_window</code> new parameter: resizable.
Previously, show_windows were unresizable.
Now you can set resizable to true (the default)
such that existing calls to show_window are now all resizable
by the user.
See Doc Ref Man/Window System/show_window/resizable.</li>
<li> Series menu/DDE/Robot/Robot subclass now inserts
<code title="not in test suite.">new Dexter({name: "my_dex", ip_address: "192.168.1.142", simulate: null})</code>
(added ip_address and simulate args)</li>
<li> Jobs bar buttons now scroll horizontally if there are
too many of them to fit in the Output pane header.
You can still drag DDE's vertical splitter bar to the right
to show more job buttons at a time.</li>
<li> Fixed <code>number_similarity</code> bug for a neg and a pos number.</li>
<li> DDE menu bar menus: now you have to click to pull them down.
Hovering no longer does it.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.1, July 7, 2018</summary>
<ul>
<li> fixed typo in test_suites.js</li>
<li> fixed typo in Picture1.js</li>
<li> update pkg.json webmidi version number from "^2.0.0-rc.7", to "^2.0.0"
to fix octave problems in testsuite.</li>
<li> Fixed test suite tests for Vector library poses.</li>
<li> improved Sim pane doc slightly. (click on "Sim" in the Sim pane header.)</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.4.0, July 6, 2018</summary>
Highlights: new Picture class for machine vision. Bug fix for Vector.rotate.
<ul>
<li>Improved face reco demo to not depend on Internet connection.</li>
<li><code>string_to_literal</code> now places backquote around strings with embedded
newlines. Fixes bug in selection to test for tests returning multi-lined
results.</li>
<li>Updated numerous packages that DDE uses to their latest version
(with the same MAJOR version).<br/>
This caused an incompatibility with webmidi.
Previously, Middle C (midi pitch 60) was in octave 3.
Now it is octave 4.<br/>
<code>WebMidi.guessNoteNumber("C4")</code> => <samp>60</samp>
This is more standard amongst musicians
that actually know what an octave is, and thus better.
Lacking still is the mistake by MIDI designers of
making Middle C being pitch number 60 instead of 48
(because 4 * 12 = 48, not 60),
but most standards have these kinds of illogic in them.</li>
<li><code>close_window</code> Extended functionality:
If no argument is passed, the latest <code>show_window</code> is closed.
if there is no existing window specified by the argument, a warning
is printed but does not error.
See Ref Man/Window System/Window Utilities/close_window.</li>
<li> Ref Man/Robot/Dexter Instructions/move_to improved.</li>
<li> Bug in <code>Vector.rotate()</code> fixed.</li>
<li> <code>Picture</code> is a new class that's a high level wrapper for
some simpler, more common OpenCV.js use cases.
There are 34 new methods and a LOT of doc (with example calls) in<br/>
Ref Man/IO/Picture<br/>
New menu item: Insert Menu/Machine Vision/Locate Object.<br/>
Still a work in progress.</li>
<li>Inspector specializes OpenCV "mat" instances to make inspecting and viewing them easier.
When inspecting a "mat", a "show_picture" button is displayed.
Clicking on the button shows you the image.
If you click on a pixel in the image, you see its
x, y, red, green, blue values displayed in the Output pane.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.18, June 12, 2018</summary>
<ul>
<li> Fixed <code>Robot.sync_point</code> and all calls to <code>Job.insert_instruction</code>
to better handle being called inside of a loop.</li>
<li> Fixed <code>Robot.break</code> instruction to properly handle skipping past end of loop
when the loop body has nested instructions.</li>
<li> Improved doc for <code>Robot.go_to</code></li>
<li> Improved doc for <code>Job.insert_instruction</code></li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.17, June 11, 2018</summary>
<ul>
<li> <code>isLeafObject</code> new newObject system method.
See Ref Man/Object System/New Object System Methods/isLeafObject</li>
<li> <code>leafObjectNamed</code> new newObject system method.
See Ref Man/Object System/New Object System Methods/leafObjectNamed</li>
<li> Added to Edit menu: <b>Find Next</b> and <b>Find Prev</b> to
find next and previous instances of the search term</li>
<li> Improved tool tips for Find and Replace menu items.</li>
<li> Fixes for infinite looping bug over
<code>wait_until</code> and <code>sync_point</code> instructions.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.16, June 4, 2018</summary>
Highlights: Face Recognition example added. Dexter.read_from_robot fixed. EzTeach fixed.
<ul>
<li> Job simplest example, <code>Dexter.move_all_joints</code>
call is now more normal call format of
being passed 1 array of 5 numbers.</li>
<li> <code>array_to_csv</code> improved formatting of its ref man example.</li>
<li> <code>Dexter.read_from_robot</code> bug fixed.
<li> Documented <code>Dexter.read_from_robot</code></li>
<li> <code>Serial</code> Job example: fixed typo.</li>
<li> <code>make_ins("I"...)</code> instruction:
got rid of warning message
which is generated by Serial.string_instruction.</li>
<li> Minor improvement to Ref Man <code>Serial</code> robot doc.</li>
<li> User Guide/Installation new section: <b>Windows 10 Problem</b>
about how to work-around a recent change to Windows 10
that prevented DDE launch.
Added to Github release notes as well.</li>
<li> Fixed bug in inspect when looking for 'objectPath' on objects
that don't have one.</li>
<li> insert menu/Machine Vision/Face Recognition is a new demo
with comments on how to use it.</li>
<li> Blob Detector Demo:<br/>
fixed bug in initial loading with the "image" not being ready to be processed.<br/>
fixed spelling in documentation<br/>
fixed the two columns from jumping around because they were vertically "centered".
now their tops are always at the top of the window.
</li>
<li> EZTeach A bug has been fixed.</li>
<li> <code>kin.move_to_straight</code>
had an erroneous fourth arg that previously did not do anything.
However a fourth arg was added to kin.xyz_to_jangles which caused it to error.
This fourth arg has been removed.
This bug is not expected to come up anywhere else.</li>
<li> Made <i>Show robot status</i> more robust in the face of potentially
unexpected non-numerical inputs to the table. (changed calls to toFixed)</li>
<li><code>Dexter.dummy_move</code>, bug fixed that prevented
Dexter.dummy_move from working if
your job's robot wasn't named "my_dex".
From James W. It looks like Dexter.dummy_move() is broken on the DDE side.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.15, May 11, 2018</summary>
Highlights: numerous bug fixes, minor other improvements.
<ul>
<li>Updated jqxwidgets to latest version (was over a year old)</li>
<li> fixed click help for Array functions.</li>
<li> fixed Robot.loop so that jobs containing it can be restarted successfully.</li>
<li> dxf drawing characters now supports period and comma.</li>
<li> improved error message when a Job is started with an empty do_list.</li>
<li> click_help supported for <code>window</code>.</li>
<li> click_help supported for <code>--</code>. (decrement)</li>
<li> numerous other little fixes to click_help including "Job".</li>
<li> Improved error message printing for show_window handler function.</li>
<li> documentation for <code>out</code>'s "code" argument fixed and extended.</li>
<li> <code>out</code>'s "val" argument's default value changed from undefined to ""</li>
<li> Dexter.write_to_robot changed max_content_chars from 252 to 244.</li>
<li> A job's button tooltip tells you the instruction number
(Job Program Counter) that its currently at.</li>
<li> When a job reaches a wait_until instruction the job's button tooltip is
more explicit.</li>
<li> Robot.wait_until, fixed bug when you pass a Duration instance
as wait_until's argument.</li>
<li> Doc for Ref Man/Robots/Dexter/new Dexter parameters extended
with an example of:
new Dexter({name: "my_dex",
simulate: true,
ip_address: "192.186.1.142",
port: 50000 //the default
})</li>
<li> Robot.wait_until instruction now can take a Job as an instance.
The job containing the wait_until instruction waits until
the passed in Job completes (or errors).</li>
<li> Extend Robot.start_job to take another arg: wait_until_job_done (default false)
if true, the job containing the Robot.start_job instruction pauses until
the designated job is finished.
Now we can make a sequence of jobs in another job,
a la
new Job({do_list: [ Robot.start_job("a"), Robot.start_job("b")}
and have b be started after a is done.</li>
<li> fixed typo in "Overview" article.</li>
<li> bug fix: Dexter.write_to_robot escapes written characters properly.
needs new files on Dexter to work properly.</li>
<li> Fixed minor text in recognize_speech ref man doc.</li>
<li> When defining a job, invalid initial instructions are now
caught, rather than waiting until the job is started.
Doc pane automatically scrolls to the "do_list" documentation.</li>
<li> Expanded doc in Ref Man/Job/new Job paramaters/do_list</li>
<li> New instruction: Dexter.write_to_robot writes a file to Dexter.
See Ref Man/Robot/Dexter/Dexter Instructions/write_to_robot
example file arg:
"/srv/samba/share/AdcCenters.txt"
but in the ViewEyeRealTime.js its
path = "//" + ip_address + "/share/AdcCenters.txt"</li>
<li> User Guide "Debugging" section extended with "Click on Delimiter"
and a bit of reorganizing for easier access.</li>
<li>Added a warning in: Editor.restore_files_menu_paths_and_last_file
if it can't find dde_persistent.json file.</li>
<li> DDE now always opens the chrome dev tools window at the beginning
of the launch process.</li>
<li>Job.start sets "starting" status earlier and colors job button accordingly
job button is now a pale green during "starting".</li>
<li> fixed bug in EasyTeach with workspace pose.</li>
<li> While running a job, if there is an error in a user defined function
(and some other possible errors) they are now caught and
the job terminates properly turning the job button red
and showing an error message in the tooltip relating to the cause.</li>
<li> improved formatting of sync point job example.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.14, Mar 18, 2018</summary>
Highlights: Dexter.pid_move_to updated.
<ul>
<li><code>Dexter.pid_move_to</code> updated to the improvements for move_to
in release 2.3.13.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.13, Mar 18, 2018</summary>
Highlights: move_to defaulting args fixed.
<ul>
<li>Fixed bugs in <code>Dexter.move_to</code> clever defaulting of args.</li>
<li>Fixed bugs in Job with new param: <code>default_workspace_pose</code>.</li>
<li>Kin bug fixed.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.12, Mar 17, 2018</summary>
Highlights: Dexter.move_to extensions
<ul>
<li>Dexter.move_to 2nd argument (J5-direction) can now take
additional types.</li>
<li>Dexter.move_to 4th argument is now workspace_pos.</li>
<li>Extended doc in ref man/Robot/Dexter/Dexter Instructions/move_to/J5_direction
and workspace_pose</li>
<li>Extended doc in ref man/Job/new Job parameters/default_workspace_pose</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.11, Mar 12, 2018</summary>
Highlights: Kin test suite fixed. Coor improvements.
<ul>
<li> Bugs in Kin.js test suite fixed.</li>
<li> Defaults added to Coor.move_points_to_coor() and Coor.move_vectors_to_coor()</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.10, Mar 12, 2018</summary>
Highlights: Kinematics improved, dxf drawing extended,
error messages & click help improved.
<ul>
<li>The bottom horizontal scroll bar in the output pane is now visible.</li>
<li> Warning message improved to:
"DDE can't reach the web to check for the latest release."</li>
<li> click_help: made "in_a_comment" lower priority, for more useful information.</li>
<li> For a long time, a Job being created with a name of null (the default),
meant that a new unique name would be generated a la "job_123".
Now, in addition to null, "" (the empty string) can be passed
for the name param. Furthermore, "" is the new default.
This provides more useful click help since the default value
is of the same type as a normal value, i.e. a string.</li>
<li> make_dom_elt improved warning message when a property is both HTML and CSS.</li>
<li> Kinematics: cartisian computations improved, affecting move_to instruction.</li>
<li>Dexter.draw_dxf extended to handle: LWPOLYLINE</li>
<li>click help for Job, Dexter and Serial improved with more accurate
calling syntax. (replaced "=" with ":")</li>
<li> Errors in a show_window handler function are now caught and displayed.</li>
<li>Many other error messages that are dispalyed with calls to <code>dde_error</code></li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.9, Feb 12, 2018</summary>
Highlights: Bug fixes and UI tweaks.
<ul>
<li>Fixed output pane height to compute itself for the available space.
Now you can drag the splitter bar between the editor pane up and
the output pane and the OUTPUT (lower) portion of the output pane
will always fill up all the available space.</li>
<li> Calibration Start buttons J1 thru J4
now have tooltips of:<br/>
"Expect a circle of points to be drawn counter-clockwise."</li>
<li> Calibration Start button J5
now has a tooltip of:<br/>
"Expect a circle of points to be drawn clockwise."</li>
<li> J3 UI section now has the min angle value on the left,
and the max vale value on the right, just
like the other joints.</li>
<li> File menu item of "Save As..." given a more complete tooltip of:<br/>
<i>Save the current editor content under a new name.<br/>
The old file remains unchanged.<br/>
It will remain on the list of files.</i></li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.8, Feb 9, 2018</summary>
Highlights: Fix for Dexter's "jitters" and 6 other bug fixes.
<ul>
<li>In Dexter's modes, pidBase changed to prevent oscillations.</li>
<li>Robot.start: at beginning of a job, if a 'ping' to Dexter
is successful, wait 500ms before sending instructions to give
Dexter initialization a chance to complete.</li>
<li> <code>Dexter.set_parameter("MaxSpeed", 0)</code> (or less) causes an error.
(but not in low level make_ins calls)</li>
<li> <code>Dexter.set_parameter("MaxSpeed", 0.0000001)</code> warns:
Dexter.set_parameter called with MaxSpeed of: 0.0000001
which is too low.
MaxSpeed set to the minimum permissible speed of:
0.00012895346330171073</li>
<li> <code>Dexter.set_parameter("StartSpeed", -1)</code> now errors immediately.
0 is ok but less than 0 causes an error.</li>
<li> If a Job attempts to start that has a robot that is in use
by another job, the 2nd job errors.</li>
<li> Increased the likelihood that the last file edited
will be the file that comes up in the editor when you launch dde.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.7, Feb 7, 2018</summary>
Highlights: Calibration bugs fixed, Dexter connectivity checked,
Extra Units series help
<ul>
<li> <code>make_dom_elt</code> is now documented.
It and <code>make_html</code> are now in the 'window' series.</li>
<li>Now, before instructions are sent to a Dexter,
it is pinged. If it responds, the instructions are sent.
If not, the job errors with an instructive error message.</li>
<li> Now when you choose Series menu/Units System/any item
besides Help and temperature,
in addition to the usual insertion of the first series item
and a line in the output pane about it,
a <i>second</i> line in the output pane lists all the units in the
series you've selected.
The tooltip on each item gives you details about it.
Clicking the item itself inserts the
item in the editor, preceded by "*".
This is an experimental feature.</li>
<li> Calibration has some connectivity bugs fixed.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.6, Jan 31, 2018</summary>
Highlights: Calibration bug fixes. First pass fix for connectivity
while Dexter is booting bug.
<ul>
<li> Fixed make_html_test_suite.js last test</li>
<li> Fixed test_suites.js is_integer (last test) AGAIN.</li>
<li> Formatting improvement for test report on a testsuite with multiple errors.</li>
<li> Fixed to_source_code methods for instructions when not passed "indent".</li>
<li> <code>make_html</code> fixed bug with style property ending quote.</li>
<li> New utility <code>make_dom_elt</code> takes same args as make_html,
but returns a dom elt.</li>
<li> HTML DB, added the previously omitted
"on" html properties (about 80 of them)</li>
<li> html_db fixed omission in html properties. Now allows "data-*" props.</li>
<li> Minor fixes to Object system doc.</li>
<li> Extended User Guide/UI Design Criteria.</li>
<li> <code>Job.inter_do_item_dur</code> had a mistake in the documentation.
It said this was in milliseconds, but its actually seconds.
There was another error in recording the default value
that might have affected something else.
Both fixed.</li>
<li>Better formatting for data output from exTeach to make it much
more human readable.</li>
<li><code>newObject.callPrototypeConstructor</code> fixed infinite recursion bug.</li>
<li>Extended Ref Man/IO/Sound/Music With Midi/Connecting Midi Apps/
On Windows OS with better doc from Github issue #16, now closed.</li>
<li>The example for "beating" with
<code>beep({frequency: 440, dur: 10})</code>
has its dur increased from 1 to 10 to make the effect more obvious.</li>
<li> Calibration fixes for attempting to use dexter0 when it shouldn't be.</li>
<li> First pass at fixing connectivity to dexter while its booting.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.5, Jan 19, 2018</summary>
Highlights: Bug fixes and a few internal mods.
<ul>
<li> Improvements to Ref Man/Robot/Robot Instructions/Any Start Object</li>
<li> Extended the Insert Menu/show_window/svg menu item label
with the suffix "(2D drawing)" just in case uses don't know
what svg means.</li>
<li> show robot_status dialog now prints the bulk of the numbers
as having exactly 3 digits to the right of the decimal point
and right-justifies the number so that the decimal points
of the cells in a column will line up.
This should also reduce the dynamic changing of the width of
a column as a robot is moving.
May still need improvement. Feedback welcome.</li>
<li> Bug fix to the Kinematics "vector.add" bug.
Removed "known issue" about this bug.
</li>
<li>Kinematics: Singularity error message updated to check if
link length are in correct units.</li>
<li> Fixed release date (2.3.4 wrongly had Jan 20) </li>
<li> Fixed test suite for is_integer </li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.3, Jan 16, 2018</summary>
Yet another attempt to fix the Windows 10 "OneDrive" bug.
</details>
<details class="doc_details"><summary>v 2.3.2, Jan 15, 2018</summary>
Highlights: Windows 10 OneDrive bug fix
<ul><li> Improved User Guide doc on the Eval button.</li>
<li> Another attempt to fix Windows 10 OneDrive bug.</li>
</details>
<details class="doc_details"><summary>v 2.3.1, Jan 15, 2018</summary>
Highlights: Fixes for Calibrate and maybe Windows "OneDrive" bug.
<ul>
<li> Fix for calibrate "merge" problem of ViewEyeRealTime.js </li>
<li>Maybe fix, (needs testing) bug on windows with OneDrive
and defining <code>dde_apps_dir</code>.</li>
<li> New example for <code>show_window</code> that uses <code>make_html</code>
In Ref man/Window System/show_window.</li>
<li> Explanation in the special error message for <code>shouldnt</code> calls.</li>
<li> Now, when there is a selection in
both editor and non-editor, the <button>Eval</button> button,
uses the non-editor selection
as that was made most recently.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.3.0, Jan 15, 2018</summary>
Highlights: Robot.loop instruction, make_html function, Step button,
Calibration improvements
<ul>
<li> Minor improvement in testSuite reporting for bad "expected source".</li>
<li> Running all tests now warns you to expect 2 unknown and 1 known
error in the first test suite.</li>
<li> <code>to_source_code</code> for <code>Note</code> and <code>Phrase</code> now implemented and in test suite,
fixing the test suite errors they had caused.</li>
<li> Bug fix to <code>to_source_code({value: a_fn})</code></li>
<li> Improved tooltip on the Command Line.</li>
<li> new instruction: <code>Robot.loop</code> See Ref Man/Robot/Robot.instructions/loop</li>
<li> new instruction: <code>Robot.break</code> for use with Robot.loop. See Ref Man/Robot/Robot.instructions/break</li>
<li> New menu item: Job menu/Insert Example/Robot.loop
Choosing this example inserts 6 loop example jobs AND
scrolls to the Robot.loop documentation in the Ref Man.</li>
<li> The instruction <code>"debugger"</code> has been replaced with <code>Robot.debugger()</code>
This makes DDE API more consistent with itself, and makes the
implementation more modular.
This is an incompatible change, but since "debugger" instructions
are necessarily temporary, this won't affect perminent Job definitions.
See Ref Man/Robot/Robot Instructions/debugger</li>
<li> New <button>Step</button> button in Output pane to left of <button>Eval</button> button.
Just like Eval button, but steps through the selected code instead.
Reduces need to insert <code>debugger;</code> in your code AND
need to set breakpoints in Chrome Dev Tools.<br/>
Opens Chrome Dev Tools automatically<br/>
See new doc in User Guide/Debugging/Stepping</li>
<li> New doc: Ref Man/Robot/Dexter/Dexter instructions/move_all_joints/Dexter Positive Joint Direction Diagrams.</li>
<li> Extended calibration with better error message when the view eye goes in the working direction.</li>
<li> New Doc section: User Guide/Calibrate Dexter/Calibrate Optical Sensors/Troubleshooting</li>
<li> Fixed calibration dialog box to be able to take advantage of selecting
which Dexter you're calibrating.</li>
<li> Updated opencv.js to the latest version.</li>
<li> New function: <code>make_html</code><br/>
Advantages:
<ol><li>Just js syntax. You don't have to know HTML & CSS punctuation.</li>
<li>Easier to embedded computed values into the HTML. (better than string concat)</li>
<li>Don't have to remember what's an html attribute and what's a style.</li>
<li>Error checking for html tags, attribute names and style names which
browsers don't do.</li>
</ol>
See Ref Man/Window System/make_html</li>
<li> 3 new series': html_tags, html_property, css_property.
New item on Series menu: HTML that has a submenu of all 3.
Click help on each item has extensive links to doc for each.</li>
<li> Improved Output pane printing of literal strings by removing
backslash in some cases.</li>
<li> Removed the undocumented utility fn <code>own_properties</code> because its behavior is
the same as standard JS <code>Object.getOwnPropertyNames(an_object)</code>
This is an incompatibility, but a slight one. Any users that
happened to use own_properties will get an error as soon as its called,
and can find the standard JS fn Object.getOwnPropertyNames.
own_properties was not used within DDE before this so
its need is probably quite uncommon.</li>
<li> New utility function: <code>intersection</code>.</li>
<li> Added "inspect" to known function for syntax linting.</li>
<li> Improved User Guide/Configure Dexter/Data Connection for MacOS.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.10, Dec 26, 2017</summary>
Highlights: show_window & Human.enter_number extensions.
New User Guide section: UI Design Criteria
new instruction Human.speak
<ul>
<li> show_window, default callback inspects the arg passed
to the callback, allowing you to see more of its values and
in a better format.</li>
<li> show_window has new way to initialize a show_window after its popped up.
See Ref Man/Window System/show_window/init_elt_id.</li>
<li> Now show_window, just after its called, gets the keyboard focus
so that typing a char won't go into the editor.</li>
<li> Documented the "click" method in Ref Man/Window System/click</li>
<li> updated Insert menu/Machine Vision/Blob Detector to
use init_elt_id, improved formatting.</li>
<li> Human.enter_number now displays the min and max values automatically.</li>
<li> Human.enter_number If you type in an out of range number, it
tells you and let's you fix it.</li>
<li> New User Guide Section: User Interface/UI Design Criteria.</li>
<li> new instruction:
Human.speak("some text") that says the text before moving on to the next
instruction. See RefMan/Robot/Human/Human Instructions/speak.</li>
<li> Though there have been some significant extensions to
speech_recognition in this release, it is not now working.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.9, Dec 8, 2017</summary>
Highlights: CSV conversion for DDE reading and writing spreadsheets.
FindHome calibration improved but still a work-in-progress
<ul>
<li> "dde_error" and "dde_version" defined for lint.
<li> Ref man "operating_system" now documents that
Ubuntu OS has the value "linux".
<li> Human.enter_number now errors if the initial value
is less than the min or more than the max.
<li> show robot_status dialog expanded so you don't have
to scroll to see it all
<li> new functions array_to_csv and csv_to_array
for converting between JavaScript arrays and
common-separated-value strings that are used
by spreadhsheets and other programs.
See Ref Man/IO/CSV
<li> extended user Guide/Configure Dexter/Data Connection/Ping
about trouble shooting with an IP scanner.
<li> FindHome button on the Calibrate window improved.
At the very least, the doc for this is incomplete,
though it has been extended in User Guide/Calibrate Dexter/Find Home
</ul>
</details>
<details class="doc_details"><summary>v 2.2.8, Dec 1, 2017</summary>
Highlights: Bug fixes for Calibrate, FindHome. Doc improvements
<ul>
<li> DDE now saves the editor buffer when you quit with the save checkbox checked.
(this was in the 2.2.7 release but I forgot to put it in the release note.)</li>
<li> Documented a software music synthesizer for Windows OS in
Ref Man/IO/Sound/Music with MIDI/Synthesizers</li>
<li> <code>close_window</code> can now take the title of a window to close.</li>
<li> <code>cshow_window</code> has a new init option: close_same_titled_windows
default <code>true</code>. See Ref Man/Window System/show_window/close_same_titled_windows</li>
<li> calibrate sped up by reducing the updating of joint angles in the display.</li>
<li> new calibrate algorithm.</li>
<li> FindHome button in Calibration dialog now
uses the Robot that is set at the top of the
Calibration dialog.</li>
<li> User Guide/Configure Dexter/Data Connection re-written
to remove the WiFi connectivity and indicate
the problem of connecting a Mac that doesn't have
a direct Ethernet socket.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.7, Nov 21, 2017</summary>
Highlights: Bug fixes, including calibrate optical encoders
<ul>
<li> <code>to_source_code</code> top level now can take just a data without ({value: data}),
ie to_source_code(3) works just like to_source_code({value: 3})</li>
<li> Fixed bug in inspection of Notes and Phrases.</li>
<li> DDE main window now has a title suffix of the version number.</li>
<li> Fix for calibrate optical encoders not doing anything.</li>
<li> Fixed 2 example code Jobs in Ref Man/Robot/Robot Instructions/Any Array of Instructions</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.6, Nov 21, 2017</summary>
Highlights: Bug fixes and improved doc.
<ul>
<li> Fixed release notes formatting that caused
hiding of know issues and other release notes at top level under
release notes.</li>
<li> More explicit error messages when the "Dexter.move_" instructions
are out of range.</li>
<li> When a job is defined that has a job of that definiton active,
that active job is stopped automatically.
The time allowed for that job to stop
was 3 times the inter_do_item_dur. Now its 200ms.</li>
<li> Fixed simulator joint 5, changed sign.</li>
<li> "B" oplet added. "set_boundries"</li>
<li> New section of ref man: Robot/Robot Instructions/Any Array of Instructions</li>
<li> Inspector: improved printing of 2D arrays.</li>
<li> 5 Informative and pretty pictures on coordinates added to
Ref Man/Dexter/Dexter Instructions/move_to</li>
<li> If the save (on eval) checkbox is checked and the user quits the application,
the current file is saved.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.3, Nov 16, 2017</summary>
Highlight: Calibrate fixes, Convert v1 to v2 doc more complete.
<ul>
<li> Calibrate button: "Start FindHome" bugs fixed, now functional.</li>
<li> Calibrate ui, small fixes</li>
<li> Minor syntactic bug in Kin.js in a TestSuite fixed.</li>
<li> Extended Convert v1 to v2 in DDE 2.2.2 to be more complete.</li>
<li> inter_do_item_dur: changed from 0.91 to 0.001 (1 millisecond.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.2, Nov 15, 2017</summary>
Highlights: Bug fixes in calibrate, support for converting code from DDE 1 to DDE 2.
New insructions: Robot.unsuspend, Human.enter_filepath
<ul>
<li>Completed implementation of to_source_code methods for do_list Instructions.</li>
<li> to_source_code "original_do_list" param renamed to "job_orig_args" (more accurate).
</li>
<li> start_job can now take a job in addition to a job_name for its first arg.</li>
<li> Robot.suspend can now take optional args job_name (string or job instance) and "reason" string arg.
reason is displayed in job button tooltip when job is suspended.
See Ref Man/Robot/Robot Instructions/suspend</li>
<li> New Instruction: Robot.unsuspend. takes Job_name of job to unsuspend.
Compliments Job instance method "unsuspend".
See Ref Man/Robot/Robot Instructions/unsuspend.</li>
<li> New instruction: Human.enter_filepath
See Ref Man/Robot/Human Instructions/enter_filepath</li>
<li> Now the DDE documentation points to all the DDE webinar videos from
the appropriate places.</li>
<li> Human instructions: Changed The label on the "DONE"/Submit button to
"Continue Job" title="Close dialog box and\ncontinue this job"
For the cancel button, changed label to
"Stop Job" add tooltip: title="Close dialog box,\nstop this job and all dependent jobs."</li>
<li> Fix to calibrate math and ui colored center dots from James W.
FindHome button at bottom now is horizontal so takes up less vertical space.</li>
<li> [ ].micron()
Returns a new array.
All numbers in the input array are assumed to be in microns.
Those numbers are converted to meters in the output array
by dividing them by 1 million.</li>
<li> [ ].arcsec()
make_ins("a", 36000, 36000, 36000, 36000, 36000).arcsec()
make_ins("P", 36000, 36000, 36000, 36000, 36000).arcsec()
If the array is an instruction array with an oplet of "a" or "P" then
convert its 5 angles to degrees
else convert all numbers to degrees.
Returns a new array, does not modify the input array.</li>
<li> New function Kin.xyz_to_J_angles_v1() args in v1 format, return value in v1 format
very similar to Kin.xyz_to_J_angles except that
the args are in DDE v1 format, ie microns.</li>
<li> New function Kin.J_angles_to_xyz_v1() args in v1 format.
Return value in v1 format.</li>
<li> New variables:<br/>
Dexter.LINK1_v1 = Dexter.LINK1 * 1000000 //in microns<br/>
Dexter.LINK2_v1 = Dexter.LINK2 * 1000000 //in microns<br/>
Dexter.LINK3_v1 = Dexter.LINK3 * 1000000 //in microns<br/>
Dexter.LINK4_v1 = Dexter.LINK4 * 1000000 //in microns<br/>
Dexter.LINK5_v1 = Dexter.LINK5 * 1000000 //in microns<br/></li>
<li> Convert v1 to v2 extended in new doc:<br/>
"Convert v1 to v2 in DDE 2.2.2"
This is now a top level, "special" release notes doc.</li>
</ul>
</details>
<details class="doc_details"><summary>Convert V.1 to V.2 in DDE 2.2.2</summary>
DDE Jobs written in DDE version 1 will likely break in DDE version 2 because
we have changed the default units for:
<ul><li><b>angles</b> from arcseconds to degrees.<br/>
There are 3600 arcseconds in 1 degree.<br/>
Affects instructions:<br/>
<code>Dexter.move_all_joints</code>,<br/>
<code>Dexter.move_all_joints_relative</code>, <br/>
<code>make_ins("a" ...)</code><br/>
<code>make_ins("P" ...)</code><br/>
The <code>Dexter.set_parameter</code> names that contain <code>Boundry</code>
have changed from referring to arcseconds to referring to degrees.</li>
<li><b>lengths</b> from microns to meters.<br/>
There are 1 million microns in a meter.<br/>
Affects instructions:<br/>
<code>Dexter.move_to</code><br/>
<code>Dexter.move_to_relative</code><br/>
<code>Dexter.LINK1</code> thru <code>Dexter.LINK5</code></li>
<li><b>durations</b> from milliseconds to seconds <br/>
There are 1 thousand milliseconds in a second.<br/>
Affects<br/>
<code>Robot.wait_until</code> when passed a number,<br/>
<code>Dexter.sleep</code> instruction<br/>
Job's <code>inter_do_item_dur</code> parameter,<br/>
all of which now expect durations in seconds.<br/>
Note that inter_do_item_dur's default has also changed from 100 milliseocnds
to 10 milliseconds, (now represented as 0.01 seconds)
which should increase job running speed slightly. <br/>
The <code>Dexter.set_parameter</code> names of <code>MaxSpeed</code>, <code>StartSpeed</code>,
<code>Acceleration</code> have also changed into now being "seconds" based.
</li>
</ul>
To convert your Jobs to the new units, search for each of the names
in white above and adjust their arguments accordingly. If you want
to preserve the actual numbers, you can leave them in place but
enter a "conversion suffix" after them using our new Ref Man documented
<a href="#" onclick="open_doc(units_system_help_doc_id)">Units System</a>
<p></p>
<b>A Step by Step Conversion Process</b><br/>
DDE code from v1 to v2:
<ul><li>Search for all "move_all_joints(" and "move_all_joints_relative"<br/>
Add suffix to first arg like so:<br/>
Dexter.move_all_joints([1, 2, 3, 4, 5].arcsec())<br/>
arcsec() makes a copy of the array with the arcseconds
converted to degrees.
Note for calls like<br/>
move_all_joints(1, 2, 3, 4, 5) it's easiest to change them to:
move_all_joints([1, 2, 3, 4, 5].arcsec())
</li>
<li>When the code is READING values out of robot_inst.robot_status
(user code shuld never write robot_status)
most of the values will be angles that must be converted from degrees
into arcseconds. These are
<pre>
"J1_ANGLE", // BASE_POSITION_AT 10
"J1_DELTA", // BASE_POSITION_DELTA 11
"J1_PID_DELTA", // BASE_POSITION_PID_DELTA 12
"J1_FORCE_CALC_ANGLE", // BASE_POSITION_FORCE_DELTA 13
"J1_MEASURED_ANGLE", // actual angle from Dexter 19
for all 5 joints.
</pre>
a la robot_inst.robot_status[Dexter.J1_ANGLE]*_arcsec or
[robot_inst.robot_status[Dexter.J1_ANGLE],
robot_inst.robot_status[Dexter.J2_ANGLE],
robot_inst.robot_status[Dexter.J3_ANGLE],
robot_inst.robot_status[Dexter.J4_ANGLE],
robot_inst.robot_status[Dexter.J5_ANGLE]
].arcsec()
</li>
<li>Add to make_ins("a" ...) a suffix like so:<br/>
make_ins("a" ...).arcsec()</li>
<li>Add to make_ins("P" ...) a suffix like so:<br/>
make_ins("P" ...).arcsec()</li>
<li>Search for all "move_to(" and "move_to_relative("<br/>
Add suffix to first arg like so:<br/>
Dexter.move_to([1, 2, 3].micron() ...)<br/>
micron makes a copy of the array with all numbers
converted from microns to meters.
</li>
<li>Replace Kin.xyz_to_J_angles with Kin.xyz_to_J_angles_v1</li>
<li>Replace Kin.J_angles_to_xyz() with Kin.J_angles_to_xyz_v1()</li>
<li>Convert Dexter.LINK1 to Dexter.LINK1_v1.<br/>
Same for LINK's 2 through 5.</li>
<li>Convert calls like:<br/>
Robot.wait_until(1234) to <br/>
Robot.wait_until(1234*_ms) or <br/>
Robot.wait_until(1.234)
Note that wait_until takes several OTHER types for its
input arg that shouldn't be changed, but if
it has as number, that number should be in seconds.
</li>
<li>Convert calls Dexter.sleep smilarly to wait_until
except that sleep <i>only</i> take a number
of seconds as its one required arg.</li>
<li>In calls to <code>Dexter.set_parameter</code>,
when its first arg is <code>"MaxSpeed"</code>, <code>"StartSpeed"</code> or
<code>"Acceleration"</code>, add a suffix to the second arg like so:<br/>
Dexter.set_parameter("MaxSpeed", 30000 / _nbits_cf)<br/>
or the third arg in:<br/>
make_ins("S", "MaxSpeed", 30000 / _nbits_cf)
</li>
<li>
In calls to <code>Dexter.set_parameter</code>,
when its first arg is <code>"J1BoundryHigh"</code>, <code>"J1BoundryLow"</code>
change the call to be:<br/>
Dexter.set_parameter("J1BoundryHigh", 648000*_arcsec) or<br/>
make_ins("S", "J1BoundryHigh", 648000*_arcsec)
</li>
<li>Calls to Kin.angles_to_direction are now unnecessary.
<pre>
Change:
J5_dir = Kin.angles_to_direction(GripperPossition[2], GripperPossition[3])
movCMD.push(Dexter.move_to(oldPoint.micron(), J5_dir))
To:
J5_dir = [GripperPossition[2], GripperPossition[3]]
movCMD.push(Dexter.move_to(oldPoint.micron(), J5_dir))
</pre>
<li>Change calls to making a new Job that use parameter <code>inter_do_item_dur</code>
like so:<br/>
new Job({inter_do_item_dur*_ms} ...)</li>
</ul>
This process is only for code that originally ran in DDE 1.
Mixing DDE 1 and DDE 2 code is much more complex.<br/>
Numbers to be converted must be converted exactly once.
Converting a number more than once will cause a bug.
Sticking to the above process helps convert numbers exactly once,
but code can be complex so this process is not a guarantee of success.
</details>
<details class="doc_details"><summary>v 2.2.1, Nov 10, 2017</summary>
Highlights: Calibrate dialog improved, generators in Jobs functionality expanded.
<ul><li> User Guide/Configure Dexter/Verify Joint Wiring: fix for the picture no showing up.</li>
<li> Small graphical improvements to Machine Vision "blur" example.</li>
<li> Click help for "for": changed "var" to "let".</li>
<li> Simplified syntax for the First Job generator example.</li>
<li> Major improvements to Calibrate dialog.
See User Guide/Calibrate and tooltips in the Calibrate Dialog.</li>
<li> Improved Ref Man/IO/File Access/choose_save_file and write_file documentation</li>
<li> Generators: extended so that a Job now handles all 4 cases of
generator iterations, ie keep generator alive with or without an instruction to add and
kill generator with or without a final instruction to add.</li>
<li> New last example Job in Jobs/Insert Example/Generators
demonstrating the new generator options.</li>
<li> Fixed bug in defaulting arguments for move_all_joints</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.2.0, Nov 7, 2017</summary>
Highlights: Machine Vision Blob Detection, Testsuite on do_list,
hierarchical do_list improvements, simulator joint angle fix.
<ul><li>Fix for Job.prototype.total_sub_instruction_count improves
hierarchical do_list display and processing.</li>
<li> added_items_count initialized to the length of the do_list in Job.start.
Better for the do_list display of sub-items.</li>
<li>Hierarchical do_list display now has a black border surrounding the item
at the Job's program counter.</li>
<li> Start Job button in Output pane header: Lots of fixes
including select isolated instruction and run it.
See functionality in
User Guide/user Interface/Output Pane/Start Job Button
or just click on the Output Pane header "Output" title.</li>
<li> show_window() with no args now pops up an empty window rather than error.</li>
<li> Inspector:New title "INSPECTing" so that you know "this is the inspector".</li>
<li> Inspector: Changed The refresh circle icon into a button named "Refresh" to make it more obvious.</li>
<li> TestSuite now a start_object and has a method "start" to run an instance of a testsuite.
After an instance is run, it will have properties
known_failures, unknown_failures,
bound to a non-neg integers of the failure count,
and report, a string of HTML about the failures.</li>
<li>New Jobs menu/Insert Example/TestSuite in Job</li>
<li>Improved/added toString for Job, Brain, Human, Serial, Dexter, Duration, Note, Phrase</li>
<li> new Menu item: Insert/Machine Vision/Blob Detector
updated to opencv.js 1.2.1</li>
<li> Documented in Ref Man/Robot/Robot Instructions/Any Start Object
all the start objects including: jobs, notes, phrases, TestSuites
Documented in User Guide/TestSuite that its a start object.</li>
<li> show_window, HTML input elements of type "range" now automatically
have their values passed into the callback function as numbers,
rather than strings of numbers.</li>
<li> Documented how to get a show_window's callback function to be called
as soon as an input element's value is changed.
See Ref Man/Window System/show_window/onchange.
Improved doc for Insert menu/show_window/onchange calls</li>
<li>Bug fix for rendering of Joint 1, changed the sign of the angle.</li>
<li> Music: added Ref Man/IO/Sound/Music with MIDI/Connecting MIDI Apps</li>
<li> New submenu: Insert/Music/ with Help, Phrase Examples, Midi.init().</li>
<li> New documentation section in User Guide/Configure Dexter/Verify Joint Wiring</li>
<li> Fixed a couple bugs in the TestSuite obj_sys_js_fns_on_new_objects2</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.14, Nov 1, 2017</summary>
<ul>
<li> Fixed bug in do_list hierarchy.</li>
<li> Fixed bug in new move Instructions, instance creation</li>
<li> Inspect: changed circle-arrow icon to more obvious "Refresh" button.</li>
<li>Added "INSPECTing" in title to indicate what the "tan" region in output pane is.</li>
<li> Inspect: fixed bug in lookup of stack_position</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.13, Oct 31, 2017</summary>
Highlights: No code or doc changes. Just made this release to
overcome release packaging issues.
</details>
<details class="doc_details"><summary>v 2.1.12, Oct 31, 2017</summary>
Highlights: Fixed backwards go_to bug. dde_version_between, to_source_code
<ul>
<li> <code>verify_dde_version_between</code> renamed to <code>dde_version_between</code>,<br/>
changed 3rd parameter to "action" that can take values "error", "warn", "boolean".<br/>
Fixed bug.<br/>
See Ref Man/Operating System, etc/dde_version_between.</li>
<li> Jobs that are defined but not yet started now have their user_data property inited
to the user_data value in the new constructor, just in case
we want to call to_source_code on unstarted jobs.</li>
<li> to_source_code for Jobs: indenting improved.</li>
<li> Utility fn last now returns undefined instead of null when passed a zero lengthed item.
If passed an unhandled type of arg, it now errors.</li>
<li> to_source_code on a Job that has been run and NOT using orig_do_list prints out
the trailing instruction of make_ins(3, 3, 1509036422423, "g")
but beware that printing jobs that have been run, with orig_do_list=false
will print both a move_all_joints and a make_inst("a")
for a job with just 1 do_list item of move_all_joints in its def.</li>
<li> new to_source_code methods for: Robot.grab_robot_status, Human.task, Human.enter_choice</li>
<li> Robot.grab_robot_status instruction now has a default for the
first arg (user data var) of "grabbed_robot_status".</li>
<li> bug fixed in inserting instructions into do list that was not properly updating
the hierarchical added_items_count array.
This caused some instructions to be skipped when a <code>Robot.go_to</code>
backwards instruction was executed.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.11, Oct 27, 2017</summary>
Highlights: exTeach bug fixes
<ul><li>ezTeach fixed runtime bugs</li>
<li>improved exTeach dialog box</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.10, Oct 26, 2017</summary>
Highlights: socket timeout bug fix. FindHome, ezTeach
<ul><li>dde_version_between documentation: Added an example call and return value
to the Ref Man doc.</li>
<li>Improvements to <code>to_source_code</code> including commas between elements
in Jobs and literal objects.</li>
<li>Changed default_default_dexter_port from a string "50000" to an integer: 50000</li>
<li>Auto-re-init for Dexter socket that has timed out.
This tries several times to connect at increasing durations between tries.
If it can't connect after 4 tries lasting up to a second, the
job errors.</li>
<li>ezTeach now available from the Insert menu/ezTeach
which scrolls to the new User Guide section: "ezTeach".</li>
<li>FindHome is a new button on the Calibrate dialog box.
It is also a new top level section in the User Guide.
Clicking on its button in the Calibrate dialog
defines the FindHome job and scrolls
the doc pane to the FindHome section.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.9, Oct 25, 2017</summary>
Highlights: to_source_code implemented but not complete.
dde version checking code improved plus new
function dde_version_between
<ul><li> Doc for objectPath extended. See Ref Man/Object System/New Object System Methods/objectPath</li>
<li> The "last" function has been extended to work on NodeList and HTMLCollection</li>
<li><code>out</code> function now takes another arg: "code" controls formatting of the output as rendered HTML or code.
Default null gets its real value (true or false) from the new checkbox named "Code" in the
Output pane. The label for the "Save on Eval" checkbox has been reduced to "Save"
to make room for this new checkbox.
Just like simulate, the value of this checkbox is persistent.</li>
<li> option click now selects more expressions such as function calls (when you click on the function name)
and variable declarations (when you click on let and var)
Edit menu item changed from "Select call" to "Select expr".</li>
<li> <code>inspect</code> doc improved slightly. Now click help gives you a link to the doc on it in the User Guide.</li>
<li> <code>Duration</code> class simplified: defaults for all 4 arguments is now 0.
Passing just the first argument gives you hours, not milliseconds.
To pass only milliseconds, example: new Duration(0, 0, 0, 123) for 123 ms.
new Duration instance method: to_seconds()
See Ref Man/Units Systems/Duration.</li>
<li> Fixed bug for generator instructions that wasn't utilizing all the "generated" instructions.</li>
<li> Slight improvement to Generator Job Example 4b and Job Example 4c, the job definitions.</li>
<li> Jobs menu/Insert Example/ added new item:
Robot.go_to with several jobs using the Robot.go_to instruction</li>
<li> dde_version_equal, dde_version_less_than dde_version_more_than renamed to not start with "dde_".
doc and click_help improved.</li>
<li> New function: <code>dde_version_between("1.2.3", null, warn=false)</code>
If the current version is NOT 1.2.3, then
if first arg is null, the default, dde version must be before the 2nd arg.
If 2nd arg is null, the default dde version must be after the first arg.
If both are null ??? maybe just error.
if 3rd arg (warn) is false (the default) then error if dde_version is not between first and 2nd arg (inclusive)
else if warn is true, just print out a warning message.
This is kind of a "declaration" at the top of a dde src file.
See Ref Man/Operating System,etc. dde_version_between</li>
<li> New global var <code>loading_file</code> bound to the path of the loading file.
See Ref Man/IO/File Access/loading_file.
This is used to print error messages indicating errors in loading files,
but may be useful for users loading special files.</li>
<li> Click help printing of values of variables improved.</li>
<li> Extended <code>Human.enter_choice</code> doc with an example of Yes & No buttons returning true or false.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.8, Oct 10, 2017</summary>
Highlights: Improvements to newObject.sourceCode().<br/>
Many minor improvements to show_window.<br/>
New Learn JS submenu: User Interaction.
<ul><li> newObject sourceCode method: fixed and extended.
See Ref Man/Object System/New Object System Methods/sourceCode</li>
<li> Updated newObject.sourceCode test suite</li>
<li> New LearnJS submenu "User Interaction" containing insertions for:
<ul><li>alert</li>
<li>confirm</li>
<li>prompt</li>
</ul>
</li>
<li> show_window example "many inputs" now calls "inspect" instead of "out"
so you can see ALL the passed in values.</li>
<li> show_window examples: Now commented at the top to say what example it is
so that the inserted src corresponds to the menu item you chose.</li>
<li> Insert menu/show_window/Build Window
Moved the 2 windows so they don't overlap.
Previous versions of the window being built are now closed when
the most recent change is made.</li>
<li> show_window documentation now documents:
<ul><li>is_modal</li>
<li>show_close_button</li>
<li>show_collapse_button</li>
<li>trim_strings</li>
<li>background_color</li>
</ul>
</li>
<li>show_window Insert menu/onchange call: improved the callback to show the name
of the widget and its new value.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.6, Oct 6, 2017</summary>
Highlights: WARNING: Bug fix in Kin may break existing code.
<ul><li>Kin.forward_kinematics() and Kin.J_angles_to_xyz()
no longer return a negative value for the first joint.
</li>
<li>Fixed string length computation in inspector for strings that have newlines in them.</li>
<li>Default titles for Human.enter_choice, Human.enter_number and Human,enter_text fixed to
reflect the type of data to be entered.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.5, Oct 5, 2017</summary>
Highlights: Fixed Eval button bug.
<ul><li>Fixed bug in clicking the eval button with no selection. It now
properly evals the whole buffer like it use to.</li>
<li>Removed annoying beeps from test suite.
Runs test suite much faster, esp on WindowsOS.</li>
<li>Made Open File dialog, Save As dialog and choose_file function dialogs
be "modal", ie clicking outside the popped up dialog does nothing.
This fixes some bad user interface conditions, esp on WindowsOS.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.4, Oct 3, 2017</summary>
Highlights: Improvements to Coor(dinate) system.
Extensions to Music.
<ul><li>Coor updated with bug fixes and new functions
<ul><li> Coor.move_points_to_coor() now accepts just one point
(instead of list of points) and ref coor now functional</li>
<li>Coor.move_vector_to_coor() function added</li>
<li>Coor.get_xy_plane_direction() function added</li>
<li>Coor.get_xz_plane_direction() function added</li>
<li>Coor.get_yz_plane_direction() function added</li>
</ul>
</li>
<li>Fixed Eval&Start error handling.</li>
<li>Eval&Start now will use the whole editor buffer if there's no selection.</li>
<li>Now Job.start returns the job instance just like Note and Phrase start.</li>
<li>hdrobotic.com software page fixed to reduce scrolling.</li>
<li>The two calibrate Jobs now have show_instructions: false (to increase running speed).</li>
<li>Jobs menu Examples Simplest changed to call Dexter.move_all_joints.</li>
<li>Updated several Job examples to use port 50000 and use new units system.</li>
<li>New menu item Insert menu/Debugging Etc/"debugger" for the "debugger" instruction
on a do_list. Added doc on "debugger" in Ref Man/Robots/Robot instructions/"debugger"</li>
<li> Many syntactic bugs fixed throughout documentation.</li>
<li>Fixed bug with getting selection from Doc pane.</li>
<li>new music methods for Note and Phrase: filter, time_interval, repeat, arpeggio, pattern.
See Ref Man/IO/Sound/Music with MIDI/</li>
<li>Music examples now insertable via Insert menu/Examples/Music/Note & Phrase</li>
<li>Fixed: diatonic_transpose</li>
<li>New Series' for Note and for Phrase</li>
<li>Updated URL for OpenCV "Cheat Sheet" in Ref Man Machine Vision section.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.3, Sep 26, 2017</summary>
Highlights: DXF drawing improvements.
New instructions Dexter.pid_move_all_joints, Dexter.pid_move_to.
<ul>
<li>New Instructions: <code>Dexter.pid_move_all_joints</code>,
<code>Dexter.pid_move_to</code></li>
<li> <code>beep</code>: the "duration" argument has been respelled to "dur",
conforming with Note, Phrase, and other places.
Because beep takes its arguments as keywords, this is an incompatibility.</li>
<li> Fixed history recording of Find button for first history item.</li>
<li> When you initialized a job's user data to a var with an array or lit obj
as its data, then when restarting a job, it used to
keep the content of whatever was pushed into that array when
the job was restarted. Now it initializes the user-data var's value of
an array to a copy of its original self.</li>
<li>DXF J5 direction bug fixed</li>
<li> Default value (functions) for DXF.init_drawing and Dexter.draw_dxf
for action_on_function and action_off_function
now uses Dexter.dummy_move in place of dummy_move.</li>
<li> <code>DXF.init_drawing</code> and Robot.draw_dxf now can take an array of points to be drawn for their
dxf_filepath argument. See User Guide/ Drawing with DXF/DXF.init_drawing/dxf_filepath</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.1, Sep 22, 2017</summary>
Highlights: Small fixes for DXF drawing.
<ul>
<li> Date on About for 2.1.0 fixed from Sep 3 to Sep 21</li>
<li> Doc in Ref Man Dexter.draw_dxf Job examples 2 and 3
code fixed from Robot.draw_dxf to Dexter.draw_dxf</li>
<li> Fixed Ref Man Dexter.draw_dxf default value for three_J_angles.</li>
<li> new instruction Dexter.dummy_move takes no args. Used in DXF.init_drawing.
It reads the robot_status and moves the robot to that location.</li>
<li> Fixed "dur" for start_object. Added example in Ref Manof using "dur"
in a start object.</li>
<li> User Guide DX.Finit_drawing added documentation for params:
<ul><li> tool_action</li>
<li> tool_action_on_function</li>
<li> tool_action_off_function</li>
</ul>
</li>
<li> Fixed display of shortcut key in DDE menus on WindowsOS.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.1.0, Sep 21, 2017</summary>
Highlights: New subsystems of Drawing with Dexter and Music with MIDI.
New kind of instruction: start_object.
New Articles: "A Mental Model of Memory" and "The Language of Music"
<ul>
<li> Improved formatting of Ref Man Human.enter_choice examples</li>
<li> Added Help menu item to Insert/show_window menu</li>
<li> Added Help menu item to Insert/Machine Vision menu</li>
<li> Now there's click help for "cv", the global var accessing OpenCV.</li>
<li> Click_help for "for": replaced "var i" with "let i"</li>
<li> Now Find window prev and next buttons also include Find string searches.</li>
<li> Human.notify ref man doc: improved first example formatting.</li>
<li> Fixed bug that disabled all shortcut keys and "operating_system" name.</li>
<li> minimum saved DDE window width now is 60 instead of 20.</li>
<li> Fixed bug in windowsOS for minimized DDE window that caused
the x and y location of the window to be saved to an invisible negative integer,
making a launched DDE invisible.
If you have this problem, with DDE closed, edit dde_apps/dde_persistent.json
file to give dde_window_width & dde_window_height values of several hundred,
and dde_window_y & dde_window_x positive values.</li>
<li> Fixed Linux .desktop file requirements.</li>
<li> Added functions dde_version_equal, dde_version_less_than, dde_version_more_than.
Docmentation along with dde_version under: Ref Man/operating_system, etc.
These functions compare strings like "2.0.9" and 2.0.12" to yield the right answer.</li>
<li> Learn JS "for" examples: changed "var" to "let"</li>
<li> Insert menu/Machine Vision/ new examples in menu items:
"in_range B&W" for super high contrast feature detection.
"Blur" for making a blurry image.</li>
<li> Support for playing musical notes and phrases with Midi
and constructing higher level sequences of notes.
<ul><li>Documentation in Ref Man/IO/Sound/Music with Midi</li>
<li>Article in Doc pane: "The Language of Music"
about the benefits of language design using the example of music.
</li>
<li> Insert Menu/Sound has new item "Midi.init()"</li>
<li> new Eval&Start button will evaluate JS source code that
creates a note or phrase and immediately play it.</li>
<li> Notes and Phrases can put put directly on a Job's do_list
and will play when that "instruction" is run.</li>
</ul>
</li>
<li> Replaced Tests menu item "Find Test Suites" with similar functionality added to the
existing functionality of the doc pane Find button.
Now when you click find, it gets the selection
(from more places than the old places).
and displays found tests in the Output pane.</li>
<li> Now when you make a selection in a temporary output region,
you do NOT get click help on it, rather, the text you selected
stays selected and you can now use in in a Find or Eval operation,
or copy and paste it.</li>
<li> Minor fixes to "How to Think Like a Computer"
along with a deeper explanation of how calling a function works and
tweaks to the code examples.</li>
<li> Ref Man/Window System/Mouse Input now documents how to
get the current position of the mouse and capture mouse clicks.</li>
<li> Run instruction dialog now has the word "degrees" in 4 strategic places
and "meters" in 3 places.</li>
<li> Jobs menu/Simulate? menu radio buttons now work when you click on the label
In addition to the circle radio button itself.</li>
<li> Jobs menu/Simulate? tooltip updated.</li>
<li> New menu item Jobs menu/Simulate?/Help taking you to the Ref man section that
describes simulate.</li>
<li> now output pane tells you "Could not connect to Dexter"
when a job attempts to and fails.</li>
<li> robot status dialog: Now displays measured x, y, z,
values in a new bottom row.</li>
<li> New documentation section: Ref Man/Window/System/DDE Window Dimensions</li>
<li> New Article in the doc pane: A Mental Model of Memory which
compliments "How to Think Like a Computer"</li>
<li> New Kind of instruction on the do_list: "start object".
Documented under Ref Man/Robot/Robot Instructions/Any Start Object<br/>
Allows, job instances, music notes and phrases,
methods with callbacks to go on the do_list.</li>
<li> New Article: "The Language of Music" about the benefits of
language design using the example of music.</li>
<li> Clicking on a running job's button now flushes its queue.</li>
<li> Fix for redefining a job while its running which
use to cause the error:
"in Dexter Simulation, could not find a job with job_id: 3"
The fix is to kill the old job if it is redefined while running.</li>
<li> Drawing with DXF
<ul><li>New user Guide section: Drawing with DXF</li>
<li>New method: DXF.init_drawing</li>
<li>New instruction: Dexter.draw_dex.</li>
See Ref Man/Robot/Dexter/Dexter Instructions/draw_dxf</li>
</ul>
</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.15, Sep 3, 2017</summary>
Highlights: Video capture & processing example with OpenCV.<br/>
Human.enter_choice greatly extended.<br/>
All Human instructions now have examples.<br/>
Kin.is_in_reach() updated.
<ul>
<li>Fixed the Real time sim checkbox on the Jobs menu.
Now it is checked when you launch DDE, and the simulator tries to
run at the same speed as the robot with that checkbox checked.
verify that "both" simulate ignores the "real time sim".</li>
<li> <code>console.log</code> and "call" click_help now works.</li>
<li> fixed documentation for Job param "show_instructions" method values
to be <code>Job.prototype.show_progress</code> and
<code>Job.prototype.show_progress_and_user_data</code></li>
<li> Improved printout for <code>Job.prototype.show_progress_and_user_data</code></li>
<li> Fixed bug in Job.insert_instruction.</li>
<li> <code>Human.enter_choice</code> was not correctly recording the selected value in
user_data when show_choices_as_buttons: true. Fixed.</li>
<li> Human.enter_choice was not correctly recording the selected value in
user_data when show_choices_as_buttons: true. Fixed.</li>
<li> Human.enter_choice has powerful new features and documentation to match in
Ref Man/Robot/Human/Human Instructions/enter_choice.</li>
<li> <code>Human.enter_instruction</code> changed default angles to 0,0,0,0,0</li>
<li> <code>Human.enter_choice</code> was not correctly recording the selected value in
user_data when show_choices_as_buttons: true. Fixed.</li>
<li> The Human.enter instructions now have a new param: "add_stop_button: true"
Behavior without using this button is the same, but you can now "turn off"
the display of a stop button.</li>
<li> Fixed bugs in <code>Human.enter_instruction</code> with initializing the selected instruction.</li>
<li> All Human.enter instructions now have code examples in their Ref Man doc
including: task, choice, number, text, instruction, notify.</li>
<li> Doc pane header now has "back" & "forward" buttons ("<" and ">").</li>
<li> In doc pane, if there is no selection and no text in the find input,
the colored sections are removed and the find pane is collapsed.</li>
<li> More intra-Ref-Man clickble links esp for Robot.go_to,
and uman.task references.</li>
<li> <code>Kin.is_in_reach()</code> has been updated.</li>
<li> New keyboard shortcut: Crtl n for "new file" in the editor.</li>
<li> Clean up of keystroke shortcuts and their menu item labels.
Now both labels and actual keybindings are properly OS-specific (MacOS vs WindowsOS)</li>
<li> "b" is no longer a valid oplet for Dexter instructions.</li>
<li> New menu: Insert/Machine Vision/
now contains "Convert to B&W" (from the previous version of DDE, but
with a larger window size to accommodate bigger pictures)<br/>
and a new item: "Process Webcam" which displays the video from
a laptop webcam, let's you take a snapshot, then processes
the image into two different formats.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.14, Aug 30, 2017</summary>
Highlights: OpenCV integrated into DDE. Article: "How to Think Like a Computer".
Extended Debugging Documentation. Inspector improvements. Run instruction improvements.
<ul><li>Fixed bug with not getting the selection when clicking the Eval button.</li>
<li> New function <code>clear_output()</code>
clears output pane. See doc Ref Man/Window System/Window Utilities/clear_output</li>
<li> Inspector
<ul><li>New function <code>inspect(item)</code> lets you programmatically inspect data.</li>
<li>Ungrayed-out the "refresh" button.</li>
<li>Now supports JS Typed Arrays.</li>
<li>Now handles long arrays and objects interactively.</li>
<li>Fix for literal objects with first prop val of a function. (formattimg)</li>
</ul>
</li>
<li> New documentation section: User Guide/Debugging/Print Statements,
includes console.log, out, Robot.out, Job's show_instructions param,
inspect, clear_output.</li>
<li> Updated 2 cases of example calls to <code>beep</code> durations from ms to seconds.</li>
<li> DDE window's width and height now have minimum saved values of 20
to prevent relaunching DDE and having the window be invisible.</li>
<li> New Article in the doc pane: "How to Think Like a Computer"</li>
<li> New Series "global js functions", provides click help for "eval", "parseFloat"
and several more top level JS functions.</li>
<li> Improved <code>wait_until</code> reason text.</li>
<li><code>show_page</code> options argument now properly default the options of
x, y, width, and height.</li>
<li>Fixed calibrate menu item doc.</li>
<li>Fixed web help for: function, this, push (and other Array methods), String methods,
Math, Number constants, JSON (stringify and parse), apply.</li>
<li> Updated: <br/><code>Dexter.J4_ANGLE_MAX = 130</code>
<br/><code>Dexter.J4_ANGLE_MIN = -130</code></li>
<li> Run instruction
<ul><li> Dialog box: changed the default mode from "set_keep_position" to
to "set_open_loop".</li>
<li> Dialog box: If you select a new mode, then choose the "Job",
that mode change instruction now appears just once in the created Job's do_list.</li>
<li> Dialog box: Added tooltip to the mode change select menu
and improved its label.</li>
<li> Menu items: HOME_ANGLES, NEUTRAL_ANGLES, PARKED_ANGLES and "selection"
now all first set Dexter's default speed to 25 (degrees per second)
before the move.</li>
</ul>
</li>
<li> <code>show_window</code> with content of<br/>
<code>&lt;input type=file".../&gt;</code><br/>
now has a "value" of
the full path of the chosen file,
not just the "name" (sans folder) part of the path.</li>
<li> OpenCV is now integrated into DDE.
See Ref Man/Window System/Machine Vision with OpenCV.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.13, Aug 23, 2017</summary>
Highlights: show_page
<ul><li> <code>beep</code> fixed durations from ms to seconds in the examples.</li>
<li> Fixed test suite obj_sys_source_code item 5.</li>
<li> Fixed Sim pane Dexter videos, Dexter Photo.
<li><show_web_page renamed to <code>show_page</code> and now works.
It is now documented in Ref Man/Window/show_page</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.12, Aug 22, 2017</summary>
Highlights: UI Tweaks and minor bug fixes.
<ul><li> Spurious printout of matrix from Kinematics code removed.</li>
<li> Extended the user Guide/Help System to include the Inspector and URL to the
Webinar videos.</li>
<li> Inspector refresh icon now has a "refresh" tooltip.</li>
<li> Inspector forward and back arrows are grayed-out when inapplicable.</li>
<li> Inspector the "hand" cursor shows when hovering over a clickable item.</li>
<li> Now running all test suites does not reset the DDE window color scheme to its default.</li>
<li> Now choosing Save or using the keystroke to save a file prints into the
output pane: "Saved: foo.js"</li>
<li> Cmd/ctrl-o now "opens" the file chooser, same as picking File Menu item: Open.</li>
<li> When running a job with simulate=true, the output pane does not say
that it has connected to a socket.</li>
<li> Job Example 3, renamed the job to "j3",
improved sleep to sleep for 2 seconds.</li>
<li> Fixed bug with Jobs menu/real time sim checkbox.</li>
<li> Improved test suite error reporting format.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.11, Aug 18, 2017</summary>
Highlights: New Inspector, robot status includes Joint measured angles,
Job init param: show_instructions extended.
<ul><li> Added: Dexter.J1_MEASURED_ANGLE constants, thru J5
robot_status now contains MEASURED_ANGLES for each of the 5 joints in
addition to the ANGLES (where the joints were *told* to go).
New row in the dialog produced by Jobs menu/show_robot_status
shows you the measured angles.</li>
<li> when attempting a socket connection to Dexter, a message is printed in the output pane.
when the connection is successful, another message is printed.</li>
<li> Robot.out instruction extended to have the same 3rd arg as "out", ie "temp".
Documented, and links between Robot.out and out added to the ref man doc for each.</li>
<li> fixed bug in the simulator not updating robot status angles to degrees.</li>
<li> The Job init parameter of <code>show_instructions</code> can now accept
a method as the value to be called at the start of the running of each instruction.
See doc Ref Man/Job/new Job parameters. Includes doc on how to show user data</li>
<li> option click on /*, */ or // selects whole comment.</li>
<li> while loading init file, if there's an error, a better error message is output.</li>
<li> Improved the initialization of the file dde_init.js</li>
<li> _arcsec and the other units conversion constants: disabled editor warnings.</li>
<li> new data Inspector used for Eval results.</li>
<li> when a job completes, rather than print out lots of stuff like it use to,
now an INSPECT button is added to the progress bar in the output pane.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.10, Aug 11, 2017</summary>
Highlights: Behind the scenes bug fixes.
<ul><li> Fixed rounding bug in <code>Robot.move_to</code> and <code>Robot.move_to_relative</code></li>
<li> Extended Browser VS DDE to contain the full name "Dexter Development Environment"</li>
<li> <code>Robot.start</code> now always inits its Socket and sets processing_flush to false.</li>
<li> Now the Job init param of <code>show_instructions</code> turns on or off
the display of the progress bar while the Job is running.
Default is true.</li>
<li> Now the DDE window position is preserved across launching DDE (along with
its size).</li>
<li> Now when a job runs a <code>Robot.stop_job</code> instruction, that's considered to be
a normal completion, not an error or interruption.</li>
<li> Improvements to Kinematics math.</li>
<li> The robot_status returned from Dexter now has its arcseconds converted to degrees,
and related changes for our new Units system.</li>
<li> Improved the error message on "no dde_apps" folder upon DDE startup.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.9, Aug 3, 2017</summary>
Highlights: Improvements to Calibrate Dexter (on the Jobs menu).
New instruction: Human.show_window
<ul><li><code>show_window</code>
<ul><li>Fixes to show_window callback functions.
<li>Fixes to show_window examples.
<li>Extensions to show_window documentation.
</ul>
</li>
<li> New instruction: <code>Human.show_window</code>
very similar to the show_window function
but acts like a Human instruction by pausing the job. Useful
for entering multiple values in one dialog.
Lots of doc in<br/>
Ref Man/Robot/Human/show_instruction.</li>
<li> Moved menu bar Insert/Build Application to Insert/show_window/Build Window.</li>
<li> Extended all the human instructions to set the status of
"waiting" and a wait_reason
of "waiting for Human.enter_*".</li>
<li> Extended sync_point to declare that a job is waiting if its waiting for
a sync point, with proper yellow coloring of the waiting Job's button.</li>
<li> In the editor, Ctrl/cmd-s now saves the current file.</li>
<li> Reduced startup display of spurious content.</li>
<li> Runnng a job with a function that errors now terminates the Job properly.</li>
<li>Now when you relaunch DDE, the window is the same size as it was the last time
you resized it.</li>
<li> Improvements to calibrate including the data for calibrate_optical_sensors
is now saved automatically (for windows OS only).</li>
<li> Fix to click help for oplets in printing the function name associated
with the oplet.</li>
<li> Removed menu bar Insert/Train Dexter (obsolete).</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.8, Jul 29, 2017 private</summary>
Highlights: Improvements for Calibrate & other minor but important details
<ul><li> The "?" help icon in the Doc pane header made bigger and bolder for easier finding.</li>
<li> Run instruction dialog box menu item moved from selecting
"Jobs menu/Run Instruction" to "Jobs menu/Run Instruction/Show Dialog..."
to make it more obvious.</li>
<li> Caught an error for empty_instruction_queue_now when it can't write to a socket.</li>
<li> Fix for robot_done_with_instruction w.r.t. "a" oplet setting rob.angles.</li>
<li> Fix for Socket.empty_instruction_queue_now attempting to write to a closed socket.</li>
<li> When DDE automatically creates a dde_init.js file, it now adds persistent_set("ROS_URL",...)</li>
<li>Calibrate fixes:
<ul><li> Fixed bug in smlinex with "axis" undefined.</li>
<li> Doc calibrate optical sensor now has: ideal circle should just
fill up whole square, not more, not less.</li>
<li> Calibrate dialog, clicking on Joint 1 fixed.</li>
<li> Calibrate dialog "save" button fix for the path of the file saved to.</li>
<li> Calibrate, witb sim == true, clicking calibrate optical button now
warns you that you must not be simulating to calibrate.</li>
</ul></li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.7, Jul 27, 2017 private</summary>
Highlights: Calibrate dialog and doc improvements.
<ul>
<li>Calibrate dialog: numerous small bug fixes and improvements.</li>
<li>Calibrate dexter doc: numerous improvements.</li>
<li> extended show_window to accept "id" instead of just "name" for identifying checkboxes
and all other input types.</li>
<li> show_window for file chooser widget fixed to not error if no selected file.
Just uses the value of null.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.6, Jul 24, 2017 private</summary>
Highlights: Calibrate Dexter menu item, Job progress bar,
Many extensions to: User Guide/Configure Dexter
<ul><li>Tweaks to Gamepad doc headers: shorter to fit in Doc pane.</li>
<li> <code>out</code> functionality expanded w.r.t. the temp arg.
See the extended doc in Ref Man/IO/out</li>
<li> progress bar now shown in the output pane when a Job is running
with the "last instruction sent" to Dexter or executed.</li>
<li> User Guide and Ref Man instances of "unevalable" respelled to "unEVALable".</li>
<li> Warning message added to Jobs menu/Show Robot Status when no jobs have been run.</li>
<li> Brain and Human robots given an "all_names" field just like Dexter and Serial
example: Brain.all_names returns an array of all Brain robot names.</li>
<li> Now loading DDE is more robust against the last file edited no longer
being available. You get a warning in the Output pane,
but otherwise loading DDE completes.</li>
<li> load_files removed the restriction that "root" file paths have
to end in ".js" to load.</li>
<li> load_files extended to be able to have a path that starts
and ends with a slash and thus becomes an absolute prefix
for subsequent files. Ref Man/IO/File Access/load_files rewritten.</li>
<li> User Guide/Configure Dexter/Data Connection
new section on Mac.</li>
<li> New doc section: User Guide/Configure Dexter/Dexter's File System.</li>
<li> New doc: User Guide/Configure Dexter/Data Connection/On MacOS.</li>
<li> New doc: User Guide/Configure Dexter/Dexter's File System.</li>
<li> New menu item: Test/Calibrate Dexter which
opens a dialog box and scrolls to new doc section:
User Guide/Calibrate Dexter.</li>
<li> Fixed bug in EVAL button not evaling selection of cmd line.</li>
<li> Bug fixed in File menu/Remove not working for non-existent files.</li>
<li> Fixed bug in empty_instruction_queue_now of typo "make_inst"</li>
<li> Moved init_ros from happening always during start up
to the new first menu item on the OPS menu.
Now you must choose that meny item before using ROS.
This eliminates the error in the console upon startup if ROS can't be inited.</li>
<li> Hide the Ops menu until user clicks on the "ROS" radio button.</li>
<li> Renamed "Ops" menu to "ROS".</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.5, Jul 21, 2017 private</summary>
Highlights: Gamepad & keyboard input,
Help system doc,
Configure Dexter Doc,
All User Guide code examples now in test suite just like ref man.
<ul>
<li> Ref Man <code>move_to_straight</code>: The header fixed from
"move_to" to "move_to_straight".</li>
<li> Glossary: added definitions for:<br/>
config<br/>
J5_direction<br/>
position,<br/>
pose</li>
<li> A job now stops if it cannot connect.</li>
<li> <code>move_to</code> now stops its job for 2 more error conditions.</li>
<li> Fixed bug in <code>Robot.wait_until</code> with a number (duration) argument.</li>
<li> Added to Dexter Constant Series:<br/>
"Dexter.NEUTRAL_ANGLE"<br/>
"Dexter.HOME_POSITION"<br/>
"Dexter.NEUTRAL_POSITION"</li>
<li> Stop sign now empties the instruction queue ASAP.</li>
<li> The user_guide code examples are now a TestSuite just like
the code examples in the ref man.</li>
<li> The white-background code examples in the User Guide and
Ref Man that can NOT be evaled or are not part of the TestSuite,
now have tooltips explaining that.</li>
<li> Extended <code>show_window</code> such that if a SELECT tag has
an attribute of data-onchange, and no "name" but an "id",
that it uses the "id" for the "name" as do other inputs
in show_window.</li>
<li> run_instruction dialog: Now when you choose an instruction
from the instruction menu, it defaults the args to
the settings above for:<br/>
move_to<br/>
move_to_relative<br/>
move_to_straight<br/>
move_all_joints<br/>
move_all_joints_relative<br/>
set_parameter</li>
<li> run_instruction dialog, parameter documentation:
long parameter strings are put in a smaller font to show more
of it in the limited space.</li>
<li> http://hdrobotic.com/software/ now has a purple header for "Glossary"
like the other sections.</li>
<li> http://hdrobotic.com/software/ expanded region for showing documentation
now eliminates the redundant vertical scroll bar.</li>
<li> New doc section: User Guide/User Interface/<b>Help System</b>
12 ways to get help.</li>
<li> "?" link in upper right corner of Doc pane header now
scrolls the doc pane to doc on the "Help System".</li>
<li> New File menu item: "Load ..."</li>
<li> Glossary new terms:<br/>
Job<br/>
robot<br/>
do_list<br/>
instruction</li>
<li> Ref Man/IO reorg: new section: "Web" which includes the existing doc for:<br/>
<code>get_page</code><br/>
<code>get_page_async</code><br/>
<code>make_url</code>.</li>
<li> Support for using gamepads and keyboards for real-time control of Dexter
and other processes added.
Extensive documentation in Ref Man/IO/Gamepad & Keyboard
including an example of using a gamepad and/or keyboard for incrementing
Dexter joint angles inside a Job.</li>
<li> Fix to <code>Socket.instruction_array_degrees_to_arcseconds_maybe</code>
that precluded the "ViewEye" calibration process from working.</li>
<li> Updated Job examples, calls to <code>Dexter.sleep</code> to
use time in seconds, not milliseconds.</li>
<li> Updated Job Example 2 for new <code>move_to</code> arguments.</li>
<li> Fixed simulator for processing z oplets.</li>
<li> New Jobs menu/Job Example 2 (simple dexter-moving with
<code>move_all_joints</code>
and <code>move_to</code> instructions.
The subsequent Job examples have had their example numbers incremented.</li>
<li> <code>speak</code> extended to be able to accept any JavaScript data
(except null) as an argument: ie speak(123)
Extended doc in Ref Man/IO/Sound/speak</li>
<li> User Guide new top level section: <b>Configure Dexter</b>
includes power up and data connection instructions.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.4, Jul 8, 2017</summary>
Highlights: load_files can now load file of any extensions.<br/>
New Article: Browser vs. DDE.<br/>
New instruction: Dexter.move_to_straight.<br/>
<ul>
<li>load_files can now load files with any extension or no extension,
not simply ".js" files.</li>
<li> Ref Man make_url & persistent_get examples improved for test suite.</li>
<li> make_ins now warns if passed an invalid instruction_type.</li>
<li> Click help now correctly identifies floating point numbers
as well as integers.</li>
<li> New article: Browser vs. DDE now in doc pane.</li>
<li> Doc pane re-org: now all 4 articles under one twist-down: "Articles".</li>
<li>New instruction: Dexter.move_to_straight
in Instruction series, click help and Ref Man.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.3, Jul 7, 2017 private</summary>
Highlights: run_instruction dialog extensions, Ref Man Examples are now tests.
bug fixes.
<ul><li>run_instruction dialog now has menu for selecting any Robot instruction.
Shows param list of selected instruction.</li>
<li> run_instruction dialog clicking an instruction button or selecting
a new instruction from the instruction menu displays the params
of the instruction and scrolls doc pane to the appropriate section
if doc exists on that instruction.</li>
<li> Now documented in Ref Man and with click help: All 7 temperature conversion
functions. See Ref Man/Units System/</li>
<li> fixed bug in make_url with lack of ampersands between args in the result.</li>
<li> move_to_relative modified to fully use new Kin.J_angles_to_xyz</li>
<li> fixed bug in run_instruction dialog with move_to.</li>
<li> fixed bug in Dexter.move_to with wrong defaulting of args.</li>
<li> kinematics range bug fixed.</li>
<li> jobs now stop when they error.</li>
<li> the FIND algorithm changed. Now searching for "dexter kin"
will find only terms that contain "dexter" followed by a space,
followed by "kin", NOT all instances of "dexter" and all instances of "kin.
This permits more accurate searches.
All are case insensitive.</li>
<li> DDE can now turn the code examples of Ref Man into TestSuite.
This test suite is automatically created and run when you choose:
DDE menu bar/Tests/Run All TestSuites.
It now contains 487 tests, all passing, and helps immensely in keeping
the examples in the Ref Man will be kept up to date with the code.
As part of this project, the expected results of examples now have a pale
green background. About 60 examples and a bunch of underlying code
was fixed in this process.</li>
<li>New help item to top of units series menu that scrolls to Unit System doc.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.2, Jul 2, 2017 private</summary>
<ul>
<li> fixed run_instruction move_to button action.</li>
<li> run_instruction dialog/move_to/J5_direction:
fixed bug in converting xyz to angles.</li>
<li> now there's click_help when you click in the output pane.</li>
</ul>
</details>
<details class="doc_details"><summary>v 2.0.1, Jul 2, 2017 private</summary>
Highlight: Run Instruction dialog extended. Units System documented.
More details of new units system converted.
<ul><li> Eval button now can eval selected text in Output pane, Doc pane and Command input as
well as the editor buffer. If no selection, the whole editor buffer is evaled as usual.
Removed the "Eval Doc" button at the top of the Doc pane.
New mini-tutorial about this under User Guide/Learning JavaScript.</li>
<li> show_window documented how to have a show_window cover the DDE window completely
in Doc pane/Ref Man/Window System/show_window
and comments in DDE Menubar/Insert/show_window/Window Options</li>
<li> show_window, input elements: if they don't have a "name" attribute but
do have an "id" attribute, that id attribute value is used as the input's "name".</li>
<li>show_window: fixed to properly have the value of the file name for
a &lt;input type="file"/&gt; tag. Includes extension, does not include directory.</li>
<li>DDE menu bar/Insert/show_window/many_inputs example extended
to have an example of &lt;input type="file"/&gt;
Fixed and extended the big show_window example in the Ref Man.</li>
<li> choose_file and choose_save_file now documented under
Doc pane/Ref Man/IO/File Access.</li>
<li> Find button can now find documentation on text selected in the command line.
<li> new series "oplet". Click help shows the full instruction name,
which, if documented, you can click on it to see ref man documentation.</li>
<li> reoganization of the Series menu to make all menu items visible on
short screens. Also helps classify series.</li>
<li> instruction_array_degrees_to_arcseconds_maybe fixed ar01 bug to arg0
and the "Boundries" bug</li>
<li> default content for dde_init.js and Ref Man now has the default colors
in the calls for:
<ul><li>set_window_frame_background_color</li>
<li>set_pane_header_background_color</li>
<li>set_menu_background_color</li>
<li>set_button_background_color</li>
</ul>
<li> Dexter.set_parameter documented and
click help now underlines set_parameter help.</li>
<li>fixed click help for empty_instruction_queue_immediately.</li>
<li>Extending Run instruction dialog box:
<ul><li>put min and max on J1 thru J5
<li> put step size of 5 on j1 through j5 (you can still type in a more precise number.</li>
<li> put step size of 0.01 on X, Y, Z (you can still type in a more precise number.)</li>
<li> Set parameter: name: turn into select menu (first make the set params into a series)</li>
<li> show user the source code of a generated instruction.</li>
<li> new "run" button and place to enter an instruction's source code.</li>
<li> If there's a selection anywhere when you choose "run instructions",
it is put in the "source" type in. Use it to run a selected instruction.</li>
<li>now the source type in works like other places of code:
<ul><li>click_help works on it</li>
<li>make a selection and hit Eval button</li>
<li>make a selection and hit Find button</li>
</ul>
</li>
<li>run instruction dialog: added insert and "job" buttons at end of Run typein.
When inserting whole job, the "set_mode" instruction is inserted as well as
the new actual instruction.</li>
<li> move_to J5_direction: has radio button angles, xyz
that toggles between 2 number inputs (for angles) and 3 number inputs (for xyz)</li>
<li>move_to config:
made 3 sets of ratio buttons for lEFT RIGHT, UP DOWN, IN OUT.</li>
</ul>
</li>
<li> inter_do_item_dur now is interpreted as seconds,
not milliseconds like it was previously.</li>
<li> click help on a unit, ie _km tells you what the "base" for units
in that series is ie _m.</li>
<li>Dexter.sleep now takes seconds as its argument and converts
to milliseconds just before sending to Dexter.</li>
<li>new "Convert V.1 to V.2" guide in Release Notes section of the doc pane.</li>
<li>Ref Man new top level section "Units System"</li>
</ul>
</details>
<details class="doc_details"><summary>Convert V.1 to V.2</summary>
DDE Jobs written in DDE version 1 will likely break in DDE version 2 because
we have changed the default units for:
<ul><li><b>angles</b> from arcseconds to degrees <br/>
(3600 times lower value for the same effect).<br/>
Affects instructions: <code>Dexter.move_all_joints</code>,
<code>Dexter.move_all_joints_relative</code>.
The Dexter.set_parameter names that contain <code>Boundry</code>
have changed from referring to arcseconds to referring to degrees.</li>
<li><b>lengths</b> from microns to meters<br/>
(1M times lower value for the same effect).<br/>
Affects instructions: <code>Dexter.move_to</code>,
<code>Dexter.move_to_relative</code>.</li>
<li><b>durations</b> from milliseconds to seconds <br/>
(1K times lower value for the same effect).<br/>
Affects <code>Robot.wait_until</code> when passed a number,
<code>Dexter.sleep</code> instruction,
and Job's <code>inter_do_item_dur</code>,
all of which now expect durations in seconds.<br/>
Note that inter_do_item_dur's default has also changed from 100 milliseocnds
to 10 milliseconds, which should increase job running speed slightly. <br/>
The Dexter.set_parameter names of <code>MaxSpeed</code>, <code>StartSpeed</code>,
<code>Acceleration</code> have also changed into now being "seconds" based.
</li>
</ul>
To convert your Jobs to the new units, search for each of the names
in white above and adjust their arguments accordingly. If you want
to preserve the actual numbers, you can leave them in place but
enter a "conversion suffix" after them using
our new <i>Units System</i> See doc pane/Ref Man/Units System.
</details>
<details class="doc_details"><summary>v 2.0.0, June 27, 2017 private</summary>
Incompatible Changes: We have adopted SI standard units throughout DDE,
meaning that we will use: meters, degrees, kilograms, seconds where feasible.
In particular:<br/>
Angles are now specified in degrees, not arcseconds.
Lengths are specified in meters, not microns.
Durations mostly now specified in seconds, not milliseconds.
We expect these changes will break most jobs, however, its simple to fix them using
our new units system.
<p/>
Highlights: New "units" system to help convert numerical values into SI units.
New top level article in Doc Pane: "Dexter Kinematics".
DDE menu bar/Jobs/Run Instruction is now clickable and pops up a multi-instruction dialog.
Click help now works in Command input (in Output pane header) and code examples in Doc pane.
<ul><li>units system for converting numbers into SI units.
<li>show_window buttons extended to look at name and id before value for
binding the clicked_button_value</li>
<li> ref man now has all JavaScript examples formatted in white for easier identification.</li>
<li> The command input typein now has click help.
Type in something and click within it,
and you'll see the same click help that you see when
you click on that thing in the editor.</li>
<li> The "code" examples in the doc pane (white background)
now have click help.</li>
<li> New top level article in Doc pane: "Dexter Kinematics"</li>
<li> Now the simulator is keeping track of set_parameter (oplet "S") instructions.</li>
<li> Now the simulator is handling and keeping track of write (oplet "w") instructions.</li>
<li> The simulator more faithfully simulates "empty_instruction_queue_immediately"</li>
<li> The previous release added a DDE menu bar menu Jobs/move dexter0.
This has been renamed to Jobs/Run Instruction.
Clicking on "Run Instruction" itself pops up a dialog allowing
you more control over running an instruction on Dexter
including:
<ul>
<li>move_to</li>
<li>move_to_relative</li>
<li>move_all_joints</li>
<li>move_all_joints_relative</li>
<li>empty_instruction_queue_immediate</li>
<li>switching between the 4 Dexter modes</li>
<li>sending instructions to any defined Dexter (not just dexter0)</li>
</ul>
</li>
<li> show_window has been extended to handle onchange events for SELECT tags.</li>
<li> The comment at the top of DDE menubar/Insert/show_window/onchange calls
has been improved. The Ref Man for show_window now has a brief
section for onchange.</li>
<li> move_to and move_to_relative now check for out of range positions
and error if they are passed them.</li>
<li> Before the "move_all_joints" instruction (oplet "a") is sent
to Dexter, its angles in degrees are converted into the arcseconds
that Dexter requires.</li>
<li> The method: <code>Dexter.xyz_invalid</code> has been removed.</li>
<li>Dexter instruction: <code>Dexter.set_keep_position_lock</code>
has been renamed to Dexter.set_open_loop<li>
<li>Many changes for converting DDE to SI units including, but not limited to:
<ul><li>Constants: Dexter.HOME_ANGLES, Dexter.NEURAL_ANGLES Dexter.PARKED_ANGLES converted
from arcsecondss to degrees.</li>
<li>move_to, got rid of its 3 base_* args.</li>
<li>J5_direction can now accept an array of 2 items,
each is in degrees (an angle).
See RefMan/Robots/Dexter/Dexter Instructions/move_to/J5_direction</li>
<li>Making a new Dexter robot has had its 3 base_* params replaced with the
"pose" param.</li>
<li> Dexter.move_to if J5_direction and/or config are passed in as null,
then get their values from the existing angles in the robot.</li>
<li>move_to now errors if passed a J5_direction of <br/>
[90, 90] [-90, -90], [-90 90] or [90, -90]</li>
<li>wait_until no longer accepts a Duration instance as its first arg.
You can still pass it a number, but this number is now
interpreted as seconds, not milliseconds.</li>
<li> beep now takes its duration in seconds, not milliseconds</li>
<li> The constant Dexter.MAX_SPEED now has a value of 30 (was 100)
and is in units "degrees per second" not "arcseconds per millisecond"</li>
<li> New value: Dexter.MAX_SPEED = 30 // degrees per second</li>
<li> New value: Dexter.START_SPEED = .05 // degrees per second</li>
<li> New contant: Dexter.HOME_POSITION = [0, 0.08255, 0.866775] //meters</li>
<li> New contant: Dexter.NEUTRAL_POSITION = [0, 0.5, 0.075], //meters</li>
<li> Before sending S params of :
MaxSpeed, StartSpeed, Acceleration,
there values are converted via: Math.round(MaxSpeed * _nbits_cf)</li>
<li>Before sending S param of: JBoundries,
it is now converted to arcseconds.</li>
<li> All Job examples converted from microns, arcseconds, milliseconds to
meters, degrees, seconds.</li>
<li> Dexter instance variable "xyz" removed.</li>
</ul>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.10, June 23, 2017</summary>
Highlights: New DDE menu bar menu Jobs/move dexter0, prop method extended,
generators extended and documented.
<ul>
<li>Minor fix to rel notes 1.1.9 highlights: now: New Robot.dexter0.prop("prop_name")</li>
<li>"make_ins" is now known to the editor so it won't show a warning red dot.</li>
<li>Fixed typo in ref man example which now reads: Robot.dexter0.prop("LINK1")</li>
<li>fixed bug in Robot.dexter0.prop()</li>
<li> Dexter's prop method has a new parameter: "get_from_dexter"
See Ref Man/Robots/Dexter/Dexter Utilities/prop for details</li>
<li> Updated Dexter constants:
<ul><li>J2_ANGLE_MIN</li>
<li>J2_ANGLE_MAX</li>
<li>J3_ANGLE_MIN</li>
<li>J3_ANGLE_MAX</li>
<li>J4_ANGLE_MIN</li>
<li>J4_ANGLE_MAX</li>
</ul>
</li>
<li>simulation simulates actual duration that
Dexter takes to move between positions.
Fixes in surrounding code.
Some other internal problems with simulation fixed.</li>
<li>When using a JavaScript generator as an instruction,
you can now yield (with no argument) and
it will not quit the generator, but just
do nothing and keep calling the generator
on the next iteration of the running job.
You quit the generator by a "return" statement.</li>
<li> Using JavaScript generators as Job instructions now
documented in Ref Man/Robot/Robot Instructions/Any JS Generator</li>
<li>New DDE menu bar menu Jobs/move dexter0 to
with submenu items:
<ul><li>HOME_ANGLES</li>
<li>NEUTRAL_ANGLES</li>
<li>PARKED_ANGLES</li>
<li>selection</li>
</ul>
</li>
<li> 11 new unit-converting series added for physics computation. <br/>
See Series/Units menu.<br/>
DDE now has 50 series'.
</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.9, June 9, 2017</summary>
Highlights: New simulate archtecture that more closely models Dexter
hardware. New Job param: when_stopped. New instructions:
Dexter.move_all_joints_relative and 4 new Dexter "mode" instructions.
New Robot.dexter0.prop("prop_name")
<ul>
<li>Now when you switch to edit a file that's in the files menu,
then relaunch DDE, the last file you edited will show up in the editor
after you relaunch.</li>
<li> New Reference manual section Object System/Calling Methods</li>
<li> Ref Man documentation for Robot.go_to now has the word
"goto" in it so that users can "find" such a string
if they type in it.</li>
<li> New Dexter instruction Dexter.move_all_joints_relevative takes same params as move_all_joints
angles default to 0. See Ref Man/Robots/Dexter/Dexter utilities/prop</li>
<li>Dexter.move_all_joints, Dexter.move_to and
Dexter.move_to_relative now properly stores the angles
it causes Dexter to move to.</li>
<li> Cleaned up Dexter.move_all_joints for defaulting values.</li>
<li>Dexter.move_to now errors if told to move out of range.</li>
<li>Dexter.move_to_relative: fixed bugs and documented in the ref man.</li>
<li>improved the program_counter argument of Job.start to
be able to accept an instuction location of a job
that is the same as the job being started, rather than
only NO JOB.</li>
<li>New <code>new Job</code> parameter of 'when_stopped', permitting
a job to loop, have a callback, or wait for an instruction.
See Ref Man/Job/new Job Parameters and
DDE menu item: Jobs/Insert Example/when_stopped.</li>
<li>Now when a job is waiting for "new_instruction",
its button is colored yellow.</li>
<li>New Dexter instructions to set Dexter in a "mode":
<ul><li>Dexter.set_follow_me</li>
<li>Dexter.set_force_protect</li>
<li>Dexter.set_keep_position</li>
<li>Dexter.set_open_loop</li>
</ul>
New Ref Man Section: Dexter Instructions/Dexter Modes/
that documents each. Click help supported.
</li>
<li> New support for drawing characters. Not yet documented.</li>
<li> New series: "Dexter Utility" now on the series menu,
with click help for all the methods in the Dexter Utilities
section of the Ref Man.</li>
<li> Kin.J_angles_to_config fixed</li>
<li> Adjusted Jobs/Insert Example/2 microns to not error.</li>
<li> Extended User Guide with info on "Common JS Errors".</li>
<li>Robot.stop_job now takes a 3rd arg:
perform_when_stopped (default false )
See Ref Man/Job/new Job parameters/when_stopped and
DDE menu bar/Jobs/Insert Example/10. when_stopped</li>
<li> New simulation architecture that more closely models
Dexter hardware by being more independent of DDE processing.
This was necessary to support new Jobs param: when_stopped.</li>
<li>Ref man for show_window callback param extended to say that
returned values will be ignored.</li>
<li> DDE menu bar/Jobs/Insert Example/Multiple Jobs respelled to "Sync Jobs"</li>
<li> New constants:
<ul><li>Dexter.MAX_SPEED = 100 //arcseconds per milliseconds</li>
<li>Dexter.START_SPEED = 0.5 //arcseconds per milliseconds</li>
<li>Dexter.ACCELERATION = 1 //arcseconds^2 per millisecond</li>
</ul></li>
<li>added constant: Dexter.NEUTRAL_ANGLES
where there's lots of room to move from this position.
<li> New value for Dexter.PARKED_ANGLES that doesn't error: [0, 0, 486000, 162000, 0 ]</li>
<li> New method: dexter0.prop. sophisticated lookup of properties on Dexter.
See Ref Man/Robots/Dexter/Dexster Utilities/prop.</li>
<li> New series "job_method" includes Job.insert_instruction and j1.start
Now has click help and doc in ref man. See DDE menu bar/Series/Job/job method</li>
<li> Speed improvement for testing if a source code string is a date.</li>
<li> Dexter.sleep: fixed bug with duration being off by a factor of a million.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.8, May 19, 2017</summary>
Highlights: New Robot simulation options "both" (experimental) and null.
Bug fixes to simulate, send_to_job, serial port
<ul>
<li> serial port error message fixes.</li>
<li> fixed bug in running serial jobs that accidentally skipped the
first instruction of the job.</li>
<li>fixed bug in grab_robot_status and its documentation.</li>
<li>fixed bug in that explicitly declaring new Dexter({simulate:false}),
DDE still used the value of the Jobs menu "Simulate?" item.</li>
<li><code>robot.simulate</code> now has 2 more options.
In addition to true and false, we now have <code>"both"</code> and <code>null</code>.
"both" means it does both simulate and "real" simultaneously.
but note, these are not perfectly in sync.
<code>null</code> means: get the value for robot.simulate from
the Jobs menu item "Simulate?" which
is persistent across DDE launches.
See new doc in Ref Man, "new Dexter parameters" under "simulate".
<p/>
The Dexter init param: <code>simulate_from</code> is no longer used.
Please search for and remove uses of it if you have any.
</li>
<li> Job Examples updated:
<ul><li>Jobs/Example 0 (brand new), simplest, just a 1 instruction job with no doc.</li>
<li>Jobs/Example 1 with new simulate architecture.</li>
<li>Jobs/Example 4a updated</li>
<li>Jobs/Example 4c by fixing bug in Job initialization.</li>
<li>Jobs/Example 4d Updated to take advantage of <code>Job.start</code>'s initial_instruction param.</li>
<li>Jobs/Example 9 fixed typo in serial port.</li>
</ul>
</li>
<li>Fixed <code>send_to_job</code>, 2 bugs: the setting of user_data via functions passed into the instruction,
and a bug with sending to a job that has yet to be started.
New documentation in the Ref Man under send_to_job, start param
explains the behavior of inserting into an as-yet unstarted job.</li>
<li> <code>Dexter.move_to_relative</code> fixed default value from [ ] to [0,0,0]</li>
<li> <code>prompt()</code> now doesn't display "undefined" if you don't give it a title for the
first arg.</li>
<li> editor font_size (set from the widget in DDE Editor pane header)
is now persistent accross DDE launches.</li>
<li>Now clicking the stop sign doesn't change the color of the button
for jobs that have been defined but never run.</li>
<li>hdrobotic.com DDE documentation display:
<ul>
<li>Increased the width of DDE documentation.</li>
<li>Removed the redundant title of "DDE".</li>
</ul>
</li>
</details>
<details class="doc_details"><summary>v 1.1.7, May 3, 2017</summary>
Highlights: Lots of UI tweaks. file system fix.
<ul>
<li> Added indenting to "loading persistent" output message.</li>
<li> File menu new item: "Remove"<br/>
Tooltip: "Remove the edited file from the file list and editor.<br/>
Does not delete the file from disk."</li>
<li> Moved ros url setting to be later in initialization
to take account of dde_init.js setting.</li>
<li> Removed big DDE title bar. Now just the little "os" title bar.</li>
<li> New blue color scheme.</li>
<li> Renamed "JavaScript" pane to "Editor" pane
(shorter, more functional description, more compatible with
future features)</li>
<li> Editor pane header: files menu now in upper right of header.
Names of files that are in dde_apps have the folder before
dde_apps removed so the last part of the name will fit
in the too-narrow menu.
Tooltip on the menu shows you the full file path.</li>
<li> Made files outside of dde_apps accessable.</li>
<li> Better stop button image. There's a "pressed" indicator.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.5, Apr 30, 2017</summary>
Highlights: Fixed bug in load_files, improved doc and DDE launch print outs.
<ul><li>overview paper
<ul><li>Minor editing improvements</li>
<li>Simplified the embedded HTML</li>
<li>Made img urls work for both DDE and website.</li>
</ul></li>
<li> Dexter.get_robot_status Ref Man entry extended with examples.</li>
<li> Updated Robot.grab_user_status examples.</li>
<li> New doc section: Ref Man/Robots/Robot Instructions/Any JS Code/</li>
<li> When DDE launches, now printed in the output pane:
<pre>
Now Loading /Users/Fry/Documents/dde_apps/dde_init.js
Done Loading /Users/Fry/Documents/dde_apps/dde_init.js</pre></li>
<li> Fix to load_files when loading paths not starting with slash.
Fixes a problem with loading dde_init.js</li>
<li> Better printouts and initialization when loading dde_persistent.json</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.2, Apr 22, 2017</summary>
<ul><li> New Insert menu item "Color".</li>
<li> New functions to modify DDE colors.
<ul><li><code>set_window_frame_background_color</code></li>
<li><code>set_pane_header_background_color</code></li>
<li><code>set_menu_background_color</code></li>
<li><code>set_button_background_color</code></li>
</ul>
These are commented out but inserted into the default
dde_init.js file. To get the default dde_init.js file,
rename your existing dde_init.js and boot dde.
Documented under Reference Manual/Window System/Set DDE Colors
Each function has click help.
</li>
<li> <code>load_files</code>, new way to set the default folder.
See new doc in Ref Man/IO/File Access/load_files.
</li>
<li> <code>recognize_speech</code> now working.</li>
<li> DDE documentation prepared for our website.</li>
<li> Insert/Examples/Nat Lang Reason updated.</li>
<li> Errors in test suites for Math fixed.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.1.0, Apr 18, 2017</summary>
Highlights: New Jobs bar for controlling Jobs. Bug fixes and UI tweaks.
<ul>
<li> <code>Robot.move_to_relative</code> fixed. Now storing robot.angles.</li>
<li> Doc pane: "Overview", "User Guide", "Known Issues"
are now top level items. New styling.</li>
<li> Make Dictionary under the Insert/Examples menu extended.</li>
<li> Make Dictionary, the help dialog enlarged to accommodate Windows scroll bar.</li>
<li> When a file can't be loaded due to security restrictions,
an error message now displayed in
the Output pane, rather than just the Dev Tools console.</li>
<li> Test menu item "Selection to test":
now the selection has whitespaced trimed before using it.</li>
<li> Fixed bug in <code>Robot.wait_until</code> duration where restarting a job a 2nd time
didn't wait as it should.</li>
<li> Fixed bug in <code>Robot.stop_job</code></li>
<li> New "Jobs bar" under Output Pane header.
<ul>
<li> Start Job moved from menu item to Jobs Bar button.</li>
<li> Start Job Help now accessible by clicking on "Output" pane title.</li>
<li> Clear Stopped Jobs now accessible by Jobs bar "Undef" button.</li>
<li> Jobs bar contains a button for each defined job.
The button changes color, functionality,
and tooltip, reflecting the status of the job.</li>
</ul>
<li> pane header background color changed from orange to brown.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.0.13, Apr 14, 2017</summary>
Highlights: fix for file protection, first cut of new move_to_relative.
<ul>
<li> New Insert menu item: "Examples" now contains
"make dictionary" and "Nat Lang Reason".</li>
<li> <code>persistent_save</code> documented in ref-man.</li>
<li> <code>persistent_remove</code> fixed bug.</li>
<li> The "Configuration" section of the DDE User Guide has been updated.</li>
<li> improved "out of reach" error messages.</li>
<li> fix for file protection.</li>
<li> new move_to_relative, still needs work</li>
<li> New code for closing <code>recognize_speech</code> streams but errors after several uses.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.0.11, Apr 10, 2017</summary>
Highlights: DDE now communicating with Dexter. New default robot is Robot.dexter0.
Extensions to dde_init.js and dde_persistent.json mean rarely having
to define a robot with your Job definitions. "Start Job" and "Simulate?"
menu items reduce now-extranious code in Job definition file and ease
switching between simulate and real.
<ul>
<li> Now access to files outside of the user's Documents/dde_apps/ folder is restricted.
This is to prevent potentially malicious code running within DDE.</li>
<li> <code>write_file</code> doc updated.</li>
<li> <code>persistent_clear</code> renamed to <code>persistent_initialize</code> and
the functionality was extended. Doc updated.</li>
<li> Stop all jobs is now closing (disconnecting) the job's robot if its a Dexter.</li>
<li> DDE now communicating with Dexter.</li>
<li> dde_persistent.json now has a comment at top of file.</li>
<li> A comment above release notes now says some releases have no release notes.</li>
<li> Now you can edit the font size by typing, and hitting ENTER
causes the new font size to take effect.</li>
<li> Now clicking anywhere in the menu item of
the "Real time sim" menu item toggles the checkbox.</li>
<li> Choosing series menu item "Test Suite" now inserts
the first test suite.ISSUE: Series>Test Suite, didn't seem to do anything.</li>
<li> Replaced: "There is nothing[blue] in the editor" with
"The Editor is empty. Type to insert text."</li>
<li> Choosing Editor menu item Undo now works.</li>
<li> Replaced editor menu item of:
"Right click menu has more ops". with
"Right click menu in JS pane has more operations."</li>
<li> New default robot is <code>Robot.dexter0</code>.</li>
<li> New items in dde_init.js and dde_persistent.json
new initialization of these files to make configuration easier.
Once you configure dexter0 in dde_init.js, mostly
you won't have to touch it again, or use another robot.
Thus defining a robot in a Job definition file becomes unnecessary.</li>
<li> new Jobs menu item "Simulate?" checkbox.
This sets the persistent variable: "default_dexter_simulate"
and that's used when a job using dexter0 is starting.</li>
<li> Dexter robot objects now have a property: <code>simulate_from</code>
If this is has the value: <code>"persistent_get"</code> (the default)
then every time a job is started with this robot,
the robot's simulate flag is set to the value of
<code>persistent_get("default_dexter_simulate")</code>
Please see new doc in the ref man on Dexter and its parameter: simulate_from.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.0.10, Apr 2, 2017</summary>
Highlights: Start Job menu item. New JS type-in, recognize_speech mostly working.
<ul>
<li> Doc, Output and Simulation pane headers fixed to not wrap when pane is shrunk.</li>
<li> Rearranged Output pane header widgets.</li>
<li> Added JS/ROS radio buttons to Output pane header.
When JS is selected (the default), hitting enter evals
the typed in JS. up and down arrows navigate js cmd history.</li>
<li> github README and releases page documentation extended.</li>
<li> new Jobs Menu "Start Job" item (and "Start Job help" menu item).
Choose menu item "Start Job help" for details.</li>
<li> html code tags now display with a white background helping them
stand out better in the documentation.</li>
<li><code>recognize_speech</code> working pretty well. Still some minor issues
depending on the click_to_talk and only_once arguments. Interacts poorly with
<code>speak</code>.</li>
<li> Change in new object system that broke Coord system fixed,
but still 4 bugs in Coord system test suite.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.0.9, Mar 25, 2017</summary>
Highlights: Updating DDE much easier. Robot.start_job and Robot.stop_job.
Improved Doc. Job init param: ending_program_counter.
<ul>
<li> When using Doc pane Find button, better help text printed in
Output pane.</li>
<li> <code>Robot.wait_until</code> can now take an instruction_location
(only arrays and lit objs format accepted) as it argument
to wait until that instruction_location is reached in another job.</li>
<li>when DDE launches it prints in the output pane its
DDE version and date. If its not the latest release,
it tells you what is and how to get it.</li>
<li> "Update..." is a new File menu item that tells you the same thing.</li>
<li> Removed DDE Dexter instructions: <code>move_all_joints_relative</code>
and <code>move_to_relative</code>. Just use the new coord sys.</li>
<li> Documented "Any Function Def" as a kind of instruction in a do_list,
under Ref Man Robot. This was an important omission: recommended reading!</li>
<li> User Guide 'Installation" now documents new github process.</li>
<li> New instruction <code>Robot.start_job</code>
let's you start other jobs flexibly from within a job.</li>
<li>New init option for a job (and the start function)
<code>ending_program_counter</code> allows you to
declare at the outset to stop a job early.
Can be any instruction_location.</li>
<li> Extended instruction: <code>Robot.stop_job</code> (renamed from Robot.stop)
Now takes an instruction_location so it can stop other jobs
AND stop them at any of their instructions.</li>
<li> <code>beep</code> and <code>beeps</code> now documented in the ref man with click help.</li>
<li> Click help on [ and ] now works.</li>
</ul>
</details>
<details class="doc_details"><summary>v 1.0.4, Mar 16, 2017</summary>
Highlights: New Electron Framework, New instruction Robot.grab_robot_status,
Serial Port extensions, file access improved, dxf improvements,
go_to instruction and friends, better help in finding doc.
Please read Known Issues.
<ul>
<li>Electron Framework replaces Google Chrome App. Facilitates
single JavaScript environment and utilization of node.js packages.</li>
<li>The persistent db is now stored in a file named dde_apps/persistent.json
Unlike the previous DDE, you can now look at this file in text editor
and easily see exactly what's in it. If you edit this file.
do so when DDE is not running because dde will over-write it.
You can even move this file to another installation of DDE
and have it work.</li>
<li>Switching between files now remembers the old scroll position and
selection of a file so that if you switch back to it, it scrolls
to (almost) the same place and highlights the selection.</li>
<li>If the "file" you are editing is "new file", and you quit and
relaunch DDE, you will be showed an empty "new file" in the editor
instead of one of your previously edited files.</li>
<li>The get_page function is now syncrhonus. It does not
take a callback, and it returns the contents of the url
in its argument. A new function get_page_asynchronous
<i>does</i> take a callback and does <i>not</i> return
the contents of the url in its first argument.
</li>
<li> Robot.get_page has changed slightly incompatibly
in a similar way to the get_page function call.
Its first argument is a url_or_options,
Its second arg is response_variable_name.
There are no other arguments.
The Get_page instruction cause the job to not advance to the next instruction
until the get_page request has completed.
If get_page has errored, the response_variable_name will contain
a string starting with: "Error: "</li>
<li>The Dexter and job for calibration is no longer defined upon start up.
You have to call:
init_calibration()
This returns the job, which you can then do:
init_calibration().start() to start the job.
We'll be making this easier in the near future.
</li>
<li>job examples 3 & 7 improved.</li>
<li> file_content now doesn't take a callback and just returns the string
of the content of the file indicated in the path of its first argument.</li>
<li>load_files now doesn't take a callback and just returns the value of the
last expression in the last file loaded.
The "paths" parameter to load_files has been simplified. See the ref man doc.</li>
<li> minor improvements to SVG examples. All SVG examples work.</li>
<li> Documentation: added into the doc pane,
the url to the HDRobotic video page (under About) and the DDE video
(under "User Interface")</li>
<li> serial port improvements:
<ul><li> serial_devices() returns a list of available serial port devices.</li>
<li>serial_path_to_info_map holds an object for each connected serial port device.</li>
<li>New Job Example 9 for Serial Port & Arduino tutorial </li>
</ul>
</li>
<li>Job Examples now on a submenu under the Jobs menu.</li>
<li>Removed job instance field: robot_status. It as redundant and error prone.
Use Job.j1.robot.rotbut_status to get it if you need it,
but you won't because ....</li>
<li>New instruction Robot.grab_robot_status makes getting at
data in robot_status much easier</li>
<li> newObject now ignores "name" arg if it is null or undefined.
But if it is some OTHER non-string, newObject errors.</li>
<li> <code>Root</code> is a new global variable that holds the
root of the object system. So all object systems paths should
now start with Root.</li>
<li> Dexter.draw_dxf fixed bug that ignored the 3rd argument and always treated it as 2000</li>
<li>Dexter.draw_dxf first argument is usually a string <= 512 long
that ends in .dxf or .DXF. If it does not, the first argument
will be assumed to be a string of actual dxf code.</li>
<li> File access is restricted to files under the "dde_apps" folder in your
Documents folder. You no longer need to set up a server to access these files,
or to have edited them first.</li>
<li> You can now use the JavaScript functions: alert, confirm, prompt,
quite useful for debugging and rapid prototyping.</li>
<li> tweaks to the UI to make it "fit" better.</li>
<li> New "Eval Doc" button in the Doc pane. Let's you evaluated
a selected code example in the Doc pane and see the result
in the output pane.</li>
<li> Replaced the individual videos with
just one url to the hdrobotic.com video page.
</li>
<li> new instruction Robot.label("a string"), its a no-op but provides
target for go_to.</li>
<li> new instruction Robot.go_to(instruction_location)
"jumps" the program counter. Lots of functionality in ref man doc.</li>
<li> Now clicking on TestSuite gives you click help with an underlined
"TestSuite" that you can click on to see documentation.</li>
<li>job.start now can take "program_counter" and its an instruction_location
to init the program_counter to something other than the first instruction.
The default is 0, meaning first instruction on do_list is the first one run.
Like "go_to" at the beginning of a job.</li>
<li> job.start now can take initial_instruction as an instruction to run first.
This replaces the old param to Job.start of "sent_from_job" which was
used when a non-started job was sent an instruction.
The new initial_instruction is much more general since it can be used
when creating a job, when calling Job.start or by send_to_job.
The default is "no instruction". When it exists and
a job is started, the initial_instruction is run just BEFORE the
instruction at the initialized program_counter (which defaults to 0).</li>
<li> The documentation "About" section now shows the release date of
the DDE version loaded.</li>
<li> load_files ref man documentation now has examples.</li>
<li> dde_init.js now documented (under "Installation/Launch DDE").</li>
<li> start method now takes a program_counter
program_counter: allow a new items: "highest_completed_instruction"
and "highest_completed_instruction_or_zero"
So that if the job errors, and pc init is "highest_completed_instruction_or_zero"
we DON"T reset the do_list to the orig do_list,
but keep it the same, and go and grab the id of the
instruction that errored and use it.</li>
<li> Instruction.Control.send_to_job no longer takes a "to_job_name"
as an explicit parameter, however,
the where_to_start param can be any instruction_location
used by Robot.go_to, or program_counter setting.
Can include a job property but defaults to "this job".</li>
<li> New static method Job: Job.insert_instruction(instruction, location )
where location same format as go_to, setting program_counter.</li>
<li> sent_from_job was documented but I've undocumented it.
Users should use new facilities in
new job and start's initial_instruction, Job.insert_instruction.</li>
<li> Instruction Robot.wait_until extended to take new value for
its argument "new_instruction" meaning
when wait_until first gets called, it captures the
instruction after it (which could be none, if the wait_until is
the last instruction), then waits until
the next instruction is different,
then it unpauses.
Often put on the end of a do_list, or maybe the only thing
initially on a do_list, and waits until something gets on it.</li>
<li> If the search type-in box is empty when you click the doc "Find" button,
the selected text in the Doc, Editor, or Output pane is used,
as noted in the new tooltip for the Find type-in box.</li>
</ul>
</details>
</details> <!-- end rel notes -->