• This repository has been archived on 09/Nov/2017
  • Stars
    star
    709
  • Rank 63,849 (Top 2 %)
  • Language
    Clojure
  • Created about 14 years ago
  • Updated about 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

not under active development - event-driven workflows for clojure

Lamina is deprecated

Lamina has an enormous amount of functionality, but like many other concurrency libraries (Rx, core.async, etc.), it's a walled garden that doesn't play nicely with others. In recognition of this, pieces of Lamina have been reimplemented as standalone libraries that can be used with a variety of concurrency primitives and execution models.

  • lamina.core, lamina.cache, lamina.time -> Manifold
  • lamina.query, lamina.stats -> Narrator
  • lamina.executor -> Dirigiste
  • lamina.viz -> nothing, yet
  • lamina.trace -> nothing, yet

The latest version of Aleph is built on this new stack. Questions about adopting the new libraries can be answered on the Aleph mailing list.

Lamina

Lamina is for describing and analyzing streams of data. It provides a rich set of operators for dealing with these unrealized values, both individually and collectively. If you're new to Lamina, you should start by reading about how it deals with individual events.

Installation

Add the following to the :dependencies section of your project.clj file:

[lamina "0.5.6"]

Rationale

Streams of events are represented by channels, which are used in Aleph to model network communication over a variety of protocols. Much like Clojure's sequences, we can apply transforms to all events that pass through the channel:

> (use 'lamina.core)
nil
> (def ch (channel 1 2 3))
#'ch
> ch
<== [1 2 3 ...]
> (map* inc ch)
<== [2 3 4 ...]

Underneath the covers, channels are implemented as a directed graph representing the propagation and transformation of events. Each new transform we apply adds a node to the graph, and the resulting topology can be rendered with GraphViz.

> (use 'lamina.core 'lamina.viz)
nil
> (def ch (channel))
#'ch
> (map* inc ch)
<== [...]
> (map* dec ch)
<== [...]
> (enqueue ch 1 2 3)
<< ... >>
> (view-graph ch)

Since we can have multiple consumers for any stream of data, we can easily analyze a stream without affecting other code. Lamina provides a variety of operators for analyzing the data flowing through channels.

Lamina also provides mechanisms to instrument code, allowing the execution of data to throw off a stream of events that can be aggregated, analyzed, and used to better understand your software.

To learn more, read the wiki or the complete documentation. If you have questions, visit the Aleph mailing list.

License

Distributed under the Eclipse Public License, which is also used by Clojure.

More Repositories

1

automat

better automata through combinators
Clojure
587
star
2

rhizome

simple graph and tree visualization
Clojure
446
star
3

penumbra

not under active development - idiomatic opengl bindings for clojure
Clojure
354
star
4

vertigo

heterogeneous structs for clojure
Clojure
207
star
5

riddley

code-walking without caveats
Clojure
197
star
6

clj-tuple

efficient small collections for clojure
Java
179
star
7

narrator

expressive, composable stream analysis
Clojure
152
star
8

proteus

local. mutable. variables.
Clojure
113
star
9

sleight

whole-program transformations in clojure
Clojure
98
star
10

calx

not under active development - idiomatic opencl bindings for clojure
Clojure
84
star
11

collection-check

fuzz testing for alternate clojure data structures
Clojure
64
star
12

pushkin

shall we play a game?
Clojure
59
star
13

immutable-bitset

space-efficient immutable integer sets
Clojure
51
star
14

immutable-int-map

a map optimized for integer keys
Clojure
40
star
15

aloha

a simple, friendly webserver
Clojure
36
star
16

cambrian-collections

a veritable explosion of data structures
Clojure
29
star
17

cantor

not under active development - primitive math for clojure
Clojure
26
star
18

clj-radix

a persistent radix tree, for efficient nested maps
Clojure
21
star
19

lein-jammin

a window into your stuck process
Clojure
18
star
20

everything-will-flow

necessary code for my upcoming clojure/west 2015 talk
Clojure
18
star
21

duel

a testing ground for programs that play go
Clojure
10
star
22

bizarro-collections

you got your clojure semantics in my mutable hash-map
Java
8
star
23

ergo

a monte-carlo simulator for computer go
C++
5
star
24

scrawl

the graphical equivalent of the fibonacci sequence
Clojure
4
star
25

java9-failure

Clojure
1
star
26

aleph.io

static website for aleph
CSS
1
star