GithubHelp home page GithubHelp logo

stream's Introduction

Founder of Erlang Punch project.

Work on small Erlang code on my spare time.

stream's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

stream's Issues

Add QoS feature

Add QoS feature (like rate limiting, queueing limitation, statistics...)

add debug function

We can use default OTP debug feature, but, we can also extend this feature.

Add bookmarks feature

Add bookmarks feature, multiple process could have its own bookmarks and navigate with it

Convert to application

We should offer a way to switch easily to an Erlang application/release with a stream manager.

add pre/post callback

add pre/post callback or action with alerting. When we receive a stream, we should act before add it to our buffer, and we send it, we should also act to the rest of our buffer. This feature should be disabled by default and activated on demand or during startup.

Add different backend for buffer

Add different backend for buffer (will be a bit hard to use it, but could be cool). We could use something like redis buffer or external database.

Add reference management

Add reference management, when a cut is made, we keep copy reference up to date with removed data, based on client state.

add active mode

add active mode (this behaviour connecting to something). Currently, our state machine is passive and waits for some input. In active mode, our state machine request stream.

benchmark testing

benchmark testing from random bytes generator, local files and more. We should be able to optimize our code based on metric.

parsing feature

Add automatic parsing feature based on FSM lambda function or module. When executed, raw value is passed to another process or returned to caller.

Use reference instead of pid

Don't know if its a good idea to use references instead of pid when we want to communicate to our stream. A references could be a tuple containing more information about stream and should be more flexible (or not). Need to test it.

Copied mode

Copied mode updated dynamically from parent process

Create standard/custom size

Create standard/custom size. Currently, I am using something based on state function name, its currently not the right way to do.

Size, Shifting and other altering data in API

All altering data should be pre-calculed on API side, when a caller want its information. We can kept that in gen_statem state or with another method. Why using that? Because calculation is costly.

Shared stream

Shared stream (act as bucket without ordering, got data and just push it on buffer).

Add subscription feature

Add subscription feature, relaying data from buffer to another process or react to some events

Add search function

Add search function, to find a specific patterns and react on it. A particular process (or caller) will be alerted on this pattern.

Create common test

Currently, only unit testing is used. We need real world testing based on different type of data.

Create a transactional datastructure

Create a transactional datastructure when something is written on buffer. Currently, we don't have write log feature and we can't guaranty our data are written in order (or not).

Add buffer limits

Add buffer limits, when specific size is reached, we do some action. This could be like rate limiting.

Add action function

Add action function, will react when some kind of pattern arrive, its a bit like search, but with custom action.

dynamic size request

dynamic size (change based on data received). Currently, when caller do some request on our state machine, the pattern size is fixed. We should add a feature to dynamically change it based on caller or on stream.

handle error based on bitstring size

find a way to handle error correctly based on bitstring size. I have worked on it, and, currently, no error are generated, instead, our state is modified with insufficient resource

split files

stream should be splitted in multiple little files containing all logical behavior. In our case, something like:

  • stream.erl: main state machine, with full API
  • gen_stream.erl: Erlang stream behavior
  • stream_passive.erl: passive stream, receive only data
  • stream_active.erl: active stream, responsible of its own stream (manage its own fd/ports)

dedicated stream

dedicated stream (process sharing common reference and access input only from each one)

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.