The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .gitignore
├── 0_CLOUD-PATTERNS
    ├── 0_Starting-Points
    │   ├── 3-STEPS-TO-START.md
    │   ├── README.md
    │   └── VENDORS.md
    ├── 1_Viz-Systems
    │   ├── README.md
    │   ├── VIZ-examples.md
    │   ├── VIZ-four-evolve.md
    │   └── Viz-Cloud-Genomics
    │   │   └── README.md
    ├── 2_DevOps
    │   ├── README.md
    │   └── Terraform
    │   │   ├── README.md
    │   │   ├── main-aws.tf
    │   │   ├── main-azure.tf
    │   │   └── main-gcp.tf
    ├── 3_Machine-Learning
    │   ├── 2_Matrices_for_data_scientists.ipynb
    │   └── README.md
    ├── 4_Prompt-Katas
    │   ├── Learn-More.md
    │   ├── Prompt-tips.md
    │   ├── Prompts.md
    │   ├── README.md
    │   └── gemini-for-google-workspace-prompting-guide-101.pdf
    ├── README.md
    └── images
    │   ├── RYG-progress.png
    │   ├── aws-genomics-arch.png
    │   ├── data-lake.png
    │   ├── deployment-types-color.png
    │   ├── deployment-types.png
    │   ├── deploys.png
    │   ├── genomic-pipeline.png
    │   ├── lake-sketch.png
    │   ├── modern-cloud-arch.png
    │   ├── new-main.png
    │   ├── research-pipelines.png
    │   └── scale-jobs-arch.png
├── AWS
    ├── AWS-CLOUDLAKES.md
    ├── README.md
    ├── aws-courses.png
    └── aws.png
├── AlibabaCloud
    ├── README.md
    └── alibaba-cloud.png
├── Azure
    ├── Azure-CLOUDLAKES.md
    ├── README.md
    └── azure.png
├── GCP
    ├── GCP-CLOUDLAKES.md
    ├── README.md
    └── gcp.png
├── IBM
    └── README.md
├── LICENSE
├── NVIDIA
    └── README.md
├── README.md
├── images
    ├── 0-main.png
    ├── 1-main-gpt.png
    ├── 2a-ex-BQ.png
    ├── 2b-ex-Azure.png
    ├── 2c-ex-serverless-aws.png
    ├── LAMP-1.png
    ├── LAMP-2.png
    ├── LAMP-3.png
    ├── LAMP-4.png
    ├── alibaba-locations.png
    ├── aws-ci-cd.png
    ├── aws-locations.png
    ├── azure-locations.png
    ├── data-lakes
    │   ├── CLOUDLAKES.md
    │   ├── aws-cromwell.png
    │   ├── aws-idseq.png
    │   ├── aws-k8.png
    │   ├── aws-nextflow.png
    │   ├── aws-variantspark.png
    │   ├── azure-cromwell.png
    │   ├── cloud-k8.png
    │   ├── excalidraw-files
    │   │   ├── GCP-PAPI-k8.excalidraw
    │   │   ├── aws-k8.excalidraw
    │   │   └── cromwell.excalidraw
    │   ├── gcp-cromwell.png
    │   ├── gcp-deepvariant.png
    │   ├── gcp-k8.png
    │   ├── gcp-nextflow.png
    │   └── raw-k8.png
    ├── databricks-icon.png
    ├── gcp-locations.png
    ├── gcp-networks.png
    ├── ibm-cloud.png
    ├── learning-cloud.png
    ├── logos.png
    ├── prompt-kata-group.png
    ├── terraform-arch.png
    ├── trends.png
    └── viz-tools.png
└── z_utilities
    ├── .devcontainer
        ├── DOCKERFILE
        └── devcontainer.json
    ├── .metals
        └── metals.h2.db
    ├── .tours
        ├── aws-tour.tour
        ├── cloud-tour.tour
        └── gcp-tour.tour
    └── .vscode
        └── settings.json


/.gitignore:
--------------------------------------------------------------------------------
  1 | # Byte-compiled / optimized / DLL files
  2 | __pycache__/
  3 | *.py[cod]
  4 | *$py.class
  5 | 
  6 | # C extensions
  7 | *.so
  8 | 
  9 | # Distribution / packaging
 10 | .Python
 11 | build/
 12 | develop-eggs/
 13 | dist/
 14 | downloads/
 15 | eggs/
 16 | .eggs/
 17 | lib/
 18 | lib64/
 19 | parts/
 20 | sdist/
 21 | var/
 22 | wheels/
 23 | pip-wheel-metadata/
 24 | share/python-wheels/
 25 | *.egg-info/
 26 | .installed.cfg
 27 | *.egg
 28 | MANIFEST
 29 | 
 30 | # PyInstaller
 31 | #  Usually these files are written by a python script from a template
 32 | #  before PyInstaller builds the exe, so as to inject date/other infos into it.
 33 | *.manifest
 34 | *.spec
 35 | 
 36 | # Installer logs
 37 | pip-log.txt
 38 | pip-delete-this-directory.txt
 39 | 
 40 | # Unit test / coverage reports
 41 | htmlcov/
 42 | .tox/
 43 | .nox/
 44 | .coverage
 45 | .coverage.*
 46 | .cache
 47 | nosetests.xml
 48 | coverage.xml
 49 | *.cover
 50 | *.py,cover
 51 | .hypothesis/
 52 | .pytest_cache/
 53 | 
 54 | # Translations
 55 | *.mo
 56 | *.pot
 57 | 
 58 | # Django stuff:
 59 | *.log
 60 | local_settings.py
 61 | db.sqlite3
 62 | db.sqlite3-journal
 63 | 
 64 | # Flask stuff:
 65 | instance/
 66 | .webassets-cache
 67 | 
 68 | # Scrapy stuff:
 69 | .scrapy
 70 | 
 71 | # Sphinx documentation
 72 | docs/_build/
 73 | 
 74 | # PyBuilder
 75 | target/
 76 | 
 77 | # Jupyter Notebook
 78 | .ipynb_checkpoints
 79 | 
 80 | # IPython
 81 | profile_default/
 82 | ipython_config.py
 83 | 
 84 | # pyenv
 85 | .python-version
 86 | 
 87 | # pipenv
 88 | #   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
 89 | #   However, in case of collaboration, if having platform-specific dependencies or dependencies
 90 | #   having no cross-platform support, pipenv may install dependencies that don't work, or not
 91 | #   install all needed dependencies.
 92 | #Pipfile.lock
 93 | 
 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
 95 | __pypackages__/
 96 | 
 97 | # Celery stuff
 98 | celerybeat-schedule
 99 | celerybeat.pid
100 | 
101 | # SageMath parsed files
102 | *.sage.py
103 | 
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 | 
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 | 
117 | # Rope project settings
118 | .ropeproject
119 | 
120 | # mkdocs documentation
121 | /site
122 | 
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 | 
128 | # Pyre type checker
129 | .pyre/
130 | *.db
131 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/0_Starting-Points/3-STEPS-TO-START.md:
--------------------------------------------------------------------------------
 1 | # 3 Steps To Get Started in Cloud--->
 2 | 
 3 | 
 4 | 1. 🤔 **READ this Repo** and FAQ
 5 |     - this repo is a companion to my **'Cloud Careers and Certifications`** - [link](https://www.linkedin.com/learning/cloud-computing-careers-and-certifications-first-steps-14851328) course on LinkedIn Learning or Lynda.com course.  It is designed to be a first course for those who are new working with public cloud services
 6 |     - ❓ FAQ - here are the top 10 questions students ask about `learning-cloud` - [link](https://github.com/lynnlangit/learning-cloud/tree/master/CLOUD-PATTERNS/0_Starting-Points)
 7 | 2. 🤔 **SELECT a cloud vendor** (AWS, GCP...), set up a free trial (test) account for learning
 8 |     - See the main file in each vendor folders for links
 9 |       - for **AWS** go to `\AWS` folder -> `README.md`
10 |       - for **GCP** go to `\GCP` folder -> `README.md`, etc...
11 |     - Set up **MFA (multi-factor authentication)** on the root user account for your trial cloud account to protect against account misuse by others
12 |       - setup up MFA on AWS root user account - [link](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html) 
13 |       - setup MFA on GCP user accounts - [link](https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/CloudIAM/enable-mfa-for-user-accounts.html)
14 |     - Learn more about **cloud vendor differences** - [link](https://github.com/lynnlangit/learning-cloud/blob/master/CLOUD-PATTERNS/0_Starting-Points/VENDORS.md)
15 | 3. 💸 **SECURE and SETUP a budget alert** on your test account - I suggest alerting on spend of over $ 50 USD per day
16 |     - follow **best practices** for security a demo account (AWS example) - [link](https://dev.to/aws-heroes/stop-aws-account-hacks-1bim)
17 |     - pick a **scenario** or service to start learning
18 |     - build your project on the cloud and Learn...repeat!
19 | 
20 | # --->THEN GO BUILD!
21 | 
22 | 
23 | 
24 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/0_Starting-Points/README.md:
--------------------------------------------------------------------------------
 1 | # Learning Cloud FAQ - Top 10
 2 | 
 3 | - Q: **Which cloud?**
 4 |   - A: Most overall jobs - AWS
 5 |   - A: Cheapest, most performant to learn/experiment - GCP 
 6 |   - A: Fastest enterprise growth - Azure
 7 |   - A: Quantum - IBM
 8 | 
 9 | ---
10 | 
11 | - Q: **Which languages?**
12 |   - A: Python (application development)
13 |   - A: Terraform (infrastructure)
14 | ---
15 | 
16 | - Q: **Where to start?**
17 |   - A: Pick a vendor, setup a free trial account
18 |   - A: Set up multi-factor authentication for your login (email)
19 |   - A: Set up a billing alert, send to your email
20 | ---
21 | 
22 | - Q: **Which service(s)?**
23 |   - A: Core services are VMs, file storage (buckets) and security (AWS: EC2, S3, IAM....)
24 | ---
25 | 
26 | - Q: **How to get a job?**
27 |   - A: Build something, get certified, talk (post) about it - in this order
28 | ---
29 | 
30 | - Q: **How do I avoid a surprise, big cloud bill when learning?**
31 |   - A: Set a budget alert and notification
32 |   - A: Turn off VMs when not using
33 |   - A: Use smallest sized VMs/GPUs as is practical for testing
34 | ---
35 | 
36 | - Q: **What are some 'overlooked' areas?**
37 |   - A: Security, cost control - more jobs than qualified people
38 | ---
39 | 
40 | - Q: **Can I do Gen AI / ML on the cloud?**
41 |   - A: Most complete offering - GCP VertexAI
42 | ---
43 | 
44 | - Q: **Which certifications get me the highest paying jobs?**
45 |   - A: GCP
46 | ---
47 | 
48 | - Q: **Whare are the most interesting/useful cloud data services by vendor?**
49 |   - A: Azure - CoPilot(s), CosmosDB
50 |   - A: AWS - S3, EC2, AWS Braket (Quantum)
51 |   - A: GCP - BigQuery, VertexAI, DataProc (managed Apache Spark), Dataplex
52 |   - A: IBM - Qiskit (Quantum)
53 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/0_Starting-Points/VENDORS.md:
--------------------------------------------------------------------------------
 1 | # How to Select a Cloud Vendor
 2 | 
 3 | Selecting one or more cloud vendors is a key choice when adopting public cloud services.  I have done most of my production work with AWS or GCP.  However, for some scenarios, Azure or Alibaba Cloud are 'best fit' choices as well.  
 4 | 
 5 | The global market trends (shown below) can be seen as a starting point for you.  
 6 | 
 7 | ![Trends](https://github.com/lynnlangit/learning-cloud/blob/master/images/trends.png)  
 8 | 
 9 | It is important to further refine your selection based on the following:
10 | 
11 | - **services needed** 
12 |   - does a potential vendor offer your desired services in their cloud?
13 |   - comparing service x vendor, which fits best?
14 |   - example: does `AWS IoT` or `Azure IoT` better meet your needs?
15 | - **services location(s)** 
16 |   - does a potential vendor have your desired services in your preferred location(s)?
17 |   - where are their data center(s)?
18 | - **community cloud skills** 
19 |   - what is the size of the total technical community for a potential vendor? 
20 |    - what is the size of the local technical community in your geography for a potential vendor? 
21 | 
22 | ---
23 | 
24 | ## Vendor Characteristics
25 | 
26 | ### GCP - DEVELOPER & DATA SCIENCE CLOUD
27 | - Positive - easy to set up for dev/experiements, cheap/fast & scalable, innovative ML services
28 | - Negative - Enterprise setup/support complex, idiosyncratic (i.e. 'Googly') service implementation
29 | 
30 | ### AWS - DEVOPS CLOUD
31 | - Positive - market share/ partner ecosystm, huge variety of services
32 | - Negative - dated, security/cost management is arduous
33 | 
34 | ### Azure - ENTERPRISE CLOUD
35 | - Positive - Active Directory integration simplifies security, core services are solid performers
36 | - Negative - expensive, must test scalability by service
37 | 
38 | ### Alibaba Cloud - APAC CLOUD
39 | - Positive - good variety of services, well-priced
40 | - Negative - derivative of AWS, based in China (privacy concerns), requires US passport (or other ID) to setup account
41 | 
42 | ### IBM Cloud - QUANTUM CLOUD
43 | - Positive - innovation in quantum computing - great tools, useful Quantum libraries and tools
44 | - Negative - expensive for general cloud service
45 | 
46 | 
47 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/1_Viz-Systems/README.md:
--------------------------------------------------------------------------------
 1 | # Cloud Systems Visualization
 2 | 
 3 | Effectively visualizing cloud systems is key to not only building, but also growing and maintaining sytems.  There are a number of tools and techniques to use.
 4 | These include diagramming, drawing and connecting tools to existing (deployed) systems.  I did a series of keynotes about this topic as well.
 5 | 
 6 | ## Talks and Decks
 7 | 
 8 | ### Viz Systems
 9 | - 📺  Keynote: 2019 / 'Viz Cloud Systems' / GOTO: Berlin - [keynote](https://www.youtube.com/watch?v=HHitdmje1ok)
10 | - 📣  Slide deck: 2019 'Visualizing Cloud Systems' - [link](https://slides.com/lynnlangit/goto-viz-cloud-systems)
11 | - 📺  Talk: 2020 / 'Viz Cloud Systems' / GOTO: Chicago - [talk](https://www.youtube.com/watch?v=htmEA-dpX_4)
12 | - 📣  Slide deck: 2020 'Visualizing Cloud Systems' - [link](https://slides.com/lynnlangit/goto-visualizing-cloud-systems)
13 | - 📺  Talk: 2019 / 'Viz Cloud Systems' / Kandddinsky: Berlin - [talk](https://www.youtube.com/watch?v=DJdydx4g0v4)
14 | - 📣  Slide deck: 2020 'Cloud for Machine Learning' - [link](https://slides.com/lynnlangit/cloud-for-machine-learning)
15 | 
16 | ### Serverless
17 | - 📺  Keynote: 2019 / 'Viz Serverless Systems' / ServerlessConf: London - [keynote](https://www.youtube.com/watch?v=eNmGQOAedQ4)
18 | - 📣  Slide deck: 2019 'Visualizing Serverless Systems' - [link](https://slides.com/lynnlangit/viz-cloud-systems-18)
19 | - 📺  Talk: 2019 / 'Serverless Architectures' / NDC: Minnesota - [talk](https://www.youtube.com/watch?v=od4mrgJ9wW8)
20 | - 📺  Talk: 2017 / 'Serverless Reality' / NDC: Oslo - [talk](https://www.youtube.com/watch?v=PgZ2dxnj734)
21 | - 📣  Slide deck: 2018 'Serverless SQL' - [link](https://slides.com/lynnlangit/serverless-sql-queries-10)
22 | 
23 | ## Tools
24 | - 🖌️ Excalidraw: Hand-drawn looking diagrams - [link](https://excalidraw.com/)
25 | - 📣 Beautiful.ai: Stylized slides with diagrams - [link](https://www.beautiful.ai/)
26 | - 🛠️ Lucidcharts: general purpose diagramming tool, some AWS integration - [link](https://lucid.app/)
27 | - 🛠️ Mindmup (Mindmaps): maps and decision trees - [link](https://www.mindmup.com/)
28 | - 🛠️ Hava.io: live cloud diagrams, multiple system perspectives - [link](https://app.hava.io/)
29 | - 🛠️ Diagrams.com: cloud diagrams as code - [link](https://diagrams.mingrammer.com/docs/getting-started/examples)
30 | - 🛠️ Structurizr: Diagram code and systems - [link](https://structurizr.com/)
31 | 
32 | ## My Techniques and Articles
33 | - 📐 **Sketching as a starting point** - example (GCP CI/CD pipeline) -- [link](https://acloudguru.com/blog/engineering/cloud-based-ci-cd-on-gcp)
34 | - 📐 **User Perspectives (Researcher, Lab Lead, ...)** - example (Terra.bio on GCP WDL Workflows) -- [link](https://lynnlangit.medium.com/cloud-native-hello-world-for-bioinformatics-3beb1ab820a)
35 | - 📐 **Just-enough / evolving diagrams** - example (Azure Genomics Pipelines) --[link](https://lynnlangit.medium.com/azure-for-genomic-scale-workloads-ad3c989a3d0b)
36 | - 📐 **Right-sizing** - example (VariantSpark on AWS pipeline -- [link](https://lynnlangit.medium.com/scaling-custom-machine-learning-on-aws-part-3-kubernetes-5427d96f825b)
37 | - 📐 **Connected / live diagrams** - see link to Hava.io
38 | 
39 | ### Other Resources
40 | - 📖 Article: Technical Perspectives (Dev, DevOps, Security) - "The 5 Types of Architecture Diagrams" --[link](https://www.readysetcloud.io/blog/allen.helton/the-5-types-of-architecture-diagrams/)
41 | - 📖 Article: How to review a Software Architecture Diagram (from Simon Brown) -- [link](https://dev.to/simonbrown/how-to-review-a-software-architecture-diagram-6p0)
42 | - 📖 Post: Best Practices for Architecture Diagrams -- [link](https://sportebois.medium.com/better-architecture-diagrams-for-agile-teams-actionable-tips-and-lessons-e76627dc4315)
43 | - ⚙️ Standards: Fundamental Modeling Concepts (FMC), visualization guidelines -[link](http://www.fmc-modeling.org/visualization_guidelines)
44 | 
45 | ---
46 | 
47 | ## Example Visualizations
48 | 
49 | See this repo page for cloud system visualization examples --> [link](https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/1_Viz-Systems/VIZ-examples.md)
50 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/1_Viz-Systems/VIZ-examples.md:
--------------------------------------------------------------------------------
 1 | # Cloud Systems Visualization Examples
 2 | 
 3 | ## Talks and Decks
 4 | 
 5 | See this page for a list with links --> [link](https://github.com/lynnlangit/learning-cloud/tree/master/CLOUD-PATTERNS/1_Viz-Systems)
 6 | 
 7 | ---
 8 | 
 9 | ## Example Visualizations
10 | The following examples illustrate various concepts in cloud systems visualization.  Description plus tool used listed for each example.
11 | 
12 | ### 1. Conceptual system for Transactional Website (Excalidraw)
13 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/modern-cloud-arch.png" width=800>
14 | 
15 | ### 2. Conceptual design for Data Lake (Beautiful.ai)
16 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/data-lake.png" width=800>
17 | 
18 | ### 3. Conceptual design for Genomic Data Pipeline (Beautiful.ai)
19 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/genomic-pipeline.png" width=800>
20 | 
21 | ### 4. Cloud Pipeline implementation genomics choices (MindMup)
22 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/research-pipelines.png" width=1000>
23 | 
24 | ### 5. Sketch of architectural pattern for Cloud Lake (Excalidraw)
25 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/lake-sketch.png" width=800>
26 | 
27 | ### 6. Red-Yellow-Green DevOps progress (Lucidcharts)
28 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/RYG-progress.png" width=1000>
29 | 
30 | ### 7. AWS Genomics Pipeline (Lucidcharts)
31 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/aws-genomics-arch.png" width=1000>
32 | 
33 | ### 8. AWS CI-CD pipeline (Lucidcharts)
34 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/aws-ci-cd.png" width=1000>
35 | 
36 | ### 9. GCP Bioinformatics Processes including DataMesh (Excalidraw)
37 | <img src="https://github.com/lynnlangit/gcp-for-bioinformatics/blob/master/images/batch-pipelines.png" width=1000>
38 | 
39 | ### 10. GCP Scaling Jobs by Type (Lucidcharts)
40 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/scale-jobs-arch.png" width=1000>
41 | 
42 | 
43 | 
44 | ---
45 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/1_Viz-Systems/VIZ-four-evolve.md:
--------------------------------------------------------------------------------
 1 | # Cloud System Visualization Evolving Example
 2 | 
 3 | ## Concepts and Examples
 4 | 
 5 | - See this page for a list with links --> https://github.com/lynnlangit/learning-cloud/blob/master/CLOUD-PATTERNS/VIZ-concepts.md
 6 | - See this page for a list with examples --> https://github.com/lynnlangit/learning-cloud/blob/master/CLOUD-PATTERNS/VIZ-concepts.md
 7 | 
 8 | ---
 9 | 
10 | ## Four Evolving Example Visualizations
11 | The following examples illustrate evolving a cloud architecture via visualization.  Architecture moves from client/server to microservices.
12 | 
13 | ### 1. AWS Client/Server
14 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/LAMP-1.png" width=800>
15 | 
16 | ### 2. AWS Client/Server w/HA 
17 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/LAMP-2.png" width=800>
18 | 
19 | ### 3. AWS Serverless
20 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/LAMP-3.png" width=800>
21 | 
22 | ### 4. AWS Serverless w/ CI-CD
23 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/LAMP-4.png" width=1000>
24 | 
25 | 
26 | ---
27 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/1_Viz-Systems/Viz-Cloud-Genomics/README.md:
--------------------------------------------------------------------------------
 1 | # Vizualize Cloud Genomic Pipelines
 2 | 
 3 | Examples used in understand building Bioinformatics data analysis pipelines on the public cloud.
 4 | 
 5 | ## Overview
 6 | 
 7 | <img src="https://github.com/lynnlangit/TeamTeri/raw/master/Images/NGS-Workflow.png" width=600 align="right">
 8 | 
 9 | Sequencing top level processes types are listed below and shown in the conceptual diagram:
10 | - Wet lab / sequencer - prepped samples are sequenced on a machine
11 | - **Primary analysis** pipeline of sequencer data - sequencer machine output files are analyzed
12 | - **Secondary analysis** pipeline of primary analysis data - primary analysis output files are analyzed
13 | - **Teritary analysis** pipeline of secondary analysis data - secondary analysis output files are analyzed
14 | - Data storage and access - this includes genomic reference datasets, along with storage of genomic files all along these processes
15 | 
16 | High level processes diagram shown to the right: 
17 | 
18 | 
19 | 
20 | ---
21 | 
22 | ## Bio Tools Cloud Options
23 | 
24 | Shown below are 5 different patterns (on GCP) for deploying the COMPUTE layer to support scalable bioinformatics tools.  Simplified data lake (bucket) pattern is shown for the DATA layer.
25 | 
26 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/viz-tools.png" width=1000>
27 | 
28 | ### GCP Bioinfomatics 
29 | 
30 | Info about genomic pipeline architectures - [link](https://github.com/lynnlangit/gcp-for-bioinformatics/blob/master/6_ARCHITECTURE.md) and shown below. Example shows 'vision-on-a-page' for primary, secondary and tertiary cloud-based bioinformatics data analysis.  Example uses simplified representation of DATA layer and focuses on COMPUTE layer concepts for this reference architecture.
31 | 
32 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/new-main.png" width=1000>
33 | 
34 | 
35 | 
36 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/2_DevOps/README.md:
--------------------------------------------------------------------------------
 1 | # DevOps Patterns
 2 | 
 3 | Cloud DevOps Patterns center around cloud service infrastructure deployment tools, types and patterns.    
 4 | 
 5 | There are many choices.
 6 | The diagram below summarizes different ways I work with clients to deploy cloud solutions.
 7 | 
 8 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/deploys.png" width=800>
 9 | 
10 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/2_DevOps/Terraform/README.md:
--------------------------------------------------------------------------------
 1 | # Terraform Basics
 2 | 
 3 | (From the Terraform docs...) 
 4 | - *"Terraform is an **infrastructure as code tool** that lets you define and manage infrastructure resources through human-readable configuration files.* 
 5 | - *It allows you to use a consistent workflow over your infrastructure lifecycle, regardless of the resource provider. (supports AWS, Azure, GCP and more)*
 6 | - *Infrastructure as code workflows let you declaratively manage a variety of services and automate your changes to them, reducing the risk of human error through manual operations."*
 7 | 
 8 | - Concise article "What is Terraform?" --> https://medium.com/nerd-for-tech/nfrastructure-as-code-using-terraform-cb383017cbeb
 9 | 
10 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/terraform-arch.png" width=800>
11 | 
12 | ## Using Terraform
13 | 
14 | Basic commands are as follows:
15 |  - create a `main.nf` file in the current directory (example shown in this directory)
16 |  - run these commands
17 |    - `terraform init` to initialize the project
18 |       - `terraform plan` to plan the changes
19 |       - `terraform apply` to apply the changes
20 |       - `terraform destroy` to destroy the project
21 |       
22 | ## Terraform Concepts
23 | 
24 | There are a number of patters/concepts to consider/include:
25 | - Terraform Modules
26 | - Terraform Workspaces
27 | - Variable Files (tfvars)
28 | - Secrets storage / maangement (integrate w/provider, i.e. AWS Secrets Manager, etc...)
29 | - Testing - Terratest libraries
30 | - Terraform CDK (use programming languages to generate TF files)
31 | - CI/CD env - Terraform Cloud or provider (i.e. AWS Code Deploy, Code Build, Code Commit, etc...)
32 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/2_DevOps/Terraform/main-aws.tf:
--------------------------------------------------------------------------------
 1 | provider "aws" {
 2 |   region     = "us-east-1"
 3 |   # access_key = "xxx"
 4 |   # secret_key = "yyg"
 5 | }
 6 | 
 7 | resource "aws_bucket" "my_first_bucket" {
 8 |   bucket = "my-first-bucket"
 9 |   acl    = "private"
10 |   versioning {
11 |     enabled = true
12 |   }
13 | }


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/2_DevOps/Terraform/main-azure.tf:
--------------------------------------------------------------------------------
  1 | //create a terraform main file that creates a virtual machine in azure
  2 | provider "azurerm" {
  3 |   version = "=2.0.0"
  4 |   features {}
  5 | }
  6 | resource "azurerm_resource_group" "my_resource_group" {
  7 |   name     = "my-resource-group"
  8 |   location = "West Europe"
  9 | }
 10 | resource "azurerm_virtual_network" "my_virtual_network" {
 11 |   name                = "my-virtual-network"
 12 |   address_space       = ["address_space"]
 13 |   location            = azurerm_resource_group.my_resource_group.location
 14 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 15 | }
 16 | resource "azurerm_subnet" "my_subnet" {
 17 |   name                 = "my-subnet"
 18 |   resource_group_name  = azurerm_resource_group.my_resource_group.name
 19 |   virtual_network_name = azurerm_virtual_network.my_virtual_network.name
 20 |   address_prefixes     = ["address_prefixes"]
 21 | }
 22 | resource "azurerm_network_interface" "my_network_interface" {
 23 |   name                = "my-network-interface"
 24 |   location            = azurerm_resource_group.my_resource_group.location
 25 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 26 |   ip_configuration {
 27 |     name                          = "my-ip-configuration"
 28 |     subnet_id                     = azurerm_subnet.my_subnet.id
 29 |     private_ip_address_allocation = "Dynamic"
 30 |   }
 31 | }
 32 | resource "azurerm_public_ip" "my_public_ip" {
 33 |   name                = "my-public-ip"
 34 |   location            = azurerm_resource_group.my_resource_group.location
 35 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 36 |   allocation_method   = "Dynamic"
 37 | }
 38 | resource "azurerm_network_interface_backend_address_pool_association" "my_network_interface_backend_address_pool_association" {
 39 |   network_interface_id      = azurerm_network_interface.my_network_interface.id
 40 |   ip_configuration_name     = azurerm_network_interface.my_network_interface.ip_configuration[0].name
 41 |   backend_address_pool_id   = azurerm_lb_backend_address_pool.my_backend_address_pool.id
 42 | }
 43 | resource "azurerm_lb" "my_lb" {
 44 |   name                = "my-lb"
 45 |   location            = azurerm_resource_group.my_resource_group.location
 46 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 47 |   frontend_ip_configuration {
 48 |     name                 = "my-frontend-ip-configuration"
 49 |     public_ip_address_id = azurerm_public_ip.my_public_ip.id
 50 |   }
 51 | }
 52 | resource "azurerm_lb_backend_address_pool" "my_backend_address_pool" {
 53 |   name                = "my-backend-address-pool"
 54 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 55 |   loadbalancer_id     = azurerm_lb.my_lb.id
 56 | }
 57 | resource "azurerm_lb_nat_pool" "my_lb_nat_pool" {
 58 |   name                = "my-lb-nat-pool"
 59 |   resource_group_name = azurerm_resource_group.my_resource_group.name
 60 |   location            = azurerm_resource_group.my_resource_group.location
 61 |   loadbalancer_id     = azurerm_lb.my_lb.id
 62 |   protocol            = "Tcp"
 63 |   frontend_port_start = 50000
 64 |   frontend_port_end   = 50119
 65 |   backend_port        = 22
 66 | }
 67 | resource "azurerm_virtual_machine" "my_virtual_machine" {
 68 |   name                  = "my-virtual-machine"
 69 |   location              = azurerm_resource_group.my_resource_group.location
 70 |   resource_group_name   = azurerm_resource_group.my_resource_group.name
 71 |   network_interface_ids = [azurerm_network_interface.my_network_interface.id]
 72 |   vm_size               = "Standard_B1ls"
 73 |   delete_os_disk_on_termination = true
 74 |   delete_data_disks_on_termination = true
 75 |   storage_image_reference {
 76 |     publisher = "Canonical"
 77 |     offer     = "UbuntuServer"
 78 |     sku       = "18.04-LTS"
 79 |     version   = "latest"
 80 |   }
 81 |   storage_os_disk {
 82 |     name              = "my-os-disk"
 83 |     caching           = "ReadWrite"
 84 |     create_option     = "FromImage"
 85 |     managed_disk_type = "Standard_LRS"
 86 |   }
 87 |   os_profile {
 88 |     computer_name  = "my-computer-name"
 89 |     admin_username = "my-admin-username"
 90 |     admin_password = "my-admin-password"
 91 |   }
 92 |   os_profile_linux_config {
 93 |     disable_password_authentication = false
 94 |   }
 95 |   boot_diagnostics {
 96 |     storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
 97 |   }
 98 | }
 99 | resource "azurerm_storage_account" "my_storage_account" {
100 |   name                     = "my-storage-account"
101 |   resource_group_name      = azurerm_resource_group.my_resource_group.name
102 |   location                 = azurerm_resource_group.my_resource_group.location
103 |   account_tier             = "Standard"
104 |   account_replication_type = "LRS"
105 |   enable_https_traffic_only = true
106 | }
107 | resource "azurerm_storage_container" "my_storage_container" {
108 |   name                  = "my-storage-container"
109 |   storage_account_name  = azurerm_storage_account.my_storage_account.name
110 |   container_access_type = "private"
111 | }
112 | resource "azurerm_storage_share" "my_storage_share" {
113 |   name                 = "my-storage-share"
114 |   storage_account_name = azurerm_storage_account.my_storage_account.name
115 |   quota                = 50
116 | }
117 | resource "azurerm_storage_share_directory" "my_storage_share_directory" {
118 |   name                 = "my-storage-share-directory"
119 |   storage_share_name   = azurerm_storage_share.my_storage_share.name
120 |   storage_account_name = azurerm_storage_account.my_storage_account.name
121 | }
122 | resource "azurerm_storage_share_file" "my_storage_share_file" {
123 |   name                 = "my-storage-share-file"
124 |   storage_share_name   = azurerm_storage_share.my_storage_share.name
125 |   storage_account_name = azurerm_storage_account.my_storage_account.name
126 |   source               = "source"
127 | }
128 | resource "azurerm_storage_blob" "my_storage_blob" {
129 |   name                   = "my-storage-blob"
130 |   storage_account_name   = azurerm_storage_account.my_storage_account.name
131 |   storage_container_name = azurerm_storage_container.my_storage_container.name
132 |   type                   = "Block"
133 |   source                 = "source"
134 | }
135 | resource "azurerm_storage_queue" "my_storage_queue" {
136 |   name                 = "my-storage-queue"
137 |   storage_account_name = azurerm_storage_account.my_storage_account.name
138 | }
139 | resource "azurerm_storage_table" "my_storage_table" {
140 |   name                 = "my-storage-table"
141 |   storage_account_name = azurerm_storage_account.my_storage_account.name
142 | }
143 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/2_DevOps/Terraform/main-gcp.tf:
--------------------------------------------------------------------------------
 1 | provider "gcp" {
 2 |   region     = "us-central1"
 3 |   project    = "my-test-project"
 4 | }
 5 | 
 6 | resource "google_compute_instance" "my_test_instance" {
 7 |   name         = "my-test-instance"
 8 |   machine_type = "f1-micro"
 9 |   zone         = "us-central1-a"
10 | 
11 |   boot_disk {
12 |     initialize_params {
13 |       image = "debian-cloud/debian-9"
14 |     }
15 |   }
16 | 
17 |   network_interface {
18 |     network = "default"
19 | 
20 |     access_config {
21 |       // Include this section to give the instance a public IP address
22 |       public_ip = "true"
23 |     }
24 |   }
25 | }


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/3_Machine-Learning/README.md:
--------------------------------------------------------------------------------
 1 | # ML Patterns
 2 | 
 3 | ML (Machine Learning), also called AI (Artificial Intelligence) is a set of services and tools.  Each cloud vendor offers a mixture of these items.
 4 | 
 5 | ## ML Basics
 6 | 
 7 | If you are new to ML, core libraries and ML algorithm visualization sites can speed up learning.
 8 | - Interactive Visualizations at 'MLU-Explain' - https://mlu-explain.github.io/
 9 | - Core Python learning ML library of 'sci-kit learn' - https://scikit-learn.org/
10 | - Google AI, ML education site - https://ai.google/education/
11 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/4_Prompt-Katas/Learn-More.md:
--------------------------------------------------------------------------------
1 | # Learn More about Cloud (and Code) Prompting
2 | 
3 | - "The Illustrated Transformer" --> https://jalammar.github.io/illustrated-transformer/
4 | - Fun dots Gemini Demo --> https://huggingface.co/spaces/Trudy/gemini-realtime-dots
5 | - Live Coding with Gemini --> https://huggingface.co/spaces/Trudy/gemini-live-p5
6 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/4_Prompt-Katas/Prompt-tips.md:
--------------------------------------------------------------------------------
 1 | # Prompt Tips
 2 | 
 3 | ## Follow the standard format
 4 | - As a 'who the LLM is'
 5 | - Using 'provide context'
 6 | - Generate 'describe output in detail' as 'describe output format` (i.e. list, table, etc...)
 7 | - Limit output values, i,e `Answer with <valueA> or <valueB> only`
 8 | - For a 'who is the output audience'
 9 | 
10 | ## Improvements
11 | - Work on one task at a time
12 | - Do not skip steps
13 | - Show your reasoning
14 | - Cite sources including URLs
15 | - If you can not generate cited information do not guess, say 'I can not find relavent information'
16 | - Provide examples of desired output
17 | 
18 | ## Tone
19 | - Be specific
20 | - Use active voice
21 | - Use 'West Coast' US English
22 | - Does politeness matter? i.e. 'please, thanks, good job...' etc
23 | 
24 | ## Pre-RAG Augmentation
25 | - 'Trial' RAG via huge context windows (Gemini 2M tokens)
26 | - Provide URLs -or- directly upload PDFs
27 | 
28 | # For Specific LLMs
29 | 
30 | ## Gemini for Google Cloud
31 | - Prompt Guidance --> https://cloud.google.com/gemini/docs/discover/write-prompts
32 | 
33 | ## Google Gemini API
34 | - Prompt Guidance --> https://ai.google.dev/gemini-api/docs/prompting-strategies
35 | 
36 | ## Google Imagen 
37 | - Prompt Guidance --> https://ai.google.dev/gemini-api/docs/imagen-prompt-guide
38 | 
39 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/4_Prompt-Katas/Prompts.md:
--------------------------------------------------------------------------------
 1 | # List of Prompts
 2 | 
 3 | Problems/ tools / prompts
 4 | 
 5 | ## Date
 6 | 
 7 | ### March 25, 2025
 8 | - Problem / Task: **Test the impact of politeness**
 9 | - Test prompt: "Prompt: You are an expert in creating effective prompts for <LLM>. Do these tasks one at a time.    
10 | Do not skip steps. The first task is to explain the impact of including 'polite words' such as 'please' and 'thank you' in prompts.  Return the results in a list.    
11 | The second task is to provide an two contrastive examples of a complex prompt and generated results: one includes "polite words" and the other does not.  Return the results in a list as well.
12 | - Tested with Google Gemini, ChatGPT and Claude.ai - most significant impact noted in Claude.ai output.
13 | 
14 | ### For March 20, 2025
15 | - Problem/Task(s): **Slurm-to-Batch/Singularity(Apptainer) to Docker**
16 |     1. Backgrounder: *You are an expert in application container architecture and implementation.  Generate 5 key steps to translate existing Singularity container to Docker containers to be run on Google Cloud using the Google Batch service. Produce the output in a table.*
17 |     2. Add context: *You are a Cloud Architect who specializes in designing and building proof of concept architectures which include best practices for Google Cloud.*
18 |     3. Add transparency: <Add to prompt> *Work step-by-step and show your work.  Cite URL references.  Rank output steps in priority order.*
19 |     4. Try different models: Try with experiemental and thinking models
20 |     5. Try different model params: reduce Temperature, add grounding with Google search
21 |     6. Try different tools within Google ecosystem, try Claude, try Perplexity
22 |     7. If time, switch back to my account and show GitHub Copilot Workspaces
23 |     8. RESEARCH prompt: *Show me the 5 most important papers that contributed to application container technology standards, i.e. singularity, docker. Provide citations*
24 | 
25 | ## Backlog / Ideas
26 | 
27 | ### Cloud Tasks
28 | 
29 | ### Architecture
30 | - Update diagram per client requirments
31 | - Build deployment script for cloud x
32 | 
33 | #### Docker Containers
34 | - Describe required Docker dev environment and provide setup instructions
35 | - Create a Dockerfile
36 | - Improve a Dockerfile
37 | - Build/deploy/test container image locally
38 | - Suggest security remidiation methods for container image
39 | - List build options for a cloud
40 | - Create deployment script
41 | - Translate a Singularity (or Apptainer) container to a Docker container
42 | 
43 | ### Human Health Tasks
44 | 
45 | #### Bioinformatics
46 | - Summarize published research on topic x - DeepResearch
47 | - Segment image (cellular / nuclear)
48 | - Predict protein structure - AlphaFold
49 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/4_Prompt-Katas/README.md:
--------------------------------------------------------------------------------
 1 | # Cloud Prompt Katas
 2 | 
 3 | Concept: Use cloud tasks as a basis for testing quality of output of GenAI tool prompts. 
 4 | 
 5 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/prompt-kata-group.png" width=800>
 6 | 
 7 | ## Concepts / Test Kata Problems
 8 | - derive from tool testing
 9 | - derive from problem/tasks
10 | - derive from 'found' prompts
11 | 
12 | ### GenAI / LLM Exploration Concepts
13 | Katas for practice/play/learning w/Prompts as 'code'
14 | - Iteration on exact prompt langauge as 'params'
15 | - Attention to tool-based prompt guidance/automated prompt re-writing
16 | - Big (general purpose) / small (domain-specific) LLM comparisons
17 | - Tool (GUI) vs API calls
18 | - Improvements via examining output from 'thinking' LLM models
19 | 
20 | ### Validation 
21 | - HITL - domain expertise as validation
22 | - Advsersarial 
23 |     - different models settings within tool
24 |     - different models within tool
25 |     - different tools
26 | - Automated
27 |     - methods of automated, quantified output quality validation
28 | 
29 | ## List of Candidate GenAI Tools
30 | 
31 | ### General Purpose
32 | - ChatGPT / OpenAI
33 | - Google Gemini
34 | - Claude / Anthropic
35 | 
36 | ### Domain-specific 
37 | - Code: GitHub CoPilot & Copilot Repositories
38 | - Code: Repl.it
39 | - Cloud: GCP Gemini
40 | - Cloud: Amazon Q
41 | - Images: Google Imagen3
42 | 
43 | - Medical Images: BioMedCLIP (open source foundational LLM)
44 | - Video: Google Veo2
45 | - Data: Databricks Genie, DBRX
46 | 
47 | ### New Search Engines
48 | - Perplexity (multiple models)
49 | 
50 | ### Ethical 'no's
51 | - DeepSeek
52 | - Llama
53 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/4_Prompt-Katas/gemini-for-google-workspace-prompting-guide-101.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/4_Prompt-Katas/gemini-for-google-workspace-prompting-guide-101.pdf


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/README.md:
--------------------------------------------------------------------------------
 1 | # Patterns
 2 | 
 3 | ### Core Cloud
 4 | 
 5 | <kbd><img src="https://miro.medium.com/max/1100/1*qXdSJxH7DtetjDlGQRyFgA.png" width=800></kbd>
 6 | 
 7 | Core Cloud Patterns and design considerations, summarized below with a checklist, article and talk.  
 8 | 
 9 | - ✅ My Checklist: **"What is the Current State of Your Cloud Deployments?"** - do a checkup of your cloud env to get a baseline - [link](https://lynnlangit.medium.com/10-legacy-cloud-considerations-44b2a5073706?sk=75a729b527de05fa13103a913c9a45db) 
10 | - :book: My Article: **"6 Cloud Adoption Patterns"** - particularly applies to enterprise-sized companies - [link](https://lynnlangit.medium.com/cloud-adoption-patterns-d47ffc5789fe)
11 | - :tv: My Talk: **"Cloud Adoption Patterns"** - expanded talk-version of article above - [link](https://www.youtube.com/watch?v=_su5lPuENNo)
12 | 
13 | ### 4 Steps to Your First Cloud Native Applicattion
14 | 1. Your_Code ➡️ Your_App ? (add DevOps or 'infrastructure as code')
15 | 2. Your_Methods ➡️ Your_App ? (use Microservices / Functions or 'serverless')
16 | 3. Your_Data as Streams | CRUD | Batches ➡️ Data Methods? (select data store or SQL | NoSQL | DataLake [buckets])
17 | 4. CODE + DATA + OTHER_SERVICES ➡️ Cloud Native App Services? (implement 'other cloud service' or 'security [IAM]...')
18 | 
19 | ### What are *Other* Cloud Service Types?
20 | 
21 |   - 🔐 Users | Accounts - Roles & Permissions - IAM comparison blog post - [link](https://ermetic.com/blog/cloud/aws-azure-and-gcp-the-ultimate-iam-comparison/)
22 |   - 💳 Costs - Billing & Control
23 |   - 📁 App Organization - Folders & Projects
24 |   - 🔥 Up Time - Monitoring & Alerts
25 |   - 🏗️ Updating - CI/CD
26 |   - 📚 Data - Data Mesh - [link](https://www.datamesh-architecture.com/)
27 |   - ✨ Advanced Processing - ML / AI
28 |   
29 | ---
30 | 
31 | ## End-to-end Example
32 | 
33 | Shown below are the building blocks of a modern cloud architecture
34 | 
35 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/0_CLOUD-PATTERNS/images/modern-cloud-arch.png" width=800>
36 | 


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/RYG-progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/RYG-progress.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/aws-genomics-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/aws-genomics-arch.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/data-lake.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/data-lake.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/deployment-types-color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/deployment-types-color.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/deployment-types.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/deployment-types.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/deploys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/deploys.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/genomic-pipeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/genomic-pipeline.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/lake-sketch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/lake-sketch.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/modern-cloud-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/modern-cloud-arch.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/new-main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/new-main.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/research-pipelines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/research-pipelines.png


--------------------------------------------------------------------------------
/0_CLOUD-PATTERNS/images/scale-jobs-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/0_CLOUD-PATTERNS/images/scale-jobs-arch.png


--------------------------------------------------------------------------------
/AWS/AWS-CLOUDLAKES.md:
--------------------------------------------------------------------------------
 1 | # Patterns for AWS Cloud Data Lakes
 2 | 
 3 | ## Raw Kubernetes
 4 | 
 5 | The reference pattern...  
 6 | 
 7 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/cloud-k8.png">
 8 | 
 9 | ## Managed Kubernetes / EKS
10 | 
11 | AWS includes the [`Elastic Kubernetes Service`](https://aws.amazon.com/eks/) as a container cluster controller. EKS can be configured to use an auto-scaling service.  Also `AWS Batch` (see below) can be used.  
12 | 
13 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/aws-k8.png">
14 | 
15 | 
16 | ---
17 | ## AWS Genomics 
18 | 
19 | ### GATK, CROMWELL & BATCH 
20 | 
21 | AWS includes the [AWS Batch service](https://aws.amazon.com/batch/) for burstable genomic-scale data pipelines. Pattern is shown below for the GATK analysis toolkit.
22 | 
23 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/aws-cromwell.png">
24 | 
25 | ### IDSeq & Batch
26 | 
27 | AWS includes the [AWS Batch service](https://aws.amazon.com/batch/) for burstable genomic-scale data pipelines. Pattern is shown below for the [IDSeq](https://www.discoveridseq.com/) toolkit.
28 | 
29 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/aws-idseq.png">
30 | 
31 | 
32 | ### Nextflow & Batch
33 | 
34 | AWS includes the [AWS Batch service](https://aws.amazon.com/batch/) for burstable genomic-scale data pipelines. Pattern is shown below for a Nextflow analysis toolkit.
35 | 
36 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/aws-nextflow.png">
37 | 
38 | ### VariantSpark & Batch
39 | 
40 | AWS includes the [AWS Batch service](https://aws.amazon.com/batch/) for burstable genomic-scale data pipelines. Pattern is shown below for the VariantSpark toolkit.
41 | 
42 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/aws-variantspark.png">
43 | 


--------------------------------------------------------------------------------
/AWS/README.md:
--------------------------------------------------------------------------------
 1 | # AWS Resources
 2 | 
 3 | ## My Courses on LinkedIn Learning
 4 | 
 5 | 📺 My AWS courses on LinkedIn Learning - [link](https://www.linkedin.com/learning/search?entityType=COURSE&keywords=aws%20%2B%20lynn%20langit) - **18 courses!**:
 6 |   - **AWS for DevOps for Beginners** - best practices, core concepts by example - [link](https://www.linkedin.com/learning/aws-devops-best-practices-for-beginners)
 7 |   - **AWS for Data Series**: Machine Learning, Data Analytics, Data Services, Data Security
 8 |   - **AWS for DevOps Series**: AWS Controlling Cost- [link](https://www.linkedin.com/learning/amazon-web-services-controlling-cost) , Monitoring, Metrics & Logging, High Availability & Elasticity, Continuous Delivery & Process, Security, Governance & Validation, Amazon Workspaces
 9 |   - **AWS Architects Series**: Advanced Security, High Availability & Continuous Delivery, Network & Storage Design; Design & Implement Systems
10 |   - **Big Data courses**: Learning Hadoop and Spark - [link](https://github.com/lynnlangit/learning-hadoop-and-spark), Learning NoSQL - [link](https://github.com/lynnlangit/learning-nosql) - includes AWS content
11 |   - **End-user Computing course**: Learning Amazon Workspaces - [link](https://www.linkedin.com/learning/amazon-workspaces-deploy-virtual-desktops-14472889)
12 |     
13 | ## My Other AWS Resources
14 | 
15 | My AWS notes/links/sample code in GitHub Repos and other writings and screencasts (on YouTube)  
16 | 
17 | - :star: updating in 2024 - open source course **"aws-for-bioinformatics"** on YouTube/GitHub - [link](https://github.com/lynnlangit/aws-for-bioinformatics)
18 | - :octocat: My example AWS GitHub Repos
19 |   - **'hello-aws-data-services'** - [link](https://github.com/lynnlangit/Hello-AWS-Data-Services)
20 |   - **'aws-cost-control'** - [link](https://github.com/lynnlangit/aws-cost-control)
21 |   - **'learning-hadoop-and-spark'** - [link](https://github.com/lynnlangit/learning-hadoop-and-spark)
22 |   - **'learning-nosql'** - [link](https://github.com/lynnlangit/learning-nosql)
23 |   - **'learning-amazon-workspaces'** - [link](https://github.com/lynnlangit/learning-amazon-workspaces)
24 | - 📚 My Medium AWS Articles - [link](https://medium.com/search?q=aws%20langit)  
25 | - 📺 My YouTube AWS Serverless Playlist for **serverless AWS** - [link](https://www.youtube.com/playlist?list=PL4Q4HssKcxYsa2A2D2_Zln2tkL4v4-ymO)
26 | - 📺 My YouTube general AWS Playlist for **general AWS** - [link](https://www.youtube.com/playlist?list=PL93B06369FAD34284)
27 | - 🏆 AWS Community Hero (for Data) - [link](https://aws.amazon.com/developer/community/heroes/lynn-langit/?did=dh_card&trk=dh_card)
28 | 
29 | ---
30 | 
31 | ## Top Open Source AWS Resources 
32 | 
33 | - :octocat: Open Guide for AWS on GitHub - [link](https://github.com/open-guides/og-aws)
34 | - 📚 short article: 'how to get started learning AWS - [link](https://dev.to/loujaybee/where-and-how-to-start-learning-aws-as-a-beginner-27ab)
35 | - :octocat: How they AWS - [link](https://github.com/upgundecha/howtheyaws)
36 | - :octocat: Awesome AWS Security - [link](https://github.com/jassics/awesome-aws-security)
37 | - 📚 AWS Architecture Center, includes reference architectures - [link](https://aws.amazon.com/architecture)
38 | 
39 | ### AWS Certification Information
40 | 
41 | - List of certifications for AWS:  
42 |   - Main certification site - [link](https://aws.amazon.com/certification/)
43 |   - Cert Prep site - [link]( https://aws.amazon.com/certification/certification-prep/)
44 | 
45 | ![AWS](https://github.com/lynnlangit/learning-cloud/blob/master/AWS/aws.png)
46 | 


--------------------------------------------------------------------------------
/AWS/aws-courses.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/AWS/aws-courses.png


--------------------------------------------------------------------------------
/AWS/aws.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/AWS/aws.png


--------------------------------------------------------------------------------
/AlibabaCloud/README.md:
--------------------------------------------------------------------------------
 1 | # Alibaba Cloud Resources
 2 | 
 3 | ![Alibaba Cloud](https://github.com/lynnlangit/learning-cloud/blob/master/images/alibaba-locations.png)
 4 | 
 5 | 
 6 | - 📺  My course **'Learning Alibaba Cloud'** (2 hours) - [link](https://www.linkedin.com/learning/learning-alibaba-cloud).  Learning objectives: 
 7 |   - Setting up an Alibaba Cloud account
 8 |   - Creating and configuring VMs
 9 |   - Creating and configuring container clusters
10 |   - Creating functions
11 |   - Creating storage buckets and databases
12 |   - Managing resources with Cloud Shell
13 |   - Accessing the Marketplace
14 |   - Using the API Explorer console and templates  
15 | - :octocat: My companion Repo
16 |   - **'Learning Alibaba Cloud'** - [link](https://github.com/lynnlangit/learning-alibaba-cloud) 
17 | - Alibaba Cloud Community Builders - [link](https://www.alibabacloud.com/campaign/communitybuilder)
18 | 
19 |   ---
20 | 
21 | ## Other Resources & Certification Info
22 | 
23 | - List of certifications for Alibaba Cloud - main [link](https://edu.alibabacloud.com/certification)
24 | 
25 |  ![Alibaba Cloud](https://github.com/lynnlangit/learning-cloud/blob/master/AlibabaCloud/alibaba-cloud.png)
26 | 


--------------------------------------------------------------------------------
/AlibabaCloud/alibaba-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/AlibabaCloud/alibaba-cloud.png


--------------------------------------------------------------------------------
/Azure/Azure-CLOUDLAKES.md:
--------------------------------------------------------------------------------
 1 | # Patterns for Azure Cloud Data Lakes
 2 | 
 3 | ## Raw Kubernetes
 4 | 
 5 | The raw pattern...  
 6 | 
 7 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/cloud-k8.png">
 8 | 
 9 | 
10 | ---
11 | ## Azure Genomics 
12 | 
13 | Azure includes the [`Azure Kubernetes Service`](https://azure.microsoft.com/en-us/services/kubernetes-service) as a container cluster controller.  Azure also includes the [`Azure Batch Service`](https://docs.microsoft.com/en-us/azure/batch/batch-technical-overview).    
14 | 
15 | See our article on Medium ['Azure Genomics w/cromwell'](https://lynnlangit.medium.com/azure-for-genomic-scale-workloads-ad3c989a3d0b). Note current implementation uses the [TES-Azure API](https://github.com/microsoft/tes-azure) to 'connect' cromwell with Azure Batch service.
16 | 
17 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/azure-cromwell.png">
18 | 
19 | 
20 | 


--------------------------------------------------------------------------------
/Azure/README.md:
--------------------------------------------------------------------------------
 1 | # Azure Resources
 2 | 
 3 | - 📺 My course **'Azure Databricks'** (3 hours) - [link](https://www.linkedin.com/learning/azure-spark-databricks-essential-training).  Learning Objectives:
 4 |   - Business scenarios for Apache Spark
 5 |   - Setting up a cluster
 6 |   - Using Python, R, and Scala notebooks
 7 |   - Scaling Azure Databricks workflows
 8 |   - Data pipelines with Azure Databricks
 9 |   - Machine learning architectures
10 |   - Using Azure Databricks for data warehousing
11 |   - :octocat: Link to example Azure Databricks notebooks - [link](https://github.com/lynnlangit/learning-hadoop-and-spark/tree/master/5-Use-Spark/Jupyter-Notebooks/azure_databricks_notebooks)
12 | - My example GitHub Repos  
13 |   - :octocat: **'learning-hadoop-and-spark'** - [link](https://github.com/lynnlangit/learning-hadoop-and-spark)
14 |   - :octocat: **'Learning Cromwell on Azure'** [link](https://github.com/lynnlangit/learning-cromwell-on-azure)
15 |   - :octocat: **'learning Github Codespaces'** - [link](https://github.com/lynnlangit/learning-codespaces)
16 |   - :octocat: **'learning-quantum'** - [link](https://github.com/lynnlangit/learning-quantum/tree/main/2_cloud-vendors/azure-quantum) learning Q# and more
17 | - 📖 My Medium Articles - [link](https://medium.com/search?q=azure%20langit)
18 | - 🏆 My Microsoft Regional Director award - [link](https://rd.microsoft.com/en-us/lynn-langit)
19 | 
20 | ---
21 | 
22 | ## Other Resources & Certification Info
23 | 
24 | - Azure Cheat Sheet - list of all Azure services on one page - [link](https://github.com/milanm/azure-cheat-sheet)
25 | - Azure Architecture center, includes reference architectures - [link](https://docs.microsoft.com/en-us/azure/architecture/)
26 | - Online poster with all certification types (see Azure section) - [link](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE2PjDI)
27 | - Shown below Microsoft certifications by job role  
28 | ![Azure](https://github.com/lynnlangit/learning-cloud/blob/master/Azure/azure.png)
29 | 


--------------------------------------------------------------------------------
/Azure/azure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/Azure/azure.png


--------------------------------------------------------------------------------
/GCP/GCP-CLOUDLAKES.md:
--------------------------------------------------------------------------------
 1 | # Patterns for GCP Cloud Data Lakes
 2 | 
 3 | ## Raw Kubernetes
 4 | 
 5 | The reference pattern...  
 6 | 
 7 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/cloud-k8.png">
 8 | 
 9 | ## Managed Kubernetes / GKE
10 | 
11 | GCP includes the [`Google Kubernetes Engine`](https://cloud.google.com/kubernetes-engine) as a container cluster controller. GKE can be configured to use an auto-scaling service.  Also PAPI, which is now called `Google Life Sciences API` (see below) can be used.  
12 | 
13 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/gcp-k8.png">
14 | 
15 | 
16 | ---
17 | ## GCP Genomics 
18 | 
19 | ### GATK & PAPI 
20 | 
21 | GCP includes the [Google Cloud Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest) (was called the Pipelines API) for burstable genomic-scale data pipelines. Pattern is shown below for the GATK analysis toolkit.
22 | 
23 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/gcp-cromwell.png">
24 | 
25 | ### DeepVariant & PAPI
26 | 
27 | GCP includes the [Google Cloud Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest) (was called the Pipelines API) for burstable genomic-scale data pipelines. Pattern is shown below for the DeepVariant analysis toolkit.
28 | 
29 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/gcp-deepvariant.png">
30 | 
31 | 
32 | ### Nextflow & PAPI
33 | 
34 | GCP includes the [Google Cloud Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest) (was called the Pipelines API) for burstable genomic-scale data pipelines. Pattern is shown below for a Nextflow analysis toolkit.
35 | 
36 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/gcp-nextflow.png">
37 | 


--------------------------------------------------------------------------------
/GCP/README.md:
--------------------------------------------------------------------------------
 1 | # GCP Resources
 2 | 
 3 | I have created a number of courses for GCP.  Many are on Linked In Learning with associated Repos on GitHub.     
 4 | NOTE: A couple of these courses are fully open source (on GitHub and YouTube).
 5 | 
 6 | ## Courses
 7 | 
 8 | ### GCP Courses
 9 | 
10 | - My GCP Courses on LinkedIn Learning - [link](https://www.linkedin.com/learning/search?entityType=COURSE&keywords=gcp%20langit) to all GCP courses
11 |   - 📺 **'GCP Essentials'** - this is the first course to take in this series - [link](https://www.linkedin.com/learning/google-cloud-platform-essential-training-for-administrators-22141609)
12 |   - 📺 **'GCP Enterprise Essentials'** - take this course if you are an enterprise cloud professionals - [link](https://www.linkedin.com/learning/google-cloud-platform-for-enterprise-essential-training-22140980)
13 |   - 📺 **'GCP Tools'** course on [LI_L](https://www.linkedin.com/learning/learning-google-cloud-developer-and-devops-tools) & associated Repo folder in `tools` section at -  [link](https://github.com/lynnlangit/gcp-essentials/tree/master/0_setup_and_iam_and_costs/tools) 
14 |   - 📺 **'GCP Cost Control'** course on [LI_L](https://www.linkedin.com/learning/google-cloud-controlling-cost), and associated Repo page at -  [link](https://github.com/lynnlangit/gcp-essentials/tree/master/0_setup_and_iam_and_costs/0c_cost_control)
15 |   - 📺 **'Learning Hadoop'** - this is the first course to take in this series 
16 |   - 📺 **'Cloud Hadoop: Scaling Apache Spark'** - uses GCP Dataproc - take this course to learn to use/scale Spark on GCP
17 |   - 📺 **'Cloud NoSQL for SQL Pros'** - this course covers both GCP and AWS NoSQL data services
18 |  
19 | ### Google Gemini & Machine Lerning Courses
20 |    - 📺 **'Google Gemini for Developers'** - this course introduces the Google Gemini for developers at [link](https://www.linkedin.com/learning/google-gemini-for-developers-24018542)
21 |    - 📺 **'Advanced Google Gemini'** - this course explores buiding LLM apps using the Google Gemini for developers at [link](https://www.linkedin.com/learning/advanced-gemini-for-developers)
22 |    - 📺 **'GCP Machine Learning'** - this course covers machine learning on GCP at [link](https://www.linkedin.com/learning/google-cloud-platform-for-machine-learning-essential-training-23457382)
23 |    - 📺 **'Spark and NoSQL'** courses on LinkedIn Learning (includes lots of GCP info)- [link](https://www.linkedin.com/learning/search?entityType=COURSE&keywords=hadoop%20spark%20langit)
24 | 
25 | ## Repos
26 | 
27 | - My example GCP Repos and associated Courses
28 |   - :octocat: **'gcp-essentials'** - [link](https://github.com/lynnlangit/gcp-essentials) - companion to my LI_L 'GCP Essentials' course
29 |   - :octocat: **'gcp-ml'** - [link](https://github.com/lynnlangit/gcp-essentials/tree/master/6_AI-ML) - compantion to my my LI_L 'GCP ML' and my 'Google Gemini' courses
30 |   - :octocat: **'learning-hadoop-and-spark'** - [link](https://github.com/lynnlangit/learning-hadoop-and-spark) - companion to my LI_L 'Learning Hadoop' course
31 |   - :octocat: **'learning-nosql'** - [link](https://github.com/lynnlangit/learning-nosql) - compantion to my LI_L 'NoSQL' course
32 |   - :octocat: **'gcp-for-bioinformatics'** - [link](https://github.com/lynnlangit/gcp-for-bioinformatics) - includes YouTube screencast demo playlist - FREE COURSE! 
33 |   
34 | ## Articles, Screencasts and more  
35 | 
36 | - 📚 My GCP Medium Articles - [link](https://medium.com/search?q=gcp%20langit)
37 | - 📺  My YouTube bioinformatics GCP playlist - [link](https://www.youtube.com/playlist?list=PL4Q4HssKcxYtE5Tae3epNab3mK9iP1iWX)
38 | - 📺  My YouTube general GCP playlist - [link](https://www.youtube.com/playlist?list=PL6971A0258365F21E)
39 | - 🏆 My GDE (Google Developer Expert for Cloud) award - [link](https://developers.google.com/community/experts/directory/profile/profile-lynn_langit)
40 | 
41 | ---
42 | 
43 | ## Other Resources & Certification Info
44 | 
45 | - GCP Community Resources, including tutorials - [link](https://cloud.google.com/community/)
46 | - GCP code samples - [link](https://cloud.google.com/docs/samples)
47 | - GCP Services, defined concisely on one page - [link](https://github.com/gregsramblings/google-cloud-4-words)
48 | - GCP Services compared to AWS and Azure services - [link](https://cloud.google.com/docs/compare/aws?hl=en_US)
49 | - List of certifications for Google Cloud Platform - [Link](https://cloud.google.com/certification) and shown below
50 | 
51 | ![GCP](https://github.com/lynnlangit/learning-cloud/blob/master/GCP/gcp.png)
52 | 
53 | ----
54 | 
55 | 


--------------------------------------------------------------------------------
/GCP/gcp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/GCP/gcp.png


--------------------------------------------------------------------------------
/IBM/README.md:
--------------------------------------------------------------------------------
 1 | # IBM Cloud Resources
 2 | 
 3 | I am currently exploring **quantum computing** using IBM cloud resources.  IBM Cloud includes a number of types of services, summarized and shown below.
 4 | 
 5 | 
 6 | - :octocat: My Repo 'learning-quantum' has links and other resources - [link](https://github.com/lynnlangit/learning-quantum)
 7 | - 🗞️ IBM Qiskit Cloud Quantum Developer certification - [link](https://www.ibm.com/training/certification/ibm-certified-associate-developer-quantum-computation-using-qiskit-v02x-C0010300)
 8 | 
 9 | <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/ibm-cloud.png" width=600>
10 |   ---
11 | 
12 | 
13 | 


--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
  1 |                                  Apache License
  2 |                            Version 2.0, January 2004
  3 |                         http://www.apache.org/licenses/
  4 | 
  5 |    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 | 
  7 |    1. Definitions.
  8 | 
  9 |       "License" shall mean the terms and conditions for use, reproduction,
 10 |       and distribution as defined by Sections 1 through 9 of this document.
 11 | 
 12 |       "Licensor" shall mean the copyright owner or entity authorized by
 13 |       the copyright owner that is granting the License.
 14 | 
 15 |       "Legal Entity" shall mean the union of the acting entity and all
 16 |       other entities that control, are controlled by, or are under common
 17 |       control with that entity. For the purposes of this definition,
 18 |       "control" means (i) the power, direct or indirect, to cause the
 19 |       direction or management of such entity, whether by contract or
 20 |       otherwise, or (ii) ownership of fifty percent (50%) or more of the
 21 |       outstanding shares, or (iii) beneficial ownership of such entity.
 22 | 
 23 |       "You" (or "Your") shall mean an individual or Legal Entity
 24 |       exercising permissions granted by this License.
 25 | 
 26 |       "Source" form shall mean the preferred form for making modifications,
 27 |       including but not limited to software source code, documentation
 28 |       source, and configuration files.
 29 | 
 30 |       "Object" form shall mean any form resulting from mechanical
 31 |       transformation or translation of a Source form, including but
 32 |       not limited to compiled object code, generated documentation,
 33 |       and conversions to other media types.
 34 | 
 35 |       "Work" shall mean the work of authorship, whether in Source or
 36 |       Object form, made available under the License, as indicated by a
 37 |       copyright notice that is included in or attached to the work
 38 |       (an example is provided in the Appendix below).
 39 | 
 40 |       "Derivative Works" shall mean any work, whether in Source or Object
 41 |       form, that is based on (or derived from) the Work and for which the
 42 |       editorial revisions, annotations, elaborations, or other modifications
 43 |       represent, as a whole, an original work of authorship. For the purposes
 44 |       of this License, Derivative Works shall not include works that remain
 45 |       separable from, or merely link (or bind by name) to the interfaces of,
 46 |       the Work and Derivative Works thereof.
 47 | 
 48 |       "Contribution" shall mean any work of authorship, including
 49 |       the original version of the Work and any modifications or additions
 50 |       to that Work or Derivative Works thereof, that is intentionally
 51 |       submitted to Licensor for inclusion in the Work by the copyright owner
 52 |       or by an individual or Legal Entity authorized to submit on behalf of
 53 |       the copyright owner. For the purposes of this definition, "submitted"
 54 |       means any form of electronic, verbal, or written communication sent
 55 |       to the Licensor or its representatives, including but not limited to
 56 |       communication on electronic mailing lists, source code control systems,
 57 |       and issue tracking systems that are managed by, or on behalf of, the
 58 |       Licensor for the purpose of discussing and improving the Work, but
 59 |       excluding communication that is conspicuously marked or otherwise
 60 |       designated in writing by the copyright owner as "Not a Contribution."
 61 | 
 62 |       "Contributor" shall mean Licensor and any individual or Legal Entity
 63 |       on behalf of whom a Contribution has been received by Licensor and
 64 |       subsequently incorporated within the Work.
 65 | 
 66 |    2. Grant of Copyright License. Subject to the terms and conditions of
 67 |       this License, each Contributor hereby grants to You a perpetual,
 68 |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 69 |       copyright license to reproduce, prepare Derivative Works of,
 70 |       publicly display, publicly perform, sublicense, and distribute the
 71 |       Work and such Derivative Works in Source or Object form.
 72 | 
 73 |    3. Grant of Patent License. Subject to the terms and conditions of
 74 |       this License, each Contributor hereby grants to You a perpetual,
 75 |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 76 |       (except as stated in this section) patent license to make, have made,
 77 |       use, offer to sell, sell, import, and otherwise transfer the Work,
 78 |       where such license applies only to those patent claims licensable
 79 |       by such Contributor that are necessarily infringed by their
 80 |       Contribution(s) alone or by combination of their Contribution(s)
 81 |       with the Work to which such Contribution(s) was submitted. If You
 82 |       institute patent litigation against any entity (including a
 83 |       cross-claim or counterclaim in a lawsuit) alleging that the Work
 84 |       or a Contribution incorporated within the Work constitutes direct
 85 |       or contributory patent infringement, then any patent licenses
 86 |       granted to You under this License for that Work shall terminate
 87 |       as of the date such litigation is filed.
 88 | 
 89 |    4. Redistribution. You may reproduce and distribute copies of the
 90 |       Work or Derivative Works thereof in any medium, with or without
 91 |       modifications, and in Source or Object form, provided that You
 92 |       meet the following conditions:
 93 | 
 94 |       (a) You must give any other recipients of the Work or
 95 |           Derivative Works a copy of this License; and
 96 | 
 97 |       (b) You must cause any modified files to carry prominent notices
 98 |           stating that You changed the files; and
 99 | 
100 |       (c) You must retain, in the Source form of any Derivative Works
101 |           that You distribute, all copyright, patent, trademark, and
102 |           attribution notices from the Source form of the Work,
103 |           excluding those notices that do not pertain to any part of
104 |           the Derivative Works; and
105 | 
106 |       (d) If the Work includes a "NOTICE" text file as part of its
107 |           distribution, then any Derivative Works that You distribute must
108 |           include a readable copy of the attribution notices contained
109 |           within such NOTICE file, excluding those notices that do not
110 |           pertain to any part of the Derivative Works, in at least one
111 |           of the following places: within a NOTICE text file distributed
112 |           as part of the Derivative Works; within the Source form or
113 |           documentation, if provided along with the Derivative Works; or,
114 |           within a display generated by the Derivative Works, if and
115 |           wherever such third-party notices normally appear. The contents
116 |           of the NOTICE file are for informational purposes only and
117 |           do not modify the License. You may add Your own attribution
118 |           notices within Derivative Works that You distribute, alongside
119 |           or as an addendum to the NOTICE text from the Work, provided
120 |           that such additional attribution notices cannot be construed
121 |           as modifying the License.
122 | 
123 |       You may add Your own copyright statement to Your modifications and
124 |       may provide additional or different license terms and conditions
125 |       for use, reproduction, or distribution of Your modifications, or
126 |       for any such Derivative Works as a whole, provided Your use,
127 |       reproduction, and distribution of the Work otherwise complies with
128 |       the conditions stated in this License.
129 | 
130 |    5. Submission of Contributions. Unless You explicitly state otherwise,
131 |       any Contribution intentionally submitted for inclusion in the Work
132 |       by You to the Licensor shall be under the terms and conditions of
133 |       this License, without any additional terms or conditions.
134 |       Notwithstanding the above, nothing herein shall supersede or modify
135 |       the terms of any separate license agreement you may have executed
136 |       with Licensor regarding such Contributions.
137 | 
138 |    6. Trademarks. This License does not grant permission to use the trade
139 |       names, trademarks, service marks, or product names of the Licensor,
140 |       except as required for reasonable and customary use in describing the
141 |       origin of the Work and reproducing the content of the NOTICE file.
142 | 
143 |    7. Disclaimer of Warranty. Unless required by applicable law or
144 |       agreed to in writing, Licensor provides the Work (and each
145 |       Contributor provides its Contributions) on an "AS IS" BASIS,
146 |       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 |       implied, including, without limitation, any warranties or conditions
148 |       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 |       PARTICULAR PURPOSE. You are solely responsible for determining the
150 |       appropriateness of using or redistributing the Work and assume any
151 |       risks associated with Your exercise of permissions under this License.
152 | 
153 |    8. Limitation of Liability. In no event and under no legal theory,
154 |       whether in tort (including negligence), contract, or otherwise,
155 |       unless required by applicable law (such as deliberate and grossly
156 |       negligent acts) or agreed to in writing, shall any Contributor be
157 |       liable to You for damages, including any direct, indirect, special,
158 |       incidental, or consequential damages of any character arising as a
159 |       result of this License or out of the use or inability to use the
160 |       Work (including but not limited to damages for loss of goodwill,
161 |       work stoppage, computer failure or malfunction, or any and all
162 |       other commercial damages or losses), even if such Contributor
163 |       has been advised of the possibility of such damages.
164 | 
165 |    9. Accepting Warranty or Additional Liability. While redistributing
166 |       the Work or Derivative Works thereof, You may choose to offer,
167 |       and charge a fee for, acceptance of support, warranty, indemnity,
168 |       or other liability obligations and/or rights consistent with this
169 |       License. However, in accepting such obligations, You may act only
170 |       on Your own behalf and on Your sole responsibility, not on behalf
171 |       of any other Contributor, and only if You agree to indemnify,
172 |       defend, and hold each Contributor harmless for any liability
173 |       incurred by, or claims asserted against, such Contributor by reason
174 |       of your accepting any such warranty or additional liability.
175 | 
176 |    END OF TERMS AND CONDITIONS
177 | 
178 |    Copyright 2020-2023 Lynn Langit
179 | 
180 |    Licensed under the Apache License, Version 2.0 (the "License");
181 |    you may not use this file except in compliance with the License.
182 |    You may obtain a copy of the License at
183 | 
184 |        http://www.apache.org/licenses/LICENSE-2.0
185 | 
186 |    Unless required by applicable law or agreed to in writing, software
187 |    distributed under the License is distributed on an "AS IS" BASIS,
188 |    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
189 |    See the License for the specific language governing permissions and
190 |    limitations under the License.
191 | 


--------------------------------------------------------------------------------
/NVIDIA/README.md:
--------------------------------------------------------------------------------
 1 | # NVIDIA Cloud Resources
 2 | 
 3 | I am currently exploring **quantum computing** using NVIDIA cloud resources.  NVIDIA Cloud includes a number of types of services, summarized and shown below.  Also see [my other GitHub repo](https://github.com/lynnlangit/learning-quantum/tree/main/2_cloud-vendors/NVIDIA%20CUDA-Q).
 4 | 
 5 | NVIDIA recently started offering GenAI (and other) types of technical certifications --> [link](https://www.nvidia.com/en-us/learn/certification/)
 6 | 
 7 | ## About Nvidia CUDA-Q
 8 | 
 9 | From Nvidia's site --> https://nvidia.github.io/cuda-quantum/latest/using/quick_start.html
10 | 
11 | *"CUDA-Q streamlines hybrid application development and promotes productivity and scalability in quantum computing. It offers a unified programming model designed for a hybrid setting—that is, CPUs, GPUs, and QPUs working together. CUDA-Q contains support for programming in Python and in C++. Learn more about the key benefits of CUDA-Q."*
12 | 
13 | *"This Quick Start page guides you through installing CUDA-Q and running your first program. If you have already installed and configured CUDA-Q, or if you are using our Docker image, you can move directly to our Basics Section. More information about working with containers and Docker alternatives can be found in our complete Installation Guide."*
14 | 
15 | ### Building 
16 | 
17 | *"We can define our quantum kernel as a typical Python function, with the additional use of the `@cudaq.kernel` decorator. Let’s begin with a simple GHZ-state example, producing a state of maximal entanglement amongst an allocated set of qubits."*
18 | 
19 | ```
20 | import cudaq
21 | 
22 | @cudaq.kernel
23 | def kernel(qubit_count: int):
24 |     qvector = cudaq.qvector(qubit_count)
25 | 
26 |     # Place the first qubit in the superposition state.
27 |     h(qvector[0])
28 | 
29 |     # Loop through the allocated qubits and apply controlled-X,
30 |     # or CNOT, operations between them.
31 |     for qubit in range(qubit_count - 1):
32 |         x.ctrl(qvector[qubit], qvector[qubit + 1])
33 | 
34 |     # Measure the qubits.
35 |     mz(qvector)
36 | ```
37 | 
38 | ### Running
39 | 
40 | See this page --> https://nvidia.github.io/cuda-quantum/latest/using/basics/run_kernel.html#sample
41 | 
42 | 
43 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | # Learning Cloud
 2 | 
 3 | ## What's in this Repo
 4 | 
 5 | This Repo contains links to **100+ resources** I've created for you to learn to work on the public cloud.    
 6 | Links, examples, short explanations and architectures are included for AWS, Azure, or GCP & more.  
 7 | 
 8 | ## What's NEW
 9 | 
10 | <details><summary>In 2025 / LinkedIn Learning Courses</summary><br>
11 |   
12 | I have published more than 30 courses on AI, Cloud and Data topics on LinkedIn Learning - [here](https://www.linkedin.com/learning/instructors/lynn-langit)  
13 | 
14 | -  ⭐ PUBLISHED - 100% update - both courses [**'Google Gemini v 2.x for Devs (Beg & Adv)'**](https://www.linkedin.com/learning/google-gemini-for-developers-25832309)
15 | -  ⭐ PUBLISHED - Updated with GenAI content [**'Cloud Careers and Certifications'**](https://www.linkedin.com/learning/cloud-computing-careers-and-certifications)
16 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/gcp.png" width=25> Recorded - New course **'Google Agentspaces'**
17 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/gcp.png" width=25> Scheduled - New course **'Google VEO3'**
18 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/aws.png" width=25> Scheduled -  New course **'AWS GenAI DevOps'**
19 | </details>
20 | 
21 | ### MOST VIEWED CONTENT
22 | 
23 | <details><summary>Most viewed Cloud & GenAI Content</summary>
24 | 
25 | #### GenAI Courses on Linked In Learning
26 | 
27 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/gcp.png" width=25> **`Google Gemini for Developers`** - [link to repo](https://github.com/lynnlangit/gcp-essentials/tree/master/6_AI-ML/2_gemini_LLM) and [course](https://www.linkedin.com/learning/google-gemini-for-developers-25832309) 
28 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/gcp.png" width=25> **`Advanced Google Gemini for Developers`** - [link to repo](https://github.com/lynnlangit/gcp-essentials/blob/master/6_AI-ML/2_gemini_LLM/ADV-LLM-Dev.md) and [course](https://www.linkedin.com/learning/advanced-gemini-for-developers) 
29 | - <img src="https://github.com/lynnlangit/learning-cloud/blob/master/images/databricks-icon.png" width=20> **`Learn Databricks Gen AI`** - [link to course](https://www.linkedin.com/learning/learn-databricks-genai)
30 | - <img src="https://github.com/lynnlangit/sample-data/blob/master/1_sample_data/emoji-icons/chat-gpt.png" width=20> **`5+ min of my ChatGPT`** - screencast series (on YouTube as playlist)--[link to playlist](https://www.youtube.com/playlist?list=PL4Q4HssKcxYuwbVAgVqwM5od3yLtg9NM0)
31 |   
32 | 
33 | #### GCP Topics
34 | - 🧬 📺 :octocat: **`GCP-for-Bioinformatics`** [FREE course on GitHub](https://github.com/lynnlangit/gcp-for-bioinformatics) 
35 | - 📺 :octocat: **`Serverless Architecture`** course - [link](https://www.linkedin.com/learning/serverless-architecture-19870153) & [repo](https://github.com/lynnlangit/serverless-architecture)
36 | - 📺 :octocat: **`GCP Essentials`** and **`GCP Enterprise`** courses on LI_L - see repo for updates - [link](https://github.com/lynnlangit/gcp-essentials)
37 | - 📺 :octocat: **`GCP Tools`** [course on LI_L](https://www.linkedin.com/learning/learning-google-cloud-developer-and-devops-tools) & associated repo examples in `tools` folder at [link](https://github.com/lynnlangit/gcp-essentials/blob/master/1_storage/tools/README.md)
38 | - 📺 :octocat: **`GCP Cost Control`** [course on LI_L](https://www.linkedin.com/learning/google-cloud-controlling-cost), see repo [link](https://github.com/lynnlangit/gcp-essentials/tree/master/0_setup_and_iam_and_costs/0c_cost_control) too
39 | 
40 | 
41 | #### Data, Machine Learning and More
42 | - 📺 :octocat:**`Learning SnowflakeDB`** [course on LI_L](https://www.linkedin.com/learning/learning-snowflakedb) & associated repo at [link](https://github.com/lynnlangit/learn-snowflakedb)
43 | - 📺 :octocat: **`Cloud Quantum Computing`** [course on LI_L](https://www.linkedin.com/learning/cloud-quantum-computing-essentials) & associated working repo at [link](https://github.com/lynnlangit/learning-quantum/tree/main/2_cloud-vendors)
44 | - :octocat: Studies on  **`Learning Ethical AI`** , my resources repo at [link](https://github.com/lynnlangit/learning-ethical-ai)
45 | - 🧬 :octocat: In preview - **`aws-for-bioinformatics`** a FREE and open source course on GitHub and YouTube - [link](https://github.com/lynnlangit/aws-for-bioinformatics)
46 | - 📚 :octocat: 📺 **`Learning Data Mesh`** [repo + book club](https://github.com/lynnlangit/learning-data-mesh)
47 | 
48 | </details>
49 | 
50 | ---
51 | 
52 | ### ALL CONTENT: 100+ Cloud Courses, Articles
53 | 
54 | <details><summary>All Cloud Content</summary>
55 | 
56 | #### All Cloud Courses
57 | - 📚 my **cloud courses** on LinkedIn Learning (30) - [link](https://www.linkedin.com/learning/instructors/lynn-langit)
58 | - :octocat: my **example code** in Github repos (10+) - [link](https://github.com/lynnlangit)
59 | - 📖 my **system visualization** tools, talks and examples (list) - [link](https://github.com/lynnlangit/learning-cloud/tree/master/0_CLOUD-PATTERNS/1_Viz-Systems)
60 | - 🧬 :octocat: my **course on bioinformatics for cloud** on GitHub (`TeamTeri`) - [link](https://github.com/lynnlangit/TeamTeri)
61 | 
62 | #### Cloud Architectures, Patterns and Articles
63 | - :octocat: My `CLOUD-PATTERNS` section to share best practice patterns and tools for cloud workloads - [link](https://github.com/lynnlangit/learning-cloud/tree/master/0_CLOUD-PATTERNS)
64 | - 📺 :octocat: My `Serverless Architecture` companion repo to my course on LI_L - [link](https://www.linkedin.com/learning/serverless-architecture-19870153)
65 | - 📚 **`Lynn Langit's Cloud World`** [on Substack](https://lynnlangit.substack.com/)
66 | - 📖 my **technical articles** on Medium (40) - cloud topics - [link](https://medium.com/search?q=langit%20cloud)
67 | - 📖 my **micro-blogging** on Dev.to (many...) - [link](https://dev.to/lynnlangit)
68 | 
69 | #### All Cloud Screencasts, Sample Data and Slide Decks
70 | - 🗣️ my **screencasts/talks** on YouTube (50+) - cloud topics and more - [link](https://www.youtube.com/c/LynnLangit/playlists)
71 | - 🗄️ my **sample data** in GitHub repo (10+) kinds of sample data - [link](https://github.com/lynnlangit/sample-data)
72 | - 🗣️ my **slide decks** on Slides.com (many...) - [link](https://slides.com/lynnlangit)
73 | 
74 | </details>
75 | 
76 | ---
77 |   
78 | ### Tl;dr: "How do I get started in cloud?"
79 | 
80 | If you are completely **new to cloud**, you might want to go here first --> [link](https://github.com/lynnlangit/learning-cloud/tree/master/0_CLOUD-PATTERNS/0_Starting-Points)  
81 | Also see my ⭐⭐⭐ - **FAQ course** - [Insights on Cloud Computing](https://www.linkedin.com/learning/insights-on-cloud-computing-with-lynn-langit) ⭐⭐⭐
82 | 


--------------------------------------------------------------------------------
/images/0-main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/0-main.png


--------------------------------------------------------------------------------
/images/1-main-gpt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/1-main-gpt.png


--------------------------------------------------------------------------------
/images/2a-ex-BQ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/2a-ex-BQ.png


--------------------------------------------------------------------------------
/images/2b-ex-Azure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/2b-ex-Azure.png


--------------------------------------------------------------------------------
/images/2c-ex-serverless-aws.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/2c-ex-serverless-aws.png


--------------------------------------------------------------------------------
/images/LAMP-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/LAMP-1.png


--------------------------------------------------------------------------------
/images/LAMP-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/LAMP-2.png


--------------------------------------------------------------------------------
/images/LAMP-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/LAMP-3.png


--------------------------------------------------------------------------------
/images/LAMP-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/LAMP-4.png


--------------------------------------------------------------------------------
/images/alibaba-locations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/alibaba-locations.png


--------------------------------------------------------------------------------
/images/aws-ci-cd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/aws-ci-cd.png


--------------------------------------------------------------------------------
/images/aws-locations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/aws-locations.png


--------------------------------------------------------------------------------
/images/azure-locations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/azure-locations.png


--------------------------------------------------------------------------------
/images/data-lakes/CLOUDLAKES.md:
--------------------------------------------------------------------------------
1 | # Patterns for Cloud Data Lakes
2 | ## Raw Kubernetes
3 | 
4 | This is the general pattern.  See specific vendor `CLOUDLAKE.md` files in each folder for examples using that cloud vendor's data lake servics.
5 | 
6 | <img src="https://github.com/lynnlangit/learning-cloud/blob/38919ae405d672286aec0a33ebe01e1b42c3d096/images/data-lakes/cloud-k8.png">
7 | 
8 | 


--------------------------------------------------------------------------------
/images/data-lakes/aws-cromwell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/aws-cromwell.png


--------------------------------------------------------------------------------
/images/data-lakes/aws-idseq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/aws-idseq.png


--------------------------------------------------------------------------------
/images/data-lakes/aws-k8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/aws-k8.png


--------------------------------------------------------------------------------
/images/data-lakes/aws-nextflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/aws-nextflow.png


--------------------------------------------------------------------------------
/images/data-lakes/aws-variantspark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/aws-variantspark.png


--------------------------------------------------------------------------------
/images/data-lakes/azure-cromwell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/azure-cromwell.png


--------------------------------------------------------------------------------
/images/data-lakes/cloud-k8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/cloud-k8.png


--------------------------------------------------------------------------------
/images/data-lakes/excalidraw-files/cromwell.excalidraw:
--------------------------------------------------------------------------------
   1 | {
   2 |   "type": "excalidraw",
   3 |   "version": 2,
   4 |   "source": "https://excalidraw.com",
   5 |   "elements": [
   6 |     {
   7 |       "type": "ellipse",
   8 |       "version": 302,
   9 |       "versionNonce": 1309521257,
  10 |       "isDeleted": false,
  11 |       "id": "zlVzpBEIsqx2xRwFRPXHJ",
  12 |       "fillStyle": "hachure",
  13 |       "strokeWidth": 1,
  14 |       "strokeStyle": "solid",
  15 |       "roughness": 1,
  16 |       "opacity": 100,
  17 |       "angle": 0,
  18 |       "x": 505.06640625,
  19 |       "y": -90.59375,
  20 |       "strokeColor": "#000000",
  21 |       "backgroundColor": "transparent",
  22 |       "width": 382.1953125,
  23 |       "height": 126.4609375,
  24 |       "seed": 1280939653,
  25 |       "groupIds": [],
  26 |       "strokeSharpness": "sharp",
  27 |       "boundElementIds": [
  28 |         "2bwDydvuGfzL4uUIQYjn-",
  29 |         "StNZak6JEplwGlvK-ArDP"
  30 |       ]
  31 |     },
  32 |     {
  33 |       "type": "rectangle",
  34 |       "version": 258,
  35 |       "versionNonce": 871596647,
  36 |       "isDeleted": false,
  37 |       "id": "VtDV9u6NmTT-vfiwxOT33",
  38 |       "fillStyle": "hachure",
  39 |       "strokeWidth": 1,
  40 |       "strokeStyle": "solid",
  41 |       "roughness": 1,
  42 |       "opacity": 100,
  43 |       "angle": 0,
  44 |       "x": 393.23828125,
  45 |       "y": 335.25,
  46 |       "strokeColor": "#000000",
  47 |       "backgroundColor": "transparent",
  48 |       "width": 567.96484375,
  49 |       "height": 104.83203125,
  50 |       "seed": 1579437259,
  51 |       "groupIds": [],
  52 |       "strokeSharpness": "sharp",
  53 |       "boundElementIds": []
  54 |     },
  55 |     {
  56 |       "type": "arrow",
  57 |       "version": 652,
  58 |       "versionNonce": 1536542121,
  59 |       "isDeleted": false,
  60 |       "id": "2bwDydvuGfzL4uUIQYjn-",
  61 |       "fillStyle": "hachure",
  62 |       "strokeWidth": 4,
  63 |       "strokeStyle": "solid",
  64 |       "roughness": 1,
  65 |       "opacity": 100,
  66 |       "angle": 0.592498660329726,
  67 |       "x": 505.72164672983695,
  68 |       "y": 11.909577034053399,
  69 |       "strokeColor": "#000000",
  70 |       "backgroundColor": "transparent",
  71 |       "width": 45.479226982944965,
  72 |       "height": 29.992100001047728,
  73 |       "seed": 235710949,
  74 |       "groupIds": [],
  75 |       "strokeSharpness": "round",
  76 |       "boundElementIds": [],
  77 |       "startBinding": {
  78 |         "elementId": "zlVzpBEIsqx2xRwFRPXHJ",
  79 |         "gap": 5.629168967372168,
  80 |         "focus": 0.9873239877485909
  81 |       },
  82 |       "endBinding": {
  83 |         "elementId": "EVjuM1xw_szZM-e_F4rwo",
  84 |         "gap": 7.281994671415327,
  85 |         "focus": -0.3261348100511172
  86 |       },
  87 |       "points": [
  88 |         [
  89 |           0,
  90 |           0
  91 |         ],
  92 |         [
  93 |           45.479226982944965,
  94 |           29.992100001047728
  95 |         ]
  96 |       ],
  97 |       "lastCommittedPoint": null,
  98 |       "startArrowhead": null,
  99 |       "endArrowhead": "arrow"
 100 |     },
 101 |     {
 102 |       "type": "text",
 103 |       "version": 215,
 104 |       "versionNonce": 747787815,
 105 |       "isDeleted": false,
 106 |       "id": "dZkyzjKAYBmqL7f0-efx0",
 107 |       "fillStyle": "hachure",
 108 |       "strokeWidth": 4,
 109 |       "strokeStyle": "solid",
 110 |       "roughness": 1,
 111 |       "opacity": 100,
 112 |       "angle": 0,
 113 |       "x": 974.71484375,
 114 |       "y": 363.21484375,
 115 |       "strokeColor": "#000000",
 116 |       "backgroundColor": "transparent",
 117 |       "width": 296,
 118 |       "height": 45,
 119 |       "seed": 868248171,
 120 |       "groupIds": [],
 121 |       "strokeSharpness": "sharp",
 122 |       "boundElementIds": [],
 123 |       "fontSize": 36,
 124 |       "fontFamily": 1,
 125 |       "text": "Compute Cluster",
 126 |       "baseline": 32,
 127 |       "textAlign": "left",
 128 |       "verticalAlign": "top"
 129 |     },
 130 |     {
 131 |       "type": "text",
 132 |       "version": 420,
 133 |       "versionNonce": 812808487,
 134 |       "isDeleted": false,
 135 |       "id": "ViMwgoSJlSdexkWic_sd-",
 136 |       "fillStyle": "hachure",
 137 |       "strokeWidth": 4,
 138 |       "strokeStyle": "solid",
 139 |       "roughness": 1,
 140 |       "opacity": 100,
 141 |       "angle": 0,
 142 |       "x": 975.02734375,
 143 |       "y": 285.703125,
 144 |       "strokeColor": "#000000",
 145 |       "backgroundColor": "transparent",
 146 |       "width": 388,
 147 |       "height": 45,
 148 |       "seed": 861511145,
 149 |       "groupIds": [],
 150 |       "strokeSharpness": "sharp",
 151 |       "boundElementIds": [],
 152 |       "fontSize": 36,
 153 |       "fontFamily": 1,
 154 |       "text": "VM/Cluster Controller",
 155 |       "baseline": 32,
 156 |       "textAlign": "left",
 157 |       "verticalAlign": "top"
 158 |     },
 159 |     {
 160 |       "type": "text",
 161 |       "version": 558,
 162 |       "versionNonce": 3914985,
 163 |       "isDeleted": false,
 164 |       "id": "23LmKPqO5JHIF_SaYTwFv",
 165 |       "fillStyle": "hachure",
 166 |       "strokeWidth": 4,
 167 |       "strokeStyle": "solid",
 168 |       "roughness": 1,
 169 |       "opacity": 100,
 170 |       "angle": 0,
 171 |       "x": 979.3515625,
 172 |       "y": 221.37109375,
 173 |       "strokeColor": "#000000",
 174 |       "backgroundColor": "transparent",
 175 |       "width": 449,
 176 |       "height": 45,
 177 |       "seed": 1739888681,
 178 |       "groupIds": [],
 179 |       "strokeSharpness": "sharp",
 180 |       "boundElementIds": [],
 181 |       "fontSize": 36,
 182 |       "fontFamily": 1,
 183 |       "text": "Job/Container Controller",
 184 |       "baseline": 32,
 185 |       "textAlign": "left",
 186 |       "verticalAlign": "top"
 187 |     },
 188 |     {
 189 |       "type": "rectangle",
 190 |       "version": 379,
 191 |       "versionNonce": 143081961,
 192 |       "isDeleted": false,
 193 |       "id": "pIBNj-19gO7d039D-gd5b",
 194 |       "fillStyle": "hachure",
 195 |       "strokeWidth": 1,
 196 |       "strokeStyle": "solid",
 197 |       "roughness": 1,
 198 |       "opacity": 100,
 199 |       "angle": 0,
 200 |       "x": 392.63671875,
 201 |       "y": 273.056640625,
 202 |       "strokeColor": "#000000",
 203 |       "backgroundColor": "transparent",
 204 |       "width": 567.33203125,
 205 |       "height": 59.796875,
 206 |       "seed": 1806739271,
 207 |       "groupIds": [],
 208 |       "strokeSharpness": "sharp",
 209 |       "boundElementIds": []
 210 |     },
 211 |     {
 212 |       "type": "rectangle",
 213 |       "version": 516,
 214 |       "versionNonce": 1013596295,
 215 |       "isDeleted": false,
 216 |       "id": "EVjuM1xw_szZM-e_F4rwo",
 217 |       "fillStyle": "hachure",
 218 |       "strokeWidth": 1,
 219 |       "strokeStyle": "solid",
 220 |       "roughness": 1,
 221 |       "opacity": 100,
 222 |       "angle": 0,
 223 |       "x": 395.2578125,
 224 |       "y": 59.326171875,
 225 |       "strokeColor": "#000000",
 226 |       "backgroundColor": "transparent",
 227 |       "width": 563.171875,
 228 |       "height": 157.953125,
 229 |       "seed": 1213457799,
 230 |       "groupIds": [],
 231 |       "strokeSharpness": "sharp",
 232 |       "boundElementIds": [
 233 |         "2bwDydvuGfzL4uUIQYjn-",
 234 |         "StNZak6JEplwGlvK-ArDP"
 235 |       ]
 236 |     },
 237 |     {
 238 |       "type": "rectangle",
 239 |       "version": 760,
 240 |       "versionNonce": 1591177799,
 241 |       "isDeleted": false,
 242 |       "id": "TwniV7N7snlYBqIB1Uqpi",
 243 |       "fillStyle": "solid",
 244 |       "strokeWidth": 1,
 245 |       "strokeStyle": "solid",
 246 |       "roughness": 1,
 247 |       "opacity": 100,
 248 |       "angle": 0,
 249 |       "x": 470.92381035557224,
 250 |       "y": 350.41470274298,
 251 |       "strokeColor": "#000000",
 252 |       "backgroundColor": "#ced4da",
 253 |       "width": 45.06253553885557,
 254 |       "height": 68.91712926798951,
 255 |       "seed": 196377065,
 256 |       "groupIds": [
 257 |         "HpBWU6qszDqSPRUtrKIeI"
 258 |       ],
 259 |       "strokeSharpness": "sharp",
 260 |       "boundElementIds": []
 261 |     },
 262 |     {
 263 |       "type": "rectangle",
 264 |       "version": 910,
 265 |       "versionNonce": 843381161,
 266 |       "isDeleted": false,
 267 |       "id": "EY915Av-DpsFUNM5cbUgf",
 268 |       "fillStyle": "solid",
 269 |       "strokeWidth": 1,
 270 |       "strokeStyle": "solid",
 271 |       "roughness": 1,
 272 |       "opacity": 100,
 273 |       "angle": 0,
 274 |       "x": 476.08297529621694,
 275 |       "y": 355.66898435688034,
 276 |       "strokeColor": "#000000",
 277 |       "backgroundColor": "#fff",
 278 |       "width": 35.50788279378928,
 279 |       "height": 52.708882312110724,
 280 |       "seed": 324482343,
 281 |       "groupIds": [
 282 |         "HpBWU6qszDqSPRUtrKIeI"
 283 |       ],
 284 |       "strokeSharpness": "sharp",
 285 |       "boundElementIds": []
 286 |     },
 287 |     {
 288 |       "type": "ellipse",
 289 |       "version": 954,
 290 |       "versionNonce": 1004507495,
 291 |       "isDeleted": false,
 292 |       "id": "gkB6l8yo6eqvsJQBn1bvR",
 293 |       "fillStyle": "solid",
 294 |       "strokeWidth": 1,
 295 |       "strokeStyle": "solid",
 296 |       "roughness": 1,
 297 |       "opacity": 100,
 298 |       "angle": 0,
 299 |       "x": 490.20099039962946,
 300 |       "y": 410.633584626984,
 301 |       "strokeColor": "#000000",
 302 |       "backgroundColor": "#fff",
 303 |       "width": 7.271852586964892,
 304 |       "height": 7.271852586964892,
 305 |       "seed": 1488934089,
 306 |       "groupIds": [
 307 |         "HpBWU6qszDqSPRUtrKIeI"
 308 |       ],
 309 |       "strokeSharpness": "sharp",
 310 |       "boundElementIds": []
 311 |     },
 312 |     {
 313 |       "type": "rectangle",
 314 |       "version": 602,
 315 |       "versionNonce": 548002953,
 316 |       "isDeleted": false,
 317 |       "id": "QlPkkcmTuJ0qvCk9DskJ-",
 318 |       "fillStyle": "cross-hatch",
 319 |       "strokeWidth": 1,
 320 |       "strokeStyle": "solid",
 321 |       "roughness": 1,
 322 |       "opacity": 100,
 323 |       "angle": 0,
 324 |       "x": 481.3515800647513,
 325 |       "y": 362.3785340453914,
 326 |       "strokeColor": "#000000",
 327 |       "backgroundColor": "#fab005",
 328 |       "width": 24.970673256720772,
 329 |       "height": 12.656234861443139,
 330 |       "seed": 354678855,
 331 |       "groupIds": [
 332 |         "HpBWU6qszDqSPRUtrKIeI"
 333 |       ],
 334 |       "strokeSharpness": "sharp",
 335 |       "boundElementIds": []
 336 |     },
 337 |     {
 338 |       "type": "rectangle",
 339 |       "version": 644,
 340 |       "versionNonce": 2094451847,
 341 |       "isDeleted": false,
 342 |       "id": "ajhBN965UUbpRv9dP-uOM",
 343 |       "fillStyle": "cross-hatch",
 344 |       "strokeWidth": 1,
 345 |       "strokeStyle": "solid",
 346 |       "roughness": 1,
 347 |       "opacity": 100,
 348 |       "angle": 0,
 349 |       "x": 481.3515800647513,
 350 |       "y": 385.0049578705992,
 351 |       "strokeColor": "#000000",
 352 |       "backgroundColor": "#fab005",
 353 |       "width": 24.970673256720772,
 354 |       "height": 12.656234861443139,
 355 |       "seed": 963367849,
 356 |       "groupIds": [
 357 |         "HpBWU6qszDqSPRUtrKIeI"
 358 |       ],
 359 |       "strokeSharpness": "sharp",
 360 |       "boundElementIds": []
 361 |     },
 362 |     {
 363 |       "type": "rectangle",
 364 |       "version": 807,
 365 |       "versionNonce": 1189699207,
 366 |       "isDeleted": false,
 367 |       "id": "9QP3IQ6gr73nIRVd9Bz53",
 368 |       "fillStyle": "solid",
 369 |       "strokeWidth": 1,
 370 |       "strokeStyle": "solid",
 371 |       "roughness": 1,
 372 |       "opacity": 100,
 373 |       "angle": 0,
 374 |       "x": 540.3281072305722,
 375 |       "y": 350.5219041160052,
 376 |       "strokeColor": "#000000",
 377 |       "backgroundColor": "#ced4da",
 378 |       "width": 45.06253553885557,
 379 |       "height": 68.91712926798951,
 380 |       "seed": 1791806793,
 381 |       "groupIds": [
 382 |         "dsCIXBVIBQH_GD-8j6RDO"
 383 |       ],
 384 |       "strokeSharpness": "sharp",
 385 |       "boundElementIds": []
 386 |     },
 387 |     {
 388 |       "type": "rectangle",
 389 |       "version": 957,
 390 |       "versionNonce": 2110189929,
 391 |       "isDeleted": false,
 392 |       "id": "Sdf2LsSp5g-Uf1b7MXrmV",
 393 |       "fillStyle": "solid",
 394 |       "strokeWidth": 1,
 395 |       "strokeStyle": "solid",
 396 |       "roughness": 1,
 397 |       "opacity": 100,
 398 |       "angle": 0,
 399 |       "x": 545.487272171217,
 400 |       "y": 355.7761857299056,
 401 |       "strokeColor": "#000000",
 402 |       "backgroundColor": "#fff",
 403 |       "width": 35.50788279378928,
 404 |       "height": 52.708882312110724,
 405 |       "seed": 254298055,
 406 |       "groupIds": [
 407 |         "dsCIXBVIBQH_GD-8j6RDO"
 408 |       ],
 409 |       "strokeSharpness": "sharp",
 410 |       "boundElementIds": []
 411 |     },
 412 |     {
 413 |       "type": "ellipse",
 414 |       "version": 1001,
 415 |       "versionNonce": 1533670823,
 416 |       "isDeleted": false,
 417 |       "id": "-N6O6FhWj49NSLE7mxoFU",
 418 |       "fillStyle": "solid",
 419 |       "strokeWidth": 1,
 420 |       "strokeStyle": "solid",
 421 |       "roughness": 1,
 422 |       "opacity": 100,
 423 |       "angle": 0,
 424 |       "x": 559.6052872746295,
 425 |       "y": 410.7407860000093,
 426 |       "strokeColor": "#000000",
 427 |       "backgroundColor": "#fff",
 428 |       "width": 7.271852586964892,
 429 |       "height": 7.271852586964892,
 430 |       "seed": 204880937,
 431 |       "groupIds": [
 432 |         "dsCIXBVIBQH_GD-8j6RDO"
 433 |       ],
 434 |       "strokeSharpness": "sharp",
 435 |       "boundElementIds": []
 436 |     },
 437 |     {
 438 |       "type": "rectangle",
 439 |       "version": 649,
 440 |       "versionNonce": 1620499529,
 441 |       "isDeleted": false,
 442 |       "id": "FOR1ct1Nc-h6upXT_JcU7",
 443 |       "fillStyle": "cross-hatch",
 444 |       "strokeWidth": 1,
 445 |       "strokeStyle": "solid",
 446 |       "roughness": 1,
 447 |       "opacity": 100,
 448 |       "angle": 0,
 449 |       "x": 550.7558769397513,
 450 |       "y": 362.48573541841665,
 451 |       "strokeColor": "#000000",
 452 |       "backgroundColor": "#fab005",
 453 |       "width": 24.970673256720772,
 454 |       "height": 12.656234861443139,
 455 |       "seed": 645510887,
 456 |       "groupIds": [
 457 |         "dsCIXBVIBQH_GD-8j6RDO"
 458 |       ],
 459 |       "strokeSharpness": "sharp",
 460 |       "boundElementIds": []
 461 |     },
 462 |     {
 463 |       "type": "rectangle",
 464 |       "version": 691,
 465 |       "versionNonce": 1040885959,
 466 |       "isDeleted": false,
 467 |       "id": "4lacE4EH2Z2rF6vzeOXP2",
 468 |       "fillStyle": "cross-hatch",
 469 |       "strokeWidth": 1,
 470 |       "strokeStyle": "solid",
 471 |       "roughness": 1,
 472 |       "opacity": 100,
 473 |       "angle": 0,
 474 |       "x": 550.7558769397513,
 475 |       "y": 385.11215924362443,
 476 |       "strokeColor": "#000000",
 477 |       "backgroundColor": "#fab005",
 478 |       "width": 24.970673256720772,
 479 |       "height": 12.656234861443139,
 480 |       "seed": 1615777545,
 481 |       "groupIds": [
 482 |         "dsCIXBVIBQH_GD-8j6RDO"
 483 |       ],
 484 |       "strokeSharpness": "sharp",
 485 |       "boundElementIds": []
 486 |     },
 487 |     {
 488 |       "type": "rectangle",
 489 |       "version": 860,
 490 |       "versionNonce": 1455209159,
 491 |       "isDeleted": false,
 492 |       "id": "ygI0WxAtz2Cq7WXMEnC7-",
 493 |       "fillStyle": "solid",
 494 |       "strokeWidth": 1,
 495 |       "strokeStyle": "solid",
 496 |       "roughness": 1,
 497 |       "opacity": 100,
 498 |       "angle": 0,
 499 |       "x": 609.1640447305722,
 500 |       "y": 351.1039353660052,
 501 |       "strokeColor": "#000000",
 502 |       "backgroundColor": "#ced4da",
 503 |       "width": 45.06253553885557,
 504 |       "height": 68.91712926798951,
 505 |       "seed": 838782889,
 506 |       "groupIds": [
 507 |         "cCbUVFUXUvSNeD4GVR-Lc"
 508 |       ],
 509 |       "strokeSharpness": "sharp",
 510 |       "boundElementIds": []
 511 |     },
 512 |     {
 513 |       "type": "rectangle",
 514 |       "version": 1010,
 515 |       "versionNonce": 211188009,
 516 |       "isDeleted": false,
 517 |       "id": "bW1wndWOIqb1HEil55-ju",
 518 |       "fillStyle": "solid",
 519 |       "strokeWidth": 1,
 520 |       "strokeStyle": "solid",
 521 |       "roughness": 1,
 522 |       "opacity": 100,
 523 |       "angle": 0,
 524 |       "x": 614.323209671217,
 525 |       "y": 356.3582169799057,
 526 |       "strokeColor": "#000000",
 527 |       "backgroundColor": "#fff",
 528 |       "width": 35.50788279378928,
 529 |       "height": 52.708882312110724,
 530 |       "seed": 232135527,
 531 |       "groupIds": [
 532 |         "cCbUVFUXUvSNeD4GVR-Lc"
 533 |       ],
 534 |       "strokeSharpness": "sharp",
 535 |       "boundElementIds": []
 536 |     },
 537 |     {
 538 |       "type": "ellipse",
 539 |       "version": 1054,
 540 |       "versionNonce": 151505383,
 541 |       "isDeleted": false,
 542 |       "id": "G-_6pkP9yjs2idw9q0fOD",
 543 |       "fillStyle": "solid",
 544 |       "strokeWidth": 1,
 545 |       "strokeStyle": "solid",
 546 |       "roughness": 1,
 547 |       "opacity": 100,
 548 |       "angle": 0,
 549 |       "x": 628.4412247746295,
 550 |       "y": 411.3228172500093,
 551 |       "strokeColor": "#000000",
 552 |       "backgroundColor": "#fff",
 553 |       "width": 7.271852586964892,
 554 |       "height": 7.271852586964892,
 555 |       "seed": 1991832201,
 556 |       "groupIds": [
 557 |         "cCbUVFUXUvSNeD4GVR-Lc"
 558 |       ],
 559 |       "strokeSharpness": "sharp",
 560 |       "boundElementIds": []
 561 |     },
 562 |     {
 563 |       "type": "rectangle",
 564 |       "version": 702,
 565 |       "versionNonce": 1134521353,
 566 |       "isDeleted": false,
 567 |       "id": "3uJp7ZBvWj8PhlB9LY_GH",
 568 |       "fillStyle": "cross-hatch",
 569 |       "strokeWidth": 1,
 570 |       "strokeStyle": "solid",
 571 |       "roughness": 1,
 572 |       "opacity": 100,
 573 |       "angle": 0,
 574 |       "x": 619.5918144397513,
 575 |       "y": 363.06776666841677,
 576 |       "strokeColor": "#000000",
 577 |       "backgroundColor": "#fab005",
 578 |       "width": 24.970673256720772,
 579 |       "height": 12.656234861443139,
 580 |       "seed": 594286215,
 581 |       "groupIds": [
 582 |         "cCbUVFUXUvSNeD4GVR-Lc"
 583 |       ],
 584 |       "strokeSharpness": "sharp",
 585 |       "boundElementIds": []
 586 |     },
 587 |     {
 588 |       "type": "rectangle",
 589 |       "version": 744,
 590 |       "versionNonce": 1499723015,
 591 |       "isDeleted": false,
 592 |       "id": "Ag0xVRGEcwSk7pj1_irb_",
 593 |       "fillStyle": "cross-hatch",
 594 |       "strokeWidth": 1,
 595 |       "strokeStyle": "solid",
 596 |       "roughness": 1,
 597 |       "opacity": 100,
 598 |       "angle": 0,
 599 |       "x": 619.5918144397513,
 600 |       "y": 385.69419049362443,
 601 |       "strokeColor": "#000000",
 602 |       "backgroundColor": "#fab005",
 603 |       "width": 24.970673256720772,
 604 |       "height": 12.656234861443139,
 605 |       "seed": 703314281,
 606 |       "groupIds": [
 607 |         "cCbUVFUXUvSNeD4GVR-Lc"
 608 |       ],
 609 |       "strokeSharpness": "sharp",
 610 |       "boundElementIds": []
 611 |     },
 612 |     {
 613 |       "type": "rectangle",
 614 |       "version": 919,
 615 |       "versionNonce": 2036702057,
 616 |       "isDeleted": false,
 617 |       "id": "BZn4OgJgXXmF_DBWNYUxX",
 618 |       "fillStyle": "solid",
 619 |       "strokeWidth": 1,
 620 |       "strokeStyle": "solid",
 621 |       "roughness": 1,
 622 |       "opacity": 100,
 623 |       "angle": 0,
 624 |       "x": 683.3398259805722,
 625 |       "y": 351.6078416160052,
 626 |       "strokeColor": "#000000",
 627 |       "backgroundColor": "#ced4da",
 628 |       "width": 45.06253553885557,
 629 |       "height": 68.91712926798951,
 630 |       "seed": 1342821703,
 631 |       "groupIds": [
 632 |         "Joh6hohuwI9a_dzOsyjpy"
 633 |       ],
 634 |       "strokeSharpness": "sharp",
 635 |       "boundElementIds": []
 636 |     },
 637 |     {
 638 |       "type": "rectangle",
 639 |       "version": 1069,
 640 |       "versionNonce": 1843588007,
 641 |       "isDeleted": false,
 642 |       "id": "DO9q_6LuBY97M8H4OPQuh",
 643 |       "fillStyle": "solid",
 644 |       "strokeWidth": 1,
 645 |       "strokeStyle": "solid",
 646 |       "roughness": 1,
 647 |       "opacity": 100,
 648 |       "angle": 0,
 649 |       "x": 688.498990921217,
 650 |       "y": 356.8621232299057,
 651 |       "strokeColor": "#000000",
 652 |       "backgroundColor": "#fff",
 653 |       "width": 35.50788279378928,
 654 |       "height": 52.708882312110724,
 655 |       "seed": 1847477929,
 656 |       "groupIds": [
 657 |         "Joh6hohuwI9a_dzOsyjpy"
 658 |       ],
 659 |       "strokeSharpness": "sharp",
 660 |       "boundElementIds": []
 661 |     },
 662 |     {
 663 |       "type": "ellipse",
 664 |       "version": 1113,
 665 |       "versionNonce": 114312777,
 666 |       "isDeleted": false,
 667 |       "id": "JzMxL6vRWPR4IwQEkorWx",
 668 |       "fillStyle": "solid",
 669 |       "strokeWidth": 1,
 670 |       "strokeStyle": "solid",
 671 |       "roughness": 1,
 672 |       "opacity": 100,
 673 |       "angle": 0,
 674 |       "x": 702.6170060246295,
 675 |       "y": 411.8267235000093,
 676 |       "strokeColor": "#000000",
 677 |       "backgroundColor": "#fff",
 678 |       "width": 7.271852586964892,
 679 |       "height": 7.271852586964892,
 680 |       "seed": 1053660263,
 681 |       "groupIds": [
 682 |         "Joh6hohuwI9a_dzOsyjpy"
 683 |       ],
 684 |       "strokeSharpness": "sharp",
 685 |       "boundElementIds": []
 686 |     },
 687 |     {
 688 |       "type": "rectangle",
 689 |       "version": 761,
 690 |       "versionNonce": 1106566855,
 691 |       "isDeleted": false,
 692 |       "id": "_D2VYMuhmSAXZkfbnVWID",
 693 |       "fillStyle": "cross-hatch",
 694 |       "strokeWidth": 1,
 695 |       "strokeStyle": "solid",
 696 |       "roughness": 1,
 697 |       "opacity": 100,
 698 |       "angle": 0,
 699 |       "x": 693.7675956897513,
 700 |       "y": 363.57167291841677,
 701 |       "strokeColor": "#000000",
 702 |       "backgroundColor": "#fab005",
 703 |       "width": 24.970673256720772,
 704 |       "height": 12.656234861443139,
 705 |       "seed": 231836041,
 706 |       "groupIds": [
 707 |         "Joh6hohuwI9a_dzOsyjpy"
 708 |       ],
 709 |       "strokeSharpness": "sharp",
 710 |       "boundElementIds": []
 711 |     },
 712 |     {
 713 |       "type": "rectangle",
 714 |       "version": 803,
 715 |       "versionNonce": 727881001,
 716 |       "isDeleted": false,
 717 |       "id": "Lf2HAA4D56SgIg4NdpRfb",
 718 |       "fillStyle": "cross-hatch",
 719 |       "strokeWidth": 1,
 720 |       "strokeStyle": "solid",
 721 |       "roughness": 1,
 722 |       "opacity": 100,
 723 |       "angle": 0,
 724 |       "x": 693.7675956897513,
 725 |       "y": 386.19809674362443,
 726 |       "strokeColor": "#000000",
 727 |       "backgroundColor": "#fab005",
 728 |       "width": 24.970673256720772,
 729 |       "height": 12.656234861443139,
 730 |       "seed": 420245383,
 731 |       "groupIds": [
 732 |         "Joh6hohuwI9a_dzOsyjpy"
 733 |       ],
 734 |       "strokeSharpness": "sharp",
 735 |       "boundElementIds": []
 736 |     },
 737 |     {
 738 |       "type": "rectangle",
 739 |       "version": 954,
 740 |       "versionNonce": 1953657833,
 741 |       "isDeleted": false,
 742 |       "id": "U2knqjRP6w3CkwNSii4PO",
 743 |       "fillStyle": "solid",
 744 |       "strokeWidth": 1,
 745 |       "strokeStyle": "solid",
 746 |       "roughness": 1,
 747 |       "opacity": 100,
 748 |       "angle": 0,
 749 |       "x": 754.0624822305722,
 750 |       "y": 351.8265916160052,
 751 |       "strokeColor": "#000000",
 752 |       "backgroundColor": "#ced4da",
 753 |       "width": 45.06253553885557,
 754 |       "height": 68.91712926798951,
 755 |       "seed": 1400096903,
 756 |       "groupIds": [
 757 |         "odaOzFd6ziArfzcl6iVc6"
 758 |       ],
 759 |       "strokeSharpness": "sharp",
 760 |       "boundElementIds": []
 761 |     },
 762 |     {
 763 |       "type": "rectangle",
 764 |       "version": 1104,
 765 |       "versionNonce": 420338471,
 766 |       "isDeleted": false,
 767 |       "id": "NUfbos8okcRzriJ4wmEGv",
 768 |       "fillStyle": "solid",
 769 |       "strokeWidth": 1,
 770 |       "strokeStyle": "solid",
 771 |       "roughness": 1,
 772 |       "opacity": 100,
 773 |       "angle": 0,
 774 |       "x": 759.221647171217,
 775 |       "y": 357.0808732299057,
 776 |       "strokeColor": "#000000",
 777 |       "backgroundColor": "#fff",
 778 |       "width": 35.50788279378928,
 779 |       "height": 52.708882312110724,
 780 |       "seed": 619718505,
 781 |       "groupIds": [
 782 |         "odaOzFd6ziArfzcl6iVc6"
 783 |       ],
 784 |       "strokeSharpness": "sharp",
 785 |       "boundElementIds": []
 786 |     },
 787 |     {
 788 |       "type": "ellipse",
 789 |       "version": 1148,
 790 |       "versionNonce": 732827337,
 791 |       "isDeleted": false,
 792 |       "id": "kzgoa9DdC4LEE5zgqEcGU",
 793 |       "fillStyle": "solid",
 794 |       "strokeWidth": 1,
 795 |       "strokeStyle": "solid",
 796 |       "roughness": 1,
 797 |       "opacity": 100,
 798 |       "angle": 0,
 799 |       "x": 773.3396622746295,
 800 |       "y": 412.0454735000093,
 801 |       "strokeColor": "#000000",
 802 |       "backgroundColor": "#fff",
 803 |       "width": 7.271852586964892,
 804 |       "height": 7.271852586964892,
 805 |       "seed": 2132221863,
 806 |       "groupIds": [
 807 |         "odaOzFd6ziArfzcl6iVc6"
 808 |       ],
 809 |       "strokeSharpness": "sharp",
 810 |       "boundElementIds": []
 811 |     },
 812 |     {
 813 |       "type": "rectangle",
 814 |       "version": 796,
 815 |       "versionNonce": 957734471,
 816 |       "isDeleted": false,
 817 |       "id": "YsIiOto8HFayShLZzqqWp",
 818 |       "fillStyle": "cross-hatch",
 819 |       "strokeWidth": 1,
 820 |       "strokeStyle": "solid",
 821 |       "roughness": 1,
 822 |       "opacity": 100,
 823 |       "angle": 0,
 824 |       "x": 764.4902519397513,
 825 |       "y": 363.79042291841677,
 826 |       "strokeColor": "#000000",
 827 |       "backgroundColor": "#fab005",
 828 |       "width": 24.970673256720772,
 829 |       "height": 12.656234861443139,
 830 |       "seed": 2032751177,
 831 |       "groupIds": [
 832 |         "odaOzFd6ziArfzcl6iVc6"
 833 |       ],
 834 |       "strokeSharpness": "sharp",
 835 |       "boundElementIds": []
 836 |     },
 837 |     {
 838 |       "type": "rectangle",
 839 |       "version": 838,
 840 |       "versionNonce": 1920159145,
 841 |       "isDeleted": false,
 842 |       "id": "RRrLrdLE7boTtZOWOCVqN",
 843 |       "fillStyle": "cross-hatch",
 844 |       "strokeWidth": 1,
 845 |       "strokeStyle": "solid",
 846 |       "roughness": 1,
 847 |       "opacity": 100,
 848 |       "angle": 0,
 849 |       "x": 764.4902519397513,
 850 |       "y": 386.41684674362443,
 851 |       "strokeColor": "#000000",
 852 |       "backgroundColor": "#fab005",
 853 |       "width": 24.970673256720772,
 854 |       "height": 12.656234861443139,
 855 |       "seed": 109220551,
 856 |       "groupIds": [
 857 |         "odaOzFd6ziArfzcl6iVc6"
 858 |       ],
 859 |       "strokeSharpness": "sharp",
 860 |       "boundElementIds": []
 861 |     },
 862 |     {
 863 |       "type": "rectangle",
 864 |       "version": 1001,
 865 |       "versionNonce": 228896777,
 866 |       "isDeleted": false,
 867 |       "id": "k7ONFTyZKgVkFj1yUSgkH",
 868 |       "fillStyle": "solid",
 869 |       "strokeWidth": 1,
 870 |       "strokeStyle": "solid",
 871 |       "roughness": 1,
 872 |       "opacity": 100,
 873 |       "angle": 0,
 874 |       "x": 816.3007634805722,
 875 |       "y": 349.9320603660052,
 876 |       "strokeColor": "#000000",
 877 |       "backgroundColor": "#ced4da",
 878 |       "width": 45.06253553885557,
 879 |       "height": 68.91712926798951,
 880 |       "seed": 1199134503,
 881 |       "groupIds": [
 882 |         "E-d8jrrTiSGQUrmfPMFUf"
 883 |       ],
 884 |       "strokeSharpness": "sharp",
 885 |       "boundElementIds": []
 886 |     },
 887 |     {
 888 |       "type": "rectangle",
 889 |       "version": 1151,
 890 |       "versionNonce": 272953607,
 891 |       "isDeleted": false,
 892 |       "id": "3Xmr2bNdgrqBnPGZYs0cs",
 893 |       "fillStyle": "solid",
 894 |       "strokeWidth": 1,
 895 |       "strokeStyle": "solid",
 896 |       "roughness": 1,
 897 |       "opacity": 100,
 898 |       "angle": 0,
 899 |       "x": 821.459928421217,
 900 |       "y": 355.1863419799057,
 901 |       "strokeColor": "#000000",
 902 |       "backgroundColor": "#fff",
 903 |       "width": 35.50788279378928,
 904 |       "height": 52.708882312110724,
 905 |       "seed": 147346121,
 906 |       "groupIds": [
 907 |         "E-d8jrrTiSGQUrmfPMFUf"
 908 |       ],
 909 |       "strokeSharpness": "sharp",
 910 |       "boundElementIds": []
 911 |     },
 912 |     {
 913 |       "type": "ellipse",
 914 |       "version": 1195,
 915 |       "versionNonce": 931383017,
 916 |       "isDeleted": false,
 917 |       "id": "51fkTk6h8L3hNuaCUSQ8Z",
 918 |       "fillStyle": "solid",
 919 |       "strokeWidth": 1,
 920 |       "strokeStyle": "solid",
 921 |       "roughness": 1,
 922 |       "opacity": 100,
 923 |       "angle": 0,
 924 |       "x": 835.5779435246295,
 925 |       "y": 410.1509422500093,
 926 |       "strokeColor": "#000000",
 927 |       "backgroundColor": "#fff",
 928 |       "width": 7.271852586964892,
 929 |       "height": 7.271852586964892,
 930 |       "seed": 78764615,
 931 |       "groupIds": [
 932 |         "E-d8jrrTiSGQUrmfPMFUf"
 933 |       ],
 934 |       "strokeSharpness": "sharp",
 935 |       "boundElementIds": []
 936 |     },
 937 |     {
 938 |       "type": "rectangle",
 939 |       "version": 843,
 940 |       "versionNonce": 1219442727,
 941 |       "isDeleted": false,
 942 |       "id": "UeBCozrlskkkfKakLAx9Z",
 943 |       "fillStyle": "cross-hatch",
 944 |       "strokeWidth": 1,
 945 |       "strokeStyle": "solid",
 946 |       "roughness": 1,
 947 |       "opacity": 100,
 948 |       "angle": 0,
 949 |       "x": 826.7285331897513,
 950 |       "y": 361.89589166841677,
 951 |       "strokeColor": "#000000",
 952 |       "backgroundColor": "#fab005",
 953 |       "width": 24.970673256720772,
 954 |       "height": 12.656234861443139,
 955 |       "seed": 1000673705,
 956 |       "groupIds": [
 957 |         "E-d8jrrTiSGQUrmfPMFUf"
 958 |       ],
 959 |       "strokeSharpness": "sharp",
 960 |       "boundElementIds": []
 961 |     },
 962 |     {
 963 |       "type": "rectangle",
 964 |       "version": 885,
 965 |       "versionNonce": 1193083337,
 966 |       "isDeleted": false,
 967 |       "id": "w4RLvrYXg5raSEFV1Ojjx",
 968 |       "fillStyle": "cross-hatch",
 969 |       "strokeWidth": 1,
 970 |       "strokeStyle": "solid",
 971 |       "roughness": 1,
 972 |       "opacity": 100,
 973 |       "angle": 0,
 974 |       "x": 826.7285331897513,
 975 |       "y": 384.52231549362443,
 976 |       "strokeColor": "#000000",
 977 |       "backgroundColor": "#fab005",
 978 |       "width": 24.970673256720772,
 979 |       "height": 12.656234861443139,
 980 |       "seed": 170719591,
 981 |       "groupIds": [
 982 |         "E-d8jrrTiSGQUrmfPMFUf"
 983 |       ],
 984 |       "strokeSharpness": "sharp",
 985 |       "boundElementIds": []
 986 |     },
 987 |     {
 988 |       "type": "text",
 989 |       "version": 277,
 990 |       "versionNonce": 1546160745,
 991 |       "isDeleted": false,
 992 |       "id": "3rskx_eeZc8Skvp1WhE2d",
 993 |       "fillStyle": "hachure",
 994 |       "strokeWidth": 4,
 995 |       "strokeStyle": "solid",
 996 |       "roughness": 1,
 997 |       "opacity": 100,
 998 |       "angle": 0,
 999 |       "x": 885.484375,
1000 |       "y": 360.7421875,
1001 |       "strokeColor": "#000000",
1002 |       "backgroundColor": "transparent",
1003 |       "width": 63,
1004 |       "height": 45,
1005 |       "seed": 2045345031,
1006 |       "groupIds": [],
1007 |       "strokeSharpness": "sharp",
1008 |       "boundElementIds": [],
1009 |       "fontSize": 36,
1010 |       "fontFamily": 1,
1011 |       "text": "VMs",
1012 |       "baseline": 32,
1013 |       "textAlign": "left",
1014 |       "verticalAlign": "top"
1015 |     },
1016 |     {
1017 |       "type": "text",
1018 |       "version": 630,
1019 |       "versionNonce": 156538951,
1020 |       "isDeleted": false,
1021 |       "id": "lDymgv-ZYXi-kAEOuLetd",
1022 |       "fillStyle": "hachure",
1023 |       "strokeWidth": 4,
1024 |       "strokeStyle": "solid",
1025 |       "roughness": 1,
1026 |       "opacity": 100,
1027 |       "angle": 0,
1028 |       "x": 463.25,
1029 |       "y": 280.23046875,
1030 |       "strokeColor": "#000000",
1031 |       "backgroundColor": "transparent",
1032 |       "width": 135,
1033 |       "height": 35,
1034 |       "seed": 388454953,
1035 |       "groupIds": [],
1036 |       "strokeSharpness": "sharp",
1037 |       "boundElementIds": [],
1038 |       "fontSize": 28,
1039 |       "fontFamily": 1,
1040 |       "text": "Hypervisor",
1041 |       "baseline": 25,
1042 |       "textAlign": "left",
1043 |       "verticalAlign": "top"
1044 |     },
1045 |     {
1046 |       "type": "line",
1047 |       "version": 2075,
1048 |       "versionNonce": 981065735,
1049 |       "isDeleted": false,
1050 |       "id": "iseRrGV60ltu4_4Z_mO9C",
1051 |       "fillStyle": "hachure",
1052 |       "strokeWidth": 1,
1053 |       "strokeStyle": "solid",
1054 |       "roughness": 1,
1055 |       "opacity": 100,
1056 |       "angle": 0,
1057 |       "x": 755.1637776674261,
1058 |       "y": 219.6720940635917,
1059 |       "strokeColor": "#881fa3",
1060 |       "backgroundColor": "#be4bdb",
1061 |       "width": 44.383041179642454,
1062 |       "height": 52.12767620020764,
1063 |       "seed": 1663412137,
1064 |       "groupIds": [],
1065 |       "strokeSharpness": "sharp",
1066 |       "boundElementIds": [],
1067 |       "startBinding": null,
1068 |       "endBinding": null,
1069 |       "points": [
1070 |         [
1071 |           -131.37268276431644,
1072 |           -2.842170943040401e-14
1073 |         ],
1074 |         [
1075 |           -155.17747191501513,
1076 |           9.655610724735936
1077 |         ],
1078 |         [
1079 |           -155.45758928571422,
1080 |           39.950764179052655
1081 |         ],
1082 |         [
1083 |           -134.2770272724487,
1084 |           52.12767620020761
1085 |         ],
1086 |         [
1087 |           -111.56273619862746,
1088 |           39.810100506001824
1089 |         ],
1090 |         [
1091 |           -111.07454810607177,
1092 |           10.704885691279152
1093 |         ],
1094 |         [
1095 |           -131.37268276431644,
1096 |           -2.842170943040401e-14
1097 |         ]
1098 |       ],
1099 |       "lastCommittedPoint": null,
1100 |       "startArrowhead": null,
1101 |       "endArrowhead": null
1102 |     },
1103 |     {
1104 |       "type": "rectangle",
1105 |       "version": 419,
1106 |       "versionNonce": 1641600199,
1107 |       "isDeleted": false,
1108 |       "id": "t4bQon3Bw7u9-EWIooWls",
1109 |       "fillStyle": "hachure",
1110 |       "strokeWidth": 1,
1111 |       "strokeStyle": "solid",
1112 |       "roughness": 1,
1113 |       "opacity": 100,
1114 |       "angle": 0,
1115 |       "x": 393.6640625,
1116 |       "y": 216.62109375,
1117 |       "strokeColor": "#000000",
1118 |       "backgroundColor": "transparent",
1119 |       "width": 567.296875,
1120 |       "height": 59.796875,
1121 |       "seed": 619071303,
1122 |       "groupIds": [],
1123 |       "strokeSharpness": "sharp",
1124 |       "boundElementIds": []
1125 |     },
1126 |     {
1127 |       "type": "text",
1128 |       "version": 680,
1129 |       "versionNonce": 929580553,
1130 |       "isDeleted": false,
1131 |       "id": "5woIrw3vSnVvtlSlYYt0I",
1132 |       "fillStyle": "hachure",
1133 |       "strokeWidth": 4,
1134 |       "strokeStyle": "solid",
1135 |       "roughness": 1,
1136 |       "opacity": 100,
1137 |       "angle": 0,
1138 |       "x": 678.57421875,
1139 |       "y": 286.3203125,
1140 |       "strokeColor": "#000000",
1141 |       "backgroundColor": "transparent",
1142 |       "width": 231,
1143 |       "height": 35,
1144 |       "seed": 989530631,
1145 |       "groupIds": [],
1146 |       "strokeSharpness": "sharp",
1147 |       "boundElementIds": [],
1148 |       "fontSize": 28,
1149 |       "fontFamily": 1,
1150 |       "text": "AWS auto-scaler",
1151 |       "baseline": 25,
1152 |       "textAlign": "left",
1153 |       "verticalAlign": "top"
1154 |     },
1155 |     {
1156 |       "type": "line",
1157 |       "version": 1991,
1158 |       "versionNonce": 1612290889,
1159 |       "isDeleted": false,
1160 |       "id": "q1nLcIAgCHsOXP6h4YCV2",
1161 |       "fillStyle": "hachure",
1162 |       "strokeWidth": 1,
1163 |       "strokeStyle": "solid",
1164 |       "roughness": 1,
1165 |       "opacity": 100,
1166 |       "angle": 0,
1167 |       "x": 783.082474945893,
1168 |       "y": 278.4283493998962,
1169 |       "strokeColor": "#087f5b",
1170 |       "backgroundColor": "#12b886",
1171 |       "width": 44.383041179642454,
1172 |       "height": 52.12767620020764,
1173 |       "seed": 1763481639,
1174 |       "groupIds": [],
1175 |       "strokeSharpness": "sharp",
1176 |       "boundElementIds": [],
1177 |       "startBinding": null,
1178 |       "endBinding": null,
1179 |       "points": [
1180 |         [
1181 |           -131.37268276431644,
1182 |           -2.842170943040401e-14
1183 |         ],
1184 |         [
1185 |           -155.17747191501513,
1186 |           9.655610724735936
1187 |         ],
1188 |         [
1189 |           -155.45758928571422,
1190 |           39.950764179052655
1191 |         ],
1192 |         [
1193 |           -134.2770272724487,
1194 |           52.12767620020761
1195 |         ],
1196 |         [
1197 |           -111.56273619862746,
1198 |           39.810100506001824
1199 |         ],
1200 |         [
1201 |           -111.07454810607177,
1202 |           10.704885691279152
1203 |         ],
1204 |         [
1205 |           -131.37268276431644,
1206 |           -2.842170943040401e-14
1207 |         ]
1208 |       ],
1209 |       "lastCommittedPoint": null,
1210 |       "startArrowhead": null,
1211 |       "endArrowhead": null
1212 |     },
1213 |     {
1214 |       "type": "arrow",
1215 |       "version": 767,
1216 |       "versionNonce": 2114005129,
1217 |       "isDeleted": false,
1218 |       "id": "StNZak6JEplwGlvK-ArDP",
1219 |       "fillStyle": "hachure",
1220 |       "strokeWidth": 4,
1221 |       "strokeStyle": "solid",
1222 |       "roughness": 1,
1223 |       "opacity": 100,
1224 |       "angle": 5.121696047664543,
1225 |       "x": 815.4658076378854,
1226 |       "y": 26.04394769161611,
1227 |       "strokeColor": "#000000",
1228 |       "backgroundColor": "transparent",
1229 |       "width": 49.494178979189996,
1230 |       "height": 13.620173811743722,
1231 |       "seed": 1067191401,
1232 |       "groupIds": [],
1233 |       "strokeSharpness": "round",
1234 |       "boundElementIds": [],
1235 |       "endBinding": {
1236 |         "elementId": "zlVzpBEIsqx2xRwFRPXHJ",
1237 |         "gap": 5.864940303397631,
1238 |         "focus": -0.9735444299651743
1239 |       },
1240 |       "points": [
1241 |         [
1242 |           0,
1243 |           0
1244 |         ],
1245 |         [
1246 |           49.494178979189996,
1247 |           13.620173811743722
1248 |         ]
1249 |       ],
1250 |       "lastCommittedPoint": null,
1251 |       "startArrowhead": null,
1252 |       "endArrowhead": "arrow",
1253 |       "startBinding": {
1254 |         "elementId": "EVjuM1xw_szZM-e_F4rwo",
1255 |         "gap": 6.560631539647905,
1256 |         "focus": 0.22686973052578552
1257 |       }
1258 |     },
1259 |     {
1260 |       "type": "rectangle",
1261 |       "version": 4471,
1262 |       "versionNonce": 1821347305,
1263 |       "isDeleted": false,
1264 |       "id": "z8ktQpJyBi8dfvZTvD33K",
1265 |       "fillStyle": "solid",
1266 |       "strokeWidth": 2,
1267 |       "strokeStyle": "solid",
1268 |       "roughness": 1,
1269 |       "opacity": 100,
1270 |       "angle": 0,
1271 |       "x": 558.5047020180216,
1272 |       "y": -50.88765189202803,
1273 |       "strokeColor": "#000000",
1274 |       "backgroundColor": "#fff",
1275 |       "width": 32.22784587503368,
1276 |       "height": 48.903965306939746,
1277 |       "seed": 1395719625,
1278 |       "groupIds": [
1279 |         "7Ar-ivOKKREHasJ5rL9Vv"
1280 |       ],
1281 |       "strokeSharpness": "sharp",
1282 |       "boundElementIds": [
1283 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1284 |         "XIl_NhaFtRO00pX5Pq6VU",
1285 |         "EndiSTFlx1AT7vcBVjgve"
1286 |       ]
1287 |     },
1288 |     {
1289 |       "type": "rectangle",
1290 |       "version": 4520,
1291 |       "versionNonce": 275210535,
1292 |       "isDeleted": false,
1293 |       "id": "2ZvbAPUsvtx5WfWpZ0Yrm",
1294 |       "fillStyle": "solid",
1295 |       "strokeWidth": 2,
1296 |       "strokeStyle": "solid",
1297 |       "roughness": 1,
1298 |       "opacity": 100,
1299 |       "angle": 0,
1300 |       "x": 555.0632420134725,
1301 |       "y": -54.088654986831905,
1302 |       "strokeColor": "#000000",
1303 |       "backgroundColor": "#fff",
1304 |       "width": 32.22784587503368,
1305 |       "height": 48.903965306939746,
1306 |       "seed": 1925013319,
1307 |       "groupIds": [
1308 |         "GgmRYzzDzezagWvJBdm8N",
1309 |         "7Ar-ivOKKREHasJ5rL9Vv"
1310 |       ],
1311 |       "strokeSharpness": "sharp",
1312 |       "boundElementIds": [
1313 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1314 |         "XIl_NhaFtRO00pX5Pq6VU",
1315 |         "EndiSTFlx1AT7vcBVjgve"
1316 |       ]
1317 |     },
1318 |     {
1319 |       "type": "rectangle",
1320 |       "version": 4618,
1321 |       "versionNonce": 353888457,
1322 |       "isDeleted": false,
1323 |       "id": "vdOAa2P3m-FqDCNiCmIih",
1324 |       "fillStyle": "solid",
1325 |       "strokeWidth": 2,
1326 |       "strokeStyle": "solid",
1327 |       "roughness": 1,
1328 |       "opacity": 100,
1329 |       "angle": 0,
1330 |       "x": 550.7792922436695,
1331 |       "y": -57.85225091491162,
1332 |       "strokeColor": "#000000",
1333 |       "backgroundColor": "#fff",
1334 |       "width": 32.22784587503368,
1335 |       "height": 48.903965306939746,
1336 |       "seed": 700472489,
1337 |       "groupIds": [
1338 |         "7Ar-ivOKKREHasJ5rL9Vv"
1339 |       ],
1340 |       "strokeSharpness": "sharp",
1341 |       "boundElementIds": [
1342 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1343 |         "XIl_NhaFtRO00pX5Pq6VU",
1344 |         "EndiSTFlx1AT7vcBVjgve"
1345 |       ]
1346 |     },
1347 |     {
1348 |       "type": "draw",
1349 |       "version": 3741,
1350 |       "versionNonce": 1464771655,
1351 |       "isDeleted": false,
1352 |       "id": "5f9deUrDjZ3mGG5VwP1tA",
1353 |       "fillStyle": "solid",
1354 |       "strokeWidth": 1,
1355 |       "strokeStyle": "solid",
1356 |       "roughness": 1,
1357 |       "opacity": 100,
1358 |       "angle": 0,
1359 |       "x": 556.5652830241524,
1360 |       "y": -35.182197544310895,
1361 |       "strokeColor": "#000000",
1362 |       "backgroundColor": "#fff",
1363 |       "width": 21.23935931101259,
1364 |       "height": 1.481905982978408,
1365 |       "seed": 377478759,
1366 |       "groupIds": [
1367 |         "7Ar-ivOKKREHasJ5rL9Vv"
1368 |       ],
1369 |       "strokeSharpness": "round",
1370 |       "boundElementIds": [],
1371 |       "points": [
1372 |         [
1373 |           0,
1374 |           -1.0809527239220595
1375 |         ],
1376 |         [
1377 |           18.432660413931682,
1378 |           -1.0091850257935375
1379 |         ],
1380 |         [
1381 |           21.23935931101259,
1382 |           -2.491091008771946
1383 |         ]
1384 |       ],
1385 |       "lastCommittedPoint": null,
1386 |       "startArrowhead": null,
1387 |       "endArrowhead": null
1388 |     },
1389 |     {
1390 |       "type": "draw",
1391 |       "version": 3767,
1392 |       "versionNonce": 93448105,
1393 |       "isDeleted": false,
1394 |       "id": "0It5rGkgwQDC6G8oDHqAw",
1395 |       "fillStyle": "solid",
1396 |       "strokeWidth": 1,
1397 |       "strokeStyle": "solid",
1398 |       "roughness": 1,
1399 |       "opacity": 100,
1400 |       "angle": 0,
1401 |       "x": 557.6195078952185,
1402 |       "y": -49.01235053914373,
1403 |       "strokeColor": "#000000",
1404 |       "backgroundColor": "#fff",
1405 |       "width": 20.77771844196958,
1406 |       "height": 1.2782408936947272,
1407 |       "seed": 2025906057,
1408 |       "groupIds": [
1409 |         "7Ar-ivOKKREHasJ5rL9Vv"
1410 |       ],
1411 |       "strokeSharpness": "round",
1412 |       "boundElementIds": [],
1413 |       "points": [
1414 |         [
1415 |           0,
1416 |           -1.5250569903199922
1417 |         ],
1418 |         [
1419 |           7.675264364719304,
1420 |           -2.8032978840147194
1421 |         ],
1422 |         [
1423 |           20.77771844196958,
1424 |           -1.674411389127978
1425 |         ]
1426 |       ],
1427 |       "lastCommittedPoint": null,
1428 |       "startArrowhead": null,
1429 |       "endArrowhead": null
1430 |     },
1431 |     {
1432 |       "type": "draw",
1433 |       "version": 3792,
1434 |       "versionNonce": 1117815655,
1435 |       "isDeleted": false,
1436 |       "id": "5iQaq3OAWq1EeDhEgqXso",
1437 |       "fillStyle": "solid",
1438 |       "strokeWidth": 1,
1439 |       "strokeStyle": "solid",
1440 |       "roughness": 1,
1441 |       "opacity": 100,
1442 |       "angle": 0,
1443 |       "x": 557.3254007880512,
1444 |       "y": -18.80632888907123,
1445 |       "strokeColor": "#000000",
1446 |       "backgroundColor": "#fff",
1447 |       "width": 22.040441995528322,
1448 |       "height": 1.9518837165130463,
1449 |       "seed": 400914823,
1450 |       "groupIds": [
1451 |         "7Ar-ivOKKREHasJ5rL9Vv"
1452 |       ],
1453 |       "strokeSharpness": "round",
1454 |       "boundElementIds": [],
1455 |       "points": [
1456 |         [
1457 |           0,
1458 |           -1.0691598323638951
1459 |         ],
1460 |         [
1461 |           12.04339561297506,
1462 |           -1.1855398833831219
1463 |         ],
1464 |         [
1465 |           17.153876880715732,
1466 |           -0.013402508699010725
1467 |         ],
1468 |         [
1469 |           22.040441995528322,
1470 |           -1.9652862252120569
1471 |         ]
1472 |       ],
1473 |       "lastCommittedPoint": null,
1474 |       "startArrowhead": null,
1475 |       "endArrowhead": null
1476 |     },
1477 |     {
1478 |       "type": "draw",
1479 |       "version": 3829,
1480 |       "versionNonce": 405342857,
1481 |       "isDeleted": false,
1482 |       "id": "nxJtTKMpuySOyw2-7-DBI",
1483 |       "fillStyle": "solid",
1484 |       "strokeWidth": 1,
1485 |       "strokeStyle": "solid",
1486 |       "roughness": 1,
1487 |       "opacity": 100,
1488 |       "angle": 0,
1489 |       "x": 555.7979721139709,
1490 |       "y": -13.44393377834898,
1491 |       "strokeColor": "#000000",
1492 |       "backgroundColor": "#fff",
1493 |       "width": 24.808347542269377,
1494 |       "height": 1.3267325816194155,
1495 |       "seed": 1584268905,
1496 |       "groupIds": [
1497 |         "7Ar-ivOKKREHasJ5rL9Vv"
1498 |       ],
1499 |       "strokeSharpness": "round",
1500 |       "boundElementIds": [],
1501 |       "points": [
1502 |         [
1503 |           0,
1504 |           -1.2496673365292923
1505 |         ],
1506 |         [
1507 |           4.635510175525229,
1508 |           -1.781630090586143
1509 |         ],
1510 |         [
1511 |           7.355219224416346,
1512 |           -1.6337215048928169
1513 |         ],
1514 |         [
1515 |           21.09388424723848,
1516 |           -0.9703552140831074
1517 |         ],
1518 |         [
1519 |           24.808347542269377,
1520 |           -2.297087795702523
1521 |         ]
1522 |       ],
1523 |       "lastCommittedPoint": null,
1524 |       "startArrowhead": null,
1525 |       "endArrowhead": null
1526 |     },
1527 |     {
1528 |       "type": "draw",
1529 |       "version": 3794,
1530 |       "versionNonce": 581533319,
1531 |       "isDeleted": false,
1532 |       "id": "E6E2Tnb8FlwVhZr5RQtfs",
1533 |       "fillStyle": "solid",
1534 |       "strokeWidth": 1,
1535 |       "strokeStyle": "solid",
1536 |       "roughness": 1,
1537 |       "opacity": 100,
1538 |       "angle": 0,
1539 |       "x": 556.7213926420152,
1540 |       "y": -42.877959827038225,
1541 |       "strokeColor": "#000000",
1542 |       "backgroundColor": "#fff",
1543 |       "width": 21.39841204740554,
1544 |       "height": 1.1288864948867414,
1545 |       "seed": 204124327,
1546 |       "groupIds": [
1547 |         "7Ar-ivOKKREHasJ5rL9Vv"
1548 |       ],
1549 |       "strokeSharpness": "round",
1550 |       "boundElementIds": [],
1551 |       "points": [
1552 |         [
1553 |           0,
1554 |           -0.32167362921772585
1555 |         ],
1556 |         [
1557 |           8.29595797015527,
1558 |           -0.5912874140789839
1559 |         ],
1560 |         [
1561 |           21.39841204740554,
1562 |           0.5375990808077575
1563 |         ]
1564 |       ],
1565 |       "lastCommittedPoint": null,
1566 |       "startArrowhead": null,
1567 |       "endArrowhead": null
1568 |     },
1569 |     {
1570 |       "type": "draw",
1571 |       "version": 3809,
1572 |       "versionNonce": 1436078441,
1573 |       "isDeleted": false,
1574 |       "id": "UIXcN08eOh6BHxYjSkkVo",
1575 |       "fillStyle": "solid",
1576 |       "strokeWidth": 1,
1577 |       "strokeStyle": "solid",
1578 |       "roughness": 1,
1579 |       "opacity": 100,
1580 |       "angle": 0,
1581 |       "x": 556.4139802308714,
1582 |       "y": -27.855078199690965,
1583 |       "strokeColor": "#000000",
1584 |       "backgroundColor": "#fff",
1585 |       "width": 21.39841204740554,
1586 |       "height": 1.1288864948867414,
1587 |       "seed": 630411593,
1588 |       "groupIds": [
1589 |         "7Ar-ivOKKREHasJ5rL9Vv"
1590 |       ],
1591 |       "strokeSharpness": "round",
1592 |       "boundElementIds": [],
1593 |       "points": [
1594 |         [
1595 |           0,
1596 |           -0.32167362921772585
1597 |         ],
1598 |         [
1599 |           3.690654045722796,
1600 |           0.3294487619528638
1601 |         ],
1602 |         [
1603 |           8.29595797015527,
1604 |           -0.5912874140789839
1605 |         ],
1606 |         [
1607 |           21.39841204740554,
1608 |           0.5375990808077575
1609 |         ]
1610 |       ],
1611 |       "lastCommittedPoint": null,
1612 |       "startArrowhead": null,
1613 |       "endArrowhead": null
1614 |     },
1615 |     {
1616 |       "type": "rectangle",
1617 |       "version": 4528,
1618 |       "versionNonce": 170268071,
1619 |       "isDeleted": false,
1620 |       "id": "rJZjdYyEASa2ijOAM0Y1U",
1621 |       "fillStyle": "solid",
1622 |       "strokeWidth": 2,
1623 |       "strokeStyle": "solid",
1624 |       "roughness": 1,
1625 |       "opacity": 100,
1626 |       "angle": 0,
1627 |       "x": 612.0222194496591,
1628 |       "y": -50.364214392028074,
1629 |       "strokeColor": "#000000",
1630 |       "backgroundColor": "#fff",
1631 |       "width": 32.22784587503368,
1632 |       "height": 48.903965306939746,
1633 |       "seed": 962950057,
1634 |       "groupIds": [
1635 |         "If7uHy4T50VEaK7QkmwLi"
1636 |       ],
1637 |       "strokeSharpness": "sharp",
1638 |       "boundElementIds": [
1639 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1640 |         "XIl_NhaFtRO00pX5Pq6VU",
1641 |         "EndiSTFlx1AT7vcBVjgve"
1642 |       ]
1643 |     },
1644 |     {
1645 |       "type": "rectangle",
1646 |       "version": 4577,
1647 |       "versionNonce": 590134345,
1648 |       "isDeleted": false,
1649 |       "id": "VUQLiBBsNIILSv86vWJAT",
1650 |       "fillStyle": "solid",
1651 |       "strokeWidth": 2,
1652 |       "strokeStyle": "solid",
1653 |       "roughness": 1,
1654 |       "opacity": 100,
1655 |       "angle": 0,
1656 |       "x": 608.5807594451101,
1657 |       "y": -53.565217486831955,
1658 |       "strokeColor": "#000000",
1659 |       "backgroundColor": "#fff",
1660 |       "width": 32.22784587503368,
1661 |       "height": 48.903965306939746,
1662 |       "seed": 278640487,
1663 |       "groupIds": [
1664 |         "_76QLrlICWuYKIPHLZ7CM",
1665 |         "If7uHy4T50VEaK7QkmwLi"
1666 |       ],
1667 |       "strokeSharpness": "sharp",
1668 |       "boundElementIds": [
1669 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1670 |         "XIl_NhaFtRO00pX5Pq6VU",
1671 |         "EndiSTFlx1AT7vcBVjgve"
1672 |       ]
1673 |     },
1674 |     {
1675 |       "type": "rectangle",
1676 |       "version": 4675,
1677 |       "versionNonce": 4376775,
1678 |       "isDeleted": false,
1679 |       "id": "TG63ZZfN6Et8Eq9zn06gR",
1680 |       "fillStyle": "solid",
1681 |       "strokeWidth": 2,
1682 |       "strokeStyle": "solid",
1683 |       "roughness": 1,
1684 |       "opacity": 100,
1685 |       "angle": 0,
1686 |       "x": 604.296809675307,
1687 |       "y": -57.328813414911664,
1688 |       "strokeColor": "#000000",
1689 |       "backgroundColor": "#fff",
1690 |       "width": 32.22784587503368,
1691 |       "height": 48.903965306939746,
1692 |       "seed": 564860553,
1693 |       "groupIds": [
1694 |         "If7uHy4T50VEaK7QkmwLi"
1695 |       ],
1696 |       "strokeSharpness": "sharp",
1697 |       "boundElementIds": [
1698 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1699 |         "XIl_NhaFtRO00pX5Pq6VU",
1700 |         "EndiSTFlx1AT7vcBVjgve"
1701 |       ]
1702 |     },
1703 |     {
1704 |       "type": "draw",
1705 |       "version": 3797,
1706 |       "versionNonce": 817908521,
1707 |       "isDeleted": false,
1708 |       "id": "maTN0QnsMb3KLPGhxirNM",
1709 |       "fillStyle": "solid",
1710 |       "strokeWidth": 1,
1711 |       "strokeStyle": "solid",
1712 |       "roughness": 1,
1713 |       "opacity": 100,
1714 |       "angle": 0,
1715 |       "x": 610.08280045579,
1716 |       "y": -34.65876004431094,
1717 |       "strokeColor": "#000000",
1718 |       "backgroundColor": "#fff",
1719 |       "width": 21.23935931101259,
1720 |       "height": 1.481905982978408,
1721 |       "seed": 1931358855,
1722 |       "groupIds": [
1723 |         "If7uHy4T50VEaK7QkmwLi"
1724 |       ],
1725 |       "strokeSharpness": "round",
1726 |       "boundElementIds": [],
1727 |       "points": [
1728 |         [
1729 |           0,
1730 |           -1.0809527239220595
1731 |         ],
1732 |         [
1733 |           18.432660413931682,
1734 |           -1.0091850257935375
1735 |         ],
1736 |         [
1737 |           21.23935931101259,
1738 |           -2.491091008771946
1739 |         ]
1740 |       ],
1741 |       "lastCommittedPoint": null,
1742 |       "startArrowhead": null,
1743 |       "endArrowhead": null
1744 |     },
1745 |     {
1746 |       "type": "draw",
1747 |       "version": 3823,
1748 |       "versionNonce": 1922832359,
1749 |       "isDeleted": false,
1750 |       "id": "LQprTOBTGVBqaS-M-O5yj",
1751 |       "fillStyle": "solid",
1752 |       "strokeWidth": 1,
1753 |       "strokeStyle": "solid",
1754 |       "roughness": 1,
1755 |       "opacity": 100,
1756 |       "angle": 0,
1757 |       "x": 611.137025326856,
1758 |       "y": -48.48891303914377,
1759 |       "strokeColor": "#000000",
1760 |       "backgroundColor": "#fff",
1761 |       "width": 20.77771844196958,
1762 |       "height": 1.2782408936947272,
1763 |       "seed": 2063162729,
1764 |       "groupIds": [
1765 |         "If7uHy4T50VEaK7QkmwLi"
1766 |       ],
1767 |       "strokeSharpness": "round",
1768 |       "boundElementIds": [],
1769 |       "points": [
1770 |         [
1771 |           0,
1772 |           -1.5250569903199922
1773 |         ],
1774 |         [
1775 |           7.675264364719304,
1776 |           -2.8032978840147194
1777 |         ],
1778 |         [
1779 |           20.77771844196958,
1780 |           -1.674411389127978
1781 |         ]
1782 |       ],
1783 |       "lastCommittedPoint": null,
1784 |       "startArrowhead": null,
1785 |       "endArrowhead": null
1786 |     },
1787 |     {
1788 |       "type": "draw",
1789 |       "version": 3848,
1790 |       "versionNonce": 650051081,
1791 |       "isDeleted": false,
1792 |       "id": "mwM86dpbmagOUz7PpsxSq",
1793 |       "fillStyle": "solid",
1794 |       "strokeWidth": 1,
1795 |       "strokeStyle": "solid",
1796 |       "roughness": 1,
1797 |       "opacity": 100,
1798 |       "angle": 0,
1799 |       "x": 610.8429182196887,
1800 |       "y": -18.282891389071267,
1801 |       "strokeColor": "#000000",
1802 |       "backgroundColor": "#fff",
1803 |       "width": 22.040441995528322,
1804 |       "height": 1.9518837165130463,
1805 |       "seed": 1373915559,
1806 |       "groupIds": [
1807 |         "If7uHy4T50VEaK7QkmwLi"
1808 |       ],
1809 |       "strokeSharpness": "round",
1810 |       "boundElementIds": [],
1811 |       "points": [
1812 |         [
1813 |           0,
1814 |           -1.0691598323638951
1815 |         ],
1816 |         [
1817 |           12.04339561297506,
1818 |           -1.1855398833831219
1819 |         ],
1820 |         [
1821 |           17.153876880715732,
1822 |           -0.013402508699010725
1823 |         ],
1824 |         [
1825 |           22.040441995528322,
1826 |           -1.9652862252120569
1827 |         ]
1828 |       ],
1829 |       "lastCommittedPoint": null,
1830 |       "startArrowhead": null,
1831 |       "endArrowhead": null
1832 |     },
1833 |     {
1834 |       "type": "draw",
1835 |       "version": 3885,
1836 |       "versionNonce": 1732150023,
1837 |       "isDeleted": false,
1838 |       "id": "ddWdjlyr9nJsE7tg_xxeb",
1839 |       "fillStyle": "solid",
1840 |       "strokeWidth": 1,
1841 |       "strokeStyle": "solid",
1842 |       "roughness": 1,
1843 |       "opacity": 100,
1844 |       "angle": 0,
1845 |       "x": 609.3154895456084,
1846 |       "y": -12.92049627834902,
1847 |       "strokeColor": "#000000",
1848 |       "backgroundColor": "#fff",
1849 |       "width": 24.808347542269377,
1850 |       "height": 1.3267325816194155,
1851 |       "seed": 1687930953,
1852 |       "groupIds": [
1853 |         "If7uHy4T50VEaK7QkmwLi"
1854 |       ],
1855 |       "strokeSharpness": "round",
1856 |       "boundElementIds": [],
1857 |       "points": [
1858 |         [
1859 |           0,
1860 |           -1.2496673365292923
1861 |         ],
1862 |         [
1863 |           4.635510175525229,
1864 |           -1.781630090586143
1865 |         ],
1866 |         [
1867 |           7.355219224416346,
1868 |           -1.6337215048928169
1869 |         ],
1870 |         [
1871 |           21.09388424723848,
1872 |           -0.9703552140831074
1873 |         ],
1874 |         [
1875 |           24.808347542269377,
1876 |           -2.297087795702523
1877 |         ]
1878 |       ],
1879 |       "lastCommittedPoint": null,
1880 |       "startArrowhead": null,
1881 |       "endArrowhead": null
1882 |     },
1883 |     {
1884 |       "type": "draw",
1885 |       "version": 3850,
1886 |       "versionNonce": 337925353,
1887 |       "isDeleted": false,
1888 |       "id": "TZIBfyNMYpgR_Gmdd9cFU",
1889 |       "fillStyle": "solid",
1890 |       "strokeWidth": 1,
1891 |       "strokeStyle": "solid",
1892 |       "roughness": 1,
1893 |       "opacity": 100,
1894 |       "angle": 0,
1895 |       "x": 610.2389100736527,
1896 |       "y": -42.35452232703827,
1897 |       "strokeColor": "#000000",
1898 |       "backgroundColor": "#fff",
1899 |       "width": 21.39841204740554,
1900 |       "height": 1.1288864948867414,
1901 |       "seed": 437943495,
1902 |       "groupIds": [
1903 |         "If7uHy4T50VEaK7QkmwLi"
1904 |       ],
1905 |       "strokeSharpness": "round",
1906 |       "boundElementIds": [],
1907 |       "points": [
1908 |         [
1909 |           0,
1910 |           -0.32167362921772585
1911 |         ],
1912 |         [
1913 |           8.29595797015527,
1914 |           -0.5912874140789839
1915 |         ],
1916 |         [
1917 |           21.39841204740554,
1918 |           0.5375990808077575
1919 |         ]
1920 |       ],
1921 |       "lastCommittedPoint": null,
1922 |       "startArrowhead": null,
1923 |       "endArrowhead": null
1924 |     },
1925 |     {
1926 |       "type": "draw",
1927 |       "version": 3865,
1928 |       "versionNonce": 1856408103,
1929 |       "isDeleted": false,
1930 |       "id": "KXlsJYwEWFAYjx-6HOkmD",
1931 |       "fillStyle": "solid",
1932 |       "strokeWidth": 1,
1933 |       "strokeStyle": "solid",
1934 |       "roughness": 1,
1935 |       "opacity": 100,
1936 |       "angle": 0,
1937 |       "x": 609.931497662509,
1938 |       "y": -27.331640699691008,
1939 |       "strokeColor": "#000000",
1940 |       "backgroundColor": "#fff",
1941 |       "width": 21.39841204740554,
1942 |       "height": 1.1288864948867414,
1943 |       "seed": 141416233,
1944 |       "groupIds": [
1945 |         "If7uHy4T50VEaK7QkmwLi"
1946 |       ],
1947 |       "strokeSharpness": "round",
1948 |       "boundElementIds": [],
1949 |       "points": [
1950 |         [
1951 |           0,
1952 |           -0.32167362921772585
1953 |         ],
1954 |         [
1955 |           3.690654045722796,
1956 |           0.3294487619528638
1957 |         ],
1958 |         [
1959 |           8.29595797015527,
1960 |           -0.5912874140789839
1961 |         ],
1962 |         [
1963 |           21.39841204740554,
1964 |           0.5375990808077575
1965 |         ]
1966 |       ],
1967 |       "lastCommittedPoint": null,
1968 |       "startArrowhead": null,
1969 |       "endArrowhead": null
1970 |     },
1971 |     {
1972 |       "type": "rectangle",
1973 |       "version": 4601,
1974 |       "versionNonce": 477876169,
1975 |       "isDeleted": false,
1976 |       "id": "qNZEr26M55TspEjIfpPcv",
1977 |       "fillStyle": "solid",
1978 |       "strokeWidth": 2,
1979 |       "strokeStyle": "solid",
1980 |       "roughness": 1,
1981 |       "opacity": 100,
1982 |       "angle": 0,
1983 |       "x": 667.8269069496591,
1984 |       "y": -51.129839392028074,
1985 |       "strokeColor": "#000000",
1986 |       "backgroundColor": "#fff",
1987 |       "width": 32.22784587503368,
1988 |       "height": 48.903965306939746,
1989 |       "seed": 1296656807,
1990 |       "groupIds": [
1991 |         "edVK3m1YcJ4vdTsoqOwMa"
1992 |       ],
1993 |       "strokeSharpness": "sharp",
1994 |       "boundElementIds": [
1995 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
1996 |         "XIl_NhaFtRO00pX5Pq6VU",
1997 |         "EndiSTFlx1AT7vcBVjgve"
1998 |       ]
1999 |     },
2000 |     {
2001 |       "type": "rectangle",
2002 |       "version": 4650,
2003 |       "versionNonce": 1438690631,
2004 |       "isDeleted": false,
2005 |       "id": "kNWX72UcQyBuyLC8dc42g",
2006 |       "fillStyle": "solid",
2007 |       "strokeWidth": 2,
2008 |       "strokeStyle": "solid",
2009 |       "roughness": 1,
2010 |       "opacity": 100,
2011 |       "angle": 0,
2012 |       "x": 664.3854469451101,
2013 |       "y": -54.330842486831955,
2014 |       "strokeColor": "#000000",
2015 |       "backgroundColor": "#fff",
2016 |       "width": 32.22784587503368,
2017 |       "height": 48.903965306939746,
2018 |       "seed": 362326089,
2019 |       "groupIds": [
2020 |         "jGkuNTKHinhUZjQlmTZqr",
2021 |         "edVK3m1YcJ4vdTsoqOwMa"
2022 |       ],
2023 |       "strokeSharpness": "sharp",
2024 |       "boundElementIds": [
2025 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2026 |         "XIl_NhaFtRO00pX5Pq6VU",
2027 |         "EndiSTFlx1AT7vcBVjgve"
2028 |       ]
2029 |     },
2030 |     {
2031 |       "type": "rectangle",
2032 |       "version": 4748,
2033 |       "versionNonce": 1709239977,
2034 |       "isDeleted": false,
2035 |       "id": "i-gvvxK642XL26zt0ztrN",
2036 |       "fillStyle": "solid",
2037 |       "strokeWidth": 2,
2038 |       "strokeStyle": "solid",
2039 |       "roughness": 1,
2040 |       "opacity": 100,
2041 |       "angle": 0,
2042 |       "x": 660.101497175307,
2043 |       "y": -58.094438414911664,
2044 |       "strokeColor": "#000000",
2045 |       "backgroundColor": "#fff",
2046 |       "width": 32.22784587503368,
2047 |       "height": 48.903965306939746,
2048 |       "seed": 735812807,
2049 |       "groupIds": [
2050 |         "edVK3m1YcJ4vdTsoqOwMa"
2051 |       ],
2052 |       "strokeSharpness": "sharp",
2053 |       "boundElementIds": [
2054 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2055 |         "XIl_NhaFtRO00pX5Pq6VU",
2056 |         "EndiSTFlx1AT7vcBVjgve"
2057 |       ]
2058 |     },
2059 |     {
2060 |       "type": "draw",
2061 |       "version": 3869,
2062 |       "versionNonce": 401173607,
2063 |       "isDeleted": false,
2064 |       "id": "65izTBQvz6ZDXtcTmqJbQ",
2065 |       "fillStyle": "solid",
2066 |       "strokeWidth": 1,
2067 |       "strokeStyle": "solid",
2068 |       "roughness": 1,
2069 |       "opacity": 100,
2070 |       "angle": 0,
2071 |       "x": 665.88748795579,
2072 |       "y": -35.42438504431094,
2073 |       "strokeColor": "#000000",
2074 |       "backgroundColor": "#fff",
2075 |       "width": 21.23935931101259,
2076 |       "height": 1.481905982978408,
2077 |       "seed": 1187952425,
2078 |       "groupIds": [
2079 |         "edVK3m1YcJ4vdTsoqOwMa"
2080 |       ],
2081 |       "strokeSharpness": "round",
2082 |       "boundElementIds": [],
2083 |       "points": [
2084 |         [
2085 |           0,
2086 |           -1.0809527239220595
2087 |         ],
2088 |         [
2089 |           18.432660413931682,
2090 |           -1.0091850257935375
2091 |         ],
2092 |         [
2093 |           21.23935931101259,
2094 |           -2.491091008771946
2095 |         ]
2096 |       ],
2097 |       "lastCommittedPoint": null,
2098 |       "startArrowhead": null,
2099 |       "endArrowhead": null
2100 |     },
2101 |     {
2102 |       "type": "draw",
2103 |       "version": 3895,
2104 |       "versionNonce": 1191129481,
2105 |       "isDeleted": false,
2106 |       "id": "28QaSKAf_TGvO2vfFL4oz",
2107 |       "fillStyle": "solid",
2108 |       "strokeWidth": 1,
2109 |       "strokeStyle": "solid",
2110 |       "roughness": 1,
2111 |       "opacity": 100,
2112 |       "angle": 0,
2113 |       "x": 666.941712826856,
2114 |       "y": -49.25453803914377,
2115 |       "strokeColor": "#000000",
2116 |       "backgroundColor": "#fff",
2117 |       "width": 20.77771844196958,
2118 |       "height": 1.2782408936947272,
2119 |       "seed": 1543138279,
2120 |       "groupIds": [
2121 |         "edVK3m1YcJ4vdTsoqOwMa"
2122 |       ],
2123 |       "strokeSharpness": "round",
2124 |       "boundElementIds": [],
2125 |       "points": [
2126 |         [
2127 |           0,
2128 |           -1.5250569903199922
2129 |         ],
2130 |         [
2131 |           7.675264364719304,
2132 |           -2.8032978840147194
2133 |         ],
2134 |         [
2135 |           20.77771844196958,
2136 |           -1.674411389127978
2137 |         ]
2138 |       ],
2139 |       "lastCommittedPoint": null,
2140 |       "startArrowhead": null,
2141 |       "endArrowhead": null
2142 |     },
2143 |     {
2144 |       "type": "draw",
2145 |       "version": 3920,
2146 |       "versionNonce": 283985799,
2147 |       "isDeleted": false,
2148 |       "id": "1fqGGi87jUhWG0CpLWVUR",
2149 |       "fillStyle": "solid",
2150 |       "strokeWidth": 1,
2151 |       "strokeStyle": "solid",
2152 |       "roughness": 1,
2153 |       "opacity": 100,
2154 |       "angle": 0,
2155 |       "x": 666.6476057196887,
2156 |       "y": -19.048516389071267,
2157 |       "strokeColor": "#000000",
2158 |       "backgroundColor": "#fff",
2159 |       "width": 22.040441995528322,
2160 |       "height": 1.9518837165130463,
2161 |       "seed": 1210051081,
2162 |       "groupIds": [
2163 |         "edVK3m1YcJ4vdTsoqOwMa"
2164 |       ],
2165 |       "strokeSharpness": "round",
2166 |       "boundElementIds": [],
2167 |       "points": [
2168 |         [
2169 |           0,
2170 |           -1.0691598323638951
2171 |         ],
2172 |         [
2173 |           12.04339561297506,
2174 |           -1.1855398833831219
2175 |         ],
2176 |         [
2177 |           17.153876880715732,
2178 |           -0.013402508699010725
2179 |         ],
2180 |         [
2181 |           22.040441995528322,
2182 |           -1.9652862252120569
2183 |         ]
2184 |       ],
2185 |       "lastCommittedPoint": null,
2186 |       "startArrowhead": null,
2187 |       "endArrowhead": null
2188 |     },
2189 |     {
2190 |       "type": "draw",
2191 |       "version": 3957,
2192 |       "versionNonce": 890378345,
2193 |       "isDeleted": false,
2194 |       "id": "6-1oW3W-IaMqYVq5hN_7m",
2195 |       "fillStyle": "solid",
2196 |       "strokeWidth": 1,
2197 |       "strokeStyle": "solid",
2198 |       "roughness": 1,
2199 |       "opacity": 100,
2200 |       "angle": 0,
2201 |       "x": 665.1201770456084,
2202 |       "y": -13.68612127834902,
2203 |       "strokeColor": "#000000",
2204 |       "backgroundColor": "#fff",
2205 |       "width": 24.808347542269377,
2206 |       "height": 1.3267325816194155,
2207 |       "seed": 967988999,
2208 |       "groupIds": [
2209 |         "edVK3m1YcJ4vdTsoqOwMa"
2210 |       ],
2211 |       "strokeSharpness": "round",
2212 |       "boundElementIds": [],
2213 |       "points": [
2214 |         [
2215 |           0,
2216 |           -1.2496673365292923
2217 |         ],
2218 |         [
2219 |           4.635510175525229,
2220 |           -1.781630090586143
2221 |         ],
2222 |         [
2223 |           7.355219224416346,
2224 |           -1.6337215048928169
2225 |         ],
2226 |         [
2227 |           21.09388424723848,
2228 |           -0.9703552140831074
2229 |         ],
2230 |         [
2231 |           24.808347542269377,
2232 |           -2.297087795702523
2233 |         ]
2234 |       ],
2235 |       "lastCommittedPoint": null,
2236 |       "startArrowhead": null,
2237 |       "endArrowhead": null
2238 |     },
2239 |     {
2240 |       "type": "draw",
2241 |       "version": 3922,
2242 |       "versionNonce": 1862844071,
2243 |       "isDeleted": false,
2244 |       "id": "vQUvNxCjBSm-bTDiZJRLI",
2245 |       "fillStyle": "solid",
2246 |       "strokeWidth": 1,
2247 |       "strokeStyle": "solid",
2248 |       "roughness": 1,
2249 |       "opacity": 100,
2250 |       "angle": 0,
2251 |       "x": 666.0435975736527,
2252 |       "y": -43.12014732703827,
2253 |       "strokeColor": "#000000",
2254 |       "backgroundColor": "#fff",
2255 |       "width": 21.39841204740554,
2256 |       "height": 1.1288864948867414,
2257 |       "seed": 847757545,
2258 |       "groupIds": [
2259 |         "edVK3m1YcJ4vdTsoqOwMa"
2260 |       ],
2261 |       "strokeSharpness": "round",
2262 |       "boundElementIds": [],
2263 |       "points": [
2264 |         [
2265 |           0,
2266 |           -0.32167362921772585
2267 |         ],
2268 |         [
2269 |           8.29595797015527,
2270 |           -0.5912874140789839
2271 |         ],
2272 |         [
2273 |           21.39841204740554,
2274 |           0.5375990808077575
2275 |         ]
2276 |       ],
2277 |       "lastCommittedPoint": null,
2278 |       "startArrowhead": null,
2279 |       "endArrowhead": null
2280 |     },
2281 |     {
2282 |       "type": "draw",
2283 |       "version": 3937,
2284 |       "versionNonce": 1910842185,
2285 |       "isDeleted": false,
2286 |       "id": "K8BM7ua9WkY46oISJxGWN",
2287 |       "fillStyle": "solid",
2288 |       "strokeWidth": 1,
2289 |       "strokeStyle": "solid",
2290 |       "roughness": 1,
2291 |       "opacity": 100,
2292 |       "angle": 0,
2293 |       "x": 665.736185162509,
2294 |       "y": -28.097265699691008,
2295 |       "strokeColor": "#000000",
2296 |       "backgroundColor": "#fff",
2297 |       "width": 21.39841204740554,
2298 |       "height": 1.1288864948867414,
2299 |       "seed": 1803542055,
2300 |       "groupIds": [
2301 |         "edVK3m1YcJ4vdTsoqOwMa"
2302 |       ],
2303 |       "strokeSharpness": "round",
2304 |       "boundElementIds": [],
2305 |       "points": [
2306 |         [
2307 |           0,
2308 |           -0.32167362921772585
2309 |         ],
2310 |         [
2311 |           3.690654045722796,
2312 |           0.3294487619528638
2313 |         ],
2314 |         [
2315 |           8.29595797015527,
2316 |           -0.5912874140789839
2317 |         ],
2318 |         [
2319 |           21.39841204740554,
2320 |           0.5375990808077575
2321 |         ]
2322 |       ],
2323 |       "lastCommittedPoint": null,
2324 |       "startArrowhead": null,
2325 |       "endArrowhead": null
2326 |     },
2327 |     {
2328 |       "type": "rectangle",
2329 |       "version": 4650,
2330 |       "versionNonce": 1692946887,
2331 |       "isDeleted": false,
2332 |       "id": "K5TPzAqGLOJjnmPZylKou",
2333 |       "fillStyle": "solid",
2334 |       "strokeWidth": 2,
2335 |       "strokeStyle": "solid",
2336 |       "roughness": 1,
2337 |       "opacity": 100,
2338 |       "angle": 0,
2339 |       "x": 726.6237819496591,
2340 |       "y": -51.817339392028074,
2341 |       "strokeColor": "#000000",
2342 |       "backgroundColor": "#fff",
2343 |       "width": 32.22784587503368,
2344 |       "height": 48.903965306939746,
2345 |       "seed": 1168443399,
2346 |       "groupIds": [
2347 |         "63Z5enRz4WX3uf5ftpDoj"
2348 |       ],
2349 |       "strokeSharpness": "sharp",
2350 |       "boundElementIds": [
2351 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2352 |         "XIl_NhaFtRO00pX5Pq6VU",
2353 |         "EndiSTFlx1AT7vcBVjgve"
2354 |       ]
2355 |     },
2356 |     {
2357 |       "type": "rectangle",
2358 |       "version": 4699,
2359 |       "versionNonce": 2043925033,
2360 |       "isDeleted": false,
2361 |       "id": "CFBsePAuf2NYdVRrUMVJz",
2362 |       "fillStyle": "solid",
2363 |       "strokeWidth": 2,
2364 |       "strokeStyle": "solid",
2365 |       "roughness": 1,
2366 |       "opacity": 100,
2367 |       "angle": 0,
2368 |       "x": 723.1823219451101,
2369 |       "y": -55.018342486831955,
2370 |       "strokeColor": "#000000",
2371 |       "backgroundColor": "#fff",
2372 |       "width": 32.22784587503368,
2373 |       "height": 48.903965306939746,
2374 |       "seed": 420782057,
2375 |       "groupIds": [
2376 |         "DKQkPTRXlbxd22nK5vRBe",
2377 |         "63Z5enRz4WX3uf5ftpDoj"
2378 |       ],
2379 |       "strokeSharpness": "sharp",
2380 |       "boundElementIds": [
2381 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2382 |         "XIl_NhaFtRO00pX5Pq6VU",
2383 |         "EndiSTFlx1AT7vcBVjgve"
2384 |       ]
2385 |     },
2386 |     {
2387 |       "type": "rectangle",
2388 |       "version": 4797,
2389 |       "versionNonce": 464027879,
2390 |       "isDeleted": false,
2391 |       "id": "0xgs4h-D0-wa3FMWCAzMv",
2392 |       "fillStyle": "solid",
2393 |       "strokeWidth": 2,
2394 |       "strokeStyle": "solid",
2395 |       "roughness": 1,
2396 |       "opacity": 100,
2397 |       "angle": 0,
2398 |       "x": 718.898372175307,
2399 |       "y": -58.781938414911664,
2400 |       "strokeColor": "#000000",
2401 |       "backgroundColor": "#fff",
2402 |       "width": 32.22784587503368,
2403 |       "height": 48.903965306939746,
2404 |       "seed": 670330663,
2405 |       "groupIds": [
2406 |         "63Z5enRz4WX3uf5ftpDoj"
2407 |       ],
2408 |       "strokeSharpness": "sharp",
2409 |       "boundElementIds": [
2410 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2411 |         "XIl_NhaFtRO00pX5Pq6VU",
2412 |         "EndiSTFlx1AT7vcBVjgve"
2413 |       ]
2414 |     },
2415 |     {
2416 |       "type": "draw",
2417 |       "version": 3917,
2418 |       "versionNonce": 835298569,
2419 |       "isDeleted": false,
2420 |       "id": "FgIFSWpD2klgie4TaDYJR",
2421 |       "fillStyle": "solid",
2422 |       "strokeWidth": 1,
2423 |       "strokeStyle": "solid",
2424 |       "roughness": 1,
2425 |       "opacity": 100,
2426 |       "angle": 0,
2427 |       "x": 724.68436295579,
2428 |       "y": -36.11188504431094,
2429 |       "strokeColor": "#000000",
2430 |       "backgroundColor": "#fff",
2431 |       "width": 21.23935931101259,
2432 |       "height": 1.481905982978408,
2433 |       "seed": 1395309257,
2434 |       "groupIds": [
2435 |         "63Z5enRz4WX3uf5ftpDoj"
2436 |       ],
2437 |       "strokeSharpness": "round",
2438 |       "boundElementIds": [],
2439 |       "points": [
2440 |         [
2441 |           0,
2442 |           -1.0809527239220595
2443 |         ],
2444 |         [
2445 |           18.432660413931682,
2446 |           -1.0091850257935375
2447 |         ],
2448 |         [
2449 |           21.23935931101259,
2450 |           -2.491091008771946
2451 |         ]
2452 |       ],
2453 |       "lastCommittedPoint": null,
2454 |       "startArrowhead": null,
2455 |       "endArrowhead": null
2456 |     },
2457 |     {
2458 |       "type": "draw",
2459 |       "version": 3943,
2460 |       "versionNonce": 1691732999,
2461 |       "isDeleted": false,
2462 |       "id": "4e9l9GQ2WFIxfD4OgbB7c",
2463 |       "fillStyle": "solid",
2464 |       "strokeWidth": 1,
2465 |       "strokeStyle": "solid",
2466 |       "roughness": 1,
2467 |       "opacity": 100,
2468 |       "angle": 0,
2469 |       "x": 725.738587826856,
2470 |       "y": -49.94203803914377,
2471 |       "strokeColor": "#000000",
2472 |       "backgroundColor": "#fff",
2473 |       "width": 20.77771844196958,
2474 |       "height": 1.2782408936947272,
2475 |       "seed": 1443492423,
2476 |       "groupIds": [
2477 |         "63Z5enRz4WX3uf5ftpDoj"
2478 |       ],
2479 |       "strokeSharpness": "round",
2480 |       "boundElementIds": [],
2481 |       "points": [
2482 |         [
2483 |           0,
2484 |           -1.5250569903199922
2485 |         ],
2486 |         [
2487 |           7.675264364719304,
2488 |           -2.8032978840147194
2489 |         ],
2490 |         [
2491 |           20.77771844196958,
2492 |           -1.674411389127978
2493 |         ]
2494 |       ],
2495 |       "lastCommittedPoint": null,
2496 |       "startArrowhead": null,
2497 |       "endArrowhead": null
2498 |     },
2499 |     {
2500 |       "type": "draw",
2501 |       "version": 3968,
2502 |       "versionNonce": 1430395881,
2503 |       "isDeleted": false,
2504 |       "id": "VA3--FJurhDuA8wDlH75T",
2505 |       "fillStyle": "solid",
2506 |       "strokeWidth": 1,
2507 |       "strokeStyle": "solid",
2508 |       "roughness": 1,
2509 |       "opacity": 100,
2510 |       "angle": 0,
2511 |       "x": 725.4444807196887,
2512 |       "y": -19.736016389071267,
2513 |       "strokeColor": "#000000",
2514 |       "backgroundColor": "#fff",
2515 |       "width": 22.040441995528322,
2516 |       "height": 1.9518837165130463,
2517 |       "seed": 1568307625,
2518 |       "groupIds": [
2519 |         "63Z5enRz4WX3uf5ftpDoj"
2520 |       ],
2521 |       "strokeSharpness": "round",
2522 |       "boundElementIds": [],
2523 |       "points": [
2524 |         [
2525 |           0,
2526 |           -1.0691598323638951
2527 |         ],
2528 |         [
2529 |           12.04339561297506,
2530 |           -1.1855398833831219
2531 |         ],
2532 |         [
2533 |           17.153876880715732,
2534 |           -0.013402508699010725
2535 |         ],
2536 |         [
2537 |           22.040441995528322,
2538 |           -1.9652862252120569
2539 |         ]
2540 |       ],
2541 |       "lastCommittedPoint": null,
2542 |       "startArrowhead": null,
2543 |       "endArrowhead": null
2544 |     },
2545 |     {
2546 |       "type": "draw",
2547 |       "version": 4005,
2548 |       "versionNonce": 745321255,
2549 |       "isDeleted": false,
2550 |       "id": "aMrisvZP1LlXyqcUzJXcH",
2551 |       "fillStyle": "solid",
2552 |       "strokeWidth": 1,
2553 |       "strokeStyle": "solid",
2554 |       "roughness": 1,
2555 |       "opacity": 100,
2556 |       "angle": 0,
2557 |       "x": 723.9170520456084,
2558 |       "y": -14.37362127834902,
2559 |       "strokeColor": "#000000",
2560 |       "backgroundColor": "#fff",
2561 |       "width": 24.808347542269377,
2562 |       "height": 1.3267325816194155,
2563 |       "seed": 683807079,
2564 |       "groupIds": [
2565 |         "63Z5enRz4WX3uf5ftpDoj"
2566 |       ],
2567 |       "strokeSharpness": "round",
2568 |       "boundElementIds": [],
2569 |       "points": [
2570 |         [
2571 |           0,
2572 |           -1.2496673365292923
2573 |         ],
2574 |         [
2575 |           4.635510175525229,
2576 |           -1.781630090586143
2577 |         ],
2578 |         [
2579 |           7.355219224416346,
2580 |           -1.6337215048928169
2581 |         ],
2582 |         [
2583 |           21.09388424723848,
2584 |           -0.9703552140831074
2585 |         ],
2586 |         [
2587 |           24.808347542269377,
2588 |           -2.297087795702523
2589 |         ]
2590 |       ],
2591 |       "lastCommittedPoint": null,
2592 |       "startArrowhead": null,
2593 |       "endArrowhead": null
2594 |     },
2595 |     {
2596 |       "type": "draw",
2597 |       "version": 3970,
2598 |       "versionNonce": 608745161,
2599 |       "isDeleted": false,
2600 |       "id": "EokFdjCJWSL42XXOjRwAi",
2601 |       "fillStyle": "solid",
2602 |       "strokeWidth": 1,
2603 |       "strokeStyle": "solid",
2604 |       "roughness": 1,
2605 |       "opacity": 100,
2606 |       "angle": 0,
2607 |       "x": 724.8404725736527,
2608 |       "y": -43.80764732703827,
2609 |       "strokeColor": "#000000",
2610 |       "backgroundColor": "#fff",
2611 |       "width": 21.39841204740554,
2612 |       "height": 1.1288864948867414,
2613 |       "seed": 1227840649,
2614 |       "groupIds": [
2615 |         "63Z5enRz4WX3uf5ftpDoj"
2616 |       ],
2617 |       "strokeSharpness": "round",
2618 |       "boundElementIds": [],
2619 |       "points": [
2620 |         [
2621 |           0,
2622 |           -0.32167362921772585
2623 |         ],
2624 |         [
2625 |           8.29595797015527,
2626 |           -0.5912874140789839
2627 |         ],
2628 |         [
2629 |           21.39841204740554,
2630 |           0.5375990808077575
2631 |         ]
2632 |       ],
2633 |       "lastCommittedPoint": null,
2634 |       "startArrowhead": null,
2635 |       "endArrowhead": null
2636 |     },
2637 |     {
2638 |       "type": "draw",
2639 |       "version": 3985,
2640 |       "versionNonce": 718911047,
2641 |       "isDeleted": false,
2642 |       "id": "plXR5A4EMfjS7cxfSZ-0d",
2643 |       "fillStyle": "solid",
2644 |       "strokeWidth": 1,
2645 |       "strokeStyle": "solid",
2646 |       "roughness": 1,
2647 |       "opacity": 100,
2648 |       "angle": 0,
2649 |       "x": 724.533060162509,
2650 |       "y": -28.784765699691008,
2651 |       "strokeColor": "#000000",
2652 |       "backgroundColor": "#fff",
2653 |       "width": 21.39841204740554,
2654 |       "height": 1.1288864948867414,
2655 |       "seed": 694766727,
2656 |       "groupIds": [
2657 |         "63Z5enRz4WX3uf5ftpDoj"
2658 |       ],
2659 |       "strokeSharpness": "round",
2660 |       "boundElementIds": [],
2661 |       "points": [
2662 |         [
2663 |           0,
2664 |           -0.32167362921772585
2665 |         ],
2666 |         [
2667 |           3.690654045722796,
2668 |           0.3294487619528638
2669 |         ],
2670 |         [
2671 |           8.29595797015527,
2672 |           -0.5912874140789839
2673 |         ],
2674 |         [
2675 |           21.39841204740554,
2676 |           0.5375990808077575
2677 |         ]
2678 |       ],
2679 |       "lastCommittedPoint": null,
2680 |       "startArrowhead": null,
2681 |       "endArrowhead": null
2682 |     },
2683 |     {
2684 |       "type": "rectangle",
2685 |       "version": 4696,
2686 |       "versionNonce": 1366881705,
2687 |       "isDeleted": false,
2688 |       "id": "rvknzda3ixd_o0LBBAW_r",
2689 |       "fillStyle": "solid",
2690 |       "strokeWidth": 2,
2691 |       "strokeStyle": "solid",
2692 |       "roughness": 1,
2693 |       "opacity": 100,
2694 |       "angle": 0,
2695 |       "x": 784.3347194496591,
2696 |       "y": -52.899370642028074,
2697 |       "strokeColor": "#000000",
2698 |       "backgroundColor": "#fff",
2699 |       "width": 32.22784587503368,
2700 |       "height": 48.903965306939746,
2701 |       "seed": 187701801,
2702 |       "groupIds": [
2703 |         "vKzkjvUgFBZIyF5qiSOE_"
2704 |       ],
2705 |       "strokeSharpness": "sharp",
2706 |       "boundElementIds": [
2707 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2708 |         "XIl_NhaFtRO00pX5Pq6VU",
2709 |         "EndiSTFlx1AT7vcBVjgve"
2710 |       ]
2711 |     },
2712 |     {
2713 |       "type": "rectangle",
2714 |       "version": 4745,
2715 |       "versionNonce": 1459180903,
2716 |       "isDeleted": false,
2717 |       "id": "0Oy79oz9DMQSWsWhHEwCB",
2718 |       "fillStyle": "solid",
2719 |       "strokeWidth": 2,
2720 |       "strokeStyle": "solid",
2721 |       "roughness": 1,
2722 |       "opacity": 100,
2723 |       "angle": 0,
2724 |       "x": 780.8932594451101,
2725 |       "y": -56.100373736831955,
2726 |       "strokeColor": "#000000",
2727 |       "backgroundColor": "#fff",
2728 |       "width": 32.22784587503368,
2729 |       "height": 48.903965306939746,
2730 |       "seed": 320125159,
2731 |       "groupIds": [
2732 |         "4AV31D7BJmTaXDRZC6Jkf",
2733 |         "vKzkjvUgFBZIyF5qiSOE_"
2734 |       ],
2735 |       "strokeSharpness": "sharp",
2736 |       "boundElementIds": [
2737 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2738 |         "XIl_NhaFtRO00pX5Pq6VU",
2739 |         "EndiSTFlx1AT7vcBVjgve"
2740 |       ]
2741 |     },
2742 |     {
2743 |       "type": "rectangle",
2744 |       "version": 4843,
2745 |       "versionNonce": 805197961,
2746 |       "isDeleted": false,
2747 |       "id": "eDAIQrnTrhR4BYLBp_uZt",
2748 |       "fillStyle": "solid",
2749 |       "strokeWidth": 2,
2750 |       "strokeStyle": "solid",
2751 |       "roughness": 1,
2752 |       "opacity": 100,
2753 |       "angle": 0,
2754 |       "x": 776.609309675307,
2755 |       "y": -59.863969664911664,
2756 |       "strokeColor": "#000000",
2757 |       "backgroundColor": "#fff",
2758 |       "width": 32.22784587503368,
2759 |       "height": 48.903965306939746,
2760 |       "seed": 1616702729,
2761 |       "groupIds": [
2762 |         "vKzkjvUgFBZIyF5qiSOE_"
2763 |       ],
2764 |       "strokeSharpness": "sharp",
2765 |       "boundElementIds": [
2766 |         "CFu0B4Mw_1wC1Hbgx8Fs0",
2767 |         "XIl_NhaFtRO00pX5Pq6VU",
2768 |         "EndiSTFlx1AT7vcBVjgve"
2769 |       ]
2770 |     },
2771 |     {
2772 |       "type": "draw",
2773 |       "version": 3962,
2774 |       "versionNonce": 404230279,
2775 |       "isDeleted": false,
2776 |       "id": "utD-4lH7XK2JeL2SdIrNr",
2777 |       "fillStyle": "solid",
2778 |       "strokeWidth": 1,
2779 |       "strokeStyle": "solid",
2780 |       "roughness": 1,
2781 |       "opacity": 100,
2782 |       "angle": 0,
2783 |       "x": 782.39530045579,
2784 |       "y": -37.19391629431094,
2785 |       "strokeColor": "#000000",
2786 |       "backgroundColor": "#fff",
2787 |       "width": 21.23935931101259,
2788 |       "height": 1.481905982978408,
2789 |       "seed": 301663239,
2790 |       "groupIds": [
2791 |         "vKzkjvUgFBZIyF5qiSOE_"
2792 |       ],
2793 |       "strokeSharpness": "round",
2794 |       "boundElementIds": [],
2795 |       "points": [
2796 |         [
2797 |           0,
2798 |           -1.0809527239220595
2799 |         ],
2800 |         [
2801 |           18.432660413931682,
2802 |           -1.0091850257935375
2803 |         ],
2804 |         [
2805 |           21.23935931101259,
2806 |           -2.491091008771946
2807 |         ]
2808 |       ],
2809 |       "lastCommittedPoint": null,
2810 |       "startArrowhead": null,
2811 |       "endArrowhead": null
2812 |     },
2813 |     {
2814 |       "type": "draw",
2815 |       "version": 3988,
2816 |       "versionNonce": 563371881,
2817 |       "isDeleted": false,
2818 |       "id": "DDQXH8ImIInEAsKqjj_si",
2819 |       "fillStyle": "solid",
2820 |       "strokeWidth": 1,
2821 |       "strokeStyle": "solid",
2822 |       "roughness": 1,
2823 |       "opacity": 100,
2824 |       "angle": 0,
2825 |       "x": 783.449525326856,
2826 |       "y": -51.02406928914377,
2827 |       "strokeColor": "#000000",
2828 |       "backgroundColor": "#fff",
2829 |       "width": 20.77771844196958,
2830 |       "height": 1.2782408936947272,
2831 |       "seed": 1647076329,
2832 |       "groupIds": [
2833 |         "vKzkjvUgFBZIyF5qiSOE_"
2834 |       ],
2835 |       "strokeSharpness": "round",
2836 |       "boundElementIds": [],
2837 |       "points": [
2838 |         [
2839 |           0,
2840 |           -1.5250569903199922
2841 |         ],
2842 |         [
2843 |           7.675264364719304,
2844 |           -2.8032978840147194
2845 |         ],
2846 |         [
2847 |           20.77771844196958,
2848 |           -1.674411389127978
2849 |         ]
2850 |       ],
2851 |       "lastCommittedPoint": null,
2852 |       "startArrowhead": null,
2853 |       "endArrowhead": null
2854 |     },
2855 |     {
2856 |       "type": "draw",
2857 |       "version": 4013,
2858 |       "versionNonce": 938633127,
2859 |       "isDeleted": false,
2860 |       "id": "PZ6BGVXXGzIdsUyGV4Ag_",
2861 |       "fillStyle": "solid",
2862 |       "strokeWidth": 1,
2863 |       "strokeStyle": "solid",
2864 |       "roughness": 1,
2865 |       "opacity": 100,
2866 |       "angle": 0,
2867 |       "x": 783.1554182196887,
2868 |       "y": -20.818047639071267,
2869 |       "strokeColor": "#000000",
2870 |       "backgroundColor": "#fff",
2871 |       "width": 22.040441995528322,
2872 |       "height": 1.9518837165130463,
2873 |       "seed": 1881860903,
2874 |       "groupIds": [
2875 |         "vKzkjvUgFBZIyF5qiSOE_"
2876 |       ],
2877 |       "strokeSharpness": "round",
2878 |       "boundElementIds": [],
2879 |       "points": [
2880 |         [
2881 |           0,
2882 |           -1.0691598323638951
2883 |         ],
2884 |         [
2885 |           12.04339561297506,
2886 |           -1.1855398833831219
2887 |         ],
2888 |         [
2889 |           17.153876880715732,
2890 |           -0.013402508699010725
2891 |         ],
2892 |         [
2893 |           22.040441995528322,
2894 |           -1.9652862252120569
2895 |         ]
2896 |       ],
2897 |       "lastCommittedPoint": null,
2898 |       "startArrowhead": null,
2899 |       "endArrowhead": null
2900 |     },
2901 |     {
2902 |       "type": "draw",
2903 |       "version": 4050,
2904 |       "versionNonce": 1149667913,
2905 |       "isDeleted": false,
2906 |       "id": "XD2JifPTNkfTLn9K8NXDy",
2907 |       "fillStyle": "solid",
2908 |       "strokeWidth": 1,
2909 |       "strokeStyle": "solid",
2910 |       "roughness": 1,
2911 |       "opacity": 100,
2912 |       "angle": 0,
2913 |       "x": 781.6279895456084,
2914 |       "y": -15.45565252834902,
2915 |       "strokeColor": "#000000",
2916 |       "backgroundColor": "#fff",
2917 |       "width": 24.808347542269377,
2918 |       "height": 1.3267325816194155,
2919 |       "seed": 749338313,
2920 |       "groupIds": [
2921 |         "vKzkjvUgFBZIyF5qiSOE_"
2922 |       ],
2923 |       "strokeSharpness": "round",
2924 |       "boundElementIds": [],
2925 |       "points": [
2926 |         [
2927 |           0,
2928 |           -1.2496673365292923
2929 |         ],
2930 |         [
2931 |           4.635510175525229,
2932 |           -1.781630090586143
2933 |         ],
2934 |         [
2935 |           7.355219224416346,
2936 |           -1.6337215048928169
2937 |         ],
2938 |         [
2939 |           21.09388424723848,
2940 |           -0.9703552140831074
2941 |         ],
2942 |         [
2943 |           24.808347542269377,
2944 |           -2.297087795702523
2945 |         ]
2946 |       ],
2947 |       "lastCommittedPoint": null,
2948 |       "startArrowhead": null,
2949 |       "endArrowhead": null
2950 |     },
2951 |     {
2952 |       "type": "draw",
2953 |       "version": 4015,
2954 |       "versionNonce": 347396807,
2955 |       "isDeleted": false,
2956 |       "id": "-1wBxYhScp4ztHWmrYET2",
2957 |       "fillStyle": "solid",
2958 |       "strokeWidth": 1,
2959 |       "strokeStyle": "solid",
2960 |       "roughness": 1,
2961 |       "opacity": 100,
2962 |       "angle": 0,
2963 |       "x": 782.5514100736527,
2964 |       "y": -44.88967857703827,
2965 |       "strokeColor": "#000000",
2966 |       "backgroundColor": "#fff",
2967 |       "width": 21.39841204740554,
2968 |       "height": 1.1288864948867414,
2969 |       "seed": 1242623559,
2970 |       "groupIds": [
2971 |         "vKzkjvUgFBZIyF5qiSOE_"
2972 |       ],
2973 |       "strokeSharpness": "round",
2974 |       "boundElementIds": [],
2975 |       "points": [
2976 |         [
2977 |           0,
2978 |           -0.32167362921772585
2979 |         ],
2980 |         [
2981 |           8.29595797015527,
2982 |           -0.5912874140789839
2983 |         ],
2984 |         [
2985 |           21.39841204740554,
2986 |           0.5375990808077575
2987 |         ]
2988 |       ],
2989 |       "lastCommittedPoint": null,
2990 |       "startArrowhead": null,
2991 |       "endArrowhead": null
2992 |     },
2993 |     {
2994 |       "type": "draw",
2995 |       "version": 4030,
2996 |       "versionNonce": 1638947113,
2997 |       "isDeleted": false,
2998 |       "id": "B3U4kiCtJYhXgefArzfKN",
2999 |       "fillStyle": "solid",
3000 |       "strokeWidth": 1,
3001 |       "strokeStyle": "solid",
3002 |       "roughness": 1,
3003 |       "opacity": 100,
3004 |       "angle": 0,
3005 |       "x": 782.243997662509,
3006 |       "y": -29.866796949691008,
3007 |       "strokeColor": "#000000",
3008 |       "backgroundColor": "#fff",
3009 |       "width": 21.39841204740554,
3010 |       "height": 1.1288864948867414,
3011 |       "seed": 1316044201,
3012 |       "groupIds": [
3013 |         "vKzkjvUgFBZIyF5qiSOE_"
3014 |       ],
3015 |       "strokeSharpness": "round",
3016 |       "boundElementIds": [],
3017 |       "points": [
3018 |         [
3019 |           0,
3020 |           -0.32167362921772585
3021 |         ],
3022 |         [
3023 |           3.690654045722796,
3024 |           0.3294487619528638
3025 |         ],
3026 |         [
3027 |           8.29595797015527,
3028 |           -0.5912874140789839
3029 |         ],
3030 |         [
3031 |           21.39841204740554,
3032 |           0.5375990808077575
3033 |         ]
3034 |       ],
3035 |       "lastCommittedPoint": null,
3036 |       "startArrowhead": null,
3037 |       "endArrowhead": null
3038 |     },
3039 |     {
3040 |       "type": "text",
3041 |       "version": 456,
3042 |       "versionNonce": 1127145385,
3043 |       "isDeleted": false,
3044 |       "id": "2gOxT0-wpq4_aU63NnKJg",
3045 |       "fillStyle": "hachure",
3046 |       "strokeWidth": 4,
3047 |       "strokeStyle": "solid",
3048 |       "roughness": 1,
3049 |       "opacity": 100,
3050 |       "angle": 0,
3051 |       "x": 975.828125,
3052 |       "y": -59.55859375,
3053 |       "strokeColor": "#000000",
3054 |       "backgroundColor": "transparent",
3055 |       "width": 204,
3056 |       "height": 45,
3057 |       "seed": 85071529,
3058 |       "groupIds": [],
3059 |       "strokeSharpness": "sharp",
3060 |       "boundElementIds": [],
3061 |       "fontSize": 36,
3062 |       "fontFamily": 1,
3063 |       "text": "Data Lake",
3064 |       "baseline": 32,
3065 |       "textAlign": "left",
3066 |       "verticalAlign": "top"
3067 |     },
3068 |     {
3069 |       "type": "text",
3070 |       "version": 800,
3071 |       "versionNonce": 1202246247,
3072 |       "isDeleted": false,
3073 |       "id": "v4ju6Kt2U2IbZNrpE-4IW",
3074 |       "fillStyle": "hachure",
3075 |       "strokeWidth": 4,
3076 |       "strokeStyle": "solid",
3077 |       "roughness": 1,
3078 |       "opacity": 100,
3079 |       "angle": 0,
3080 |       "x": 623.2265625,
3081 |       "y": 154.875,
3082 |       "strokeColor": "#000000",
3083 |       "backgroundColor": "transparent",
3084 |       "width": 286,
3085 |       "height": 35,
3086 |       "seed": 303994889,
3087 |       "groupIds": [],
3088 |       "strokeSharpness": "sharp",
3089 |       "boundElementIds": [],
3090 |       "fontSize": 28,
3091 |       "fontFamily": 1,
3092 |       "text": "Docker (IDSeq-dag)",
3093 |       "baseline": 25,
3094 |       "textAlign": "left",
3095 |       "verticalAlign": "top"
3096 |     },
3097 |     {
3098 |       "type": "text",
3099 |       "version": 803,
3100 |       "versionNonce": 200055753,
3101 |       "isDeleted": false,
3102 |       "id": "2PRYSB6wOEAUufkawz8-o",
3103 |       "fillStyle": "hachure",
3104 |       "strokeWidth": 4,
3105 |       "strokeStyle": "solid",
3106 |       "roughness": 1,
3107 |       "opacity": 100,
3108 |       "angle": 0,
3109 |       "x": 621.9121420373465,
3110 |       "y": 80.75,
3111 |       "strokeColor": "#000000",
3112 |       "backgroundColor": "transparent",
3113 |       "width": 165,
3114 |       "height": 35,
3115 |       "seed": 1805775143,
3116 |       "groupIds": [],
3117 |       "strokeSharpness": "sharp",
3118 |       "boundElementIds": [],
3119 |       "fontSize": 28,
3120 |       "fontFamily": 1,
3121 |       "text": "WDL, JSON",
3122 |       "baseline": 25,
3123 |       "textAlign": "left",
3124 |       "verticalAlign": "top"
3125 |     },
3126 |     {
3127 |       "type": "line",
3128 |       "version": 4846,
3129 |       "versionNonce": 780065863,
3130 |       "isDeleted": false,
3131 |       "id": "eXhngY9oP-rwc8Z4TU3Ei",
3132 |       "fillStyle": "hachure",
3133 |       "strokeWidth": 1,
3134 |       "strokeStyle": "solid",
3135 |       "roughness": 1,
3136 |       "opacity": 100,
3137 |       "angle": 1.5707963267948957,
3138 |       "x": 496.91610121251296,
3139 |       "y": 73.34751510372733,
3140 |       "strokeColor": "#087f5b",
3141 |       "backgroundColor": "#40c057",
3142 |       "width": 52.317507746132115,
3143 |       "height": 154.56722543646003,
3144 |       "seed": 1597895015,
3145 |       "groupIds": [
3146 |         "xozIjy99Bp9kVlJajWyfz"
3147 |       ],
3148 |       "strokeSharpness": "round",
3149 |       "boundElementIds": [],
3150 |       "startBinding": null,
3151 |       "endBinding": null,
3152 |       "points": [
3153 |         [
3154 |           -0.24755378372925183,
3155 |           -40.169554027464216
3156 |         ],
3157 |         [
3158 |           -0.07503751055611152,
3159 |           76.6515171914404
3160 |         ],
3161 |         [
3162 |           -0.23948042713317108,
3163 |           89.95108885873196
3164 |         ],
3165 |         [
3166 |           2.446913573036335,
3167 |           95.69766931810295
3168 |         ],
3169 |         [
3170 |           11.802146636255692,
3171 |           100.56113713047068
3172 |         ],
3173 |         [
3174 |           27.615140546177496,
3175 |           102.07554835500338
3176 |         ],
3177 |         [
3178 |           42.72341054254274,
3179 |           99.65756899883291
3180 |         ],
3181 |         [
3182 |           50.75054563137204,
3183 |           93.87501510096598
3184 |         ],
3185 |         [
3186 |           51.88266441510958,
3187 |           89.00026150397161
3188 |         ],
3189 |         [
3190 |           52.04166639997853,
3191 |           78.29287333983132
3192 |         ],
3193 |         [
3194 |           51.916868330459295,
3195 |           -30.36891819848148
3196 |         ],
3197 |         [
3198 |           51.635533423123285,
3199 |           -40.63545540065934
3200 |         ],
3201 |         [
3202 |           48.27622163143906,
3203 |           -46.37349057843314
3204 |         ],
3205 |         [
3206 |           41.202227904674494,
3207 |           -49.69665692879073
3208 |         ],
3209 |         [
3210 |           25.081551986374073,
3211 |           -52.49167708145666
3212 |         ],
3213 |         [
3214 |           12.15685839679867,
3215 |           -50.825000270901
3216 |         ],
3217 |         [
3218 |           1.9916746648394732,
3219 |           -45.171835889467935
3220 |         ],
3221 |         [
3222 |           -0.2758413461535838,
3223 |           -40.23974757720194
3224 |         ],
3225 |         [
3226 |           -0.24755378372925183,
3227 |           -40.169554027464216
3228 |         ]
3229 |       ],
3230 |       "lastCommittedPoint": null,
3231 |       "startArrowhead": null,
3232 |       "endArrowhead": null
3233 |     },
3234 |     {
3235 |       "type": "line",
3236 |       "version": 2485,
3237 |       "versionNonce": 580988841,
3238 |       "isDeleted": false,
3239 |       "id": "9WBKAjwNpt7Q9jLFI643C",
3240 |       "fillStyle": "solid",
3241 |       "strokeWidth": 1,
3242 |       "strokeStyle": "solid",
3243 |       "roughness": 1,
3244 |       "opacity": 100,
3245 |       "angle": 1.5707963267948957,
3246 |       "x": 472.14113702442677,
3247 |       "y": 94.30348935426694,
3248 |       "strokeColor": "#087f5b",
3249 |       "backgroundColor": "transparent",
3250 |       "width": 50.7174766392476,
3251 |       "height": 12.698053371678215,
3252 |       "seed": 820083849,
3253 |       "groupIds": [
3254 |         "xozIjy99Bp9kVlJajWyfz"
3255 |       ],
3256 |       "strokeSharpness": "round",
3257 |       "boundElementIds": [],
3258 |       "startBinding": null,
3259 |       "endBinding": null,
3260 |       "points": [
3261 |         [
3262 |           0,
3263 |           -2.0205717204386002
3264 |         ],
3265 |         [
3266 |           1.3361877396713384,
3267 |           3.0410845646550486
3268 |         ],
3269 |         [
3270 |           7.098613049589299,
3271 |           7.287767671898479
3272 |         ],
3273 |         [
3274 |           14.766422451441104,
3275 |           9.859533283467512
3276 |         ],
3277 |         [
3278 |           26.779003528407447,
3279 |           10.093886705011586
3280 |         ],
3281 |         [
3282 |           40.79727342221974,
3283 |           8.456559589697127
3284 |         ],
3285 |         [
3286 |           48.98410145879092,
3287 |           2.500000505196364
3288 |         ],
3289 |         [
3290 |           50.7174766392476,
3291 |           -2.6041666666666288
3292 |         ]
3293 |       ],
3294 |       "lastCommittedPoint": null,
3295 |       "startArrowhead": null,
3296 |       "endArrowhead": null
3297 |     },
3298 |     {
3299 |       "type": "line",
3300 |       "version": 2618,
3301 |       "versionNonce": 923384679,
3302 |       "isDeleted": false,
3303 |       "id": "wQjAtrv40bzDckfypoHZA",
3304 |       "fillStyle": "solid",
3305 |       "strokeWidth": 1,
3306 |       "strokeStyle": "solid",
3307 |       "roughness": 1,
3308 |       "opacity": 100,
3309 |       "angle": 1.5707963267948957,
3310 |       "x": 517.5669181728687,
3311 |       "y": 94.75835969569083,
3312 |       "strokeColor": "#087f5b",
3313 |       "backgroundColor": "transparent",
3314 |       "width": 50.57247907260371,
3315 |       "height": 10.178760037658167,
3316 |       "seed": 1701391495,
3317 |       "groupIds": [
3318 |         "xozIjy99Bp9kVlJajWyfz"
3319 |       ],
3320 |       "strokeSharpness": "round",
3321 |       "boundElementIds": [],
3322 |       "startBinding": null,
3323 |       "endBinding": null,
3324 |       "points": [
3325 |         [
3326 |           0,
3327 |           -2.136356936862347
3328 |         ],
3329 |         [
3330 |           1.332367676378171,
3331 |           1.9210669226078037
3332 |         ],
3333 |         [
3334 |           7.078318632616268,
3335 |           5.325208253515953
3336 |         ],
3337 |         [
3338 |           14.724206326638113,
3339 |           7.386735659885842
3340 |         ],
3341 |         [
3342 |           26.70244431044034,
3343 |           7.574593370991538
3344 |         ],
3345 |         [
3346 |           40.68063699304561,
3347 |           6.262111896696538
3348 |         ],
3349 |         [
3350 |           48.84405948536458,
3351 |           1.4873339211608216
3352 |         ],
3353 |         [
3354 |           50.57247907260371,
3355 |           -2.6041666666666288
3356 |         ]
3357 |       ],
3358 |       "lastCommittedPoint": null,
3359 |       "startArrowhead": null,
3360 |       "endArrowhead": null
3361 |     },
3362 |     {
3363 |       "type": "ellipse",
3364 |       "version": 5584,
3365 |       "versionNonce": 1678725769,
3366 |       "isDeleted": false,
3367 |       "id": "KPN0KnvnI8-uG7ax5ILuC",
3368 |       "fillStyle": "solid",
3369 |       "strokeWidth": 1,
3370 |       "strokeStyle": "solid",
3371 |       "roughness": 1,
3372 |       "opacity": 100,
3373 |       "angle": 1.5707963267948957,
3374 |       "x": 564.1716913049837,
3375 |       "y": 86.76880683794023,
3376 |       "strokeColor": "#087f5b",
3377 |       "backgroundColor": "#fff",
3378 |       "width": 51.27812853552538,
3379 |       "height": 22.797152568995934,
3380 |       "seed": 1651704681,
3381 |       "groupIds": [
3382 |         "xozIjy99Bp9kVlJajWyfz"
3383 |       ],
3384 |       "strokeSharpness": "sharp",
3385 |       "boundElementIds": [
3386 |         "bxuMGTzXLn7H-uBCptINx"
3387 |       ]
3388 |     },
3389 |     {
3390 |       "type": "text",
3391 |       "version": 525,
3392 |       "versionNonce": 609819591,
3393 |       "isDeleted": false,
3394 |       "id": "7QKWIYRiZ_QomEUOJN_-C",
3395 |       "fillStyle": "hachure",
3396 |       "strokeWidth": 4,
3397 |       "strokeStyle": "solid",
3398 |       "roughness": 1,
3399 |       "opacity": 100,
3400 |       "angle": 0,
3401 |       "x": 983.046875,
3402 |       "y": 115.88671875,
3403 |       "strokeColor": "#000000",
3404 |       "backgroundColor": "transparent",
3405 |       "width": 345,
3406 |       "height": 45,
3407 |       "seed": 1421876361,
3408 |       "groupIds": [],
3409 |       "strokeSharpness": "sharp",
3410 |       "boundElementIds": [],
3411 |       "fontSize": 36,
3412 |       "fontFamily": 1,
3413 |       "text": "Pipeline and params",
3414 |       "baseline": 32,
3415 |       "textAlign": "left",
3416 |       "verticalAlign": "top"
3417 |     },
3418 |     {
3419 |       "type": "rectangle",
3420 |       "version": 802,
3421 |       "versionNonce": 127693511,
3422 |       "isDeleted": false,
3423 |       "id": "r6WoG0fu_dhw1vFvBxy8B",
3424 |       "fillStyle": "solid",
3425 |       "strokeWidth": 1,
3426 |       "strokeStyle": "solid",
3427 |       "roughness": 1,
3428 |       "opacity": 100,
3429 |       "angle": 0,
3430 |       "x": 405.36326348057213,
3431 |       "y": 350.6742478660052,
3432 |       "strokeColor": "#000000",
3433 |       "backgroundColor": "#ced4da",
3434 |       "width": 45.06253553885557,
3435 |       "height": 68.91712926798951,
3436 |       "seed": 1255717671,
3437 |       "groupIds": [
3438 |         "V9cMTxweWCLrsDwb2yS8e"
3439 |       ],
3440 |       "strokeSharpness": "sharp",
3441 |       "boundElementIds": []
3442 |     },
3443 |     {
3444 |       "type": "rectangle",
3445 |       "version": 952,
3446 |       "versionNonce": 615399721,
3447 |       "isDeleted": false,
3448 |       "id": "3BjP49Q_8IaIx1jFbhyuV",
3449 |       "fillStyle": "solid",
3450 |       "strokeWidth": 1,
3451 |       "strokeStyle": "solid",
3452 |       "roughness": 1,
3453 |       "opacity": 100,
3454 |       "angle": 0,
3455 |       "x": 410.52242842121694,
3456 |       "y": 355.9285294799056,
3457 |       "strokeColor": "#000000",
3458 |       "backgroundColor": "#fff",
3459 |       "width": 35.50788279378928,
3460 |       "height": 52.708882312110724,
3461 |       "seed": 2021732041,
3462 |       "groupIds": [
3463 |         "V9cMTxweWCLrsDwb2yS8e"
3464 |       ],
3465 |       "strokeSharpness": "sharp",
3466 |       "boundElementIds": []
3467 |     },
3468 |     {
3469 |       "type": "ellipse",
3470 |       "version": 996,
3471 |       "versionNonce": 1966113255,
3472 |       "isDeleted": false,
3473 |       "id": "uczqy0jURTkzxXf8uuLyC",
3474 |       "fillStyle": "solid",
3475 |       "strokeWidth": 1,
3476 |       "strokeStyle": "solid",
3477 |       "roughness": 1,
3478 |       "opacity": 100,
3479 |       "angle": 0,
3480 |       "x": 424.64044352462946,
3481 |       "y": 410.8931297500093,
3482 |       "strokeColor": "#000000",
3483 |       "backgroundColor": "#fff",
3484 |       "width": 7.271852586964892,
3485 |       "height": 7.271852586964892,
3486 |       "seed": 780451399,
3487 |       "groupIds": [
3488 |         "V9cMTxweWCLrsDwb2yS8e"
3489 |       ],
3490 |       "strokeSharpness": "sharp",
3491 |       "boundElementIds": []
3492 |     },
3493 |     {
3494 |       "type": "rectangle",
3495 |       "version": 644,
3496 |       "versionNonce": 360592393,
3497 |       "isDeleted": false,
3498 |       "id": "F3GtFC_BW_vq8ERg-l-GB",
3499 |       "fillStyle": "cross-hatch",
3500 |       "strokeWidth": 1,
3501 |       "strokeStyle": "solid",
3502 |       "roughness": 1,
3503 |       "opacity": 100,
3504 |       "angle": 0,
3505 |       "x": 415.7910331897512,
3506 |       "y": 362.63807916841665,
3507 |       "strokeColor": "#000000",
3508 |       "backgroundColor": "#fab005",
3509 |       "width": 24.970673256720772,
3510 |       "height": 12.656234861443139,
3511 |       "seed": 2011327913,
3512 |       "groupIds": [
3513 |         "V9cMTxweWCLrsDwb2yS8e"
3514 |       ],
3515 |       "strokeSharpness": "sharp",
3516 |       "boundElementIds": []
3517 |     },
3518 |     {
3519 |       "type": "rectangle",
3520 |       "version": 686,
3521 |       "versionNonce": 800435463,
3522 |       "isDeleted": false,
3523 |       "id": "fHbBAQy816ch_oBPadwmQ",
3524 |       "fillStyle": "cross-hatch",
3525 |       "strokeWidth": 1,
3526 |       "strokeStyle": "solid",
3527 |       "roughness": 1,
3528 |       "opacity": 100,
3529 |       "angle": 0,
3530 |       "x": 415.7910331897512,
3531 |       "y": 385.26450299362443,
3532 |       "strokeColor": "#000000",
3533 |       "backgroundColor": "#fab005",
3534 |       "width": 24.970673256720772,
3535 |       "height": 12.656234861443139,
3536 |       "seed": 1073962343,
3537 |       "groupIds": [
3538 |         "V9cMTxweWCLrsDwb2yS8e"
3539 |       ],
3540 |       "strokeSharpness": "sharp",
3541 |       "boundElementIds": []
3542 |     },
3543 |     {
3544 |       "type": "diamond",
3545 |       "version": 866,
3546 |       "versionNonce": 1444230057,
3547 |       "isDeleted": false,
3548 |       "id": "oR1lqlew-T6PK3Ew2qSEX",
3549 |       "fillStyle": "solid",
3550 |       "strokeWidth": 1,
3551 |       "strokeStyle": "solid",
3552 |       "roughness": 1,
3553 |       "opacity": 100,
3554 |       "angle": 0,
3555 |       "x": 408.5474111234828,
3556 |       "y": 301.921667919573,
3557 |       "strokeColor": "#c92a2a",
3558 |       "backgroundColor": "#fd8888",
3559 |       "width": 52.702868007120905,
3560 |       "height": 17.204717742153658,
3561 |       "seed": 1547875881,
3562 |       "groupIds": [
3563 |         "Cw9EMrjC4vhfQYaQ72BL9"
3564 |       ],
3565 |       "strokeSharpness": "sharp",
3566 |       "boundElementIds": []
3567 |     },
3568 |     {
3569 |       "type": "diamond",
3570 |       "version": 907,
3571 |       "versionNonce": 667416423,
3572 |       "isDeleted": false,
3573 |       "id": "D1WvQ9OE0ImKZf-ipTuRh",
3574 |       "fillStyle": "solid",
3575 |       "strokeWidth": 1,
3576 |       "strokeStyle": "solid",
3577 |       "roughness": 1,
3578 |       "opacity": 100,
3579 |       "angle": 0,
3580 |       "x": 408.5474111234828,
3581 |       "y": 297.77094281830773,
3582 |       "strokeColor": "#c92a2a",
3583 |       "backgroundColor": "#fd8888",
3584 |       "width": 52.702868007120905,
3585 |       "height": 17.204717742153658,
3586 |       "seed": 118086887,
3587 |       "groupIds": [
3588 |         "Cw9EMrjC4vhfQYaQ72BL9"
3589 |       ],
3590 |       "strokeSharpness": "sharp",
3591 |       "boundElementIds": []
3592 |     },
3593 |     {
3594 |       "type": "diamond",
3595 |       "version": 987,
3596 |       "versionNonce": 308467337,
3597 |       "isDeleted": false,
3598 |       "id": "DHJtFq7OREhGy60-9dmjp",
3599 |       "fillStyle": "solid",
3600 |       "strokeWidth": 1,
3601 |       "strokeStyle": "solid",
3602 |       "roughness": 1,
3603 |       "opacity": 100,
3604 |       "angle": 0,
3605 |       "x": 408.5474111234828,
3606 |       "y": 291.8616460169046,
3607 |       "strokeColor": "#c92a2a",
3608 |       "backgroundColor": "#fd8888",
3609 |       "width": 52.702868007120905,
3610 |       "height": 17.204717742153658,
3611 |       "seed": 750520585,
3612 |       "groupIds": [
3613 |         "Cw9EMrjC4vhfQYaQ72BL9"
3614 |       ],
3615 |       "strokeSharpness": "sharp",
3616 |       "boundElementIds": []
3617 |     },
3618 |     {
3619 |       "type": "diamond",
3620 |       "version": 1029,
3621 |       "versionNonce": 1522692743,
3622 |       "isDeleted": false,
3623 |       "id": "Br3PmSwoenfR5O4JeXdd7",
3624 |       "fillStyle": "solid",
3625 |       "strokeWidth": 1,
3626 |       "strokeStyle": "solid",
3627 |       "roughness": 1,
3628 |       "opacity": 100,
3629 |       "angle": 0,
3630 |       "x": 408.5474111234828,
3631 |       "y": 285.9986143382732,
3632 |       "strokeColor": "#c92a2a",
3633 |       "backgroundColor": "#fd8888",
3634 |       "width": 52.702868007120905,
3635 |       "height": 17.204717742153658,
3636 |       "seed": 330016775,
3637 |       "groupIds": [
3638 |         "Cw9EMrjC4vhfQYaQ72BL9"
3639 |       ],
3640 |       "strokeSharpness": "sharp",
3641 |       "boundElementIds": []
3642 |     },
3643 |     {
3644 |       "type": "text",
3645 |       "version": 679,
3646 |       "versionNonce": 701643655,
3647 |       "isDeleted": false,
3648 |       "id": "FqNGxEZ8V0eb1HD_5akT2",
3649 |       "fillStyle": "hachure",
3650 |       "strokeWidth": 4,
3651 |       "strokeStyle": "solid",
3652 |       "roughness": 1,
3653 |       "opacity": 100,
3654 |       "angle": 0,
3655 |       "x": 461.0778569382586,
3656 |       "y": 223.73046875,
3657 |       "strokeColor": "#000000",
3658 |       "backgroundColor": "transparent",
3659 |       "width": 109,
3660 |       "height": 35,
3661 |       "seed": 1403010409,
3662 |       "groupIds": [],
3663 |       "strokeSharpness": "sharp",
3664 |       "boundElementIds": [],
3665 |       "fontSize": 28,
3666 |       "fontFamily": 1,
3667 |       "text": "Daemon",
3668 |       "baseline": 25,
3669 |       "textAlign": "left",
3670 |       "verticalAlign": "top"
3671 |     },
3672 |     {
3673 |       "type": "diamond",
3674 |       "version": 903,
3675 |       "versionNonce": 989890983,
3676 |       "isDeleted": false,
3677 |       "id": "Q5tkdCrufCLyYciaL1GRf",
3678 |       "fillStyle": "solid",
3679 |       "strokeWidth": 1,
3680 |       "strokeStyle": "solid",
3681 |       "roughness": 1,
3682 |       "opacity": 100,
3683 |       "angle": 0,
3684 |       "x": 406.3752680617414,
3685 |       "y": 245.421667919573,
3686 |       "strokeColor": "#c92a2a",
3687 |       "backgroundColor": "#fd8888",
3688 |       "width": 52.702868007120905,
3689 |       "height": 17.204717742153658,
3690 |       "seed": 1671129511,
3691 |       "groupIds": [
3692 |         "eFiy61aCtGkQvZ8MscU8U"
3693 |       ],
3694 |       "strokeSharpness": "sharp",
3695 |       "boundElementIds": []
3696 |     },
3697 |     {
3698 |       "type": "diamond",
3699 |       "version": 944,
3700 |       "versionNonce": 1516472393,
3701 |       "isDeleted": false,
3702 |       "id": "tTfHqUvlLRFRDXjt2XKIC",
3703 |       "fillStyle": "solid",
3704 |       "strokeWidth": 1,
3705 |       "strokeStyle": "solid",
3706 |       "roughness": 1,
3707 |       "opacity": 100,
3708 |       "angle": 0,
3709 |       "x": 406.3752680617414,
3710 |       "y": 241.27094281830773,
3711 |       "strokeColor": "#c92a2a",
3712 |       "backgroundColor": "#fd8888",
3713 |       "width": 52.702868007120905,
3714 |       "height": 17.204717742153658,
3715 |       "seed": 1164355657,
3716 |       "groupIds": [
3717 |         "eFiy61aCtGkQvZ8MscU8U"
3718 |       ],
3719 |       "strokeSharpness": "sharp",
3720 |       "boundElementIds": []
3721 |     },
3722 |     {
3723 |       "type": "diamond",
3724 |       "version": 1024,
3725 |       "versionNonce": 363773127,
3726 |       "isDeleted": false,
3727 |       "id": "cl6IRQN4lp5bdGDN_AMNO",
3728 |       "fillStyle": "solid",
3729 |       "strokeWidth": 1,
3730 |       "strokeStyle": "solid",
3731 |       "roughness": 1,
3732 |       "opacity": 100,
3733 |       "angle": 0,
3734 |       "x": 406.3752680617414,
3735 |       "y": 235.36164601690461,
3736 |       "strokeColor": "#c92a2a",
3737 |       "backgroundColor": "#fd8888",
3738 |       "width": 52.702868007120905,
3739 |       "height": 17.204717742153658,
3740 |       "seed": 669883591,
3741 |       "groupIds": [
3742 |         "eFiy61aCtGkQvZ8MscU8U"
3743 |       ],
3744 |       "strokeSharpness": "sharp",
3745 |       "boundElementIds": []
3746 |     },
3747 |     {
3748 |       "type": "diamond",
3749 |       "version": 1066,
3750 |       "versionNonce": 1866307369,
3751 |       "isDeleted": false,
3752 |       "id": "oS2Iww0CZTkMa1clZ4lL2",
3753 |       "fillStyle": "solid",
3754 |       "strokeWidth": 1,
3755 |       "strokeStyle": "solid",
3756 |       "roughness": 1,
3757 |       "opacity": 100,
3758 |       "angle": 0,
3759 |       "x": 406.3752680617414,
3760 |       "y": 229.49861433827323,
3761 |       "strokeColor": "#c92a2a",
3762 |       "backgroundColor": "#fd8888",
3763 |       "width": 52.702868007120905,
3764 |       "height": 17.204717742153658,
3765 |       "seed": 1289533225,
3766 |       "groupIds": [
3767 |         "eFiy61aCtGkQvZ8MscU8U"
3768 |       ],
3769 |       "strokeSharpness": "sharp",
3770 |       "boundElementIds": []
3771 |     },
3772 |     {
3773 |       "type": "text",
3774 |       "version": 776,
3775 |       "versionNonce": 714688489,
3776 |       "isDeleted": false,
3777 |       "id": "sHxAN4B20XKYCXgLMiQBY",
3778 |       "fillStyle": "hachure",
3779 |       "strokeWidth": 4,
3780 |       "strokeStyle": "solid",
3781 |       "roughness": 1,
3782 |       "opacity": 100,
3783 |       "angle": 0,
3784 |       "x": 649.30078125,
3785 |       "y": 225.609375,
3786 |       "strokeColor": "#000000",
3787 |       "backgroundColor": "transparent",
3788 |       "width": 302,
3789 |       "height": 35,
3790 |       "seed": 50106313,
3791 |       "groupIds": [],
3792 |       "strokeSharpness": "sharp",
3793 |       "boundElementIds": [],
3794 |       "fontSize": 28,
3795 |       "fontFamily": 1,
3796 |       "text": "miniwdl/Docker Swarm",
3797 |       "baseline": 25,
3798 |       "textAlign": "left",
3799 |       "verticalAlign": "top"
3800 |     },
3801 |     {
3802 |       "id": "lU4fXWuaep1BlQ5GzdpTk",
3803 |       "type": "rectangle",
3804 |       "x": 451.93663194444446,
3805 |       "y": 150.89583333333337,
3806 |       "width": 38.541666666666686,
3807 |       "height": 45.2734375,
3808 |       "angle": 0,
3809 |       "strokeColor": "#087f5b",
3810 |       "backgroundColor": "#12b886",
3811 |       "fillStyle": "solid",
3812 |       "strokeWidth": 2,
3813 |       "strokeStyle": "solid",
3814 |       "roughness": 2,
3815 |       "opacity": 50,
3816 |       "groupIds": [],
3817 |       "strokeSharpness": "sharp",
3818 |       "seed": 1555519817,
3819 |       "version": 130,
3820 |       "versionNonce": 1854664583,
3821 |       "isDeleted": false,
3822 |       "boundElementIds": null
3823 |     },
3824 |     {
3825 |       "id": "uG9UQ5srlOotzUBWUyWP1",
3826 |       "type": "rectangle",
3827 |       "x": 504.2022569444444,
3828 |       "y": 152.67317708333337,
3829 |       "width": 38.541666666666686,
3830 |       "height": 45.2734375,
3831 |       "angle": 0,
3832 |       "strokeColor": "#087f5b",
3833 |       "backgroundColor": "#12b886",
3834 |       "fillStyle": "solid",
3835 |       "strokeWidth": 2,
3836 |       "strokeStyle": "solid",
3837 |       "roughness": 2,
3838 |       "opacity": 50,
3839 |       "groupIds": [],
3840 |       "strokeSharpness": "sharp",
3841 |       "seed": 397601801,
3842 |       "version": 179,
3843 |       "versionNonce": 1384816999,
3844 |       "isDeleted": false,
3845 |       "boundElementIds": null
3846 |     },
3847 |     {
3848 |       "id": "0C8HS2fHs3B0S0iC8_TEv",
3849 |       "type": "rectangle",
3850 |       "x": 558.3689236111111,
3851 |       "y": 149.92578125,
3852 |       "width": 38.541666666666686,
3853 |       "height": 45.2734375,
3854 |       "angle": 0,
3855 |       "strokeColor": "#087f5b",
3856 |       "backgroundColor": "#12b886",
3857 |       "fillStyle": "solid",
3858 |       "strokeWidth": 2,
3859 |       "strokeStyle": "solid",
3860 |       "roughness": 2,
3861 |       "opacity": 50,
3862 |       "groupIds": [],
3863 |       "strokeSharpness": "sharp",
3864 |       "seed": 1569115015,
3865 |       "version": 241,
3866 |       "versionNonce": 1812402153,
3867 |       "isDeleted": false,
3868 |       "boundElementIds": null
3869 |     }
3870 |   ],
3871 |   "appState": {
3872 |     "gridSize": null,
3873 |     "viewBackgroundColor": "#ffffff"
3874 |   }
3875 | }


--------------------------------------------------------------------------------
/images/data-lakes/gcp-cromwell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/gcp-cromwell.png


--------------------------------------------------------------------------------
/images/data-lakes/gcp-deepvariant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/gcp-deepvariant.png


--------------------------------------------------------------------------------
/images/data-lakes/gcp-k8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/gcp-k8.png


--------------------------------------------------------------------------------
/images/data-lakes/gcp-nextflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/gcp-nextflow.png


--------------------------------------------------------------------------------
/images/data-lakes/raw-k8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/data-lakes/raw-k8.png


--------------------------------------------------------------------------------
/images/databricks-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/databricks-icon.png


--------------------------------------------------------------------------------
/images/gcp-locations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/gcp-locations.png


--------------------------------------------------------------------------------
/images/gcp-networks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/gcp-networks.png


--------------------------------------------------------------------------------
/images/ibm-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/ibm-cloud.png


--------------------------------------------------------------------------------
/images/learning-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/learning-cloud.png


--------------------------------------------------------------------------------
/images/logos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/logos.png


--------------------------------------------------------------------------------
/images/prompt-kata-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/prompt-kata-group.png


--------------------------------------------------------------------------------
/images/terraform-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/terraform-arch.png


--------------------------------------------------------------------------------
/images/trends.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/trends.png


--------------------------------------------------------------------------------
/images/viz-tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/images/viz-tools.png


--------------------------------------------------------------------------------
/z_utilities/.devcontainer/DOCKERFILE:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/vscode/devcontainers/base:debian-10
2 | 
3 |  RUN apt-get update \
4 |      && export DEBIAN_FRONTEND=noninteractive \
5 |      && apt-get -y install --no-install-recommends graphviz
6 | 
7 | 


--------------------------------------------------------------------------------
/z_utilities/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
 1 | {
 2 | 	"name": "Markdown Editing",
 3 | 	"dockerFile": "DOCKERFILE",
 4 | 
 5 | 	"settings": { 
 6 | 		"terminal.integrated.shell.linux": "/bin/bash"
 7 | 	},
 8 | 
 9 | 	"extensions": [
10 | 		"yzhang.markdown-all-in-one",
11 | 		"streetsidesoftware.code-spell-checker",
12 | 		"DavidAnson.vscode-markdownlint",
13 | 		"shd101wyy.markdown-preview-enhanced",
14 | 		"bierner.github-markdown-preview"
15 | 	]
16 | 
17 | }


--------------------------------------------------------------------------------
/z_utilities/.metals/metals.h2.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynnlangit/learning-cloud/c984dea307b4f39d2e5a7aa7ec66dde773705d2f/z_utilities/.metals/metals.h2.db


--------------------------------------------------------------------------------
/z_utilities/.tours/aws-tour.tour:
--------------------------------------------------------------------------------
 1 | {
 2 |   "title": "AWS-tour",
 3 |   "steps": [
 4 |     {
 5 |       "file": "AWS/README.md",
 6 |       "line": 7,
 7 |       "description": "These courses are for specific topics in AWS",
 8 |       "title": "AWS for Data Science"
 9 |     },
10 |     {
11 |       "file": "AWS/README.md",
12 |       "line": 8,
13 |       "description": "These courses are for AWS DevOps topics",
14 |       "title": "AWS for DevOps"
15 |     },
16 |     {
17 |       "file": "AWS/README.md",
18 |       "line": 9,
19 |       "description": "This course series is for Cloud Architects",
20 |       "title": "AWS for Architects"
21 |     },
22 |     {
23 |       "file": "AWS/README.md",
24 |       "line": 13,
25 |       "description": "Example GitHub Repos include scripts, demos and sample datasets",
26 |       "title": "Example GitHub Repos"
27 |     },
28 |     {
29 |       "file": "AWS/README.md",
30 |       "line": 24,
31 |       "description": "The open guide to AWS is a useful resource, written by the user community\n[Open Website in browser](command:vscode.open?[\"https://github.com/open-guides/og-aws\"])",
32 |       "title": "The Open Guide to AWS on GitHub"
33 |     }
34 |   ],
35 |   "ref": "master"
36 | }


--------------------------------------------------------------------------------
/z_utilities/.tours/cloud-tour.tour:
--------------------------------------------------------------------------------
 1 | {
 2 |   "title": "Cloud-tour",
 3 |   "steps": [
 4 |     {
 5 |       "file": "README.md",
 6 |       "line": 9,
 7 |       "description": "This link goes to my LinkedIn Learning Cloud courses",
 8 |       "title": "LinkedIn Learning Courses"
 9 |     },
10 |     {
11 |       "file": "README.md",
12 |       "line": 12,
13 |       "description": "This link goes to my YouTube Channel.  I have playlists by topic there too.",
14 |       "title": "YouTube Screencasts"
15 |     },
16 |     {
17 |       "file": "README.md",
18 |       "line": 22,
19 |       "description": "I have one page per cloud in this repo.  Go to the vendor folder, then the `README.md` file in that folder.\n\nFor example for AWS, [Open AWS CodeTour](command:codetour.startTourByTitle?[\"AWS-tour\"])",
20 |       "title": "GOTO AWS CodeTour"
21 |     },
22 |     {
23 |       "file": "README.md",
24 |       "line": 23,
25 |       "description": "I have one page per cloud in this repo.  Go to the vendor folder, then the `README.md` file in that folder.\n\nFor example for AWS, [Open GCP CodeTour](command:codetour.startTourByTitle?[\"GCP-tour\"])"
26 |     }
27 |   ],
28 |   "ref": "master"
29 | }


--------------------------------------------------------------------------------
/z_utilities/.tours/gcp-tour.tour:
--------------------------------------------------------------------------------
 1 | {
 2 |   "title": "GCP-tour",
 3 |   "steps": [
 4 |     {
 5 |       "file": "GCP/README.md",
 6 |       "line": 7,
 7 |       "description": "The 'missing' GCP course - designed for beginners to the GCP cloud"
 8 |     },
 9 |     {
10 |       "file": "GCP/README.md",
11 |       "line": 11,
12 |       "description": "Uses GCP Dataproc - managed Hadoop and Spark"
13 |     },
14 |     {
15 |       "file": "GCP/README.md",
16 |       "line": 19,
17 |       "description": "Fully open source and free course for GCP - all examples use genomic datasets"
18 |     }
19 |   ],
20 |   "ref": "master"
21 | }


--------------------------------------------------------------------------------
/z_utilities/.vscode/settings.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "cSpell.words": [
 3 |         "bioinformatics",
 4 |         "langit",
 5 |         "screencasts"
 6 |     ],
 7 |     "extensions.ignoreRecommendations": true,
 8 |     "files.autoSave": "afterDelay",
 9 |     "typescript.tsc.autoDetect": "off",
10 |     "npm.autoDetect": "off",
11 |     "debug.allowBreakpointsEverywhere": true,
12 |     "html.autoClosingTags": false,
13 |     "files.watcherExclude": {
14 |         "**/target": true
15 |     }
16 | }


--------------------------------------------------------------------------------