<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Neural Network design blog</title>
  <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/" />
  <link rel="self" href="http://bragisoft.com/blog/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-05-08T12:16:09.2601457-07:00</updated>
  <author>
    <name>Jan Bogaerts</name>
  </author>
  <subtitle>Bragi's take on neural networks, AI and more</subtitle>
  <id>http://bragisoft.com/blog/</id>
  <generator uri="http://dasblog.info/" version="2.1.8102.813">DasBlog</generator>
  <entry>
    <title>Moved</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/05/08/Moved.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,077e9d7b-25cc-4e72-8f71-28a21c34989f.aspx</id>
    <published>2009-05-08T12:16:09.2601457-07:00</published>
    <updated>2009-05-08T12:16:09.2601457-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've moved this entire blog to a new address and engine: <a href="http://www.janbogaerts.name">www.janbogaerts.name</a>.
I did the address change to make it easier to find.  The new engine simply provides
lots of new features which make my life easier. All posts have been moved.  I
hope you like it.
</p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Progress report</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/04/27/ProgressReport.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,69b93581-d3c4-45b7-ad4d-0b3142a8ab82.aspx</id>
    <published>2009-04-27T12:05:46.2661881-07:00</published>
    <updated>2009-04-29T12:20:28.6473345-07:00</updated>
    <category term="Updates" label="Updates" scheme="http://bragisoft.com/blog/CategoryView,category,Updates.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Crohn complications have slowed me down a bit over the last couple of weeks, but everything
seems to be coming under control and progress has slowly picked up again. So, it's
become time again for a new update before I start explaining the new stuff in depth. 
These are the main changes:
</p>
        <ul>
          <li>
The undo system is starting to be functional.  There's still something going
wrong with undoing some link operations, but that'll be sorted out soon probably. 
</li>
          <li>
There's a new expression type: the global, which is a variable that is able to retain
it's value for as long as a processor is alive.  It's also possible to determine
what should happen with a global during a processor split: copy or duplicate the value,
or do nothing. This is done with an outgoing link on the expression, so you can change
it dynamically. 
</li>
          <li>
You can now easily attach and edit an unlimited number of code clusters to any neuron
from the code editor.  This is useful to attach code to a neuron that shouldn't
be executed directly by the processor (the actions and rules link) but is stored as
data, to be retrieved and called from code. Flows for instance use this to attach
code that needs to be called by the parser during different stages of the parsing
process. 
</li>
          <li>
The debugger is starting to become fully operational with a useful interface. 
There are still plenty of quirks that need ironing out, but it's starting to become
useful. Here's a screenshot of the debugger in action (I'll explain what everything
means and how to use it later on):<br /><br /><a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Progressionreport_CB16/image_2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="521" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Progressionreport_CB16/image_thumb.png" width="758" border="0" /></a></li>
          <li>
Many, many bug-fixes.</li>
        </ul>
        <p>
The scanner and parser are almost working.  You can already push text to the
network, which  is almost parsed into words (some quirks still left).  It
doesn't yet know what to do with the words though (so the link between the scanner
and parser is still broken), this is why I needed the extra functionality in the code
editor. I'll explain the scanner and parser's details in a later post. For now, check
out the <a href="http://www.bragisoft.com/files/setup.exe">new release</a>.
</p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Update: flow editor, take 2</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/04/05/UpdateFlowEditorTake2.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,53baa899-23c8-4710-90eb-3970277d27f3.aspx</id>
    <published>2009-04-05T12:29:50.2323765-07:00</published>
    <updated>2009-04-06T04:49:35.7075139-07:00</updated>
    <category term="Updates" label="Updates" scheme="http://bragisoft.com/blog/CategoryView,category,Updates.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
After using the flow editor a bit, some of the more annoying errors became pretty
obvious, so it'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've also
introduced some new functionality, notably:
</p>
        <ul>
          <li>
shortcuts 'N' &amp; 'ctrl+N': add/insert a new neuron. 
</li>
          <li>
shortcut 'R': toggle 'selection Required' for current option/loop.  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).  The problem is this: sometimes,
an option or loop has to require at least 1 selection between a part (so you can't
skip the condition or flow), sometimes this is not required.  To allow a distinction
between the 2, an extra 'attribute' 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.  It'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 "ing")
means that you are expecting a verb, with ing behind (standing, listening,...). 
You don'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 'logical' 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.  Being able to select
a part is important to continue adding items at the end again when you have added
a conditional like in the next image. It's annoying, but fuck it, this is one for
later on.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditortake2_D5D2/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="303" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditortake2_D5D2/image_thumb.png" width="259" border="0" />
          </a>
        </p>
        <p>
I'm also not yet very happy with the deletion functionality.  As it is at the
moment, you can remove or delete.  Removing simply takes away the reference to
a neuron in a list, deleting, will remove the neuron from the brain.  This is
annoying, cause you usually want to remove statics and delete conditionals and parts. 
If you want to remove an entire condition, you need to first delete all the parts
separately.  A better scheme would be as that of the code editor, which will
check for this type of situation.  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. 
Here's a screenshot of a part:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditortake2_D5D2/image_4.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="993" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditortake2_D5D2/image_thumb_1.png" width="664" border="0" />
          </a>
        </p>
        <p>
It's off course not a definition that covers the complete language, but I think it
should be enough to build a natural language interface, which should be interesting.
I'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.  And expect some shuffling around and
updates as I implement the parser for this definition.  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>
      </div>
    </content>
  </entry>
  <entry>
    <title>Update: FlowEditor</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/31/UpdateFlowEditor.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,ec819077-366f-4a55-ab7d-ad514d9a0a05.aspx</id>
    <published>2009-03-31T12:11:56.2665165-07:00</published>
    <updated>2009-04-06T04:35:04.5115783-07:00</updated>
    <category term="Getting started" label="Getting started" scheme="http://bragisoft.com/blog/CategoryView,category,GettingStarted.aspx" />
    <category term="Updates" label="Updates" scheme="http://bragisoft.com/blog/CategoryView,category,Updates.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've added support for flow editing, which should be the final 'big' 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'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.  You can download the program from <a href="http://www.bragisoft.com/files/setup.exe">here</a>.
Unfortunately it's still a full install, so it's the whole 40 and some megs download. 
I'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've tried to make it more
text oriented, so you can easily navigate/add/remove items from the keyboard. 
In the background though it'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's a screenshot:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditor_12AB3/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="334" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/UpdateFlowEditor_12AB3/image_thumb.png" width="524" border="0" />
          </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 'a' or 'the') or a number, followed
by 0 or more adjectives finalized with a single noun.  Ok, there are gaps here
(it's still a sketch to show the editor): what's a number, adjective or noun and how
to find them.  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
'house' into the neuron 'noun') 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 '<em>Insert/Flow editor</em>', use the toolbar button
'<em>Create new flow editor</em>', use the toolbar button on the '<em>Project</em>'
overview tool frame or use it's context menu. Press 'F' to create a new flow followed
by a '.' to select a static or '['/'{' 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 cellspacing="0" cellpadding="2" width="633" border="0">
          <tbody>
            <tr>
              <td valign="top" width="135">
                <p align="right">
                  <strong>
                    <u>Shortcut</u>
                  </strong>
                </p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
                <strong>
                  <u>Meaning</u>
                </strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="136">
                <p align="right">
arrow left
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
go to the previous flow item</td>
            </tr>
            <tr>
              <td valign="top" width="136">
                <p align="right">
arrow right
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
go to the next flow item.</td>
            </tr>
            <tr>
              <td valign="top" width="136">
                <p align="right">
arrow down
</p>
              </td>
              <td valign="top" width="10">
 </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">
 </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">
 </td>
              <td valign="top" width="481">
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.</td>
            </tr>
            <tr>
              <td valign="top" width="134">
                <p align="right">
home
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
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.</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">
 </td>
              <td valign="top" width="481">
select multiple neurons.</td>
            </tr>
            <tr>
              <td valign="top" width="134">
                <p align="right">
Alt+arrow down
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
go to the next flow</td>
            </tr>
            <tr>
              <td valign="top" width="134">
                <p align="right">
Alt+arrow up
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
                <p align="left">
go to the previous flow
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="134">
                <p align="right">
.
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
                <p align="left">
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">
 </td>
              <td valign="top" width="481">
toggle 'selection Required' for current option/loop</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
|
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
add a new part in the first parent loop or option of the currently selected item.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
ctrl + |
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
insert a new part in the first parent loop or option of the currently selected item.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
del
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
                <p align="left">
remove the currently selected item from the list, but don'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">
 </td>
              <td valign="top" width="481">
                <p align="left">
delete the actual neuron.
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
O
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
                <p align="left">
Add a new object (neuron cluster with meaning 'Object') 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">
 </td>
              <td valign="top" width="481">
                <p align="left">
insert a new object (neuron cluster with meaning 'Object') at the current position.
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
N
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
Add a new neuron at the end of the current list.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
ctrl+N
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
Insert a new neuron at the current position.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <p align="right">
Double click on static
</p>
              </td>
              <td valign="top" width="10">
 </td>
              <td valign="top" width="481">
Go to the flow.  This is only available when the static is a reference to another
flow.  This is indicated by a line underneath the static.</td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
A final note perhaps on how to use these flows in a neural network.  The thing
is, this is really up to you, the application doesn't make any hard-coded use of them.
Though, there will probably be a couple of default algorithms that can be reused. 
The basic idea is relatively simple: when the first neuron comes in, search all the
clusters to which it belongs with the meaning 'Flow', 'FlowItemConditional' or 'FlowItemConditionalPart'
and store the result list in a cluster.  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't allow this are removed from the result set. 
Various clean ups / lookups can be performed during 2 incoming points. When a 'flow'
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>
      </div>
    </content>
  </entry>
  <entry>
    <title>Update: Splits working</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/20/UpdateSplitsWorking.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,f02b8633-7e6f-4d20-9960-8e5ce000ab9e.aspx</id>
    <published>2009-03-20T12:53:48.6526592-07:00</published>
    <updated>2009-03-20T12:53:48.6526592-07:00</updated>
    <category term="Updates" label="Updates" scheme="http://bragisoft.com/blog/CategoryView,category,Updates.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
There's a new update available for <a href="http://www.bragisoft.com/files/setup.exe">N²D</a>.
The major change is with regards to how the split functionality works. In the original
design, the processor's stack was used to return any results at the end of a split.
This was causing problems, especially with nested splits where stack contents get
duplicated.  In the original design, stack duplications didn't generate new id's
for the neurons, which was changed, for good reasons.  Unfortunately, this created
a problem for the split: split result were unwanted getting duplicated.  You
now how it goes, pull the sheet a bit on this side, only to uncover it on the other
one.
</p>
        <p>
The solution was very simple and pretty elegant: use a different list to store the
result of a split. So now a processor has 2 internal lists: the execution stack used
to build the code that should be executed next and a list with the split results (<em>unique </em>neurons)
and their weights. A couple of new instructions had to be created to control this
list.  No biggie: an Add, Remove, Get and Clear.
</p>
        <p>
Anyway, I'm updating all the documentation now.  If I mist something, don't forget:
2 separate lists. The next post will probably be a Demos explained on the split.
</p>
      </div>
    </content>
  </entry>
  <entry>
    <title>About sandboxes</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/17/AboutSandboxes.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,2e12442f-ff13-4a85-ac6f-40a71a5758e8.aspx</id>
    <published>2009-03-17T09:26:20.5187852-07:00</published>
    <updated>2009-03-17T09:26:20.5187852-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As a child, I remember playing quite a lot in the sand by the coast in the summers.
I don't think I cared very much about sandboxes though, except maybe for growing stuff
in. Anyway, that's totally besides the point with regards to today's topic, which
is about N2D's sandbox, used to test out a project in development.
</p>
        <p>
The problem, you see, is the fact that N2D is a <em>Designer</em>, running on top
of a neural network, accessing it's services.  So when you are designing the
network, it is also running.  This means that all the stuff you type into the
text-channels, will also be stored in the project. Something you don't want while
performing tests.
</p>
        <p>
To overcome this issue, N2D can use a special directory as a sandbox in which it can
copy projects that need testing. The sandbox project will be started in it's own designer
so you can play with it, with all of it's features (including neuron streaming) without
messing up the actual data.
</p>
        <p>
To run the current project in a sandbox, use the '<em>Sandbox</em>' toolbar button
or menu item <em>Debug/Sandbox</em>. This will save the project, copy it over to a
temp directory (selectable in the 'Tools/O<em>ptions</em>' window) and start a new
session.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Aboutsandboxes_F21B/image_6.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="254" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Aboutsandboxes_F21B/image_thumb_2.png" width="671" border="0" />
          </a>
        </p>
        <p>
When N2D is started in Sandbox mode, it will show this in the lower right corner,
like so:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Aboutsandboxes_F21B/image_4.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="74" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/Aboutsandboxes_F21B/image_thumb_1.png" width="181" border="0" />
          </a>
        </p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Demos explained: Echo</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/12/DemosExplainedEcho.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,75617674-4b23-47b3-99c4-0d7d4431c2b7.aspx</id>
    <published>2009-03-12T13:04:52.4388107-07:00</published>
    <updated>2009-03-12T13:04:52.4388107-07:00</updated>
    <category term="demos" label="demos" scheme="http://bragisoft.com/blog/CategoryView,category,demos.aspx" />
    <category term="Getting started" label="Getting started" scheme="http://bragisoft.com/blog/CategoryView,category,GettingStarted.aspx" />
    <category term="N&amp;#178;D" label="N&amp;#178;D" scheme="http://bragisoft.com/blog/CategoryView,category,ND.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Most development tutorials start out with an '<em>Hello world</em>' type of application. 
This one doesn't.  The issue I had was the fact that a neural network is inherently
a <em>responsive system</em>, that is, everything it does is a reaction to input. 
So, I figured, to illustrate this better, I could show a simple echo application. 
It's just as simple to make as a 'Hello world' thingy, but actually does something:
echo back everything sent to it.
</p>
        <p>
To start the demo, go to <em>{Windows start}/N²D/Demos/Echo</em> if N²D isn't already
running, otherwise, do <em>File/Open </em>and browse to the folder <em>{My documents}/NND/Demos/Echo</em>.
Note that a project is opened by selecting a folder, not through a file (this might
still change in the future, if required).  If the project has already been opened,
you can reopen it using <em>File/Recent projects</em>. Once opened, you should see
something like this:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="511" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb.png" width="610" border="0" />
          </a>
        </p>
        <p>
Note that the echo channel (a text channel) is shown by default. This is because I
saved the project with the channel opened: visibility of a channel is stored, not
for other items at the moment.  You can close this window by right clicking on
the tab and selecting the <em>close</em> command. You can also control which channels
are visible through the menu: <em>View/Communication Channels</em>. The designer will
create a communication channel for each sensory interface in the network. 
</p>
        <p>
The Text channel contains the following items: 
</p>
        <ul>
          <li>
In the bottom: a Text box to enter text you want to send to the network 
</li>
          <li>
with a toolbar on top of it containing 
<ul><li>
buttons to control the visibility of the top row items, 
</li><li>
a toggle button for turning the speakers on/off, 
</li><li>
a combo box to select the way the sin splits up the input strings into neurons 
</li><li>
a button to send the text to the sin.</li></ul></li>
          <li>
in the middle is a list box containing the current conversation: all the text you
sent interleaved with the answers of the network. 
</li>
          <li>
and finally the top row contains 2 listboxes which contain visualizations for the
neurons that were processed as input by the sin (left one) and received for output
(right part).  Note: selecting a line in any of these 2 lists will also select
the corresponding line in the <em>conversation section </em>and visa versa.</li>
        </ul>
        <p>
If you make certain that '<em>Speaker</em>' is pressed and your loud speakers are
turned on, you should here 'Type here' once you press the '<em>send</em>' button (and
haven't changed the input text). Some items should also appear on the screen, something
like:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_8.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="511" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb_3.png" width="649" border="0" />
          </a>
        </p>
        <p>
What just happened? Well, a whole lot really:
</p>
        <ul>
          <li>
The text channel displays the string 'Type here' in the central dialog overview. 
This is done by the designer. 
</li>
          <li>
next, it sends the string to the Echo channel's backing sensory interface which splits
it up into 2 words: 'type' and 'here'.  This is because it is in 'Use Words'
mode.  This demo is also programmed for 'Use letters' by the way.  If you
want, you can try to see the difference. These 2 words are converted into text neurons
(by returning the result found in a dictionary of already created text neurons or
by creating a new one, which is stored in the dictionary. These 2 text neurons are
linked to a freshly created neuron which represents the input event.  This conversion
is done by the sin itself. 
</li>
          <li>
The sin also raises an event to let the channel know about the neuron it just created
as input value which is displayed in the top left list. 
</li>
          <li>
A processor is created and the neuron representing the input event is pushed on it's
stack, which starts of the network. Up until now, we haven't really used the neural
network yet, everything was done using traditional code. This changes once the processor
is started. 
</li>
          <li>
The processor '<em>executes</em>' the code attached to the links between the 'input
event' neuron and the text neurons (how this code gets there and how it looks like
will be dealt with later).  This is the neural network doing it's thing which
will eventually execute several '<em>Output</em>' instructions, sending neurons back
to the sin. 
</li>
          <li>
When the sensory interface receives these neurons, it converts them back into a string
and raises an event. And so we get back into the world of regular code. 
</li>
          <li>
At communication channel, which receives this event, displays the text in the conversation
dialog and the neuron(s) that represent the string in the top right list box.</li>
        </ul>
        <p>
Ok, but what exactly happened in the neural network itself? Truth is, not much as
you will see. It's time to show some code. If you select the '<em>Project</em>' tool-frame,
you will notice 4 items: a mind map (more on that later) and 3 code items, each one
is simply a reference to a neuron in the network. To open them, double click on the
item.  Let's start with '<em>Code: ContainsWord(in)</em>'.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_5.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="511" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb_1.png" width="649" border="0" />
          </a>
        </p>
        <p>
Mmm, interesting. All GUI-like is probably the first thing you'll notice. Indeed,
there is currently no textual method for entering code, as more traditional development
environments tend to use.  I choose this way for 2 reasons: first, it's faster
to develop (at least, in WPF that is) and it lowers the entry barrier since you can
visually put items together instead of having to conceptually create a peace of text
in your mind, requiring a grater level of knowledge. In the long run though, this
technique tends to be slower than writing code and it also somewhat limits the amount
of code displayed, but be patient, there is a solution for this. 
</p>
        <p>
Lets first go over the 2 lower tabs.  These represent the 2 different code lists
that can be assigned to the neuron: the '<em>Rules</em>' and '<em>Actions</em>' list.
Note that these lists are only created if there is code, for as long as you don't
drop any objects on the design surface, there isn't actually a code list assigned
to the neuron. The bottom tab-strip also has a context-menu which allows you to toggle
wether this neuron is shown in the project tree (under the currently active folder,
or the root if there is no folder). You can also create new code clusters from the
sub toolbar, but remember these are code clusters (which can also point to code clusters),
not neurons with code clusters assigned to them.
</p>
        <p>
Both lists are called at different times, and serve a different purpose. Code in the <em>Rules</em> section,
is called when this neuron is used as the meaning for a link that is currently being
processed by the processor. The <em>Actions</em> code list is called by the processor
when <strong>this</strong> neuron was processed by the processor and all other links
have already been handled. Usually, you don't program on the last tab, it is provided
to 'view' the code that was attached to it by the sin that generated it (see further). 
Note that there are other tab possibilities, but these have no importance for now
and will be explained later on.
</p>
        <p>
So what does this actually mean for our example: well, the '<em>ContainsWord(in)</em>'
neuron is used by the sin as the meaning for the link between the generated neuron
and each word in the input string (this is pre defined), so for each word in the input
text, it will call this little peace of code. 
</p>
        <p>
As you can see there are only 2 statements in this code list. The second statement
calls an 'Output' instruction which will send the content of the '<em>CurrentTo</em>'
variable to the content of the '<em>CurrentSin</em>' variable, in other words, this
is the actual echo. Both variables are system defined and are filled in by the processor,
they can not be modified, unlike normal variables. You'll notice that they appear
to be multiple variables stacked on top of each other.  This is to indicate that
the same neuron is used in multiple places.  It's a visual cue to indicate if
a code item is used somewhere else or not (ahh yes, unlike regular code, these are
neurons, all linked to each other, there is nothing preventing you from literally
using the same statement in different places). That's it for doing the echo really. 
The rest of the code is simply to make certain that the sin will put all the words
in 1 line with spaces in between them. This is spread out over 2 locations: the first
statement and the '<em>Input actions</em>' code list of the sin.
</p>
        <p>
The first one, is a '<em>Block</em>' statement, which can best be compared to a 'Function
call' except that there are no parameters or return value allowed. To view it's content,
use the drop down arrow for an inline visualization, or '<em>View code</em>' 
in the context menu to display the code in a new window. You should see something
like this:
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_9.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="458" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb_2.png" width="868" border="0" />
          </a>
        </p>
        <p>
Note that the code is located in the '<em>Statements</em>' tab this time if you opened
a new view. That's because a code block has an extra known code cluster attached to
it: the code for the block.  It can also have a rules and actions list, but these
are not used in this example (and probably will rarely be used this way on code itself).
</p>
        <p>
Ok, and what exactly does this code do? To explain that, perhaps a note first on how
a text sin converts output data. Whenever it receives a neuron, it is converted to
a string which is than sent as an event to the outside world.  Off course, in
our example, we don't show each word on a separate row, instead, we show the entire
input statement on a single line with spaces between the words.  This can only
be done if the sin knows where a sentence starts and where it ends, otherwise it simply
sees a stream of output data. So to accomplish this, there are 2 special neurons that
it recognizes: '<em>BeginTextBlock</em>' and '<em>EndTextBlock</em>'. When these are
sent to a text-sin, they are not converted, but instead, BeginTextBlock will make
it accumulate all the strings until the EndTextBlock neuron is received. So that's
what this little bit of code does: it checks if this is the first word being processed,
if so, the 'BeginTextBlock' neuron is sent and we store a switch so we know of this
event.  If it wasn't the first one, we sent a space to the sin, so we don't concatenate
the words. The 'EndTextBlock' is handled in a different way, we'll get back to that
later on.
</p>
        <p>
First a bit about the different statements that were used in this little code block. 
The top most one is a conditional statement, set to 'if'.  N²D takes conditional
statements even further than <a href="http://users.telenet.be/GeneCompiler/Language_specification.html#Options">Gene</a> and
completely unites all different conditionals into 1 and the same statement type, with
an option to switch between them.  So a Do-while, While-Until, For-Each, For,
if, case, and case-loop (not possible in other languages) are all combined into 1
statement, with a single neuron that switches between the 2. This approach is taken
because of it's ease in coding: it becomes a lot easier to change an if statement
to a loop with multiple if's: simply make it a loop (yes, you can have multiple conditions
in a while loop). To design this bit of code, you can simply drag a 'Conditional statement'
to the designer and drop 'Conditional parts' in the 'Children' area to the right.
A conditional part forms a single trunk of the evaluation tree. It contains a list
of code items (which can also be dropped on it's respective '<em>Children</em>' drop
area) and possibly a condition that determines if the part's code is executed or not.
This condition should evaluate to the 'True' or 'False' neurons.  Usually this
is done by a Boolean expression (as has been done in this example), but this is not
required, it could just as well have been a result statement that returns 'True' or
'False'.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_13.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 15px 0px 0px; border-right-width: 0px" height="41" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb_5.png" width="135" align="left" border="0" />
          </a> A
word perhaps on the little arrows found on the variables to the right of the name. 
These allow you to assign a default value to the variables.  In our example,
we can't use this cause all of them are system variables who's values are controlled
by the processor.  Regular values however don't have a value the first time they
are accessed in the context of a processor.  You can use this little drop target
to assign a default value.  This can be a constant, or another statement that
can be resolved to one or more neurons.  
</p>
        <p>
Another important fact about these variables is that they can point to 1 or more neurons. 
They actually function as buckets.  This is very useful in that there is only
1 known type: a list of neurons.  This list can contain 1 item or more. 
Often times, you will use a split to resolve multiple values to 1.
</p>
        <p>
The last part of this demo can be found in the '<em>Code: Echo channel</em>' Project
item, which is actually a reference to the text sin.  If you open the 'Input
actions' tab, you'll see the final 2 statements for this demo. This tab represents
a code cluster that the text-sin attaches to each input neuron that it generates so
it can be executed after all other links have been.  In our example, we do 2
things: let the sin know the sentence is closed so the string can be displayed and
delete the input neuron, so we don't let the network grow indefinitely. By default,
all data is always stored, if you don't want this, like in this example, you will
need to manually delete the neuron.  All of it's links and stuff will be cleaned
up automatically.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_11.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="344" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/DemosexplainedEcho_10CD0/image_thumb_4.png" width="647" border="0" />
          </a>
        </p>
        <p>
The notion that the code is spread out over different locations and called at different
times is an important point: a neuron network can not be programmed in a monolithic
fashion as a single code block. Code is always divided into small chunks, which run
at different times, in an undetermined order.  This is where a lot of it's power
comes from.  Once you grasp this, you are a long way into designing something
truly beautiful. 
</p>
        <p>
Gosh, dear all mighty, this was a climb indeed. I'm glad you were able to get till
here, all the way to the end. Even though this is a small demo, it packs a punch when
it comes to new ideas. There are plenty more areas to cover, but I am certain that
once you become more familiar with the basic concepts explained in this demo, the
rest of the ride will be downhill. More demo explanations to come soon...
</p>
      </div>
    </content>
  </entry>
  <entry>
    <title>N²D: getting your feet wet</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/09/NDGettingYourFeetWet.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,46d967bb-edac-400b-aefd-c4a488cf2b9a.aspx</id>
    <published>2009-03-09T12:20:05.4632807-07:00</published>
    <updated>2009-03-09T12:20:05.4632807-07:00</updated>
    <category term="Getting started" label="Getting started" scheme="http://bragisoft.com/blog/CategoryView,category,GettingStarted.aspx" />
    <category term="N&amp;#178;D" label="N&amp;#178;D" scheme="http://bragisoft.com/blog/CategoryView,category,ND.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Despite it's youth, N²D is already quite a large and rather complex application. Things
like this tend to have a steep learning curve.  Off course, climbing a mountain
is a lot easier if you have a map and proper control over your equipment.  I
am working on the map, tools are up to you though.  There are many ways you can
play with the application without actually having to design a proper neural network.
Here's a short guide.
</p>
        <h4>Viewing and importing thesaurus data
</h4>
        <p>
N²D has access to the English version of the <a href="http://www.ebswift.com/OpenSource/WordNetSQLServer/">WordNet</a> database
through a sensory interface (input/output port). Apparently there are WordNet database
for <a href="http://www.illc.uva.nl/EuroWordNet/">other languages</a>, but these are
not yet available. To open the view for the WordNet data activate the menu item: <em>View/Communication
Channels/WordNet </em>(note: opening for the first time can take a little time as
the database needs to be opened, should get fixed somehow in the future).  This
should show something similar to (although with less text):
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="490" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_2.png" width="574" border="0" />
          </a>
        </p>
        <p>
You can search for words in the database.  All known meanings will be displayed.
You can also select to show a specific relationship type with the drop down list. 
If 'As Part' is pressed, all entries that contain the specified text will be shown. 
You can either import a single meaning separately or the whole lot, including all
the relationships (advised) and see the network grow.  The system should be able
to do multiple imports at the same time (you'll notice that a single import can take
a long time, depending on how many relationships there are for the word). While the
network is <em>learning, </em>the green box in the right bottom corner is filled.
</p>
        <p>
You can browse through all the imported items from the thesaurus view.  You can
select the type of relationship you want to see.  All root tree items represent
root neurons for the specified relationship. With the text box, you can search for
words in the tree. All neurons can be dragged to other locations (like mind maps for
instance, see further).  It is also possible to add items to the tree by dropping
them on the level they should reside.
</p>
        <h4>Creating Mind maps
</h4>
        <p>
Mind maps allow you to <em>draw</em> neurons in a free form manner, similar like vector
graphics. There are multiple ways to create new mind maps, you can:
</p>
        <ul>
          <li>
use the menu: Insert/Mind map 
</li>
          <li>
use the toolbar button (4th from left) 
</li>
          <li>
or when on the 'Project' tool window, use the local toolbar button.  From here,
you can also create sub directories, change the name of the project items (F2),...
Note: Mind maps (and all other project items) are added to the currently selected
folder or the folder that contains the currently selected item.</li>
        </ul>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_10.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="375" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_4.png" width="578" border="0" />
          </a>
        </p>
        <p>
Most of the mind map commands are currently only accessible through it's context menu.
For creating new items, you can also use the toolbox. You can add different types
of neurons or change them to another one.  Watch out with changing the type though,
cause this might loose data sometimes (for instance, when you change a cluster into
a regular neuron). 
</p>
        <p>
If you select a neuron, you can use different ways for showing '<em>related</em>'
items, like children, incoming or outgoing links and clusters to which the selected
item belongs. You can also manage to which clusters it belongs.  If you have
multiple items selected, you can quickly create a cluster for them through the '<em>Make
cluster</em>' command.
</p>
        <p>
The easiest way to create a link between 2 items is by selecting them both (the first
will be '<em>From</em>', the second '<em>To</em>') and activating the '<em>Link</em>'
command. This will show a dialog with From and To already filled in, so you only have
to select the meaning of the link.
</p>
        <p>
As a side note, '<em>Sync with explorer</em>': a very useful command, accessible from
the main toolbar, allows you to quickly find the selected item in the explorer. 
This can be used from most places in the designer (all items that have a neuron as
backing).
</p>
        <h4>Drawing
</h4>
        <p>
Yes, N²D is also a drawing application, although some further evolution is clearly
needed in this area.  Drawing capability is provided so you can work with the
visual sensory interfaces. To create a new image channel, activate the menu command <em>Insert/New
Image channel</em>. 
</p>
        <p>
Perhaps a word about the difference between a sensory interface and a communication
channel: the underlying network has sins, which are also just neurons and have no
'<em>functionality</em>'. N²D, the designer, creates a '<em>communication channel</em>'
for sins so you can work with them. If you use the network in a different application,
the communication channel might look completely different, but the sin is still the
same.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_12.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="443" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_5.png" width="578" border="0" />
          </a> 
</p>
        <p>
An image channel currently has 2 sections: the left part to manage/import multiple
images (which is not yet fully functional) and a right part that will eventually contain
2 sections: an input and output section.  The output is currently not yet visible,
but is supposed to function as the output part of the sin, so you can see images/videos
that the network generates.
</p>
        <p>
The input section works as an ink canvas, so you can use a pen table, and apply pen
pressure (this can be toggled). The shape, size and color of the pen point can be
selected. It is also possible to switch to a gum or selector.
</p>
        <h4>Commenting
</h4>
        <p>
All neurons and some other types (like mind maps and frame editors) can have a description. 
This is a FlowDocument (rich text format), so you format the text. Spell check is
also provided. The description of the currently focused item is shown, you will have
to make certain that the 'Description' Tool window is visible.  
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_14.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="452" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_6.png" width="578" border="0" />
          </a>
        </p>
        <p>
Standard text editing functionality is present:
</p>
        <ul>
          <li>
Select the font type</li>
          <li>
and font size</li>
          <li>
Bold/Italic/underline and Outline</li>
          <li>
Bullets and numbering</li>
          <li>
Spell check</li>
        </ul>
        <p>
As a side note: The selected item is a NeuronCluster, so it can have child neurons. 
The explorer in this screenshot, is set to display it's side panel which contains
all the children of the selected cluster. Just like from the explorer, you are able
to drag items from the left panel.  It's also possible to drop neurons on the
panel, which will add them as children to the selected cluster.
</p>
        <h4>Creating frames
</h4>
        <p>
Frames are a form of compound objects (a group of neurons that form a single unit)
which can be used to translate input from one form to another and to connect code
to these compound objects. They are created in a similar way like mind maps, and can
also be managed from within the project tool window.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_16.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="481" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_7.png" width="579" border="0" />
          </a>
        </p>
        <p>
To create a new frame, you basically push the toolbar buttons in sequence:
</p>
        <ul>
          <li>
The first one will create a new frame (a frame editor can contain multiple frames,
usually they are related to each other somehow).</li>
          <li>
Next, you create a frame element for the selected frame (make certain there is one
selected, there are still some bugs in this area). You can also drop items to be used
as frame elements.</li>
          <li>
The third button creates a new frame evoker (all neurons in this list are put in a
cluster 'Evokers', so you can easily do searches on them, more on that later). Like
frame elements, you can also drop already existing items in there.</li>
          <li>
On the last tab, you can edit all the sequences for the frame.  Use the 4th toolbar
button to add a new sequence, make certain it is selected and use the buttons to add/remove
or move up and down the frame elements from the first tab to build a sequence.</li>
          <li>
The last toolbar button is used to display the '<em>Import from FrameNet</em>' dialog,
with this frame editor already selected.</li>
        </ul>
        <h4>Importing frames
</h4>
        <p>
If you don't feel like creating your own frames, you can always see if they have already
been included in <a href="http://framenet.icsi.berkeley.edu/">FrameNet</a>, which
you can import, either from the menu <em>Tools/Import from FrameNet </em>or from the
toolbar of a frame editor.
</p>
        <p>
          <a href="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_18.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="522" alt="image" src="http://bragisoft.com/blog/content/binary/WindowsLiveWriter/NDgettingyourfeetwet_C728/image_thumb_8.png" width="643" border="0" />
          </a>
        </p>
        <p>
You can search FrameNet using the textbox in the upper right corner. The first time
you select a row in the upper list might take a little time, this is because he is
loading the WordNet database (which takes a little time). This is required to provide
a mapping between FrameNet and WordNet data (not provided by default). Some mappings
have already been created but most still need to be defined.  Each time you display
this dialog and change some mappings, these will be saved.
</p>
        <p>
There are many more things to discover in the designer, but I'm all out of words for
today, so I'll continue this on another occasion.  In the mean time, lot's of
fun playing with your new toy.
</p>
      </div>
    </content>
  </entry>
  <entry>
    <title>System requirements</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/07/SystemRequirements.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,0ba48c15-0e3b-4bee-aae2-ae6511348eac.aspx</id>
    <published>2009-03-07T06:30:33.7264757-07:00</published>
    <updated>2009-03-07T06:30:33.7264757-07:00</updated>
    <category term="N&amp;#178;D" label="N&amp;#178;D" scheme="http://bragisoft.com/blog/CategoryView,category,ND.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
A note about the system requirements for <a href="http://www.bragisoft.com/files/setup.exe">N²D</a>.
The installer is about 45 meg to download, but the app itself takes up over 440 MB
and projects may also explode fairly fast so be prepared for a large peace of real
estate usage on the hard disk.  This is largely due to the <a href="http://www.ebswift.com/OpenSource/WordNetSQLServer/">WordNet</a> and <a href="http://framenet.icsi.berkeley.edu/">FrameNet</a> databases.
</p>
        <p>
The whole thing is written in C#, the designer in WPF.  So for the time being
it is strictly windows stuff (XP or vista). The core neural network and sensory interface
libraries should be portable to <a href="http://www.mono-project.com/Main_Page">Mono</a> but
the designer will be a tat difficult. I don't know yet how to tackle this one.
</p>
        <p>
With regards to processors I can be simple: the more the better.  This is a massively
multi threaded application, so the more cores the faster it should run.  I only
have a dual core here, so I haven't had the change yet to see it running on lots of
threads simultaneously, but I would love to find out.  As I am writing this,
I am sure there will still be a lot of bugs to filter out.
</p>
        <p>
So to recap:
</p>
        <p>
OS: Win XPSP2/Vista<br />
Platform: .net/WPF<br />
Hard Disk: + 450 MB<br />
CPU Cores: as many as you can find <img alt="Tongue out" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/tongue_smile.gif" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Intro: a birth</title>
    <link rel="alternate" type="text/html" href="http://bragisoft.com/blog/2009/03/05/IntroABirth.aspx" />
    <id>http://bragisoft.com/blog/PermaLink,guid,47778e50-3aaa-4c7e-92cc-495177850d71.aspx</id>
    <published>2009-03-05T12:12:31.1683427-07:00</published>
    <updated>2009-03-09T12:35:14.1017312-07:00</updated>
    <category term="AI" label="AI" scheme="http://bragisoft.com/blog/CategoryView,category,AI.aspx" />
    <category term="N&amp;#178;D" label="N&amp;#178;D" scheme="http://bragisoft.com/blog/CategoryView,category,ND.aspx" />
    <category term="Personal" label="Personal" scheme="http://bragisoft.com/blog/CategoryView,category,Personal.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Since every blog needs a first post, I thought I'd make the subject a little appropriate
and start with the birth of the idea that eventually came to generate this blog. I
guess this story starts about 2 years ago, round early 2006, just after doing my evening
meditation exercises. This, by the way, tends to be one of my default thinking cap
times (I usually also have one in the morning, afternoon and early evening). Ideas
tend to come to me in flashes, heavy bright, very intense and just as short flashes. 
This one was no exception. 
</p>
        <p>
I believe I wrote the idea down somewhere, as I usually do, in order not to forget
it, just don't ask me where that paper would be.  I have always found it ironic
that I am not able to remember any of my ideas if I don't write them down, however
once written, it is known and I usually don't need to consult any papers again to
remember, but if I forgo this, oh dear,...  Very annoying at times (especially
if there is no paper around). Anyway, ideas come in all shapes and forms, some are
good, some bad, some are hard to tell.  This one fell in the latter category:
simple, elegant, but lets kid ourselves not: very far fetched.  So for a long
time, I focused on other things, things I new would work, things that are within reason. 
</p>
        <p>
At this point, I should note something about my health. you see, for the last couple
of years this had slowly been going downhill. Back &amp; leg pain and fatigue had
been plaguing me for the last couple of years, in crescendo ever since the age of
23-24.  At the beginning, it was believed to originate from a back injury, but
because of it's persistency other paths were considered, but never fully acknowledged.
So, for a long time, I simply struggled along, basically hoping for the pain to go
away, which it did on occasion, giving me hope again to one day be able to pick up
where I left off.  So I maintained my programming skills, learned what needed
learning and tried to find my way in this world.
</p>
        <p>
Things took a turn though, somewhere round March of 2008 when I began to feel a nuisance
in the stomach. After an initial endoscope, the doctor appeared somewhat concerned
and didn't immediately inform me of his findings but instead sent a letter to my local
doctor explaining things and requesting some further observation.  Apparently
he had seen something that looked remarkably a lot like <a href="http://en.wikipedia.org/wiki/Crohn%27s_disease">Crohn's
disease</a>. Off course, as soon as that name was mentioned, I new,... If crohn was
in play, all these years could simply have been the foreplay for <a href="http://en.wikipedia.org/wiki/Ankylosing_spondylitis">Bechterew's</a>: <a href="http://en.wikipedia.org/wiki/FUBAR">FUBAR</a>.
At that time, I panicked.
</p>
        <p>
To properly explain my reaction, I should probably first tell you about my love for
moving images in all shapes and sizes (preferably with some colors though). My humble
gratitude goes out to <a href="http://www.kino.com/edison/d1.html">Edison</a>, <a href="http://en.wikipedia.org/wiki/John_Logie_Baird">Baird</a>, <a href="http://en.wikipedia.org/wiki/Vladimir_Zworykin">Zworykin</a>, <a href="http://en.wikipedia.org/wiki/Philo_T._Farnsworth">Farnsworth</a>,
and so many others who helped to create this most wonderful of teaching instruments. 
With this little box, I was allowed to live a thousand different lives without having
to suffer any of them. A most educating experience.  (Note: I must admit, I don't
know yet how to judge it's current evolutionary path.  In some ways it's probably
good in others just crap.  I do know though, that I watch a lot less lately,
more perhaps on that later). Anyway, thanks to TV, I was allowed to discover my worst
fear: dying, knowing I had the potential but not the guts to simply try. You see,
my panic stemmed from the idea that if Bechterew's is at play, I might not have that
many useful typing years left, and from a <a href="http://users.telenet.be/GeneCompiler/">previous
experience</a>, I knew how projects like this can horribly wonder out of there original
time frame.  
</p>
        <p>
Decisions were made.
</p>
        <p>
In order to achieve the most rapid development time possible, I decided to cut every
corner I could.  Basically this means I simply wrote the app in one go. 
I didn't make any design papers, there isn't a single test, nothing. The code is fairly
well documented though, for my own sanity. Work schedule was simple: mornings to control
the pain and get the machinery going, afternoons and early evenings coding, late evening
meditating on tomorrows tasks so the next day could go as smooth as possible. This
schedule only got interrupted for required events like family dinners and recovery
periods (days I was not able to type or everything was just hurting to much for any
sane thought to emerge).
</p>
        <p>
To guide me through the code as design paper, I simply replayed the idea scene over
and over again in the evenings so I could carefully observe all the details. How,
as a thought, I was traveling over the links which were generated just in front of
me.  How all of a sudden I split up into many different paths, some growing thicker,
some thinner, others simply dying out. How these splits could form loop backs and
how they finally join again.
</p>
        <p>
Somewhere round august, my doctor noted things weren't improving and changed my medication
to <a href="http://www.humira.com/CrohnsDisease/Default.aspx">Humira</a>. This was
a life saver. Recovery periods got shorter and shorter, and farther in between. 
Up to the point that the last one must have been a couple of weeks ago now and only
lasted a day. Pain also got less and less. I'm not pain free yet and eating is still
no fun. The back can also still let itself be known.  But at least I am able
to function somewhat again.  So development speed picked up and as the whole
thing slowly began to work, I realized this might actually be something. So I eventually
decided to put together <a href="http://www.bragisoft.com/files/a new neural network.pdf">a
paper</a> and <a href="http://www.bragisoft.com/files/setup.exe">an installer</a> to
find out what other people might think of it. For those of you brave enough to try
out this beast, I feel a little warning is in order: as it is the very very first
proto release, there are still some extreme rough edges.  Some things aren't
working completely and others simply aren't finished yet. Only 1 demo works fully,
an other one almost. Things should improve rapidly over the next few weeks though,
so bare with me.
</p>
      </div>
    </content>
  </entry>
</feed>