npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mosyrejs

v1.2.11

Published

Multi-order synchronization

Downloads

18

Readme

Overview of MoSyRe architecture

MoSyRe is a shorthand notation for Modularity, Synchronicity and Reactiveness, commonly-seen attributes of all things in existence including software architecture. MoSyRe is a name (I made up) of software architecture which is designed to express such attributes .This type of architecture can facilitate communication and synchronicity between individuals in a coherent manner. Such that any change occurs in the connection/network, can be conveyed properly to where it is needed.

This architecture expreses the fundametal principle of Change

One change leads to other changes.

Fundametal Definitions

Crystalization

Crystalization in this context means, being in agreement to accept rules, conditions, or parameters to play a specific role or to function in a particular way. Crystalization process helps define and mold clay to have attributes/properties.

Clay

A clay, as the name suggests, has no shape, no specific feature and is unfathomable. Its main quality is to connect and is capable of expressing core frequency of itself ONCE being crystalized/went through crystalization process AND being in connection with other clays.

Attribute Clay

Attribute Clay is a clay being crystalized to have properties, features and/or parameters. This type of clay can retain such properties/features and can change/replace those by ifself at will.

Responsive Clay

Responsive Clay is Clay or Attrib Clay, which can response to vibration/signal being received from connections. Reponse and react are main behaviors of this crystalized clay. Its reponse and react can vary based on the agreement it has through parameters and properties accepted in crystalization process.

OverClay / SynthClay (synthesis/composite)

OverClay is Clay or Attrib Clay, its functionality is functionalites of individual clays in totality. OverClay can be thought as composite clay. This type of clay can encapsulate small or large network of clays so that it can be a unit clay in larger networks.

Conduit

Conduit is Clay or Attrib Clay, its main function is to act as a link/bridge. Its response ability is to facilitate the connections and signal transmissions between clays. Once it picks up on a vibration from clay. This vibration will be replicated and reproduced on the network. Any clay connects to the this type of clay can pick up on this replicated vibration.

Connection Point

Each clay connects to other clay through a point. Point is the interface for how clays exchange information though. This is analogous to contact point. Point can be thought as physical contact point, usually described by giving a label. Point can also be thought as time. Point can also be a protocol for how clay will interpret the signal being transmitted.

Analogies

  1. In computer circuitry design, we tent to think of point as pin where components connect with each ohter.
  2. Human often connects with other human through contact points e.g. Email, Phone Number ,places.
  3. For neural network, dendrites connect to axons through tiny gaps interface where information/signal being exchanged.
  4. In our current programming paradigm, we usually use event as conduit/point of communication between components.

MoSyRe programming Mechanism in Computing

In order to integrate this type of architecture in software programming, programmers will need to:

  1. Change programming mindset from sequential to parallel. Clays function in parallel.
  2. Think of program as a network of clays connected and work together.
  3. Design Responsive Clays as unit building blocks of application so each clay does one thing and does it very well.
  4. Connect clays in a harmonious manner so that each clay can perform its job while communicating with each other to resolve the end goals.

This new paradigm enforces thinking in terms of modularity, connectivity and flow. Clay cannot work being by ifself. Clays only response when it being stimulated by signal from connections. Unexpected information sent to clays will result unexpected outcomes.

Execution of the entire network of clays cannot be thought nor programmed in terms of sequential ordered executions but multi-order parallel executions in synchronicity. Architecture of a software will now be expressed as topology of network of clays. It is an art form in this type of programming to design clay functions and network architectures.

Predictablity of the outcomes can only be obtained when network is designed appropriately. This is because clays are not responsile for coordination and do not have the capabilities to control the entire flow of the network. We certainly can design specific clays to act as facilitators for synchronicity in specific regions of network so that the outcomes are expected. Larger network will requires more facilitators.

Introduction to MoSyRe JS framework

MosyRe.js is a javascript library implements MoSyRe architecture.

Installation

npm install mosyrejs --save

Development

Clone

git clone https://github.com/ManhQLe/mosyrejs [Your Folder]

Build

   # For Windows
   npm run build
   
   # For Linux
   chmod +x buildLinux.sh
   npm run build-linux

Class Diagram

    Symbols & Meanings

    ◆           Inheritable function 
    ▣           Static function
    
    ■[G/S]      Inheritable Property(default value)  
    [G/S]       Get and Set 

    ClassX ◄──   Inherit from ClassX    
    Clay ◄──── AttribClay ◄────┬──── RClay
                               |
                               ├──── Conduit
                               |
                               └──── SClay
             

Programming Interface

Quick Start

The end goal is to create clays, and connect them together
1. Create clay and define their behavior
2. Connect them together to perform complex tasks

Example1

Create a network which performs (NumA + NumB) * NumC
           .------.      .------.      .--------.
   NumA ---| ADD  |------| MULT |------| Logger |
           '--+---'      '---+--'      '--------'
   NumB ------'              |
                    NumC ----'
    const RClay = require('mosyre/RClay')
    const Conduit = require('mosyre/Conduit')

    const Add = new RClay({
        connectPoints:["A","B"],
        response(center){
            center.SUM = center.A + center.B
        }
    })

    const Mult = new RClay({
        connectPoints:["A","B"],
        response(center){
            center.PRODUCT = center.A * center.B
        }
    })

    const Log = new RClay({
        connectPoints:["INFO"],
        response(center){
            console.log(center.INFO)
        }
    })

    //Connect

    Conduit.link(Log,"INFO","PRODUCT",Mult);

    const linkA = Conduit.link(Add,"A");
    const linkB = Conduit.link(Add,"B");
    Conduit.link(Add,"SUM","A",Mult);
    const linkC = Conduit.link(Mult,"B");
    
    //Send information
    linkA.signal = 2.3
    linkB.signal = 4.3
    linkC.signal = 5
    

Example2

Still thinking on an interesting one :)

Clay

    Clay(agreement): constructor

        ◆ onConnection(withClay, atPoint): void
        ◆ onCommunication(fromClay, atPoint, signal): void

        ▣ connect(clay1, clay2, atConnectPoint, atConnectPoint2)
        ▣ vibrate(clay, atConnectPoint, signal, sourceClay)

AttribClay

    AttribClay(agreement): constructor

        ◆ createProp(propName, defaultValue [, getfx, setfx, store]): void
        ◆ isSameConnectionPoint(): Boolean

        ■[G/S] agreement({})
        ■[G/S] contacts (null)

        ▣ createProp(Object, propName, defVal, getFx, setFx, storage): void

RClay

    RClay(agreement): constructor

    //These folowing properties can be intializabled by agreement
    ■[G/S] staged(false)
    ■[G/S] connectPoints([]) 
    ■[G/S] response(function(){})
    ■[G/S] cystalize(function(){})
    ◆ onResponse(atLastPoint): void
    ◆ getCenter(): Object //center
    ◆ onInit(): void
    //Example of instantiation

    const Clay1 = new RClay({
        connectPoints:["X","Y"],
        response(center){
            //Send sum of signals to Z connect point.
            center.Z = center.X + center.Y
        }
    })

    //Example of inheritance

    class ClayDoSqrt extends RClay{
        constructor(agg){
            super(agg);

            this.response = (center)=>{
                //Send sqrt of signal to SQRT connect point
                center.SQRT = Math.sqrt(center.X)
            }
        }
    }

    const Clay2 = new ClayDoSqrt();

SClay


    SuperClay(agreement): constructor

    ◆ onBuild(): Array // [[pI1, clay1, clayp1],[pI2, clay2, clayp2],[pI3, clay3, clayp3]...]


    //Example of instantiation
    const Add1 = new Adder()
    const Add2 = new Adder()
    const Mul = new Mult()

    Conduit.createLink(Add1,"C",Mul,"A");
    Conduit.createLink(Add2,"C",Mul,"B");

    const SClaySubject = new SClay({
        layoutMap:[
            ["A",Add1,"A"],
            ["A",Add1,"B"],
            ["B",Add2,"A"],
            ["B",Add2,"B"],
            ["R",Mul,"C"]
        ]    
    })

    const SClay2 = new SClay({
        build:(clay)=>{
            return [
                ["A",Add1,"A"],
                ["A",Add1,"B"],
                ["B",Add2,"A"],
                ["B",Add2,"B"],
                ["R",Mul,"C"]
            ]
        }    
    })

    //Example of Inheritance

    class ISClay extends SClay {
        constructor(agr){
            super(agr)
        }
        onBuild(){
            return [
                ["A",Add1,"A"],
                ["A",Add1,"B"],
                ["B",Add2,"A"],
                ["B",Add2,"B"],
                ["R",Mul,"C"]
            ]       
        }
    }

Conduit


    Conduit():constructor
    ◆ link(Array): void    
    ▣ fromArray(Array): void
    ▣ createLink(clay1,connectPoint1,clay2,connectPoint2,....): void