-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feedback needed #48
Comments
@abferm @sascha-andres @lrgar @manadart @mtojek @btittelbach @davidkbainbridge @kortschak @samuell @josi-asae @seanward @phiros @lovromazgon Your feedback as a contributor is especially appreciated! |
First of all, a big thank-you for contributing this to the community.
I have actually left the company where I worked on this, but it was with @tonygallagher and @lrgar. They might have more to add. I seem to recall an issue connecting multiple components to an exit port. We got around this by adding an aggregation component before the graph exit. |
Hi @trustmaster, I want to also thank you so much for contributing this! I've had a lot of fun by playing with GoFlow for bioinformatics use cases, and also learned a lot both about Go and some FBP, by studying it. To answer the questions one at a time:
I've did experimentation with bioinformatics components using it (like this). I eventually got worried about performance of reflection though, and has since explored a way to build FBP-like programs using only plain channels (this is ongoing work in my scipipe and flowbase libraries).
Academic.
Prefer to work mainly in text form. I feel graphs can be a very useful addition for sketching at design time, and for presentation though.
I've used JPM's fbpdraw a bit for presentation purposes. I like that it is simple and just works. Haven't had time / patience for setting up any more complicated tools.
I prefer a central
In our work, pipelines runs have had a clear start and finish time, so on-demand stop and start has not been something we saw a need for.
No.
I like that it is Go code, as that enables re-use of Go-tooling. I also found the API natural and easy to to understand and work with. I'm worried about the performance hit from reflection though for data intensive pipelines. If there is any way to avoid reflection on each data read, e.g. by just using reflection to do set up channels, which are then used for the data communication, that would be great. Keep up the great work! |
@manadart @samuell thank you for your feedback! After collecting some more responses, I'm going to sum them up and make a proposal for a new version of GoFlow. @samuell regarding your concern about the use of reflection, in the latest version it's mostly used to wire up the channels. The only thing that is used on each data read is passing the arbitrary data as |
Ah, interesting, I should have another deep look at the code! |
Fist of all: Great work! It's much fun to use the package! What kind of application did you use GoFlow for? (E.g. bioinformatics, ETL, web backend, IoT, etc.) Did you use it for personal, business, or academic purposes? Do you prefer working with graphs in visual or text form? Which visual tools have you used and which ones do you prefer? Do you prefer a Component to have main Loop(), or do you prefer setting up handler functions on each port (OnPortName())? Do you prefer processes to stay resident in memory or started and stopped on demand? Have you ever used State Locks, Synchronous Mode, Worker Pool, or other advanced features of GoFlow? Please tell me what you liked about GoFlow and what you would like to be added or changed. |
Hi guys, For my part, it would be much more for an advanced ETL/node-based pipeline. It would get lots of traction wiht DevOps as it could made easier and better to aggregate data (apis, logs) or to process data to import with dynamic/composable pipelines, chained by event triggers or conditions. It would also awesome for building smart/refined datasets for AI and Deep Learning. Features
Example by videoRefs:
Cheers, |
Hi Trustmaster,
At this point it would be for running a reactive systemd daemon that schedules and alters resource allocations for health-care applications sharing resources on a single host. But I have a similar product, not yet opened sourced called "coolflow" which is being used in-house for AI applications, it is in python, so not suitable for real-time applications
I prefer a main loop with AND semantics, that is component does not Process() until data exists on all input channels. I realize that OR semantics for components is more general, so I think creating AND components out of OR components should be easy |
One other thing I forgot. That is having a plug-in architecture where pre-compiled components can be read in along with graph definitions. |
Hello fellow Gophers!
I apologise as this project slipped out of my scope for several years.
I still have some ideas and plans of maintaining it, but I need some feedback on how it is going to be used by people who actually tried it. So, I would really appreciate your answers to the following questions in this thread or in any other form (e.g. via email, please find the address in my profile).
Questions:
Loop()
, or do you prefer setting up handler functions on each port (OnPortName()
)?Why this is important
As you might have noticed, this codebase is a bit dated. In fact, it was written in 2011 and didn't change much ever since. My own views on how an FBP library should work have changed over time. So, I think this library deserves a rewrite.
My views can be similar or different from yours, while I'm not building this library only for myself. That's why feedback is appreciated so much.
Thank you for participating!
The text was updated successfully, but these errors were encountered: