<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
  <title type="text">MWorks News</title>
  <updated>2025-02-05T08:10:58-05:00</updated>
  <id>https://mworks.github.io/</id>
  <link rel="alternate" type="text/html" href="https://mworks.github.io/" />
  <link rel="self" type="application/atom+xml" href="https://mworks.github.io/atom.xml" />
  
  <entry>
    <title type="text">MWorks 0.13 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2024/05/02/0.13-released/" />
    <id>https://mworks.github.io/news/2024/05/02/0.13-released</id>
    <updated>2024-05-02T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.13 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.13.dmg">Mac</a> and <a href="https://apps.apple.com/app/mworks/id1389408331">iPad</a>.  Highlights of this release include:</p>

<ul>
  <li><a href="/documentation/0.13/components/optic_flow_field_stimulus.html">Optic flow field</a> stimulus</li>
  <li><a href="/documentation/0.13/components/on_exit.html">Exit actions</a></li>
  <li><a href="/documentation/0.13/components/labjack_ljm_analog_waveform_channel.html">Analog waveform output</a> on <a href="/documentation/0.13/components/labjack_ljm_device.html">LabJack LJM</a> devices</li>
  <li><a href="/documentation/0.13/components/rotary_speed_sensor.html">Rotary speed sensor</a> device</li>
  <li>Experiment loading no longer requires all media files to fit in RAM simultaneously</li>
  <li>MATLAB tools now support both arm64 (Apple silicon) and x86_64 (Intel) processors</li>
</ul>

<p>MWorks 0.13 requires a Mac running macOS Monterey (12.0) or later or an iPad running iPadOS 17.0 or later.  It was tested on macOS 12, 13, and 14 and iPadOS 17.</p>

<p>For a full list of changes in this release, please see the release notes below.</p>

<h3 id="core">Core</h3>

<ul>
  <li>
    <p>Added <a href="/documentation/0.13/components/optic_flow_field_stimulus.html">Optic Flow Field</a> stimulus</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.13/components/on_exit.html">exit actions</a>.  These can be used to perform work in a <a href="/documentation/0.13/components/task_system_state.html">Task System State</a> <em>after</em> a transition succeeds or to run unconditional shutdown or cleanup code (similar to Python’s <a href="https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions">try/finally</a> or Swift’s <a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/statements/#Defer-Statement">defer</a>).</p>
  </li>
  <li>
    <p>Experiment media files are now sent one at a time from client to server.  This eliminates the need for all media files to fit in RAM simultaneously, which was particularly problematic on iPad’s.</p>
  </li>
</ul>

<h4 id="variables">Variables</h4>

<ul>
  <li>
    <p>Variable notifications and announcement now happen atomically within assignments.  This means that a variable’s <a href="/documentation/0.13/guide/designing.html#variable-attached-actions">attached actions</a> cannot execute on more than one thread simultaneously (and therefore cannot interfere or overlap with actions executing on another thread).</p>
  </li>
  <li>
    <p>Element assigments to variables now perform notifications and announce only if the assignment succeeds</p>
  </li>
  <li>
    <p>Resolved an issue where client-side code lookups for experiment-defined
 variables would continue to succeed after the experiment was unloaded</p>
  </li>
</ul>

<h4 id="io-devices">I/O Devices</h4>

<ul>
  <li>
    <p>Added support for <a href="/documentation/0.13/components/labjack_ljm_analog_waveform_channel.html">analog waveform output</a> to <a href="/documentation/0.13/components/labjack_ljm_device.html">LabJack LJM</a> devices</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.13/components/rotary_speed_sensor.html">Rotary Speed Sensor</a> device</p>
  </li>
  <li>
    <p><a href="/documentation/0.13/components/qcualor_device.html">QCUALOR</a> device</p>

    <ul>
      <li>
        <p><a href="/documentation/0.13/components/start_io_device.html">Start IO Device</a> now configures active channels only (<a href="https://mworks.discourse.group/t/the-timing-between-turning-laser-on-and-stimulus-on/951/37">more info</a>)</p>
      </li>
      <li>
        <p>Added <a href="/documentation/0.13/components/qcualor_device.html#log-commands">log_commands</a> parameter</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Setting <a href="/documentation/0.13/reference/sysvars.html#allowaltfailover">#allowAltFailover</a> to false now actually works as intended</p>
  </li>
  <li>
    <p>Attempting to make an I/O device its own “alt” object is now an error</p>
  </li>
</ul>

<h3 id="applications">Applications</h3>

<ul>
  <li>
    <p>Workspace files: Accept <a href="https://json5.org">JSON5</a> on input.  Sort keys and don’t escape slashes on output.</p>
  </li>
  <li>
    <p>Fixed a potential crash on macOS 14.1</p>
  </li>
</ul>

<h3 id="python-and-matlab-tools">Python and MATLAB Tools</h3>

<ul>
  <li>
    <p>Python plugin now embeds Python 3.11 (instead of 3.10)</p>
  </li>
  <li>
    <p>Python tools now require Python 3.8 or later</p>
  </li>
  <li>
    <p>MATLAB tools now require MATLAB R2022a or later</p>
  </li>
  <li>
    <p>MATLAB tools now support both arm64 (Apple silicon) and x86_64 (Intel) processors</p>
  </li>
</ul>

<h3 id="internalsdevelopment">Internals/Development</h3>

<ul>
  <li>
    <p>Upgraded to new versions of many supporting libraries:</p>

    <ul>
      <li>boost: 1.81.0 ➞ 1.83.0</li>
      <li>msgpack: 4.1.1 ➞ 6.1.0</li>
      <li>numpy: 1.23.3 ➞ 1.26.2</li>
      <li>openssl: 3.0.7 ➞ 3.1.4</li>
      <li>python: 3.10.7 ➞ 3.11.3</li>
      <li>sqlite: 3.40.0 ➞ 3.44.0</li>
      <li>zeromq: 4.3.4 ➞ 4.3.5</li>
    </ul>
  </li>
  <li>
    <p>Added StateSystem::executeAction.  Use a singleton State instance (the “end state”) to indicate that there are no more states to execute.  ActionVariableNotification, ScheduledActions, and RenderActions now use StateSystem::executeAction to execute their associated actions.  Wait, WaitForCondition, and StimulusDisplayAction no longer have special-case code to handle execution outside of the state system.  Action::execute is now pure virtual and private.</p>
  </li>
  <li>
    <p>State::next now tries to return its parent’s next state (instead of the parent itself), in order to avoid an unnecessary invocation of the parent’s action</p>
  </li>
  <li>
    <p>Removed Action::setName and all calls to setName in State subclasses, because any name set that way is overwritten during experiment loading by ComponentRegistry::registerObject (either directly or via ComponentRegistry::registerNewObject)</p>
  </li>
  <li>
    <p>Added ContainerAction.  If, Else, IfElse, and While now derive from ContainerAction.</p>
  </li>
  <li>
    <p>Renamed global variable <code class="language-plaintext highlighter-rouge">currentState</code> to <code class="language-plaintext highlighter-rouge">announceCurrentState</code></p>
  </li>
  <li>
    <p>Added Swift ClientPluginCoordinator and ClientPluginViewController classes to MWorksCocoa</p>
  </li>
  <li>
    <p>Added ReadWriteVariable class.  GlobalVariable and ScopedVariable now inherit from ReadWriteVariable</p>
  </li>
  <li>
    <p>Use SQLite exclusive locking mode when reading MWK2 files</p>
  </li>
  <li>
    <p>Removed OpenALContextManager, LegacySound and its subclasses, alut, and all usage of OpenAL</p>
  </li>
</ul>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.12.2 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2023/10/03/0.12.2-released/" />
    <id>https://mworks.github.io/news/2023/10/03/0.12.2-released</id>
    <updated>2023-10-03T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.12.2 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.12.2.dmg">Mac</a> and <a href="https://apps.apple.com/app/mworks/id1389408331">iPad</a>.  This release includes the following changes:</p>

<ul>
  <li>Fixed <a href="https://mworks.discourse.group/t/eyelink-crashes-mwserver/909/7">an issue</a> that caused MWServer to crash when loading an experiment that contains an <a href="/documentation/0.12.2/components/eyelink_device.html">EyeLink</a> device</li>
  <li>Added <code class="language-plaintext highlighter-rouge">active_when_hidden</code> parameter to <a href="/documentation/0.12.2/components/fixation_point_stimulus.html">rectangular</a> and <a href="/documentation/0.12.2/components/circular_fixation_point_stimulus.html">circular</a> fixation points, which can be used to restore their pre-0.12 behavior when off screen</li>
  <li>Reduced the start-up latency of <a href="/documentation/0.12.2/components/sounds.html">sound</a> playback (<a href="https://mworks.discourse.group/t/mworks-sound-issue/888">more info</a>), and fixed a few issues revealed by this change</li>
  <li>Added support for the <a href="https://labjack.com/products/t8">LabJack T8</a> to the <a href="/documentation/0.12.2/components/labjack_ljm_device.html">LabJack LJM</a> interface</li>
  <li><a href="/documentation/0.12.2/components/labjack_ljm_device.html">LabJack LJM</a> and <a href="/documentation/0.12.2/components/eyelink_device.html">EyeLink</a> interfaces now support both arm64 (Apple silicon) and x86_64 (Intel) processors</li>
</ul>

<p>MWorks 0.12.2 requires a Mac running macOS Big Sur (11.0) or later or an iPad running iPadOS 16.0 or later.  It was tested on macOS 11, 12, and 13 and iPadOS 16.</p>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.12.1 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2023/05/03/0.12.1-released/" />
    <id>https://mworks.github.io/news/2023/05/03/0.12.1-released</id>
    <updated>2023-05-03T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.12.1 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.12.1.dmg">Mac</a> and <a href="https://apps.apple.com/app/mworks/id1389408331">iPad</a>.  This release fixes an <a href="https://github.com/mworks/mworks-issues/issues/444">issue</a> in <a href="/news/2023/04/12/0.12-released/">MWorks 0.12</a> that, in certain circumstances, caused audio playback to fail after unloading an experiment.</p>

<p>MWorks 0.12.1 requires a Mac running macOS Big Sur (11.0) or later or an iPad running iPadOS 16.0 or later.  It was tested on macOS 11, 12, and 13 and iPadOS 16.</p>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.12 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2023/04/12/0.12-released/" />
    <id>https://mworks.github.io/news/2023/04/12/0.12-released</id>
    <updated>2023-04-12T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.12 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.12.dmg">Mac</a> and <a href="https://apps.apple.com/app/mworks/id1389408331">iPad</a>.  Highlights of this release include:</p>

<ul>
  <li>Major overhaul and modernization of <a href="/documentation/0.12/components/sounds.html">audio stimuli</a></li>
  <li>Support for multiple <a href="/documentation/0.12/components/stimulus_display.html">stimulus displays</a> in a single experiment</li>
  <li><a href="/documentation/0.12/components/parametric_shape_stimulus.html">Parametric shape stimulus</a></li>
  <li>Support for <a href="/documentation/0.12/components/labjack_ljm_device.html">LabJack T4 and T7</a> devices</li>
  <li>Support for <a href="/documentation/0.12/components/trackpixx_device.html">TRACKPixx3</a> eye trackers</li>
  <li>Support for the UW Quad Channel Laser Modulator (<a href="/documentation/0.12/components/qcualor_device.html">QCUALOR</a>)</li>
  <li><a href="/documentation/0.12/mwel/index.html#conditional-inclusion">Conditional inclusion</a> and <a href="/documentation/0.12/mwel/index.html#requiring-macros">required macros</a> in MWEL</li>
  <li>Pure-Python <a href="https://raw.githubusercontent.com/mworks/mworks/master/tools/python/Modules/mwk2reader.py">MWK2 file reader</a> (for analyzing event files on non-Mac systems)</li>
</ul>

<p>MWorks 0.12 requires a Mac running macOS Big Sur (11.0) or later or an iPad running iPadOS 16.0 or later.  It was tested on macOS 11, 12, and 13 and iPadOS 16.</p>

<p>For a full list of changes in this release, please see the release notes below.</p>

<h3 id="core">Core</h3>

<h4 id="audio-stimuli">Audio Stimuli</h4>

<p>MWorks’ support for <a href="/documentation/0.12/components/sounds.html">audio stimuli</a> has undergone a major overhaul and modernization:</p>

<ul>
  <li>
    <p><a href="/documentation/0.12/components/audio_file_stimulus.html">Audio File Stimulus</a> (formerly Sound Stimulus) now supports any audio file format readable by the operating system</p>
  </li>
  <li>
    <p>Audio files can now be configured to <a href="/documentation/0.12/components/audio_file_stimulus.html#loop">loop</a> indefinitely or <a href="/documentation/0.12/components/audio_file_stimulus.html#repeats">repeat</a> a fixed number of times</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.12/components/tone_stimulus.html">Tone Stimulus</a> for generating simple tones</p>
  </li>
  <li>
    <p>Audio stimuli now support dynamic changes to <a href="/documentation/0.12/components/audio_file_stimulus.html#volume">volume</a> and <a href="/documentation/0.12/components/audio_file_stimulus.html#pan">stereo panning</a> and can notify the experiment when they have <a href="/documentation/0.12/components/audio_file_stimulus.html#ended">ended</a></p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/play_sound.html">Play Sound</a> now supports specifying a <a href="/documentation/0.12/components/play_sound.html#start-time">start time</a> for playback, which enables synchronization of playback start with other sounds or events in the experiment</p>
  </li>
  <li>
    <p>Audio stimuli can now be <a href="/documentation/0.12/components/load_sound.html">loaded</a> and <a href="/documentation/0.12/components/unload_sound.html">unloaded</a> by a running experiment</p>
  </li>
  <li>
    <p>Audio stimuli can now be placed in a <a href="/documentation/0.12/components/sound_group.html">Sound Group</a>, which should make it easier to manage large sets of stimuli</p>
  </li>
</ul>

<p>For more information, see <a href="https://mworks.discourse.group/t/audio-improvements/835">this discussion</a>.</p>

<h4 id="visual-stimuli">Visual Stimuli</h4>

<ul>
  <li>
    <p>Added support for using multiple, independent <a href="/documentation/0.12/components/stimulus_display.html">stimulus displays</a> in a single experiment (<a href="https://mworks.discourse.group/t/request-for-multi-monitor-experiment-in-mworks/92/9">more info</a>)</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.12/components/parametric_shape_stimulus.html">Parametric Shape Stimulus</a></p>
  </li>
  <li>
    <p>Fixation point stimuli (both <a href="/documentation/0.12/components/fixation_point_stimulus.html">rectangular</a> and <a href="/documentation/0.12/components/circular_fixation_point_stimulus.html">circular</a>) now report active fixation only when on screen</p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/stimuli.html">Stimuli</a> and display-related actions (e.g. <a href="/documentation/0.12/components/update_stimulus_display.html">Update Stimulus Display</a>) can now specify the display with which they are associated (required when using multiple displays)</p>
  </li>
  <li>
    <p>Exceptions raised during <a href="/documentation/0.12/components/load_stimulus.html">Load Stimulus</a> execution no longer cause the experiment to stop or crash</p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/stimulus_display.html">Stimulus Display</a> device now supports setting custom <a href="/documentation/0.12/components/stimulus_display.html#update-variable">update</a> and <a href="/documentation/0.12/components/stimulus_display.html#capture-variable">capture</a> variables</p>
  </li>
  <li>
    <p>On macOS, fixed a bug that prevented color management from being fully disabled</p>
  </li>
</ul>

<h4 id="io-devices">I/O Devices</h4>

<ul>
  <li>
    <p>Added support for <a href="/documentation/0.12/components/labjack_ljm_device.html">LabJack LJM</a> devices (specifically the <a href="https://labjack.com/products/labjack-t4">T4</a> and <a href="https://labjack.com/products/labjack-t7">T7</a>)</p>
  </li>
  <li>
    <p>Added support for the University of Washington Quad Channel Laser Modulator (<a href="/documentation/0.12/components/qcualor_device.html">QCUALOR</a>)</p>
  </li>
  <li>
    <p>Added support for <a href="/documentation/0.12/components/trackpixx_device.html">TRACKPixx3 eye trackers</a></p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/datapixx_device.html">DATAPixx</a> devices are now compatible with the VPixx Device Server.  An unfortunate consequence of this is that the MWorks’ DATAPixx interface now supports only x86_64 (Intel) processors.  Support for arm64 (Apple silicon) processors will be re-added if/when the underlying libraries support it.</p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/iscan_device.html">ISCAN</a> devices now handle omission of the <a href="/documentation/0.12/components/iscan_device.html#serial-port">serial_port</a> parameter correctly</p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">display</code> parameter to <a href="/documentation/0.12/components/eyelink_device.html">EyeLink</a>, <a href="/documentation/0.12/components/mouse_input_device.html">mouse input</a>, and <a href="/documentation/0.12/components/touch_input_device.html">touch input</a> devices (required when using multiple stimulus displays)</p>
  </li>
  <li>
    <p><a href="/documentation/0.12/components/ximea_camera_device.html">XIMEA camera</a> now supports both arm64 (Apple silicon) and x86_64 (Intel) processors</p>
  </li>
  <li>
    <p>Removed support for ITC-18 and NI-DAQ devices, because their vendor-provided drivers are incompatible with macOS 11 and later</p>
  </li>
  <li>
    <p>Removed legacy MSSWGamepad plugin, as it crashed MWServer on recent macOS releases and is fully replaced by the <a href="/documentation/0.12/components/usb_hid_device.html">USB HID device</a></p>
  </li>
</ul>

<h4 id="mwel">MWEL</h4>

<ul>
  <li>
    <p>Added support for <a href="/documentation/0.12/mwel/index.html#conditional-inclusion">conditional code inclusion</a></p>
  </li>
  <li>
    <p>Added support for <a href="/documentation/0.12/mwel/index.html#requiring-macros">requiring macro definitions</a></p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">%define x</code> is now accepted as shorthand for <code class="language-plaintext highlighter-rouge">%define x = true</code></p>
  </li>
  <li>
    <p>Parser now waits to load <a href="/documentation/0.12/mwel/index.html#includes">included</a> files until after the entire including file has been parsed</p>
  </li>
</ul>

<h4 id="other">Other</h4>

<ul>
  <li>
    <p>Expression parser <a href="/documentation/0.12/expressions/index.html#functions">functions</a> <code class="language-plaintext highlighter-rouge">refresh_rate</code>, <code class="language-plaintext highlighter-rouge">next_frame_time</code>, and <code class="language-plaintext highlighter-rouge">display_bounds</code> now support non-default displays</p>
  </li>
  <li>
    <p>Added support for component parameter name aliases</p>

    <ul>
      <li>Variable parameter “persistant” is now named <a href="/documentation/0.12/components/variable.html#persistent">persistent</a>; “persistant” and “saved” are accepted as aliases</li>
      <li>Audio file parameter “amplitude” is now named <a href="/documentation/0.12/components/audio_file_stimulus.html#volume">volume</a>; “amplitude” is still accepted as an alias</li>
    </ul>
  </li>
  <li>
    <p>Experiment-defined <a href="/documentation/0.12/components/variable.html">variables</a> and <a href="/documentation/0.12/components/selection_variable.html">selection variables</a> can now include <a href="/documentation/0.12/components/variable.html#id2">descriptions</a> (<a href="https://mworks.discourse.group/t/feature-request/99/10">more info</a>)</p>
  </li>
  <li>
    <p>Improved run-time descriptions of <a href="/documentation/0.12/reference/sysvars.html">system variables</a></p>
  </li>
  <li>
    <p>Warnings and non-fatal errors are now silenced when evaluating expressions at load time</p>
  </li>
  <li>
    <p><a href="/documentation/0.12/reference/sysvars.html#mainscreeninfo">#mainScreenInfo</a> is no longer required to contain the key <code class="language-plaintext highlighter-rouge">refresh_rate_hz</code> (which is currently unused)</p>
  </li>
</ul>

<h3 id="applications">Applications</h3>

<ul>
  <li>Updated Mac app icons to match current macOS style</li>
</ul>

<h4 id="mwserver">MWServer</h4>

<ul>
  <li>
    <p>Display-selection menu now shows localized display names (e.g. “Built-in Retina Display”, “LED Cinema Display”) instead of generic names (e.g. “Main display”, “Display 2”)</p>
  </li>
  <li>
    <p>Mirror window location is now preserved between sessions</p>
  </li>
</ul>

<h4 id="mwclient">MWClient</h4>

<ul>
  <li>
    <p>Eye calibrator window now supports preserving hidden parameters on update</p>
  </li>
  <li>
    <p>Variables window now uses variable descriptions as tooltips for variable names</p>
  </li>
</ul>

<h3 id="python-and-matlab-tools">Python and MATLAB Tools</h3>

<ul>
  <li>
    <p>Python plugin now embeds Python 3.10 (instead of 3.9)</p>
  </li>
  <li>
    <p>Python tools now require Python 3.7 or later</p>
  </li>
  <li>
    <p>Added <a href="https://raw.githubusercontent.com/mworks/mworks/master/tools/python/Modules/mwk2reader.py">mwk2reader.py</a>, which provides pure-Python tools for reading MWK2 files (<a href="https://mworks.discourse.group/t/analyze-mworks-on-linux/873/4">more info</a>)</p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">get_version</code> and <code class="language-plaintext highlighter-rouge">require_version</code> functions and <code class="language-plaintext highlighter-rouge">__version__</code> attribute to Python mworks module (<a href="https://mworks.discourse.group/t/mworks-python-version-attribute/64/4">more info</a>)</p>
  </li>
  <li>
    <p>MATLAB tools now require MATLAB R2020b or later</p>
  </li>
  <li>
    <p>Added MATLAB <a href="/documentation/0.12/guide/data_analysis.html#id4">MWKFile class</a>, which supports extracting events from an event file one at a time in order to avoid filling up system memory</p>
  </li>
</ul>

<h3 id="internalsdevelopment">Internals/Development</h3>

<ul>
  <li>
    <p>Upgraded to new versions of many supporting libraries:</p>

    <ul>
      <li>boost: 1.77.0 ➞ 1.81.0</li>
      <li>libffi: 3.4.2 ➞ 3.4.4</li>
      <li>libusb: 1.0.24 ➞ 1.0.26</li>
      <li>msgpack: 4.0.3 ➞ 4.1.1</li>
      <li>numpy: 1.21.4 ➞ 1.23.3</li>
      <li>openssl: 1.1.1l ➞ 3.0.7</li>
      <li>python: 3.9.9 ➞ 3.10.7</li>
      <li>sqlite: 3.37.0 ➞ 3.40.0</li>
    </ul>
  </li>
  <li>
    <p>C++ code is now compiled using the C++20 language standard</p>
  </li>
  <li>
    <p>The default C/C++ optimization level is now “3” (instead of “s”)</p>
  </li>
  <li>
    <p>Moved most of Sound’s implementation into new LegacySound class.  OpenALSound now derives from LegacySound.</p>
  </li>
  <li>
    <p>Moved contents of StandardSounds.h and StandardSounds.cpp into corresponding LegacySounds.* files.</p>
  </li>
  <li>
    <p>Added MWClientPluginViewControllerFactory protocol and MWClientPluginViewController class to MWorksCocoa</p>
  </li>
  <li>
    <p>Client plugin window controllers can now subclass NSViewController (in addition to NSWindowController)</p>
  </li>
  <li>
    <p>MWorksCocoa can now be imported as a module</p>
  </li>
</ul>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.11 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2022/02/16/0.11-released/" />
    <id>https://mworks.github.io/news/2022/02/16/0.11-released</id>
    <updated>2022-02-16T00:00:00-05:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.11 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.11.dmg">Mac</a> and <a href="https://apps.apple.com/app/mworks/id1389408331">iPad</a>.  Highlights of this release include:</p>

<ul>
  <li>Native support for the arm64 (aka <a href="https://support.apple.com/en-us/HT211814">Apple silicon</a>) architecture on macOS</li>
  <li>Migration of stimulus code to Apple’s <a href="https://developer.apple.com/metal/">Metal</a> API</li>
  <li>Stimulus display <a href="/documentation/0.11/components/stimulus_display.html#capture-format">frame capture</a></li>
  <li>Support for <a href="/documentation/0.11/components/ximea_camera_device.html">XIMEA cameras</a></li>
  <li><a href="/documentation/0.11/components/python_image_stimulus.html">Python image</a> stimulus</li>
  <li>Python conduit improvements</li>
</ul>

<p><em>Please note</em>: This is the last MWorks release that will support <a href="/documentation/0.11/components/itc_18_io_device.html">ITC-18</a> and <a href="/documentation/0.11/components/nidaq_device.html">NI-DAQ</a> devices.</p>

<p>MWorks 0.11 requires a Mac running macOS Mojave (10.14.6) or later or an iPad running iPadOS 14.7 or later.</p>

<p>For a full list of changes in this release, please see the release notes below.</p>

<h3 id="apple-silicon-support">Apple Silicon Support</h3>

<p>MWorks now provides native support for the arm64 (aka <a href="https://support.apple.com/en-us/HT211814">Apple silicon</a>) processor architecture on macOS.  All macOS applications, plugins, and tools now include native binaries for both arm64 and x86_64 (Intel) processors, except for the following components, which depend on Intel-only external libraries:</p>

<ul>
  <li><a href="/documentation/0.11/components/eyelink_device.html">EyeLink device</a></li>
  <li><a href="/documentation/0.11/components/itc_18_io_device.html">ITC-18 device</a></li>
  <li><a href="/documentation/0.11/components/ximea_camera_device.html">XIMEA camera device</a></li>
  <li>MATLAB data tools and MWClient MATLAB window</li>
</ul>

<p>Native arm64 versions of these components will be added in a future release if/when arm64 versions of the required libraries become available.</p>

<h3 id="core">Core</h3>

<h4 id="visual-stimuli">Visual Stimuli</h4>

<ul>
  <li>
    <p>All standard stimulus types have been reimplemented using Apple’s <a href="https://developer.apple.com/metal/">Metal</a> API.  Existing <a href="https://www.opengl.org">OpenGL</a>-based stimuli are still supported and can be used alongside Metal-based stimuli, but this support will likely end in the next MWorks release.</p>
  </li>
  <li>
    <p>The transition to Metal necessitated changes (mostly minor) to some stimulus types:</p>

    <ul>
      <li>
        <p><a href="/documentation/0.11/components/rectangle_stimulus.html#source-blend-factor">Blend factors</a> can no longer be changed after the stimulus is loaded</p>
      </li>
      <li>
        <p>Added <a href="/documentation/0.11/components/moving_dots.html#max-num-dots">max_num_dots</a> parameter to <a href="/documentation/0.11/components/moving_dots.html">moving dots</a></p>
      </li>
      <li>
        <p>Added <a href="/documentation/0.11/components/text_stimulus.html#max-size-x">max_size_x</a> and <a href="/documentation/0.11/components/text_stimulus.html#max-size-y">max_size_y</a> parameters to <a href="/documentation/0.11/components/text_stimulus.html">text stimulus</a></p>
      </li>
      <li>
        <p>The effects of some stimulus-related actions performed by <a href="/documentation/0.11/components/render_actions.html">render actions</a> may not be visible until the next display update pass</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Added support for <a href="/documentation/0.11/components/stimulus_display.html#capture-format">stimulus display frame capture</a> (<a href="https://mworks.tenderapp.com/discussions/suggestions/495">more info</a>)</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.11/components/python_image_stimulus.html">Python image</a> stimulus</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.11/components/drifting_grating_stimulus.html#central-starting-phase">central_starting_phase</a> parameter to <a href="/documentation/0.11/components/drifting_grating_stimulus.html">drifting grating</a></p>
  </li>
  <li>
    <p>Normalized Gaussian mask values are now clamped to [0,1].  This fixes an issue where the mask could produce unintended colors when blending with a non-grayscale background.  Applies to both the <a href="/documentation/0.11/components/mask_stimulus.html">mask</a> and <a href="/documentation/0.11/components/drifting_grating_stimulus.html">drifting grating</a> stimuli.</p>
  </li>
  <li>
    <p>Fixed a rendering error that produced unintended edge effects in <a href="/documentation/0.11/components/text_stimulus.html">text stimulus</a></p>
  </li>
  <li>
    <p>Attempts to create a <a href="/documentation/0.11/components/video_stimulus.html">video stimulus</a> from an audio-only file are now handled properly</p>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/image_stimulus.html">Image file</a> stimulus no longer uses <a href="https://en.wikipedia.org/wiki/Mipmap">mipmaps</a>, as they consume GPU resources and seem unlikely to offer any benefit in actual usage</p>
  </li>
  <li>
    <p>The display update thread now gets a brief “warm up” interval before the experiment starts.  This seems to eliminate the single “update_stimulus_display action took more than two display refresh cycles” warning often seen when an experiment starts on iOS.</p>
  </li>
  <li>
    <p>Reduced lock contention between main state system thread and stimulus display update thread, which could lead to <a href="https://mworks.tenderapp.com/discussions/problems/553">serious performance issues</a> on iOS</p>
  </li>
</ul>

<h4 id="io-devices">I/O Devices</h4>

<ul>
  <li>
    <p>Added support for <a href="/documentation/0.11/components/ximea_camera_device.html">XIMEA cameras</a> (<a href="https://mworks.tenderapp.com/discussions/suggestions/499">more info</a>)</p>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/usb_hid_device.html">USB HID device</a> now detects and reports device removal and can recover if the device is reconnected (<a href="https://mworks.tenderapp.com/discussions/problems/563">more info</a>)</p>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/mouse_input_device.html">Mouse input device</a> parameters <a href="/documentation/0.11/components/mouse_input_device.html#mouse-position-x">mouse_position_x</a> and <a href="/documentation/0.11/components/mouse_input_device.html#mouse-position-y">mouse_position_y</a> are now optional, so that the device can be used just to hide the cursor</p>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/datapixx_device.html">DATAPixx device</a></p>

    <ul>
      <li>
        <p>Ensure that <a href="/documentation/0.11/components/datapixx_device.html#clock-offset-nanos">clock offset</a> is computed even when there are no input channels</p>
      </li>
      <li>
        <p>Handle devices that don’t support <a href="/documentation/0.11/components/datapixx_device.html#enable-dout-pixel-mode">pixel mode</a> and/or <a href="/documentation/0.11/components/datapixx_device.html#enable-dout-vsync-mode">VSYNC mode</a> (e.g the <a href="https://vpixx.com/products/datapixx/">original DATAPixx</a>)</p>
      </li>
    </ul>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/stimulus_display.html">Stimulus display device</a> parameter <a href="/documentation/0.11/components/stimulus_display.html#background-color">background_color</a> is now optional</p>
  </li>
</ul>

<h4 id="other">Other</h4>

<ul>
  <li>
    <p><a href="/documentation/0.11/components/replicators.html">Replicators</a> can now contain <a href="/documentation/0.11/components/sounds.html">sounds</a></p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.11/components/clear_stimulus_display.html#predicted-output-time">predicted_output_time</a> parameter to <a href="/documentation/0.11/components/clear_stimulus_display.html">clear stimulus display</a> action</p>
  </li>
  <li>
    <p><a href="/documentation/0.11/components/update_stimulus_display.html">Update stimulus display</a> action is now slightly more lenient when deciding if a display update has taken too long to complete</p>
  </li>
  <li>
    <p>Fixed some issues in and improved the method of getting the server address on iOS</p>
  </li>
</ul>

<h3 id="applications">Applications</h3>

<ul>
  <li>
    <p>Addressed some UI issues on macOS 11 and 12</p>
  </li>
  <li>
    <p>On iOS, don’t block the first-run dialog asking for permission to use the local network</p>
  </li>
  <li>
    <p>Clarified MWServer’s “Use color management” preference</p>
  </li>
</ul>

<h4 id="mwclient">MWClient</h4>

<ul>
  <li>
    <p>Python bridge window now alerts the user if the script fails to launch (e.g. because the selected Python executable doesn’t exist)</p>
  </li>
  <li>
    <p>Variables window now permits selection of group headings</p>
  </li>
  <li>
    <p>Variables window now discards input that contains only whitespace</p>
  </li>
</ul>

<h3 id="python-and-matlab-tools">Python and MATLAB Tools</h3>

<ul>
  <li>
    <p>Python plugin now embeds Python 3.9 (instead of 3.8)</p>
  </li>
  <li>
    <p>Python tools now require Python 3.6 or later</p>
  </li>
  <li>
    <p>Python conduits</p>

    <ul>
      <li>
        <p>Added <code class="language-plaintext highlighter-rouge">CachingIPCClientConduit</code>, which receives events for all codes and caches the most recent data for each (<a href="https://mworks.tenderapp.com/discussions/questions/6102#comment_49262998">more info</a>)</p>
      </li>
      <li>
        <p>Added <code class="language-plaintext highlighter-rouge">register_callback_for_all_events</code> method</p>
      </li>
      <li>
        <p><code class="language-plaintext highlighter-rouge">register_callback_for_code</code> now actually works in all situations</p>
      </li>
    </ul>
  </li>
  <li>
    <p>MATLAB tools now require MATLAB R2018b or later</p>
  </li>
</ul>

<h3 id="internalsdevelopment">Internals/Development</h3>

<ul>
  <li>
    <p>Upgraded to new versions of many supporting libraries:</p>

    <ul>
      <li>boost: 1.73.0 ➞ 1.77.0</li>
      <li>libffi: 3.3 ➞ 3.4.2</li>
      <li>libusb: 1.0.23 ➞ 1.0.24</li>
      <li>libxslt: 1.1.29 ➞ 1.1.34</li>
      <li>msgpack: 3.3.0 ➞ 4.0.3</li>
      <li>numpy: 1.19.1 ➞ 1.21.4</li>
      <li>openssl: 1.1.1g ➞ 1.1.1l</li>
      <li>python: 3.8.5 ➞ 3.9.9</li>
      <li>sqlite: 3.32.3 ➞ 3.37.0</li>
      <li>zeromq: 4.3.2 ➞ 4.3.4</li>
    </ul>
  </li>
  <li>
    <p>StimulusDisplay, OpenGLContextManager, and their subclasses have been significantly reworked as part of the transition from OpenGL to Metal</p>
  </li>
  <li>
    <p>Stimulus classes must now declare their required rendering mode by implementing (or inheriting) the method <code class="language-plaintext highlighter-rouge">getRenderingMode</code></p>
  </li>
  <li>
    <p>Removed support for OpenGL on iOS</p>
  </li>
  <li>
    <p>Datum instances can now be marked non-compressible, which prevents MWK2Writer from trying to compress their serialized representation</p>
  </li>
  <li>
    <p>All standard conduits (server, client, and Python) now use ZeroMQ for event transport (instead of shared-memory IPC)</p>
  </li>
  <li>
    <p>The directories <code class="language-plaintext highlighter-rouge">/Library/Application Support/MWorks/Developer/include</code> and <code class="language-plaintext highlighter-rouge">/Library/Application Support/MWorks/Developer/lib</code> now contain architecture-specific subdirectories for arm64 and x86_64</p>
  </li>
</ul>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.10 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2020/09/08/0.10-released/" />
    <id>https://mworks.github.io/news/2020/09/08/0.10-released</id>
    <updated>2020-09-08T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.10 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.10.dmg">Mac</a> and <a href="https://apps.apple.com/us/app/mworks/id1389408331?ls=1">iPad</a>.  Highlights of this release include:</p>

<ul>
  <li>Support for <a href="https://vpixx.com/our-products/crt-replacement/">VIEWPixx displays</a> and <a href="https://vpixx.com/our-products/video-i-o-hub/">DATAPixx I/O hubs</a></li>
  <li><a href="/documentation/0.10/components/render_actions.html">Render actions</a>, which greatly simplify custom stimulus animations</li>
  <li><a href="/documentation/0.10/components/face_recognizer.html">Face recognition</a> support</li>
  <li>Automatic, experiment-side <a href="/documentation/0.10/components/data_file.html">data file management</a></li>
  <li><a href="/documentation/0.10/expressions/index.html#variable-and-expression-interpolation">Variable and expression interpolation</a> in string literals</li>
  <li>Python tools now support multiple Python versions (3.5 and later)</li>
</ul>

<p>MWorks 0.10 requires a Mac running macOS High Sierra (10.13) or later or an iPad running iPadOS 13.7 or later.</p>

<p>For a full list of changes in this release, please see the release notes below.</p>

<h3 id="core">Core</h3>

<h4 id="visual-stimuli">Visual Stimuli</h4>

<ul>
  <li>
    <p>Added <a href="/documentation/0.10/components/render_actions.html">render actions</a> stimulus, which simplifies animation of other stimulus types</p>
  </li>
  <li>
    <p>Most <a href="/documentation/0.10/components/stimuli.html">stimulus types</a> now have <a href="/documentation/0.10/components/drifting_grating_stimulus.html#source-blend-factor">blending parameters</a> that allow detailed control over color and alpha blending</p>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/image_stimulus.html">Image file</a></p>

    <ul>
      <li>
        <p>Added <a href="/documentation/0.10/components/image_stimulus.html#announce-load">option</a> to disable image load/unload messages</p>
      </li>
      <li>
        <p>Blending is now handled correctly, even if the image file has an alpha channel</p>
      </li>
    </ul>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/movie_stimulus.html">Movie</a> and <a href="/documentation/0.10/components/frame_list_stimulus.html">frame list</a> stimuli with no frames now issue an error when starting to play</p>
  </li>
  <li>
    <p>In previous releases, enabling <a href="/documentation/0.10/components/stimulus_display.html#redraw-on-every-refresh">redraw_on_every_refresh</a> caused the stimulus display to continue updating even when the experiment was paused.  This is no longer the case; display updates are now paused when the experiment is paused and resume when the experiment resumes.</p>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/layer_stimulus.html">Layer</a> stimulus now renders in to a half-precision float, RGBA framebuffer texture.  This resolves a potential, subtle <a href="https://mworks.tenderapp.com/discussions/problems/431">blending issue</a> on Mac’s with Intel graphics hardware.</p>
  </li>
  <li>
    <p>Fixed an intermittent crash in <a href="/documentation/0.10/components/video_stimulus.html">video</a> stimulus</p>
  </li>
  <li>
    <p>MWorks now prevents the creation of two stimuli with the same name</p>
  </li>
</ul>

<h4 id="io-devices">I/O Devices</h4>

<ul>
  <li>
    <p>Added <a href="/documentation/0.10/components/datapixx_device.html">DATAPixx</a> device, which supports <a href="https://vpixx.com/our-products/crt-replacement/">VIEWPixx displays</a> and <a href="https://vpixx.com/our-products/video-i-o-hub/">DATAPixx I/O hubs</a></p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.10/components/face_recognizer.html">face recognizer</a> device, which captures images from a camera and uses a <a href="https://developer.apple.com/machine-learning/core-ml/">Core ML</a> model to classify them</p>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/firmata_device.html">Firmata</a></p>

    <ul>
      <li>
        <p>Added <a href="/documentation/0.10/components/firmata_digital_input_pulse_channel.html">digital input pulse</a> and <a href="/documentation/0.10/components/firmata_digital_output_pulse_channel.html">digital output pulse</a> channels.  (Note that these rely on non-standard extensions of the Firmata protocol and require <a href="https://github.com/mworks/mworks-firmata-arduino">MWorks-specific firmware</a> on the device.)</p>
      </li>
      <li>
        <p>Now supports optional <a href="/documentation/0.10/components/firmata_device.html#reconnect-interval">automatic reconnection</a></p>
      </li>
      <li>
        <p>Now optionally reports the current <a href="/documentation/0.10/components/firmata_device.html#connected">connection state</a></p>
      </li>
    </ul>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/blackrock_led_driver.html">Blackrock LED driver</a></p>

    <ul>
      <li>
        <p>Added <a href="/documentation/0.10/components/stop_blackrock_led_driver.html">stop action</a> for stopping an active run before it completes</p>
      </li>
      <li>
        <p>MWorks now stops the driver, terminating any active run, when <a href="/documentation/0.10/components/stop_io_device.html">Stop I/O Device</a> executes or the experiment ends</p>
      </li>
      <li>
        <p>Added <a href="/documentation/0.10/components/blackrock_led_driver.html#temp-calc">temp_calc</a> parameter</p>
      </li>
      <li>
        <p>Added <a href="/documentation/0.10/components/blackrock_led_driver.html#simulate-device">simulation mode</a></p>
      </li>
    </ul>
  </li>
  <li>
    <p>Removed undocumented, unused HIDPlugin (not to be confused with <a href="/documentation/0.10/components/usb_hid_device.html">USB HID device</a>, which is alive and well)</p>
  </li>
</ul>

<h4 id="expression-parser">Expression Parser</h4>

<ul>
  <li>
    <p>Added support for <a href="/documentation/0.10/expressions/index.html#variable-and-expression-interpolation">variable and expression interpolation</a> in string literals</p>
  </li>
  <li>
    <p>Added <a href="/documentation/0.10/expressions/index.html#functions">functions</a> <code class="language-plaintext highlighter-rouge">acos</code>, <code class="language-plaintext highlighter-rouge">asin</code>, <code class="language-plaintext highlighter-rouge">atan</code>, <code class="language-plaintext highlighter-rouge">atan2</code>, <code class="language-plaintext highlighter-rouge">date</code>, and <code class="language-plaintext highlighter-rouge">fmod</code></p>
  </li>
  <li>
    <p>Modulus (<code class="language-plaintext highlighter-rouge">%</code>) operator now warns when truncating either of its operands</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">$varname</code> and <code class="language-plaintext highlighter-rouge">${varname}</code> are now accepted as variable names (and are equivalent to plain <code class="language-plaintext highlighter-rouge">varname</code>)</p>
  </li>
</ul>

<h4 id="event-files">Event Files</h4>

<ul>
  <li>
    <p>Added support for automatic, experiment-side data file management via the new <a href="/documentation/0.10/components/data_file.html">data file</a> device (<a href="https://mworks.tenderapp.com/discussions/questions/1203#comment_47501141">more info</a>)</p>
  </li>
  <li>
    <p>When creating an event file, MWorks now prepends the <a href="/documentation/0.10/guide/data_analysis.html#accessing-the-event-file">standard data file path</a> only if the user-provided filename is not itself an absolute path.  This allows users to store event files in any directory, as long as they provide an absolute path as the filename (<a href="https://mworks.tenderapp.com/discussions/questions/1203#comment_47501141">more info</a>).</p>
  </li>
  <li>
    <p>Resolved potentially severe <a href="https://mworks.tenderapp.com/discussions/problems/413#comment_47901072">reduction in data file write speed</a> when system is under heavy I/O load</p>
  </li>
  <li>
    <p>Removed <code class="language-plaintext highlighter-rouge">#announceStimulus</code> system variable, as its values were 100% redundant with <a href="/documentation/0.10/reference/sysvars.html#stimdisplayupdate">#stimDisplayUpdate</a> and served only to increase event file size</p>
  </li>
</ul>

<h4 id="other">Other</h4>

<ul>
  <li>
    <p><a href="/documentation/0.10/components/task_system_state.html">Task system state</a> now forbids the placement of actions after transitions.  (Previously, actions placed after transitions were silently moved to the end of the action list and always executed before transitions were evaluated.)</p>
  </li>
  <li>
    <p><a href="/documentation/0.10/components/wait_for_condition.html">Wait for condition</a> can now execute outside of the main state system (e.g. in a <a href="/documentation/0.10/components/schedule_actions.html">scheduled action</a>)</p>
  </li>
  <li>
    <p><a href="/documentation/0.10/mwel/index.html">MWEL</a> now accepts <code class="language-plaintext highlighter-rouge">$id</code> (in addition to <code class="language-plaintext highlighter-rouge">${id}</code>) as an identifier part</p>
  </li>
  <li>
    <p>MWorks now prevents the creation of two variables with the same name</p>
  </li>
</ul>

<h3 id="applications">Applications</h3>

<ul>
  <li>
    <p>Removed MWEditor along with all related files and documentation.  (Existing XML-based experiments remain fully supported, but new experiments should be written in <a href="/documentation/0.10/mwel/index.html">MWEL</a>.)</p>
  </li>
  <li>
    <p>MWorks for iPad now supports <a href="https://support.apple.com/en-us/HT210332">Dark Mode</a></p>
  </li>
</ul>

<h4 id="mwclient">MWClient</h4>

<ul>
  <li>
    <p>Added Image Viewer window, which enables viewing of images <a href="/documentation/0.10/components/face_recognizer.html#image-data">logged by a face recognizer</a></p>
  </li>
  <li>
    <p>Python bridge window</p>

    <ul>
      <li>
        <p>Now requires the user to specify the Python executable to invoke (must be Python 3.5 or later)</p>
      </li>
      <li>
        <p>Now sets the <a href="https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH">PYTHONPATH</a> environment variable to <code class="language-plaintext highlighter-rouge">/Library/Application Support/MWorks/Scripting/Python</code></p>
      </li>
      <li>
        <p>Now truncates displayed script names at the beginning (instead of in the middle or at the end)</p>
      </li>
      <li>
        <p>Now limits length of recent Python scripts list</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Variables window now displays <code class="language-plaintext highlighter-rouge">&lt;binary data&gt;</code> in place of values that cannot be converted to text</p>
  </li>
  <li>
    <p>All plugin windows now include the server address in their title</p>
  </li>
  <li>
    <p>Added tooltips containing the entire, non-truncated paths of the experiment and data file</p>
  </li>
  <li>
    <p>Saved variable set names are now sorted</p>
  </li>
  <li>
    <p>Now limits length of recent servers list</p>
  </li>
</ul>

<h3 id="python-and-matlab-tools">Python and MATLAB Tools</h3>

<ul>
  <li>
    <p>Python plugin now embeds Python 3.8 (instead of 3.7)</p>
  </li>
  <li>
    <p>Python plugin now supports <a href="https://docs.python.org/3/library/ctypes.html">ctypes</a> on both Mac and iPad (although its usefulness on an iPad is very limited)</p>
  </li>
  <li>
    <p>Python tools now support Python 3.5 and later, but no longer support Python 2</p>
  </li>
  <li>
    <p>Python tools no longer require NumPy but still interoperate with it when available</p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">_stop_main_loop</code> method to Python conduit classes</p>
  </li>
  <li>
    <p>Added context manager methods <code class="language-plaintext highlighter-rouge">__enter__</code> and <code class="language-plaintext highlighter-rouge">__exit__</code> to Python conduit classes; the former initializes the conduit, and the latter finalizes it</p>
  </li>
  <li>
    <p>Added <code class="language-plaintext highlighter-rouge">dump_codec</code> and <code class="language-plaintext highlighter-rouge">dump_events</code> scripts to Python tools.  They are installed in <code class="language-plaintext highlighter-rouge">/Library/Application Support/MWorks/Scripting/Python</code>.</p>
  </li>
  <li>
    <p>MATLAB tools now require MATLAB R2017b or later</p>
  </li>
</ul>

<h3 id="internalsdevelopment">Internals/Development</h3>

<ul>
  <li>
    <p>Upgraded to new versions of many supporting libraries:</p>

    <ul>
      <li>boost: 1.69.0 ➞ 1.73.0</li>
      <li>cppunit: 1.14.0 ➞ 1.15.1</li>
      <li>msgpack: 3.1.1 ➞ 3.3.0</li>
      <li>numpy: 1.16.2 ➞ 1.19.1</li>
      <li>openssl: 1.1.1b ➞ 1.1.1g</li>
      <li>python: 3.7.3 ➞ 3.8.5</li>
      <li>sqlite: 3.27.2 ➞ 3.32.3</li>
      <li>zeromq: 4.3.1 ➞ 4.3.2</li>
    </ul>
  </li>
  <li>
    <p>Added <a href="https://github.com/libffi/libffi">libffi</a> 3.3 and <a href="https://github.com/libusb/libusb">libusb</a> 1.0.23 to supporting libs</p>
  </li>
  <li>
    <p>Removed <a href="https://github.com/psexton/matlab-xunit">matlab-xunit</a> from supporting libs</p>
  </li>
  <li>
    <p>Removed all <code class="language-plaintext highlighter-rouge">MWLibrary.xml</code> files</p>
  </li>
  <li>
    <p>Reworked build and installation to avoid the need to change permissions on system directories.  Updated <a href="https://mworks.tenderapp.com/kb/development/building-mworks-from-source">build instructions</a> accordingly.</p>
  </li>
  <li>
    <p>macOS installer package is now <a href="https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution">notarized</a></p>
  </li>
  <li>
    <p>macOS and iOS builds now use separate code signing config files</p>
  </li>
  <li>
    <p>C++ code is now compiled using the C++17 language standard</p>
  </li>
  <li>
    <p>All Objective-C/Objective-C++ code now uses <a href="https://clang.llvm.org/docs/AutomaticReferenceCounting.html">Automatic Reference Counting</a> (ARC)</p>
  </li>
  <li>
    <p>Added MWorksSwift framework, which aims to enable development of MWServer, MWClient, and client plugins in <a href="https://swift.org/about/">Swift</a> (and Objective-C), without requiring any C++ code</p>
  </li>
  <li>
    <p>Moved embedded Python out of PythonPlugin and in to the new MWorksPython framework (which PythonPlugin uses)</p>
  </li>
  <li>
    <p>MWEL scripts now invoke a custom, private Python executable (which links against the MWorksPython framework)</p>
  </li>
  <li>
    <p>Addressed issues raised by Python test suite on iOS</p>
  </li>
  <li>
    <p>NumPy is no longer built against <a href="https://developer.apple.com/documentation/accelerate">Accelerate</a>, as it seems to make things worse rather than better</p>
  </li>
  <li>
    <p>Replaced all usage of <code class="language-plaintext highlighter-rouge">/bin/bash</code> (and some usage of <code class="language-plaintext highlighter-rouge">/bin/sh</code>) with <code class="language-plaintext highlighter-rouge">/bin/zsh</code></p>
  </li>
</ul>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">End of life for NI-DAQmx Base driver</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2019/09/19/nidaqmxbase-eol/" />
    <id>https://mworks.github.io/news/2019/09/19/nidaqmxbase-eol</id>
    <updated>2019-09-19T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>National Instruments (NI) <a href="https://forums.ni.com/t5/NI-DAQmx-Base-Developers/End-of-Life-Announcement-for-DAQmx-Base-Driver/gpm-p/3967360?profile.language=en">recently announced</a> that they are ending development of the NI-DAQmx Base device driver package.  Given that the most recent version of NI-DAQmx Base (15.0) was released four years ago, this news is not especially surprising.  However, it will affect anyone using NI devices with MWorks, as detailed below.</p>

<h3 id="how-this-affects-mworks-users">How this affects MWorks users</h3>

<p>MWorks’ <a href="/documentation/latest/components/nidaq_device.html">NIDAQ device</a> uses NI-DAQmx Base to interface with NI hardware.  NI has stated that the current (and final) version of NI-DAQmx Base will not be compatible with macOS Catalina (10.15), which is due to be released some time next month.  Therefore, if you wish to continue using NI devices with MWorks, you will need to be running macOS 10.14 or earlier.</p>

<p>Extrapolating Apple’s recent cadence of macOS releases in to the future, we can expect macOS 10.16 to be released in the fall of 2020, with 10.17 following in the fall of 2021.  At that point, Apple will end support for macOS 10.14, and MWorks will follow suit.  Hence, the spring 2022 release of MWorks will require macOS 10.15 or later.  Unless NI changes course and provides an updated or replacement driver package for macOS, MWorks’ support for NI devices will end with this release.</p>

<h3 id="options-for-the-future">Options for the future</h3>

<p>If you currently use NI hardware with MWorks and would like to continue to do so in the future, you may want to get in touch with the folks at NI and lobby for continued support of macOS.  However, assuming that NI is unwilling to change its plans, you need to start considering alternative I/O hardware.</p>

<p>For control and simple data-acquisition tasks, I heartily recommend MWorks’ <a href="/documentation/latest/components/firmata_device.html">Firmata interface</a>.  Firmata-compatible devices (e.g. <a href="https://www.arduino.cc">Arduino</a> boards) are inexpensive, flexible, and ever-increasingly powerful.  They are an excellent choice for controlling juice pumps, monitoring digital or analog triggers, and many other I/O tasks.</p>

<p>If you require more traditional DAQ hardware (for example, you need to record many analog channels simultaneously, or you require a sampling interval of less than one millisecond), I suggest that you consider <a href="https://labjack.com">LabJack</a> devices.  Several labs currently use the LabJack <a href="https://labjack.com/products/u6">U6</a> with MWorks (via a custom plugin), and I’m planning to include built-in support for the <a href="https://labjack.com/products/t4">T4</a> and <a href="https://labjack.com/products/t7">T7</a> in the next MWorks release.</p>

<p>Finally, if you’d prefer to use I/O hardware from another vendor, please <a href="https://mworks.tenderapp.com/discussion/new">get in touch</a>, and we can discuss options for interfacing with it from MWorks.  In general, we should be able to support any device that comes with a macOS-compatible C/C++ API or communicates with the host computer via a platform-agnostic protocol (e.g. Ethernet or serial).</p>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks and Mojave</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2019/05/13/mojave/" />
    <id>https://mworks.github.io/news/2019/05/13/mojave</id>
    <updated>2019-05-13T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>If you’re thinking about upgrading to <a href="https://en.wikipedia.org/wiki/MacOS_Mojave">macOS Mojave (10.14)</a> (perhaps to take advantage of the new <a href="https://support.apple.com/en-us/HT208976">Dark Mode</a> support in <a href="/news/2019/05/13/0.9-released/">MWorks 0.9</a>), here are a few things to consider first.</p>

<h3 id="issue-with-multiple-displays">Issue with multiple displays</h3>

<p><strong>Update (2019/8/12)</strong>: The issue described below appears to be fixed in macOS 10.14.6.  I no longer observe the telltale stuttering on either of my Mojave systems.  Reportedly, the issue is <a href="https://forums.developer.apple.com/thread/112468#368882">absent in the macOS Catalina beta</a> as well.</p>

<p><del>macOS Mojave appears to have trouble driving multiple displays simultaneously.  The issue manifests as <a href="https://forums.developer.apple.com/thread/112468">visible stuttering</a> in on-screen graphics.  In MWorks, these stutters are accompanied by bouts of “Skipped <em>xx</em> display refresh cycles” messages.  In my experience, the stuttering episodes occur cyclically, with 1-2 minutes of stuttering followed by 5-10 minutes of normal graphics performance.  The only remedy is to reduce the total number of connected displays (both internal and external) to one.</del></p>

<p><del>I have observed this issue on a late-2013 Mac Pro and a 2018 Mac mini, both running macOS 10.14.4 (though it may affect earlier 10.14 releases, too).  I have not observed it on earlier macOS versions.  Also, this issue is not present on iOS.</del></p>

<h3 id="support-for-20102012-mac-pro">Support for 2010/2012 Mac Pro</h3>

<p>Mojave is the first macOS release to require a graphics card that supports <a href="https://developer.apple.com/metal/">Metal</a>, Apple’s modern graphics programming framework.  Most Mac computers released since 2012 <a href="https://support.apple.com/en-us/HT205073">support Metal</a>.  However, the stock graphics cards in the 2010/2012 Mac Pro (i.e. the last <a href="https://512pixels.net/2017/04/the-cheese-grater-mac-pro/">“cheese grater”</a> Mac Pro) do not.</p>

<p>Fortunately, you can make a 2010/2012 Mac Pro compatible with Mojave by upgrading its graphics card.  Apple provides a <a href="https://support.apple.com/en-us/HT208898#cards">list of supported graphics cards</a>, any of which should be fine for use with MWorks.  Even if you don’t plan to switch to Mojave any time soon, this upgrade may still be worthwhile as a future-proofing step.  (I recently installed an <a href="https://www.amazon.com/dp/B072J422CZ/">MSI Gaming Radeon RX 560 128-bit 4GB GDRR5</a> in one of my MWorks test systems, a 2010 Mac Pro running macOS 10.13.6, and have been very happy with its  performance.)</p>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks 0.9 released</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2019/05/13/0.9-released/" />
    <id>https://mworks.github.io/news/2019/05/13/0.9-released</id>
    <updated>2019-05-13T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks 0.9 is now available for <a href="https://s3.amazonaws.com/mworks-downloads/release/MWorks-0.9.dmg">macOS</a> and <a href="https://apps.apple.com/us/app/mworks/id1389408331?ls=1">iOS</a>.  Highlights of this release include:</p>

<ul>
  <li><a href="/documentation/0.9/components/layer_stimulus.html">Layer</a> and <a href="/documentation/0.9/components/mask_stimulus.html">mask</a> stimuli</li>
  <li>Embedded Python execution on iOS</li>
  <li><a href="/documentation/0.9/components/eyelink_device.html">EyeLink</a> tracker-driven calibration and blink, saccade, and fixation events</li>
  <li>New event file format (<a href="/documentation/0.9/reference/event_file_format/current.html">MWK2</a>)</li>
  <li><a href="/documentation/0.9/mwel/index.html#converting-to-and-from-xml">XML-to-MWEL</a> converter</li>
  <li>Support for macOS <a href="https://support.apple.com/en-us/HT208976">Dark Mode</a></li>
</ul>

<p>MWorks 0.9 requires a Mac running macOS Sierra (10.12) or later or an iPad running iOS 12.2 or later.</p>

<p>For a full list of changes in this release, please see the release notes below.</p>

<h3 id="mwel">MWEL</h3>

<ul>
  <li>
    <p>Added <a href="/documentation/0.9/mwel/index.html#converting-to-and-from-xml">xml2mwel</a> script for converting XML experiment files into MWEL</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/mwel/index.html#variable-declarations">Variable declarations</a> are now a special case of <a href="/documentation/0.9/mwel/index.html#component-declarations">component declaration</a> and therefore can include <a href="/documentation/0.9/mwel/index.html#parameters">parameters</a> and/or <a href="/documentation/0.9/mwel/index.html#children">children</a></p>
  </li>
  <li>
    <p><a href="/documentation/0.9/mwel/index.html#statement">Statement macro</a> invocations can now include a default value with <code class="language-plaintext highlighter-rouge">=</code> (as long as the macro body is a single variable declaration that does not include a default value)</p>
  </li>
  <li>
    <p>Added support for nestable, multiline <a href="/documentation/0.9/mwel/index.html#comments">comments</a> delimited by <code class="language-plaintext highlighter-rouge">/*</code> and <code class="language-plaintext highlighter-rouge">*/</code></p>
  </li>
  <li>
    <p>Parser now expands all enclosing macro parameters in children attached to macro invocations</p>
  </li>
  <li>
    <p>Improved error reporting for unterminated string literals</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/mwel/index.html#converting-to-and-from-xml">mwel2xml</a> now accepts <code class="language-plaintext highlighter-rouge">--omit-metadata</code> as a command-line option, which inhibits the inclusion of location info and experiment source in the generated XML</p>
  </li>
</ul>

<h3 id="core">Core</h3>

<h4 id="visual-stimuli">Visual Stimuli</h4>

<ul>
  <li>
    <p>Added <a href="/documentation/0.9/components/layer_stimulus.html">layer</a> and <a href="/documentation/0.9/components/mask_stimulus.html">mask</a> stimuli</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/movie_stimulus.html">Movie</a> and <a href="/documentation/0.9/components/frame_list_stimulus.html">frame list</a> stimuli can now have their frames attached as children (instead of being contained in a <a href="/documentation/0.9/components/stimulus_group.html">stimulus group</a>)</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/image_stimulus.html">Image file</a> stimulus now prevents image color values from being altered when color management is disabled</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/drifting_grating_stimulus.html">Drifting grating</a></p>

    <ul>
      <li>
        <p>Added support for using a grating as a <a href="/documentation/0.9/components/drifting_grating_stimulus.html#mask">mask</a></p>
      </li>
      <li>
        <p>Added smoothing to discontinuous edges in square and sawtooth gratings</p>
      </li>
      <li>
        <p><a href="/documentation/0.9/components/drifting_grating_stimulus.html#inverted">inverted</a> parameter now applies to all grating types</p>
      </li>
    </ul>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/moving_dots.html">Moving dots</a></p>

    <ul>
      <li>
        <p>Added <a href="/documentation/0.9/components/moving_dots.html#rand-seed">rand_seed</a> parameter</p>
      </li>
      <li>
        <p>Added default values for <a href="/documentation/0.9/components/moving_dots.html#field-center-x">field_center_x</a>, <a href="/documentation/0.9/components/moving_dots.html#field-center-y">field_center_y</a>, and <a href="/documentation/0.9/components/moving_dots.html#direction">direction</a> parameters</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Stimulus display is now backed by <a href="https://developer.apple.com/metal/">Metal</a> (always on iOS, and on Macs running macOS 10.13 or later that <a href="https://support.apple.com/en-us/HT205073">support Metal</a>)</p>
  </li>
  <li>
    <p>Added support for setting the stimulus display’s gamma function (only on macOS, and only if color management is disabled)</p>
  </li>
  <li>
    <p>Added support for making the main stimulus display window non-opaque (mirror window is still always opaque)</p>
  </li>
  <li>
    <p>Stimulus display is now created only if the experiment uses it</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/update_stimulus_display.html">Update Stimulus Display</a> action now issues a warning if it takes more than two display refresh cycles to complete</p>
  </li>
  <li>
    <p>Dropped support for <code class="language-plaintext highlighter-rouge">render_at_full_resolution</code> key of <a href="/documentation/0.9/reference/sysvars.html#mainscreeninfo">#mainScreenInfo</a>.  Stimuli are now always rendered at the full, native resolution of the display.</p>
  </li>
</ul>

<h4 id="io-devices">I/O Devices</h4>

<ul>
  <li>
    <p>Added <a href="/documentation/0.9/components/firmata_word_output_channel.html">word output</a> and <a href="/documentation/0.9/components/firmata_digital_input_pullup_channel.html">digital input pullup</a> channels for <a href="/documentation/0.9/components/firmata_device.html">Firmata</a> devices</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/eyelink_device.html">EyeLink</a></p>

    <ul>
      <li>
        <p>Added support for tracker-driven calibration</p>
      </li>
      <li>
        <p>Enabled reporting of EyeLink blink, saccade, and fixation events</p>
      </li>
      <li>
        <p><a href="/documentation/0.9/components/eyelink_device.html#tracking-dist">tracking_dist</a> is now required only when <a href="/documentation/0.9/components/eyelink_device.html#eye-x">eye_x</a>, <a href="/documentation/0.9/components/eyelink_device.html#eye-y">eye_y</a>, and/or <a href="/documentation/0.9/components/eyelink_device.html#eye-z">eye_z</a> are specified</p>
      </li>
      <li>
        <p>Error messages now include EyeLink error message (if available)</p>
      </li>
    </ul>
  </li>
  <li>
    <p><a href="/documentation/0.9/components/nidaq_device.html">NIDAQ</a></p>

    <ul>
      <li>
        <p>Improvements to <a href="/documentation/0.9/components/nidaq_analog_output_voltage_waveform_channel.html">analog output voltage channels</a></p>

        <ul>
          <li>All waveform parameters can now be modified at run time.  Changes take effect after the device is stopped and restarted.</li>
          <li>Parameter <a href="/documentation/0.9/components/nidaq_analog_output_voltage_waveform_channel.html#offset">offset</a> is now optional and defaults to zero</li>
          <li>Added optional parameters <a href="/documentation/0.9/components/nidaq_analog_output_voltage_waveform_channel.html#amplitude">amplitude</a> and <a href="/documentation/0.9/components/nidaq_analog_output_voltage_waveform_channel.html#mean">mean</a></li>
        </ul>
      </li>
      <li>
        <p>Added <a href="/documentation/0.9/components/nidaq_device.html#analog-output-enabled">analog_output_enabled</a> parameter</p>
      </li>
      <li>
        <p>When stopping device, all digital output lines are now set to low, and all (non-waveform) analog output voltage channels are set to zero</p>
      </li>
      <li>
        <p>Added workaround for bug in NI-DAQmx Base that manifests in 64-bit processes on macOS 10.12 and later</p>
      </li>
      <li>
        <p>Now requires 64-bit variant of NI-DAQmx Base (i.e. version 14.0 or later)</p>
      </li>
    </ul>
  </li>
</ul>

<h4 id="other">Other</h4>

<ul>
  <li>
    <p>New on-disk format for event files (<a href="/documentation/0.9/reference/event_file_format/current.html">MWK2</a>)</p>
  </li>
  <li>
    <p>Expression parser now supports multiplication of strings and lists by integers.  Multiplying a list or string by integer <em>n</em> results in the concatenation of <em>n</em> copies of the list or string, e.g.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  [1, 2, 3] * 2 == [1, 2, 3, 1, 2, 3]
  3 * 'abc' == 'abcabcabc'
</code></pre></div>    </div>
  </li>
</ul>

<h3 id="applications">Applications</h3>

<ul>
  <li>
    <p>New app icons</p>
  </li>
  <li>
    <p>Version info for all apps now includes the build date</p>
  </li>
  <li>
    <p>MWClient and MWServer now support <a href="https://support.apple.com/en-us/HT208976">Dark Mode</a></p>
  </li>
  <li>
    <p>macOS installer now backs up existing MWorks installation silently (without popping up a dialog box)</p>
  </li>
  <li>
    <p>MWServer and MWClient now preserve the location of their preferences windows between sessions</p>
  </li>
  <li>
    <p>iOS MWorks app now supports hiding the “Choose experiment” button</p>
  </li>
</ul>

<h4 id="mwclient">MWClient</h4>

<ul>
  <li>
    <p>New user interface icons</p>
  </li>
  <li>
    <p>Eliminated some spurious connection failures</p>
  </li>
  <li>
    <p>Calibrator and reward window’s action buttons now end editing in all fields (thereby committing any pending changes) before performing their task</p>
  </li>
  <li>
    <p>Eye window now presents its options in a panel (instead of a drawer)</p>
  </li>
</ul>

<h4 id="mwserver">MWServer</h4>

<ul>
  <li>
    <p>Added code to prevent <a href="https://developer.apple.com/library/archive/documentation/Performance/Conceptual/power_efficiency_guidelines_osx/AppNap.html">App Nap</a> from delaying response to client connection requests</p>
  </li>
  <li>
    <p>Now preserves the selected preferences window tab between sessions</p>
  </li>
</ul>

<h3 id="python-and-matlab-tools">Python and MATLAB Tools</h3>

<ul>
  <li>
    <p>Python and MATLAB data tools now transparently support both <a href="/documentation/0.9/reference/event_file_format/legacy.html">MWK</a> and <a href="/documentation/0.9/reference/event_file_format/current.html">MWK2</a> files</p>
  </li>
  <li>
    <p>Python plugin is now available on iOS.  Includes all features available on macOS (<a href="/documentation/0.9/components/run_python_file.html">run file</a> and <a href="/documentation/0.9/components/run_python_string.html">run string</a> actions, <a href="/documentation/0.9/components/python_file_resource.html">Python file resources</a>, and the <a href="/documentation/0.9/expressions/index.html">expression parser</a> functions <code class="language-plaintext highlighter-rouge">py_eval</code> and <code class="language-plaintext highlighter-rouge">py_call</code>).</p>
  </li>
  <li>
    <p>Functions <code class="language-plaintext highlighter-rouge">message</code>, <code class="language-plaintext highlighter-rouge">warning</code>, and <code class="language-plaintext highlighter-rouge">error</code> are now available to code executed by the Python plugin</p>
  </li>
  <li>
    <p>Python plugin now embeds Python 3.7 (instead of 2.7).  In addition, the plugin now includes its own copies of Python and NumPy (no external Python installation required).</p>
  </li>
  <li>
    <p>Removed <code class="language-plaintext highlighter-rouge">MWKStream</code> class from Python data tools</p>
  </li>
  <li>
    <p>Python tools now support Python 2.7 and 3.7.  (Python 3.6 is no longer supported.)</p>
  </li>
  <li>
    <p>MATLAB tools now require MATLAB R2016b or later</p>
  </li>
</ul>

<h3 id="documentation-and-examples">Documentation and Examples</h3>

<ul>
  <li>
    <p>Added iOS <a href="/documentation/0.9/guide/installation.html#ios">installation</a> and <a href="/documentation/0.9/guide/installation.html#id4">configuration</a> instructions</p>
  </li>
  <li>
    <p>Updated <a href="/documentation/0.9/guide/running.html">Running an Experiment</a> to cover launching and connecting to MWorks on iOS</p>
  </li>
  <li>
    <p>Added iOS version of <a href="https://github.com/mworks/mworks/tree/0.9/examples/Examples/FindTheCircle">FindTheCircle</a> example</p>
  </li>
  <li>
    <p><a href="/documentation/0.9/guide/data_analysis.html">Analyzing Experimental Data</a> now explains how to <a href="/documentation/0.9/guide/data_analysis.html#ios">access event files stored on iOS</a></p>
  </li>
  <li>
    <p>Added descriptions of current and legacy <a href="/documentation/0.9/reference/event_file_format/index.html">event file formats</a></p>
  </li>
  <li>
    <p>Added documentation on the Python <code class="language-plaintext highlighter-rouge">mworkscore</code> module and the execution environment of embedded Python code (see <a href="/documentation/0.9/components/run_python_file.html">Run Python File</a>)</p>
  </li>
  <li>
    <p>Other minor improvements</p>
  </li>
</ul>

<h3 id="internalsdevelopment">Internals/Development</h3>

<ul>
  <li>
    <p>Upgraded to new versions of several supporting libraries:</p>

    <ul>
      <li>boost: 1.66.0 ➞ 1.69.0</li>
      <li>zeromq: 4.2.3 ➞ 4.3.1</li>
      <li>msgpack: 2.1.5 ➞ 3.1.1</li>
    </ul>
  </li>
  <li>
    <p>Added <a href="https://www.openssl.org">OpenSSL</a> 1.1.1b, <a href="https://www.python.org">Python</a> 3.7.3, <a href="https://www.numpy.org">NumPy</a> 1.16.2, and <a href="https://sqlite.org">SQLite</a> 3.27.2 to supporting libs</p>
  </li>
  <li>
    <p>All code is now compiled using the C++14 and C11 language standards</p>
  </li>
  <li>
    <p>Added support for stimuli with child components</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">BasicTransformStimulus</code> now enables blending when drawing; subclasses can override the blend equation</p>
  </li>
  <li>
    <p>Added new <code class="language-plaintext highlighter-rouge">MacOSOpenGLContextManager</code> (used only on systems running macOS 10.13 or later that support Metal).  Old <code class="language-plaintext highlighter-rouge">MacOSOpenGLContextManager</code> is now called <code class="language-plaintext highlighter-rouge">LegacyMacOSOpenGLContextManager</code>.</p>
  </li>
  <li>
    <p><code class="language-plaintext highlighter-rouge">IOSOpenGLContextManager</code>, <code class="language-plaintext highlighter-rouge">MacOSOpenGLContextManager</code>, and <code class="language-plaintext highlighter-rouge">LegacyMacOSOpenGLContextManager</code> are now private to MWorksCore.  Plugins that need access to platform-specific resources should use <code class="language-plaintext highlighter-rouge">AppleOpenGLContextManager</code>.</p>
  </li>
</ul>

      </div>
    </content>
  </entry>
  
  <entry>
    <title type="text">MWorks for iOS now available</title>
    <link rel="alternate" type="text/html" href="https://mworks.github.io/news/2018/06/12/mworks-for-ios/" />
    <id>https://mworks.github.io/news/2018/06/12/mworks-for-ios</id>
    <updated>2018-06-12T00:00:00-04:00</updated>
    
    
    <author>
      <name>Christopher Stawarz</name>
      <uri>https://github.com/cstawarz</uri>
    </author>
    
    
    
    
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>MWorks for iOS is now <a href="https://apps.apple.com/us/app/mworks/id1389408331?ls=1">available on the App Store</a>.</p>

<p>MWorks’ iOS app is a port of MWServer to the iOS platform.  It supports nearly all of the <a href="/documentation/latest/components/">component types</a> available on macOS.  (The only exceptions are some <a href="https://mworks.tenderapp.com/kb/ios-app/inputoutput-devices">I/O devices</a> and Python actions and resources, though the latter may be added in a subsequent release.)  The app can load and run MWorks experiments stored locally or in the cloud, or you can connect to and control it from MWClient on a Mac.</p>

<p>The current release (version 0.8.1) requires an iPad running iOS 11.4 or later.  It is compatible with <a href="/news/2018/04/27/0.8-released/">MWorks 0.8</a> on macOS.</p>

<p>For more information, visit the <a href="https://mworks.tenderapp.com/kb/ios-app">iOS app</a> section in the <a href="https://mworks.tenderapp.com/kb">knowledge base</a>.  If you have any questions, please <a href="https://mworks.tenderapp.com/discussion/new">contact us</a>.</p>

      </div>
    </content>
  </entry>
  
</feed>
