Skip to content

Commit

Permalink
deploy: 2643383
Browse files Browse the repository at this point in the history
  • Loading branch information
charlesmadjeri committed Nov 26, 2024
0 parents commit ec2854f
Show file tree
Hide file tree
Showing 98 changed files with 8,380 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .buildinfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
config: afab4f4c271189bc0eb043dc77f100eb
tags: 645f666f9bcd5a90fca523b33c5a78b7
Binary file added .doctrees/Project/benchmark.doctree
Binary file not shown.
Binary file added .doctrees/Project/index.doctree
Binary file not shown.
Binary file added .doctrees/client_mobile/index.doctree
Binary file not shown.
Binary file added .doctrees/client_mobile/installation.doctree
Binary file not shown.
Binary file added .doctrees/client_web/context.doctree
Binary file not shown.
Binary file added .doctrees/client_web/index.doctree
Binary file not shown.
Binary file added .doctrees/client_web/installation.doctree
Binary file not shown.
Binary file added .doctrees/contributing.doctree
Binary file not shown.
Binary file added .doctrees/environment.pickle
Binary file not shown.
Binary file added .doctrees/index.doctree
Binary file not shown.
Binary file added .doctrees/server/index.doctree
Binary file not shown.
Binary file added .doctrees/server/installation.doctree
Binary file not shown.
Empty file added .nojekyll
Empty file.
341 changes: 341 additions & 0 deletions Project/benchmark.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,341 @@


<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tech Stack Benchmark and Justification &mdash; AREA documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" />


<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="AREA Client Web" href="../client_web/index.html" />
<link rel="prev" title="AREA Project" href="index.html" />
</head>

<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >



<a href="../index.html" class="icon icon-home">
AREA
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contribution Guidelines</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">AREA Project</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="index.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="index.html#key-features">Key Features</a></li>
<li class="toctree-l2"><a class="reference internal" href="index.html#mission">Mission</a></li>
<li class="toctree-l2"><a class="reference internal" href="index.html#vision">Vision</a></li>
<li class="toctree-l2"><a class="reference internal" href="index.html#community">Community</a></li>
<li class="toctree-l2"><a class="reference internal" href="index.html#contact-us">Contact Us</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html#contents">Contents</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Tech Stack Benchmark and Justification</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#web-vite-react-typescript">Web: Vite + React + TypeScript</a></li>
<li class="toctree-l4"><a class="reference internal" href="#mobile-flutter">Mobile: Flutter</a></li>
<li class="toctree-l4"><a class="reference internal" href="#server-go">Server: Go</a></li>
<li class="toctree-l4"><a class="reference internal" href="#database-mariadb">Database: MariaDB</a></li>
<li class="toctree-l4"><a class="reference internal" href="#overall-synergy">Overall Synergy</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../client_web/index.html">AREA Client Web</a></li>
<li class="toctree-l1"><a class="reference internal" href="../client_mobile/index.html">AREA Client Mobile</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/index.html">AREA Server</a></li>
</ul>

</div>
</div>
</nav>

<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">AREA</a>
</nav>

<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">AREA Project</a></li>
<li class="breadcrumb-item active">Tech Stack Benchmark and Justification</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/Project/benchmark.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">

<section id="tech-stack-benchmark-and-justification">
<h1>Tech Stack Benchmark and Justification<a class="headerlink" href="#tech-stack-benchmark-and-justification" title="Link to this heading"></a></h1>
<p>This document provides a comparative study and justification for the chosen tech stack for a project aimed at creating an app (web and mobile) for automation via connection services. The app will provide triggers and actions that users can combine. The chosen stack includes:</p>
<ul class="simple">
<li><p><strong>Web</strong>: Vite + React + TypeScript</p></li>
<li><p><strong>Mobile</strong>: Flutter</p></li>
<li><p><strong>Server</strong>: Go</p></li>
<li><p><strong>Database</strong>: MariaDB</p></li>
</ul>
<p>Below is the detailed analysis of the stack and comparisons with alternatives.</p>
<section id="web-vite-react-typescript">
<h2>Web: Vite + React + TypeScript<a class="headerlink" href="#web-vite-react-typescript" title="Link to this heading"></a></h2>
<p><strong>Justification</strong>:
- <strong>React</strong>:</p>
<blockquote>
<div><ul class="simple">
<li><p><strong>Mature Ecosystem</strong>: A well-established library with vast community support, making development fast and reliable.</p></li>
<li><p><strong>Declarative UI</strong>: Simplifies the creation of dynamic, interactive user interfaces.</p></li>
<li><p><strong>Component Reusability</strong>: Promotes modular and maintainable code.</p></li>
</ul>
</div></blockquote>
<ul class="simple">
<li><p><strong>Vite</strong>:
- <strong>Fast Development</strong>: Extremely fast build and hot module replacement (HMR) compared to alternatives like Webpack.
- <strong>Optimized Builds</strong>: Produces smaller and faster production builds.</p></li>
<li><p><strong>TypeScript</strong>:
- <strong>Type Safety</strong>: Reduces runtime errors and enhances code maintainability.
- <strong>Better Tooling</strong>: Superior editor autocompletion and refactoring support.</p></li>
</ul>
<p><strong>Comparisons</strong>:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th>
<th class="head"><p><strong>React</strong></p></th>
<th class="head"><p><strong>Vue</strong></p></th>
<th class="head"><p><strong>Angular</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Learning Curve</p></td>
<td><p>Moderate</p></td>
<td><p>Easy</p></td>
<td><p>Steep</p></td>
</tr>
<tr class="row-odd"><td><p>Performance</p></td>
<td><p>Fast</p></td>
<td><p>Comparable to React</p></td>
<td><p>Slower for large apps</p></td>
</tr>
<tr class="row-even"><td><p>Ecosystem</p></td>
<td><p>Extensive</p></td>
<td><p>Growing but smaller</p></td>
<td><p>Complete framework</p></td>
</tr>
</tbody>
</table>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p><strong>Build Tool</strong></p></th>
<th class="head"><p><strong>Vite</strong></p></th>
<th class="head"><p><strong>Webpack</strong></p></th>
<th class="head"><p><strong>Parcel</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Speed</p></td>
<td><p>Fastest</p></td>
<td><p>Slow</p></td>
<td><p>Moderate</p></td>
</tr>
<tr class="row-odd"><td><p>Simplicity</p></td>
<td><p>Simple</p></td>
<td><p>Complex</p></td>
<td><p>Simple</p></td>
</tr>
</tbody>
</table>
<p><strong>Conclusion</strong>:
React, Vite, and TypeScript combine speed, maintainability, and a robust ecosystem, outperforming alternatives for this web project.</p>
</section>
<section id="mobile-flutter">
<h2>Mobile: Flutter<a class="headerlink" href="#mobile-flutter" title="Link to this heading"></a></h2>
<p><strong>Justification</strong>:
- <strong>Single Codebase</strong>: Write once, deploy to Android, iOS, and web.
- <strong>Performance</strong>: Near-native performance due to Dart compiling to native machine code.
- <strong>Customizable UI</strong>: Powerful widgets for designing complex UIs.
- <strong>Fast Development</strong>: Hot reload and an extensive library of plugins.</p>
<p><strong>Comparisons</strong>:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th>
<th class="head"><p><strong>Flutter</strong></p></th>
<th class="head"><p><strong>React Native</strong></p></th>
<th class="head"><p><strong>Swift/Kotlin</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Code Reuse</p></td>
<td><p>High</p></td>
<td><p>High</p></td>
<td><p>None</p></td>
</tr>
<tr class="row-odd"><td><p>Performance</p></td>
<td><p>Near-native</p></td>
<td><p>Moderate (JS bridge)</p></td>
<td><p>Native</p></td>
</tr>
<tr class="row-even"><td><p>UI Flexibility</p></td>
<td><p>Highly Customizable</p></td>
<td><p>Limited</p></td>
<td><p>Native-specific</p></td>
</tr>
</tbody>
</table>
<p><strong>Conclusion</strong>:
Flutter’s cross-platform capabilities and performance make it ideal for quickly developing a polished mobile app.</p>
</section>
<section id="server-go">
<h2>Server: Go<a class="headerlink" href="#server-go" title="Link to this heading"></a></h2>
<p><strong>Justification</strong>:
- <strong>Performance</strong>: Compiles to native machine code, offering fast execution and low resource usage.
- <strong>Scalability</strong>: Excellent concurrency model using goroutines and channels.
- <strong>Minimalistic</strong>: Clean syntax and reduced dependencies compared to verbose frameworks.</p>
<p><strong>Comparison with Alternatives</strong>:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th>
<th class="head"><p><strong>Go</strong></p></th>
<th class="head"><p><strong>NestJS (TypeScript)</strong></p></th>
<th class="head"><p><strong>Flask (Python)</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Performance</p></td>
<td><p>High</p></td>
<td><p>Moderate</p></td>
<td><p>Low</p></td>
</tr>
<tr class="row-odd"><td><p>Scalability</p></td>
<td><p>Excellent</p></td>
<td><p>Good</p></td>
<td><p>Poor</p></td>
</tr>
<tr class="row-even"><td><p>Learning Curve</p></td>
<td><p>Moderate</p></td>
<td><p>Easy</p></td>
<td><p>Easy</p></td>
</tr>
<tr class="row-odd"><td><p>Ecosystem</p></td>
<td><p>Moderate</p></td>
<td><p>Mature</p></td>
<td><p>Mature</p></td>
</tr>
</tbody>
</table>
<ul class="simple">
<li><p><strong>NestJS</strong>: Strong for projects already using TypeScript but adds framework overhead.</p></li>
<li><p><strong>Flask</strong>: Lightweight but lacks built-in scalability and performance for heavy tasks.</p></li>
</ul>
<p><strong>Conclusion</strong>:
Go’s high performance and concurrency handling make it a better choice for a scalable automation service backend.</p>
</section>
<section id="database-mariadb">
<h2>Database: MariaDB<a class="headerlink" href="#database-mariadb" title="Link to this heading"></a></h2>
<p><strong>Justification</strong>:
- <strong>Relational Structure</strong>: Supports complex queries and ensures data consistency, ideal for user workflows and triggers.
- <strong>Performance</strong>: Optimized for high transaction rates with multi-threading and memory improvements.
- <strong>Compatibility</strong>: Drop-in replacement for MySQL with a large community and ecosystem.</p>
<p><strong>Comparisons</strong>:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p><strong>Database</strong></p></th>
<th class="head"><p><strong>MariaDB</strong></p></th>
<th class="head"><p><strong>MongoDB</strong></p></th>
<th class="head"><p><strong>PostgreSQL</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Schema</p></td>
<td><p>Relational (Strict Schema)</p></td>
<td><p>NoSQL (Schema-free)</p></td>
<td><p>Relational (Flexible)</p></td>
</tr>
<tr class="row-odd"><td><p>Scalability</p></td>
<td><p>High</p></td>
<td><p>High</p></td>
<td><p>Moderate</p></td>
</tr>
<tr class="row-even"><td><p>Querying</p></td>
<td><p>SQL</p></td>
<td><p>JSON/BSON</p></td>
<td><p>Advanced SQL</p></td>
</tr>
</tbody>
</table>
<ul class="simple">
<li><p><strong>MongoDB</strong>: Better for schema-less, document-based storage but less suited for relational data.</p></li>
<li><p><strong>PostgreSQL</strong>: Advanced features but overkill for simple relational use cases.</p></li>
</ul>
<p><strong>Conclusion</strong>:
MariaDB balances simplicity, performance, and compatibility, fitting the automation app’s needs.</p>
</section>
<section id="overall-synergy">
<h2>Overall Synergy<a class="headerlink" href="#overall-synergy" title="Link to this heading"></a></h2>
<p>The selected tech stack optimizes for:
- <strong>Performance</strong>: Go and Flutter ensure fast server and mobile app execution.
- <strong>Scalability</strong>: Go and MariaDB handle high concurrency and transaction rates.
- <strong>Developer Experience</strong>: React, Vite, and TypeScript streamline web development.
- <strong>Cross-Platform Reach</strong>: Flutter enables rapid multi-platform deployment.</p>
<p>This stack effectively balances development speed, scalability, and maintainability while outperforming alternatives for this automation-focused app.</p>
</section>
</section>


</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="AREA Project" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../client_web/index.html" class="btn btn-neutral float-right" title="AREA Client Web" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>

<hr/>

<div role="contentinfo">
<p>&#169; Copyright 2024, Maël RABOT, Mathieu COULET, Mathieu BOREL, Charles MADJERI, Samuel BRUSCHET.</p>
</div>

Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.


</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>

</body>
</html>
Loading

0 comments on commit ec2854f

Please sign in to comment.