Quite informative, though would have been good to see the entire network of components properly hooked up and displaying the actual word count.
I recall struggling with DrawFBP a long time ago, this video would have been quite helpful.
IMHO, I encourage you to make the video again, but polish it off by
* removing the fbp motivation - most folks at the stage of DrawFBP research already understand the benefits of fbp.
* make an example that's complex enough to make a non-fbp programmer umm and ahh a bit yet simple enough to get the point of fbp across in a fast manner. Show how the graph abstracts away all the code by (maybe) doing a line count on all the src files of all the components. Ie show how fbp makes flow a first class citizen.
* complete the app; how does one execute the final product? How does one deploy/distribute the code? How does one execute the distributed code, is DrawFBP a required dependency for deployed code? How can one do rapid prototyping (I did get a feel for it by you deleting the ReCompose component)?
* How do I navigate a complex graph?
* How do I create and navigate subnets?
* What do each of the radio buttons on the bottom do?
My 2c worth!
/sjm
--
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.
I wouldn't worry about diving in too quickly, FBP is now on the tongues of many programmers, the concept is generally understood. The main issue is how to do fbp.
Strike a balance by writing up a page on your website going into as much detail as you want and linking in each perinent video as needed. You could break up the videos in 5~10 min special focus chunks. Optimum length? Make 10~20 small videos if you want, each with its own title and strictly keeping to topic. Order them too. I personally prefer a good 25 mins with few repeats of basic yet important concepts and capping it off with a hardcore demonstration.
I'll watch the video again and again if it's a serious knowledge drop.
If Eclipse is the normal tool to use then go for it, but i'd also encourage you to demonstrate on linux using the shell. Personally I feel more comfortable there.
Lastly, it might help to do the video a number of takes, each without cuts and only allow satisfaction once you complete the video in one smooth run. Delete it and start from scratch if you find you're ahhing and creating then deleting components unecessarily.
For example, I really like this video: https://m.youtube.com/watch?v=dP1xVpMPn8M
I feel like I can use this ACME application, it starts out simple enough, then towards the end he gets hardcore and blows me away in awe. Now I know what I could achieve given enough determination. If you're able to communicate the same feeling then IMHO you have succeeded.
/sjm
Important concepts like schedulers, IIPs, components etc is crucial knowledge for using FBP.
Might want to make a separate video describing the difference between classical and non-classical fbp.
But there is more to DrawFBP than FBP concepts, I'm highlighting the need for experienced developers to understand how to 1) build 2) execute 3) debug 4) package and distribute FBP graphs.
Option 1 : multiple short videos describing each concept in detail
Option 2 : one full length video describing everything together, if you're worried about charges then go for option 1.
kr
/sjm
P.S. we've gone to great lengths to implement classical fbp in Fractalide, if you see something dodgy in the scheduler or other places do let us know!
1) lack of linux packages
2) sparse documentation on the tool
3) ship example functional component src with the tool, which is needed to demonstrate the component src structure. (I cannot recall if this is the case, but I do recall having a graph that 'did nothing' before me, my incompetence reigns supreme yet again.)
A webpage detailing a hands on approach to developing classical FBP in DrawFBP, which highlights each concept and how to use it with short video examples interwoven would solve problem 2. That would have smoothed my path to using DrawFBP.
Regarding me making the videos, my time is tied up between beekeeping and Fractalide, so I shan't take on this responsibility! What you could do is highlight in the video that it's crossplatform.
Besides one of the FBP godfathers should do that!
PS I miswrote - DrawFBP currently generates NoFlo-style JSON, not JSFBP networks (in addition to JavaFBP and C#FBP). I hope to add generation of JSFBP networks in a later release.
Hello Paul,
Yes, we've just moved to something called D3js for our front end, it's coming in slowly. We've developed a technique that will allow us to use fbp to construct a user interface. How to tie this with what Paul T refers to as a factbase, probably this .drw file is a similar concept. We're still a few steps away from that.
DrawFBP is starting to look a lot better, would love to see it published into maven though. With fractalide it was one of the first things we did, published it into the community package repo https://crates.io/crates/rustfbp
Now what in particular do you want me to comment on? This is the solution, what was the original problem?
Kind regards
Stewart
/Henri--
Hi Paul,
Ah yes, so I noticed! Really happy about that!
Next major thing for DrawFBP: when deploying/sharing a subnet it needs to be as simple as possible to get running for the end user. Can I receive a subnet from someone and run it immediately without having to click on each component and load up all the component binaries or jar files?
Are each of the component binaries/jars stored on maven? Is the DrawFBP vm smart enough to pull down component jars and link them into a graph-to-be-run?
Is this possible to do?
IMHO this is critical for operations. FBP might be good at reducing cost of the maintenance phase but it must also be good at operations.
So far in Fractalide we're able to achieve this:
a => a nand(${maths_boolean_nand}) output => output
b => b nand()
The above subnet undergoes a compilation step and ${maths_boolean_nand} resolves into a path `... a nand(/nix/store/<hash>-maths_boolean_nand) output ...`
containing a subnet or shared object, the fractalide vm is smart enough to determine if /nix/store/<hash>-maths_boolean_nand is a subnet or shared object.
When using the ${...} method, evaluation is lazy, therefore, one could have many 100,000s of components in your git repo and only a smaller subset of dependent components + subnets will be compiled when requested.... indeed our entire vm is built in these classical fbp components, so we're very meta! Thankfully nix immediately catches infinite recursions and component naming clashes!
We use this ${...} method for components that are to be committed into the fractalide repository, typically these components are generic. If users just want to slap and tickle (experiment) components i.e. pass in different IIPs, then just use `a nand(maths_boolean_nand) output` this file can be passed into the fractalide vm/shell called `lain`.
I.e. `lain /path/to/fbp.subnet`
(Still vapourware as I'm battling with parser combinators, but much of it already works)
Lain then will compile this script and run it accordingly. Obviously if you don't have that component it won't work.
BUT! Passing in dynamic IIPs via fbp flow script is still too verbose for most users, particularly operations! I'm currently working on a shell which compiles standard unix/gnu tool naming conventions i.e. `cd /directory` etc to fbp flowscript, quickly updating IIPs and creating new subnet hierarchies, again at the speed of short bash like commands... well a tad slower.
In other words a shell is a typical way to quickly run and execute program, it should be emulated! Besides the shell is the king of fbp, it kinda makes sense to implement a shell in classical fbp.
It should be possible to deploy and run subnets of 1000s of components with a single simple bash like command. So this will be a shell on steroids.
Probably a bit early to announce but I'm nearly done with this, I hope someone can test it out.
kr/sjm
Hi Paul,
Ah yes, so I noticed! Really happy about that!
Next major thing for DrawFBP: when deploying/sharing a subnet it needs to be as simple as possible to get running for the end user. Can I receive a subnet from someone and run it immediately without having to click on each component and load up all the component binaries or jar files?
Are each of the component binaries/jars stored on maven? Is the DrawFBP vm smart enough to pull down component jars and link them into a graph-to-be-run?
Is this possible to do?
Okay, I see.
I'm very curious, in the 70ies,
* A typical installation consisted of how many components?
* How did you setup and install each component?
In distributed Erlang it's normal to have a shell you can connect to and debug a running erlang runtime system. Indeed it has a graphical frontend giving the programmer statistics of the system. It's even possible to hotswap a component.
My main point is not so much about the graph editor but more so how to easily pull dependencies into a graph, link them up and execute the graph. I'm very curious to know if you automated this process in the 70ies, if so how did you do it? Keeping in mind, if fbp wants to go global, it needs to globally share components which require a proper naming convention. See Zooko's triangle.
Interesting, thank you!
Regarding the naming, it's important to also factor in the compenent version. I dislike semantic versioning but many appreciate it. I think there are better ways of respecting ABI contracts when linking libraries. iirc java's naming scheme is just the reverse of your domain name n levels deep
I'm aware that Erlang and FBP occupy different spaces, I'm refering to drawing inspiration from the management and administration layers. Secondly FBP is actually very good for long lived server type environments (so is Erlang!), and servers are spun up automatically by the 100s in some cases. (This is because we have data dissemination built in at the application level, when it should me built in at the networking level. )
Paul M.Regards,I would guess from 50 to 200 processes. On the IBM mainframe systems we used, an FBP application network was specified using macros, compiled, and linked, which would then automatically combine the network with the components ( https://en.wikipedia.org/wiki/Linker_(computing) ), resulting in what was called a load module. As we controlled all the code, we merely needed a company-internal naming convention. Program names were restricted to 8 characters max, so we had to be creative!No hot-swapping - these were batch jobs, so you simply modified the network if necessary, relinked, retested, promoted and restarted! Job submission was typically under the control of job scheduling software.Also, remember Erlang is a different application space: as I understand it, it supports multitudes of short-running processes, whereas classical FBP tends to lean to a smaller number of long-running processes.As you suggested earlier, since you can have multiple component jar files, then that gives us basically a 2-level naming convention: jar file name/component name. DrawFBP supports this currently, but I'm wondering if we should try to extend it (and the other classical FBP run-time implementations) to Maven 3-level artifact names. That sounds like something worth doing...?