<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for tl;dr</title>
	<atom:link href="http://didntread.wordpress.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://didntread.wordpress.com</link>
	<description>Building a multi-dimensional spatially configured feed forward nodal compute network.</description>
	<lastBuildDate>Tue, 01 Sep 2009 14:36:10 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on Brainstorming the dataflow language &#8220;syntax&#8221; (Part 1) by dublindan</title>
		<link>http://didntread.wordpress.com/2009/08/09/brainstorming-the-dataflow-language-syntax-part-1/#comment-34</link>
		<dc:creator>dublindan</dc:creator>
		<pubDate>Tue, 01 Sep 2009 14:36:10 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=148#comment-34</guid>
		<description>Hmm, yeah, a switch/case style routing component may be best, especially if the type system allows for haskell-/ML-like pattern matching.

Last Wednesday, I redrew the fibonacci diagram. I think its a bit more intuitive now. I will upload it later.
In other news, I have a Qt-based editor under way. Once this is usable, I can start working with more complex example diagrams, so this should be interesting. Also, when the editor is at a usable-enough stage, I&#039;ll finish the VM and maybe release a prototype for people to play with. I&#039;ll see what happens.</description>
		<content:encoded><![CDATA[<p>Hmm, yeah, a switch/case style routing component may be best, especially if the type system allows for haskell-/ML-like pattern matching.</p>
<p>Last Wednesday, I redrew the fibonacci diagram. I think its a bit more intuitive now. I will upload it later.<br />
In other news, I have a Qt-based editor under way. Once this is usable, I can start working with more complex example diagrams, so this should be interesting. Also, when the editor is at a usable-enough stage, I&#8217;ll finish the VM and maybe release a prototype for people to play with. I&#8217;ll see what happens.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Brainstorming the dataflow language &#8220;syntax&#8221; (Part 1) by arthur</title>
		<link>http://didntread.wordpress.com/2009/08/09/brainstorming-the-dataflow-language-syntax-part-1/#comment-33</link>
		<dc:creator>arthur</dc:creator>
		<pubDate>Fri, 28 Aug 2009 20:49:59 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=148#comment-33</guid>
		<description>another option is to &#039;chain&#039; the options.

if this condition true then use this box of outputs
if the next condition is true use this box, etc etc etc.

would basically combine &#039;if&#039;, &#039;case&#039;, and if you do it right, you could make it work with pattern matching as well.</description>
		<content:encoded><![CDATA[<p>another option is to &#8216;chain&#8217; the options.</p>
<p>if this condition true then use this box of outputs<br />
if the next condition is true use this box, etc etc etc.</p>
<p>would basically combine &#8216;if&#8217;, &#8216;case&#8217;, and if you do it right, you could make it work with pattern matching as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Brainstorming the dataflow language &#8220;syntax&#8221; (Part 1) by dublindan</title>
		<link>http://didntread.wordpress.com/2009/08/09/brainstorming-the-dataflow-language-syntax-part-1/#comment-32</link>
		<dc:creator>dublindan</dc:creator>
		<pubDate>Wed, 26 Aug 2009 08:48:20 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=148#comment-32</guid>
		<description>Confusingly enough, I had it as &quot;if the condition is true, use the green box of outputs, otherwise the red box&quot;. This isn&#039;t very intuitive though, because you expect the condition to belong to the outputs directly to its right - I will revise this over the next few days and &quot;fix&quot; that to make it clearer.

Yes, I imagine you would write a component which takes only one value and initializes the other two inputs to 0 and 1 respectively.</description>
		<content:encoded><![CDATA[<p>Confusingly enough, I had it as &#8220;if the condition is true, use the green box of outputs, otherwise the red box&#8221;. This isn&#8217;t very intuitive though, because you expect the condition to belong to the outputs directly to its right &#8211; I will revise this over the next few days and &#8220;fix&#8221; that to make it clearer.</p>
<p>Yes, I imagine you would write a component which takes only one value and initializes the other two inputs to 0 and 1 respectively.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Brainstorming the dataflow language &#8220;syntax&#8221; (Part 1) by arthur</title>
		<link>http://didntread.wordpress.com/2009/08/09/brainstorming-the-dataflow-language-syntax-part-1/#comment-31</link>
		<dc:creator>arthur</dc:creator>
		<pubDate>Tue, 25 Aug 2009 20:01:24 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=148#comment-31</guid>
		<description>so does the precondition mean if &#039;green&#039; is greater then zero send &#039;blue&#039; to the output? if so shouldn&#039;t it be if &#039;green&#039; is = 0? also shouldn&#039;t you be writing a fab function (or component) that takes only one value as an input? namely the nth value you wish calculated?

am i missing something here?</description>
		<content:encoded><![CDATA[<p>so does the precondition mean if &#8216;green&#8217; is greater then zero send &#8216;blue&#8217; to the output? if so shouldn&#8217;t it be if &#8216;green&#8217; is = 0? also shouldn&#8217;t you be writing a fab function (or component) that takes only one value as an input? namely the nth value you wish calculated?</p>
<p>am i missing something here?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Some thoughts on flat hierarchies in C++ by Vorlath</title>
		<link>http://didntread.wordpress.com/2009/07/23/some-thoughts-on-flat-hierarchies-in-c/#comment-21</link>
		<dc:creator>Vorlath</dc:creator>
		<pubDate>Sat, 25 Jul 2009 19:29:40 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=113#comment-21</guid>
		<description>Good to hear (about everything.  I especially like the part about converting functions to messages).  I was wondering when I was writing my comment how in the world you can start with an example that has all the required features without alienating the reader.  That&#039;s why I think your example is a good one.  You start by initially separating what needs to be separated and then you can update how the messages get passed and how the execution is handled.  Since you had this all in mind to start off (and more), I think a followup article would be better than changing this one.  I quite like this one (and the last paragraph of your comment is great!  It&#039;s almost impossible to read about implementation details of this kind of execution model).</description>
		<content:encoded><![CDATA[<p>Good to hear (about everything.  I especially like the part about converting functions to messages).  I was wondering when I was writing my comment how in the world you can start with an example that has all the required features without alienating the reader.  That&#8217;s why I think your example is a good one.  You start by initially separating what needs to be separated and then you can update how the messages get passed and how the execution is handled.  Since you had this all in mind to start off (and more), I think a followup article would be better than changing this one.  I quite like this one (and the last paragraph of your comment is great!  It&#8217;s almost impossible to read about implementation details of this kind of execution model).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Some thoughts on flat hierarchies in C++ by dublindan</title>
		<link>http://didntread.wordpress.com/2009/07/23/some-thoughts-on-flat-hierarchies-in-c/#comment-20</link>
		<dc:creator>dublindan</dc:creator>
		<pubDate>Sat, 25 Jul 2009 09:22:30 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=113#comment-20</guid>
		<description>Thanks for the comment! You brought up some great points, though ones I have already thought about. I guess perhaps I should have put more effort into pointing out what the shortcomings were and maybe write a quick note on how they can be removed. I guess you just did that for me :-D I will rewrite this in a future post though - without the limitations.

You&#039;re right on the mark. This is the exact reason why I stated that this is a crude first example which can still be greatly improved. I wanted to start simple though and slowly move towards my &lt;em&gt;ideal&lt;/em&gt; implementation.

The biggest flaw with this version is, like you said, that sending a message will still call the function from the other components. This was only done to keep the implementation simple. What I would really want to do, in the send function, is to queue the message to be processed - not actually process it right away. This means that components &lt;strong&gt;can&lt;/strong&gt; (and I believe actually should) be run in separate threads, either one thread per component, or a pool of threads where each thread can processes one or more components sequentially. This, potentially, allows components to run in parallel and also, depending on how messages are managed and passed to the receiving components, would also allow them to run in seperate OS processes or even on other machines.
My goal with this system is definitely to allow components to be added and removed from a system dynamically, at runtime, without breaking the rest of the program - as well as allowing for the possibility of running components on different machines.

Messages should be immutable chunks of data which get sent into some magical cloud, which then passes them to the components. No components calling functions of other components or anything like that. This magical cloud is an execution manager which does have access to the components, but it shouldn&#039;t directly access them either, but rather add the message to a queue. The component should then process it as soon as its ready to do so (the execution manager makes sure that it gets run - or if each component has its own thread, then it will manage itself). Because calling other components only happens through messages, I see no reason that they cannot be sent over a network, or whatever you want to do.

This implementation doesn&#039;t allow you to do these things easily, but my goals with this post were more to introduce the idea and provide some simple code to play with. I think this code is simple enough that people should be able to grasp it right away. I do intend on improving this code, though.

As for dataflow, for the moment I&#039;m treating it seperately from this stuff. Eventually I&#039;ll unify all of the concepts under a single system/language/framework.


Regarding grouping of functions inside components, this is something I had thought about a few years ago, in relation to developing operating systems. The idea was to &lt;em&gt;more-or-less&lt;/em&gt; NOT provide any functions - to implement a function, you must implement a message handler. To call a function, you must send a message. I do see this as the way to go, but for a C++ implementation, theres obviosuly nothing stopping you from having each component be a stacked hierarchy of fucntion calls. This has the flaw that theres no obvious means of knowing how much any given component should contain - a flaw which you pointed out, in your blog, that dataflow does not have.


I had this implemented a while back, but unfortunately I lost the code due to a disk failure. This version had a pool of one or more threads, which would process components. Each thread was the exact same and could process the same components. The event manager was responsible for creating events from a memory pool. Events were extremely cheap to construct and destroy, so there were no issues with communicating only over events. The only locking code that was needed was to access the queues onto which components were placed when they had an event to process. Everything else was completely lockless. There was some complex code in there, but overall, it was a pretty simple system. It worked very well and I was planning on turning it into a small game engine. Unfortunately, the disk died and I lost the code. Lesson learnt - always back up code! Oh well, the next version will be much better!</description>
		<content:encoded><![CDATA[<p>Thanks for the comment! You brought up some great points, though ones I have already thought about. I guess perhaps I should have put more effort into pointing out what the shortcomings were and maybe write a quick note on how they can be removed. I guess you just did that for me <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  I will rewrite this in a future post though &#8211; without the limitations.</p>
<p>You&#8217;re right on the mark. This is the exact reason why I stated that this is a crude first example which can still be greatly improved. I wanted to start simple though and slowly move towards my <em>ideal</em> implementation.</p>
<p>The biggest flaw with this version is, like you said, that sending a message will still call the function from the other components. This was only done to keep the implementation simple. What I would really want to do, in the send function, is to queue the message to be processed &#8211; not actually process it right away. This means that components <strong>can</strong> (and I believe actually should) be run in separate threads, either one thread per component, or a pool of threads where each thread can processes one or more components sequentially. This, potentially, allows components to run in parallel and also, depending on how messages are managed and passed to the receiving components, would also allow them to run in seperate OS processes or even on other machines.<br />
My goal with this system is definitely to allow components to be added and removed from a system dynamically, at runtime, without breaking the rest of the program &#8211; as well as allowing for the possibility of running components on different machines.</p>
<p>Messages should be immutable chunks of data which get sent into some magical cloud, which then passes them to the components. No components calling functions of other components or anything like that. This magical cloud is an execution manager which does have access to the components, but it shouldn&#8217;t directly access them either, but rather add the message to a queue. The component should then process it as soon as its ready to do so (the execution manager makes sure that it gets run &#8211; or if each component has its own thread, then it will manage itself). Because calling other components only happens through messages, I see no reason that they cannot be sent over a network, or whatever you want to do.</p>
<p>This implementation doesn&#8217;t allow you to do these things easily, but my goals with this post were more to introduce the idea and provide some simple code to play with. I think this code is simple enough that people should be able to grasp it right away. I do intend on improving this code, though.</p>
<p>As for dataflow, for the moment I&#8217;m treating it seperately from this stuff. Eventually I&#8217;ll unify all of the concepts under a single system/language/framework.</p>
<p>Regarding grouping of functions inside components, this is something I had thought about a few years ago, in relation to developing operating systems. The idea was to <em>more-or-less</em> NOT provide any functions &#8211; to implement a function, you must implement a message handler. To call a function, you must send a message. I do see this as the way to go, but for a C++ implementation, theres obviosuly nothing stopping you from having each component be a stacked hierarchy of fucntion calls. This has the flaw that theres no obvious means of knowing how much any given component should contain &#8211; a flaw which you pointed out, in your blog, that dataflow does not have.</p>
<p>I had this implemented a while back, but unfortunately I lost the code due to a disk failure. This version had a pool of one or more threads, which would process components. Each thread was the exact same and could process the same components. The event manager was responsible for creating events from a memory pool. Events were extremely cheap to construct and destroy, so there were no issues with communicating only over events. The only locking code that was needed was to access the queues onto which components were placed when they had an event to process. Everything else was completely lockless. There was some complex code in there, but overall, it was a pretty simple system. It worked very well and I was planning on turning it into a small game engine. Unfortunately, the disk died and I lost the code. Lesson learnt &#8211; always back up code! Oh well, the next version will be much better!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Some thoughts on flat hierarchies in C++ by Vorlath</title>
		<link>http://didntread.wordpress.com/2009/07/23/some-thoughts-on-flat-hierarchies-in-c/#comment-19</link>
		<dc:creator>Vorlath</dc:creator>
		<pubDate>Fri, 24 Jul 2009 23:59:51 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=113#comment-19</guid>
		<description>Any thoughts on the execution model of a flat hierarchy?  In your case, the event processing is separated into its own function, but it is used just like a stacked hierarchy where each component executes the events of all other components.  Very nice example though.

Here are a few things you may want to consider if you want more flexibility even though the initial setup of this system is a little more complicated.

First is that components should never execute anything in another component except to store a message.  But at no point can this call another function to process that message.  If the other component has its own thread, then that thread can process it, otherwise you need to wait until the component is completely done before starting up the other component that received the message.

Second is that you need an execution manager.  Either all components have their own threads, or you can have a separate function that executes each component in turn that have messages waiting in their queues (you could even have this threaded as well with locking mechanism in place for the message passing so that each core can execute a component).

This is just me, but the true meaning of flat hierarchy is one where you can move a component (or sub-component) anywhere, even to another machine.  Or where you can group them together into compound components.  If you include a call to send which then processes that event in another component, you lose the ability to group or separate.  They are forever coupled to each other.  

IOW, (again for me) a flat hierarchy is where we, as humans, can group or separate components, but where the machine(s) can NEVER make use of this to execute the code.

You may have different plans and your example is certainly the right way to go for an example as it contains all the prerequisites before going to a dataflow model.  All it needs is a modification of the send routine so that components can queue incoming messages and a component queuing mechanism for a kind of round robin execution handler (components get inserted into the execution queue when they have a message in their incoming queue).

To reiterate, flat hierarchies are useful to me because they allow the developer to create arbitrary groupings anywhere in the software that help visualize the software in a more comprehensive fashion (higher level).  But where those groupings mean absolutely nothing (other than perhaps substituting the implementation) to the execution manager, enabling code to be automatically distributed.  So developers get to see the &quot;big picture&quot; or small details as they wish without adding extra complexity to the runtime (once it&#039;s set up) which allows it to do automatic distribution.

What do you think?  What are your views on flat hierarchy that make it interesting?

Here&#039;s just one example of an advantage that I see.  When you group functions together into another container function, you&#039;re essentially grouping not just the functions inside your container function, but also EVERY single function that is called at all depths of execution.  That&#039;s a stacked hierarchy.  A flat hierarchy allows me to group together only PART of the depth.  I could group ONLY the first function calls, but not the second level of execution nesting.  Of course, that makes no sense in normal C++, but it does if you create components with the two added points above because components are individual entities.  This would allow one to create libraries that not only gets called, but also that connect to other components on the other side.  IOW, you could use libraries ANYWHERE and for ANY amount of code.  Right now, macros and templates mostly serve this purpose, but obviously the need is there.

Am I off base with what you are thinking about?  Those are some of my views.  But I&#039;d like to know more about how you&#039;re going about it.  How do you see this being used?

(And apologies for the long comment.)</description>
		<content:encoded><![CDATA[<p>Any thoughts on the execution model of a flat hierarchy?  In your case, the event processing is separated into its own function, but it is used just like a stacked hierarchy where each component executes the events of all other components.  Very nice example though.</p>
<p>Here are a few things you may want to consider if you want more flexibility even though the initial setup of this system is a little more complicated.</p>
<p>First is that components should never execute anything in another component except to store a message.  But at no point can this call another function to process that message.  If the other component has its own thread, then that thread can process it, otherwise you need to wait until the component is completely done before starting up the other component that received the message.</p>
<p>Second is that you need an execution manager.  Either all components have their own threads, or you can have a separate function that executes each component in turn that have messages waiting in their queues (you could even have this threaded as well with locking mechanism in place for the message passing so that each core can execute a component).</p>
<p>This is just me, but the true meaning of flat hierarchy is one where you can move a component (or sub-component) anywhere, even to another machine.  Or where you can group them together into compound components.  If you include a call to send which then processes that event in another component, you lose the ability to group or separate.  They are forever coupled to each other.  </p>
<p>IOW, (again for me) a flat hierarchy is where we, as humans, can group or separate components, but where the machine(s) can NEVER make use of this to execute the code.</p>
<p>You may have different plans and your example is certainly the right way to go for an example as it contains all the prerequisites before going to a dataflow model.  All it needs is a modification of the send routine so that components can queue incoming messages and a component queuing mechanism for a kind of round robin execution handler (components get inserted into the execution queue when they have a message in their incoming queue).</p>
<p>To reiterate, flat hierarchies are useful to me because they allow the developer to create arbitrary groupings anywhere in the software that help visualize the software in a more comprehensive fashion (higher level).  But where those groupings mean absolutely nothing (other than perhaps substituting the implementation) to the execution manager, enabling code to be automatically distributed.  So developers get to see the &#8220;big picture&#8221; or small details as they wish without adding extra complexity to the runtime (once it&#8217;s set up) which allows it to do automatic distribution.</p>
<p>What do you think?  What are your views on flat hierarchy that make it interesting?</p>
<p>Here&#8217;s just one example of an advantage that I see.  When you group functions together into another container function, you&#8217;re essentially grouping not just the functions inside your container function, but also EVERY single function that is called at all depths of execution.  That&#8217;s a stacked hierarchy.  A flat hierarchy allows me to group together only PART of the depth.  I could group ONLY the first function calls, but not the second level of execution nesting.  Of course, that makes no sense in normal C++, but it does if you create components with the two added points above because components are individual entities.  This would allow one to create libraries that not only gets called, but also that connect to other components on the other side.  IOW, you could use libraries ANYWHERE and for ANY amount of code.  Right now, macros and templates mostly serve this purpose, but obviously the need is there.</p>
<p>Am I off base with what you are thinking about?  Those are some of my views.  But I&#8217;d like to know more about how you&#8217;re going about it.  How do you see this being used?</p>
<p>(And apologies for the long comment.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is dataflow? by ruderuth</title>
		<link>http://didntread.wordpress.com/2009/07/20/what-is-dataflow/#comment-14</link>
		<dc:creator>ruderuth</dc:creator>
		<pubDate>Mon, 20 Jul 2009 17:05:22 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=107#comment-14</guid>
		<description>yeah, you could be on to something there!  I´ll look more into it for surez.  I´ll be applying for 2 different PhD things in the next few months, so I will take the thing that gives the money obviously.. still, theres the nederlands thing...

I´m off for a run after this tea, so chat laterz maybe! :D</description>
		<content:encoded><![CDATA[<p>yeah, you could be on to something there!  I´ll look more into it for surez.  I´ll be applying for 2 different PhD things in the next few months, so I will take the thing that gives the money obviously.. still, theres the nederlands thing&#8230;</p>
<p>I´m off for a run after this tea, so chat laterz maybe! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is dataflow? by dublindan</title>
		<link>http://didntread.wordpress.com/2009/07/20/what-is-dataflow/#comment-13</link>
		<dc:creator>dublindan</dc:creator>
		<pubDate>Mon, 20 Jul 2009 16:57:02 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=107#comment-13</guid>
		<description>Cool! If you decide to go for it, keep me posted. It sounds pretty interesting (and the netherlands part always helps :D)

Speaking of agent-based modeling, I know its incomplete, but check the previous blog post. The entity system approach seems like a powerful way of simulating an environment and its interactions, potentially.

Anyway, ping me on google talk, if you want.</description>
		<content:encoded><![CDATA[<p>Cool! If you decide to go for it, keep me posted. It sounds pretty interesting (and the netherlands part always helps <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<p>Speaking of agent-based modeling, I know its incomplete, but check the previous blog post. The entity system approach seems like a powerful way of simulating an environment and its interactions, potentially.</p>
<p>Anyway, ping me on google talk, if you want.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is dataflow? by ruderuth</title>
		<link>http://didntread.wordpress.com/2009/07/20/what-is-dataflow/#comment-12</link>
		<dc:creator>ruderuth</dc:creator>
		<pubDate>Mon, 20 Jul 2009 16:51:51 +0000</pubDate>
		<guid isPermaLink="false">http://didntread.wordpress.com/?p=107#comment-12</guid>
		<description>Yeah that alife thing could be interesting - my prof is kinda offering me a PhD project using agents to model for environment-human-economic interactions or some such.  I was rather interested because it involved a semester in the netherlands .. ;)</description>
		<content:encoded><![CDATA[<p>Yeah that alife thing could be interesting &#8211; my prof is kinda offering me a PhD project using agents to model for environment-human-economic interactions or some such.  I was rather interested because it involved a semester in the netherlands .. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
