top | item 4239274

Flow-Based Programming for Node.js

42 points| bevenky | 13 years ago |noflojs.org | reply

20 comments

order
[+] bergie|13 years ago|reply
Hi! Author of NoFlo here. This has been sort of a longtime hobby project for me, since I read J. Paul Morrison's FBP book: http://www.jpaulmorrison.com/fbp/#book

The UI side of things is still in very early stages, but the engine itself is quite solid. We've been using it for various Extract-Transform-Load tasks, like report generation, as explained in http://bergie.iki.fi/blog/business_analytics_with_couchdb_an...

At Nemein we also have been using it for routing messages between different message queues. This is useful when you want to apply some business rules on them.

For example, in one of the web apps I've been writing, the ORM sends a message on each I/O operation to a queue. NoFlo listens to the queue and routes the messages to correct "business logic queue". This way the ORM can focus on being an ORM, and our workflows can be kept elsewhere.

[+] drudru11|13 years ago|reply
Great stuff. Too often people don't give attribution to past projects. More often than not, they ignore them and reinvent them poorly. You are doing a great thing by bringing a time tested idea back.

I'm a big fan of true message passing and will check this out.

thanks!

[+] rybesh|13 years ago|reply
I'm an occasional contributor to NoFlo. I find it very useful for creating NLP pipelines; i.e. doing all the tedious data munging that is necessary to turn, say, a directory full of OCRd PDFs into sentence-tokenized plain text.
[+] bergie|13 years ago|reply
Thanks! Your contributions have been very helpful. And it is interesting to hear what you're actually using it for :-)
[+] SudarshanP|13 years ago|reply
Are yahoo pipes flow based programs? Are there fundamental differences in the way the piping happens in noflo and other flow based languages?

Then we have ROS... XSLT pipelines and so on. There is something really beautiful about looking at your code as plumbing :)

[+] rexreed|13 years ago|reply
Would love to see examples of this working, especially in higher scale production systems. Are their pointers to good examples?
[+] carsongross|13 years ago|reply
Good to see the node.js community following the traditional pattern of technologies:

1) Discover some previously known idea

2) Create new implementation with glaring deficiencies when compared to the original implementations (which are totally ignored for the most part)

3) Hype

4) Create "Visual Programming" environments so "Anyone can write code in X!" <-- you are here

One step closer to:

5) There is nothing new under the sun.

[+] bergie|13 years ago|reply
Well, when you bring back a programming concept invented in the 70s, there can hardly be much new about it. But at least I'm being quite honest about this on the NoFlo website:

FBP itself is not a new idea: it comes from a term IBM used in the 70s to define the concepts of more manageable business workflows. NoFlo, however, refreshes these concepts and brings them to Node.js applications.

When I started with NoFlo there were open source implementations of FBP for Java and C#, but I wanted something a bit more dynamic.

[+] JPKab|13 years ago|reply
Node isn't anything new. We all know that. The best things about it are: 1) a vibrant community which makes tons of modules 2) an architecture which forces these modules to be gasp truly modular and performant

The best language/framework in the world is no good (for many people's purposes) if it lacks a large community to support it.

[+] drudru11|13 years ago|reply
i disagree, most people that I read here are painfully ignorant of the past.
[+] aklofas|13 years ago|reply
FBP is an awesome idea, the problem is that it's been largely ignored for a long time. One of these days the right time and space for this technology will come and it'll grow like a weed. That usually happens with technology that ahead of it's time.

So, good sir. Whilst I do not agree with what you flame, I'll fight to the death for your right to flame it.