--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
Sam
Hi Paul,Please keep in mind that it takes a long time to get something into production.
I'm not using a FBP product specifically, but it does strongly inform the way in which I am implementing Enterprise Integration Patterns.
Even this has problems. For example, some people seem fixated on the use of an ESB.
I doubt "afraid" is the right word here :) A search in the monsters or any other job boards reveals java developersare still in high demand these days. May be folks just "prefer" to use duck typing language like javascript? I likeTcl better ha ha (yes it is duck typed too...).
I understand that it takes time for FBP to evolve, to get to a production quality.But there is another path as suggested by Paul Graham quite a while back:"Here it is: I like to find (a) simple solutions (b) to overlooked problems (c) that actually need to be solved, and (d) deliver them as informally as possible, (e) starting with a very crude version 1, then (f) iterating rapidly."http://www.paulgraham.com/newthings.html
That's how I "evolved" my tcl fbp implementation. Right from day 1 it worked in the sensethat it retrieved the financial information I need to drive my investment decisions. And thatday 1 was more than 3 years ago. The very first version was bare-bone: just direct socketconnections among Linux processes within 1 computer, with spice-like data file for settingup the node connections. Over the years I put in features like bounded FIFO support, GUIsupport to stitch up nodes, distributed processing to map nodes to different computers,GUI disconnect/reconnect, all the while running the financial crawler application every tradingday. I shall not claim my FBP is in production mode, but as long as it is evolving, and growing,I'm a happy camper :)
Re duck typing, I can't see it! When I asked Henri what was the appeal, I think he said that it reduced the number of keystrokes when he is coding in stations between trains! There has got to be more to it than that!
e.g. when I search for JavaFBP ( https://www.google.nl/search?q=javafbp&oq=javafbp )I'm not really overwhelmed by information, this has nothing to do however with the production readiness of the implementation.The main entry to JavaFBP seems to be the book and when I find the source I get redirected to the book and a personal website.
This is disappointing! 4 days later, and exactly one person of the 514 (as of today) has posted a response to my plea! I have also heard informally from one other person, and I know for sure that some of you are working on FBP-like implementations for various devices and systems.
I do hope that some of you are finding FBP useful, and best regards to all of you!
Paul M.
struct ip_int{
bool loaded;int value;
};
--
Good comments, Rob! This cuts to the heart of how you find stuff, and get visibility, on the web. I assume you looked up JavaFBP in the Netherlands because I had mentioned it.
I would feel it more likely that people would Google "Flow-Based Programming", "FBP" or "Better way to program applications". Over here (Canada actually), the first one of these give 32,600 hits, of which the 3rd and 4th are references to NoFlo, which uses the term "Flow-Based Programming", and shares a number of its characteristics, although, as we have discussed on this Group, it is different in some fundamental ways.
Googling FBP gives 1,620,000 hits, of which the 3rd is a Wikipedia disambiguation page, which shows our FBP as its first entry. There are 8 others - not surprisingly, as FBP is a 3-letter acronym! A 4-letter acronym would probably have given fewer alternatives!
I tried to leave a trail of breadcrumbs, so everything is cross-connected. And in fact, you're right - I do want everything to lead back to the book, because, for so many of the comments in the Group, the only real answer is RTFB! Sorry, but that's the answer! FBP is a paradigm change, and IMO you can only learn it by trying it on real apps.
Sorry, I didn't understand this: "The main entry to JavaFBP seems to be the book and when I find the source I get redirected to the book and a personal website." Are you saying that you were hoping for something that you didn't find? If so, can you explain what that is?
Re your other point, examples are difficult: if it's too small, e.g. Hello World, nobody takes it seriously - in fact we don't have a Hello World! If it's too big, TL;DR. The point is in fact that, as FBP applications get bigger, they don't get exponentially more complex! But how do you prove a negative, except by living with an app for a number of years, as I have.
Maintainability is key - and that is what FBP delivers, because it is a different way of looking at building apps - not a different way of programming!
The app that is AFAIK still running after almost 40 years is now being maintained by kids who weren't born when it was written - and I can tell you that some of the people who maintained it in between were a bit weak on the concepts - but they could still maintain it, without destroying it!
Support is not a problem - anyone who speaks Java could maintain it. Services - not sure which you mean...? I think there is quite a lot of documentation - maybe it needs restructuring...? Any suggestions?
So maybe you could tell me - what would you like to see as an easy-to-read entry into FBP? If you tell me you are too busy to read the book, then I believe we have a problem!
Do you believe that you can give an engineer a pile of girders, and some documentation, and tell him/her to build a bridge? FBP IMO is an engineering discipline, and I don't know if there is an easier way in than just to give it a try!
Comments, anyone?Regards,
Paul M.
On Tue, Jul 1, 2014 at 2:43 PM, Rob Halff <rob....@gmail.com> wrote:
I think the main problem for production usage is the way a project is presented.
If as a developer you know your system is capable enough to be used within production,the way you present and advocate it becomes important.e.g. when I search for JavaFBP ( https://www.google.nl/search?q=javafbp&oq=javafbp )I'm not really overwhelmed by information, this has nothing to do however with the production readiness of the implementation.The main entry to JavaFBP seems to be the book and when I find the source I get redirected to the book and a personal website.Visibility, support, documentation, examples, services etc. are important.All that boring stuff developers are not fond of, because well the code works so what's the problem :-)
If there is already an entry-level problem for developers, for managers to adopt it will be even less feasible.Academics will adopt fbp more easily I guess, because they live within an environment where they are mostlyfree to choose or make their own tools, the developer decides.Stories of long running implementations are great, however hidden away within a newsgroup with mainly only idlers won't cut it.Explained thoroughly as use cases or (real) testimonials on a website, they would be good selling points.At the moment I'm writing my own fbp-ish system and try to obscure it as much as possible,hence I will not yet mention it's name and I know my project is not ready for production at all and maybe it will never be.Saying this, I think I'm actually explaining the issues I have with my own project here, but it just feels better to project them upon JavaFBP ;-)Greetings,Rob Halff
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "Flow Based Programming" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/flow-based-programming/hfYw1gP7FVI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to flow-based-progra...@googlegroups.com.
A very last thing about Nextflow, I don't want open side discussion about it in this thread but I would be interested to understand the Oleksandr's comment. What do you mean by "it does not fit the needs it provides all affordances to spend some time and learn it" ?
Hi Paul and all,
I was able to introduce flows as a light wight pattern for a Java project at work.
The decoupled operations work really nice there. :-)
I have taken a short look at JavaFBP. But it seems to use a different thread for every operation. This overhead limits the minimum size of the operations because it wont make sense to have operations where the overhead is bigger than the real work done. The approach with many thread makes debugging MUCH harder. Special support by the framework is needed because normal stacktraces are useless.
I think data is send between the operations as special Java objects. So everything has to be converted from POJOS to these and back again when interfacing with normal Java libraries.
Altogether JavaFBP feels quite un-Java-like. My own creation ( https://github.com/flowdev/jbase ) is quite hard to adapt for many Java devs already.
Best regards
Ole
--
Trettlachstr. 34
91301 Forchheim
Tel.: 09191/79 40 838
Mobil: 0171/10 7 90 23
--
It looks like that the more interesting part in the Nextflow project is .. the web site! ;)
Just kidding. Regarding this discussion...
Every morning a bunch of posts come into my inbox in connection with the FBP Group, but I notice that the majority of them seem to be basically from people developing graphical or data streaming tools, rather than struggling to use existing tools. NoFlo/flowhub is borderline, as a lot of people seem to be working at extending it/them.
I had expected that more of these posts would be from people trying to use FBP for real-world problems, as one would use Java or COBOL... Now I know a lot of you are musicians and artists and you probably are using various FBP-like dialects to write music or do art, but where are the payroll and inventory developers?! Especially as, when I did a survey a couple of years ago, 3/4 of the respondents self-identified as business, rather than academic. I have appended the pie-chart from this study.
Now, I spent 35 years in business, and I am sure very few business are going to bet the store on some untried technology, so I have to asume that the business types among you who are developing neat software are in fact in some R & D department hidden away in a lab somewhere... Personally speaking, in my case FBP went further when we were refining it in the context of real-world problems - and I had more fun! The only products I worked on in bona fide labs (before FBP) never actually went anywhere - and a very mature FBP product that was transferred to a lab got strangled in red tape, literally!
Given that there are 512 members currently listed on the FBP Google group, of which we typically hear from probably less than a dozen, I would love for some of the others to let us know:
- if they are using some dialect of FBP for production work - if so, which dialect
- if they tried it and couldn't use it, or it broke and they gave up - again, which dialect, and what happened
- if they find the concepts interesting, but can't see the relevance to what they are doing
- they would like to use it, but management has decreed that they have to use SAP, say
Please note, we know that some of you are sworn to secrecy, so we don't want you to reveal any trade secrets, or give away intellectual property...
But just a tiny hint...? Is that too much to ask?!
TIA
Paul M. (aka Morpheus - sorry, in joke)
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
Component c = new Component(); // Runnable
if(componentIsConfiguredToUseThread( c )) { Thread myThread = new Thread( c ); myThread.start();
} else {
// normal start within current thread.
}
Where Component could be a subnet or normal component.
Maximum flexibility could then be achieved by making these parameters configurable (somewhere).This way the choice is up to the component developer or even the designer of the network to define when new threads are created.If then none is configured to use threads at all, effectively the entire network would just run within one main thread.
As a designer I just want all my hardware to be used efficiently, I don't want to be a scheduler and distributed works between CPUs/cores.
As a developer I don't know how many cores will be available on the hardware the component will be used.
Where's the profit of adding yet another configuration option for at the moment premature optimisation?
Kind regards,Alex
--
Hello Rob,I have an impression that FBP tries to solve the issues coming from von Neumann architecture :-) Of course we're still running FBP apps on the von Neumanns machines, I'm not talking about data flow hardware, but the problem you're trying to solve is already solved with green threads: once you map an executing node into a dedicated green thread - it's up to an underlying framework how to multiplex it into system threads/processes. Although I can understand the desire of JavaScript/Node.js developer to do so - node.js is not (yet) a suitable technology for writing multithreaded/concurrent applications (even with recently added pair of crutches like web-workers).
Re designers needs. I'm observing issues even in comprehension of FBP DSL and visual notation) when introducing non-programmers to the tool we're working on. Although the components are very domain-specific they still need to learn the basics of connecting logic, etc. Therefore I'm against any additional parametrisation of how the nodes are executed. Although of course that can be a parameter of the platform itself (hidden from a designer).
Kind regards,Alex
I still don't understand why you need to configuration to tell the component to be either concurrent or parallel or concurrent/parallel?
Mr. Paul M.Answering your questions:1)We develop our technology based in a technology used in the design of the Tropico R switching system. According to that, a system is a group of closed blocks that communicate to each other uniquely by exchange of messages,possibly in a network. Each block is a finite state machine described in ITU-T SDL,
As I said before we want to publish this technology, maybe a paper named "A Linux framework to bidirectional FBP", I stressed bidirectional because our nodes can treat both sides of a stream, I do not know if I am correct in this stress. My I publish this paper in this group?
--
Paul,
We are a Toronto based software company specialized in institutional financial trading platform. We are currently re-developing our trading platform from ground up again after we have a good successful run with our existing trading platform (3 out of the big five banks+large brokerage house+few mid/small hedge fund prop trading firms as our customers). The reason for the re-development is to accommodate a new business model and at the same time solve some of the fundamental problems we had with traditional OO/multi-threading/RPC approach of developing business software application. We are building a new business software development platform called F1 that is based on data flow programming concept to allow us to develop our trading system which will be declarative, deterministic, and efficient. We found the traditional way of developing business applications has the following issues:
For business application, we always naturally use the functional orientation to design the system. We want to place an order, cancel an order, get trade confirmation, receive price update, etc. But it seems to be unnatural to use OO to design the system. After all, business people will never tell you what an Order can do. We need software developed in the same way how the business people understand it;
When a system grows larger and larger, it is more difficult to understand the code without documentation. But in the “real world” no one ever keeps documentation 100% in sync with the actual business application. We need a system that is naturally documented such that business people can visually see how the system works;
Using traditional thread-based approach to develop concurrent event driven application is simply chaotic. You have to lock here and lock there. Not only is the CPU being used for waiting, blocking, and context switching most of the time, it is also very deadlock prone since you don't know if the instance method you are calling is trying to lock something else that will create deadlock. We need the system to be running efficiently without any contention and deadlock issue. We need a way to develop concurrent business application easier;
How many times are we unable to reproduce the same production problem in development hardware just simply because the hardware is different and it changes the threading sequence? We need the system to be absolutely deterministic where we know exactly what the input is and no matter what hardware we run the code on it will produce exactly the same output
For F1, we are injecting some of the advanced concepts of the data flow implementation to make sure it will be suitable for financial trading system development (and any other high demand business application development including gaming) including:
F1 Data Model Extension (DMX) which allows designer to define domain data declaratively in a real time collaborative web environment. DMX categorizes data into
Persistent Data - with data store persistence and query capability for eventually consistent data access
Event Data - immutable input data to trigger Application State Data change in the task of the flow. Event Data naturally forms the API to access the system
Application State Data - atomic mutable data changed by task of the flow based on incoming Event Data
DMX is backed by our own elastic binary encoding which can be used as fixed length encoding for off heap data access and variable length encoding for sending to wire. Using elastic binary encoding instead of POJO to eliminate the need to perform serialization & deserialization;
Fast messaging via memory mapped file (We are using Peter Lawrey's Java Chronicle) with replay capability;
F1 Flow Model Extension (FMX) allows designer to define business logic declaratively in a real time collaborative web environment. This provides a naturally documented software platform. The visual flow of the logic is exactly the same as the running software. FMX consists of Task and Flow. Each Task has a single Input (we don’t allow multiple inputs. We want to enforce each Task is focus and simple. If a Task requires more than 1 Input then it should be split to multiple Tasks) and multiple Outputs. FMX will generate Java flow implementation and developer will need to develop the actual underlying logic for the task;
F1 execution will rely on our context based multi-threading approach where Event with the same context is guaranteed to be executed on the same thread (Events with different contexts could be executed on the same thread or different thread). This will eliminate the need to use locking and programming will become much simpler since everything is executed in a single threaded manner. Each execution thread will be affined to the specific core of the machine to avoid context switching;
F1 has a totally separate unit of I/O performing network input output operation. Input will be based on a single busy spin to select Input Events based on the time of arrival and flow into the corresponding Flow Processing unit based on the context. In this way we can guarantee the fairness of the input sequence;
F1 will also have an in-memory Persistent Data Cache to provide unified, eventually-consistent Persistent Data read access to the Flow Task via shared memory
We are busy working on the F1 platform and in parallel we are developing bits and pieces of the trading system to make sure F1 is on the right track.
The toughest problem we are facing is how to change a developer's mentality to use the Flow-based development concept instead of traditional OO as developers have been trained for so many years and it will take time to adjust the mentality to use Flow concept. Our objective is to build a world class collaborative business software development platform where business people and technical people can build the high performance business software together. Although we are not in production yet, but will definitely keep you posted on how it will go in production.
--
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
Thanks and we will for sure. We are currently setting up a blog to journal the design and development of F1. And once we feel F1 is mature enough we will open source & open service the entire thing as a give back to the technology community and also get the feedback from the community to make it a better platform.
In terms of the mentality, it is more changing some of the typical use case from a procedural perspective to event flow perspective. For example, we are currently working on allowing Task to issue Data Query where the resulting Data from the Data Query will come back as a framed sequence of events and another Task will handle it one by one. Which is a bit different then having the same set of code to issue the query, wait for the result set, and loop through the result set. But like you said as long as the designer group gets it, then we can distribute each Task to a lower level of developers to implement and they don't need to worry about the external world.
On Wed, Jul 16, 2014 at 12:48 PM, Thomas Lo <thom...@financialogixgroup.com> wrote:
Thanks and we will for sure. We are currently setting up a blog to journal the design and development of F1. And once we feel F1 is mature enough we will open source & open service the entire thing as a give back to the technology community and also get the feedback from the community to make it a better platform.
That's really refreshing! We really need experience with FBP to be pooled, so people can build on what has gone before.
In terms of the mentality, it is more changing some of the typical use case from a procedural perspective to event flow perspective. For example, we are currently working on allowing Task to issue Data Query where the resulting Data from the Data Query will come back as a framed sequence of events and another Task will handle it one by one. Which is a bit different then having the same set of code to issue the query, wait for the result set, and loop through the result set. But like you said as long as the designer group gets it, then we can distribute each Task to a lower level of developers to implement and they don't need to worry about the external world.
Interestingly, that's very similar to the diagram on the front of the 2nd edition of my book! And I agree about changing the mindset - we have found the "data factory" image to be helpful - but the old von Neumann mindset is very entrenched!
Looking forward to hearing how it goes - and of course, I think I can safely say that we are all available to help in any way we can!
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-progra...@googlegroups.com.
Every morning a bunch of posts come into my inbox in connection with the FBP Group, but I notice that the majority of them seem to be basically from people developing graphical or data streaming tools, rather than struggling to use existing tools. NoFlo/flowhub is borderline, as a lot of people seem to be working at extending it/them.
I had expected that more of these posts would be from people trying to use FBP for real-world problems, as one would use Java or COBOL... Now I know a lot of you are musicians and artists and you probably are using various FBP-like dialects to write music or do art, but where are the payroll and inventory developers?! Especially as, when I did a survey a couple of years ago, 3/4 of the respondents self-identified as business, rather than academic. I have appended the pie-chart from this study.
Now, I spent 35 years in business, and I am sure very few businesses are going to bet the store on some untried technology, so I have to assume that the business types among you who are developing neat software are in fact in some R & D department hidden away in a lab somewhere... Personally speaking, in my case FBP went further when we were refining it in the context of real-world problems - and I had more fun! The only products I worked on in bona fide labs (before FBP) never actually went anywhere - and a very mature FBP product that was transferred to a lab got strangled in red tape, literally!
Given that there are 512 members currently listed on the FBP Google group, of which we typically hear from probably less than a dozen, I would love for some of the others to let us know:
- if they are using some dialect of FBP for production work - if so, which dialect
- if they tried it and couldn't use it, or it broke and they gave up - again, which dialect, and what happened
- if they find the concepts interesting, but can't see the relevance to what they are doing
- they would like to use it, but management has decreed that they have to use SAP, say
Please note, we know that some of you are sworn to secrecy, so we don't want you to reveal any trade secrets, or give away intellectual property...
But just a tiny hint...? Is that too much to ask?!
TIA
Paul M.
I'm still running my winfbp (tcl implementation) once a week to extract financial data from public sites like tmx.com, globeinvestor.com, ca.dividendinvestor.com and finance.yahoo.com.
Another real-life application is to extract English to Chinese translations (eg. from Cambridge English to Chinese website) and imbed them into stories from public domain sites (eg. "As a Man Thinketh" from gutenberg.org). The current graphs looks like this
Thought and Character((人的)品質;性格;(事物的)性質;特性)
The aphorism(格言;警句;箴言), "As a man thinketh in his heart so is he," not only embraces(包括,包含) the whole of a man's being, but is so comprehensive(廣泛的;無所不包的;綜合的) as to reach out to every condition and circumstance(情況,環境;情勢) of his life. A man is literally(實在地,不加誇張地) what he thinks, his character being the complete sum of all his thoughts.
As the plant springs(迅速生長) from, and could not be without, the seed, so every act of a man springs from the hidden seeds of thought, and could not have appeared without them. This applies equally to those acts called "spontaneous(自發的;非出於強制的)" and "unpremeditated(無預謀的;偶然的)" as to those which are deliberately(慎重地;謹慎地) executed(實施,實行;執行;履行).
...
abandoned 被放棄的;被遺棄的
absolute 純粹的;完全的 絕對的
abuse 濫用,妄用
alter 改變
aphorism 格言;警句;箴言
application 應用,適用;運用
armory 軍械庫
artifice 奸計;詭計
Every morning a bunch of posts come into my inbox in connection with the FBP Group, but I notice that the majority of them seem to be basically from people developing graphical or data streaming tools, rather than struggling to use existing tools. NoFlo/flowhub is borderline, as a lot of people seem to be working at extending it/them.
I had expected that more of these posts would be from people trying to use FBP for real-world problems, as one would use Java or COBOL... Now I know a lot of you are musicians and artists and you probably are using various FBP-like dialects to write music or do art, but where are the payroll and inventory developers?! Especially as, when I did a survey a couple of years ago, 3/4 of the respondents self-identified as business, rather than academic. I have appended the pie-chart from this study.
Now, I spent 35 years in business, and I am sure very few business are going to bet the store on some untried technology, so I have to asume that the business types among you who are developing neat software are in fact in some R & D department hidden away in a lab somewhere... Personally speaking, in my case FBP went further when we were refining it in the context of real-world problems - and I had more fun! The only products I worked on in bona fide labs (before FBP) never actually went anywhere - and a very mature FBP product that was transferred to a lab got strangled in red tape, literally!
Given that there are 512 members currently listed on the FBP Google group, of which we typically hear from probably less than a dozen, I would love for some of the others to let us know:
- if they are using some dialect of FBP for production work - if so, which dialect
- if they tried it and couldn't use it, or it broke and they gave up - again, which dialect, and what happened
- if they find the concepts interesting, but can't see the relevance to what they are doing
- they would like to use it, but management has decreed that they have to use SAP, say
Please note, we know that some of you are sworn to secrecy, so we don't want you to reveal any trade secrets, or give away intellectual property...
But just a tiny hint...? Is that too much to ask?!
TIA
--
You received this message because you are subscribed to the Google Groups "Flow Based Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flow-based-programming+unsub...@googlegroups.com.
I have updated my overview to show what I think of as your bits and Flowhub's bits.Side note question: Sockets would be links from runtime to runtime, e.g. flowing to a JS component from a Java one? or would javaFBP pass the flow directly?Your components are anything that runs in the java runtime.My components would be anything that runs in any runtime, which poses a different set of issues, probably one of classification.A Tier system could be adopted.core being common shared functions, the FBP pseudo code
- Tier CeS - simple, core.
- Tier ClS - simple, contextual.
- Tier SdS - simple, specialized.
- Tier CeC - compound, core.
- Tier ClC - compound, contextual.
- Tier SdC - compound, specialized.
contextual being specific to domains, e.g. API's, IoTspecialized being a catch all. The Other option!Each tier may also have stable and proposed layers. FBComponents A and B can be united under AB. FBP flow/graph can test both A + B and AB. I would think AB would outperform A+B, but who knows until we try it eh!CeS need a benign dictator to oversee them, much like Linus Torvalds and Linux, I would imagine, so I would volunteer you for that bit.ClS ought to have their own teamsSdC and all the *C tiers could be open to all.OK. with all these potential sources of FBCs anywhere on the internet plus I have my own locally I would suspect a selection mechanism for which sources I want available for this flow/graph would be in order. DrawFBP would need to be able to rebuild the components list on the fly. The same checklist would be needed by JavaFBP obviously as it will need to know what to run, but it is not a good idea to load everything available.Perhaps you can see me getting bogged down again, so I'll rest and return.ANeo,
FYI. re Matrix. Elon Musk, Stephen Hawking and Michio Kaku have all express the idea that we do actually live in a Matrix. I thought I heard Kaku can actually prove it.
Sorry not to have gotten back to you earlier - things are a bit hectic at home right now as we have to help out our daughter and grandson for a few weeks.Paul M.Best regards - let's talk some more!I look forward to looking at Node Red, but I confess I was put off by the name - still, your example is pretty impressive! I'll dig into it a bit deeper as time permits.Wasn't too clear what the Tank is - something in Matrix (which I haven't seen)? Re your last paragraph, it would be great if you could expand on this. As you may have gathered from the book, I am very keen on componentry and reuse, but I haven't really figured out how we will integrate libraries of components coming from different vendors - maybe in different countries...? If you look athttps://github.com/jpaulm/javafbp/blob/master/README.md , you will see a section called "Building/viewing Component Attributes List" - maybe I should include a sample section of its output in the Readme... This is an attempt to automatically generate a searchable list of components, and their attributes, from selected JavaFBP component libraries. This in turn told me that I needed to add a bunch more component descriptions. I think this has potential... what do you think?
I really found your note very thought-provoking, and would like to get more of your thinking on these topics - myself, I'll have to grab time as I can get it!
PS You forgot Jill Stein!
value - "Generate stream of packets from socket"
value - "OUT"
description - "Read packets"
type - java.lang.String.class
value - "PORT"
description - "Port name"
type - java.lang.String.class
Regards,
Paul M.
Lets face it, Morrison, nobody trusts your software!
And of course it's much more fun to concoct an FBP-like implementation in your favorite language, and spend a good few months playing with it, testing performance, talking it up, and generally putting off the dread moment when you have to build a functioning system for real live customers.
Of course your own system is much more reliable and user-friendly than any of mine... because you wrote it! Of course that means you can't test it... for the same reason! See 3rd party testing.
So, a challenge to all you Laputans: build an Update application including a generalized Collate and an app-specific component to process the merged stream... in your favorite language and software.
And leave us a link so we can try it out! The JavaFBP version is at: https://github.com/jpaulm/javafbp/blob/master/src/main/java/com/jpaulmorrison/fbp/resourcekit/examples/networks/Update.java - in case you need to look!
Go to it! May the best sentient win! And NO brain-f**k!
Paul
--
Re sockets, my personal view is that you build socket writers and socket readers for each environment, and they can talk to each other using strings. This means that you will probably need serialization and deserialization components as well for various non-string formats.
You can see an example of this kind of thing in https://github.com/jpaulm/javafbp-websockets , where the two languages involved are Java and HTML5 (?) - JS and HTML anyway!
I seem to remember Bert advocating using XML compressed in some way - Bert, could you remind me? TIA
And yes, DrawFBP has the potential to be helpful in this area - it already can access multiple component jar files - might be a smidgeon toughe to incorporate C# conventions, but I'm willing to learn! :-)
--
You received this message because you are subscribed to a topic in the Google Groups "Flow Based Programming" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/flow-based-programming/hfYw1gP7FVI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to flow-based-programming+unsub...@googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "Flow Based Programming" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/flow-based-programming/hfYw1gP7FVI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to flow-based-programming+unsub...@googlegroups.com.
The idea is to give a new user a way to get a successful taste for FBP with minimal time investment
and then allow them to progress into more depth (such as coding their own components) by investing further as needed/desired.
So my thesis (based on some prior experience with early compression algorithms) is that generally,
the size of the compressed data stream is related to the complexity of its uncompressed data and not its unpacked size.
RLE (run length encoding) is generally a component of most compression formats,
and will by itself go a long way to achieve this effect even before applying further compression techniques.
Last update: I added bidirectional links between runtimes and generalized a little.The network in runtime land warrants its own study.Another penny dropped. In my normal use scenario, all the runtimes I will use are local, so are all the runnable components.Pass the component info back up the chain !With that mechanism, the onus would be on the C# runtime developer to interact under FBProtocol with any other runtime that already interact with any of the FBEngines. Bang, the GUI accesses a library of single component flows/graphs. The Circle of life.
I also have direct links between FBEngines and FBRuntimes, which would provide potential performance improvements.
Having a FBPremium package could provide a financial leg to FBP, whilst retaining full operability for everyone. For personal use, I do not need it to be fast, just to work. For business, I want micro trading potential.I bet Bert already said this, as I have not read it yet, I want to give it justice, and I had to get this out of my head.If I ever come up with an original idea, let me know, I'd like to claim it.
PS the more I think about this, the more I think we are creating The Matrix. You really should watch them, or The Rise of The Machines, I am not sure which.
The idea is to give a new user a way to get a successful taste for FBP with minimal time investment
and then allow them to progress into more depth (such as coding their own components) by investing further as needed/desired.That's me.
So my thesis (based on some prior experience with early compression algorithms) is that generally,
the size of the compressed data stream is related to the complexity of its uncompressed data and not its unpacked size.
RLE (run length encoding) is generally a component of most compression formats,
and will by itself go a long way to achieve this effect even before applying further compression techniques.Made me think of encryption. At some point an IP may have to travel distance and require encryption. I would think encryption would add a layer of complexity so which is better encrypt-compress or compress-encrypt? or is this not a thing?
Hi David,
I must admit I have been too busy lately to take a good look at NodeRed (I am assuming that is your main focus?)
Some personal background: I am working on my own flow engine platform (not out yet and not open source).
My current working code name for this platform is "Chicle"
Chicle does share some concepts with classic FBP but is dissimilar enough that I have trouble putting it into a specific category.
It is different both in the type of flow it supports and in other requirements not related to flow, but which impact how flow networks are specified and how they are run.
The flow engine runs on the server side, and let's just say for now that the client side (currently implemented in browser JavaScript) has an interesting way of interacting with the server.
I am also attempting to help Paul in furthering the cause of classic FBP (when I can afford the time - lately in very short supply - but working to change that)
I happen to have some exposure to product management and I believe that promoting the use of classic FBP
by improving its "out-of-box experience", can only help to improve the acceptance and popularity of the FBP community and FBP-like techniques in general.
As such, I am also interested in interoperability between flow frameworks (unfortunately, this is where things can get messy).
On Friday, 4 November 2016 15:10:29 UTC-4, David Ryman wrote:Last update: I added bidirectional links between runtimes and generalized a little.The network in runtime land warrants its own study.Another penny dropped. In my normal use scenario, all the runtimes I will use are local, so are all the runnable components.Pass the component info back up the chain !With that mechanism, the onus would be on the C# runtime developer to interact under FBProtocol with any other runtime that already interact with any of the FBEngines. Bang, the GUI accesses a library of single component flows/graphs. The Circle of life.
From a diagramming perspective, (based on your introductory post in a previous topic) your example of a NodeRed flow network appears to share an element of Chicle that classic FBP does not.
Specifically, the notion that one output port can service multiple listeners
Depending on the underlying cause, this type of thing can have an impact on whether two networks can be easily connected or not.
There are multiple ways to interoperate between (let's call them "flow engine regimes"), starting with data streams and working up to flow network definition and registration.
There are also issues of data definition and of security to be addressed.
Chicle comes with its own network graphical designer/editor and its own interoperation protocol but there are multiple design issues to overcome before it could be used to connect to FBP.
I also have direct links between FBEngines and FBRuntimes, which would provide potential performance improvements.
I am not sure what you mean by "direct links" and how that impacts performance. Can you elaborate?
Having a FBPremium package could provide a financial leg to FBP, whilst retaining full operability for everyone. For personal use, I do not need it to be fast, just to work. For business, I want micro trading potential.I bet Bert already said this, as I have not read it yet, I want to give it justice, and I had to get this out of my head.If I ever come up with an original idea, let me know, I'd like to claim it.
I believe that a healthy product needs a healthy community.
For now (and for the foreseeable future), dollars seem to be able to act as the lubricant for attention to accumulate and for progress to occur.
Hi David,
On Saturday, 5 November 2016 14:23:39 UTC-4, David Ryman wrote:The idea is to give a new user a way to get a successful taste for FBP with minimal time investment
and then allow them to progress into more depth (such as coding their own components) by investing further as needed/desired.That's me.
That is excellent - we definitely need this sort of thing to happen.
If you notice something that could be done better, please let us know.
So my thesis (based on some prior experience with early compression algorithms) is that generally,
the size of the compressed data stream is related to the complexity of its uncompressed data and not its unpacked size.
RLE (run length encoding) is generally a component of most compression formats,
and will by itself go a long way to achieve this effect even before applying further compression techniques.Made me think of encryption. At some point an IP may have to travel distance and require encryption. I would think encryption would add a layer of complexity so which is better encrypt-compress or compress-encrypt? or is this not a thing?
I tend to think of compression and encryption as platform issues. Unfortunately, FBP was not designed with platform in mind.
In FBP, you would need to make compression and encryption as separate components, and you would also need components for communicating with the web..
However, my own platform (Chicle) doesn't do it that way.
Instead, Chicle has GZip compression built-in to the platform's messaging sub-system and triggered according to configured policy.
As for encryption, I currently rely on a reverse proxy server to provide SSL for any messages sent or received.
In that case, compression comes first in the platform, followed by TLS encryption on the reverse proxy.
(and yes, my platform could also support SSL directly, but it is better for now to do the reverse proxy thing)
In any case, I would also have to admit that messaging via SSL does not fully address end-to-end (pass-through) encryption.
So yes, additional encryption is still a thing much to be considered.
In light of that, I would also like to note that there is some effort on the browser side already going in that direction,
so I would like to leverage those design efforts before settling on my own design.
In the meantime, SSL/TLS should be good enough for direct node-to-node links - unless you are feeling extra-paranoid =:-O
Best Regards,
--Bert
I would argue that a flow is a flow. A stream can be solid, liquid, gas, plasma, or digital, the same principals can apply.
If Chicle conformed to the FBProtocol then it would fit naturally, (ish)
From a diagramming perspective, (based on your introductory post in a previous topic) your example of a NodeRed flow network appears to share an element of Chicle that classic FBP does not.
Specifically, the notion that one output port can service multiple listenersInteresting. An FBP clone component could emulate the multiple outputs.
Depending on the underlying cause, this type of thing can have an impact on whether two networks can be easily connected or not.
There are multiple ways to interoperate between (let's call them "flow engine regimes"), starting with data streams and working up to flow network definition and registration.
There are also issues of data definition and of security to be addressed.I think all IPs should be encrypted as soon as possible, hence my query about compress/encrypt. Great feature to sell to the business world.
FBP is agnostic.
A FBEngine has to manage the IPs through multiple FBRuntimes, either, as already suggested by Paul et al, using sockets as FBRuntime to FBRuntime messaging. With Direct-Links, as far as I know unimplemented, we have the FBEngine call the appropriate FBRuntime thereby removing use of sockets.
Assuming this produces a performance gain, which would be the FBPremium package, again hooks into business needs.
For now (and for the foreseeable future), dollars seem to be able to act as the lubricant for attention to accumulate and for progress to occur.I can see FBP changing that.
Interesting conversation!Just wanted to say that people keep talking rather casually about "cloning" IPs, but FBP also has the concept of IP "trees" - see http://www.jpaulmorrison.com/fbp/tree.shtml - where a tree of connected IPs can travel through the network as a single IP. See attachment.
Theoretically it is possible to wire up the tree so it is self-describing, but my current FBP implementations don't do this. Given that IP trees can be quite large and complex, my feeling was that building a cloning function into the infrastructure wasn't worth the trouble - why would you need to make an exact copy of a (potentially quite large) IP tree?
A stronger argument could be made that serialization and deserialization would be easier if the tree were self-describing, so we might consider modifying the current "chain" API calls, or adding new ones to achieve this. Feedback would be appreciated.
What are Direct-Links? When you said "call the appropriate FBRuntime", you just have to get the run times started - surely a bat file would be enough! :-)
The problem that this solves is that of multiple concurrent VMs - I do understand that VMs help the compiler builder, but IMO they don't help developers much, and in fact actually get in the way.
If you don't use sockets, I guess you could use some kind of native code to jump back and forth between the Java VM and the C# CLR - sockets seem cleaner!
Just as FBP is agnostic, one language should not assume it controls the whole world. FBP makes that unnecessary.
In the old days of PL/I (remember that?)
I'd like to stress this: you don't have to do everything with one language! There are features in some languages which you young whipper-snappers have never heard of, and are probably mutually incompatible! :-) Besides it is not difficult to learn multiple programming languages - I'm sure most of you speak at least 3 or 4: FORTRAN, COBOL, Assembler, REXX, JCL... just joking!
This is why in the past I have talked about building on a lower infrastructure, and is partly why I developed the C++ implementation (CppFBP) using Boost for multithreading. You could then build components in any language which talks to C++. If you particularly like scripting languages (I prefer Java personally), you can look at my C++/Lua interface - see https://github.com/jpaulm/cppfbp - do a find on TryLua.
One other idea was to use Parrot - https://en.wikipedia.org/wiki/Parrot_virtual_machine - might be interesting to play with that.
What do you have in mind for FBPremium?
Hi David and Bert,Zeroing in on one paragraph:
"A FBEngine has to manage the IPs through multiple FBRuntimes, either, as already suggested by Paul et al, using sockets as FBRuntime to FBRuntime messaging. With Direct-Links, as far as I know unimplemented, we have the FBEngine call the appropriate FBRuntime thereby removing use of sockets. Assuming this produces a performance gain, which would be the FBPremium package, again hooks into business needs."
What are Direct-Links? When you said "call the appropriate FBRuntime", you just have to get the run times started - surely a bat file would be enough! :-)
I learn best by doing! Do you have a prototype you can show us? I have had a JavaFBP (partial) network talk to a C#FBP (partial) network using sockets - worked like a charm! The problem that this solves is that of multiple concurrent VMs - I do understand that VMs help the compiler builder, but IMO they don't help developers much, and in fact actually get in the way.
If you don't use sockets, I guess you could use some kind of native code to jump back and forth between the Java VM and the C# CLR - sockets seem cleaner!
Just as FBP is agnostic, one language should not assume it controls the whole world. FBP makes that unnecessary. In the old days of PL/I (remember that?) you could start up concurrent multiple PL/I environments, but then they converted to Language Environment 370 (LE/370) and it became impossible (programmer shortsightedness, not conceptual problems - they actually provided that for CICS, but not for batch).
I'd like to stress this: you don't have to do everything with one language! There are features in some languages which you young whipper-snappers have never heard of, and are probably mutually incompatible! :-) Besides it is not difficult to learn multiple programming languages - I'm sure most of you speak at least 3 or 4: FORTRAN, COBOL, Assembler, REXX, JCL... just joking!
What do you have in mind for FBPremium?One other idea was to use Parrot - https://en.wikipedia.org/wiki/Parrot_virtual_machine - might be interesting to play with that.This is why in the past I have talked about building on a lower infrastructure, and is partly why I developed the C++ implementation (CppFBP) using Boost for multithreading. You could then build components in any language which talks to C++. If you particularly like scripting languages (I prefer Java personally), you can look at my C++/Lua interface - see https://github.com/jpaulm/cppfbp - do a find on TryLua.
Hi David,
On Monday, 7 November 2016 15:20:01 UTC-5, David Ryman (ANeo) wrote:I would argue that a flow is a flow. A stream can be solid, liquid, gas, plasma, or digital, the same principals can apply.
I'm going to suggest that Chicle and FBP are very different beasts that came from very different backgrounds.
And while all streams are flows, not all flows are streams.
If Chicle conformed to the FBProtocol then it would fit naturally, (ish)
That isn't really possible. Neither the FBProtocol or the FBP Language (as they are currently specified) are expressive enough to be able to describe a Chicle flow network with all its features.
To be honest, at present I'm not even sure if the reverse (Chicle reading an FBP specification and emulating an FBP network) would ever become possible (although I do have some ideas under investigation).
From a diagramming perspective, (based on your introductory post in a previous topic) your example of a NodeRed flow network appears to share an element of Chicle that classic FBP does not.
Specifically, the notion that one output port can service multiple listenersInteresting. An FBP clone component could emulate the multiple outputs.
Or just provide an array output port with cloned data to each element of the array.
Or just have the first listener component have a pass-through port that you can use to chain an additional component.
(we've had discussions on this previously)
Personally however, I don't find any of these solutions very elegant.
Depending on the underlying cause, this type of thing can have an impact on whether two networks can be easily connected or not.
There are multiple ways to interoperate between (let's call them "flow engine regimes"), starting with data streams and working up to flow network definition and registration.
There are also issues of data definition and of security to be addressed.I think all IPs should be encrypted as soon as possible, hence my query about compress/encrypt. Great feature to sell to the business world.
If the IP is only traveling to another component in the same engine, there is no need to encrypt. (and performance reasons not to)
If you are using a web socket to deliver an IP, you just need to use SSL and you get encryption for free.
FBP is agnostic.
Um, what do you mean by that? Agnostic to what? Programming Languages?
If so, not really. There are some languages and some environments that are missing the required elements to properly implement FBP.
Then there is the issue of getting agreement on the data types transferred between them.A FBEngine has to manage the IPs through multiple FBRuntimes, either, as already suggested by Paul et al, using sockets as FBRuntime to FBRuntime messaging. With Direct-Links, as far as I know unimplemented, we have the FBEngine call the appropriate FBRuntime thereby removing use of sockets.
I am not sure what you mean by this. What do you mean by "call the appropriate FBRuntime"? How would such a call be made?
Assuming this produces a performance gain, which would be the FBPremium package, again hooks into business needs.
Performance isn't the only criteria for a premium package or for business needs.
Generally, you only tend to notice performance when it is not good enough.
And once performance is good enough, you tend not to notice any further improvements.
For now (and for the foreseeable future), dollars seem to be able to act as the lubricant for attention to accumulate and for progress to occur.I can see FBP changing that.
Ok. We will agree to disagree on that one. :-)
Best regards,
--Bert
If Chicle conformed to the FBProtocol then it would fit naturally, (ish)
That isn't really possible. Neither the FBProtocol or the FBP Language (as they are currently specified) are expressive enough to be able to describe a Chicle flow network with all its features.Can the FBProtocol be modified to include Chicle?
Interesting. An FBP clone component could emulate the multiple outputs.
Or just provide an array output port with cloned data to each element of the array.
Or just have the first listener component have a pass-through port that you can use to chain an additional component.
(we've had discussions on this previously)
Personally however, I don't find any of these solutions very elegant.There is always a way.
FBP is agnostic.
Um, what do you mean by that? Agnostic to what? Programming Languages?
If so, not really. There are some languages and some environments that are missing the required elements to properly implement FBP.Agnostic as far as language used to transform the IP, what I called FBRuntimes (probably what Paul calls VMs). The FBEngine that processes the FBNetwork would and should the written in the best language for the task. FBPhilosphy speaks to logic and black boxes
A FBEngine has to manage the IPs through multiple FBRuntimes, either, as already suggested by Paul et al, using sockets as FBRuntime to FBRuntime messaging. With Direct-Links, as far as I know unimplemented, we have the FBEngine call the appropriate FBRuntime thereby removing use of sockets.I am not sure what you mean by this. What do you mean by "call the appropriate FBRuntime"? How would such a call be made?FBEngine processes the FBNetwork, The component runs in a runtime, I think. I may have this mixed up.What actually runs the component? the FBEngine or FBRuntime or are they one and the same?Flowhub can call several runtimes all JS I guess.
Assuming this produces a performance gain, which would be the FBPremium package, again hooks into business needs.
Performance isn't the only criteria for a premium package or for business needs.Possibly. Not sure what else can be included without taking functionality away from the 'Personal' edition.
Generally, you only tend to notice performance when it is not good enough.
And once performance is good enough, you tend not to notice any further improvements.Not all decision makers know what the inside of a server room looks like, but mention speed and security and you have a foot in the door.