Git Product home page Git Product logo

reaqtor's Introduction

https://reaqtive.net

.NET Foundation License: MIT Build Status codecov NuGet

About Reaqtor

Reaqtor is a framework for reliable, stateful, distributed, and scalable event processing based on Reactive Extensions (Rx).

Reaqtor has been in development for over 10 years. It is the evolution of the Reactive Extensions & powers services across Bing and M365.

.NET Foundation

Reaqtor is part of the .NET Foundation.

License

Reaqtor is available under the MIT open source license.

Building

To build Reaqtor, you will need to install the .NET SDK (version 5.0 or later). Clone this repo, and in the root folder run this command:

dotnet build All.sln

Alternatively, if you use Visual Studio 2019, then as long as you have enabled the .NET SDK and .NET 5 runtimes in the Visual Studio installer, you can open that same All.sln file in Visual Studio and build it in the usual way.

Running Example Notebooks

Many of the examples in the documentation in this repository take the form of notebooks, to make the examples interactively runnable. Since Reaqtor is a .NET technology, these notebooks contain C#, so you'll need a Jupyter notebook editor with support for a .NET kernel. For example, you use Visual Studio Code with the .NET Interactive Notebooks extension. You can install Visual Studio Code from https://code.visualstudio.com/ and then you can install the free .NET Interactive Notebook extension from the VS Code marketplace.

With these installed, you will be able to open any of the .ipynb files in this repository. For example, in the Reaqtor/Samples/IoT/Reaqtor.IoT folder, there are two such files. When you open one, VS Code might ask you whether you want to trust the file. You will need to indicate that you do if you want to run the code in a notebook. If you had already installed tools in Visual Studio Code for running Python notebooks, you may see a prompt asking which notebook kernel to use. Select .NET Interactive (and not a Python kernel). You will then be able to run the C# code in any of the code cells in the notebook. (You will need to have built Reaqtor first for this to work, because these various example notebooks load the libraries built by the source in this repository.)

Contributor License Agreement

We appreciate community contributions to code repositories open sourced by the .NET Foundation. By signing a contributor license agreement, we ensure that the community is free to use your contributions.

Review the CLA document

The .NET Foundation Contributor License Agreement (CLA) document is available for review as a PDF.

Sign the CLA

When you contribute to a .NET Foundation open source project on GitHub with a new pull request, a bot will evaluate whether you have signed the CLA. If required, the bot will comment on the pull request, including a link to this system to accept the agreement.

Code of Conduct

This project has adopted a code of conduct adapted from the Contributor Covenant to clarify expected behavior in our community. This code of conduct has been adopted by many other projects. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Acknowledgements

A list of people who have contributed to the development of Reaqtor is featured in A History of Reaqtor, by Bart De Smet.

reaqtor's People

Contributors

bartdesmet avatar cameronaavik avatar howardvanrooijen avatar idg10 avatar jamesdawson avatar ronnygunawan avatar slang25 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reaqtor's Issues

Docs: need actually explain what this framework is, why you should use it, and how it works

As far as documentation goes, this project is very difficult to follow - and I described as such on this thread: https://twitter.com/Aaronontheweb/status/1395030897779433472

I wanted to offer some suggestion so you can help users get up and running with Reaqtor quickly

  1. https://reaqtive.net/ - "Meet Reaqtor" takes you to a stemwinder of a blog post about how Reaqtor came about. That's great, but what does Reaqtor do and why should I care? Add a link to a short video or a short post that adds some meat to the bones of Reaqtor's elevator pitch on the homepage.
  2. https://reaqtive.net/documentation/ - begins with an explanation of all of Reaqtor's modules within the framework. No one cares. Start with a conceptual overview of what Reaqtor is, what problems does it solve, and why / when you should use it. Introduce the framework architecture later - people who are deep enough into Reaqtor to care about those details will find them.
  3. Add a basic "Hello World" use case that demonstrates the 20% of Reaqtor 80% of applications need in order to run. Samples like https://github.com/reaqtive/reaqtor/blob/main/Reaqtor/Samples/IoT/Reaqtor.IoT/IoT-House.ipynb, while very thorough and detailed, don't communicate that. It's like trying to tackle a pyramid - I don't know where I should aim with a sample that large. Explain, in detail, what each of those 20% components are, how they work, and why you need them in order to build a Reaqtive application.
  4. Create a clear area in the project that contains examples that are F5-runnable. I tried to do this last night and wasn't successful in getting some of the simple remoting samples up and running - and they weren't particularly easy to find either. Reorganize the project to make it easy for users to download things and kick the tires. Jupyter notebooks, while neat and interesting, aren't an effective substitute for running samples in my own toolset on my own machine - which is how most developers learn-by-doing still.

I don't mean to be overly critical - I want your project to be successful and these are the things that stopped me from being able to fully explore and understand its value.

Can Reaqtor be used to create a native LINQ DBMS?

I was very interested to read "A Little History of Reaqtor". I suspect that many of the talented developers mentioned in that document have pondered how to create what I have asked for below. I would love hear thoughts from this team on how these ideas might be implemented.

Just over a year ago I wrote this post on Reddit. I later contacted Jeremy Likness with the idea.

My requests:

  • A DBMS that will parse and execute my LINQ statements without first translating them to a human readable query (such as ANSI-SQL).

  • Ability to deploy my business logic in nuget form to DBMS so that all my LINQ statements will run server-side.

Here is my original post on Reddit:

I've been thinking a lot about Blazor the last few weeks. I think Blazor is an inflection point for dotnet core because it demonstrates that dotnet core is mature enough to be offered as a replacement for Javascript.

Embracing Blazor creates a big dependency on Microsoft. Microsoft is betting that dotnet core and the dotnet ecosystem are compelling reasons to take that dependency. I think they are right and I would like to see them take dotnet even farther. Just as they have extended dotnet to the browser, so too would I like them to extend dotnet to the dbms. Such a dbms would be another Microsoft dependency but to me that is an easy concession to make. I am already using Entity Framework to abstract away my dependency on SQL, so if my SQL dbms were replaced by one that parsed my linq query natively the only thing I would notice would be the performance improvement.

The driver behind my desire to move dotnet to the dbms is the benefit that comes from writing business logic in statically typed code. The value of this cannot be overstated. I like being able to write reusable code and I like having it checked at compile time instead of in production. Entity Framework assists greatly to this end but at the end of the day it is only lipstick over the so-called object relational impedance mismatch. It does nothing to close the gap. Don't get me wrong I love EF. But no matter how much it does it is still a workaround. I want a solution that reduces or eliminates the mismatch.

The argument that a dotnet dbms is a Microsoft only solution is a valid one. I think it is worth pointing out that if I want my dotnet application to access my SQL database in an object oriented way I have to use a shim like Entity Framework. I think turnabout is fair play. If a Java developer wants to make a call to my dotnet dbms, he should be the one who has to use a shim.

So what do I mean by a native dotnet dbms?

Right now if I write a linq statement like ...where(x => myMethod(x)) it is not going to be executed on the server if myMethod cannot be mapped to a sql function. So I would like to be able to deploy my service layer as a nuget (think stored procs) directly to the dbms. Also, in order for my linq query to execute it has to be translated to a human readable sql statement. I would not care about that sql statement if I could execute ling natively on the server. Translating to sql is slow, inefficient, and it is an enormous technical hurdle. Why not just bypass it and let the server parse the linq statement natively? I would also like to be able to deploy my model (poco entities) to the dbms as a nuget package. I want to be able to utilize all the power and functionality of the dotnet framework in the place I need it most. Exactly how it should work beyond this I won't even pretend to know.

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.