Coder Social home page Coder Social logo

gabyx / executiongraph Goto Github PK

View Code? Open in Web Editor NEW
42.0 4.0 7.0 25.43 MB

Fast Generic Execution Graph/Network

License: Mozilla Public License 2.0

CMake 17.17% Shell 1.70% C++ 44.09% Objective-C++ 0.63% TypeScript 33.59% HTML 1.10% CSS 0.01% JavaScript 0.34% Java 0.21% Python 0.18% C 0.03% SCSS 0.95%
graph execution-pipeline execution-graph simulink data-analysis data-processing

executiongraph's Issues

Implement the Coffman-Graham Algorithm for Scheduling

Coffman-Graham Algorithm

  • Assume all tasks execute the same amount of time.
    • mu(Ti) = 1.
  • Definitions:
    • If Ti < Tj, then Tj is an immediate successor of Ti.
    • Let S(Ti) be all immediate successors of Ti.
    • Let alpha(T) be an integer label assigned to T.
    • Let N(Ti) be the ordered sequence of integers formed from the set { alpha(T') | T' in S(Ti) }.
  • Find: task list for Graham's algorithm.
  • Algorithm:
    1. Choose Tk with S(Tk)=0 and let alpha(Tk) be 1.
    2. For i <-2 to n do
      1. Let R be the set of unlabeled tasks with no unlabeled successors.
      2. Let T* be the task in R such that N(T*) is lexicographically smaller than N(T) for all T in R.
      3. Let alpha(T*) <-i.
    3. Construct L = (Un, Un-1, ..., U2, U1) such that alpha(Ui) = i.
  • Theorem: w/w0 <=2 - 2/p
    • w length of constructed schedule, w0 length of optimal schedule, p > 1 processor number.
  • Collary: schedule optimal for p=2.

Links : https://medium.com/@bolerio/scheduling-tasks-and-drawing-graphs-the-coffman-graham-algorithm-3c85eb975ab

Setup CI-Buildsystem.

What is needed:

Dev Branch:
Building and testing the whole C++ project. (OS: Linux only)

Master Branch:
Buidling C++ ExecutionGraphServer, and GUI-Client for

  • Linux
  • OsX
  • Windows

Stiching together the ExecutionGraphServer into the Electron App (urgh...)

Approaches:

  • Make docker containers with all dependecies installed (linux: ubuntu, macOs?, windows??) and use them to build the whole setups. Where can we setup this stuff? Travis? GitLab?

  • Write Travis bash scripts -> to build at least for ubuntu and macOs... and AppVeyor for Windows.

Second approach sucks but is the way people to it ...? However with the docker approach we can run the build locally and its not that frustrating. We can also just Setup Travis Bash scripts to run docker and publish the docker containers and use them from Travis...

Everything could be steered with cmake -> Building C++ /Building GUI-Client with npm,
Fixing stuff for the Electron-App, placing the DLL at the right place (OS dependent shit...)

@simonspoerri what do you think?

Implement GUI for Visualization

Tasks towards a GUI using the chromium embedded framework (CEF):

  • Try jsPlumb and other Visualization Tool kits to look if it is possible to design draggable nodes and make connectecion to them
  • CEF Framework in cmake build integrated which downloads CEF and uses it in the cefsimple test.
  • Setup a simple html application which routes commands from java script to C++ and vice versa.
  • Logger added (spdlog)
  • Superbuild added
  • Make some design specifications on how to interface between GUI and the Execution Graph
  • Write a fricking awesome CEF application where the GUI Elements and the ExecutionGraph Logic are separated and well structured. Interfacing via
    HTML JavaScript GUI <-> Json <-> C++ Cef GUI <-> Execution Graph
  • Flatbuffer Serialization for Communication/Graph Serialization implemented
  • Backend Communication Pipeline setup ( Http Request Handlers)
  • Testing the angular page with the backend (add/remove nodes/graphs...)

GUI Implementation [Progress]

Tasks towards a GUI using the chromium embedded framework (CEF):

  • Try jsPlumb and other Visualization Tool kits to look if it is possible to design draggable nodes and make connectecion to them
  • CEF Framework in cmake build integrated which downloads CEF and uses it in the cefsimple test.
  • Setup a simple html application which routes commands from java script to C++ and vice versa.
  • Logger added (spdlog)
  • Superbuild added
  • Make some design specifications on how to interface between GUI and the Execution Graph
  • Write a fricking awesome CEF application where the GUI Elements and the ExecutionGraph Logic are separated and well structured. Interfacing via
    HTML JavaScript GUI <-> Json <-> C++ Cef GUI <-> Execution Graph
  • Flatbuffer Serialization for Communication/Graph Serialization implemented
  • Backend Communication Pipeline setup ( Http Request Handlers)
  • Os X Application startsup/quits perfectly, no memory leaks...
  • Designing the first shot of the Angular application
  • Testing the angular page with the backend (add/remove nodes/graphs...)
  • Finalizing the angular application ...

File Load and Save.

  • Backend (master) saves and loads the graph to the m_rootPath of the filesystem (given at startup)
  • open,save-Component calls the service to save/load the graph and delivers in the case of save the serialized visualization flatbuffer (backend has no knowledge about this buffer). Backend serializes the graph and the visualization buffer into file schema ExecutionGraph.fbs
  • [ ] Client: Save Implement the Visualization serialization
    • What should we serialize (Pos. of nodes. etc...)
  • [ ] Client: Load Implement how and where we setup all visualization properties (model.Node.uiProps, model.Connection.uiProps model.Graph.uiProps?. Maybe an effect: UpdateVisProps... for the corresponding models data structures...? So after LoadGraph we dispatch the UpdateVisProps ??

Graph Layouting Algos

Implement some easy first-use of graph -ayouting algos.
Maybe implement the execution order (easy) in the client as well to use the priorization as a layer-layout mode.

  • Moreau-Timestepper and Mass-Spring implemented in TS (works, but not optimal -> improve spring, and other settings...)
  • Improve...

Node Add: Init types of sockets.

Currently after GraphManipulationServiceBinaryHttp::addNode we have not setup the socket type strings.
They reside in the GraphTypeDescription. It is currently only needed for the type-tooltip-tool to show the types.
Maybe we directly lookup the correct type inside the tool (making the tool accessible to the current GraphTypeDescription). So we dont need to save the type string in the model.Socket..?

Or if we want to store the types inside the Socket -> where should we setup these, after AddNode where we init all uiProps as well?...

Allocator for sockets.

This is a relatively easy task.
The Sockets should definitely use a RawAllocator (foonathan) such that the memory is continuous for each type.
This is easily implemented and added.

  • Node::CTOR : takes the SocketFactory templated over the TConfig
  • The SocketFactory uses a internally a RawAllocator (templated) which is used for the allocation of the Socket.

Adjust Width of Nodes

Make an option (in the connection style tab of drawer) such that nodes are adjusted
to the width the inside text spans. (css?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.