Skip to content

Commit

Permalink
Merge pull request finos#78 from zngly/feat/zngly/morphir
Browse files Browse the repository at this point in the history
feat: zngly & morphir website integration
  • Loading branch information
stephengoldbaum authored Feb 11, 2022
2 parents 5361361 + 147fc4a commit 877c8c7
Show file tree
Hide file tree
Showing 32 changed files with 17,910 additions and 510 deletions.
91 changes: 57 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,54 +3,76 @@

# Morphir

**Morphir** is a multi-language system built on a data format that captures an application's domain model and business logic in a technology agnostic manner. Having all the business knowledge available as data allows you to process it programatically in various ways:
For the first time, business logic can be shared, stored, translated and visualised, all with the reliability of standardisation ensured in the Morphir framework.

- **Translate it** to move between languages and platforms effortlessly as technology evolves
- **Visualize it** to turn black-box logic into insightful explanations for your business users
- **Share it** across different departments or organizations for consistent interpretation
- **Store it** to retrieve and explain earlier versions of the logic in seconds
- and much more ...
---

Read more [Morphir documentation](https://morgan-stanley.github.io/morphir/)
Morphir is a library of tools that works to capture business logic as data:

## Morphir IR
## What is it?

The heart of Morphir is an intermediate representation that captures the domain model and business logic of your application.
Our main serialization format is JSON for maximum language interoperability. This repo will contain the specification of the JSON
format in the near future. While we are working on it you can check out the documentation of the corresponding
[Elm library](https://github.com/Morgan-Stanley/morphir-elm#morphir-ir) to get an idea on the structure.
A set of tools for integrating technologies. Morphir is composed of a library of tools that facilitate the digitisation of business logic into multiple different languages & platforms. The Morphir framework is unique too in that facilities elements of automation and conversion that were previously unavailable in the field of finance-tech.

## Morphir sub-projects:
## Why is it important?

**Core**
* [morphir](https://github.com/Morgan-Stanley/morphir) - The core IR data structure and common SDK.
* [morphir-examples](https://github.com/Morgan-Stanley/morphir-examples) - Examples of various types of Morphir modeling (mostly in Elm).
Makes business logic portable. Business logic digitised provides distinct advantages: capacity for movement across departments and fields & the ability to be converted to new languages and applications.

**Frontends**
* [morphir-elm](https://github.com/Morgan-Stanley/morphir-elm) - Enabling Elm as a Morphir modeling language.
* [morphir-bosque](https://github.com/Morgan-Stanley/morphir-bosque) - Enabling Bosque as a Morphir modeling language.
* [morphir-dotnet](https://github.com/Morgan-Stanley/morphir-dotnet) - Enabling F# as a Morphir modeling language and for .NET as a backend target.
## How does it work?

**Backends**
* [morphir-dapr](https://github.com/Morgan-Stanley/morphir-dapr) - Enabling Microsoft's [Dapr](http://dapr.io) as a target application model platform.
* [morphir-jvm](https://github.com/Morgan-Stanley/morphir-jvm) - Enabling various JVM technologies as targets for Morphir model execution.
* [morphir-dotnet](https://github.com/Morgan-Stanley/morphir-dotnet) - Support for using F# as a Morphir modeling language and for .NET as a backend target.
Defines a standard format for storing and sharing business logic. A clear set of standards and format is in-place from the input/output, allowing for coherent structure.

## Installation
## What are the benefits?

The quickest way to start is to use the Morphir Elm tooling. You can find instructions [here](https://github.com/finos/morphir-elm/).
### ✔️ Eliminates technical debt risk

## Usage example
> _Refactoring code libraries is often a harmful and time-sensitive issue for businesses, Morphir ensure the standards introduced from input eliminate delays at deployment._
Morphir tools can be used to optimize a wide range of development tasks. For example, Morphir can be used to define and automated development of an entire service. The [Morphir Dapr](https://github.com/finos/morphir-dapr) project is example of this.
### ✔️ Increases agility

Another good use of Morphir is to define shared rules than can be used across heterogeneous systems. This can be useful for initiatives like open-source Reg Tech models that are shared across firms. [Morphir LCR](https://github.com/finos/morphir-examples/tree/master/src/Morphir/Sample/LCR) presents a good example of this.
> _Adaptability and usability are key concepts of the Morphir framework, business logic can now move with the code, be easily understood and adopted, in an ever-developing eco-system._
More Morphir examples can be found at [Morphir Examples](https://github.com/finos/morphir-examples/).
### ✔️ Ensures correctness

> _Certifying that specified functions behave as intended from input to output is assured through the Morphir library / tool chain._
### ✔️ Disseminates information through automation

> _Morphir’s automated processing helps disseminate information which otherwise may not be understood or shared at all, a useful tool when brining elements of business logic to conversation outside of its immediate audience (i.e developers)._
---

[Morphir Resource Centre](https://morphir.zngly.com/)

---

# An ecosystem of innovative features

Supporting the development of your business’ needs in an ever-developing ecosystem based on firm standards and the integration of new languages.

## Development setup
Check out [GitHub >>](https://github.com/stephengoldbaum/morphir-examples/tree/master/tutorial)

Morphir is a collection of tools. Each tool is in its own repo with its own installation instructions. The main development tools, and the best place to get started, are currently in [Morphir Elm](https://github.com/finos/morphir-elm).
# Further reading

| Introduction & Background | Using Morphir | Applicability |
| :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------- |
| [Resource Centre](https://morphir.zngly.com/) | [What Makes a Good Model](./docs/what-makes-a-good-domain-model) | [Sharing Business Logic Across Application Boundaries](./docs/shared_logic_modeling) |
| [Background](./docs/background) | [Development Automation (Dev Bots)](./docs/dev_bots) | [Regulatory Technology](./docs/regtech_modeling) |
| [Community](./docs/morphir_community) | [Modeling an Application](./docs/application_modeling) | |
| [What's it all about?](./docs/whats_it_about) | [Modeling Decision Tables](https://github.com/finos/morphir-examples/tree/master/src/Morphir/Sample/Rules) | |
| [Working Across Technologies](./docs/work_across_languages_and_platforms) | [Modeling for database developers](./docs/modeling/modeling-for-database-developers.md) | |
| [Why we use Functional Programming?](./docs/why_functional_programming) | | |

# Development setup

Morphir is a collection of tools. Each tool is in its own repo with its own installation instructions. The main development tools, and the best place to get started, are currently in [Morphir Elm](https://github.com/finos/morphir-elm).

## Usage example

Morphir tools can be used to optimize a wide range of development tasks. For example, Morphir can be used to define and automated development of an entire service. The [Morphir Dapr](https://github.com/finos/morphir-dapr) project is example of this.

Another good use of Morphir is to define shared rules than can be used across heterogeneous systems. This can be useful for initiatives like open-source Reg Tech models that are shared across firms. [Morphir LCR](https://github.com/finos/morphir-examples/tree/master/src/Morphir/Sample/LCR) presents a good example of this.

More Morphir examples can be found at [Morphir Examples](https://github.com/finos/morphir-examples/).

## Roadmap

Expand All @@ -72,9 +94,10 @@ List the roadmap steps; alternatively link the Confluence Wiki page where the pr

_NOTE:_ Commits and pull requests to FINOS repositories will only be accepted from those contributors with an active, executed Individual Contributor License Agreement (ICLA) with FINOS OR who are covered under an existing and active Corporate Contribution License Agreement (CCLA) executed with FINOS. Commits from individuals not covered under an ICLA or CCLA will be flagged and blocked by the FINOS Clabot tool. Please note that some CCLAs require individuals/employees to be explicitly named on the CCLA.

*Need an ICLA? Unsure if you are covered under an existing CCLA? Email [[email protected]](mailto:[email protected])*
_Need an ICLA? Unsure if you are covered under an existing CCLA? Email [[email protected]](mailto:[email protected])_

## Join the Morphir Slack Channel

Join Morphir on the FINOS Slack by signing up at https://finos-lf.slack.com/. The Morphir channel on Slack is found directly at https://finos-lf.slack.com/messages/morphir/.

[<img src="https://img.shields.io/badge/slack-@finos/morphir-green.svg?logo=slack">](https://finos-lf.slack.com/messages/morphir/)
Expand All @@ -83,7 +106,7 @@ Reach out to [email protected] for any issues when joining CSC on the FINOS Slack.

## License

Copyright 2020 FINOS
Copyright 2022 FINOS

Distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).

Expand Down
8 changes: 0 additions & 8 deletions docs/home.md

This file was deleted.

91 changes: 91 additions & 0 deletions docs/intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
sidebar_position: 1
id: intro
title: Introduction
---

# Morphir

Morphir is a multi-language system built on a data format that captures an application's domain model and business logic
in a technology agnostic manner. Having all the business knowledge available as data allows you to process it
programmatically in various ways:

- **Translate it** to move between languages and platforms effortlessly as technology evolves
- **Visualize it** to turn black-box logic into insightful explanations for your business users
- **Share it** across different departments or organizations for consistent interpretation
- **Store it** to retrieve and explain earlier versions of the logic in seconds
- and much more ...

While the core idea behind Morphir is very simple it's still challenging to describe it because it doesn't fit into
any well-known categories. To help you understand what it is and how you can use it to solve real-world problems we
put together a tutorial and list of questions and short answers:

- [Tutorial](https://github.com/stephengoldbaum/morphir-examples/tree/master/tutorial)
- [How do I define my domain model and business logic?](#how-do-I-define-my-domain-model-and-business-logic)
- [How does Morphir turn logic into data?](#how-does-morphir-turn-logic-into-data)
- [What does the data format look like?](#what-does-the-data-format-look-like)

## How do I define my domain model and business logic?

Morphir is a multi-language system, so it gives you flexibility in what language or tool you use to define your
domain model and business logic (we refer to them as frontends). As a community we are continuously building new
language frontends and if the one you are looking for is not available we provide tools for you to build it yourself.

Our main frontend is currently the [Elm](https://elm-lang.org/) programming language. We support the whole language
(except for some very platform specific features like ports) so defining your domain model and business logic boils down
to writing Elm code. To learn more about the frontend see [morphir-elm](https://github.com/Morgan-Stanley/morphir-elm).

Other frontends:

- [Bosque Programming Language](https://github.com/Morgan-Stanley/morphir-bosque)

## How does Morphir turn logic into data?

The process of turning logic into data is well known because every programming language compiler and interpreter does
it. They parse the source code to generate an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree)
which is then transformed into an [intermediate representation](https://en.wikipedia.org/wiki/Intermediate_representation) of some sort.

Morphir simply turns that intermediate representation into a developer-friendly data format that makes it easy to build
automation on top of it.

## What does the data format look like?

It's easiest to start with an example. Say you have some simple business logic like this:

```javascript
quantity * unitPrice;
```

In Morphir's data format this would translate into something like this:

```javascript
[
'Apply',
['Apply', ['Reference', [['Morphir', 'SDK'], ['Number'], 'multiply']], ['Variable', ['quantity']]],
['Variable', ['unit', 'price']],
];
```

<!--
# Further reading
## Introduction and Background
- [Background](background)
- [Community](morphir_community)
- [What's it all about?](whats_it_about)
- [Working Across Technologies](work_across_languages_and_platforms)
- [Why we use Functional Programming?](why_functional_programming)
## Using Morphir
- [What Makes a Good Model](what-makes-a-good-domain-model)
- [Development Automation (Dev Bots)](dev_bots)
- [Modeling an Application](application_modeling)
- [Modeling Decision Tables](https://github.com/finos/morphir-examples/tree/master/src/Morphir/Sample/Rules)
- [Modeling for database developers](modeling/modeling-for-database-developers.md)
## Applicability
- [Sharing Business Logic Across Application Boundaries](shared_logic_modeling)
- [Regulatory Technology](regtech_modeling) -->
6 changes: 0 additions & 6 deletions docs/roadmap.md

This file was deleted.

6 changes: 0 additions & 6 deletions docs/team.md

This file was deleted.

20 changes: 20 additions & 0 deletions website/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Dependencies
/node_modules

# Production
/build

# Generated files
.docusaurus
.cache-loader

# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
9 changes: 9 additions & 0 deletions website/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"singleQuote": true,
"useTabs": true,
"tabWidth": 2,
"semi": false,
"jsxSingleQuote": true,
"arrowParens": "avoid",
"printWidth": 120
}
Loading

0 comments on commit 877c8c7

Please sign in to comment.