<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Neural Network Design blog &#187; N²D</title>
	<atom:link href="http://janbogaerts.name/index.php/tag/nnd/feed/" rel="self" type="application/rss+xml" />
	<link>http://janbogaerts.name</link>
	<description>My take on neural networks, AI and more</description>
	<lastBuildDate>Thu, 15 Dec 2011 18:43:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>0.6 (CBC11) released</title>
		<link>http://janbogaerts.name/index.php/2011/03/15/0-6-cbc11-released/</link>
		<comments>http://janbogaerts.name/index.php/2011/03/15/0-6-cbc11-released/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 18:46:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2011/03/15/0-6-cbc11-released/</guid>
		<description><![CDATA[Note: Deprecated! The time for a new release has finally arrived. Lots of new things: The designer and core: lots of speed improvements and deadlock fixes. Added a new asset editor. With this editor, you can declare things like ‘An eye has a color and the color of an eye is usually blue green or [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>The time for a new release has finally arrived. Lots of new things:<a href="http://janbogaerts.name/wp-content/uploads/2011/03/Capture.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Capture" border="0" alt="Capture" align="right" src="http://janbogaerts.name/wp-content/uploads/2011/03/Capture_thumb.jpg" width="286" height="226" /></a></p>
<p>The designer and core:</p>
<ul>
<li>lots of speed improvements and deadlock fixes.</li>
<li>Added a new asset editor. With this editor, you can declare things like ‘An eye has a color and the color of an eye is usually blue green or brown’. This is done with a graphical editor, instead of entering text, so you can directly manipulate the network.&#160; Of course, this can also be used to view recorded ‘asset data’.</li>
<li>Added a new dialog box which allows you to merge 2 neurons into 1. This can be very useful in some situations.</li>
<li>Extended the ‘frames’ editor, so that it can also edit semantic frames (which are new in this version of Aici).</li>
<li>Added a ‘bool filter’ to the frames editor</li>
<li>As I’ve previously mentioned, there’s also a new ‘test case’ debugging tools, which is great for automated testing and validation (using regular expressions) of large input volumes. Running big tests can be useful to pick up unexpected behavior that got introduced because of newly added frames.</li>
<li>I’ve also added support for ‘code search’. You can now search for all occurrences of any neuron within a code cluster in the entire network. To search for a neuron, select it and press ‘Ctrl+F3&#8242;.</li>
<li>There’s a new version available of the ‘echo words’ demo, which uses less code (3 statements).</li>
<li>New instructions: GetCommonParents, GetCommonParentsFiltered, GetCommonParentsWithMeaning </li>
<li>Lots of bug fixes + introduced some new ones <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://janbogaerts.name/wp-content/uploads/2011/03/wlEmoticon-winkingsmile2.png" /></li>
</ul>
<p>Aici:</p>
<ul>
<li>A brand new semantics stage (again), which supports complex sentences and provides more possibilities.</li>
<li>Added a bunch of semantic frames for things like ‘place’, ‘time’, some verbs, nouns and actions.</li>
<li>Added a bunch of new grammar frames, mostly for complex sentences, but also for things like ‘where’, ‘who’,…</li>
<li>Added new actions, mostly for complex sentences, but also for better support of verbs.</li>
<li>cleaned up/improved the ‘be’ and ‘have’ action handlers a bit.</li>
<li>lots of new words</li>
<li>… (I sort of forgot to note everything I did near the end) For a good overview of what’s currently possible, check <a href="http://janbogaerts.name/index.php/category/conversations/" target="_blank">the conversations category</a>.</li>
</ul>
<p>And naturally, he latest version can be retrieved from the <a href="http://janbogaerts.name/index.php/downloads/" target="_blank">downloads page</a>.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=590" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2011/03/15/0-6-cbc11-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging: Attached variables</title>
		<link>http://janbogaerts.name/index.php/2011/01/03/debugging-attached-variables/</link>
		<comments>http://janbogaerts.name/index.php/2011/01/03/debugging-attached-variables/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 18:40:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[attached variables]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code editor]]></category>
		<category><![CDATA[debugging]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2011/01/03/debugging-attached-variables/</guid>
		<description><![CDATA[Note: Deprecated! Debugging time!!! (when isn’t it.) I sort of forgot about this one, until a couple of days ago, when I ran into a similar problem as for which I originally created this (ahem) simple little trick.  To explain you what attached neurons are for, perhaps first a little explanation on how I have [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>Debugging time!!! (when isn’t it.) I sort of forgot about this one, until a couple of days ago, when I ran into a similar problem as for which I originally created this (ahem) simple little trick.  To explain you what attached neurons are for, perhaps first a little explanation on how I have been designing my neural algorithms. (Caution: this is advanced stuff, not for the faint-hearted).</p>
<p>As with all algorithms, I take some input and process it to generate some output. The input with neural algorithms, is always expressed using neurons. The process to execute is defined through the meaning of a link (which also maps to a neuron). The link starts from the input neuron and usually points to some value that needs to be compared against or searched for,…, but this can also be something else.</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2011/01/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2011/01/image_thumb1.png" border="0" alt="image" width="323" height="132" /></a><br />
The problem is the ‘split’ instruction. This is a very powerful thing indeed, which allows me to write simple, massively parallel code. It does, exactly as the word says, it ‘splits’ the current process into x nr of similar processes. They are similar, but not exactly the same: ‘the input neurons’ have been duplicated so that they contain the same values, but using new neurons, so that the process will eventually lead to a different result neuron. Also, the ‘variable’ that was supplied with the split instruction, has a unique value in each process (the value items are declared in the split instruction, they  determine the nr of new processes in the split). And finally, globals can be declared  as having to ‘duplicate’ their content when a split occurs. All this means that each process is similar (most variables point to the same neurons), but not exactly the same. (Mount Everest stuff, I know.)<br />
The key thing to keep in mind here are the duplicated input neurons: when a split occurs, the idea is that each process will work on it’s own input and result data. But, sometimes, for various reasons, one or more of these neurons can spill over to other processes. And that’s when ‘contamination’ can occur, or when one process modifies the input/result of an other process, which is very bad indeed and excruciatingly difficult to trace using traditional debugging methods like breakpoints.</p>
<p>Thus come attached variables to the rescue. The idea is very simple: Whenever a ‘variable’ that has been signaled in the designer as ‘attach required’, gets it’s first value assigned, it attaches this ‘value’ to the  process in which this assignment occurred. If, from that point on, another  process tries to change  this value-neuron, all alarms go off as if it were WOIII. And that’s basically it. From there on, it’s up to you to use the <a href="http://janbogaerts.name/wp-content/uploads/2011/01/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2011/01/image_thumb2.png" border="0" alt="image" width="279" height="141" align="right" /></a>presented information (where and who), to figure out the why.</p>
<p>For practical use, I have found that the ‘CurrentFrom’ system variable, really is the most useful variable for this trick, though it is possible to put it on any other. You can even attach neurons manually to a process, if you’ve paused and selected one. This is done on a code editor, using the context menu item ‘attach to  processor’. To activate the monitoring of a variable, make certain that it is added to the left most pane in the debugger view and select checkbox  in the ‘attach’ column before you provide the network with some input.</p>
<p>Like I’ve already mentioned, it doesn’t take much to use and activate it. This little trick’s usage field isn’t very broad, it only traces down 1 specific type of bug, but one that is very hard to find otherwise. Also, if not used correctly, you can get a lot of false errors, since it’s very common for multiple processes to modify the same neurons. So use with caution!</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=532" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2011/01/03/debugging-attached-variables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NND 0.5.1</title>
		<link>http://janbogaerts.name/index.php/2010/11/01/nnd-0-5-1/</link>
		<comments>http://janbogaerts.name/index.php/2010/11/01/nnd-0-5-1/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 14:43:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/11/01/nnd-0-5-1/</guid>
		<description><![CDATA[Note: Deprecated! It’s time again to do a new release, which was long overdue to tell you the truth. Lots of things have been changed, though mostly in the background, both for the designer and Aici. Here’s a non exhaustive list of the changes: The designer + core: Basically, I began the process of improving [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>It’s time again to do a new release, which was long overdue to tell you the truth. Lots of things have been changed, though mostly in the background, both for the designer and Aici. Here’s a non exhaustive list of the changes:</p>
<h4>The designer + core:</h4>
<p>Basically, I began the process of improving the feel of the application, to get the prototype taste out of it. It’s not done yet, but things are improving considerably. I am now able to work with the designer for a full day, while keeping memory reasonably under control and with the same speed at the end as at the start. here’s what else got changed:</p>
<ul>
<li>Lots of speed improvements (more to go) </li>
<li>fixed some memory leaks, there are still some more left to plug. </li>
<li>New instructions: IsClusteredByAny, ChangeChild, ChangeInfo, ChangeParent, Avg (average), Max, Min, StDev </li>
<li>Added system events OnStarted, OnShutDown, OnSinActivity. </li>
<li>Added a new system variable: Time (to get the current system time). </li>
<li>Added back/forward commands to the flow editor. </li>
<li>Added the ability to manage 1 to 1 thesaurus relationships (from within the thesaurus tool window).</li>
<li>Added ‘go to unfreeze location’ functionality in the memory profiler. </li>
<li>Created a custom treeview, currently only used by the thesaurus. There are still a few issues left with the new view, but it fixes some unresolvable issues found in the default (wpf) treeview, so all trees will be replace with this new one in the next releases. </li>
<li>lots of bug fixes </li>
</ul>
<h4>Aici</h4>
<p>Aici has undergone a major upgrade, though mostly in the background, that is to say, to improve already existing functionality or extend it. Here’s what’s new/updated:</p>
<ul>
<li>There’s a new stage, just after scanning and before parsing, used to retrieve the different sentences and groupings from the input. This allows the system to process multiple sentences in the input (at the same time). 1 small note: the final stage hasn’t been tested yet, so even though the sentences are recognized, only input with 1 sentence is processed correctly at the moment. </li>
<li>I’ve changed the semantics processing from a simple transition/translation to a full stage, so the semantic information can be used to do more filtering. </li>
<li>Yet another new stage has been added to do grammatical analysis (things like figuring out whether an ‘a’ is most likely used as a noun or article. </li>
<li>The output stage has been adjusted so that the output isn’t directly sent out, but instead stored as neurons that can be used for further analysis while being sent out at a later stage. The analysis itself however isn’t done yet. </li>
<li>Some new frames have been added, mostly to handle invalid grammar and present/past articles.</li>
<li>The flow definition has been simplified a bit.</li>
<li>Lots of bug fixes </li>
</ul>
<h4>Aici-Web</h4>
<p>And finally, the newcomer: Aici-web which is a web-based interface of Aici (go figure!). It’s currently implemented in Silverlight (other web technologies should follow). The basic purpose of this website version is 2 folded: as a technology showcase and as a way for me to easily get conversation logs that I can use to improve the network. So go ahead and test the limits, see how fast you can break the thing (shouldn’t be to hard <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://janbogaerts.name/wp-content/uploads/2010/11/wlEmoticon-winkingsmile.png" /> ). You can find it <a href="http://bragisoft.com/AiciClient/AiciWebTestPage.aspx" target="_blank">here</a>. (Note: I plan to reset the backing database on a regular basis, to keep the thing fresh and with the latest Aici version.)</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=475" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/11/01/nnd-0-5-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running AICI from the designer</title>
		<link>http://janbogaerts.name/index.php/2010/07/30/running-aici-from-the-designer/</link>
		<comments>http://janbogaerts.name/index.php/2010/07/30/running-aici-from-the-designer/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:25:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[AICI]]></category>
		<category><![CDATA[debugging]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/07/30/running-aici-from-the-designer/</guid>
		<description><![CDATA[How to best run AICI from within the neural network designer.]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>The designer is a strange beast: the project that is opened for editing, is also running in the background as a neural network. This means that you can use the input/output channels just like in a regular (neural network enabled) application, like the AICI client app. Grate for debugging and trying out stuff, but you don’t want to get your test data mixed into the actual network, enter <a href="http://janbogaerts.name/index.php/2009/03/17/about-sandboxes/" target="_blank">sandboxes</a>:</p>
<blockquote><p>A sandbox is a complete copy of your project, running in a new, separate designer.</p></blockquote>
<p>So, after you have opened the Aici project in the designer (installed at {Documents}\NND\Demos\AICI_1, note that you need to select the directory, not the file), you can run your project in a sandbox. Simply click on the <a href="http://janbogaerts.name/wp-content/uploads/2010/07/image15.png"><img style="margin: 0px; display: inline; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/07/image_thumb15.png" border="0" alt="image" width="16" height="16" /></a> button in the toolbar, or select ‘debug/sandbox’ from the menu. This will start a new designer with you sandbox project loaded. Once the sandbox is open, you can use the already declared text-channel to communicate with the network. if not yet opened, switch it on by selecting ‘view/communication channels/Text channel’ from the menu. The <a href="http://janbogaerts.name/index.php/2009/03/12/demos-explained-echo/" target="_blank">Echo words demo</a> has more info on this type of channels (though the view has been updated a bit). here’s the short version:</p>
<p><strong><a href="http://janbogaerts.name/wp-content/uploads/2010/07/image16.png"><img style="margin: 0px 5px 0px 0px; display: inline; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/07/image_thumb16.png" border="0" alt="image" width="254" height="216" align="left" /></a>The toolbar:</strong><br />
1: Send the input text to the network.<br />
2: a combo for selecting the method to send text to the network.<br />
3: copy the conversation log to the clipboard.<br />
4: save the conversation log to file.<br />
5: clean the conversation log.<br />
6: toggle audio on/off.<br />
<strong>The edit area:<br />
</strong>1: All the neurons that were sent to the network as input.<br />
2: All the neurons that were sent back from the network as output.<br />
3: The conversation log.<br />
4: The input box</p>
<p>In short, simply type some text in the textbox at the bottom, press enter and watch what happens.</p>
<p>When you are done testing, simply close the sandbox app and you are done (it wont ask to save any changes). If you would want to do some more testing later on with the same data, you can first save it to a different location (otherwise the sandbox data will be deleted when you start a new sandbox).</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=366" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/07/30/running-aici-from-the-designer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NND 0.5</title>
		<link>http://janbogaerts.name/index.php/2010/07/29/nnd-0-5/</link>
		<comments>http://janbogaerts.name/index.php/2010/07/29/nnd-0-5/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 17:56:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/07/29/nnd-0-5/</guid>
		<description><![CDATA[Note: Deprecated! It’s been a while, a bit longer then planned actually. As usual, there was a little unexpected detour required. This time, it was called the ‘neuron profiler’. Don’t ask, in short: I couldn’t find a bug, which would be traceable with a profiler thingy. The good news: found the bug, the bad: found [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>It’s been a while, a bit longer then planned actually. As usual, there was a little unexpected detour required. This time, it was called the ‘neuron profiler’. Don’t ask, in short: I couldn’t find a bug, which would be traceable with a profiler thingy. The good news: found the bug, the bad: found some new. Anyway, here’s what’s added, updated or fixed (sort of):</p>
<h4>The Designer:</h4>
<ul>
<li><a href="http://janbogaerts.name/wp-content/uploads/2010/07/image14.png"><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://janbogaerts.name/wp-content/uploads/2010/07/image_thumb14.png" width="179" height="111" /></a>A new neuron profiler, very similar to a memory profiler: it tracks down leaked neurons (which were created but not destroyed). This is a powerful little debug tool indeed. </li>
<li>the new flow editor is working. This is a lot faster now. Some bugs should also be fixed (maybe some new were added as well). </li>
<li>Search on all editors and tool windows has been made into an asynchronous process. </li>
<li>I’ve added a new clean up dialog box (can be found under ‘tools’), called ‘clean orphan flow data’. Which can be used to trace down and remove flow data that should have been deleted, but wasn’t and is now simply causing the parse to fail. </li>
<li>cleaned up the module import and export a bit, but not yet completely ready. </li>
<li>The Window manager has been updated. </li>
<li>The UI has been cleaned up a bit. I’ve tried to make it esthetically a little more appealing, hope you like it. </li>
<li>Some speed improvements in the core, more to come though. </li>
<li>I’ve reloaded the thesaurus demo, for 2 reasons: 1, the first demo wasn’t loaded correctly (had forgotten to turn on to include items with multiple words) and secondly, I mixed up the meaning of hyponym and hypernym in the thesaurus view (not in the Wordnet-channel view). A typical mix-up for me, a consequence of flying solo, I guess. Anyway, this project should be very useful for stress testing. </li>
</ul>
<h4>AICI:</h4>
<ul>
<li>You can now call .net functions from within the network. As a <a href="http://janbogaerts.name/index.php/2010/07/11/aici-calling-net/" target="_blank">test-case</a>, I’ve implemented the ‘file copy’ function (System.IO.File.Copy). At the moment, Aici requires some code for each known&#160; .net function to extract the arguments from the network’s input data. I plan to change this into something more generic, so that Aici knows that a function requires arguments ‘x’ and ‘y’ without having to lay out custom code for each function. </li>
<li>There’s a lot less neuron leakage going on. The flow recognition algorithm is almost completely clean (except for 1 remaining issue). The latter part of the process still needs some work. </li>
<li>I’ve cleaned up a lot of the code, removed bugs all over the place so that it becomes more responsive. </li>
<li>The flow recognition algorithm has also been updated to remove some more bugs that were causing the parse to fail. </li>
<li>The flow definition itself has also been updated considerably. In part so that it would be able to parse complex sentences, but mostly to get the speed up (dramatic results can be achieved with a correct filter, early on in the parse). </li>
</ul>
<p>All in all, I think I’m starting to see some light in the distance, finally. Perhaps it’s almost time to move to beta stage. <img src='http://janbogaerts.name/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=353" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/07/29/nnd-0-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neural network designer 0.4.5</title>
		<link>http://janbogaerts.name/index.php/2010/05/13/neural-network-designer-0-4-5/</link>
		<comments>http://janbogaerts.name/index.php/2010/05/13/neural-network-designer-0-4-5/#comments</comments>
		<pubDate>Thu, 13 May 2010 17:11:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/05/13/neural-network-designer-0-4-5/</guid>
		<description><![CDATA[Note: Deprecated! The tail side is still red hot from the afterburners. At full throttle, 2 editors were completely rewritten, the drag drop system cleaned up and a rare deadlock removed. Both the mindmap and code editors now support all the mouse functions: horizontal/vertical scrolling and zooming. Oh, and I’ve also cleaned up the AICI [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>The tail side is still red hot from the afterburners. At full throttle, 2 editors were completely rewritten, the drag drop system cleaned up and a rare deadlock removed. Both the mindmap and code editors now support all the mouse functions: horizontal/vertical scrolling and zooming. Oh, and I’ve also cleaned up the AICI code a little, though that needs more work.</p>
<p>Get the latest installation from the <a href="http://janbogaerts.name/index.php/downloads/">download section</a>.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=246" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/05/13/neural-network-designer-0-4-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging networks: split paths</title>
		<link>http://janbogaerts.name/index.php/2010/03/04/debugging-networks-split-paths/</link>
		<comments>http://janbogaerts.name/index.php/2010/03/04/debugging-networks-split-paths/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 16:54:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[debugging]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/03/04/debugging-networks-split-paths/</guid>
		<description><![CDATA[Note: Deprecated! An annoying side effect of this type of resonating network, is, when you have a bug in the code, you generally don’t get 0 answers, but a whole lot. This can sometimes be very confusing to debug. Why does a certain path give a positive result, when it shouldn’t? And more importantly (from [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/03/image4.png"><img style="margin: 0px 0px 0px 5px; display: inline; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/03/image_thumb4.png" alt="image" width="362" height="323" align="right" border="0" /></a> An annoying side effect of this type of resonating network, is, when you have a bug in the code, you generally don’t get 0 answers, but a whole lot. This can sometimes be very confusing to debug. Why does a certain path give a positive result, when it shouldn’t? And more importantly (from NND’s point of view at least), how can you follow the construction of that specific result, without the clutter of all the other processors? Enter ‘<em>split paths</em>’.</p>
<p><em><span style="color: #808080;">A split path represent the route that a result took, from start to now, expressed in the neurons that the path chose during all the splits. </span></em></p>
<p>As example, if only 1 split was executed to get to a result, and there were 2 neurons in that split, the path of the result only has 1 node and can have 2 possible values, those that were used in the split. In the real world though, a path usually has many, many nodes.</p>
<p>To record a split path, you first need to put a break point at a position where you know you will get many invalid results. That’s because a split path can only be recorded when the processors are still running, not when the result has already been calculated.</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/03/image6.png"><img style="margin: 0px 10px 0px 0px; display: inline; border: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/03/image_thumb6.png" alt="image" width="400" height="246" align="left" border="0" /></a>In the aici demo, it’s best to put a breakpoint in the ‘<em>Stage 1.1</em>’ code, in the if, second part (GetClusterMeaning(CurrentTo) == flow), if you drill down a bit further, you get the ‘Add split result’ instruction, which is basically the end point of the flow recognition  algorithm. (see picture below).</p>
<p><em><span style="color: #808080;">Put breakpoints on ‘Add split result’ instructions to find </span></em><em><span style="color: #808080;">invalid split paths.</span></em></p>
<p>Once you have a processor that is producing an invalid result at your breakpoint, you can store the split path. Select the processor, open the context menu (right mouse button on a processor in the debugger overview) and select ‘<em>Store split path</em>’.  This will produce a new entry in the tree on the ‘<em>Debugger</em>’ page (see 3th image). The root item will be ‘path for x’ where x is the name of the processor. The children are all the neurons that were selected for the path during a split instruction.</p>
<p>I usually kill everything after I have the path, the other processors will produce invalid results anyway, and you need to start a new run before it’s  possible to actually use the path anyway. <a href="http://janbogaerts.name/wp-content/uploads/2010/03/image2.png"><img style="margin: 0px 0px 5px 10px; display: inline; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/03/image_thumb2.png" alt="image" width="383" height="91" align="right" border="0" /></a></p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/03/image5.png"><img style="margin: 5px 0px 0px; display: inline; border: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2010/03/image_thumb5.png" alt="image" width="294" height="310" align="left" border="0" /></a>So, finally we can start using the data to debug our network. The basic idea is to  use the path for finding the processors that are following the specified path, so we can take a closer look at the code. In short, a split path provide a shortcut: instead of manually stepping through all the code and individually deciding which processors to follow, we can jump to the ones we are interested in. These will be highlighted in green and will pause when they have reached a split that is selected in the path. Off course, we first need to select the path in the debugger, and at least 1 child node, otherwise there wont be anything to see.</p>
<p><em><span style="color: #808080;">Processors that follow a selected split path will show up in green and pause whenever they reach a split that produces a neuron which is selected in the path.</span></em></p>
<p>&nbsp;</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/03/image2.png"> </a>One last note perhaps, once you have the processor you want, you can use the ‘Kill all but this’ command to stop all the other processors. This way there is less distraction in the debugger.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=205" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/03/04/debugging-networks-split-paths/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On resonance</title>
		<link>http://janbogaerts.name/index.php/2010/02/22/on-resonance/</link>
		<comments>http://janbogaerts.name/index.php/2010/02/22/on-resonance/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 18:10:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[N²D]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[resonance]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/02/22/on-resonance/</guid>
		<description><![CDATA[Just a small mental burp, while this thesaurus is (still) loading. In case you are looking for a mental image to visualize this whole concept, try this: Resonance. When a link gets activated (for instance, the one to the very first neuron), it creates a resonance that triggers one or more other neurons. This excitation [...]]]></description>
			<content:encoded><![CDATA[<p><em>Just a small mental burp, while this thesaurus is (still) loading.</em></p>
<p>In case you are looking for a mental image to visualize this whole concept, try this: <strong>Resonance. </strong>When a link gets activated (for instance, the one to the very first neuron), it creates a resonance that triggers one or more other neurons. This excitation in turn can cause another link between 2 neurons to be activated, causing more resonance and so and and on until the whole thing settles down.</p>
<p>I have absolutely no prove or idea that this is how it works in the real world, that’s just how my model can be interpreted. Truth be told, this is not how I conceived the thing (aka lets try to create a model that uses resonance), it was rather more like: I have 2 neurons, they are linked, how can I make something happen? Well, I can attach some code to the link and execute that. Cool. But, wait a moment, that looks like resonance…</p>
<p><em>and we just passed ‘culminate’, pfff</em></p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=186" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/02/22/on-resonance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NND 0.3</title>
		<link>http://janbogaerts.name/index.php/2010/01/20/nnd-0-3/</link>
		<comments>http://janbogaerts.name/index.php/2010/01/20/nnd-0-3/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 19:16:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[AICI]]></category>
		<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2010/01/20/nnd-0-3/</guid>
		<description><![CDATA[Note: Deprecated! The new release is finally ready.&#160; The Aici demo took a bit longer than planned. Also, lots of things have been fixed and updated. Here’s a non exhaustive list: There’s a complete new lockmanager running in the background. This is much more secure (thread-wise, that is) and a lot faster. It’s still a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p> The new release is finally ready.&#160; The Aici demo took a bit longer than planned. Also, lots of things have been fixed and updated. Here’s a non exhaustive list:</p>
<ul>
<li><a href="http://janbogaerts.name/wp-content/uploads/2010/01/image1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://janbogaerts.name/wp-content/uploads/2010/01/image_thumb1.png" width="207" height="296" /></a>There’s a complete new lockmanager running in the background. This is much more secure (thread-wise, that is) and a lot faster. It’s still a bit of a diesel though, it takes some time for it to get going, but once running, it should be pretty fast. The slow start is due to the storage mechanism (all xml files currently). This is the major drag on the entire system at the moment, and will be fixed next.</li>
<li><a href="http://www.ebswift.com/OpenSource/WordNetSQLServer/" target="_blank">Wordnet</a> import has been seriously updated, a lot more info is retrieved, and it’s now also possible to import the entire db in one go (although not yet advisable, due to a memory bug in the designer, it still takes a major byte out of the hard disk and it simply takes ridiculously long).</li>
<li>The thesaurus has been given a make over to allow for editing and filtering. He can now also display / edit non recursive relationships. Drag drop is also supported.</li>
<li> The frame editor has been updated considerably: drag drop support has been added and frame element filters/restrictions have also been introduced (will probably be extended in the future).</li>
<li>I changed the function of the ‘contains’ operator a bit. It now only checks the contents of a variable. For clusters/children, there are the new instructions (IsClustesteredBy, LinkExists, ContainsChildren, GetInFiltered,…).</li>
<li>I have added the ‘not contains’ operator.</li>
<li>New instructions:</li>
<ul>
<li>Arithmetic group (+-/*%): I finally caved on those. My <a href="http://janbogaerts.name/wp-content/uploads/2010/01/image2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://janbogaerts.name/wp-content/uploads/2010/01/image_thumb2.png" width="559" height="223" /></a>original plan was to see how far I got without using any arithmetic in the neural code. I guess, this is as far as I got with that.</li>
<li>Get-at group: get child at, get cluster at, get out at, get in at, get info at.</li>
<li>Distinct</li>
<li>get Incoming, get outgoing, get info, Get in filtered, get out filtered, Get info filtered</li>
<li>Is clustered by, Link exists, Contains children</li>
<li>Remove-at group: Remove child at, remove info at, remove link in at, remove link out at</li>
</ul>
<li>many, many bug fixes, updates and little improvements.</li>
</ul>
<h4>Aici 1</h4>
<p>This demo is a small chat interface. Though, in it’s current state, it’s not much more than a framework. It can initiate a conversation, close it, ask for the name of the user and store the data. It’s not yet able to fully recognize a recurring user since I haven’t defined the neural code for this yet. </p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/01/image3.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://janbogaerts.name/wp-content/uploads/2010/01/image_thumb3.png" width="204" height="315" /></a> I will be explaining how it works and how you can expand on this functionality, shortly. For those who can’t wait and want to get a peek under the hood, here are some pointers to get started:</p>
<ul>
<li>There are 3 main stages:</li>
<ul>
<li>Flow recognition, which is basically the syntactical stage: check the word types and order. Project pages are: </li>
<ul>
<li>the flows (aici/flows), </li>
<li>the code that is attached to these flows (aici/code/flow code)</li>
<li>the code that recognizes the flows in the input (aici/code/flow recognition)</li>
</ul>
<li>Frame recognition, or the semantics stage. This is where we try to find meaning in the words. Project pages are:</li>
<ul>
<li>the frames (aici/frames)</li>
<li>the code that is attached to the frame sequences (aici/code/frame seq code). The frames don’t have code (yet).</li>
<li>the code that recognizes the frames in the flow results (aici/code/frame recognition).</li>
</ul>
<li>action execution, or the response of the network to the input. Project pages are:</li>
<ul>
<li>Actions: all the different actions that the system knows (not yet a lot, should be extended).</li>
<li>Output: some common code blocks for rendering output. This is also used by the frame sequences, since they are also used to render data in a predefined format.</li>
<li>Action helpers: code that the action neurons can use to perform common tasks, like stopping a conversation or controlling the timers. Timer callbacks are also stored here.</li>
</ul>
</ul>
<li>The transition between the different stages can be located in aici/code/transition. </li>
<ul>
<li>More specifically, the ‘Transition’ neuron is used to go from the flows to the frames and finally to the actions.&#160; </li>
<li>An action is started using the ‘Execute action’ neuron as meaning for a link from a data cluster to the action that needs to be started.</li>
</ul>
<li>The project also contains some mindmaps that describe the inner data structures and functionality.</li>
</ul>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=180" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2010/01/20/nnd-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demos explained: Scanner</title>
		<link>http://janbogaerts.name/index.php/2009/10/01/demos-explained-scanner/</link>
		<comments>http://janbogaerts.name/index.php/2009/10/01/demos-explained-scanner/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:19:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AICI]]></category>
		<category><![CDATA[flow recoginition]]></category>
		<category><![CDATA[flows]]></category>
		<category><![CDATA[scanner]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/10/01/demos-explained-scanner/</guid>
		<description><![CDATA[Note: Deprecated! Intro Time for the second demo overview: the Scanner.  It builds on most of the ideas found in the first demo but it goes way further, and actually does something very useful (although you wouldn’t say it at first).  It’s probably going to be a lengthy piece so I’m thinking of cutting it [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<h4>Intro</h4>
<p>Time for the second demo overview: the Scanner.  It builds on most of the ideas found in the <a href="http://janbogaerts.name/index.php/2009/03/12/demos-explained-echo/" target="_blank">first demo</a> but it goes way further, and actually does something very useful (although you wouldn’t say it at first).  It’s probably going to be a lengthy piece so I’m thinking of cutting it in 2 or maybe even 3 parts. Anyway, lets first start it up, either through the start menu shortcut (in the <em>Demo’s</em> sub folder, conveniently called <em>Scanner demo</em>), or by opening it in NND (<em>File/Open</em>, select the ‘<em>My documents/NND/Demos/Scanner</em>’ folder). Once the project is loaded, you should see a single text communication channel open (called Text sin), if this is not the case, go to <em>View/Communication channels/Text</em> sin and make certain that it is is selected.</p>
<h4>Overview</h4>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/10/image.png"><img style="display: inline; margin: 0px 0px 5px 10px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2009/10/image_thumb.png" border="0" alt="image" width="606" height="419" align="right" /></a></p>
<p>Lets get a taste of what it does, so enter some text (or leave the one that’s already there) and press the ‘send’ button (or enter).</p>
<p>You’ll notice that it basically does the same thing as the <a href="http://janbogaerts.name/index.php/2009/03/12/demos-explained-echo/" target="_blank">echo demo</a>: the input text is echoed back, except that it’s a bit slower. If you had the debugger tab open, you probably also noticed a lot more activity, so something more must be going on.</p>
<p>And indeed, if you take a closer look to the text sin channel, in the upper section, you can see the neurons that were send to the network (on the left) and those that were returned (on the right), which are different. This was not the case with the echo demo, it simply sent all the incoming neurons back out, as they were. In this demo though, we get back something completely different: TextNeurons, that represent the same thing as the int neurons that were sent as input (if you regard them as ASCII characters). Hence the name of the demo, it’s a scanner.</p>
<p>Converting a stream of ASCII chars into words, integers, doubles and signs is a pretty useful feature and that’s all this demo is capable of doing, but that’s only because <em>I</em> stopped there. You see, in the background, is a general purpose algorithm that converts an input stream of neurons into a single result cluster, using any and all of the flows that are defined in the network. This means that you can use the same algorithm with many different flow definitions. I have simply defined some to recognize words, integers and doubles. You could go further and add flows to find verbs, sentence subjects,.. (in fact, that’s what the <em>AICI 1</em> demo does). You could even go further still and create flows for visual objects or audio fragments, the same algorithm can be used. Unfortunately though, the editor doesn’t yet support such types of displays for flows (will probably be added somewhere in the future though).</p>
<h4>Details</h4>
<p>So how is the translation actually performed? To explain this, let me first recap some of the basic concepts of neurons and flows:</p>
<ul>
<li><a href="http://janbogaerts.name/wp-content/uploads/2009/10/image1.png"><img style="display: inline; margin: 0px 0px 0px 10px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2009/10/image_thumb1.png" border="0" alt="image" width="105" height="98" align="right" /></a>The different types of  data available to a neuron are: incoming and outgoing links, possibly one or more <em>parent</em> clusters, for clusters possibly 1 or more children and a <em>meaning</em>. And finally value neurons also have their value of course. This is important, cause when the translation process starts, this is all the available information.</li>
<li>Flows are nothing more than <em>clusters</em> that contain flow items, which can be statics or conditionals (loops and options). These in turn can only contain conditional parts. They represent a single branch of the decision tree. Parts can again have the same data as flows: statics or conditionals. So if you are a neuron (a static, part, conditional or flow), you can always look up into your list of parents to see in which flows and parts it is used.</li>
</ul>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/10/image2.png"><img style="display: inline; margin: 0px 0px 0px 10px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2009/10/image_thumb2.png" border="0" alt="image" width="114" height="108" align="left" /></a>Now, if you recall from the first demo, an input starts by creating an IntNeuron for each ASCII value, which is linked to another neuron using the ‘<em>Letter</em>’ neuron (ID 109). These are all put on the execution stack and the processor starts (the <em>Rules</em> code on the <em>Letter</em> neuron is executed).</p>
<p>So both neurons are new and only have each other as links. This means that <a href="http://janbogaerts.name/wp-content/uploads/2009/10/image3.png"><img style="display: inline; margin: 0px 0px 0px 10px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2009/10/image_thumb3.png" border="0" alt="image" width="145" height="110" align="right" /></a> we can’t use links or parent/child relationships to resolve the first step, but instead must use something different. The only other thing that remains is the value of the int neurons, so this is compared against some constants to see if they are digits (0..9) alpha numeric (a..z+A..Z), spaces | returns, or something else.  This comparison results in the creation of 1 new neuron per input neuron: the result cluster, in which we store the integer. One of these clusters (or it’s duplicate, due to a split) will eventually store the end result.  This cluster is linked to one of 3 static neurons: <em>Digit</em>, <em>Alpha or</em> <em>Space </em>(signs like . or , are handled a bit differently, this will be explained later). Naturally, if the integers would represent color values, we would use other starting points than <em>digit</em> or <em>alpha</em>. In other words, this first part is variable according to the type of input and the required accuracy of the algorithm. As meaning, we use  the start of the ‘flow recognition’ algorithm, called ‘<em>Stage 1.1</em>’ and put the result cluster back on the stack.  It’s important to put this one back on the stack, and not the item we are looking for. That’s because the algorithm can perform numerous splits and we want the result to be duplicated not the searchable, cause the contents of the list are continuously modified and we don’t want the result of one processor to be modified by  another one (I had to learn this the hard way).</p>
<p>After this initial step, the actual recognition algorithm kicks in. This consists out of 4 stages, grouped by 2. Meaning that  stage 1.2 is executed immediately after stage 1.1 for each neuron (this is the same for stage 2,1 and 2.2), but at the end of stage 1.2 and 2.2 all the result neurons are collected into a single global. Only after the last link of the last item on the stack has  been processed, are all the result clusters put back on the stack, with links for the next stage.  This is done for allowing to group items together.</p>
<p>The different stages are:</p>
<ul>
<li><em><strong>Stage 1.1 (search parts/flows)</strong></em>: Find conditional parts or flows in the list of parents of the searchable. If there are multiple results, perform a split for each, after the result list has been filtered (these are the shortcuts). If there are no results and this is the only and last item still on the stack, the end result has been found.</li>
<li><em><strong>Stage 1.2 (sequence-combine and filter): </strong></em>Check if items are sequential (2 flow items declared after each other in the same parent list, which is a part or flow)<strong><em> </em></strong>and handle floating flows, which are allowed to appear anywhere in the input stream, but which break up the sequence of other items.  Different actions can be performed if the order of the items is not ok: try to solve further or exit without result. Results of sequential items are grouped together.</li>
<li><em><strong>Stage 2.1 (search conditionals): </strong></em>Find conditionals in the list of parents of the searchable if this is a conditional part, otherwise the stage is simply skipped. If there are multiple results, perform a split for each after the result list has been filtered (not yet completely implemented at this stage). If there are no results, there is an error in the flow definition.</li>
<li><strong><em>Stage 2.2 (process loops and sync-points):</em></strong> If there was a conditional found in the previous stage, check if this is a loop. If so, and the previous item is of the same loop, combine the results. Also start a sync-point (will be explained later) if this was defined on the conditional.</li>
</ul>
<p>These 4 stages are repeated until there is only 1 result cluster on the stack that represents the end result of a flow which is no longer used in any other flows. This cluster is made the result of the  split for the processor it ran on.  Off course, because there were possibly many splits, there could be many results. These will all be presented in the split-callback cluster (you need to provide a code cluster to the Split instruction, which will be called when all sub processors are done). In this demo, the result is sent back to the sin that caused the input, in a normal situation thought, this will simply start another process, as is done in the AICI 1 demo.</p>
<p>During this whole process, the algorithm is capable of executing callback code (attached to the statics, conditionals, parts and flows) at certain specific moments in the code. This is where the magic happens. The following types of callbacks are possible (together with  their execution time):</p>
<ul>
<li>Flow code: this code cluster is executed when a flow has been recognized in the stream. The ‘Result’ variable (ID 1822) contains all the neurons that match the flow. It’s here for instance that the int neurons are converted to a single word using the CiToS (Cluster with ints to string) instruction.</li>
<li>Filter flow code: this code cluster is called from stage 1.1  (or 2.1, but this is not yet completely implemented) just after all the next items were retrieved from the list of parents of the searchable (stored in the CurrentTo variable). It allows the flow item to determine if it is a valid result, given the current state of the network. This is done by checking the contents of a number of globals, like ‘<em>Prev stage item</em>’ (ID 1956), which contains the previously processed neuron.</li>
</ul>
<p>In the next post, I’ll go deeper into the specifics of the algorithm itself, for as you’ve guessed by know, it’s a bit funky, and I don’t want to forget all the subtleties, since it’s definitely still a work in progress (there are many improvements still possible).</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=168" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/10/01/demos-explained-scanner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deadlocks and DotNet</title>
		<link>http://janbogaerts.name/index.php/2009/06/28/deadlocks-and-dotnet/</link>
		<comments>http://janbogaerts.name/index.php/2009/06/28/deadlocks-and-dotnet/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 18:56:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[deadlocks]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/06/28/deadlocks-and-dotnet/</guid>
		<description><![CDATA[Well, that bear (you know, the deadlocks) turned out to be a formidable grizzly. Now, I don’t know about you, but me, when I see a monster like that, I turn around and run… I can assure you, there’s nothing better than a fierce predator on your tail to streamline things.&#160; First to go was [...]]]></description>
			<content:encoded><![CDATA[<p>Well, that bear (you know, <a href="http://janbogaerts.name/index.php/2009/06/03/nnd-011-released/" target="_blank">the deadlocks</a>) turned out to be a formidable grizzly. Now, I don’t know about you, but me, when I see a monster like that, I turn around and run… I can assure you, there’s nothing better than a fierce predator on your tail to streamline things.&#160; First to go was .net’s WeakReference pattern.&#160; This simply couldn’t keep up with the engine (a change that touched every part of the designer: all editors, toolbox, explorer, thesaurus, timers,…). Next was the ReaderWriterLockSlim thingy (used to protect data blocks from corruption), which has a very peculiar definition of slim: you have no idea how many times I have seen my RAM blown up because of a simple integer scan. Lots of other stuff got tuned up or hacked out as well, so the expected update has arrived.</p>
<p>The engine appears to be stabling out, although it is still acting fishy on single core machines, where there are errors I don’t have on my multi core dev system, so I need to move to a different machine to test this out. The designer is also still very much lingering behind the engine when this is processing at full speed, but the UI should remain responsive now.</p>
<p>I have also included an extra demo project called ‘<em>Scanner</em>’. It is able to transform an input stream containing integers, representing characters, into words and numbers (ints and doubles).&#160; This doesn’t seem much, and it isn’t, except that it is doing this using a couple of flows and a general purpose algorithm (processing is still slow, mostly because the UI is trying to catch up).&#160; This was the guts of the older ‘<em>English language definition</em>’ demo, which I have split into 2: the scanner and the language definition, which is no longer able to do any processing (all code removed). It’s an example of a more complex flow.</p>
<p>The scanner demo also has the <em>number scanning problem</em> fixed (numbers longer than 2 came out with multiple results). This appeared to be caused by deleting a couple of neurons to many (in the scanning algorithm).&#160; I had already experienced the dangers of deleting neurons I thought were no longer used, but which were because of the splits. I will probably have to implement some sort of a garbage collection system to clean up unused neurons (but that’s for later).</p>
<p>Anyway, here’s the latest <a href="http://www.janbogaerts.name/files/setup.exe" target="_blank">download</a> (best to remove previous installation before installing this one).</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=139" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/06/28/deadlocks-and-dotnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The debugger</title>
		<link>http://janbogaerts.name/index.php/2009/06/09/the-debugger/</link>
		<comments>http://janbogaerts.name/index.php/2009/06/09/the-debugger/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 18:36:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code editor]]></category>
		<category><![CDATA[debugging]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/06/09/the-debugger/</guid>
		<description><![CDATA[Note: Deprecated! This is the very first debugger I have written, and I am pretty proud about it! It’s not a masterpiece, but functional.&#160; The code definitely could use some tidying up and some speed tuning wouldn’t hurt at all, but you can trace bugs, inspect values and follow the program flow, and that’s already [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>This is the very first debugger I have written, and I am pretty proud about it! It’s not a masterpiece, but functional.&#160; The code definitely could use some tidying up and some speed tuning wouldn’t hurt at all, but you can trace bugs, inspect values and follow the program flow, and that’s already something I guess. To explain the debugger to you, I thought it perhaps best to do it using some of the demo’s.&#160; Simply open the ‘<em>Echo words</em>’ project to get started.</p>
<h4>Set up</h4>
<p>Before we send some input to the network, we need to set up the designer so that it is ready to debug:</p>
<ol>
<li>We need to&#160; put a breakpoint&#160; on a statement. You can do this in a code editor. The very first code block that gets called in this network is the <em>rules</em> code on the ‘<em>Contains Word</em>’ neuron, so simply double click on the ‘<em>Code: Contains Word</em>’ node in the <em>Projects</em> tab.       <br />To set the breakpoint on the first statement, expand the ‘<em>CheckStartTextBlock – space insertion</em>’ code block and click in the little circle on the ‘<em>if</em>’ statement. This should make it turn red. </li>
<li>The designer also needs to be set in design mode.&#160; You can do this by the drop down box on the main toolbar or on the debugger tab’s toolbar. There are 3 possible modes:
<ul>
<li>Off: no debugging is possible.&#160; This mode runs faster. </li>
<li>Normal: The debugger stops whenever a breakpoint is encountered. When a breakpoint is encountered or a processor was paused, it is possible to inspect values.&#160; This is how most other debuggers provide debug capabilities. </li>
<li>Slow motion: In this mode, the debugger automatically pauses and continues on every statement, creating a <em>movie</em> of the execution process. You can use the throttle bar on the left of the combo box to select the speed, which is updated real time. It’s possible to pause and continue this movie using the pause and play buttons on the debugger tab’s menu.&#160; I have included this type of debugging mode because I believe it is sometimes useful to see the path that is taken to a specific point of interest. With this feature, you don’t have to keep pressing <em>F6</em> to advance. </li>
</ul>
</li>
<li>It’s also possible, but not required, to let a processor stop when an error was encountered. This is done by activating the ‘<em>Break on error</em>’ button. This only works when the error happened on a processor in debug mode. </li>
</ol>
<p></p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image15.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px; border-right-width: 0px" height="615" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb15.png" width="768" border="0" /></a> </p>
</p>
<p>Note that it is not possible to switch between different modes while a processor is running. You can only specify the debug mode for newly created processors. </p>
<p>An overview of all the breakpoints in the project can be found on the right side of the debugger tab. Currently it simply lists all the breakpoints, but new features should be added to this list shortly.</p>
<h4>Start a processor</h4>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image16.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="473" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb16.png" width="378" align="right" border="0" /></a> To get started, we need to send&#160; some data to the network through it’s text-sin (sensory interface), so make certain that the ‘<em>Echo channel</em>’ is opened (a communication&#160; channel is the visual interface for a sin). Go to <em>View/Communication Channels/Echo channel</em>, and make certain it is checked (and that the tab is selected).</p>
<p>Once the channel is open, type some text in the input section and send it to the network by pressing enter (or the <em>send</em> button). You should see a neuron appear in the left upper screen, which represents the input event (the neuron that will be solved by the processor). Your text will also appear as a string in the centre dialog screen. There will also appear an object in the centre screen of the debugger tab. This represents the processor that was started and which is handling the input event. </p>
</p>
<p>The processor overview contains 2 numbers. The first number represents the name of the processor. This value can be changed and is used to identify it between multiple processors. The second number represents the number of neurons that are left on the stack + the current neuron that&#160; is being solved. </p>
<p>The buttons represent, from left to right:</p>
<ul>
<li>a toggle button that can be used to open and close the detailed view for the processor.&#160; </li>
<li>An indicator that is selected when the processor is paused. This is used to inform you on the run state, it’s not an interactive button. </li>
<li>An indicator that lets you know that the processor is still running or not. When this is no longer selected, an irrecoverable error occurred in the processor and it is actually dead (in other words, you’ve got a problem when this is no longer selected). </li>
</ul>
<p>Once a processor is started, the middle square in the right side group on the status bar will be blue.&#160; This will remain so for as long as the network has still a processor running. </p>
<h4>Detailed view</h4>
<p>If you press the first toggle button, a detailed view of the processor should open in a new tab (using the same name as that of the processor). </p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image17.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px; border-right-width: 0px" height="484" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb17.png" width="637" border="0" /></a>&#160;</p>
<p>This tab is divided into 3 sections (from left to right):</p>
<ul>
<li>The content of the execution stack.&#160; This stack contains the neurons that have to be solved by the processor.&#160; You can add and remove neurons from/to this stack using the Pop and Push instructions (The first neuron is automatically added). In our demo, there is only 1 item currently on the stack, that’s the one being solved. This item displays&#160; a square in the stack UI element. </li>
<li>All the neurons that were assigned as meaning to the links starting from the solvable neuron. The top one will be executed first.&#160; A special case is the ‘Actions’ neuron, which will only be solved when all the others have been, no matter where it is found in the list. </li>
<li>A stack containing all the processor frames.&#160; A frame represents a single cluster’s code that is being executed by the processor. Since some statements call other clusters, like conditional statements, code blocks,… a processor will usually have a number of frames active. This provides an exact view of the processor’s current execution location.      <br />The following info is provided for each frame, from top to bottom
<ul>
<li>The code, in textual form. Each code unit can easily be selected separately for debugging purposes (check out the context menu on each item to see what you can do with it).&#160; It’s not possible to edit in this window though (you have to open the editor for this). </li>
<li>The name (or id when no name is defined) of the neuron that defines all the code. </li>
<li>The relationship between the neuron that defines the code and the actual cluster containing the code.&#160; This can be:
<ul>
<li>Children: in this case, the neuron that defines the code, is the cluster that contains the code. </li>
<li>Rules: the neuron that defines the code has a link with meaning ‘Actions’ to a code cluster. </li>
<li>Actions: the neuron that defines the code has a link with meaning ‘Actions’ to a code cluster. </li>
</ul>
</li>
</ul>
</li>
</ul>
<p>The detailed view is great to have an overview of where we are in the processing stage, but it isn’t very useful to&#160; debug a program flow. It’s better to use the code editor for this because it provides a better overview of the connection between the statements.&#160; To do this, open the editor containing the code and make certain the the processor in the debugger tab’s center screen is selected.&#160; This last action is very important for the following reason: a detailed view is opened for a specific processor, so a single tab always links to a single processor.&#160; Code however is not specific to a processor, it can be called by many processors. So it needs to know the processor context for displaying debug information.&#160; It uses the processor that is selected in the&#160; debugger overview for this purpose.&#160; This has a nice&#160; side effect: when you have multiple processors running, you can quickly switch between active processor and view where each one is in the code. Note that the code editor will put a red square around the statement that will be executed next, to indicate execution location.</p>
<h4>Do the debug</h4>
</p>
</p>
<p> <a href="http://janbogaerts.name/wp-content/uploads/2009/06/image18.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px; border-right-width: 0px" height="669" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb18.png" width="801" border="0" /></a><br />
<h5>Code flow</h5>
<p>We are ready now to start debugging the network. The first thing you can do is walk through the code using the following commands:</p>
<ul>
<li><strong>Run (F5)</strong>: continue execution until the next breakpoint or until the processor is finished (only active when paused). </li>
<li><strong>Next step (F6)</strong>: execute the next step only and&#160; pause again (only active when paused). Note, when&#160; you do a <em>step next</em> on a split instruction that creates multiple sub processors, all sub processors will also wait on the next statement, they wont run wild, but wait until you tell them what to do, which is very useful for inspecting stuff. </li>
<li><strong>Pause</strong>: stop execution and wait until the <em>Run</em> or <em>Next step</em> command have been given (only active when running). </li>
<li><strong>Stop</strong>: Ok, this sounds silly, I know, but I haven’t yet implemented the stop.&#160; I’ve always been able to stop in other ways (I’m running the debugger inside another debugger which is great for creating a schizoid coding mind). If you feel an urgent need for this command, let me know, otherwise, it’ll get in there,&#160; I just have absolutely no time frame for this. </li>
</ul>
<h5>Inspecting values</h5>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image19.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="186" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb19.png" width="275" align="right" border="0" /></a> When a processor is paused, it is possible to inspect the value of any item that returns a result, this includes: variables, globals, result statements, bool expressions and ByRefs. You can do this by selecting the item you want to inspect with the mouse, and pressing <strong>F7</strong> or through it’s context menu (Inspect value). This opens a dialog with the debug info of the result.&#160; This can be empty, 1 or multiple neurons.</p>
<p>Debug info for a neuron contains the following info:</p>
<ul>
<li>All the incoming links, where they point to and the meaning of the link (note that the meaning UI element still has to be changed into a debug neuron). </li>
<li>All the outgoing links, where they point to and the meaning of&#160; the link. </li>
<li>All the clusters that contain the parent node. </li>
<li>When the parent node is a cluster, all it’s children. </li>
<li>When the parent is a cluster, the meaning of the cluster is depicted, in brackets, after it’s name.&#160; This is also a debug UI element. </li>
</ul>
<p>The debug info is depicted recursively for all neurons. This type of debug visualization is used in multiple places throughout the designer.&#160; You might have noticed that the <em>echo channel</em> uses this UI element to depict the incoming and outgoing neurons. The detailed view of a processor also uses it to depict most of the neurons. </p>
<h5>Watches</h5>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image20.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="162" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb20.png" width="451" align="left" border="0" /></a> A final feature of the debugger is watches.&#160; These allow you to observe the content of variables and globals in a list for a single processor or across all processors for those that are paused.&#160; </p>
<p>This feature is best experienced using the ‘<em>English language definition</em>’ demo since this performs some splits while processing text input. I have put a breakpoint in the ‘<em>Code: Stage 1.1</em>’ page on the second <em>if</em> statement&#160; (first child <em>if</em> in the left-side path of the only root <em>if</em>) and ran it until ‘<em>Found == Sentence(flow</em>)’ to get the screenshot on the left.</p>
<p>To add watches, drag a variable or global and drop it in the left part of the debugger tab.&#160; This will add it at the bottom of the list. If you are dragging it from a code editor, it is best to hold the <em>ctrl</em> key pressed, so that the item stays at it’s original position.&#160; Note that it’s currently not yet possible to drag from the toolbox.&#160; This is a small bug that still needs fixing. Also note that it’s not yet&#160; possible to remove variables (except by editing the designer file).&#160; This command will be added very soon (just goes to show how fresh the debugger still is).</p>
<p>By default, a list of watches with their values for the selected processor is depicted.&#160; The left side is the name of the variable (or it’s id if no name has yet been assigned). To the right of the name, the content of the variable is displayed. This can be empty, 1 or more neurons, all of which are depicted using the debug UI element for neurons.</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image21.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="207" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb21.png" width="521" align="right" border="0" /></a> </p>
</p>
</p>
<p>If you switch to variable view, the left section of the debugger tab will only display a radio button for each watch. The middle section, which contains processor info, will now display the contents of the selected watch for each processor.&#160; </p>
<p>Also note that, when a processor gets split up into multiple sub procs, the view will switch to a tree.&#160; The root node shows the number of processors contained by the node. If a new input event is sent to the network before the previous has been processed, it is added as a list item, at end of the list. If sub processors split up, more sub nodes are created as children of the nodes that triggered the split (tree structure). This allows you to see how processors are related to each other.&#160; At the moment you can only see the current state, through the tree/list structure.&#160; In the future, an extra view might be added that shows a line view over time to show when and how may processors did a split and when they died out, although that’s just an idea at the moment, so don’t put your hopes up to see it any time soon, there are still far more important things to do.</p>
<h5>Errors and warnings</h5>
<p>If there are any errors generated by the code, either through the <em>Error</em> or <em>Warning</em> instruction or because of an error in the code, you can view exactly where it occurred. All messages are stored in the log tab. When they are blue, you can double click on them. This will open a code editor with the statement selected&#160; that caused the log item (note: if it is somewhere in a sub section, this is not expanded automatically) Because you can use the same statement in multiple locations, only the first few will be selected, this is to take care of some problems with WPF’s standard controls (will be fixed in the future).</p>
<p>As you can see, it’s all still fresh,&#160; but functional. The debugger has already become a central point of usage for me and I suspect this will only increase, so this will get some extensive testing early on. There are plenty of things that still need adding like conditional breakpoints, counts on breakpoints, enabling-disabling of breakpoints, more commands on the breakpoints-list (like clear, enable/disable all,…),… These things will probably be added as needed.</p>
<p>I am certain there is plenty more to say about NND’s debugger, I just can’t think of anything&#160; anymore, so I guess I’ll leave it by this for today. It’s already turned out a long enough post.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=134" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/06/09/the-debugger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing code: Tips and tricks</title>
		<link>http://janbogaerts.name/index.php/2009/06/05/designing-code-tips-and-tricks/</link>
		<comments>http://janbogaerts.name/index.php/2009/06/05/designing-code-tips-and-tricks/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 15:13:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code editor]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/06/05/designing-code-tips-and-tricks/</guid>
		<description><![CDATA[Coding tips and tricks.]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>Note: this is the second part of in a<a href="http://janbogaerts.name/index.php/2009/06/05/designing-code-editing-techniques/" target="_blank"> group of 3</a>.</p>
<p>N2D is still in proto type stage, so there are plenty of idiosyncrasies to work around. Here are some tips and tricks that might make things a bit easier.</p>
<ul>
<li><span style="text-decoration: line-through;">When there is lots of code visible, things can slow down fast.</span> (fixed)  To avoid this, use the drill down/up arrows on some statements like conditional statements to close as much as possible.  If you are drilling down and need to see more code, you can always open sub items into a new code editor.  This will speed up things dramatically. You can do this on conditionals, their parts and code blocks</li>
<li><a href="http://janbogaerts.name/wp-content/uploads/2009/06/image11.png"><img style="display: inline; margin: 0px 0px 0px 10px; border-width: 0px;" title="image" src="http://janbogaerts.name/wp-content/uploads/2009/06/image-thumb11.png" border="0" alt="image" width="217" height="255" align="right" /></a> Be careful with copying items around (or using shift drag). The editor displays items that are used in multiple places, but you can still be surprised when you change something to an argument only to see it changed it multiple places. The same goes for breakpoints: if an item is used in multiple places and it has a breakpoint defined, it will break everywhere the statement is used.  Keep this in mind while using copy or shift-drag.</li>
<li>I use the <em>sync with explorer</em> command (F4) a lot. This was mainly because the copy paste system wasn’t working yet.  But it’s still useful I think: it’s a quick route into the explorer.</li>
<li>The Toolbox is really useful to build code.  If you select the ‘Instructions’ section, you get a good overview of all the available instructions, grouped by functionality.  To quickly collapse and expand the groups, you can use the context menu of the toolbar.</li>
<li>It’s possible to add items to the toolbox, although this currently has to be done by hacking the “XXXdesigner.xml” file.</li>
</ul>
<h4>Final note</h4>
<p>There are still a number of shortcomings in the editor that need to be worked out, more specifically:</p>
<ul>
<li><span style="text-decoration: line-through;">CPU and memory usage are a problem resulting in a very slow view when there is lot&#8217;s of visible data. This needs be solved by a custom control.</span> (Done<span style="text-decoration: line-through;">)<br />
</span></li>
<li>Keyboard entry functionality, similar to the flow editor must still be implemented, this should speed up code editing significantly, compared to the all drag-drop or copy-paste solution.</li>
<li>Clean up the views some so that they are clearer, compacter,…</li>
</ul>
<p>Next up will be the debugger, I guess.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=106" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/06/05/designing-code-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing code: Editing techniques</title>
		<link>http://janbogaerts.name/index.php/2009/06/05/designing-code-editing-techniques/</link>
		<comments>http://janbogaerts.name/index.php/2009/06/05/designing-code-editing-techniques/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 15:09:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code editor]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/06/05/designing-code-editing-techniques/</guid>
		<description><![CDATA[Note: Deprecated! Today, I&#8217;d like to talk a bit about the code editor which is used to create and view executable data. Notice that I used the verb &#8216;designing&#8216; instead of &#8216;writing&#8216; code in the title. There&#8217;s a very simple reason for this: N2D doesn&#8217;t yet define a syntax for textual input of code, instead, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>Today, I&#8217;d like to talk a bit about the code editor which is used to create and view executable data. Notice that I used the verb &#8216;<em>designing</em>&#8216; instead of <em>&#8216;writing</em>&#8216; code in the title. There&#8217;s a very simple reason for this: N2D doesn&#8217;t yet define a syntax for textual input of code, instead, there is the code designer which provides a visual view on the raw assembly code (so there is no complex conversion required). The idea is that it will eventually (I hope sooner rather than later) be able to understand natural language, making a custom syntax not necessary.  Because designing a good language, with accompanying parser can be tricky and time consuming, I opted to skip this step and instead rely on WPF for me to build a powerful designer with.  This has sort of worked.</p>
<p>Before you get started with this post, might I suggest you to check the <a href="http://janbogaerts.name/index.php/2009/03/12/demos-explained-echo/" target="_blank">Echo words demo explanation</a> for a more general introduction on how to use the code editor. This provides a good introduction for most of the general concepts. This post will deal with some more technical details.  Because of the length, I decided to split it into 3 posts:</p>
<ul>
<li>editing techniques: that’s this post</li>
<li>all the different <a href="http://janbogaerts.name/index.php/2009/06/05/designing-code-statements/" target="_blank">code statements</a></li>
<li>and: <a href="http://janbogaerts.name/index.php/2009/06/05/designing-code-tips-and-tricks/" target="_blank">tips and tricks</a>.</li>
</ul>
<h4>Editing techniques</h4>
<p>Code editing is currently based on a drag drop paradigm in which you drag statements to the editor and drop them at the appropriate location.</p>
<ul>
<li>Drop locations are indicated using a gray, rounded border, containing the name of the drop target, like &#8216;Args&#8217;, &#8216;Children&#8217;,&#8230;</li>
<li>To add statements at the bottom, simply drop them somewhere in the white space below or at the side.</li>
<li>To insert items, drop them on the little black line above the statement.  The previous statement will be moved down.</li>
<li>When you drag an item and drop it somewhere else, it will be moved, except if the &#8216;shift&#8217; key is pressed, in which case the item will remain at it&#8217;s original position and will be copied to the drop target (no duplicate, but the same neuron is referenced. <strong>This is important</strong>!)</li>
<li>You can also copy and paste items. During the copy process, the id&#8217;s of all the selected items are placed on the clipboard.  A paste will get the id&#8217;s from the clipboard, transform them into neurons which are put in the selected place.  You paste in drop targets, simply click in the drop target (there is no visual queue yet to indicate that the drop target is selected, this still needs some work) and paste. Note that copy-paste doesn&#8217;t yet work across multiple applications.</li>
<li>If you press delete while an item is selected, it&#8217;s reference will be removed from the editor.  If the underlying neuron is no longer referenced anywhere else, it is removed.  All neurons that it references which are also no longer referenced are also removed (cascading delete).  This is the most used deletion method in code editing.  This means that when you delete a statement, all the parameter values that are no longer used, are also deleted. Or, if you delete a code block, all the statements that are no longer used anywhere else, are also deleted from the network.</li>
<li>If you want more deletions options, use the &#8216;Delete special&#8217; (ctrl+del)  command.  This shows a dialog which allows you to specify the deletion method you want:
<ul>
<li>simply remove the reference, but always leave the neuron in the network</li>
<li>Remove the reference and when  no longer used, delete it (as with the normal delete)</li>
<li>Always delete the neuron.Referenced neurons can be</li>
<li>left alone: they are not deleted</li>
<li>deleted when no longer referenced</li>
<li>always deleted</li>
</ul>
</li>
<li>All neurons can have a &#8216;<em>display title</em>&#8216;. When the designer finds one for a neuron, this is displayed when possible.  You can easily change this name by pressing &#8216;F2&#8242; or through the context menu of the selected item.  This is very useful for variables and globals.</li>
<li>Most statements have a little circle in the front of the image.  This is a toggle button to enable/disable a breakpoint on the item. This is part of the debugger integration into the editor (more on that later).</li>
<li>It’s also possible to change a statement from one type to another one through the context menu.  A warning though about this command, you might loose data with this command, that can’t yet be undone (no proper undo support yet for this command).</li>
<li>If you simply need to move a statement up or down, you can also use the context menu, which has a submenu for moving items around.</li>
</ul>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=82" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/06/05/designing-code-editing-techniques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Floating flows</title>
		<link>http://janbogaerts.name/index.php/2009/05/11/floating-flows/</link>
		<comments>http://janbogaerts.name/index.php/2009/05/11/floating-flows/#comments</comments>
		<pubDate>Mon, 11 May 2009 19:08:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[flows]]></category>

		<guid isPermaLink="false">http://janbogaerts.name/index.php/2009/05/11/floating-flows/</guid>
		<description><![CDATA[Note: Deprecated! Just a quick &#8216;in between&#8217; note. I had to make a small change to the flow editor because a flow can now have an attribute &#8216;FlowIsFloating&#8217; assigned (through a link pointing to &#8216;True&#8217; or &#8216;False&#8217;). It is used by the scanner and parser routines to find flows that can appear anywhere in a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>Just a quick &#8216;in between&#8217; note. I had to make a small change to the flow editor because a flow can now have an attribute &#8216;FlowIsFloating&#8217; assigned (through a link pointing to &#8216;True&#8217; or &#8216;False&#8217;). It is used by the scanner and parser routines to find flows that can appear anywhere in a stream.&#160; This provides a generalized manner of defining this property without having to create custom routines for each set of flows. Spaces between words are good examples where this is used. The context menu for the flow name in the overview list on the editor contains a toggable menu item to activate/deactivate this attribute.&#160; A green line in front of the flow indicates it is floating.&#160; Here&#8217;s a screenshot:</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2009/05/image.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="389" alt="image" src="http://janbogaerts.name/wp-content/uploads/2009/05/image-thumb.png" width="502" border="0" /></a></p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=69" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/05/11/floating-flows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flow editor, take 2</title>
		<link>http://janbogaerts.name/index.php/2009/04/05/update-flow-editor-take-2/</link>
		<comments>http://janbogaerts.name/index.php/2009/04/05/update-flow-editor-take-2/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 19:29:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[flow recoginition]]></category>
		<category><![CDATA[flows]]></category>

		<guid isPermaLink="false">http://bragisoft.com/blog/PermaLink,guid,53baa899-23c8-4710-90eb-3970277d27f3.aspx</guid>
		<description><![CDATA[Note: Deprecated! After using the flow editor a bit, some of the more annoying errors became pretty obvious, so it&#8217;s time for a new update (well, full install again) to the flow editor. Besides the more obvious bug fixes, I&#8217;ve also introduced some new functionality, notably: shortcuts &#8216;N&#8217; &#38; &#8216;ctrl+N&#8217;: add/insert a new neuron. shortcut [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>After using the flow editor a bit, some of the more annoying errors became pretty obvious, so it&#8217;s time for a new update (well, <a href="http://www.bragisoft.com/files/setup.exe">full install</a> again) to the flow editor. Besides the more obvious bug fixes, I&#8217;ve also introduced some new functionality, notably:</p>
<ul>
<li>shortcuts &#8216;N&#8217; &amp; &#8216;ctrl+N&#8217;: add/insert a new neuron. </li>
<li>shortcut &#8216;R&#8217;: toggle &#8216;selection Required&#8217; for current option/loop.&#160; This is an important feature that I missed (in gene this was no problem since you could use an empty condition which is not possible here).&#160; The problem is this: sometimes,      <br />an option or loop has to require at least 1 selection between a part (so you can&#8217;t skip the condition or flow), sometimes this is not required.&#160; To allow a distinction between the 2, an extra &#8216;attribute&#8217; is attached to the conditional (the loop or option), much the same as how a selection between loop and option is done. </li>
<li>I changed the layout from wrap-panel to horizontal stack-panel, which is more logical to work with. </li>
</ul>
<p>Note: I have updated the table on the <a href="http://bragisoft.com/blog/2009/03/31/UpdateFlowEditor.aspx">first post</a> about the flow editor so it contains the new shortcuts.</p>
<p>I will probably also have to implement a new statement type, to allow for grouping very soon.&#160; It&#8217;s not really needed for defining the flows, but I think it can be useful later on, during the parsing. For instance, the expression: (verb &quot;ing&quot;) means that you are expecting a verb, with ing behind (standing, listening,&#8230;).&#160; You don&#8217;t need the brackets to define it, but it makes more sense while parsing, if the grouping statement has an attribute attached to it that indicates how it needs to be interpreted.</p>
<p>I have also noticed a &#8216;logical&#8217; error in the way that I implemented keyboard navigation: some keys have been reversed. So when you are on an item inside a part and need to get to that part, use the left arrow instead of the right.&#160; Being able to select    <br />a part is important to continue adding items at the end again when you have added a conditional like in the next image. It&#8217;s annoying, but fuck it, this is one for later on.</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/08/image9.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://janbogaerts.name/wp-content/uploads/2010/08/image_thumb9.png" width="259" height="303" /></a> </p>
<p>I&#8217;m also not yet very happy with the deletion functionality.&#160; As it is at the moment, you can remove or delete.&#160; Removing simply takes away the reference to a neuron in a list, deleting, will remove the neuron from the brain.&#160; This is annoying, cause you usually want to remove statics and delete conditionals and parts.&#160; If you want to remove an entire condition, you need to first delete all the parts separately.&#160; A better scheme would be as that of the code editor, which will check for this type of situation.&#160; Again, this is a minor thing, so I will add it to the feature list. At the moment, there are more important things to do though.</p>
<p>A bit more interesting, I have also began work on an English grammar definition.&#160; Here&#8217;s a screenshot of a part:</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/08/image10.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://janbogaerts.name/wp-content/uploads/2010/08/image_thumb10.png" width="664" height="993" /></a> </p>
<p>It&#8217;s off course not a definition that covers the complete language, but I think it should be enough to build a natural language interface <em>(update: Oh boy, was I wrong with this one <img src='http://janbogaerts.name/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</em>, which should be interesting. I&#8217;m certain I missed a bunch, I still need to define adverb handling (which will be treated in a pre parser, a bit like how comments are handled in more traditional parsers) and the scanner also needs commencing.&#160; And expect some shuffling around and updates as I implement the parser for this definition.&#160; At this stage, extra attributes will probably be added, to handle more semantically oriented parsing. I have no idea how long this is going to take me, but I expect some issues with the debugger, so I might be out for a week or 2 for the next update.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=37" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/04/05/update-flow-editor-take-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlowEditor</title>
		<link>http://janbogaerts.name/index.php/2009/03/31/update-floweditor/</link>
		<comments>http://janbogaerts.name/index.php/2009/03/31/update-floweditor/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 19:11:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[N²D]]></category>
		<category><![CDATA[flow recoginition]]></category>
		<category><![CDATA[flows]]></category>

		<guid isPermaLink="false">http://bragisoft.com/blog/PermaLink,guid,ec819077-366f-4a55-ab7d-ad514d9a0a05.aspx</guid>
		<description><![CDATA[Note: Deprecated! I&#8217;ve added support for flow editing, which should be the final &#8216;big&#8217; editor required to create useful networks. From now on, only finishing functionality and bugfixes. It took a little longer than I had originally planned, mostly because of a struggle with WPF&#8217;s keyboard navigational system, which is crap. I finally got it [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em><strong>Note: Deprecated</strong></em>!</p></blockquote>
<p>I&#8217;ve added support for flow editing, which should be the final &#8216;big&#8217; editor required to create useful networks. From now on, only finishing functionality and bugfixes. It took a little longer than I had originally planned, mostly because of a struggle    <br />with WPF&#8217;s keyboard navigational system, which is crap. I finally got it working though (it also supports drag and drop, copy-paste still needs implementing), hope you like it.&#160; You can download the program from <a href="http://www.janbogaerts.name/files/setup.exe">here</a>. Unfortunately it&#8217;s still a full install, so it&#8217;s the whole 40 and some megs download.&#160; I&#8217;ll try to find some time to create an update installer so that the download size can be minimized.</p>
<p>The editor is still a bit rough, but it should be useful. I&#8217;ve tried to make it more text oriented, so you can easily navigate/add/remove items from the keyboard.&#160; In the background though it&#8217;s still listboxes so coding the view and data was easy and fast, just that creepy WPF navigation system, off course more importantly, it makes certain no illegal input can be provided.</p>
<p>Anyway, here&#8217;s a screenshot:</p>
<p><a href="http://janbogaerts.name/wp-content/uploads/2010/08/image8.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://janbogaerts.name/wp-content/uploads/2010/08/image_thumb8.png" width="524" height="334" /></a> </p>
<p>Basically, this Flow editor describes how a noun can be found in a stream: a noun should start either with an article (which is either &#8216;a&#8217; or &#8216;the&#8217;) or a number, followed by 0 or more adjectives finalized with a single noun.&#160; Ok, there are gaps here (it&#8217;s still a sketch to show the editor): what&#8217;s a number, adjective or noun and how to find them.&#160; These things will be explained in the demo, but basically, you use converters (functions that can transform a neuron into another one, like the object &#8216;house&#8217; into the neuron &#8216;noun&#8217;) or some other info that can be used in a search function which can be attached to the flow items.</p>
<p>To create one yourself, go to &#8216;<em>Insert/Flow editor</em>&#8216;, use the toolbar button &#8216;<em>Create new flow editor</em>&#8216;, use the toolbar button on the &#8216;<em>Project</em>&#8216; overview tool frame or use it&#8217;s context menu. Press &#8216;F&#8217; to create a new flow followed by a &#8216;.&#8217; to select a static or &#8216;['/'{' for an option/loop (press '|' to add new parts in a loop or option). Here's a complete list of available short cuts:</p>
<table border="0" cellspacing="0" cellpadding="2" width="633">
<tbody>
<tr>
<td valign="top" width="135">
<p align="right"><strong><u>Shortcut</u></strong></p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p><strong><u>Meaning</u></strong></p>
</td>
</tr>
<tr>
<td valign="top" width="136">
<p align="right">arrow left</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the previous flow item</p>
</td>
</tr>
<tr>
<td valign="top" width="136">
<p align="right">arrow right</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the next flow item.</p>
</td>
</tr>
<tr>
<td valign="top" width="136">
<p align="right">arrow down</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<ul>
<li>When on a conditional block: go to the next conditional block </li>
<li>When on a static item: go to the first item of the next conditional block. </li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="135">
<p align="right">arrow up</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<ul>
<li>When on a conditional block: go to the previous conditional block </li>
<li>When on a static item: go to the first item of the previous conditional block. </li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="135">
<p align="right">end</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the end of the current list, when at end of current list, go to end of parent list, until the end of the flow is reached.</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">home</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the start of the current list, when at start of current list, go to start of parent list, until the start of the flow is reached.</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">Ctrl + arrow/end/home/mouse click on item</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>select multiple neurons.</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">Alt+arrow down</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the next flow</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">Alt+arrow up</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>go to the previous flow</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">.</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>open a popup for selecting a 'named' neuron to add at the end of the current list as static.</p>
</td>
</tr>
<tr>
<td valign="top" width="134">
<p align="right">ctrl+.</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>open a popup for selecting a 'named' neuron to insert at the current pos as static.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">{</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>add a loop at the end of the current list.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl+<strong>{</strong></p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>insert a loop at the current position.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">[</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>add an option at the end of the current list.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl+[</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>insert an option at the current position.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">}</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>change the currently surrounding option to a loop.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">]</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>change the currently surrounding loop to an option.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">R</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>toggle &#8216;selection Required&#8217; for current option/loop</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">|</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>add a new part in the first parent loop or option of the currently selected item.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl + |</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>insert a new part in the first parent loop or option of the currently selected item.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">del</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>remove the currently selected item from the list, but don&#8217;t delete the actual neuron.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl+del</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>delete the actual neuron.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">O</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>Add a new object (neuron cluster with meaning &#8216;Object&#8217;) at the end of the current list.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl+O</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>insert a new object (neuron cluster with meaning &#8216;Object&#8217;) at the current position.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">N</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>Add a new neuron at the end of the current list.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">ctrl+N</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>Insert a new neuron at the current position.</p>
</td>
</tr>
<tr>
<td valign="top" width="133">
<p align="right">Double click on static</p>
</td>
<td valign="top" width="10">&#160;</td>
<td valign="top" width="481">
<p>Go to the flow.&#160; This is only available when the static is a reference to another flow.&#160; This is indicated by a line underneath the static.</p>
</td>
</tr>
</tbody>
</table>
<p>A final note perhaps on how to use these flows in a neural network.&#160; The thing is, this is really up to you, the application doesn&#8217;t make any hard-coded use of them. Though, there will probably be a couple of default algorithms that can be reused.&#160; <br />The basic idea is relatively simple: when the first neuron comes in, search all the clusters to which it belongs with the meaning &#8216;Flow&#8217;, &#8216;FlowItemConditional&#8217; or &#8216;FlowItemConditionalPart&#8217; and store the result list in a cluster.&#160; When the second comes in, try to find all the clusters of the previous result set that allow the new neuron to follow the previous one, all clusters that don&#8217;t allow this are removed from the result set.&#160; Various clean ups / lookups can be performed during 2 incoming points. When a &#8216;flow&#8217; cluster is found with code attached to it, execute this. This off course, can be made as simple or as complex as you want. More on this in a later post. Fuel is depleted for today.</p>
 <img src="http://janbogaerts.name/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=38" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://janbogaerts.name/index.php/2009/03/31/update-floweditor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

