<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://labviewwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drjdpowell</id>
	<title>LabVIEW Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://labviewwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drjdpowell"/>
	<link rel="alternate" type="text/html" href="https://labviewwiki.org/wiki/Special:Contributions/Drjdpowell"/>
	<updated>2026-04-20T18:53:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31911</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31911"/>
		<updated>2023-01-26T17:12:48Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TPvM6u-IaeE Register Notify]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
[https://youtube.com/playlist?list=PL5AulxutFbdjFzxb-Lr6HItKR_2sG2aFA Full Playlist on YouTube]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/topic/16360-lvtn-messenger-library/?do=findComment&amp;amp;comment=127088 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library], [https://forums.ni.com/t5/JDP-Science-Tools/bd-p/5397 JDP Science Tools] and [https://bitbucket.org/drjdpowell/messenger-library/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31532</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31532"/>
		<updated>2022-01-07T11:39:00Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added link to missing video, plus full playlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TPvM6u-IaeE Register Notify]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
[https://youtube.com/playlist?list=PL5AulxutFbdjFzxb-Lr6HItKR_2sG2aFA Full Playlist on YouTube]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/topic/16360-lvtn-messenger-library/?do=findComment&amp;amp;comment=127088 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library], [https://forums.ni.com/t5/JDP-Science-Tools/bd-p/5397 JDP Science Tools] and [https://bitbucket.org/drjdpowell/messenger-library/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31531</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=31531"/>
		<updated>2021-12-20T16:52:38Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Add link to JDP Science Tools group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/topic/16360-lvtn-messenger-library/?do=findComment&amp;amp;comment=127088 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library], [https://forums.ni.com/t5/JDP-Science-Tools/bd-p/5397 JDP Science Tools] and [https://bitbucket.org/drjdpowell/messenger-library/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=GLA_Summit_2020/Future_Promises:_Borrowing_ideas_from_async_languages&amp;diff=30893</id>
		<title>GLA Summit 2020/Future Promises: Borrowing ideas from async languages</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=GLA_Summit_2020/Future_Promises:_Borrowing_ideas_from_async_languages&amp;diff=30893"/>
		<updated>2021-01-13T17:57:18Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Fix Youtube links (were going to wrong presentations)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Future Promises: Borrowing Ideas From Async Languages&#039;&#039;&#039; by James McNally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Futures and Promises are a concept that is core to asynchronous programming in many languages (JavaScript, Rust, C#).&lt;br /&gt;
&lt;br /&gt;
With asynchronous QMH models everywhere in LabVIEW, can&#039;t we leverage the concept too?&lt;br /&gt;
&lt;br /&gt;
This talk will introduce the terminology and demonstrate how they can work with existing constructs, and perhaps a dedicated API.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;youtube width=&amp;quot;800&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;MFO5VokFq-I&amp;lt;/youtube&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Presentation Links==&lt;br /&gt;
* [https://youtu.be/MFO5VokFq-I YouTube Video Link]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{ambox|text=Add links to internal wiki pages that would also help.}}&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
{{ambox|text=Add links to external resources that would also help.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:GLA Summit 2020]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=30171</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=30171"/>
		<updated>2020-07-15T15:17:35Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/topic/16360-lvtn-messenger-library/?do=findComment&amp;amp;comment=127088 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenger-library/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:Messenger_Library&amp;diff=29991</id>
		<title>Talk:Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:Messenger_Library&amp;diff=29991"/>
		<updated>2020-07-06T09:12:46Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The link to the following resource is not valid: A great summary of many Messenger Library sources, provided by Bob W Edwards.   --&amp;gt; Fixed, JDP&lt;br /&gt;
&lt;br /&gt;
[[Category:Pages with broken file links]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=29990</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=29990"/>
		<updated>2020-07-06T09:10:17Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Changed (broken) direct link to Bob Edwards summary with a link to his post (hopefully this won&amp;#039;t break)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/topic/16360-lvtn-messenger-library/?do=findComment&amp;amp;comment=127088 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=List_of_LabVIEW_Champions&amp;diff=8142</id>
		<title>List of LabVIEW Champions</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=List_of_LabVIEW_Champions&amp;diff=8142"/>
		<updated>2019-06-25T15:39:59Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{see also|LabVIEW Champion|LabVIEW Champions program FAQ}} &lt;br /&gt;
Complete List at NI.com: [https://forums.ni.com/t5/LabVIEW-Champions-Directory/tkb-p/3012 LabVIEW Champions]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Tenure&lt;br /&gt;
! Home&lt;br /&gt;
|-&lt;br /&gt;
| [[Albert Geven (LabVIEW Champion)|Albert Geven]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Netherlands&lt;br /&gt;
|-&lt;br /&gt;
| [[Alessandro Ricco (LabVIEW Champion)|Alessandro Ricco]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Italy&lt;br /&gt;
|-&lt;br /&gt;
| [[André Manzolli (LabVIEW Champion)|André Manzolli]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Brazil&lt;br /&gt;
|-&lt;br /&gt;
| [[Ben Rayner (LabVIEW Champion)|Ben Rayner]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Bill Meier (LabVIEW Champion)|Bill Meier]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Bogdan Iwinski (LabVIEW Champion)|Bogdan Iwinski]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| Poland&lt;br /&gt;
|-&lt;br /&gt;
| [[Brett Percy (LabVIEW Champion)|Brett Percy]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Australia&lt;br /&gt;
|-&lt;br /&gt;
| [[Bruce Ammons (LabVIEW Champion)|Bruce Ammons]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Buddy Haun (LabVIEW Champion)|Buddy Haun]]&lt;br /&gt;
| 2008-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Charles Ghommidh (LabVIEW Champion)|Charles Ghommidh]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| France&lt;br /&gt;
|-&lt;br /&gt;
| [[Chris Cilino (LabVIEW Champion)|Chris Cilino]]&lt;br /&gt;
| 2017-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Chris Roebuck (LabVIEW Champion)|Chris Roebuck]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| United Kingdom&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[Christian Altenbach (LabVIEW Champion)|Christian Altenbach]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Christophe Salzmann (LabVIEW Champion)|Christophe Salzmann]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Christopher G. Relf (LabVIEW Champion)|Christopher G. Relf]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Dany Allard (LabVIEW Champion)|Dany Allard]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| Canada&lt;br /&gt;
|-&lt;br /&gt;
| [[Darin Kinion (LabVIEW Champion)|Darin Kinion]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[David Thomson (LabVIEW Champion)|David Thomson]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Dennis Knutson (LabVIEW Champion)|Dennis Knutson]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Ed Dickens (LabVIEW Champion)|Ed Dickens]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Fabiola De la Cueva (LabVIEW Champion)|Fabiola De la Cueva]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Gaurav Kulkarni (LabVIEW Champion)|Gaurav Kulkarni]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| India&lt;br /&gt;
|-&lt;br /&gt;
| [[Jack Dunaway (LabVIEW Champion)|Jack Dunaway]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Jeff Bohrer (LabVIEW Champion)|Jeff Bohrer]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Jim Kring (LabVIEW Champion)|Jim Kring]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Joe Hoskins (LabVIEW Champion)|Joe Hoskins]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Joerg Hampel (LabVIEW Champion)|Joerg Hampel]]&lt;br /&gt;
| 2018-Present&lt;br /&gt;
| Austria&lt;br /&gt;
|-&lt;br /&gt;
| [[Jonathon Green (LabVIEW Champion)|Jonathon Green]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| Australia&lt;br /&gt;
|-&lt;br /&gt;
| [[Justin Goeres (LabVIEW Champion)|Justin Goeres]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Leigh Christian (LabVIEW Champion)|Leigh Christian]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Marcus Johnson (LabVIEW Champion)|Marcus Johnson]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| Sweden&lt;br /&gt;
|-&lt;br /&gt;
| [[Mark Balla (LabVIEW Champion)|Mark Balla]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Mark Ridgley (LabVIEW Champion)|Mark Ridgley]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Mark Yedinak (LabVIEW Champion)|Mark Yedinak]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Michael Aivaliotis (LabVIEW Champion)|Michael Aivaliotis]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Canada&lt;br /&gt;
|-&lt;br /&gt;
| [[Mike Porter (LabVIEW Champion)|Mike Porter]]&lt;br /&gt;
| 2008-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Muthuraman Sudalaimuthu (LabVIEW Champion)|Muthuraman Sudalaimuthu]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| India&lt;br /&gt;
|-&lt;br /&gt;
| [[Nancy Hollenback (LabVIEW Champion)|Nancy Hollenback]]&lt;br /&gt;
| 2008-2010&amp;lt;ref&amp;gt;In 2010, Nancy joined NI.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Norm Kirchner (LabVIEW Champion)|Norm Kirchner]]&lt;br /&gt;
| 2008-2008&amp;lt;ref&amp;gt;Months after becoming a Champion, Norm joined NI.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Quentin &amp;quot;Q&amp;quot; Alldredge (LabVIEW Champion)|Quentin &amp;quot;Q&amp;quot; Alldredge]]&lt;br /&gt;
| 2018-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Parag Deshpande (LabVIEW Champion)|Parag Deshpande]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| India&lt;br /&gt;
|-&lt;br /&gt;
| [[Pavan Bathla (LabVIEW Champion)|Pavan Bathla]]&lt;br /&gt;
| 2007-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Piotr Maj (LabVIEW Champion)|Piotr Maj]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| Poland&lt;br /&gt;
|-&lt;br /&gt;
| [[Putnam W. Monroe Jr. (LabVIEW Champion)|Putnam W. Monroe Jr.]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Ray Robichaud (LabVIEW Champion)|Ray Robichaud]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Canada&lt;br /&gt;
|-&lt;br /&gt;
| [[Richard Sorrells (LabVIEW Champion)|Richard Sorrells]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Rick Beauchaine (LabVIEW Champion)|Rick Beauchaine]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Richard Thomas (LabVIEW Champion)|Richard Thomas]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| England&lt;br /&gt;
|-&lt;br /&gt;
| [[Roger Isaksson (LabVIEW Champion)|Roger Isaksson]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| Sweden&lt;br /&gt;
|-&lt;br /&gt;
| [[Rolf Kalbermatter (LabVIEW Champion)|Rolf Kalbermatter]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| Netherlands&lt;br /&gt;
|-&lt;br /&gt;
| [[Samuel James (LabVIEW Champion)|Samuel James]]&lt;br /&gt;
| 2012-Present&lt;br /&gt;
| India&lt;br /&gt;
|-&lt;br /&gt;
| [[Samuel Taggart (LabVIEW Champion)|Samuel Taggart]]&lt;br /&gt;
| 2018-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Saverio Mercurio (LabVIEW Champion)|Saverio Mercurio]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Scott Hannahs (LabVIEW Champion)|Scott Hannahs]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Shane O&#039;Neill (LabVIEW Champion)|Shane O&#039;Neill]]&lt;br /&gt;
| 2010-Present&lt;br /&gt;
| Switzerland&lt;br /&gt;
|-&lt;br /&gt;
| [[Steve Watts (LabVIEW Champion)|Steve Watts]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| United Kingdom&lt;br /&gt;
|-&lt;br /&gt;
| [[Tim Robinson (LabVIEW Champion)|Tim Robinson]]&lt;br /&gt;
| 2013-Present&lt;br /&gt;
| United States&lt;br /&gt;
|-&lt;br /&gt;
| [[Tomi Maila (LabVIEW Champion)|Tomi Maila]]&lt;br /&gt;
| 2007-Present&lt;br /&gt;
| Finland&lt;br /&gt;
|-&lt;br /&gt;
| [[Urs Lauterburg (LabVIEW Champion)|Urs Lauterburg]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Switzerland&lt;br /&gt;
|-&lt;br /&gt;
| [[Yair Neeman (LabVIEW Champion)|Yair Neeman]]&lt;br /&gt;
| 2007-Present&lt;br /&gt;
| Israel&lt;br /&gt;
|-&lt;br /&gt;
| [[Zbigniew Sobków (LabVIEW Champion)|Zbigniew Sobków]]&lt;br /&gt;
| 2005-Present&lt;br /&gt;
| Poland&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:LabVIEW Champions]]&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:Source_Code_Control_Tools&amp;diff=8129</id>
		<title>Talk:Source Code Control Tools</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:Source_Code_Control_Tools&amp;diff=8129"/>
		<updated>2019-06-20T21:13:18Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Good catch, James. I looked at the website of SourceTree and as it doesn&#039;t mention HG anywhere I assumed they dropped support for Mercurial? In the documentation, it still mentions it though.&lt;br /&gt;
--[[User:Joerg.hampel|Joerg.hampel]] ([[User talk:Joerg.hampel|talk]]) 18:57, 20 June 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
I set up Sourcetree a week ago and had no trouble adding both HG and Git repos.  So I thought I&#039;d add it. --James&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:Source_Code_Control_Tools&amp;diff=8128</id>
		<title>Talk:Source Code Control Tools</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:Source_Code_Control_Tools&amp;diff=8128"/>
		<updated>2019-06-20T21:12:29Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Good catch, James. I looked at the website of SourceTree and as it doesn&#039;t mention HG anywhere I assumed they dropped support for Mercurial? In the documentation, it still mentions it though.&lt;br /&gt;
--[[User:Joerg.hampel|Joerg.hampel]] ([[User talk:Joerg.hampel|talk]]) 18:57, 20 June 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
I set up Sourcetree a week ago and had no trouble adding both HG and Git repos.  So I thought I&#039;d add it.&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Source_Code_Control_Tools&amp;diff=8125</id>
		<title>Source Code Control Tools</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Source_Code_Control_Tools&amp;diff=8125"/>
		<updated>2019-06-20T18:53:05Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source Code Control Tools are used to interact with [[Version Control Systems]]. &lt;br /&gt;
&lt;br /&gt;
==Direct LabVIEW interfaces==&lt;br /&gt;
The LabVIEW 8.6 help includes a list of SCC tools that integrate with LabVIEW&#039;s source code control interface:&lt;br /&gt;
[http://zone.ni.com/reference/en-XX/help/371361E-01/lvconcepts/using_source_code/]&lt;br /&gt;
&lt;br /&gt;
[[Agent SVN]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Perforce]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Microsoft Visual SourceSafe]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Microsoft Team System]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[MKS Source Integrity]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IBM Rational ClearCase]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Serena Version Manager (PVCS)]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Seapine Surrond SCM]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Borland StarTeam]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Telelogic Synergy]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PushOK (CVS and SVN plugins)]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[ionForge Evolution]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page offers a comparison of different tools:&amp;lt;br&amp;gt; [[SCC Tool Comparison]]&lt;br /&gt;
&lt;br /&gt;
==Stand-Alone Tools==&lt;br /&gt;
&lt;br /&gt;
Depending on the Version Control System used, there are usually various third-party tools that offer additional features or platform-specific UX. Popular examples are&lt;br /&gt;
&lt;br /&gt;
* [https://tortoisesvn.net TortoiseSvn] for use with [[Subversion]]&lt;br /&gt;
* [https://www.sourcetreeapp.com SourceTree] for use with [[Git]] and [[HG]]&lt;br /&gt;
&lt;br /&gt;
[[Category:SCC]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6853</id>
		<title>LabVIEW Wiki:Featured content</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6853"/>
		<updated>2019-03-16T15:53:13Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[GDevCon]] - the new Independent LabVIEW Conference (see [http://youtube.com/gdevcon GDevCon&#039;s YouTube channel])&lt;br /&gt;
&lt;br /&gt;
[[Actor_Framework_is_not_as_hard_as_you_think_and_here_is_why…]]&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6852</id>
		<title>LabVIEW Wiki:Featured content</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6852"/>
		<updated>2019-03-16T15:48:56Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Adding some recent work to Featured Content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[GDevCon]] - the new Independent LabVIEW Conference (see [http://youtube.com/gdevcon GDevCon&#039;s YouTube channel])&lt;br /&gt;
&lt;br /&gt;
[[Actor_Framework_is_not_as_hard_as_you_think_and_here_is_why…]]&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6851</id>
		<title>LabVIEW Wiki:Featured content</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Featured_content&amp;diff=6851"/>
		<updated>2019-03-16T08:59:44Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[GDevCon]] - the new Independent LabVIEW Conference (see [http://youtube.com/gdevcon GDevCon&#039;s YouTube channel])&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki_talk:Quick_index&amp;diff=6850</id>
		<title>LabVIEW Wiki talk:Quick index</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki_talk:Quick_index&amp;diff=6850"/>
		<updated>2019-03-16T08:54:08Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Created page with &amp;quot;This index seems a bit useless.  Consider removing, or reducing the number of entries to one per letter.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This index seems a bit useless.  Consider removing, or reducing the number of entries to one per letter.&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6059</id>
		<title>Talk:List of LabVIEW Champions</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6059"/>
		<updated>2019-03-04T20:05:12Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Shouldn&#039;t this page just point to the complete list at NI.com?&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6058</id>
		<title>Talk:List of LabVIEW Champions</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6058"/>
		<updated>2019-03-04T20:04:52Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery&amp;gt;&lt;br /&gt;
7&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Shouldn&#039;t this page just point to the complete list at NI.com?&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6057</id>
		<title>Talk:List of LabVIEW Champions</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:List_of_LabVIEW_Champions&amp;diff=6057"/>
		<updated>2019-03-04T20:04:13Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Created page with &amp;quot;Shouldn&amp;#039;t this page just point to the complete list at no.com?&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shouldn&#039;t this page just point to the complete list at no.com?&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6055</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6055"/>
		<updated>2019-03-04T10:54:10Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/applications/core/interface/file/attachment.php?id=13899 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6047</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6047"/>
		<updated>2019-02-28T21:12:08Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added link to Bob Edwards&amp;#039; sumary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
A [https://lavag.org/applications/core/interface/file/attachment.php?id=13891 great summary of many Messenger Library sources], provided by Bob W Edwards.&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Mercurial&amp;diff=6045</id>
		<title>Mercurial</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Mercurial&amp;diff=6045"/>
		<updated>2019-02-28T20:40:54Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction  =&lt;br /&gt;
&lt;br /&gt;
{{TOCright}}[[Image:Logo.Mercurial.png|right]]&lt;br /&gt;
&lt;br /&gt;
Mercurial is a [[Source Code Control|Source Code Control]] system by Selenic, it&#039;s key feature is the distributed nature of the system. This means that changes (commits) are stored in a local repository, which can be sent (pushed) to a central repository and which can be downloaded (pulled) by others.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
Joel Spolsky has written a How-To and Why-To page called [http://Www.hginit.com HG init] (hg is the chemical symbol for Mercury).&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
Mercurial stores it&#039;s setting in a file called &#039;hgrc&#039; inside a hidden folder &#039;.hg&#039;&lt;br /&gt;
&lt;br /&gt;
== Setting up LVMerge  ==&lt;br /&gt;
&lt;br /&gt;
[http://zone.ni.com/reference/en-XX/help/371361F-01/lvhowto/configmerge_thirdparty/ LVMerge] can be used by Mercurial as a Merge tool. Add the following text to the hgrc file:&lt;br /&gt;
&amp;lt;pre&amp;gt;[merge-tools]&lt;br /&gt;
LVMerge.args = $base $other $local $output&lt;br /&gt;
LVMerge.executable = C:\Program Files\National Instruments\Shared\LabVIEW Merge\LVMerge.exe&lt;br /&gt;
LVMerge.gui = True&lt;br /&gt;
LVMerge.binary = True&lt;br /&gt;
[merge-patterns]&lt;br /&gt;
**.vi = LVMerge&lt;br /&gt;
**.ctl = LVMerge&lt;br /&gt;
**.lvclass = LVMerge&lt;br /&gt;
**.xctl = LVMerge&lt;br /&gt;
**.lvlib =LVMerge&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can now use TortoiseHG to perfrom a merge ([[Merge with TortoiseHG|How-To]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting up LVDiff ==&lt;br /&gt;
&lt;br /&gt;
[http://meta-diff.sourceforge.net/ LVDiff] is a software package that uses the built in diff-functionality from LabVIEW to do command line based LVDiffs.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
First thing is to [http://meta-diff.sourceforge.net/ download] LVDiff, copy the contents of the zip-file to a location where you have writing priviliges (lvdiff uses a local ini file).&amp;lt;br /&amp;gt;&lt;br /&gt;
Alternative: Installer from [http://decibel.ni.com/content/groups/mercurial NI Community Mercurial User Group]&lt;br /&gt;
&lt;br /&gt;
=== Adjust ===&lt;br /&gt;
&lt;br /&gt;
Then you need to open up the lvdiff.vi and implement these changes.&lt;br /&gt;
&lt;br /&gt;
[[Image:Lvdiffcopy.png]]&lt;br /&gt;
&lt;br /&gt;
This snippet (the actual code inside lvdiff copy is shown) tests if the filenames are the same and if that&#039;s the case it calls a VI called lvdiffcopy, which creates a copy of the file2.&lt;br /&gt;
For LabVIEW 2011 (and up) a patch file is available, use this to replace lvdiff.vi in the lvdiff installer folder[[File:Lvdiff_2011_patch.vi|lvdiff 2011 patch]].&lt;br /&gt;
&lt;br /&gt;
=== Configure ===&lt;br /&gt;
&lt;br /&gt;
To be able to select lvdiff as the diff tool you need to add the following settings to the [merge-tools] section of the hgrc configuration file:&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdiff.diffargs = $child $parent&lt;br /&gt;
lvdiff.executable =C:\Program Files\lvdiff\lvdiff.exe&lt;br /&gt;
lvdiff.gui = True&lt;br /&gt;
lvdiff.binary = True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using TortoiseHg 1.0 or later, you can add a [diff-patterns] section to your hgrc file, analogous to the merge-patterns section mentioned above. This will enable automatic selection of the visual diff tool (see [http://tortoisehg.bitbucket.org/manual/1.0/common.html#word-diffs]):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[diff-patterns]&lt;br /&gt;
**.vi = lvdiff&lt;br /&gt;
**.ctl = lvdiff&lt;br /&gt;
**.lvclass = lvdiff&lt;br /&gt;
**.xctl = lvdiff&lt;br /&gt;
**.lvlib = lvdiff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start LVDiff ===&lt;br /&gt;
&lt;br /&gt;
You can start lvdiff in TorsoiseHg in the &#039;commit&#039; dialog with right-click and &#039;Visual Diff&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Image:StartVisualDiff.png]]&lt;br /&gt;
&lt;br /&gt;
In the following dialog, select &#039;LVDiff&#039; and double click on the VI to diff:&lt;br /&gt;
&lt;br /&gt;
[[Image:HG_LVDIffStart.png]]&lt;br /&gt;
&lt;br /&gt;
After this LVdiff will launch LabVIEW and both VI (current and committed) will be compared.&lt;br /&gt;
&lt;br /&gt;
== Ignoring files ==&lt;br /&gt;
&lt;br /&gt;
Mercurial stores general ignore patterns in a file called &#039;.hgignore&#039; in the repository root, so you can add the patterns to the repository. I use the following patterns&lt;br /&gt;
&amp;lt;pre&amp;gt;.ogp$&lt;br /&gt;
/built*$&lt;br /&gt;
/build*$&lt;br /&gt;
.lvlps$&lt;br /&gt;
.aliases$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Globally ignoring files ===&lt;br /&gt;
If you&#039;re using TortoiseHG you can use a global ignore file, by adding the following in your %profile%\mercurial.ini file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ui]&lt;br /&gt;
...&lt;br /&gt;
ignore = %userprofile%\.hgignore&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Next to the mercurial.ini file you create the reference .hgignore file with the contents of your choice ([http://programmer.brettveenstra.com/2010/02/27/mercurial-on-windows-tip-global-ignore-file/ source]).&lt;br /&gt;
&lt;br /&gt;
= Performing a merge  =&lt;br /&gt;
&lt;br /&gt;
The following conditions needs to be true to be able to perform a merge:&lt;br /&gt;
&lt;br /&gt;
*All local changes needs to be commited (hg st should only show&amp;amp;nbsp;?)&lt;br /&gt;
*A changeset is pushed by another user to the central repository&lt;br /&gt;
*The other changeset is not yet pulled&lt;br /&gt;
&lt;br /&gt;
The merge will try to detect the differences and call LVMerge if necesarry, LVmerge will show four VIs:&lt;br /&gt;
&lt;br /&gt;
*Base, the base VI which was present in the changeset that is the same on both repositories&lt;br /&gt;
*Mine, local commited VI&lt;br /&gt;
*Their, remote VI with edits from the other user&lt;br /&gt;
&lt;br /&gt;
These are not editable.&lt;br /&gt;
&lt;br /&gt;
*Resulting, this is the VI that will be stored to disc after the merge finalizes. This file can be edited by the user&lt;br /&gt;
&lt;br /&gt;
For each diff LVMerge will give options to use either, &#039;base&#039;, &#039;mine&#039; or &#039;their&#039; code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the merge the code should be committed and pushed.&lt;br /&gt;
&lt;br /&gt;
Most Mercurial Clients will show a graph with the following layout:&lt;br /&gt;
&lt;br /&gt;
[[Image:MergeTrackHG.png|border]]&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the same graph from the &#039;other&#039; user, which actually performed the merge:&lt;br /&gt;
&lt;br /&gt;
[[Image:MergeTrackHG_Other.png|border]]&lt;br /&gt;
&lt;br /&gt;
Here you see the opposite actions, two changesets in the local repo and one in the remote. Only difference is the moment of branching.&lt;br /&gt;
&lt;br /&gt;
= Mercurial clients  =&lt;br /&gt;
&lt;br /&gt;
On Windows[[Image:Logo.Windows.png]], Mac[[Image:Logo.Mac.png]] and&amp;amp;nbsp; Linux [[Image:Logo.Linux.png]], there is a command line client called &#039;hg&#039;. On windows there is a context menu tool called [http://tortoisehg.bitbucket.io TortoiseHG] based on the popular TortoiseSVN and TortoiseCVS tools&lt;br /&gt;
&lt;br /&gt;
= External Links  =&lt;br /&gt;
&lt;br /&gt;
*[http://mercurial.selenic.com Official website]&lt;br /&gt;
*[http://www.hginit.com HG Init]&lt;br /&gt;
*[http://hgbook.red-bean.com/ Mercurial: The Definitive Guide]&lt;br /&gt;
*[http://redline6561.livejournal.com/362393.html Setting Up Mercurial with Apache]&lt;br /&gt;
*[http://kiln.stackexchange.com Kiln / Mercurial Knowledge site]&lt;br /&gt;
*[http://decibel.ni.com/content/groups/mercurial NI Community Mercurial User Group]&lt;br /&gt;
&lt;br /&gt;
[[Category:SCC]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6035</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6035"/>
		<updated>2019-02-21T20:02:08Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a free package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6034</id>
		<title>Messenger Library Addresses</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6034"/>
		<updated>2019-02-21T20:01:06Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Addresses&#039;&#039;&#039; in [[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
At its simplest, an &amp;quot;address&amp;quot; in [[Messenger_Library]] is just something to which one can send a message.  But it is also Messenger Library&#039;s primary feature, as there are many types of addresses that allow important functionality and high flexibility.  They are implemented as a set of LVOOP classes, but detailed knowledge of LVOOP is not needed to use them.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of the different types of addresses.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Send&#039;&#039;&#039; is the most generic class (&amp;quot;parent&amp;quot; class); any other address can be carried on a &amp;quot;Send&amp;quot;-class wire.  &amp;quot;Send&amp;quot; defines the key method (subVI) of an address: &amp;quot;Send.vi&amp;quot;, to send a message.  There are a large number of extensions of this core method, designed to support the use of various [[Messenger Library Messaging Patterns|messaging patterns]].  For example, to send a message and wait for a reply.   &lt;br /&gt;
&lt;br /&gt;
A secondary method of the &amp;quot;Send&amp;quot; class (and thus of all addresses) is &amp;quot;Valid.vi&amp;quot;, which indicates if a message sent to an address will actually go somewhere.  An address of the &amp;quot;Send&amp;quot; class itself serves as a &amp;quot;null&amp;quot; address, and thus messages sent to it do not go anywhere and so it is not &amp;quot;Valid&amp;quot;.  Note that being not &amp;quot;valid&amp;quot; is not the same as there being an error on trying to send to an address.  Though most subtypes of addresses will thow an error if they are not valid (since that indicates a failure of the underlying communication), sending to the &amp;quot;null&amp;quot; address is not an error condition (see also: &amp;quot;Observers&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Messengers&#039;&#039;&#039; are [[Messenger_Mibrary_Addresses|addresses]] that actually specify an underlying communication means.   A QueueMessenger carries messages on a LabVIEW Queue, an Event Messenger uses a User Event, and a NotifierMessgenger wraps a Notifier.   All these types impliment (&amp;quot;override&amp;quot;) &amp;quot;Send.vi&amp;quot; of the parent &amp;quot;Send&amp;quot; class.&lt;br /&gt;
&lt;br /&gt;
Messengers have the additional methods of &amp;quot;Create&amp;quot; and &amp;quot;Destroy&amp;quot;, which create and release the underlying communication reference.&lt;br /&gt;
&lt;br /&gt;
Note that from the point-of-view of the sender, all Messengers are interchangable, as they all impliment &amp;quot;Send&amp;quot; and &amp;quot;Valid&amp;quot;.  Only on the receiving end is their use different. QueueMessengers call &amp;quot;Receive.vi&amp;quot; to dequeue messages; EventMessengers are registered to an Event Structure, etc.   This was the key initial motivation of Messenger Library: to make the sender of a message be able to use any communication method, as specified by the receiver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TCP Messengers:&#039;&#039;&#039; Basic Messengers only communicate locally inside a LabVIEW application or instance; TCP Messengers extend communiction between instances and/or computers, via TCP/IP.   The implimentation pattern is Client-Server.   There are TCP extensions of both Queue- and EventMessengers.  In both cases, creating the Messenger starts up a TCP Server process, which accepts remote connections and forwards all received messages into the Queue or User Event.  The receiving process uses the same API as it would with a local Queue- or EventMessenger.  Note that this means conversion of a local-only component to a network-capable one is very easy and quick.&lt;br /&gt;
&lt;br /&gt;
The client side is provided by &amp;quot;RemoteTCPMessenger&amp;quot;, which creates a client connection to a remote server (identified by a &amp;quot;service name&amp;quot; and ip address).   Messages sent to this Messenger are sent to the remote process.&lt;br /&gt;
&lt;br /&gt;
The TCP Messengers are designed to work with the messaging patterns of Messenger Library.   They automatically route replies and notification messages back through the same TCP connection as the initial request and registration messages.  Note that this means that one must keep a RemoteTCPMessenger open in order to receive replies or notifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Tokens&#039;&#039;&#039; are a special type of temporary single-use address.  They are somewhat similar to &amp;quot;[https://en.m.wikipedia.org/wiki/Futures_and_promises futures]&amp;quot; of other languages, and generally serve to refer to the yet-to-be-received replies to a messages in the &amp;quot;Scatter-Gather&amp;quot; messaging  pattern.  A Future Token is an address that can only ever accept one message (sending to a Token twice results in an error), and receiving that message, via a &amp;quot;Redeem Token&amp;quot; method, destroys the Token.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observers:&#039;&#039;&#039; Observers are the &amp;quot;force multipliers&amp;quot; of addresses.  They do not represent the actual means of sending messages themselves; instead, they &amp;quot;wrap&amp;quot; other addresses with extended functionality.  Each Observer can contain multiple other addresses (copies of messages sent to the Observer are sent to each contained address) and, crucially, a &amp;quot;Translator&amp;quot;, an object that alters messages.  Via translators, an Observer can do things like relabel a message, or substitute a different message, or place the message inside an &amp;quot;Outer Envelope&amp;quot; (a message that contains another message).  &lt;br /&gt;
&lt;br /&gt;
Observers have the key methods of &amp;quot;Create Observer&amp;quot;, which allows the combination of multiple addreses into one Observer, and &amp;quot;Translate&amp;quot;, a polymorphic VI that allows the specification of what mesage translation to do.&lt;br /&gt;
&lt;br /&gt;
The motivation behind &amp;quot;Observers&amp;quot; is to support &amp;quot;observation&amp;quot; of one process by another.  This is to be contrasted with the more ususal &amp;quot;command&amp;quot; of one process of another.  The difference is illustrated by thinking of process S sending a message to process R.  If this message represents a &amp;quot;command&amp;quot; from S to R, then S must &amp;quot;know&amp;quot; R.  R defines what commands it can handle, and S must know the command to send.  Also, a failure to execute the command is a failure of S, since it has failed to get its command done.  If, instead, the message represents the observation of S by R, then the &amp;quot;active&amp;quot; party is R.   S is providing information that R chooses what to do with.  It is S&#039;s job to provide the information, but it is not &amp;quot;commanding&amp;quot; R to do anything, and shouldn&#039;t need to know what &amp;quot;command&amp;quot; R should execute on receiving the message.  R should define the command, and thus should control the command-element of the message (S supplies the data).  &amp;quot;Observer&amp;quot; addresses support this kind of idea, as they allow the receiving process to pre-configure an address that defines aspects of the messages that it will receive.&lt;br /&gt;
&lt;br /&gt;
The most basic (and common) use of an Observer address is to configure the relabeling of a message.  For example, a sender might send messages labelled &amp;quot;Temperature&amp;quot;, but the observing process may provide an Observer address configured to relabel the message &amp;quot;Record Main Furnace Temperature&amp;quot;, representing a command to itself of what to do with the data.&lt;br /&gt;
&lt;br /&gt;
Error-handling note: Observer address never produce an error when calling Send on them.  As the sender is not instigating the observation, it should not be a failure to it if the observation has failed.  An Observer Address will (silently) drop any contained address that produces an error on a Send call.   This simplifies programming in situations where temporary processes observe a longer-running process, as &amp;quot;dead&amp;quot; addresses are automatically dropped.  Note that this means that an Observer can change on calling &amp;quot;Send&amp;quot;.  Observer addresses are by-value collections containing by-reference Messengers, and should be treated as by-value objects.&lt;br /&gt;
&lt;br /&gt;
An Observer will read as &amp;quot;Valid&amp;quot; if any contained address is valid.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Actor Address:&#039;&#039;&#039; The [https://en.m.wikipedia.org/wiki/Actor_model Actor Model] describes a way of programming that uses independant processes that interact via passing messages.  Actors can also be created (&amp;quot;launched&amp;quot;) by other actors.  LabVIEW comes with an existing implimentation of this idea, the &amp;quot;Actor Framework&amp;quot;, but this is an alternate design based on Messeger-Library.  Please note that there are very significamt differences between the two. &lt;br /&gt;
&lt;br /&gt;
An &amp;quot;actor&amp;quot; address class in Messenger Library identifies a VI (called &amp;quot;Actor.vi&amp;quot;) that will be asynchronously run when the actor is &amp;quot;launched&amp;quot; (Launch method called on the actor address).  After launch, the actor address contains a Messenger that will communicate with the new actor.  Sending to the actor address sends the message to the message-handling loop withing the actor VI.&lt;br /&gt;
&lt;br /&gt;
Creating a new type of &amp;quot;actor&amp;quot; involves copying a template class.  Several templates can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..).  The recomended templet is called &amp;quot;DEV&amp;quot;.   Note, however, that any message-handling loop design can be substituted, based on either a Queue- or EventMessenger.&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.  This allows one to see what actor/VI launch what, and gives the ability to open all front panels or block diagrams.&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6033</id>
		<title>Messenger Library Addresses</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6033"/>
		<updated>2019-02-21T19:58:49Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Wikipedia Future/Promise link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Addresses&#039;&#039;&#039; in [[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
At its simplest, an &amp;quot;address&amp;quot; in [[Messenger_Library]] is just something to which one can send a message.  But it is also Messenger Library&#039;s primary feature, as there are many types of addresses that allow important functionality and high flexibility.  They are implemented as a set of LVOOP classes, but detailed knowledge of LVOOP is not needed to use them.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of the different types of addresses.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Send&#039;&#039;&#039; is the most generic class (&amp;quot;parent&amp;quot; class); any other address can be carried on a &amp;quot;Send&amp;quot;-class wire.  &amp;quot;Send&amp;quot; defines the key method (subVI) of an address: &amp;quot;Send.vi&amp;quot;, to send a message.  There are a large number of extensions of this core method, designed to support the use of various [[Messenger Library Messaging Patterns|messaging patterns]].  For example, to send a message and wait for a reply.   &lt;br /&gt;
&lt;br /&gt;
A secondary method of the &amp;quot;Send&amp;quot; class (and thus of all addresses) is &amp;quot;Valid.vi&amp;quot;, which indicates if a message sent to an address will actually go somewhere.  An address of the &amp;quot;Send&amp;quot; class itself serves as a &amp;quot;null&amp;quot; address, and thus messages sent to it do not go anywhere and so it is not &amp;quot;Valid&amp;quot;.  Note that being not &amp;quot;valid&amp;quot; is not the same as there being an error on trying to send to an address.  Though most subtypes of addresses will thow an error if they are not valid (since that indicates a failure of the underlying communication), sending to the &amp;quot;null&amp;quot; address is not an error condition (see also: &amp;quot;Observers&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Messengers&#039;&#039;&#039; are [[Messenger_Mibrary_Addresses|addresses]] that actually specify an underlying communication means.   A QueueMessenger carries messages on a LabVIEW Queue, an Event Messenger uses a User Event, and a NotifierMessgenger wraps a Notifier.   All these types impliment (&amp;quot;override&amp;quot;) &amp;quot;Send.vi&amp;quot; of the parent &amp;quot;Send&amp;quot; class.&lt;br /&gt;
&lt;br /&gt;
Messengers have the additional methods of &amp;quot;Create&amp;quot; and &amp;quot;Destroy&amp;quot;, which create and release the underlying communication reference.&lt;br /&gt;
&lt;br /&gt;
Note that from the point-of-view of the sender, all Messengers are interchangable, as they all impliment &amp;quot;Send&amp;quot; and &amp;quot;Valid&amp;quot;.  Only on the receiving end is their use different. QueueMessengers call &amp;quot;Receive.vi&amp;quot; to dequeue messages; EventMessengers are registered to an Event Structure, etc.   This was the key initial motivation of Messenger Library: to make the sender of a message be able to use any communication method, as specified by the receiver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TCP Messengers:&#039;&#039;&#039; Basic Messengers only communicate locally inside a LabVIEW application or instance; TCP Messengers extend communiction between instances and/or computers, via TCP/IP.   The implimentation pattern is Client-Server.   There are TCP extensions of both Queue- and EventMessengers.  In both cases, creating the Messenger starts up a TCP Server process, which accepts remote connections and forwards all received messages into the Queue or User Event.  The receiving process uses the same API as it would with a local Queue- or EventMessenger.  Note that this means conversion of a local-only component to a network-capable one is very easy and quick.&lt;br /&gt;
&lt;br /&gt;
The client side is provided by &amp;quot;RemoteTCPMessenger&amp;quot;, which creates a client connection to a remote server (identified by a &amp;quot;service name&amp;quot; and ip address).   Messages sent to this Messenger are sent to the remote process.&lt;br /&gt;
&lt;br /&gt;
The TCP Messengers are designed to work with the messaging patterns of Messenger Library.   They automatically route replies and notification messages back through the same TCP connection as the initial request and registration messages.  Note that this means that one must keep a RemoteTCPMessenger open in order to receive replies or notifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Tokens&#039;&#039;&#039; are a special type of temporary single-use address.  They are somewhat similar to &amp;quot;[https://en.m.wikipedia.org/wiki/Futures_and_promises futures]&amp;quot; of other languages, and generally serve to refer to the yet-to-be-received replies to a messages in the &amp;quot;Scatter-Gather&amp;quot; messaging  pattern.  A Future Token is an address that can only ever accept one message (sending to a Token twice results in an error), and receiving that message, via a &amp;quot;Redeem Token&amp;quot; method, destroys the Token.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observers:&#039;&#039;&#039; Observers are the &amp;quot;force multipliers&amp;quot; of addresses.  They do not represent the actual means of sending messages themselves; instead, they &amp;quot;wrap&amp;quot; other addresses with extended functionality.  Each Observer can contain multiple other addresses (copies of messages sent to the Observer are sent to each contained address) and, crucially, a &amp;quot;Translator&amp;quot;, an object that alters messages.  Via translators, an Observer can do things like relabel a message, or substitute a different message, or place the message inside an &amp;quot;Outer Envelope&amp;quot; (a message that contains another message).  &lt;br /&gt;
&lt;br /&gt;
Observers have the key methods of &amp;quot;Create Observer&amp;quot;, which allows the combination of multiple addreses into one Observer, and &amp;quot;Translate&amp;quot;, a polymorphic VI that allows the specification of what mesage translation to do.&lt;br /&gt;
&lt;br /&gt;
The motivation behind &amp;quot;Observers&amp;quot; is to support &amp;quot;observation&amp;quot; of one process by another.  This is to be contrasted with the more ususal &amp;quot;command&amp;quot; of one process of another.  The difference is illustrated by thinking of process S sending a message to process R.  If this message represents a &amp;quot;command&amp;quot; from S to R, then S must &amp;quot;know&amp;quot; R.  R defines what commands it can handle, and S must know the command to send.  Also, a failure to execute the command is a failure of S, since it has failed to get its command done.  If, instead, the message represents the observation of S by R, then the &amp;quot;active&amp;quot; party is R.   S is providing information that R chooses what to do with.  It is S&#039;s job to provide the information, but it is not &amp;quot;commanding&amp;quot; R to do anything, and shouldn&#039;t need to know what &amp;quot;command&amp;quot; R should execute on receiving the message.  R should define the command, and thus should control the command-element of the message (S supplies the data).  &amp;quot;Observer&amp;quot; addresses support this kind of idea, as they allow the receiving process to pre-configure an address that defines aspects of the messages that it will receive.&lt;br /&gt;
&lt;br /&gt;
The most basic (and common) use of an Observer address is to configure the relabeling of a message.  For example, a sender might send messages labelled &amp;quot;Temperature&amp;quot;, but the observing process may provide an Observer address configured to relabel the message &amp;quot;Record Main Furnace Temperature&amp;quot;, representing a command to itself of what to do with the data.&lt;br /&gt;
&lt;br /&gt;
Error-handling note: Observer address never produce an error when calling Send on them.  As the sender is not instigating the observation, it should not be a failure to it if the observation has failed.  An Observer Address will (silently) drop any contained address that produces an error on a Send call.   This simplifies programming in situations where temporary processes observe a longer-running process, as &amp;quot;dead&amp;quot; addresses are automatically dropped.  Note that this means that an Observer can change on calling &amp;quot;Send&amp;quot;.  Observer addresses are by-value collections containing by-reference Messengers, and should be treated as by-value objects.&lt;br /&gt;
&lt;br /&gt;
An Observer will read as &amp;quot;Valid&amp;quot; if any contained address is valid.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Actor Address:&#039;&#039;&#039; The Actor Model describes a way of programming that uses independant processes that interact via passing messages.  Actors can also be created (&amp;quot;launched&amp;quot;) by other actors.  LabVIEW comes with an existing implimentation of this idea, the &amp;quot;Actor Framework&amp;quot;, but this is an alternate design based on Messeger-Library.  Please note that there are very significamt differences between the two. &lt;br /&gt;
&lt;br /&gt;
An &amp;quot;actor&amp;quot; address class in Messenger Library identifies a VI (called &amp;quot;Actor.vi&amp;quot;) that will be asynchronously run when the actor is &amp;quot;launched&amp;quot; (Launch method called on the actor address).  After launch, the actor address contains a Messenger that will communicate with the new actor.  Sending to the actor address sends the message to the message-handling loop withing the actor VI.&lt;br /&gt;
&lt;br /&gt;
Creating a new type of &amp;quot;actor&amp;quot; involves copying a template class.  Several templates can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..).  The recomended templet is called &amp;quot;DEV&amp;quot;.   Note, however, that any message-handling loop design can be substituted, based on either a Queue- or EventMessenger.&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.  This allows one to see what actor/VI launch what, and gives the ability to open all front panels or block diagrams.&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6030</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6030"/>
		<updated>2019-02-20T16:13:18Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added YouTube Instructional Videos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Youtube Instructional Videos on an example project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/boRwtOlfOk4 Messenger Library: Quick Introduction] ([https://youtu.be/d0PX-k4-aXQ and Added Comments])&lt;br /&gt;
* [https://youtu.be/2jMujwVonS8 Actor to Actor Communication]&lt;br /&gt;
* [https://youtu.be/i774UXu6RAg The Controller-Model-View principle]&lt;br /&gt;
* [https://youtu.be/CbtHLQeftK8 Recurring Event Methods]&lt;br /&gt;
* [https://youtu.be/TCzFg6DBqZc DEV Template Event and Message Handling]&lt;br /&gt;
* [https://youtu.be/P1NXUYIldkE Asynchronous Dialogs]&lt;br /&gt;
* [https://youtu.be/TIFY2KgXlzA Notification “Hookup” of a dynamic actor (and generic messages)]&lt;br /&gt;
* [https://youtu.be/rKANBR1d65g Messenger Library and TCP]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6029</id>
		<title>Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6029"/>
		<updated>2019-02-20T15:47:37Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: /* Other Actor Implementation Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Actor Oriented Design Patterns&#039;&#039;&#039; are software patterns that utilize the Actor Model (for example [[Actor Framework]]).  Actors are a powerful tool when creating large, highly parallelized, scalable systems in LabVIEW.  &lt;br /&gt;
&lt;br /&gt;
== Actor Framework Designs==&lt;br /&gt;
The [[Actor Framework]] is a powerful tool there are many aspects to how it can be implemented.  Below are three Actor Oriented Design Patterns implemented with the [[Actor Framework]].  These resemble their non Object-Oriented counterparts, see [[Design Patterns Overview|Design Patterns]], where these are an implementation of a single actor.  There real power lies in multiple Actors working together. These patterns are:&lt;br /&gt;
# State Machine Actor&lt;br /&gt;
# Queued State Machine Actor&lt;br /&gt;
# Queued Message Handler Actor&lt;br /&gt;
=== State Machine Actor ===&lt;br /&gt;
The State Machine Actor (SMA) is completely implemented in Messages, it does not override the Actor Core.  It sends the first Message on Pre Launch Init Method.  Each subsequent Message sends the next Message in the state.  &lt;br /&gt;
&lt;br /&gt;
Because it doesn&#039;t override the Actor Core the pattern does not have a UI of its own.  It could be paired with another Actor that implements the UI and sends Messages to it to update UI elements.  The paired Actor would follow one of the other patterns.  See more about the [[State Machine Actor|State Machine Actor (SMA) Design Pattern]].&lt;br /&gt;
&lt;br /&gt;
=== Queued State Machine Actor ===&lt;br /&gt;
More to come.&lt;br /&gt;
&lt;br /&gt;
=== Queued Message Handler Actor ===&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
== Other Actor Implementation Designs ==&lt;br /&gt;
&lt;br /&gt;
==== LabVIEW Tools Network Addons: ====&lt;br /&gt;
&lt;br /&gt;
* [[Messenger Library]]&lt;br /&gt;
* [[DQMH]]&lt;br /&gt;
&lt;br /&gt;
==== Some Actor implementations in other languages: ====&lt;br /&gt;
&lt;br /&gt;
* [https://doc.akka.io/docs/akka/2.5/guide/introduction.html Akka]&lt;br /&gt;
* [https://www.erlang.org/ Erlang]&lt;br /&gt;
* [https://actor-framework.org/ C++ Actor Framework]&lt;br /&gt;
* [https://www.pykka.org/en/latest/api/# Pykka (Python)]&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&amp;quot;[[Actor Framework is not as hard as you think and here is why…]]&amp;quot; - by Quentin &amp;quot;Q&amp;quot; Alldredge, Q Software Innovations, LLC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are familiar with the Queued Message Handler (QMH) Design Pattern and Object-Oriented Programming (OOP) then you already know everything you need to start with Actor Framework.  The purpose of this article is to show the parts of the Actor Framework that are comparable to the QMH Design Pattern and provide a step-by-step procedure for converting a QMH project to an Actor Framework project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/Actor_model Wikipedia: Actor_model]&lt;br /&gt;
&lt;br /&gt;
[[Category:Design patterns]]&lt;br /&gt;
[[Category:Actor Framework]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6028</id>
		<title>Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6028"/>
		<updated>2019-02-20T15:40:12Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Actor Oriented Design Patterns&#039;&#039;&#039; are software patterns that utilize the Actor Model (for example [[Actor Framework]]).  Actors are a powerful tool when creating large, highly parallelized, scalable systems in LabVIEW.  &lt;br /&gt;
&lt;br /&gt;
== Actor Framework Designs==&lt;br /&gt;
The [[Actor Framework]] is a powerful tool there are many aspects to how it can be implemented.  Below are three Actor Oriented Design Patterns implemented with the [[Actor Framework]].  These resemble their non Object-Oriented counterparts, see [[Design Patterns Overview|Design Patterns]], where these are an implementation of a single actor.  There real power lies in multiple Actors working together. These patterns are:&lt;br /&gt;
# State Machine Actor&lt;br /&gt;
# Queued State Machine Actor&lt;br /&gt;
# Queued Message Handler Actor&lt;br /&gt;
=== State Machine Actor ===&lt;br /&gt;
The State Machine Actor (SMA) is completely implemented in Messages, it does not override the Actor Core.  It sends the first Message on Pre Launch Init Method.  Each subsequent Message sends the next Message in the state.  &lt;br /&gt;
&lt;br /&gt;
Because it doesn&#039;t override the Actor Core the pattern does not have a UI of its own.  It could be paired with another Actor that implements the UI and sends Messages to it to update UI elements.  The paired Actor would follow one of the other patterns.  See more about the [[State Machine Actor|State Machine Actor (SMA) Design Pattern]].&lt;br /&gt;
&lt;br /&gt;
=== Queued State Machine Actor ===&lt;br /&gt;
More to come.&lt;br /&gt;
&lt;br /&gt;
=== Queued Message Handler Actor ===&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
== Other Actor Implementation Designs ==&lt;br /&gt;
[[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
[[DQMH]]&lt;br /&gt;
&lt;br /&gt;
More to Come&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&amp;quot;[[Actor Framework is not as hard as you think and here is why…]]&amp;quot; - by Quentin &amp;quot;Q&amp;quot; Alldredge, Q Software Innovations, LLC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are familiar with the Queued Message Handler (QMH) Design Pattern and Object-Oriented Programming (OOP) then you already know everything you need to start with Actor Framework.  The purpose of this article is to show the parts of the Actor Framework that are comparable to the QMH Design Pattern and provide a step-by-step procedure for converting a QMH project to an Actor Framework project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/Actor_model Wikipedia: Actor_model]&lt;br /&gt;
&lt;br /&gt;
[[Category:Design patterns]]&lt;br /&gt;
[[Category:Actor Framework]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6027</id>
		<title>Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6027"/>
		<updated>2019-02-20T15:37:23Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: /* Other Actor Implementation Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Actor Oriented Design Patterns&#039;&#039;&#039; are software patterns that utilize the Actor Model (for example [[Actor Framework]]).  Actors are a powerful tool when creating large, highly parallelized, scalable systems in LabVIEW.  &lt;br /&gt;
&lt;br /&gt;
== Actor Framework Designs==&lt;br /&gt;
The [[Actor Framework]] is a powerful tool there are many aspects to how it can be implemented.  Below are three Actor Oriented Design Patterns implemented with the [[Actor Framework]].  These resemble their non Object-Oriented counterparts, see [[Design Patterns Overview|Design Patterns]], where these are an implementation of a single actor.  There real power lies in multiple Actors working together. These patterns are:&lt;br /&gt;
# State Machine Actor&lt;br /&gt;
# Queued State Machine Actor&lt;br /&gt;
# Queued Message Handler Actor&lt;br /&gt;
=== State Machine Actor ===&lt;br /&gt;
The State Machine Actor (SMA) is completely implemented in Messages, it does not override the Actor Core.  It sends the first Message on Pre Launch Init Method.  Each subsequent Message sends the next Message in the state.  &lt;br /&gt;
&lt;br /&gt;
Because it doesn&#039;t override the Actor Core the pattern does not have a UI of its own.  It could be paired with another Actor that implements the UI and sends Messages to it to update UI elements.  The paired Actor would follow one of the other patterns.  See more about the [[State Machine Actor|State Machine Actor (SMA) Design Pattern]].&lt;br /&gt;
&lt;br /&gt;
=== Queued State Machine Actor ===&lt;br /&gt;
More to come.&lt;br /&gt;
&lt;br /&gt;
=== Queued Message Handler Actor ===&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
== Other Actor Implementation Designs ==&lt;br /&gt;
[[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
[[DQMH]]&lt;br /&gt;
&lt;br /&gt;
More to Come&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&amp;quot;[[Actor Framework is not as hard as you think and here is why…]]&amp;quot; - by Quentin &amp;quot;Q&amp;quot; Alldredge, Q Software Innovations, LLC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are familiar with the Queued Message Handler (QMH) Design Pattern and Object-Oriented Programming (OOP) then you already know everything you need to start with Actor Framework.  The purpose of this article is to show the parts of the Actor Framework that are comparable to the QMH Design Pattern and provide a step-by-step procedure for converting a QMH project to an Actor Framework project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Design patterns]]&lt;br /&gt;
[[Category:Actor Framework]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6026</id>
		<title>Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6026"/>
		<updated>2019-02-20T15:37:07Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: /* Other Actor Implementation Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Actor Oriented Design Patterns&#039;&#039;&#039; are software patterns that utilize the Actor Model (for example [[Actor Framework]]).  Actors are a powerful tool when creating large, highly parallelized, scalable systems in LabVIEW.  &lt;br /&gt;
&lt;br /&gt;
== Actor Framework Designs==&lt;br /&gt;
The [[Actor Framework]] is a powerful tool there are many aspects to how it can be implemented.  Below are three Actor Oriented Design Patterns implemented with the [[Actor Framework]].  These resemble their non Object-Oriented counterparts, see [[Design Patterns Overview|Design Patterns]], where these are an implementation of a single actor.  There real power lies in multiple Actors working together. These patterns are:&lt;br /&gt;
# State Machine Actor&lt;br /&gt;
# Queued State Machine Actor&lt;br /&gt;
# Queued Message Handler Actor&lt;br /&gt;
=== State Machine Actor ===&lt;br /&gt;
The State Machine Actor (SMA) is completely implemented in Messages, it does not override the Actor Core.  It sends the first Message on Pre Launch Init Method.  Each subsequent Message sends the next Message in the state.  &lt;br /&gt;
&lt;br /&gt;
Because it doesn&#039;t override the Actor Core the pattern does not have a UI of its own.  It could be paired with another Actor that implements the UI and sends Messages to it to update UI elements.  The paired Actor would follow one of the other patterns.  See more about the [[State Machine Actor|State Machine Actor (SMA) Design Pattern]].&lt;br /&gt;
&lt;br /&gt;
=== Queued State Machine Actor ===&lt;br /&gt;
More to come.&lt;br /&gt;
&lt;br /&gt;
=== Queued Message Handler Actor ===&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
== Other Actor Implementation Designs ==&lt;br /&gt;
[[Messenger_Library]]&lt;br /&gt;
&lt;br /&gt;
[[DQMH]]&lt;br /&gt;
&lt;br /&gt;
More to Come&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&amp;quot;[[Actor Framework is not as hard as you think and here is why…]]&amp;quot; - by Quentin &amp;quot;Q&amp;quot; Alldredge, Q Software Innovations, LLC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are familiar with the Queued Message Handler (QMH) Design Pattern and Object-Oriented Programming (OOP) then you already know everything you need to start with Actor Framework.  The purpose of this article is to show the parts of the Actor Framework that are comparable to the QMH Design Pattern and provide a step-by-step procedure for converting a QMH project to an Actor Framework project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Design patterns]]&lt;br /&gt;
[[Category:Actor Framework]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6025</id>
		<title>Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Actor_Oriented_Design_Patterns&amp;diff=6025"/>
		<updated>2019-02-20T15:36:58Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: /* Other Actor Implementation Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Actor Oriented Design Patterns&#039;&#039;&#039; are software patterns that utilize the Actor Model (for example [[Actor Framework]]).  Actors are a powerful tool when creating large, highly parallelized, scalable systems in LabVIEW.  &lt;br /&gt;
&lt;br /&gt;
== Actor Framework Designs==&lt;br /&gt;
The [[Actor Framework]] is a powerful tool there are many aspects to how it can be implemented.  Below are three Actor Oriented Design Patterns implemented with the [[Actor Framework]].  These resemble their non Object-Oriented counterparts, see [[Design Patterns Overview|Design Patterns]], where these are an implementation of a single actor.  There real power lies in multiple Actors working together. These patterns are:&lt;br /&gt;
# State Machine Actor&lt;br /&gt;
# Queued State Machine Actor&lt;br /&gt;
# Queued Message Handler Actor&lt;br /&gt;
=== State Machine Actor ===&lt;br /&gt;
The State Machine Actor (SMA) is completely implemented in Messages, it does not override the Actor Core.  It sends the first Message on Pre Launch Init Method.  Each subsequent Message sends the next Message in the state.  &lt;br /&gt;
&lt;br /&gt;
Because it doesn&#039;t override the Actor Core the pattern does not have a UI of its own.  It could be paired with another Actor that implements the UI and sends Messages to it to update UI elements.  The paired Actor would follow one of the other patterns.  See more about the [[State Machine Actor|State Machine Actor (SMA) Design Pattern]].&lt;br /&gt;
&lt;br /&gt;
=== Queued State Machine Actor ===&lt;br /&gt;
More to come.&lt;br /&gt;
&lt;br /&gt;
=== Queued Message Handler Actor ===&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
== Other Actor Implementation Designs ==&lt;br /&gt;
[[Messenger_Library]]&lt;br /&gt;
[[DQMH]]&lt;br /&gt;
More to Come&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&amp;quot;[[Actor Framework is not as hard as you think and here is why…]]&amp;quot; - by Quentin &amp;quot;Q&amp;quot; Alldredge, Q Software Innovations, LLC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you are familiar with the Queued Message Handler (QMH) Design Pattern and Object-Oriented Programming (OOP) then you already know everything you need to start with Actor Framework.  The purpose of this article is to show the parts of the Actor Framework that are comparable to the QMH Design Pattern and provide a step-by-step procedure for converting a QMH project to an Actor Framework project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Design patterns]]&lt;br /&gt;
[[Category:Actor Framework]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6022</id>
		<title>Messenger Library Messaging Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6022"/>
		<updated>2019-02-19T20:08:59Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added GDevCon1 talk link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Messaging Patterns ==&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]] is intended to support the following patterns:&lt;br /&gt;
* Command: simply sending a command [[Messenger Library Messages|message]] to an [[Messenger Library Addresses|Address]].&lt;br /&gt;
* Request-Reply (blocking): sending a command and then waiting for a specific replay to come back.  Also called a &amp;quot;Query&amp;quot;.&lt;br /&gt;
* Request-Reply Asynchronous: Sending a request with reply address attached to the message, then carrying on with other work before the reply is sent back to us. This is analogous to email.&lt;br /&gt;
* Scatter Gather (Blocking or Async): multi-actor versions of Request-Reply.  Makes use of Future Tokens.&lt;br /&gt;
* Register-Notify: Registration messages request future update &amp;quot;Notifications&amp;quot;.  See the Observer Registry helper object.&lt;br /&gt;
&lt;br /&gt;
Useful Links:&lt;br /&gt;
* [https://www.enterpriseintegrationpatterns.com/patterns/messaging/index.html Enterprise Integration Patterns]&lt;br /&gt;
* [https://youtu.be/HIuzY_Bs7BI GDevCon1 talk that includes messaging patterns]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;br /&gt;
[[Category:Design patterns]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6021</id>
		<title>Messenger Library Messaging Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6021"/>
		<updated>2019-02-19T14:40:16Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Messaging Patterns ==&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]] is intended to support the following patterns:&lt;br /&gt;
* Command: simply sending a command [[Messenger Library Messages|message]] to an [[Messenger Library Addresses|Address]].&lt;br /&gt;
* Request-Reply (blocking): sending a command and then waiting for a specific replay to come back.  Also called a &amp;quot;Query&amp;quot;.&lt;br /&gt;
* Request-Reply Asynchronous: Sending a request with reply address attached to the message, then carrying on with other work before the reply is sent back to us. This is analogous to email.&lt;br /&gt;
* Scatter Gather (Blocking or Async): multi-actor versions of Request-Reply.  Makes use of Future Tokens.&lt;br /&gt;
* Register-Notify: Registration messages request future update &amp;quot;Notifications&amp;quot;.  See the Observer Registry helper object.&lt;br /&gt;
&lt;br /&gt;
Useful Links:&lt;br /&gt;
* [https://www.enterpriseintegrationpatterns.com/patterns/messaging/index.html Enterprise Integration Patterns]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;br /&gt;
[[Category:Design patterns]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Architectures_and_Frameworks&amp;diff=6020</id>
		<title>Architectures and Frameworks</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Architectures_and_Frameworks&amp;diff=6020"/>
		<updated>2019-02-19T14:37:04Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added Messenger Library link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[Occurrence]]&lt;br /&gt;
*[[Reentrant VI]]&lt;br /&gt;
*[[Functional global variable]]&lt;br /&gt;
*[[State machine]]&lt;br /&gt;
*[[Daemon]]&lt;br /&gt;
&lt;br /&gt;
==Frameworks==&lt;br /&gt;
*[[Actor Framework]]&lt;br /&gt;
*[[Delacor Queued Message Handler (DQMH)]]&lt;br /&gt;
*[[Messenger Library]]&lt;br /&gt;
*[[JKI State Machine]]&lt;br /&gt;
*[[DCAF|Distributed Control And Automation Framework (DCAF)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Portals|Application design and architecture]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6019</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6019"/>
		<updated>2019-02-18T22:53:12Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
[[Category:Third party LabVIEW tools]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6018</id>
		<title>Messenger Library Messaging Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6018"/>
		<updated>2019-02-18T17:59:01Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Messaging Patterns ==&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]] is intended to support the following patterns:&lt;br /&gt;
* Command: simply sending a command [[Messenger Library Messages|message]] to an [[Messenger Library Addresses|Address]].&lt;br /&gt;
* Request-Reply (blocking): sending a command and then waiting for a specific replay to come back.  Also called a &amp;quot;Query&amp;quot;.&lt;br /&gt;
* Request-Reply Asynchronous: Sending a request with reply address attached to the message, then carrying on with other work before the reply is sent back to us. This is analogous to email.&lt;br /&gt;
* Scatter Gather (Blocking or Async): multi-actor versions of Request-Reply.  Makes use of Future Tokens.&lt;br /&gt;
* Register-Notify: Registration messages request future update &amp;quot;Notifications&amp;quot;.  See the Observer Registry helper object.&lt;br /&gt;
&lt;br /&gt;
Useful Links:&lt;br /&gt;
* [https://www.enterpriseintegrationpatterns.com/patterns/messaging/index.html Enterprise Integration Patterns]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6017</id>
		<title>Messenger Library Messaging Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6017"/>
		<updated>2019-02-18T17:58:25Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Messaging Patterns ==&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]] is intended to support the following patterns:&lt;br /&gt;
* Command: simply sending a command [[Messenger Library Messages|message]] to an [[Messenger Library Address|Address]].&lt;br /&gt;
* Request-Reply (blocking): sending a command and then waiting for a specific replay to come back.  Also called a &amp;quot;Query&amp;quot;.&lt;br /&gt;
* Request-Reply Asynchronous: Sending a request with reply address attached to the message, then carrying on with other work before the reply is sent back to us. This is analogous to email.&lt;br /&gt;
* Scatter Gather (Blocking or Async): multi-actor versions of Request-Reply.  Makes use of Future Tokens.&lt;br /&gt;
* Register-Notify: Registration messages request future update &amp;quot;Notifications&amp;quot;.  See the Observer Registry helper object.&lt;br /&gt;
&lt;br /&gt;
Useful Links:&lt;br /&gt;
* [https://www.enterpriseintegrationpatterns.com/patterns/messaging/index.html Enterprise Integration Patterns]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6016</id>
		<title>Messenger Library Messaging Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messaging_Patterns&amp;diff=6016"/>
		<updated>2019-02-18T17:55:00Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Messenger Library Messaging Patterns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Messaging Patterns ==&lt;br /&gt;
&lt;br /&gt;
[[Messenger Library]] is intended to support the following patterns:&lt;br /&gt;
* Command: simply sending a command [[Messenger Library Messages|message]] to an [[Messenger Library Address|Address]].&lt;br /&gt;
* Request-Reply (blocking): sending a command and then waiting for a specific replay to come back.  Also called a &amp;quot;Query&amp;quot;.&lt;br /&gt;
* Request-Reply Asynchronous: Sending a request with reply address attached to the message, then carrying on with other work before the reply is sent back to us. This is analogous to email.&lt;br /&gt;
* Scatter Gather (Blocking or Async): multi-actor versions of Request-Reply.  Makes use of Future Tokens.&lt;br /&gt;
* Register-Notify: Registration messages request future update &amp;quot;Notifications&amp;quot;.  See the Observer Registry helper object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6015</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6015"/>
		<updated>2019-02-18T17:51:57Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|Messaging Patterns]]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6014</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6014"/>
		<updated>2019-02-18T17:51:39Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
* [[Messenger_Library_Messages|Messages]]&lt;br /&gt;
* [[Messenger Library Messaging Patterns|messaging patterns]]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6013</id>
		<title>Messenger Library Addresses</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6013"/>
		<updated>2019-02-18T17:51:08Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Addresses&#039;&#039;&#039; in [[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
At its simplest, an &amp;quot;address&amp;quot; in [[Messenger_Library]] is just something to which one can send a message.  But it is also Messenger Library&#039;s primary feature, as there are many types of addresses that allow important functionality and high flexibility.  They are implemented as a set of LVOOP classes, but detailed knowledge of LVOOP is not needed to use them.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of the different types of addresses.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Send&#039;&#039;&#039; is the most generic class (&amp;quot;parent&amp;quot; class); any other address can be carried on a &amp;quot;Send&amp;quot;-class wire.  &amp;quot;Send&amp;quot; defines the key method (subVI) of an address: &amp;quot;Send.vi&amp;quot;, to send a message.  There are a large number of extensions of this core method, designed to support the use of various [[Messenger Library Messaging Patterns|messaging patterns]].  For example, to send a message and wait for a reply.   &lt;br /&gt;
&lt;br /&gt;
A secondary method of the &amp;quot;Send&amp;quot; class (and thus of all addresses) is &amp;quot;Valid.vi&amp;quot;, which indicates if a message sent to an address will actually go somewhere.  An address of the &amp;quot;Send&amp;quot; class itself serves as a &amp;quot;null&amp;quot; address, and thus messages sent to it do not go anywhere and so it is not &amp;quot;Valid&amp;quot;.  Note that being not &amp;quot;valid&amp;quot; is not the same as there being an error on trying to send to an address.  Though most subtypes of addresses will thow an error if they are not valid (since that indicates a failure of the underlying communication), sending to the &amp;quot;null&amp;quot; address is not an error condition (see also: &amp;quot;Observers&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Messengers&#039;&#039;&#039; are [[Messenger_Mibrary_Addresses|addresses]] that actually specify an underlying communication means.   A QueueMessenger carries messages on a LabVIEW Queue, an Event Messenger uses a User Event, and a NotifierMessgenger wraps a Notifier.   All these types impliment (&amp;quot;override&amp;quot;) &amp;quot;Send.vi&amp;quot; of the parent &amp;quot;Send&amp;quot; class.&lt;br /&gt;
&lt;br /&gt;
Messengers have the additional methods of &amp;quot;Create&amp;quot; and &amp;quot;Destroy&amp;quot;, which create and release the underlying communication reference.&lt;br /&gt;
&lt;br /&gt;
Note that from the point-of-view of the sender, all Messengers are interchangable, as they all impliment &amp;quot;Send&amp;quot; and &amp;quot;Valid&amp;quot;.  Only on the receiving end is their use different. QueueMessengers call &amp;quot;Receive.vi&amp;quot; to dequeue messages; EventMessengers are registered to an Event Structure, etc.   This was the key initial motivation of Messenger Library: to make the sender of a message be able to use any communication method, as specified by the receiver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TCP Messengers:&#039;&#039;&#039; Basic Messengers only communicate locally inside a LabVIEW application or instance; TCP Messengers extend communiction between instances and/or computers, via TCP/IP.   The implimentation pattern is Client-Server.   There are TCP extensions of both Queue- and EventMessengers.  In both cases, creating the Messenger starts up a TCP Server process, which accepts remote connections and forwards all received messages into the Queue or User Event.  The receiving process uses the same API as it would with a local Queue- or EventMessenger.  Note that this means conversion of a local-only component to a network-capable one is very easy and quick.&lt;br /&gt;
&lt;br /&gt;
The client side is provided by &amp;quot;RemoteTCPMessenger&amp;quot;, which creates a client connection to a remote server (identified by a &amp;quot;service name&amp;quot; and ip address).   Messages sent to this Messenger are sent to the remote process.&lt;br /&gt;
&lt;br /&gt;
The TCP Messengers are designed to work with the messaging patterns of Messenger Library.   They automatically route replies and notification messages back through the same TCP connection as the initial request and registration messages.  Note that this means that one must keep a RemoteTCPMessenger open in order to receive replies or notifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Tokens&#039;&#039;&#039; are a special type of temporary single-use address.  They are somewhat similar to &amp;quot;futures&amp;quot; of other languages, and generally serve to refer to the yet-to-be-received replies to a messages in the &amp;quot;Scatter-Gather&amp;quot; messaging  pattern.  A Future Token is an address that can only ever accept one message (sending to a Token twice results in an error), and receiving that message, via a &amp;quot;Redeem Token&amp;quot; method, destroys the Token.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observers:&#039;&#039;&#039; Observers are the &amp;quot;force multipliers&amp;quot; of addresses.  They do not represent the actual means of sending messages themselves; instead, they &amp;quot;wrap&amp;quot; other addresses with extended functionality.  Each Observer can contain multiple other addresses (copies of messages sent to the Observer are sent to each contained address) and, crucially, a &amp;quot;Translator&amp;quot;, an object that alters messages.  Via translators, an Observer can do things like relabel a message, or substitute a different message, or place the message inside an &amp;quot;Outer Envelope&amp;quot; (a message that contains another message).  &lt;br /&gt;
&lt;br /&gt;
Observers have the key methods of &amp;quot;Create Observer&amp;quot;, which allows the combination of multiple addreses into one Observer, and &amp;quot;Translate&amp;quot;, a polymorphic VI that allows the specification of what mesage translation to do.&lt;br /&gt;
&lt;br /&gt;
The motivation behind &amp;quot;Observers&amp;quot; is to support &amp;quot;observation&amp;quot; of one process by another.  This is to be contrasted with the more ususal &amp;quot;command&amp;quot; of one process of another.  The difference is illustrated by thinking of process S sending a message to process R.  If this message represents a &amp;quot;command&amp;quot; from S to R, then S must &amp;quot;know&amp;quot; R.  R defines what commands it can handle, and S must know the command to send.  Also, a failure to execute the command is a failure of S, since it has failed to get its command done.  If, instead, the message represents the observation of S by R, then the &amp;quot;active&amp;quot; party is R.   S is providing information that R chooses what to do with.  It is S&#039;s job to provide the information, but it is not &amp;quot;commanding&amp;quot; R to do anything, and shouldn&#039;t need to know what &amp;quot;command&amp;quot; R should execute on receiving the message.  R should define the command, and thus should control the command-element of the message (S supplies the data).  &amp;quot;Observer&amp;quot; addresses support this kind of idea, as they allow the receiving process to pre-configure an address that defines aspects of the messages that it will receive.&lt;br /&gt;
&lt;br /&gt;
The most basic (and common) use of an Observer address is to configure the relabeling of a message.  For example, a sender might send messages labelled &amp;quot;Temperature&amp;quot;, but the observing process may provide an Observer address configured to relabel the message &amp;quot;Record Main Furnace Temperature&amp;quot;, representing a command to itself of what to do with the data.&lt;br /&gt;
&lt;br /&gt;
Error-handling note: Observer address never produce an error when calling Send on them.  As the sender is not instigating the observation, it should not be a failure to it if the observation has failed.  An Observer Address will (silently) drop any contained address that produces an error on a Send call.   This simplifies programming in situations where temporary processes observe a longer-running process, as &amp;quot;dead&amp;quot; addresses are automatically dropped.  Note that this means that an Observer can change on calling &amp;quot;Send&amp;quot;.  Observer addresses are by-value collections containing by-reference Messengers, and should be treated as by-value objects.&lt;br /&gt;
&lt;br /&gt;
An Observer will read as &amp;quot;Valid&amp;quot; if any contained address is valid.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Actor Address:&#039;&#039;&#039; The Actor Model describes a way of programming that uses independant processes that interact via passing messages.  Actors can also be created (&amp;quot;launched&amp;quot;) by other actors.  LabVIEW comes with an existing implimentation of this idea, the &amp;quot;Actor Framework&amp;quot;, but this is an alternate design based on Messeger-Library.  Please note that there are very significamt differences between the two. &lt;br /&gt;
&lt;br /&gt;
An &amp;quot;actor&amp;quot; address class in Messenger Library identifies a VI (called &amp;quot;Actor.vi&amp;quot;) that will be asynchronously run when the actor is &amp;quot;launched&amp;quot; (Launch method called on the actor address).  After launch, the actor address contains a Messenger that will communicate with the new actor.  Sending to the actor address sends the message to the message-handling loop withing the actor VI.&lt;br /&gt;
&lt;br /&gt;
Creating a new type of &amp;quot;actor&amp;quot; involves copying a template class.  Several templates can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..).  The recomended templet is called &amp;quot;DEV&amp;quot;.   Note, however, that any message-handling loop design can be substituted, based on either a Queue- or EventMessenger.&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.  This allows one to see what actor/VI launch what, and gives the ability to open all front panels or block diagrams.&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Messages&amp;diff=6012</id>
		<title>Messenger Library Messages</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Messages&amp;diff=6012"/>
		<updated>2019-02-18T17:49:16Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Messenger Library Messages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Messages in [[Messenger Library]] generally contain up to three things:&lt;br /&gt;
&lt;br /&gt;
* A &amp;quot;Label&amp;quot; that is a short text string that identifies the message.  Examples: &amp;quot;Latest Temperature&amp;quot;, &amp;quot;Start Measurement&amp;quot;, &amp;quot;Shutdown&amp;quot;.&lt;br /&gt;
* Data of some type.  There is more that one type of data message, but most messages hold data in a Variant.&lt;br /&gt;
* (Optional) A &amp;quot;Reply Address&amp;quot;, which is the [[Messenger Library Addresses|address]] where a reply to this message should be sent.&lt;br /&gt;
&lt;br /&gt;
Messages have Write and &amp;quot;Read&amp;quot; (aka Extract) methods to add and access Label and Data.  There is also a Reply method for the message handler to send a reply to the Reply Address. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on Error Messages:&#039;&#039;&#039; an &amp;quot;Error Message&amp;quot; is a special subtype of Message who&#039;s Data is an Error Cluster.  On any &amp;quot;Read&amp;quot; of an Error Message, the contained Error Cluster will be output on the Error out terminal of the Read method.  This connects Error Messages to the stadard LabVIEW error-handling design of the passed Error Cluster.  Similarly, as responsibility for directing a reply belongs to the sender of the original message, if there is an error input on the &amp;quot;error in&amp;quot; terminal of any &amp;quot;Reply&amp;quot; method, then an error message will be sent (instead of the regular reply).  This design effectively allows simple error handling Request-Reply messaging interactions, with the Requestor receiving the error cluster.&lt;br /&gt;
&lt;br /&gt;
See also [[Messenger Library]] and [[Messenger Library Addresses|Addresses]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6011</id>
		<title>Messenger Library Addresses</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library_Addresses&amp;diff=6011"/>
		<updated>2019-02-18T17:45:18Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Messenger Library Addresses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Addresses&#039;&#039;&#039; in [[Messenger Library]]&lt;br /&gt;
&lt;br /&gt;
At its simplest, an &amp;quot;address&amp;quot; in [[Messenger_Library]] is just something to which one can send a message.  But it is also Messenger Library&#039;s primary feature, as there are many types of addresses that allow important functionality and high flexibility.  They are implemented as a set of LVOOP classes, but detailed knowledge of LVOOP is not needed to use them.&lt;br /&gt;
&lt;br /&gt;
Here is a listing of the different types of addresses.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Send&#039;&#039;&#039; is the most generic class (&amp;quot;parent&amp;quot; class); any other address can be carried on a &amp;quot;Send&amp;quot;-class wire.  &amp;quot;Send&amp;quot; defines the key method (subVI) of an address: &amp;quot;Send.vi&amp;quot;, to send a message.  There are a large number of extensions of this core method, designed to support the use of various messaging patterns.  For example, to send a message and wait for a reply.   &lt;br /&gt;
&lt;br /&gt;
A secondary method of the &amp;quot;Send&amp;quot; class (and thus of all addresses) is &amp;quot;Valid.vi&amp;quot;, which indicates if a message sent to an address will actually go somewhere.  An address of the &amp;quot;Send&amp;quot; class itself serves as a &amp;quot;null&amp;quot; address, and thus messages sent to it do not go anywhere and so it is not &amp;quot;Valid&amp;quot;.  Note that being not &amp;quot;valid&amp;quot; is not the same as there being an error on trying to send to an address.  Though most subtypes of addresses will thow an error if they are not valid (since that indicates a failure of the underlying communication), sending to the &amp;quot;null&amp;quot; address is not an error condition (see also: &amp;quot;Observers&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Messengers&#039;&#039;&#039; are [[Messenger_Mibrary_Addresses|addresses]] that actually specify an underlying communication means.   A QueueMessenger carries messages on a LabVIEW Queue, an Event Messenger uses a User Event, and a NotifierMessgenger wraps a Notifier.   All these types impliment (&amp;quot;override&amp;quot;) &amp;quot;Send.vi&amp;quot; of the parent &amp;quot;Send&amp;quot; class.&lt;br /&gt;
&lt;br /&gt;
Messengers have the additional methods of &amp;quot;Create&amp;quot; and &amp;quot;Destroy&amp;quot;, which create and release the underlying communication reference.&lt;br /&gt;
&lt;br /&gt;
Note that from the point-of-view of the sender, all Messengers are interchangable, as they all impliment &amp;quot;Send&amp;quot; and &amp;quot;Valid&amp;quot;.  Only on the receiving end is their use different. QueueMessengers call &amp;quot;Receive.vi&amp;quot; to dequeue messages; EventMessengers are registered to an Event Structure, etc.   This was the key initial motivation of Messenger Library: to make the sender of a message be able to use any communication method, as specified by the receiver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TCP Messengers:&#039;&#039;&#039; Basic Messengers only communicate locally inside a LabVIEW application or instance; TCP Messengers extend communiction between instances and/or computers, via TCP/IP.   The implimentation pattern is Client-Server.   There are TCP extensions of both Queue- and EventMessengers.  In both cases, creating the Messenger starts up a TCP Server process, which accepts remote connections and forwards all received messages into the Queue or User Event.  The receiving process uses the same API as it would with a local Queue- or EventMessenger.  Note that this means conversion of a local-only component to a network-capable one is very easy and quick.&lt;br /&gt;
&lt;br /&gt;
The client side is provided by &amp;quot;RemoteTCPMessenger&amp;quot;, which creates a client connection to a remote server (identified by a &amp;quot;service name&amp;quot; and ip address).   Messages sent to this Messenger are sent to the remote process.&lt;br /&gt;
&lt;br /&gt;
The TCP Messengers are designed to work with the messaging patterns of Messenger Library.   They automatically route replies and notification messages back through the same TCP connection as the initial request and registration messages.  Note that this means that one must keep a RemoteTCPMessenger open in order to receive replies or notifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Tokens&#039;&#039;&#039; are a special type of temporary single-use address.  They are somewhat similar to &amp;quot;futures&amp;quot; of other languages, and generally serve to refer to the yet-to-be-received replies to a messages in the &amp;quot;Scatter-Gather&amp;quot; messaging  pattern.  A Future Token is an address that can only ever accept one message (sending to a Token twice results in an error), and receiving that message, via a &amp;quot;Redeem Token&amp;quot; method, destroys the Token.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observers:&#039;&#039;&#039; Observers are the &amp;quot;force multipliers&amp;quot; of addresses.  They do not represent the actual means of sending messages themselves; instead, they &amp;quot;wrap&amp;quot; other addresses with extended functionality.  Each Observer can contain multiple other addresses (copies of messages sent to the Observer are sent to each contained address) and, crucially, a &amp;quot;Translator&amp;quot;, an object that alters messages.  Via translators, an Observer can do things like relabel a message, or substitute a different message, or place the message inside an &amp;quot;Outer Envelope&amp;quot; (a message that contains another message).  &lt;br /&gt;
&lt;br /&gt;
Observers have the key methods of &amp;quot;Create Observer&amp;quot;, which allows the combination of multiple addreses into one Observer, and &amp;quot;Translate&amp;quot;, a polymorphic VI that allows the specification of what mesage translation to do.&lt;br /&gt;
&lt;br /&gt;
The motivation behind &amp;quot;Observers&amp;quot; is to support &amp;quot;observation&amp;quot; of one process by another.  This is to be contrasted with the more ususal &amp;quot;command&amp;quot; of one process of another.  The difference is illustrated by thinking of process S sending a message to process R.  If this message represents a &amp;quot;command&amp;quot; from S to R, then S must &amp;quot;know&amp;quot; R.  R defines what commands it can handle, and S must know the command to send.  Also, a failure to execute the command is a failure of S, since it has failed to get its command done.  If, instead, the message represents the observation of S by R, then the &amp;quot;active&amp;quot; party is R.   S is providing information that R chooses what to do with.  It is S&#039;s job to provide the information, but it is not &amp;quot;commanding&amp;quot; R to do anything, and shouldn&#039;t need to know what &amp;quot;command&amp;quot; R should execute on receiving the message.  R should define the command, and thus should control the command-element of the message (S supplies the data).  &amp;quot;Observer&amp;quot; addresses support this kind of idea, as they allow the receiving process to pre-configure an address that defines aspects of the messages that it will receive.&lt;br /&gt;
&lt;br /&gt;
The most basic (and common) use of an Observer address is to configure the relabeling of a message.  For example, a sender might send messages labelled &amp;quot;Temperature&amp;quot;, but the observing process may provide an Observer address configured to relabel the message &amp;quot;Record Main Furnace Temperature&amp;quot;, representing a command to itself of what to do with the data.&lt;br /&gt;
&lt;br /&gt;
Error-handling note: Observer address never produce an error when calling Send on them.  As the sender is not instigating the observation, it should not be a failure to it if the observation has failed.  An Observer Address will (silently) drop any contained address that produces an error on a Send call.   This simplifies programming in situations where temporary processes observe a longer-running process, as &amp;quot;dead&amp;quot; addresses are automatically dropped.  Note that this means that an Observer can change on calling &amp;quot;Send&amp;quot;.  Observer addresses are by-value collections containing by-reference Messengers, and should be treated as by-value objects.&lt;br /&gt;
&lt;br /&gt;
An Observer will read as &amp;quot;Valid&amp;quot; if any contained address is valid.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Actor Address:&#039;&#039;&#039; The Actor Model describes a way of programming that uses independant processes that interact via passing messages.  Actors can also be created (&amp;quot;launched&amp;quot;) by other actors.  LabVIEW comes with an existing implimentation of this idea, the &amp;quot;Actor Framework&amp;quot;, but this is an alternate design based on Messeger-Library.  Please note that there are very significamt differences between the two. &lt;br /&gt;
&lt;br /&gt;
An &amp;quot;actor&amp;quot; address class in Messenger Library identifies a VI (called &amp;quot;Actor.vi&amp;quot;) that will be asynchronously run when the actor is &amp;quot;launched&amp;quot; (Launch method called on the actor address).  After launch, the actor address contains a Messenger that will communicate with the new actor.  Sending to the actor address sends the message to the message-handling loop withing the actor VI.&lt;br /&gt;
&lt;br /&gt;
Creating a new type of &amp;quot;actor&amp;quot; involves copying a template class.  Several templates can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..).  The recomended templet is called &amp;quot;DEV&amp;quot;.   Note, however, that any message-handling loop design can be substituted, based on either a Queue- or EventMessenger.&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.  This allows one to see what actor/VI launch what, and gives the ability to open all front panels or block diagrams.&lt;br /&gt;
&lt;br /&gt;
[[Category:Messenger_Library]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6010</id>
		<title>Messenger Library</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Messenger_Library&amp;diff=6010"/>
		<updated>2019-02-18T17:40:12Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Create page for Messenger Library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Messenger Library&#039;&#039;&#039;, [http://sine.ni.com/nips/cds/view/p/lang/en/nid/213091 a package on the LabVIEW Tools Network], is an extensive library for passing messages between parallel processes. Simplifies communication, by allowing the message sender to use any method provided by the receiver. Supported communication methods include simple queues, user events, and notifiers, as well a more complex channels such as a TCP server and client. In addition, one can configure simple forwarding addresses (“Observers&amp;quot;), which can send messages to multiple destinations, optionally with modifications such as adding a prefix to the message label, relabelling, or substituting a different message.&lt;br /&gt;
&lt;br /&gt;
Messaging patterns supported include request-reply (asynchronous or synchronous), where the reply is sent to a &amp;quot;reply address&amp;quot; attached to the request, and register-notify, where one process sends a registration message to another in order to subscribe to a series of updates. Also supports scatter-gather, the gathering of replies from multiple senders into an array of messages.&lt;br /&gt;
&lt;br /&gt;
An option framework for dynamically-launched VI &amp;quot;actors&amp;quot; is also provided, including example templates, which can be accessed via the Tools menu (from an open Project, select Tools&amp;gt;&amp;gt;Messenger Library&amp;gt;&amp;gt;Create Actor from Template..). An &amp;quot;Actor Manager&amp;quot; debug tool is also installed under the Tools menu.&lt;br /&gt;
&lt;br /&gt;
Please note that this package has nothing directly to do with the NI Actor Framework (other than both packages are influenced by the [https://en.wikipedia.org/wiki/Actor_model Actor Model]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Info&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
•[[Messenger_Library_Addresses|Addresses]]&lt;br /&gt;
&lt;br /&gt;
•[[Messenger_Library_Messages|Messages]]&lt;br /&gt;
&lt;br /&gt;
For support please see [https://lavag.org/topic/16360-lvtn-messenger-library/ CR Messenger Library] and [https://bitbucket.org/drjdpowell/messenging/issues?status=new&amp;amp;status=open Bitbucket Issue Tracker].&lt;br /&gt;
&lt;br /&gt;
Compatible LabVIEW Versions: &amp;gt;= 2013.&lt;br /&gt;
&lt;br /&gt;
This Package depends on this other package: JDP Science Common Utilities, Cyclic Table Probes, JKI Statemachine, OpenG Zip Tools&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on Tools]]&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=GDevCon&amp;diff=6009</id>
		<title>GDevCon</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=GDevCon&amp;diff=6009"/>
		<updated>2019-02-18T17:18:37Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Added GDevCon1 Youtube video link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Gdevconsmalllogo.jpg|frameless|right]]&lt;br /&gt;
GDevCon is an independent organisation dedicated to creating a series of events that is all about world-class graphical programming, organised by the community for the community.&lt;br /&gt;
&lt;br /&gt;
Established in 2017, GDevCon held their first conference in Cambridge, UK, on 4-5th September 2018 at Murray Edwards College. The event was attended by over 140 developers, and actually had to be moved from their first venue, Girton College, to accommodate the higher than expected demand for tickets.&lt;br /&gt;
&lt;br /&gt;
The event does not mandate any level of certification, unlike the CLA Summits, enabling access to developers who don&#039;t choose to attain any formal accreditation.&lt;br /&gt;
&lt;br /&gt;
Based on the success of GDevCon#1, GDevCon intend to build on the format and organise additional conferences.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://www.gdevcon.com GDevCon] website to learn more about GDevCon and their future conferences.&lt;br /&gt;
&lt;br /&gt;
A full set of presentation videos (of very high AV quality) are [https://www.youtube.com/channel/UCJ0jhJNGk9kjc12npjy6b4g/videos available on YouTube].&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:Actor_Oriented_Design_Patterns&amp;diff=5952</id>
		<title>Talk:Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:Actor_Oriented_Design_Patterns&amp;diff=5952"/>
		<updated>2019-01-09T21:10:35Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This seems to be &amp;quot;NI Actor Framework&amp;quot; Design Patterns, rather more-general ones that work with any actor-oriented coding style or framework. -- drjdpowell&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Talk:Actor_Oriented_Design_Patterns&amp;diff=5951</id>
		<title>Talk:Actor Oriented Design Patterns</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Talk:Actor_Oriented_Design_Patterns&amp;diff=5951"/>
		<updated>2019-01-09T21:10:13Z</updated>

		<summary type="html">&lt;p&gt;Drjdpowell: Created page with &amp;quot;This seems to be &amp;quot;NI Actor Framework&amp;quot; Design Patterns, rather more-general ones that work with any actor-oriented coding style or framework.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This seems to be &amp;quot;NI Actor Framework&amp;quot; Design Patterns, rather more-general ones that work with any actor-oriented coding style or framework.&lt;/div&gt;</summary>
		<author><name>Drjdpowell</name></author>
	</entry>
</feed>