Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add KISTERS case study #2637

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/_data/footerNavigation.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
{
"text": "Aleph Alpha",
"link": "/cases/aleph-alpha/"
},
{
"text": "KISTERS",
"link": "/cases/kisters/"
}
]
},
Expand Down
75 changes: 68 additions & 7 deletions src/cases/kisters.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,72 @@
---
layout: case-study
company: POELLATH
problem: KISTERS was looking for a way to move load transparently between their servers, edge functions, and users' browsers.
solution: We developed a prototype tool for them that runs the same Rust code on the server, edge function, and browsers via WebAssembly.
tags: Launch your idea
description: <p>KISTERS are experts in environmental monitoring, IT and data management</p><p>We developed a prototype tool for them that runs the same Rust code on the server as well as on an edge function and in the browser via WebAssembly.</p>
company: KISTERS
problem: KISTERS wanted to handle traffic spikes by dynamically moving computation to different platforms.
solution: We created a data-processing package suitable for server, edge, and WASM.
tags: Team Reinforcement
title: Dynamically switching execution platforms with Rust | Work
displayTitle: "Dynamically switching execution platforms with Rust"
description: <p>KISTERS builds solutions for collecting, analyzing, and providing information based on environmental data. The HydroMet division provides software that helps warn people of upcoming floods using data obtained from numerous sensor devices deployed across the globe.</p>
hero:
tags: "architecture / Rust / WASM"
permalink: false
color: purple
image: "/assets/images/work/kisters-background.jpg" # TODO
imageAlt: "TODO" # TODO
tags: "development / architecture / Rust"
og:
image: /assets/images/cases/cs-kisters-og-image.jpg # TODO
---

{% from "image-aspect-ratio.njk" import imageAspectRatio %} {% from "quote.njk" import quote %}

<div class="case-study__section">
<h3 class="case-study__heading">About KISTERS</h3>
<div class="case-study__text">
<p><a href="http://kisters.eu/">KISTERS</a> provides software for collecting and analyzing environmental data.<br>
In particular, they provide solutions to warn people of upcoming floods using data obtained from numerous sensor devices deployed throughout the globe.</p>
</div>
</div>

<div class="case-study__section">
<h3 class="case-study__heading">The challenge</h3>
<div class="case-study__text">
<p>KISTERS needed the ability to dynamically move computation between traditional servers and edge functions, or offloading to end-user devices. That way, they would be able to <strong>handle large traffic spikes efficiently without risking astronomic cloud expenses</strong></p>
<p>The large amounts of data KISTERS obtains from sensor devices need processing to become useful for analysis. Filtering, grouping, and post-processing, depend on dynamic inputs and need to be carried out on demand.</p>
<p>That in and of itself warrants a well-optimized design and use of performant technologies, but in times of calamity, <strong>the amount of users requesting information may rise quickly</strong>: residents of endangered areas can use KISTERS’ software to obtain real-time information regarding their situation.</p>
</div>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this could be more straightforward – it seems we're first saying they wanted to move transparently between server, edge, browser; then we talk about sth. else; than we go back to the topic of reusing code.

</div>

<div class="case-study__section">
<h3 class="case-study__heading">How Mainmatter helped out</h3>
<div class="case-study__text">
<p>Mainmatter proposed and implemented an architecture that isolates the data processing implementation in a platform-independent package written in Rust.<p>
<p>That package can be thinly wrapped for use in a web server, run as an edge function, or compiled to Web Assembly (WASM) for execution in browsers. All of these different environments run the same efficient code with close to no duplication.</p>
</div>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should explain a bit how Rust and WASM allow for this easily: reusing the same code in these different environments while writing code that's super fast and efficient (which is the reason why e.g. JS which would also have been usable in those 3 environments, was not really an option)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The next section mentions the requirement of high performance. I'd like the 'How Mainmatter helped out' to focus on describing at a high level what we did, and then 'technology' to detail the design choices made

</div>

<section class="mt-5">
<!-- TODO add image for KISTERS -->
{% set imageData = {
"imgPath": "/assets/images/work/kisters-graph.png",
"alt": "TODO",
"sizes": "100vw",
"loading": "lazy",
"sizesArray": [760, 1440, 1920]
} %}
{{ imageAspectRatio(imageData, "32/13", "35/19") }}
</section>

<div class="case-study__section">
<h3 class="case-study__heading">Technology</h3>
<div class="case-study__text">
<p></p>
<p>Rust, with its strong performance and stability characteristics and solid WASM support, was a natural choice as a language with which to implement the design. What’s more, <a href="https://pola.rs/">Polars</a>, the famous high-performance open-source data frame manipulation library, is implemented in Rust itself and easily usable in Rust projects including those targeting WASM.</p>
</div>
</div>

<div class="case-study__section">
<h3 class="case-study__heading">Aftercare</h3>
<div class="case-study__text">
<p>Upon finishing and delivering the proof-of-concept, Mainmatter provided guidance to KISTERS' team on integrating the code into their platform.</p>
<p>Mainmatter has reviewed and optimized the integration code during several pairing sessions with KISTERS’ engineering team, ensuring the delivery of both the product and the technical knowledge required to maintain and expand it.</p>
</div>
</div>
13 changes: 7 additions & 6 deletions src/work.njk
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ og:
<h2 class="work__title h5">Meet our clients</h2>
<ul class="work__list">
{{ featuredCaseStudy('aleph-alpha', 'purple', 'work__featured-case-study') }}
{{ clientCards(['kisters', 'qonto']) }}
{{ clientCards(['clark', 'qonto']) }}
{{ featuredCaseStudy('rail-europe', 'black', 'work__featured-case-study') }}
{{ clientCards(['auditboard', 'xbav']) }}
{{ featuredCaseStudy('qonto', 'purple', 'work__featured-case-study') }}
{{ clientCards(['bmw-car-it', 'trainline']) }}
{{ featuredCaseStudy('mvb', 'black', 'work__featured-case-study') }}
{{ featuredCaseStudy('kisters', 'black', 'work__featured-case-study') }}
{{ clientCards(['ais', 'phorest']) }}
{{ featuredCaseStudy('trainline', 'purple', 'work__featured-case-study') }}
{{ clientCards(['mobimed', 'poellath']) }}
Expand All @@ -47,13 +47,14 @@ og:
{{ clientCards(['asilimia', 'erdil']) }}
{{ featuredCaseStudy('expedition', 'black', 'work__featured-case-study') }}
{{ clientCards(['generali', 'weplan']) }}
{{ clientCards(['sutori', 'mvb']) }}
{{ featuredCaseStudy('ddwrt', 'purple', 'work__featured-case-study') }}
{{ featuredCaseStudy('mvb', 'purple', 'work__featured-case-study') }}
{{ clientCards(['sutori', 'embedd']) }}
{{ featuredCaseStudy('ddwrt', 'blank', 'work__featured-case-study') }}
{{ clientCards(['medify', 'experteer']) }}
{{ clientCards(['timify', 'aleph-alpha']) }}
{{ clientCards(['ringler', 'dim3']) }}
{{ clientCards(['clark', 'rail-europe']) }}
{{ clientCards(['sage', 'embedd']) }}
{{ clientCards(['kisters', 'rail-europe']) }}
{{ clientCards(['sage', 'mvb']) }}
{{ clientCards(['camilyo', 'cardstack']) }}
</ul>
</div>
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/assets/images/work/kisters-background.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/assets/images/work/kisters-graph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.