Skip to content

emcdo411/ccad19-mssa-notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 

Repository files navigation

🧠 MSSA Cloud App Dev Notes – C#, Docker & .NET Core

A practical introduction to compiled languages in a modern cloud workflow


πŸ’‘ Why C# Needs a Compiler:

C# is a compiled language, which means the code you write (called source code) must be translated into a lower-level language before the computer can run it. This is done by the C# compiler, which turns your .cs files into Intermediate Language (IL). The .NET runtime (CLR) then translates IL into machine code just-in-time (JIT), when your app runs.

βœ… This makes C# fast, secure, and great for building enterprise-scale cloud applications.


πŸ›£οΈ Why Use Docker with .NET?

Docker lets you run your C#/.NET app in a lightweight container that works the same everywhere β€” on your dev machine, in Azure, or in production.

Benefits:

  • πŸš€ Portability: "Build once, run anywhere"
  • πŸ” Isolation: Keeps dependencies clean
  • πŸ§ͺ Testability: Run multiple versions without conflict
  • πŸ—– CI/CD Ready: Plug into GitHub Actions, Azure DevOps, etc.

βš™οΈ Sample Dockerfile for .NET Core App

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

🧠 Managing GitHub Environments: Dev, QA, Production

GitHub supports native environments for each stage of deployment:

  • development
  • qa / staging
  • production

🧩️ Features:

  • Environment-specific secrets
  • Required reviewers and wait timers
  • Manual approval gates

πŸ› οΈ How to Set It Up:

  1. Go to Repo > Settings > Environments
  2. Create an environment (e.g., production)
  3. Add secrets like PROD_API_KEY, QA_DB_PASS
  4. Reference it in your GitHub Actions YAML:
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://your-app-url.com
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Deploy app
        run: ./deploy.sh

πŸ“Š Recommended Branch Mapping

Branch Environment
dev Development
staging QA / Staging
main Production

🎯 Pro Tip: Environments give you audit logs, rollback options, and permission control for real-world deployments.


🌐 GitHub Branch-to-Environment Deployment Map (Mermaid Diagram)

flowchart LR
  DevBranch[Dev Branch] -->|Push| DevEnv[Development Environment]
  StagingBranch[Staging Branch] -->|Push| QAEnv[QA / Staging Environment]
  MainBranch[Main Branch] -->|Push| ProdEnv[Production Environment]
Loading

πŸ”€ What Is a Fork?

πŸ“Œ Definition:

A fork is a copy of an entire repository (including its full history) that lives under your own GitHub account.

βœ… Use Case:

  • Contributing to someone else’s project
  • Experimenting freely without affecting the original code
  • Making a private copy of a public repo

πŸ“‚ Example:

You want to contribute to an open-source repo like github.com/facebook/react.

  1. You fork it to your account: github.com/yourusername/react
  2. Make changes on your version.
  3. Create a pull request to propose changes back to the original repo.

πŸ”§ Command (CLI):

Forks happen on GitHub, not via CLI directly, but you can clone it after:

git clone https://github.com/yourusername/react.git

🌿 What Is a Branch?

πŸ“Œ Definition:

A branch is an independent line of development in the same repository.

βœ… Use Case:

  • Add features without breaking main
  • Work on bug fixes
  • Isolate experiments

πŸ“‚ Example:

You want to build a login feature:

  1. On your local repo:
git checkout -b feature/login
  1. Make changes and commit:
git add .
git commit -m "Add login UI"
  1. Push your branch:
git push origin feature/login
  1. Later, merge it back into main.

πŸ– What Is a Merge?

πŸ“Œ Definition:

A merge brings together the history and changes from one branch into another.

βœ… Use Case:

  • Finalize a feature or fix
  • Combine branches for release
  • Sync updates from other team members

πŸ“‚ Example:

You want to merge feature/login into main.

  1. Switch to main:
git checkout main
  1. Pull in the changes:
git merge feature/login
  1. Push:
git push origin main

🧠 GitHub also allows pull requests to handle merges with review and CI checks.


πŸ”„ Summary Table

Concept What It Is Use Case Where It Lives Common Command
Fork Copy of entire repo Contribute to another repo On GitHub Fork via UI
Branch Line of development Add feature, fix bug Inside one repo git checkout -b branchname
Merge Combine branches Finalize feature, release Any Git repo git merge branchname

🧭 Visual Git Workflow: Fork β†’ Branch β†’ PR β†’ Merge

flowchart LR
    A[Original Repo - main] -->|Fork| B[Your Forked Repo - main]
    B -->|Create Branch| C[feature/login]
    C -->|Make Commits| D[Commits]
    D -->|Push to Fork| E[Pull Request]
    E -->|Merge| F[Original Repo - main]
Loading

πŸ“˜ Summary

You're not just learning C# β€” you're learning how modern cloud-native development works with compiled languages, containers, CI/CD pipelines, GitHub environments, and Git workflows.

🧠 Git & GitHub Beginner Automation Script

This bash script demonstrates the most common Git commands in a beginner-friendly way, complete with inline notes.

#!/bin/bash

βœ… STEP 1: Initialize a new local repo and push to GitHub

mkdir myproject && cd myproject echo "# My MSSA Demo Project" > README.md

git init # Start tracking this directory with Git git add README.md # Stage the README file git commit -m "Initial commit" # Save a snapshot of the project git branch -M main # Rename default branch to 'main' git remote add origin https://github.com/YOUR-USERNAME/mssa3demo.git # Link to your GitHub repo git push -u origin main # Push local repo to GitHub

βœ… STEP 2: Simulate collaboration from two users

mkdir C:/GitHub.bob # Create a local directory for the clone cd C:/GitHub.bob git clone https://github.com/YOUR-USERNAME/mssa3demo.git cd mssa3demo code . # Open in VS Code

βœ… STEP 3: Alice creates a conflicting change

git checkout -b alice-conflict echo "This is Alice's version of the file." > shared.txt git add shared.txt git commit -m "Alice adds her version of shared.txt" git push -u origin alice-conflict

βœ… STEP 4: Bob creates his own conflicting change

git checkout -b bob-conflict echo "This is Bob's version of the file." > shared.txt git add shared.txt git commit -m "Bob adds his version of shared.txt" git push -u origin bob-conflict

βœ… STEP 5: Alice merges main (expect conflict)

git fetch origin git checkout alice-conflict git merge origin/main # Will trigger a conflict

Resolve the conflict manually in shared.txt

βœ… STEP 6: Finalize conflict resolution

git add shared.txt git commit -m "Resolve merge conflict in shared.txt" git push

πŸ’‘ This script helps visualize branching, conflict, and collaboration workflows for new developers. Use it in demos, classes, or as part of your onboarding guide.

Great question! Here's a clear, non-technical explanation of the difference between an engine like Node.js and an IDE like Visual Studio or RStudio β€” using everyday examples:


πŸ”§ What is Node.js (Engine)?

Think of Node.js like a car engine.

It runs the code β€” specifically JavaScript code β€” behind the scenes. Just like a car engine turns fuel into motion, Node.js turns your code into something that can actually do things, like handle a website, talk to a database, or send you a notification.

🧠 Everyday Example:

Imagine you wrote a recipe (your code) for making coffee. Node.js is the coffee machine that reads your recipe and actually makes the coffee. β˜•

  • You don’t write your recipe in the coffee machine β€” it just executes it.
  • It doesn’t care what your kitchen looks like β€” it just does its job.

πŸ–₯️ What is an IDE (like VS Studio or RStudio)?

An IDE (Integrated Development Environment) is more like your kitchen.

It’s where you write, organize, test, and edit your recipe (code). It gives you:

  • Measuring cups (syntax highlighting)
  • Timers (debugging tools)
  • Recipe books (documentation help)
  • Organized counters (file management)

It’s the place where you create and fine-tune your recipe before you give it to the coffee machine (Node.js) to run.

🧠 Everyday Example:

  • Visual Studio is like a kitchen that supports many cuisines: JavaScript, C#, Python, and more.
  • RStudio is a kitchen made specifically for data science and R programming β€” great for building graphs, reports, and dashboards.

🧩 So, how do they work together?

Tool What it does Real-world analogy
Node.js Runs your JavaScript code (engine) Coffee machine
VS Studio Write and manage your code (IDE) Full-featured modern kitchen
RStudio Write R code and build dashboards Specialized kitchen for data chefs

🏁 Summary:

  • Node.js is the engine that executes JavaScript.
  • RStudio / Visual Studio are places where you write and refine the code before it runs.
  • You write your code in an IDE. You run it using an engine like Node.js.

That’s an excellent question, and you’re not aloneβ€”this is where a lot of people get confused, especially when you’re blending R, JavaScript, and other engines in tools like RStudio.

Let’s clear it up step by step in plain language:


🌟 Why you can run JavaScript in RStudio without Node.js

βœ… Short Answer: You’re not actually running standalone JavaScript the same way Node.js does β€” you’re letting R send instructions to your web browser, and the browser’s built-in JavaScript engine runs them.

βœ… Slightly Longer Answer: Here’s what’s happening:

  1. RStudio is primarily an IDE for R.

  2. Packages like htmlwidgets, plotly, and echarts4r generate HTML + JavaScript code inside R.

  3. When you call e_charts() or plotlyOutput(), RStudio builds an HTML file behind the scenes.

  4. That HTML has:

    • Your data
    • Some JSON config
    • A <script> tag that loads JavaScript in your web browser
  5. The web browser (Chrome, Firefox, etc.) actually executes the JavaScript β€” not Node.js.

In other words:

βœ… You don’t need Node.js because your browser already knows how to run JavaScript.


🧠 Simple Analogy

Imagine you’re:

  • RStudio: the chef who writes a recipe.
  • JavaScript in RStudio: instructions you slip into the recipe (like β€œsprinkle cinnamon”).
  • Web Browser: the cook who reads the recipe and follows all the instructions.

Node.js is like a separate robot chef that also knows how to read recipes but doesn’t need a browser kitchen. But if you already have a cook (your browser), you don’t need Node.js just to follow JavaScript steps.


🧩 How is this different from Node.js?

What Runs It? What You Need It For
Browser JavaScript Making interactive charts in RMarkdown, Shiny apps, or HTML widgets
Node.js JavaScript Running backend servers, APIs, and stand-alone scripts without a browser

So:

  • Browser JavaScript = runs in your viewer pane or browser tab
  • Node.js JavaScript = runs on your computer/server outside the browser

βœ… Quick Examples:

No Node.js Needed:

library(echarts4r)

data.frame(x = 1:10, y = rnorm(10)) |>
  e_charts(x) |>
  e_line(y)

(This makes a JavaScript chart β€” but your browser runs it.)

Needs Node.js:

node my_server.js

(This starts a web server that never touches your browser.)


βœ… TL;DR: When you’re working in RStudio:

You can create and embed JavaScript for visualization without Node.js, because RStudio hands it off to your web browser to run.

Node.js is only needed if you want to:

  • Run JavaScript without a browser
  • Build backend apps, APIs, or command-line tools

Great! Here's the full explanation bundled together β€” perfect for your personal notes, RPubs post, GitHub wiki, or even a tech blog article. This version now includes the extra clarification about how JavaScript gets executed in RStudio without Node.js, plus a bonus diagram-style summary.


🧠 What's the Difference Between Node.js and RStudio/VS Studio? (And Why Can I Run JS Without Node?)

πŸ”§ Node.js = Engine

What it is: A runtime that executes JavaScript code on your local machine or server β€” without a browser.

Think of it like: A standalone coffee machine. You feed it JavaScript instructions, and it brews up data, backend logic, or a live API server β€” no browser needed.


πŸ–₯️ RStudio / Visual Studio = IDE (Integrated Development Environment)

What it is: A place to write, organize, and debug code in many languages β€” including R, Python, C#, or JavaScript (in some cases).

Think of it like: A kitchen where you test recipes. The IDE doesn't execute all code types itself β€” it just helps you prepare them and sometimes calls on another engine (like your browser or Node.js) to run the final steps.


🀯 So Why Can I Run JavaScript in RStudio Without Node.js?

βœ… Because you're not really using Node.js β€” you're letting R generate JavaScript code that your web browser runs.

🧩 Here's how it works:

  1. You use an R package like echarts4r, plotly, or htmlwidgets.
  2. That package writes an HTML file with embedded JavaScript.
  3. RStudio opens that HTML in the Viewer (or browser).
  4. The browser (which has a JavaScript engine built-in) runs the JS code β€” not Node.js.

πŸ’‘ So you don’t need Node.js because your browser already knows how to execute JavaScript.


πŸ” Summary Comparison

Tool Role Executes JS? Needs Node.js? Example Use
Node.js JS engine βœ… Yes (server-side) βœ… Yes Backend APIs, CLI tools, file processing
Browser Client renderer βœ… Yes (client-side) ❌ No View charts from echarts4r, plotly
RStudio IDE / Editor ❌ No (prepares code) ❌ No Write R + JS; browser runs the JS

πŸ“Š Real Example

library(echarts4r)

df <- data.frame(x = 1:10, y = rnorm(10))

df |>
  e_charts(x) |>
  e_line(y)

β˜• RStudio builds a web page. 🌐 Your browser reads it. βš™οΈ Browser JS engine (like V8 or SpiderMonkey) runs it. 🚫 Node.js is not involved.


βœ… When You Do Need Node.js

  • Building web servers in JavaScript
  • Running JS from the command line
  • Automating tasks outside the browser
  • Powering backend logic in tools like React, Express, etc.

Got it! Here's a concise, non-technical explanation you can use before your case study (e.g. on LinkedIn, in an article, or in a presentation):


πŸ“‹ What Is a Kanban Board (And Why Does It Matter in Software Development)?

A Kanban board is like a visual to-do list, but smarter.

Instead of juggling tasks in your head or a notebook, you organize them into columns like:

  • 🟨 To Do
  • 🟧 In Progress
  • βœ… Done

Each task is a card that moves from left to right as work progresses. Think of it like moving dinner orders across a kitchen line β€” everyone knows what’s cooking and what’s ready to serve.

In software development, this helps teams:

  • πŸ‘€ See who's working on what
  • 🧠 Avoid overload (too many tasks at once)
  • ⏱️ Track progress at a glance

Tools like GitHub Projects, Azure DevOps, and Jira all use Kanban boards β€” but they handle tasks, automation, and structure differently depending on your team’s needs.


Absolutely β€” let’s compare GitHub Projects, Azure DevOps, and Jira in the context of Kanban boards, especially how each handles:

  • Work items (cards)
  • Boards
  • Backlogs
  • Labels/tags
  • Automation
  • User stories / PBIs (Product Backlog Items)

πŸ“Š Quick Comparison Table

Feature GitHub Projects Azure DevOps Jira
Kanban Board Name GitHub Projects (Beta / V2) Boards (part of Boards module) Boards (in Jira Software)
Work Item Type Issues or Pull Requests PBIs, Tasks, Bugs, etc. Issues (Stories, Tasks, Bugs)
Custom Fields βœ… (Project V2 supports custom fields) βœ… Full support (priority, points) βœ… Extensive (story points, labels)
Columns Manual or auto with filters Based on workflow state Based on status in workflow
Backlog Support 🟑 (manually simulated via filters) βœ… Dedicated backlog board βœ… Dedicated backlog view
Workflows / Automation βœ… Basic (rules, filters) βœ… Rich (rules, pipelines, states) βœ… Advanced (Jira Automation)
Hierarchies (Epics) 🟑 Labels + custom fields only βœ… Epics β†’ Features β†’ PBIs βœ… Epics β†’ Stories β†’ Subtasks
Ideal For OSS projects, GitHub-native teams Microsoft stack, CI/CD-heavy teams Agile teams w/ complex workflows
Hosted Where? GitHub (cloud only) Azure DevOps (cloud/on-prem) Atlassian Cloud or Data Center

🧱 Work Item Equivalents

Concept GitHub Azure DevOps Jira
Epic Label / custom field Epic (optional) Epic
Story / Feature Issue or custom type Product Backlog Item (PBI) Story / Issue
Task Issue or linked Issue Task (child of PBI or Epic) Subtask
Bug Issue with label "bug" Bug item Bug

πŸ› οΈ How Boards Work in Each Platform

πŸ”Ή GitHub Projects (Beta / V2)

  • Built around Issues and Pull Requests.

  • You create a Project board (Kanban-style).

  • You can:

    • Add custom fields (status, priority, estimate)
    • Set rules (auto-move to "Done" when PR closed)
    • Use filters + groups to organize cards.
  • No formal backlog β€” simulate using a column or filtered view.

  • Great for lightweight teams, open-source, or GitHub-native flows.

πŸ” Automation: "Move to 'In Progress' when status is 'Working'" β€” very limited, but growing.


πŸ”· Azure DevOps

  • Strongest when paired with Agile/Scrum templates.

  • PBIs (Product Backlog Items) are central:

    • Can link Tasks, Bugs, Features, and Epics.
  • Has a clear Backlog view for grooming.

  • Kanban board reflects state transitions (e.g., New β†’ Active β†’ Done).

  • Excellent for DevOps pipelines, integration with repos, and traceability.

πŸ” Automation: State changes, builds, and deploys can auto-update items.


🟑 Jira

  • Highly customizable. Uses Workflows, Statuses, and Schemes.
  • Issue types: Epic > Story > Task/Subtask.
  • Kanban and Scrum boards both supported.
  • Dedicated Backlog view, sprints, and burndown charts.
  • Great for cross-functional Agile teams and complex process mapping.

πŸ” Automation: Very rich. Auto-create subtasks, trigger Slack messages, auto-close items on PR merge, etc.


🧠 Summary: When to Use What

Tool Best For... Consider If...
GitHub Projects Teams already using GitHub repos, OSS, solo projects You want to stay lightweight and live inside GitHub
Azure DevOps Enterprise CI/CD with Microsoft stack You need tight repo β†’ pipeline β†’ board integration
Jira Cross-team Agile with layers of tracking You need epics, story points, sprints, and automation

βœ… Visual Example

Level GitHub Projects Azure DevOps Jira
Epic Label: epic Epic work item Epic issue
Feature Issue Feature work item Story
Task Linked issue Task linked to PBI Subtask under story

πŸ’¬ TL;DR

  • GitHub Projects is simple, fast, and GitHub-native β€” great for engineering-led teams.
  • Azure DevOps is best for engineering + CI/CD-heavy orgs with structure and traceability.
  • Jira is king for product + Agile orgs needing layered control, PM dashboards, and deep integrations.

Great question! Let’s break it down in a clear way:


πŸ’‘ Why Front-End Web Apps Feel Faster Than Back-End-Heavy Ones

When you run a web app in a browser, it often feels faster using front-end technologies (like HTML/CSS/JavaScript/React) vs relying heavily on back-end processing (like PHP, Python, or even RShiny or Flask). Here’s why:


⚑️ 1. Front-End Apps Run In the Browser

  • Front-end code is downloaded and executed locally in your browser.
  • That means fewer round trips to the server after the initial page load.
  • Apps built with React, Vue, or Svelte feel fast because they handle routing, rendering, and UI updates on the client side.

πŸ” You don’t have to keep going back to the server every time you click a button or open a tab.


🐒 2. Back-End Apps Depend on the Server for Everything

  • Every interaction (button click, dropdown, tab change) usually sends a request to the server.

  • The server processes it, generates new HTML, and sends it back.

  • This causes latencyβ€”especially if:

    • Your server is far away 🌍
    • The app is large and not optimized
    • There are database calls or authentication delays

🧠 3. Front-End Uses Asynchronous JavaScript (AJAX / Fetch)

  • Front-end apps can talk to APIs asynchronouslyβ€”meaning the user doesn’t have to wait for one thing to finish before another starts.
  • Back-end apps (unless heavily optimized) often block interactions until the full request is done.

🧳 4. Front-End Can Cache Things Smartly

  • Browsers cache assets (JavaScript files, fonts, CSS), which reduces load times on repeat visits.
  • You can also use tools like service workers or CDNs to load assets instantly.

πŸ” TL;DR:

Front-End Web App Back-End Heavy App
Runs in browser Runs on server
Fast UI updates Slower UI refreshes
Less server load More server calls
Feels "snappy" Feels "reload-y"

βœ… When to Use Which?

  • Use front-end-heavy apps when you need:

    • Fast, modern, interactive experiences
    • Real-time UIs (like dashboards, SaaS tools)
  • Use back-end-heavy apps when you need:

    • Secure data handling
    • Dynamic content generation
    • Heavy computation (e.g., ML/AI, PDF generation)

If you're building something like a RShiny dashboard, which is very back-end driven, you can still speed it up using:

  • reactlog to optimize reactive expressions
  • Async or promises
  • Caching or preloading heavy objects

Great question! ASP.NET and .NET MAUI are both part of the .NET ecosystem, but they serve very different purposes and are used to build very different types of applications.

Let’s break it down:


🧱 ASP.NET

➑️ Used to build: Web Applications ➑️ Runs on: Browser via a web server (IIS, Kestrel, Azure, etc.)

πŸ” What it is:

ASP.NET (especially ASP.NET Core) is a web framework for building:

  • Web APIs
  • Server-side web apps (Razor Pages, MVC)
  • Real-time apps (with SignalR)
  • Blazor Server/Blazor WebAssembly apps (modern C# front-end)

πŸ’‘ Key Features:

  • Built for delivering HTML/CSS/JS over HTTP
  • Scalable for enterprise web apps
  • Can host RESTful APIs (like for mobile apps to consume)
  • Often deployed to cloud (Azure, AWS, etc.)

🧠 Think:

β€œIf you need a website, a dashboard, or a web API… use ASP.NET.”


πŸ“± .NET MAUI (Multi-platform App UI)

➑️ Used to build: Cross-platform apps for mobile & desktop ➑️ Runs on: Device (Windows, Android, iOS, macOS)

πŸ” What it is:

.NET MAUI is the evolution of Xamarin.Forms, designed to let you write one C# app that runs natively on:

  • πŸ“± Android
  • 🍎 iOS
  • πŸ–₯️ macOS
  • πŸ’» Windows

πŸ’‘ Key Features:

  • Native app performance (uses platform-native UI controls)
  • Shared codebase across all platforms
  • One project file, multi-device outputs
  • Can use device hardware (camera, GPS, etc.)

🧠 Think:

β€œIf you need a mobile or desktop app that installs and runs outside the browser, go with .NET MAUI.”


🧾 Summary Table

Feature ASP.NET Core .NET MAUI
πŸ›  Type Web framework Cross-platform native app framework
🌐 Runs in Web browser (via server) Local device (native app)
πŸ“± Platforms Any browser (HTML/CSS/JS output) Android, iOS, Windows, macOS
🧩 UI HTML + CSS + Razor or Blazor Native UI (XAML or C#)
☁️ Best For Web apps, APIs, websites Mobile apps, desktop apps
πŸ”„ Deployment Azure, IIS, cloud servers App stores, direct download, sideload

βœ… Which Should You Learn or Use?

Goal Choose This
Build a website or web API βœ… ASP.NET Core
Build a mobile/desktop app βœ… .NET MAUI
Work with Blazor (Web UI in C#) βœ… ASP.NET + Blazor
Build both frontend + backend βœ… ASP.NET with MVC or Blazor
Deploy to Android/iOS βœ… .NET MAUI

Here’s a clean, GitHub-friendly Mermaid diagram that visually compares ASP.NET Core and .NET MAUI β€” perfect for inserting into your README.md or slides:


🧭 ASP.NET Core vs .NET MAUI (Mermaid Diagram)

flowchart TD
    A[".NET Platform"] --> B1["ASP.NET Core"]
    A --> B2[".NET MAUI"]

    B1 --> C1["Web Apps: Razor Pages, MVC"]
    B1 --> C2["Web APIs"]
    B1 --> C3["Blazor: Server / WebAssembly"]

    B2 --> D1["Mobile Apps: iOS / Android"]
    B2 --> D2["Desktop Apps: Windows / macOS"]

    C1 --> E1["Runs in Browser 🌐"]
    C2 --> E1
    C3 --> E1

    D1 --> E2["Runs on Device πŸ“±"]
    D2 --> E2

    style B1 fill:#3b82f6,stroke:#000,color:#fff
    style B2 fill:#10b981,stroke:#000,color:#fff
    style E1 fill:#fbbf24,stroke:#000,color:#000
    style E2 fill:#f87171,stroke:#000,color:#000
Loading

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors