Fnk (pronounced fink) is an online visual programming environment that uses a dataflow approach for the analysis, processing and synthesis of image, sound and other data in real-time. It aims to be an easy and fun way to create multimedia and music presentation prototypes that interact with a number of input and output devices. It was born as an academic project, but has since then moved into a standalone one.
Given its dataflow approach, Fnk works as a node-based visual representation of a functional language. This means that, within the Fnk environment, instead of writing code, you create nodes (and links between those nodes) to perform data transformations. That way, you are not defining the flow of program execution – like you would in an imperative language – but, rather, the flow of data inside a diagram.
For example, to perform an addition using common programming languages, one can do something like this (using pseudo-code):
a = 1 b = 1 c = a + b print(c)
However, using Fnk, that can be done in this way:
Data travels the nodes as it is transformed. This means that there’s no single line of execution, and diagram processing works as if every node was executed at the same time. It’s not a regular algorithm flowchart! There are no flow conditionals or loops on Fnk diagrams (and this is actually the way it’s supposed to be).
Each node is of a different type and purpose; for example, data holding nodes simply display the data that is passing through them, while other node types can take one or more inputs and transform them. The above addition, for example, is handled by an addition node, that simply outputs the sum of its parameters. Other nodes might output two or more data fields instead.
Also notice that there is no difference between run-time and design-time within Fnk. The data flow execution is constantly on, even while the nodes are being assembled together; you don’t have to compile or run the diagram, as it’s always running. Similarly, there’s no special execution-specific output of the data, like printing text on a console; instead, the result of the data transformation is seen on the node itself, as soon as its input data changes. Again on the above example module, changing the values of the input parameters (replacing “1” with “2” in any of the input nodes) would immediately reflect on the last node that represents the result of the addition (turning it into “3”). Of course, number nodes are just one type of the nodes available – others include strings, color, graphics, and sound, each with its own method of representation (including fullscreen support for graphics).
The paradigms used by Fnk are inspired in other environments such as Max/Jitter, Pure Data and vvvv. Fnk is not – and can not be – as powerful as those platforms, however, and comparatively, it also lacks a good number of interesting advanced features. Still, Fnk’s goal is to provide an easier environment for prototyping and learning through online, cross-platform developing and execution, and aims to achieve this by adopting a platform that is widely available on browsers everywhere (Adobe Flash).
Fnk runs either as a browser-based application and a standalone, installable application. Find more information about it on the different versions page.
Fnk was created and is maintained by Zeh Fernando. For more information, please visit my website.