All Projects → thealamu → papilo

thealamu / papilo

Licence: other
DEPRECATED: Stream data processing micro-framework

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to papilo

api-blueprint-ast
API Blueprint AST Serialization Media Types [adhd, apib]
Stars: ✭ 30 (+25%)
Mutual labels:  deprecated
big-data-engineering-indonesia
A curated list of big data engineering tools, resources and communities.
Stars: ✭ 26 (+8.33%)
Mutual labels:  data-engineering
TweakIt-Desktop
An Android Debugging Application
Stars: ✭ 33 (+37.5%)
Mutual labels:  stream
dcos-windows
Microsoft Windows support to DCOS
Stars: ✭ 12 (-50%)
Mutual labels:  deprecated
TiTsEd
A save editor for Trials in Tainted Space.
Stars: ✭ 86 (+258.33%)
Mutual labels:  deprecated
python-bandwidth
Public API for interfacing with Bandwidth from Python
Stars: ✭ 16 (-33.33%)
Mutual labels:  deprecated
Commander
Arduino Command Line Utility
Stars: ✭ 20 (-16.67%)
Mutual labels:  stream
AnimeDLR
AnimeDLR
Stars: ✭ 47 (+95.83%)
Mutual labels:  stream
eeglab plugin aar
AAR plug-in for EEGLAB
Stars: ✭ 18 (-25%)
Mutual labels:  deprecated
soph
AI in action
Stars: ✭ 39 (+62.5%)
Mutual labels:  deprecated
Sphero-Win-SDK
🚫 DEPRECATED: Sphero SDK for Win 8.1+ using RFCOMM
Stars: ✭ 36 (+50%)
Mutual labels:  deprecated
otc-tools
(Deprecated) Simple bash/curl/jq based command line tool using the OpenStack and OTC specific REST APIs.
Stars: ✭ 27 (+12.5%)
Mutual labels:  deprecated
foundation-server
(v1) A scalable cryptocurrency mining pool server written in Node.js
Stars: ✭ 45 (+87.5%)
Mutual labels:  deprecated
missive
Fast, lightweight library for encoding and decoding JSON messages over streams.
Stars: ✭ 16 (-33.33%)
Mutual labels:  stream
cartesian ros control
DEPRECATED: A set of packages to bring Cartesian control functionality to the ROS-control framework.
Stars: ✭ 33 (+37.5%)
Mutual labels:  deprecated
nest-desktop-legacy
A web-based GUI application for NEST simulator (legacy, moved to nest-desktop/nest-desktop)
Stars: ✭ 18 (-25%)
Mutual labels:  deprecated
marquez-web
Marquez Web UI
Stars: ✭ 23 (-4.17%)
Mutual labels:  deprecated
xbvr
Tool to organize and stream your VR porn library
Stars: ✭ 186 (+675%)
Mutual labels:  stream
dot
distributed data sync with operational transformation/transforms
Stars: ✭ 73 (+204.17%)
Mutual labels:  stream
log
A thin (and fast) PSR-3 logger.
Stars: ✭ 45 (+87.5%)
Mutual labels:  stream

Papilo

Go

Stream data processing micro-framework; Read, clean, process and store data using pre-defined and custom pipelines.

Papilo packages common and simple data processing functions for reuse, allows definition of custom components/functions and allows permutations of them in powerful ways using the Pipes and Filters Architecture.

Features (WIP)

  • Pipeline stages: Read - Process - Store
  • Pre-defined pipelines: Papilo offers pre-defined pipelines and components
  • Custom pipelines: Organize components to create a custom pipeline flow
  • Concurrency: Run multiple pipelines concurrently
  • Extensibility: Extend by adding custom components
  • Network source: REST and WebSocket APIs for data ingress
  • Custom source: Define a custom source for data ingress
  • Multiple formats: Transform input and output data using transformation functions

Architecture

Architecture

The Pipes and Filters architectural pattern provides a structure for systems that process a stream of data. In this architecture, data is born from a data source, passes through pipes to intermediate stages called filter components and ends up in a data sink. Filter Components are the processing units of the pipeline, a filter can enrich (add information to) data, refine (remove information from) data and transform data by delivering data in some other representation. Any two components are connected by pipes; Pipes are the carriers of data into adjacent components. Although this can be implemented in any language, Go lends itself well to this architecture through the use of channels as pipes.

Defaults

Papilo offers default sources, sinks and components:

  • Sources:

    • File: Read lines from a file
    • Stdin: Read lines from standard input (default)
    • (WIP): Network: A REST endpoint is exposed on a port
    • (WIP): WebSocket: Full duplex communication, exposed on a port
  • Sinks:

    • File: Write sink data to file
    • Stdout: Write sink data to standard output (default)
  • Components:

    • Sum: Continuously push the sum of all previous numbers to the sink

Examples

Read from stdin, write to stdout:

package main

import "github.com/thealamu/papilo/pkg/papilo"

func main() {
	p := papilo.New()
	m := &papilo.Pipeline{} // Default data source is stdin, default data sink is stdout 
	p.Run(m)	
}

Add a stream of numbers:

func main() {
	p := papilo.New()
	m := &papilo.Pipeline{
		Components: []papilo.Component{papilo.SumComponent},
	}
	p.Run(m)
}

Make every character in stream lowercase using a custom component:

func lowerCmpt(p *papilo.Pipe) {
	for !p.IsClosed { // read for as long as the pipe is open
		// p.Next returns the next data in the pipe
		d, _ := p.Next()
		byteData, ok := d.([]byte)
		if !ok {
			// we did not receive a []byte, we can be resilient and move on
			continue
		}
		// Write to next pipe
		p.Write(bytes.ToLower(byteData))
	}
}

func main() {
	p := papilo.New()
	m := &papilo.Pipeline{
		Components: []papilo.Component{lowerCmpt},
	}
	p.Run(m)
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].