<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-10435215</atom:id><lastBuildDate>Thu, 23 Apr 2026 22:56:08 +0000</lastBuildDate><category>Silverlight</category><category>Docker</category><category>Azure</category><category>Agile</category><category>Kubernetes</category><category>Design Patterns</category><category>NGTweet</category><category>MVVM</category><category>AKS</category><category>Azure Kubernetes Service</category><category>Docker Compose</category><category>Azure Container Service</category><category>MVVMLight</category><category>WP7</category><category>k8s</category><category>ASP.NET</category><category>Architecture</category><category>Docker Swarm</category><category>kubectl</category><category>Entity Framework</category><category>Northwind</category><category>Silverlight 4</category><category>VSTS</category><category>unit test</category><category>unit testing</category><category>ASP.NET MVC</category><category>Code Quality</category><category>EF</category><category>Enitity Framework</category><category>TDD</category><category>.net core</category><category>Azure CLI</category><category>Code coverage</category><category>DevOps</category><category>EF 4</category><category>EF 4.0</category><category>Enitity Framework 4.0</category><category>Entity Framework 4</category><category>GitHub</category><category>Rhino Mocks</category><category>TweetSharp</category><category>WPF</category><category>cloudnative</category><category>ASP.Net Core 2.0</category><category>Entity Framework 4.0</category><category>ObjectContext</category><category>Refactoring</category><category>Silverlight 5</category><category>code metrics</category><category>entity data model</category><category>.Core MVC</category><category>Ansible</category><category>LINQ</category><category>NHibernate</category><category>Visual Studio</category><category>entity model</category><category>ACR</category><category>Abstract Factory Design Pattern</category><category>Apache Spark</category><category>Dotnet core</category><category>Factory Design Patterns</category><category>Fitnesse</category><category>FxCop</category><category>HDInsight</category><category>IntelliJ</category><category>KEDA</category><category>SQL Server 2017</category><category>Style</category><category>StyleCop</category><category>VS Code</category><category>acceptance testing</category><category>certification</category><category>code first development</category><category>object context</category><category>scrum</category><category>AddObject</category><category>Atom</category><category>Azure Container registry</category><category>CNCF</category><category>Cyclomatic Complexity</category><category>Decorator</category><category>DispatcherHelper</category><category>EDMX</category><category>Entity Framework Learning Series</category><category>EntitySet</category><category>Functional testing</category><category>GenAI</category><category>Implicit Style</category><category>InternalsVisibleTo</category><category>IsolatedStorage</category><category>LINQ to SQL</category><category>LINQ2SQL</category><category>Linux</category><category>Llama3.1</category><category>MS Test</category><category>Messenger</category><category>Mistral</category><category>Model First</category><category>NBuilder</category><category>NCover</category><category>NUnit</category><category>Navigation Properties</category><category>NuGet</category><category>Observer Design Pattern</category><category>Offline LLM</category><category>Open Close Principle</category><category>Partial Mock</category><category>Resharper</category><category>Silverlight Theme</category><category>Silverlight Toolkit</category><category>Silverlight Unit Testing Framework</category><category>Single Responsibility Principle</category><category>Singleton Design Pattern</category><category>Skaffold</category><category>Strategy Pattern</category><category>TestDriven.Net</category><category>Travis CI</category><category>TweetDeck</category><category>Twitter</category><category>Visual Studio Code</category><category>Voxxed Days Singapore</category><category>WCF Service</category><category>github actions</category><category>personal finance</category><category>12FactorApps</category><category>15FactorApps</category><category>ACI</category><category>AG_E_NETWOK_ERROR</category><category>Adapter Design Pattern</category><category>Alpine</category><category>AndSpecification</category><category>App.config</category><category>AppDomain</category><category>AppSettings</category><category>Azure Data Solution Exam</category><category>Azure DevOps</category><category>Azure Resource Manager</category><category>BDD</category><category>BDotNet</category><category>BackgroundWorker</category><category>BasedOn</category><category>BitBucket</category><category>Blogo</category><category>BrewPackageManager</category><category>Builder Design Pattern</category><category>CKA</category><category>CKA exam prep</category><category>CKAD</category><category>CRUD</category><category>CSDL</category><category>ClientAccess.xml</category><category>Coding</category><category>Composite Design Pattern</category><category>Composite UI Application block</category><category>Configuration</category><category>ControlTemplate</category><category>Crossdomain.xml</category><category>CruiseControl.Net</category><category>DP-200</category><category>DP-201</category><category>DVCS</category><category>Data Template</category><category>Data Triggers</category><category>DataTriggers</category><category>DbContext</category><category>DelegateCommand</category><category>DeleteObject</category><category>Delicious</category><category>Developement</category><category>DialogService</category><category>DispatcherTimer</category><category>Distinct</category><category>Distributed Version Control System</category><category>DoWork</category><category>DotNet Design Patterns</category><category>Enterprise Patterns</category><category>Entity SQL</category><category>ExpectationViolationException</category><category>Extract Method refactoring</category><category>Facade Design Pattern</category><category>Facebook</category><category>FifteenFactorApps</category><category>First</category><category>Fluent Asserts</category><category>Fluent NHibernate</category><category>FormatString</category><category>Full Cleanup</category><category>GAC</category><category>Git</category><category>Global assembly cache</category><category>Google Reader</category><category>Hugging Face</category><category>IDataErrorInfo</category><category>IValueConverter</category><category>Image</category><category>Implicit Data Templates</category><category>Indian Public Holidays</category><category>Inversion of Control</category><category>LLM</category><category>LM Studio</category><category>Lambda expressions</category><category>Lazy Loading</category><category>MSL</category><category>MVP</category><category>MacOS</category><category>Maintainability Index</category><category>Martin Fowler</category><category>Memento Design Pattern</category><category>Mercurial</category><category>Micosoft.Expression.Interactions.dll</category><category>Microsoft One Note</category><category>Money Manager</category><category>Moq</category><category>MovieLens</category><category>Multithreaded</category><category>NCrunch</category><category>NDepend</category><category>NMock</category><category>NotSpecification</category><category>O space</category><category>OAuth</category><category>OAuthAccessToken</category><category>OAuthRequestToken</category><category>Object initializer</category><category>Object space</category><category>Oh My Zsh</category><category>Ollama</category><category>OpenWebUI</category><category>OrSpecification</category><category>OrderBy</category><category>OrderByDescending</category><category>Orkut</category><category>Pair Programming</category><category>Phi</category><category>Phi3</category><category>Portainer</category><category>PowerShell</category><category>PowerTools</category><category>Prototype Design Pattern</category><category>RabbitMQ</category><category>Reformat code</category><category>RelayCommand</category><category>RunWorkerAsync</category><category>RunWorkerCompleted</category><category>SQL CE 4.0</category><category>SQL Server 2019 Linux</category><category>SQL Server comapact edition</category><category>SSDL</category><category>SSH</category><category>SaveChanges</category><category>Select</category><category>SelectMany</category><category>SequentialGenerator</category><category>Sesmic Desktop</category><category>Should Assrtion Library</category><category>Singapore</category><category>Singapore Public Holidays</category><category>Single</category><category>Skype</category><category>Smart Clients</category><category>Smart client application block</category><category>Sort</category><category>Specification</category><category>Specifications Pattern</category><category>StackOverflow</category><category>State Design Pattern</category><category>System.Windows.Interactivity.dll</category><category>Take</category><category>Template Method Design Pattern</category><category>Tesco</category><category>Test Impact Analysis</category><category>The Art of Agile Development</category><category>ThenBy</category><category>Threading</category><category>TortoiseGit</category><category>TortoiseHg</category><category>Twitter PIN</category><category>UpdateSourceTrigger</category><category>VSCodeTutorial</category><category>VSInstr</category><category>VSPerfCmd</category><category>Vagrant</category><category>Validation</category><category>ValueConverter</category><category>VirtualBox</category><category>VisualStudioCode</category><category>WASB</category><category>WCF trace</category><category>Where</category><category>Windows Live Writer</category><category>Windows Phone 7</category><category>XAuth</category><category>XP</category><category>XPlanner</category><category>Yes</category><category>Yodlee</category><category>aliases</category><category>application configuration</category><category>automappings</category><category>azure container instances</category><category>blue green deployment</category><category>burn down chart</category><category>certified Kubernetes Administrator</category><category>certified kubernetes application developer</category><category>chocolatey</category><category>code cleanup</category><category>code cleanup profiles</category><category>configuration manager</category><category>configuration settings</category><category>dependent assembly</category><category>difference between entity framework and LINQ to SQL</category><category>en</category><category>enterprise library</category><category>extreame programming</category><category>hactoberfest</category><category>iTerm2</category><category>iTunes</category><category>information radiators</category><category>informative workspaces</category><category>krew</category><category>kubeadm</category><category>kubectl plugins</category><category>kubectx</category><category>kubens</category><category>link file</category><category>local LLM</category><category>metrics server</category><category>package management</category><category>probing</category><category>progressive delivery</category><category>refactoring catalog</category><category>rolling update</category><category>serverless</category><category>shared assembly</category><category>smart client offline application block</category><category>software craftsmanship</category><category>sonar cloud</category><category>sprint view</category><category>sre</category><category>switchValue</category><category>tinyurl</category><category>tips and tricks</category><category>trace listener</category><category>trace source</category><category>twelvefactorapps</category><category>unhandled Exception</category><category>unit test worker thread</category><category>zero downtime deployment</category><title>Nilesh Gule&#39;s Technical Blog</title><description>My views about Software Design and Architecture around Microsoft DotNet, Big Data and Cloud Computing. Strong believer of developer community, passionate about Software development and Architecture. Always committed to excellence in technology. </description><link>http://www.handsonarchitect.com/</link><managingEditor>noreply@blogger.com (Nilesh Gule)</managingEditor><generator>Blogger</generator><openSearch:totalResults>238</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-4098610164859891396</guid><pubDate>Sat, 12 Oct 2024 23:18:00 +0000</pubDate><atom:updated>2024-10-12T16:25:54.689-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">GenAI</category><category domain="http://www.blogger.com/atom/ns#">Hugging Face</category><category domain="http://www.blogger.com/atom/ns#">Llama3.1</category><category domain="http://www.blogger.com/atom/ns#">LLM</category><category domain="http://www.blogger.com/atom/ns#">LM Studio</category><category domain="http://www.blogger.com/atom/ns#">local LLM</category><category domain="http://www.blogger.com/atom/ns#">Mistral</category><category domain="http://www.blogger.com/atom/ns#">Offline LLM</category><category domain="http://www.blogger.com/atom/ns#">Phi</category><title>LM Studio: A Comprehensive Guide to Experimenting with Large Language Models Locally </title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div _ngcontent-ng-c663479231=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;h2 data-sourcepos=&quot;1:1-1:123&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Introduction: Running LLMs Locally with LM Studio&lt;/h2&gt;&lt;p data-sourcepos=&quot;5:1-5:292&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;citation-0&quot;&gt;In the realm of artificial intelligence, large language models (LLMs) have emerged as powerful tools capable of generating human-quality text, &lt;/span&gt;&lt;span class=&quot;citation-0 citation-1 citation-end-0&quot;&gt;translating languages, writing&lt;inline-footnote _nghost-ng-c1312417425=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;/inline-footnote&gt;&lt;/span&gt;&lt;span class=&quot;citation-1 citation-end-1&quot;&gt; different kinds of creative content, and answering your questions in an informative way. If you&#39;re looking&lt;inline-footnote _nghost-ng-c1312417425=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;/inline-footnote&gt;&lt;/span&gt; for a desktop-based application to work with and experiment with LLMs, LM Studio is a great option.&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:292&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Running large language models (LLMs) locally is gaining popularity for security reasons and experimentation. This guide complements a YouTube video that demonstrates how to set up LM Studio for this purpose.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/T0Pw0Mf7BqQ&quot; width=&quot;320&quot; youtube-src-id=&quot;T0Pw0Mf7BqQ&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p data-sourcepos=&quot;7:1-7:22&quot;&gt;&lt;strong&gt;What is LM Studio?&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:243&quot;&gt;LM Studio is a cross-platform desktop application that allows you to search for, instantiate, and experiment with various LLMs. It provides a user-friendly interface and offers a range of features to cater to both beginners and advanced users.&lt;/p&gt;&lt;p data-sourcepos=&quot;7:1-7:43&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Getting Started with LM Studio on macOS&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:133&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;The video highlights the ease of installing LM Studio using Homebrew, a popular package manager for macOS. Here&#39;s how to get started:&lt;/p&gt;&lt;ol data-sourcepos=&quot;11:1-14:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 28px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;11:1-12:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;p data-sourcepos=&quot;11:4-11:158&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Install Homebrew (if not already installed):&lt;/span&gt; Follow the instructions in this video (link: &lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c3257409494=&quot;&quot; externallink=&quot;&quot; href=&quot;https://youtu.be/p-YKv6TfcqI&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d82c8811fd07ad39&amp;quot;,&amp;quot;c_56732910191a6a86&amp;quot;,null,&amp;quot;rc_c06d7464db16e0ec&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://youtu.be/p-YKv6TfcqI&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;13:1-14:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;p data-sourcepos=&quot;13:4-13:79&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Install LM Studio:&lt;/span&gt; Open a terminal window and run the following command:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2076323169=&quot;&quot; class=&quot;ng-tns-c2076323169-51 ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;code-block ng-tns-c2076323169-51 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_d82c8811fd07ad39&amp;quot;,&amp;quot;c_56732910191a6a86&amp;quot;,null,&amp;quot;rc_c06d7464db16e0ec&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;code-block-decoration header gmat-subtitle-1 ng-tns-c2076323169-51 ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(240, 244, 249); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 16px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;ng-tns-c2076323169-51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Bash&lt;/span&gt;&lt;/div&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c2076323169-51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(240, 244, 249); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;animated-opacity ng-tns-c2076323169-51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;pre _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;ng-tns-c2076323169-51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin-bottom: 0px; margin-top: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c2076323169=&quot;&quot; class=&quot;code-container ng-tns-c2076323169-51&quot; data-sourcepos=&quot;15:1-17:21&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 18px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 16px 16px 22px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;brew install lmstudio
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;p data-sourcepos=&quot;19:1-19:40&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Exploring LM Studio&#39;s User Interface&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;21:1-21:62&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;LM Studio boasts a user-friendly interface that allows you to:&lt;/p&gt;&lt;ul data-sourcepos=&quot;23:1-26:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;23:1-23:122&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Search for and download LLMs from the Hugging Face repository (link: &lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c3257409494=&quot;&quot; externallink=&quot;&quot; href=&quot;https://huggingface.co/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d82c8811fd07ad39&amp;quot;,&amp;quot;c_56732910191a6a86&amp;quot;,null,&amp;quot;rc_c06d7464db16e0ec&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://huggingface.co/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;)&lt;/li&gt;
&lt;li data-sourcepos=&quot;24:1-24:40&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Load downloaded models for interaction&lt;/li&gt;
&lt;li data-sourcepos=&quot;25:1-26:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Customize the model&#39;s output using various parameters&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;20:1-20:29&quot;&gt;&lt;strong&gt;Key Features of LM Studio&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;27:1-27:39&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;22:1-45:0&quot;&gt;
&lt;li data-sourcepos=&quot;22:1-25:0&quot;&gt;
&lt;p data-sourcepos=&quot;22:4-22:22&quot;&gt;&lt;strong&gt;User Interface:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;23:4-25:0&quot;&gt;
&lt;li data-sourcepos=&quot;23:4-23:99&quot;&gt;LM Studio presents a ChatGPT-like interface, making it easy to interact with different models.&lt;/li&gt;
&lt;li data-sourcepos=&quot;24:4-25:0&quot;&gt;The interface includes options to discover models, load them locally, and interact with them using a chat-based format.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;26:1-29:0&quot;&gt;
&lt;p data-sourcepos=&quot;26:4-26:37&quot;&gt;&lt;strong&gt;Model Discovery and Selection:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;27:4-29:0&quot;&gt;
&lt;li data-sourcepos=&quot;27:4-27:101&quot;&gt;The &quot;Discover&quot; section allows you to explore a variety of LLMs from the Hugging Face repository.&lt;/li&gt;
&lt;li data-sourcepos=&quot;28:4-29:0&quot;&gt;You can search for models based on specific criteria and view their details, including the number of parameters, architecture, and author.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;30:1-33:0&quot;&gt;
&lt;p data-sourcepos=&quot;30:4-30:41&quot;&gt;&lt;strong&gt;Model Loading and Experimentation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;31:4-33:0&quot;&gt;
&lt;li data-sourcepos=&quot;31:4-31:72&quot;&gt;Once you&#39;ve selected a model, you can download and load it locally.&lt;/li&gt;
&lt;li data-sourcepos=&quot;32:4-33:0&quot;&gt;The application provides a convenient way to switch between different models and experiment with their capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;34:1-37:0&quot;&gt;
&lt;p data-sourcepos=&quot;34:4-34:40&quot;&gt;&lt;strong&gt;System Prompts and Customization:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;35:4-37:0&quot;&gt;
&lt;li data-sourcepos=&quot;35:4-35:73&quot;&gt;You can define system prompts to influence the output of the models.&lt;/li&gt;
&lt;li data-sourcepos=&quot;36:4-37:0&quot;&gt;Customize other parameters such as the length of the response, stop strings, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;38:1-41:0&quot;&gt;
&lt;p data-sourcepos=&quot;38:4-38:22&quot;&gt;&lt;strong&gt;Model Runtimes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;39:4-41:0&quot;&gt;
&lt;li data-sourcepos=&quot;39:4-39:88&quot;&gt;LM Studio supports various runtimes that can enhance the performance of the models.&lt;/li&gt;
&lt;li data-sourcepos=&quot;40:4-41:0&quot;&gt;The application provides information on compatible runtimes and allows you to download and install them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;42:1-45:0&quot;&gt;
&lt;p data-sourcepos=&quot;42:4-42:22&quot;&gt;&lt;strong&gt;Developer Mode:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-sourcepos=&quot;43:4-45:0&quot;&gt;
&lt;li data-sourcepos=&quot;43:4-43:84&quot;&gt;For advanced users, the developer mode offers additional features and settings.&lt;/li&gt;
&lt;li data-sourcepos=&quot;44:4-45:0&quot;&gt;Explore options like server configuration, API endpoints, and logging.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-sourcepos=&quot;52:1-52:38&quot;&gt;&lt;strong&gt;Using System Prompts with Mr. Bean&lt;/strong&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;54:1-60:0&quot;&gt;
&lt;li data-sourcepos=&quot;54:1-54:200&quot;&gt;&lt;strong&gt;Defining a System Prompt:&lt;/strong&gt; A system prompt provides instructions or context to the model. In this case, we defined a system prompt indicating that the model should respond as if it were Mr. Bean.&lt;/li&gt;
&lt;li data-sourcepos=&quot;55:1-55:138&quot;&gt;&lt;strong&gt;Experimenting with Different Models:&lt;/strong&gt; We tested the system prompt with each model to see how they interpreted and applied the prompt.&lt;/li&gt;
&lt;li data-sourcepos=&quot;56:1-60:0&quot;&gt;&lt;strong&gt;Observations:&lt;/strong&gt;
&lt;ul data-sourcepos=&quot;57:4-60:0&quot;&gt;
&lt;li data-sourcepos=&quot;57:4-57:130&quot;&gt;&lt;strong&gt;Meta Llama:&lt;/strong&gt; Successfully incorporated the Mr. Bean persona into its responses, providing humorous and unexpected answers.&lt;/li&gt;
&lt;li data-sourcepos=&quot;58:4-58:114&quot;&gt;&lt;strong&gt;Phi:&lt;/strong&gt; While it seemed to understand the prompt, its responses were less humorous and more straightforward.&lt;/li&gt;
&lt;li data-sourcepos=&quot;59:4-60:0&quot;&gt;&lt;strong&gt;Mistral:&lt;/strong&gt; Had limitations in using system prompts, and its responses were not as aligned with the Mr. Bean persona.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;44:1-44:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Additional Resources&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;46:1-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;46:1-46:70&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;LM Studio Homepage:&lt;/span&gt; &lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c3257409494=&quot;&quot; externallink=&quot;&quot; href=&quot;https://lmstudio.ai/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d82c8811fd07ad39&amp;quot;,&amp;quot;c_56732910191a6a86&amp;quot;,null,&amp;quot;rc_c06d7464db16e0ec&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://lmstudio.ai/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;47:1-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;LM Studio System Requirements:&lt;/span&gt; &lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c3257409494=&quot;&quot; externallink=&quot;&quot; href=&quot;https://lmstudio.ai/docs/system-requirements&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d82c8811fd07ad39&amp;quot;,&amp;quot;c_56732910191a6a86&amp;quot;,null,&amp;quot;rc_c06d7464db16e0ec&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://lmstudio.ai/docs/system-requirements&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;49:1-49:28&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;This enhanced guide, along with the linked video by Nilesh Gule, provides a comprehensive introduction to using LM Studio for experimenting with LLMs locally.&lt;/p&gt;&lt;p data-sourcepos=&quot;56:1-56:145&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Bonus:&lt;/span&gt; The video description includes links to additional resources related to LLMs and software installation tools (Chocolatey for Windows).&lt;/p&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2024/10/lm-studio-comprehensive-guide-to.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/T0Pw0Mf7BqQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-540120835007177655</guid><pubDate>Sat, 28 Sep 2024 22:54:00 +0000</pubDate><atom:updated>2024-09-28T15:56:18.085-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BrewPackageManager</category><category domain="http://www.blogger.com/atom/ns#">Coding</category><category domain="http://www.blogger.com/atom/ns#">Developement</category><category domain="http://www.blogger.com/atom/ns#">MacOS</category><category domain="http://www.blogger.com/atom/ns#">VisualStudioCode</category><category domain="http://www.blogger.com/atom/ns#">VSCodeTutorial</category><title>Install Visual Studio Code on Your Mac with Brew: A Step-by-Step Guide</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div _ngcontent-ng-c589579702=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; --first-token-animation-duration: 600ms; animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;h2 data-sourcepos=&quot;1:1-1:74&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Background&lt;/h2&gt;&lt;p data-sourcepos=&quot;3:1-3:72&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;I&#39;ve been using Visual Studio Code (VS Code) for a few years now, and I&#39;ve got to say, it&#39;s been an absolute game-changer for my development workflow. For those of you who are new to VS Code, it&#39;s a lightweight yet powerful code editor that&#39;s perfect for developers of all levels.&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:66&quot;&gt;One of the things I love about VS Code is its flexibility. You can customize it to fit your specific needs with a wide range of extensions. Whether you need a linter, a debugger, or a Git integration, there&#39;s probably an extension for it.&lt;/p&gt;&lt;p data-sourcepos=&quot;3:1-3:72&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;7:1-7:167&quot;&gt;Today, I&#39;m going to walk you through how to install VS Code on your Mac using Homebrew commonly known as Brew, a package manager that makes it super easy to install and manage software on macOS.&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Why Choose VS Code?&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;7:1-7:93&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Before we delve into the installation,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; let&#39;s explore what makes VS Code a developer favourite:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;9:1-9:31&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;9:1-9:31&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Lightweight Powerhouse:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;  Unlike bulky IDEs (Integrated Development Environments),&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; VS Code is a streamlined application that won&#39;t bog down your system.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This is ideal for older machines or developers who prioritize a clean workspace.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;10:1-10:332&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Extension Extravaganza:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; VS Code&#39;s core functionality is supercharged by a vast library of extensions.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; These extensions offer features like code completion (Intellisense),&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; debugging tools,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; language support for various programming languages,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and more.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Essentially,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; you can tailor VS Code to precisely fit your development needs.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;11:1-11:147&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Focus on the Essentials:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; By leveraging extensions,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; VS Code lets you maintain a clutter-free environment.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Install only the extensions you need for your current project,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; eliminating unnecessary features that might bloat a traditional IDE.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;12:1-13:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Git Integration Nirvana:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; VS Code seamlessly integrates with Git,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; a popular version control system.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This allows developers to manage code versions,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; track changes,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and collaborate with others directly within the VS Code interface.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;14:1-14:30&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Getting Started with Homebrew:&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;16:1-16:161&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;This tutorial utilizes Homebrew,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; a fantastic package manager for macOS.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Brew simplifies software installation and management,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; making it a developer&#39;s must-have tool.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;18:1-18:21&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;What We&#39;ll Cover:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;20:1-24:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;20:1-20:97&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Introduction to VS Code:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; We&#39;ll briefly introduce you to VS Code and its developer benefits.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;21:1-21:105&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Installing Brew (if needed):&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Don&#39;t have Brew yet?&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; We&#39;ll guide you through its installation process.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;22:1-22:129&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;VS Code Installation with Brew:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; We&#39;ll demonstrate the straightforward steps to install VS Code using a simple Brew command.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;23:1-24:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Getting Started with VS Code:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; We&#39;ll show you how to open and use VS Code for the first time.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;25:1-25:139&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;By the end of this tutorial,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; you&#39;ll have a fully functional VS Code installation on your Mac,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; ready to elevate your development experience.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;27:1-27:2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Let&#39;s Get Coding!&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;29:1-29:32&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/fLYO6wT_jXY&quot; width=&quot;320&quot; youtube-src-id=&quot;fLYO6wT_jXY&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:24&quot;&gt;&lt;strong&gt;Step 1: Install Brew&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;11:1-11:140&quot;&gt;If you don&#39;t already have Brew installed, you can do so by following the instructions on their website: &lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://brew.sh/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_bd3bac43c1c11ccf&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_ffc9a808963cceb6&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,0,0]]&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://brew.sh/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;13:1-13:27&quot;&gt;&lt;strong&gt;Step 2: Install VS Code&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;15:1-15:80&quot;&gt;Once you have Brew installed, open your terminal and type the following command:&lt;/p&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block ng-tns-c3868770767-324 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_bd3bac43c1c11ccf&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_ffc9a808963cceb6&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,0,0]]&quot;&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block-decoration header gmat-subtitle-1 ng-tns-c3868770767-324 ng-star-inserted&quot;&gt;&lt;span _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-324&quot;&gt;Bash&lt;/span&gt;&lt;/div&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3868770767-324&quot;&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;animated-opacity ng-tns-c3868770767-324&quot;&gt;&lt;pre _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-324&quot;&gt;&lt;code _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-container ng-tns-c3868770767-324&quot; data-sourcepos=&quot;17:1-19:31&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;brew install visual-studio-code
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block-decoration footer gmat-overline ng-tns-c3868770767-324 hide-from-message-actions ng-star-inserted&quot; hide-from-message-actions=&quot;&quot;&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-324&quot;&gt;This will download and install VS Code for you.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;23:1-23:23&quot;&gt;&lt;strong&gt;Step 3: Get Started&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;25:1-25:79&quot;&gt;Once VS Code is installed, you can launch it by typing &lt;code&gt;code&lt;/code&gt; in your terminal.&lt;/p&gt;&lt;p data-sourcepos=&quot;27:1-27:17&quot;&gt;&lt;strong&gt;Why Use Brew?&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;29:1-29:53&quot;&gt;Using Brew to install VS Code has several advantages:&lt;/p&gt;&lt;p data-sourcepos=&quot;29:1-29:32&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _ngcontent-ng-c827941149=&quot;&quot; _nghost-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-324 ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;31:1-34:0&quot;&gt;&lt;li data-sourcepos=&quot;31:1-31:107&quot;&gt;&lt;strong&gt;Easy updates:&lt;/strong&gt; Brew will automatically update VS Code to the latest version when it becomes available.&lt;/li&gt;&lt;li data-sourcepos=&quot;32:1-32:151&quot;&gt;&lt;strong&gt;Dependency management:&lt;/strong&gt; Brew will also handle any dependencies that VS Code might have, so you don&#39;t have to worry about installing them manually.&lt;/li&gt;&lt;li data-sourcepos=&quot;33:1-34:0&quot;&gt;&lt;strong&gt;Consistent installation:&lt;/strong&gt; Using Brew ensures that VS Code is installed in a consistent way across all of your Mac devices.&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;29:1-29:32&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Bonus Tips and Resources:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;33:1-35:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;33:1-33:159&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Visual Appeal:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; VS Code boasts a clean and customizable interface.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; You can tailor it to your preferences for a truly personalized development environment.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;34:1-35:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Thriving Community:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; A robust developer community surrounds VS Code.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This translates to a wealth of online resources,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; tutorials,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and forums for troubleshooting and learning new features.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;36:1-36:36&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Feeling Inspired? Let&#39;s Connect!&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;38:1-38:377&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;If you found this tutorial helpful,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; give it a thumbs up and subscribe to our channel for more tech tutorials!&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Don&#39;t forget to hit the notification bell to stay updated.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Feel free to leave any questions or suggestions in the comments below.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Thanks for watching,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and happy coding with Visual Studio Code on your Mac!&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Until next time,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Code with Passion and Strive for Excellence!&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;40:1-40:14&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-weight: 700;&quot;&gt;Additional Resources:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;46:1-47:13&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;46:1-46:87&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Visual Studio Code - &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://code.visualstudio.com/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,0,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;47:1-47:13&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Homebrew - &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://brew.sh/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://brew.sh/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;49:1-49:28&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Connect with me:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;51:1-56:90&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;51:1-51:103&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Subscribe:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://www.youtube.com/watch?v=Xn6fEc74yBw&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=Xn6fEc74yBw&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;52:1-52:101&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YouTube:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://www.youtube.com/watch?v=Xn6fEc74yBw&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=Xn6fEc74yBw&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;53:1-53:72&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GitHub:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://github.com/NileshGule&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://github.com/NileshGule&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;54:1-54:145&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Twitter:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://twitter.com/nileshgule/status/1433313237873815559?lang=en&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://twitter.com/nileshgule/status/1433313237873815559?lang=en&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;55:1-55:75&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Website:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://handsonarchitects.com/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://handsonarchitects.com/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;56:1-56:90&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;LinkedIn:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://au.linkedin.com/in/nileshgule&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_e28b9130a7f54e87&amp;quot;,&amp;quot;c_dc3e7a8f1c0a46ed&amp;quot;,null,&amp;quot;rc_9134b43689982421&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://au.linkedin.com/in/nileshgule&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2024/09/install-visual-studio-code-on-your-mac.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/fLYO6wT_jXY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-733134197809946540</guid><pubDate>Thu, 26 Sep 2024 21:24:00 +0000</pubDate><atom:updated>2024-09-26T14:26:20.619-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">GenAI</category><category domain="http://www.blogger.com/atom/ns#">Llama3.1</category><category domain="http://www.blogger.com/atom/ns#">Mistral</category><category domain="http://www.blogger.com/atom/ns#">Offline LLM</category><category domain="http://www.blogger.com/atom/ns#">Ollama</category><category domain="http://www.blogger.com/atom/ns#">OpenWebUI</category><category domain="http://www.blogger.com/atom/ns#">Phi3</category><title>Unleashing the Power of LLMs: A User-Friendly Approach with Open Web UI</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div _ngcontent-ng-c589579702=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; --first-token-animation-duration: 600ms; animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVcqaWI2sfW8bZuR_f9RiQMJB3cGA4RLQlNQBEwBlqELL66w_xgfNYgnKC959_i1kyjIk6_E1Cy5hhrRwf6kK6klJEUlR0BqQ-boaw5i9EsR4EYxjLkRh5y0QrkULCo_pzJI3DPKxbxTv4G8rFB4sUUmIfnGt81_CG1UJZXEKrEvmFuV16qLk-/s1280/Setup%20OpenWebUI%20using%20Docker.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVcqaWI2sfW8bZuR_f9RiQMJB3cGA4RLQlNQBEwBlqELL66w_xgfNYgnKC959_i1kyjIk6_E1Cy5hhrRwf6kK6klJEUlR0BqQ-boaw5i9EsR4EYxjLkRh5y0QrkULCo_pzJI3DPKxbxTv4G8rFB4sUUmIfnGt81_CG1UJZXEKrEvmFuV16qLk-/w320-h180/Setup%20OpenWebUI%20using%20Docker.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 data-sourcepos=&quot;1:1-1:78&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 data-sourcepos=&quot;1:1-1:78&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Background&lt;/h2&gt;&lt;p data-sourcepos=&quot;3:1-3:315&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Tired of the complexities of using terminal commands to interact with large language models (LLMs)?&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; There&#39;s a simpler,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; more intuitive way.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This post dives into the power of Open Web UI,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; a user-friendly interface for interacting with offline LLMs running on your computer,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; inspired by the familiar ChatGPT interface.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;5:1-5:49&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;The Magic of Offline LLMs and Open Web UI&lt;/span&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;7:1-7:410&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Imagine interacting with multiple LLMs like Llama 3.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Mistral,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and Phi3 simultaneously,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; all running offline on your machine!&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;  The &lt;a href=&quot;https://youtu.be/cnRz2wL8Tpo&quot;&gt;YouTube video&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;showcases how to achieve this with &lt;b&gt;Ollama&lt;/b&gt;,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; a platform for running LLMs locally.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;b&gt;Open Web UI&lt;/b&gt; takes this a step further by providing a user-friendly interface on top of Ollama,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; all managed through Docker.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;9:1-9:47&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Getting Started: A One-Command Solution&lt;/span&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;11:1-11:87&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;The YouTube video demonstrates a convenient one-line Docker command to run Open Web UI:&lt;/span&gt;&lt;/p&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _ngcontent-ng-c827941149=&quot;&quot; _nghost-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-281 ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block ng-tns-c3868770767-281 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_33c8b61ec2cfb545&amp;quot;,&amp;quot;c_9dba078c3794439d&amp;quot;,null,&amp;quot;rc_088525307601a66c&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,0,0]]&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3868770767-281&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(240, 244, 249); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;animated-opacity ng-tns-c3868770767-281&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;pre _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;ng-tns-c3868770767-281&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin-bottom: 0px; margin-top: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c3868770767=&quot;&quot; class=&quot;code-container ng-tns-c3868770767-281&quot; data-sourcepos=&quot;13:1-21:33&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 18px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 16px 16px 22px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;docker run --detach \
--publish 3000:8080 \
--add-host=host.docker.internal:host-gateway \
--volume open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/openwebui:main
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;p data-sourcepos=&quot;23:1-23:117&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;This command downloads the Open Web UI image,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; sets it up with specific configurations,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and runs it in the background.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;40:1-40:54&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Dive Deeper: Resources for Further Exploration&lt;/span&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;42:1-42:72&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Nilesh Gule&#39;s YouTube channel offers a wealth of resources for exploring LLMs and Open Web UI:&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;23:1-23:117&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;44:1-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;44:1-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Open Web UI and k8sGPT Tutorials:&lt;/span&gt;&lt;ul data-sourcepos=&quot;45:5-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;47:5-48:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a href=&quot;https://youtu.be/OBsiku52Cjg&quot;&gt;How to use k8sGPT&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;46:5-46:108&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Setting up Llama 3.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1 as the &lt;a href=&quot;https://youtu.be/Xbh1E72Jzso&quot;&gt;backend provider for k8sGPT&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;45:5-45:97&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;k8sGPT and &lt;a href=&quot;https://youtu.be/1Hw_Mnttzzk&quot;&gt;Hindi translation using Llama 3.&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a href=&quot;https://youtu.be/1Hw_Mnttzzk&quot;&gt;1&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-sourcepos=&quot;29:1-29:44&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Unlocking the Power of Multiple LLMs&lt;/span&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;31:1-31:235&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Once you launch Open Web UI,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; you can seamlessly switch between different offline LLMs,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; including Llama 3.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Phi3,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and Mistral.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This allows you to experiment with each model&#39;s unique capabilities and find the perfect fit for your needs.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;33:1-33:65&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Shaping the LLM&#39;s Response: System Prompts and Parameters&lt;/span&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;35:1-35:4&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Open Web UI goes beyond just providing a chat interface.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; You can also influence the LLM&#39;s output using system prompts and various parameters.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Here&#39;s how:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;37:1-39:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;37:1-37:308&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;System Prompts:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;  The video demonstrates how to add a &quot;character&quot; to your prompts.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; For instance,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; you can use Albert Einstein as a system prompt to query about Melbourne weather,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; receiving a response that reflects his scientific perspective.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; This injects personality and context into the LLM&#39;s responses.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;38:1-39:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Parameters:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Fine-tune the LLM&#39;s output with settings like temperature,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; top_p,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and frequency_penalty.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; These settings control aspects like creativity,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; randomness,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and repetitiveness in the generated text.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-sourcepos=&quot;40:1-40:54&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 44px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Additional Resources:&lt;/h3&gt;&lt;ul data-sourcepos=&quot;51:1-53:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;51:1-51:71&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;OpenWeb UI homepage:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://openwebui.com/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_33c8b61ec2cfb545&amp;quot;,&amp;quot;c_9dba078c3794439d&amp;quot;,null,&amp;quot;rc_088525307601a66c&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://openwebui.com/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;52:1-53:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;OpenWeb UI documentation:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://docs.openwebui.com/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_33c8b61ec2cfb545&amp;quot;,&amp;quot;c_9dba078c3794439d&amp;quot;,null,&amp;quot;rc_088525307601a66c&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://docs.openwebui.com/&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;54:1-54:29&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Connect with Nilesh Gule:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;56:1-58:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;56:1-56:123&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Subscribe to his &lt;a href=&quot;https://www.youtube.com/channel/UCJOvQz55Ly-Rkr_ldE8pMEQ&quot;&gt;YouTube channel&lt;/a&gt;&lt;/span&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;57:1-58:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Follow him on social media and his website for more insights on LLMs:&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; The links are provided in the description section of this blog post.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;59:1-59:267&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;By combining the power of offline LLMs with the user-friendly interface of Open Web UI,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; you can unlock a world of creative possibilities.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Explore different models,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; experiment with prompts,&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; and customize the output to achieve your desired results.&lt;/span&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Happy experimenting!&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2024/09/unleashing-power-of-llms-user-friendly.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVcqaWI2sfW8bZuR_f9RiQMJB3cGA4RLQlNQBEwBlqELL66w_xgfNYgnKC959_i1kyjIk6_E1Cy5hhrRwf6kK6klJEUlR0BqQ-boaw5i9EsR4EYxjLkRh5y0QrkULCo_pzJI3DPKxbxTv4G8rFB4sUUmIfnGt81_CG1UJZXEKrEvmFuV16qLk-/s72-w320-h180-c/Setup%20OpenWebUI%20using%20Docker.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-5012974190544717253</guid><pubDate>Fri, 20 Sep 2024 03:00:00 +0000</pubDate><atom:updated>2024-09-19T20:04:20.738-07:00</atom:updated><title>How to store Terraform State in Azure Storage Account</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div _ngcontent-ng-c589579702=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; --first-token-animation-duration: 600ms; animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;h2 data-sourcepos=&quot;1:1-1:51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 24px; margin: 0px 0px 16px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;p data-sourcepos=&quot;3:1-3:138&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;This blog post, based on a YouTube video tutorial, explores how to store Terraform state in a remote Azure storage account.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/Cxi-ADY1h3U&quot; width=&quot;320&quot; youtube-src-id=&quot;Cxi-ADY1h3U&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p data-sourcepos=&quot;3:1-3:138&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:39&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Why Store Terraform State Remotely?&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;7:1-10:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;7:1-7:54&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Local storage creates issues when working in a team.&lt;/li&gt;
&lt;li data-sourcepos=&quot;8:1-8:71&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Two team members modifying the same state file can lead to conflicts.&lt;/li&gt;
&lt;li data-sourcepos=&quot;9:1-10:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Local storage deletion can cause problems.&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;11:1-11:31&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Benefits of Remote Storage:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;13:1-15:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;13:1-13:54&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Centralized location accessible by all team members.&lt;/li&gt;
&lt;li data-sourcepos=&quot;14:1-15:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Improved collaboration and state management.&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;16:1-16:49&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;How to Store Terraform State in Azure Storage&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;18:1-37:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 28px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;18:1-21:25&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Prerequisites:&lt;/span&gt;
&lt;ul data-sourcepos=&quot;19:5-21:25&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;19:5-19:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Azure subscription&lt;/li&gt;
&lt;li data-sourcepos=&quot;20:5-20:27&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Azure storage account&lt;/li&gt;
&lt;li data-sourcepos=&quot;21:5-21:25&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Terraform installed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;22:1-28:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Configure Backend with Terraform:&lt;/span&gt;
&lt;ul data-sourcepos=&quot;23:5-28:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;23:5-23:33&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Create a &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 20px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;backend.tf&lt;/code&gt; file.&lt;/li&gt;
&lt;li data-sourcepos=&quot;24:5-28:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Specify the storage account details:
&lt;ul data-sourcepos=&quot;25:9-28:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;25:9-25:29&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Resource group name&lt;/li&gt;
&lt;li data-sourcepos=&quot;26:9-26:30&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Storage account name&lt;/li&gt;
&lt;li data-sourcepos=&quot;27:9-27:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Container name&lt;/li&gt;
&lt;li data-sourcepos=&quot;28:9-28:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Key (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;29:1-31:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Set Access Key as Environment Variable:&lt;/span&gt;
&lt;ul data-sourcepos=&quot;30:5-31:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;30:5-30:63&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Use Azure CLI to retrieve the storage account access key.&lt;/li&gt;
&lt;li data-sourcepos=&quot;31:5-31:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Set the key as an environment variable for Terraform to access the storage account.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;32:1-33:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Initialize Terraform:&lt;/span&gt;
&lt;ul data-sourcepos=&quot;33:5-33:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;33:5-33:89&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Run &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 20px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terraform init&lt;/code&gt; to initialize Terraform with the remote backend configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;34:1-37:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Manage Your Resources:&lt;/span&gt;
&lt;ul data-sourcepos=&quot;35:5-37:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;35:5-35:90&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Use &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 20px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terraform plan&lt;/code&gt; and &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 20px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terraform apply&lt;/code&gt; to plan and apply infrastructure changes.&lt;/li&gt;
&lt;li data-sourcepos=&quot;36:5-37:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;The state file is created and stored in the Azure storage container.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p data-sourcepos=&quot;38:1-38:29&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Verifying Remote Storage:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;40:1-42:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;40:1-40:45&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Access the Azure storage account container.&lt;/li&gt;
&lt;li data-sourcepos=&quot;41:1-42:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;The container should contain a &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(68, 71, 70); clear: none; clip: auto; color: #444746; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Mono&amp;quot;, monospace; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 20px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(68, 71, 70) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terraform.tfstate&lt;/code&gt; file representing the Terraform state.&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;43:1-43:15&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Key Points:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;45:1-47:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;45:1-45:55&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Remote storage ensures state locking and consistency.&lt;/li&gt;
&lt;li data-sourcepos=&quot;46:1-47:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Consider using Azure Key Vault for secure storage and access control of the storage account key.&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;48:1-48:19&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Call to Action:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;50:1-52:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; text-align: left; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;ul&gt;&lt;li data-sourcepos=&quot;50:1-50:141&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Subscribe to Nilesh Gule&#39;s channel (&lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a href=&quot;https://youtube.com/@nilesh-gule&quot;&gt;&lt;span style=&quot;color: #0b57d0;&quot;&gt;&lt;span style=&quot;background-position: 0% 0%; border-color: rgb(11, 87, 208); border-image: initial; cursor: pointer; font-stretch: normal; mask: none; offset-rotate: auto; outline-color: rgb(11, 87, 208); transition-property: all;&quot;&gt;https://youtube.com/@nilesh&lt;/span&gt;&lt;/span&gt;-gule&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;) for more Terraform tutorials.&lt;/li&gt;&lt;/ul&gt;
&lt;li data-sourcepos=&quot;51:1-52:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Leave comments suggesting future video topics.&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;53:1-53:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 16px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Additional Resources&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;79:5-83:94&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;55:1-55:99&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Terraform: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://developer.hashicorp.com/terraform&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://developer.hashicorp.com/terraform&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;56:1-56:186&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Terraform official provider for Azure: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://registry.terraform.io/providers/hashicorp/azurerm/latest&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;citation-0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;https://registry.terraform.io/providers/hashicorp/azurerm/latest&lt;/span&gt;&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;span class=&quot;citation-0 citation-end-0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;inline-footnote _nghost-ng-c1575996994=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;/inline-footnote&gt;&lt;/span&gt;&lt;recitation-inline _nghost-ng-c1440533697=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c3383906580=&quot;&quot; class=&quot;button-container ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; &amp;nbsp; &lt;!----&gt;&lt;/span&gt;&lt;!----&gt;&lt;/recitation-inline&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;57:1-57:303&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Terraform documentation for Azure Resource Group Module: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;citation-1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;https://registry.terraform.io/providers/hashicorp/&lt;/span&gt;&lt;span class=&quot;citation-1 citation-2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;azurerm/latest/docs/resources/resource_group&lt;/span&gt;&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;span class=&quot;citation-1 citation-2 citation-end-2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;inline-footnote _nghost-ng-c1575996994=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;/inline-footnote&gt;&lt;/span&gt;&lt;span class=&quot;citation-1 citation-end-1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;inline-footnote _nghost-ng-c1575996994=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;/inline-footnote&gt;&lt;/span&gt;&amp;nbsp;&lt;recitation-inline _nghost-ng-c1440533697=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c3383906580=&quot;&quot; class=&quot;button-container ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;/span&gt;&lt;!----&gt;&lt;/recitation-inline&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;58:1-58:146&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YouTube video on how to install Terraform using Homebrew: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://m.youtube.com/watch?v=oURFbTZLMl0&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://m.youtube.com/watch?v=oURFbTZLMl0&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;59:1-59:164&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YouTube video on how to provision Azure Resource Group using Terraform: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://www.youtube.com/watch?v=wsibSX00ylM&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=wsibSX00ylM&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;60:1-60:152&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YouTube video on how to cross reference resources in Terraform: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://m.youtube.com/watch?v=Fs7Bm0cqMsA&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://m.youtube.com/watch?v=Fs7Bm0cqMsA&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;61:1-61:147&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YouTube video on how to manage variables in Terraform: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://www.youtube.com/watch?v=oArutYYvQ_Y&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=oArutYYvQ_Y&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;62:1-62:105&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Github repository with the source code: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://github.com/NileshGule&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://github.com/NileshGule&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;63:1-64:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Terraform videos playlist: &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://m.youtube.com/playlist?list=OLAK5uy_lSeauTc6VKEW9XNFLAHaYIC7U01rWJ2QQ&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_ce3ffa0eeba7d0c7&amp;quot;,&amp;quot;c_2f988b7412e15962&amp;quot;,null,&amp;quot;rc_bdbbeb4bc6451b23&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,0,null,null,1,0]]&quot; rel=&quot;noopener&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(11, 87, 208); clear: none; clip: auto; color: #0b57d0; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(11, 87, 208) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; target=&quot;_blank&quot;&gt;https://m.youtube.com/playlist?list=OLAK5uy_lSeauTc6VKEW9XNFLAHaYIC7U01rWJ2Q&lt;/a&gt;&lt;/link-block&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;83:5-83:94&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;br /&gt;&lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul data-sourcepos=&quot;77:1-83:94&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 4px 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px 0px 0px 18px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li data-sourcepos=&quot;78:1-83:94&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; isolation: auto; line-height: 28px; margin: 0px; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2024/09/how-to-storing-terraform-state-in-azure.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Cxi-ADY1h3U/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-6789007051432395069</guid><pubDate>Thu, 19 Sep 2024 21:49:00 +0000</pubDate><atom:updated>2024-09-19T14:49:47.884-07:00</atom:updated><title> Run Generative AI models on your Laptop with Ollama</title><description>&lt;p&gt;Since OpenAI released ChatGPT, there&#39;s been a surge of interest in generative AI (GenAI). These powerful models can write different kinds of creative text formats, translate languages, write different kinds of creative content, and answer your questions in an informative way. However using them often requires cloud access, which can raise security or privacy concerns.&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:121&quot;&gt;This blog post explores how to run GenAI models locally on your machine using Ollama, an open-source platform from Meta.&lt;/p&gt;&lt;h3 data-sourcepos=&quot;7:1-7:19&quot;&gt;What is Ollama?&lt;/h3&gt;&lt;p data-sourcepos=&quot;9:1-9:186&quot;&gt;Ollama is a user-friendly platform that allows you to download and run various large language models (LLMs) on your workstation. These models include Llama 3.1, Phi, Minstrel, and Gemma.&lt;/p&gt;&lt;h3 data-sourcepos=&quot;11:1-11:34&quot;&gt;Why Run GenAI Models Locally?&lt;/h3&gt;&lt;p data-sourcepos=&quot;13:1-13:73&quot;&gt;There are several reasons why you might want to run GenAI models locally:&lt;/p&gt;&lt;ul data-sourcepos=&quot;15:1-19:0&quot;&gt;
&lt;li data-sourcepos=&quot;15:1-15:102&quot;&gt;&lt;strong&gt;Security:&lt;/strong&gt; If you&#39;re working with sensitive data, you might prefer not to upload it to the cloud.&lt;/li&gt;
&lt;li data-sourcepos=&quot;16:1-16:86&quot;&gt;&lt;strong&gt;Privacy:&lt;/strong&gt; You might be concerned about your data being accessed by third parties.&lt;/li&gt;
&lt;li data-sourcepos=&quot;17:1-17:94&quot;&gt;&lt;strong&gt;Cost:&lt;/strong&gt; Running models locally can be more cost-effective than using cloud-based services.&lt;/li&gt;
&lt;li data-sourcepos=&quot;18:1-19:0&quot;&gt;&lt;strong&gt;Offline Use:&lt;/strong&gt; You can use GenAI models even without an internet connection.&lt;/li&gt;
&lt;/ul&gt;&lt;h3 data-sourcepos=&quot;20:1-20:32&quot;&gt;Getting Started with Ollama&lt;/h3&gt;&lt;p data-sourcepos=&quot;22:1-22:55&quot;&gt;Here&#39;s a step-by-step guide to get started with Ollama:&lt;/p&gt;&lt;ol data-sourcepos=&quot;24:1-32:0&quot;&gt;
&lt;li data-sourcepos=&quot;24:1-24:94&quot;&gt;&lt;strong&gt;Head over to Ollama&#39;s website:&lt;/strong&gt; &lt;response-element _nghost-ng-c827941149=&quot;&quot; class=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;link-block _ngcontent-ng-c827941149=&quot;&quot; class=&quot;ng-star-inserted&quot;&gt;&lt;a _nghost-ng-c2187486380=&quot;&quot; externallink=&quot;&quot; href=&quot;https://ollama.com/library&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_2115b276e0fe06e9&amp;quot;,&amp;quot;c_2537f8413f4a5e82&amp;quot;,null,&amp;quot;rc_fe4fb5ddcca6b233&amp;quot;,null,null,&amp;quot;en&amp;quot;,null,null,null,null,1,0]]&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://ollama.com/library&lt;/a&gt;&lt;/link-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;25:1-25:167&quot;&gt;&lt;strong&gt;Choose your model:&lt;/strong&gt; The website showcases various models with details like parameters and template used for invoking them. Select a model that suits your needs.&lt;/li&gt;
&lt;li data-sourcepos=&quot;26:1-26:118&quot;&gt;&lt;strong&gt;Check resource requirements:&lt;/strong&gt;  Make sure your computer meets the minimum RAM requirements for the chosen model.&lt;/li&gt;
&lt;li data-sourcepos=&quot;27:1-27:135&quot;&gt;&lt;strong&gt;Install Ollama:&lt;/strong&gt; You can install Ollama using either the command line (package manager) or the downloadable user interface (GUI).&lt;/li&gt;
&lt;li data-sourcepos=&quot;28:1-28:101&quot;&gt;&lt;strong&gt;Download the model:&lt;/strong&gt; Ollama can download the model for you if it&#39;s not already on your machine.&lt;/li&gt;
&lt;li data-sourcepos=&quot;29:1-29:101&quot;&gt;&lt;strong&gt;Start the Ollama service:&lt;/strong&gt; Use the &lt;code&gt;Ollama serve&lt;/code&gt; command to run the service in the background.&lt;/li&gt;
&lt;li data-sourcepos=&quot;30:1-30:108&quot;&gt;&lt;strong&gt;Run the model:&lt;/strong&gt; Use the &lt;code&gt;Ollama run&lt;/code&gt; command followed by the model name (e.g., &lt;code&gt;Ollama run Llama3.1&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;31:1-32:0&quot;&gt;&lt;strong&gt;Interact with the model:&lt;/strong&gt; Once the model is running, you can start feeding it prompts and receive its responses.&lt;/li&gt;
&lt;/ol&gt;&lt;h3 data-sourcepos=&quot;33:1-33:44&quot;&gt;Following Along with the Video Tutorial&lt;/h3&gt;&lt;p data-sourcepos=&quot;35:1-35:187&quot;&gt;It&#39;s helpful to watch the video alongside this blog post for a more visual understanding.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/BccglpXG6Po&quot; width=&quot;320&quot; youtube-src-id=&quot;BccglpXG6Po&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;37:1-37:18&quot;&gt;Key Takeaways&lt;/h3&gt;&lt;p data-sourcepos=&quot;39:1-39:252&quot;&gt;Ollama offers a convenient way to experiment with GenAI models on your local machine. By following these steps and considering the resource requirements, you can unlock the potential of generative AI for your projects without relying on cloud services.&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2024/09/run-generative-ai-models-on-your-laptop.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/BccglpXG6Po/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-2565408000698976089</guid><pubDate>Mon, 02 Jan 2023 05:27:00 +0000</pubDate><atom:updated>2023-01-01T21:27:12.153-08:00</atom:updated><title>Dependabot - Update Project dependencies automatically</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;Background&lt;/h3&gt;&lt;p&gt;Maintaining project dependencies can be a difficult task, especially for larger projects with many dependencies. It is important to keep track of which dependencies are being used and which versions are compatible with the project. However, this can become a challenge as new versions of dependencies are released and there may be conflicts with existing code. Additionally, it can be time-consuming to resolve these conflicts and update the dependencies, which can impact the overall development timeline of the project. It is important to have a clear strategy in place for managing dependencies to avoid these issues. In this post, we will see how to use &lt;b&gt;&lt;a href=&quot;https://github.blog/2020-06-01-keep-all-your-packages-up-to-date-with-dependabot/&quot;&gt;Dependabot &lt;/a&gt;&lt;/b&gt;to automatically update dependencies for project hosted in a GitHub repository.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;What is Dependabot?&lt;/h3&gt;Dependabot is a tool that automatically detects and fixes vulnerabilities in a project&#39;s dependencies. It works by regularly checking for updates to the dependencies in a project and submitting pull requests with the updated dependencies when they are available. This can help reduce the risk of security vulnerabilities in a project and save developers time by automating the process of updating dependencies. Dependabot supports a variety of languages and package managers, including npm, pip, Maven, and Gradle.&lt;p&gt;&lt;/p&gt;&lt;p&gt;It does this by regularly checking for new versions of dependencies and alerting developers to any vulnerabilities. Dependabot supports two modes of operation: security updates and version updates.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Security updates mode&lt;/b&gt;: In this mode, Dependabot monitors dependencies for known vulnerabilities and submits pull requests to update to a secure version when a vulnerability is detected. This helps developers ensure that their project is using secure dependencies and reduces the risk of security breaches.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Version updates mode&lt;/b&gt;: In this mode, Dependabot checks for new versions of dependencies and submits pull requests to update to the latest version when it is available. This can help developers take advantage of bug fixes and performance improvements in the latest versions of dependencies.&lt;/p&gt;&lt;p&gt;By using Dependabot, developers can automate the process of keeping their dependencies up-to-date and secure, saving time and effort.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Enable Dependabot for GitHub repository&lt;/h3&gt;In order to configure Dependabot for a GitHub repository, go to the settings for the Github repository which needs to be integrated with Dependabot. Under the code security and analysis section, there are multiple configurations related to Dependabot as shown below&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicUMa_uhC1VY9dzWmtnqT4JT0xsjos2R0lXgMF58enaJ8DJ4mXqRWDoSJWA5Yo0N8NkuSf06H944iPvf4YpgdKMcYR66H3-OwzeTr2UnOiVyfjmzETm6i3uu7Da_5yWEriDoj2iGGt9EXbjC6tvX6eMP5t7uOhTr1v_X72CYxVwXcoiHS6aQ/s1802/dependabot-configuration.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;938&quot; data-original-width=&quot;1802&quot; height=&quot;334&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicUMa_uhC1VY9dzWmtnqT4JT0xsjos2R0lXgMF58enaJ8DJ4mXqRWDoSJWA5Yo0N8NkuSf06H944iPvf4YpgdKMcYR66H3-OwzeTr2UnOiVyfjmzETm6i3uu7Da_5yWEriDoj2iGGt9EXbjC6tvX6eMP5t7uOhTr1v_X72CYxVwXcoiHS6aQ/w640-h334/dependabot-configuration.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;We can configure alerts, Security Updates and Version Updates separately.&amp;nbsp;&lt;p&gt;Alternatively, you can also configure Dependabot by adding a .github/dependabot.yml file to your repository and specifying the desired configuration in the file. For more information on this method of configuration, see the &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file&quot;&gt;Dependabot documentation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Configure Package ecosystem&lt;/h3&gt;In the dependabot.yml file we need to configure the package ecosystem. This helps Dependabot to monitor the packages for any updates to the dependencies. Within the same project it is possible that there are more than one package manager used to manage dependencies like Node Package Manager (NPM) for Node package and Maven or Gradle for Java packages used for backend processing.&lt;p&gt;&lt;/p&gt;&lt;p&gt;In the file, specify the package ecosystems that you want Dependabot to monitor under the package_ecosystems key. By configuring the package ecosystem setting for Dependabot, you can specify which package managers and package ecosystems Dependabot should monitor for updates. This can help ensure that Dependabot is monitoring the dependencies that are relevant to your project.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;YouTube video demonstrating Dependabot usage&lt;/h3&gt;&lt;p&gt;Check out this YouTube video which explains in detail how to configure the Dependabot for a GitHub repository.&lt;br /&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/wKIAo0hRu1Q&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Dependabot Pull Request for updated dependencies&lt;/h3&gt;&lt;p&gt;When Dependabot detects that an update is available for a dependency in your project, it will create a pull request with the updated dependency. This pull request will contain a summary of the changes being proposed, including the current and new versions of the dependency, and a list of the files that will be modified.&lt;/p&gt;&lt;p&gt;It is up to the repository maintainer to review the pull request and decide whether to merge it. If the pull request is accepted, the updated dependency will be included in the project. If there are any conflicts with existing code, Dependabot will attempt to resolve them automatically, but in some cases, manual resolution may be required.&lt;/p&gt;&lt;p&gt;Creating pull requests for updated dependencies helps ensure that projects are using the most up-to-date and secure versions of their dependencies. It also allows for an easy way for repository maintainers to review and control changes to the dependencies in their project.&lt;/p&gt;&lt;p&gt;Below screenshots show different details reported in the Pull Request created by Dependabot for every dependency that is outdated in the project.&lt;/p&gt;&lt;p&gt;Summary of changes showing Release notes, Changelog, Commits, Compatibility issues and also commands and options.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTiVmAz6gaCwqrhRFqAv7TFmQertw-_DiL5nX3w9HqwzwmeEnAv1OXxei657FTcTWMxWAsx74rs1SQLqpJ0iUoaiBGUBLIdWG9z3X09Rk5f5mHDoU5ZaCL-ArFfRMXWxp86825N8crYM6iLayVVn5Gup_hKX9905o6TcBpAx2aIx7gvTy2-Q/s1424/dependabot-summary.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;882&quot; data-original-width=&quot;1424&quot; height=&quot;396&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTiVmAz6gaCwqrhRFqAv7TFmQertw-_DiL5nX3w9HqwzwmeEnAv1OXxei657FTcTWMxWAsx74rs1SQLqpJ0iUoaiBGUBLIdWG9z3X09Rk5f5mHDoU5ZaCL-ArFfRMXWxp86825N8crYM6iLayVVn5Gup_hKX9905o6TcBpAx2aIx7gvTy2-Q/w640-h396/dependabot-summary.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Release notes&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGkMmsVKUFQih00wCJKk-uigpt5mHeTodGz0eX2GE6BoQR-NjoN5ZHZNsbJo5oCvpKtfyZZoYlURIA6OTHbY0-Kq-rzS0xe-ib-nE1we8NZ_yFoddyuhj_sJTjfA4tJiz4cQumyFpED1Cz0_xcvgxnXGZI1LvkxAvUjJjCKwDyig4pEtr81Q/s1404/dependabot-release-notes.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;986&quot; data-original-width=&quot;1404&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGkMmsVKUFQih00wCJKk-uigpt5mHeTodGz0eX2GE6BoQR-NjoN5ZHZNsbJo5oCvpKtfyZZoYlURIA6OTHbY0-Kq-rzS0xe-ib-nE1we8NZ_yFoddyuhj_sJTjfA4tJiz4cQumyFpED1Cz0_xcvgxnXGZI1LvkxAvUjJjCKwDyig4pEtr81Q/w640-h450/dependabot-release-notes.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Changelog&lt;div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwK2kw_h53Qrd4jsFoFPGk0GdPoHB4tNGb-6tcCcFBYBlbNOCxDnXR8aIAH-UHyoVC3ZszsWrZsVjFeuI5Lv24XH9Yz5J-SinYDAeH_j__DvLf5a0OB-FLUE4w5W888W8yGScd4FgJlGYi5dpmgMmh2dPaJsYzJ3fihxZLAQEJQT85OabcQw/s1408/dependabot-changelog.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1052&quot; data-original-width=&quot;1408&quot; height=&quot;478&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwK2kw_h53Qrd4jsFoFPGk0GdPoHB4tNGb-6tcCcFBYBlbNOCxDnXR8aIAH-UHyoVC3ZszsWrZsVjFeuI5Lv24XH9Yz5J-SinYDAeH_j__DvLf5a0OB-FLUE4w5W888W8yGScd4FgJlGYi5dpmgMmh2dPaJsYzJ3fihxZLAQEJQT85OabcQw/w640-h478/dependabot-changelog.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Commits&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiic4GboNZ9FqeDa5VOZBxd0I7EX5iwB1cIXDFy7e7yOCZogpLieAII0MQzunhIyUjVTNo8TbBNq1Vx082jh4HP8WgSRxs8QI_zNbfwBgTAiHmyPJVkgHRdMhHjBcNtbhMMXzpkCjnYGTNauPQjyXU3MbKi0z7NlwxRkRsu7KVH8X1pBnq33g/s1410/dependabot-commits.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;978&quot; data-original-width=&quot;1410&quot; height=&quot;444&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiic4GboNZ9FqeDa5VOZBxd0I7EX5iwB1cIXDFy7e7yOCZogpLieAII0MQzunhIyUjVTNo8TbBNq1Vx082jh4HP8WgSRxs8QI_zNbfwBgTAiHmyPJVkgHRdMhHjBcNtbhMMXzpkCjnYGTNauPQjyXU3MbKi0z7NlwxRkRsu7KVH8X1pBnq33g/w640-h444/dependabot-commits.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Commands and Options&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXi_uzaWSt-ic6AqUfIIFsSrj9ng4B-ejMnTdvc3K6RMcEO6wHAKKOPFDyxc6pYA7LtagYM7jNOvE0yixPb96HDWTOdfnbHG7PH2UQcbslXdltuUFz3gBhPo-jA0QIBom_3mEP6Cp24WYS0OfHcvzfLbd89R66D30eKN_LVHQKZwJfoYayNA/s1362/dependabot-commands.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;940&quot; data-original-width=&quot;1362&quot; height=&quot;442&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXi_uzaWSt-ic6AqUfIIFsSrj9ng4B-ejMnTdvc3K6RMcEO6wHAKKOPFDyxc6pYA7LtagYM7jNOvE0yixPb96HDWTOdfnbHG7PH2UQcbslXdltuUFz3gBhPo-jA0QIBom_3mEP6Cp24WYS0OfHcvzfLbd89R66D30eKN_LVHQKZwJfoYayNA/w640-h442/dependabot-commands.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Advantages of using Dependabot to automatically update dependencies&lt;/h3&gt;&lt;div&gt;&lt;div&gt;There are several advantages to using Dependabot to automatically update dependencies:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Improved security&lt;/b&gt;: By regularly updating dependencies, Dependabot helps reduce the risk of security vulnerabilities in a project. It monitors dependencies for known vulnerabilities and submits pull requests to update to a secure version when a vulnerability is detected.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Improved stability&lt;/b&gt;: New versions of dependencies can often include bug fixes and performance improvements. By using Dependabot to update dependencies, developers can ensure that their project is using the most stable versions available.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Improved efficiency&lt;/b&gt;: Updating dependencies can be a time-consuming task, especially for larger projects with many dependencies. By automating the process with Dependabot, developers can save time and effort and focus on other tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Improved control&lt;/b&gt;: Dependabot creates pull requests for updated dependencies, allowing repository maintainers to review and control changes to the dependencies in their project. This can help ensure that updates are thoroughly tested and do not cause conflicts with existing code.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;Overall, Dependabot is a useful tool for developers to keep their project dependencies up-to-date and secure. By automating the process of updating dependencies, Dependabot helps developers improve the security, stability, efficiency, and control of their projects. It is a valuable resource for repository maintainers to ensure that their project is using the most recent and secure versions of dependencies and to easily review and control changes to those dependencies. As such, it is a tool that developers should consider using in their projects.&lt;br /&gt;&lt;br /&gt;Until next time, &lt;b&gt;Code with Passion and Strive for Excellence&lt;/b&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2023/01/dependabot-update-project-dependencies.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicUMa_uhC1VY9dzWmtnqT4JT0xsjos2R0lXgMF58enaJ8DJ4mXqRWDoSJWA5Yo0N8NkuSf06H944iPvf4YpgdKMcYR66H3-OwzeTr2UnOiVyfjmzETm6i3uu7Da_5yWEriDoj2iGGt9EXbjC6tvX6eMP5t7uOhTr1v_X72CYxVwXcoiHS6aQ/s72-w640-h334-c/dependabot-configuration.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-968696119582238881</guid><pubDate>Mon, 02 Jan 2023 04:27:00 +0000</pubDate><atom:updated>2023-01-01T20:27:08.107-08:00</atom:updated><title>Scan OpenSource libraries free with Mend</title><description>&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Background&lt;/h3&gt;Using free and open-source libraries can foster innovation in a number of ways. For one, it allows developers to easily incorporate pre-existing code into their projects, saving them time and effort that they can then redirect towards developing new features and functionality. Additionally, the open-source model promotes collaboration and sharing, which can lead to the creation of more powerful and sophisticated libraries as developers from around the world contribute their skills and knowledge. Finally, open-source libraries often have large and active communities of users and developers, which can provide valuable support, inspiration, and feedback for those looking to push the boundaries of innovation.&lt;p&gt;&lt;/p&gt;&lt;p&gt;There are a few potential risks to be aware of when using open source libraries. One risk is the potential for vulnerabilities or security issues in the library code. It&#39;s important to regularly check for and update to the latest versions of the library to minimize this risk. We will see how to use &lt;b&gt;&lt;a href=&quot;https://www.mend.io/free-developer-tools/bolt/&quot;&gt;Mend &lt;/a&gt;&lt;/b&gt;to scan open-source libraries for free. It integrates with GitHub making it very easy for developers to get real-time updates related to the open source dependencies.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Quick overview of Mend&amp;nbsp;&lt;/h3&gt;&lt;p&gt;Mend is an open source library management platform that helps developers identify, track, and secure the open source libraries used in their projects. It provides real-time alerts for any potential security vulnerabilities or license compliance issues, and offers integration with a variety of tools such as GitHub and Azure DevOps. With Mend, developers can easily see the open source libraries they are using and ensure that they are up to date and secure, reducing the risks associated with using open source software. Mend is the next version of WhiteSource Bolt, and aims to provide a simple and effective way for developers to manage their open source dependencies.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Integrate Mend with GitHub&lt;/h3&gt;&lt;p&gt;Mend helps developers get real-time security alerts and compliance issues on open source dependencies within GitHub. Once Mend is configured to a GitHub repository, it will continuously scan the codebase and identify any open source libraries that are being used. It will then check for any known vulnerabilities or license compliance issues associated with those libraries, and provide alerts to the developers through the GitHub interface. Apart from notifications within the GitHub interface, Mend is configured to automatically create issues related to the vulnerabilities.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This allows developers to quickly and easily see any potential issues with the open source dependencies they are using, and take steps to address them. Mend is configured to automatically open issues with suggested fixes for any identified vulnerabilities, streamlining the process of addressing them.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Enable Mend Bolt for GitHub&lt;/h3&gt;It is very easy to integrate Mend with GitHub. There is a GitHub application available named Mend Bolt for GitHub. We can configure it for all the repositories under a GitHub organisation or selectively configure Mend for individual repositories.&lt;br /&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;YouTube video showing Mend configuration and usage&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Refer to the YouTube video which explains in detail the different steps required for configuring Mend for a GitHub repository.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/TfZomwycKKQ&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
  &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Details shown in Mend issue related to vulnerabilities&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;For each of the vulnerabilities reported by mend, it provides detailed information with a summary, CVE information, transitive dependencies and recommended fixes if any. The screenshots below show these different characteristics of the Mend issue&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaIk1sDqpz8woKdQB6zbuQ4BXVzqdTHEYQBChk-4HYmlUeCHXhmZgbwAJ5Tsd5F_ww4yhXpVUCVWZ49H9cKEg7vem2Jfsg8mJG4JWOaOe7uXWwwKmVBfYAe1GtnQwcMK53HssdQH-Ps4CLna5Vs6wxBZbs0Piz6yoW8iRlCZxFvmCbEFH8lg/s1714/mend-vulnerability-summary.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;806&quot; data-original-width=&quot;1714&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaIk1sDqpz8woKdQB6zbuQ4BXVzqdTHEYQBChk-4HYmlUeCHXhmZgbwAJ5Tsd5F_ww4yhXpVUCVWZ49H9cKEg7vem2Jfsg8mJG4JWOaOe7uXWwwKmVBfYAe1GtnQwcMK53HssdQH-Ps4CLna5Vs6wxBZbs0Piz6yoW8iRlCZxFvmCbEFH8lg/w400-h188/mend-vulnerability-summary.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihb_m2LXPJNxLd-2XPWk_MA_MRmnuqjYWdoOlGgiBKLuP9dCK2_74FxAPIP5e6wE3S94LuITtW5Grf2T7MQl1pc28n08OUHUcvApRHxwHbASP_1YAwpmi4z0_n9drtCEk5rrguGgkiLrRkeazI-hcHUc_mVxlsAafU5AuGScpyXFcM6jzlbQ/s1324/mend-vulnerability-details.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1112&quot; data-original-width=&quot;1324&quot; height=&quot;336&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihb_m2LXPJNxLd-2XPWk_MA_MRmnuqjYWdoOlGgiBKLuP9dCK2_74FxAPIP5e6wE3S94LuITtW5Grf2T7MQl1pc28n08OUHUcvApRHxwHbASP_1YAwpmi4z0_n9drtCEk5rrguGgkiLrRkeazI-hcHUc_mVxlsAafU5AuGScpyXFcM6jzlbQ/w400-h336/mend-vulnerability-details.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq4Ib7xUzJ5FhFZfmhvjdvEn9zsYuRMi1V7rwh0G-hi4nJj-QoyBAkM-b9L802GikZrAWUpSRFjaESt9R26gTZu8zIq-RiD0ApCrau1DQ6aLVlaiggcYNacldzxZjWinyIcNqhZnLdlqv7Kifbtn8bB9ujNJxVZ3bUNQncxB3ZK1ghGdOaTw/s1352/mend-vulnerability-fix-recommendation.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1058&quot; data-original-width=&quot;1352&quot; height=&quot;313&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq4Ib7xUzJ5FhFZfmhvjdvEn9zsYuRMi1V7rwh0G-hi4nJj-QoyBAkM-b9L802GikZrAWUpSRFjaESt9R26gTZu8zIq-RiD0ApCrau1DQ6aLVlaiggcYNacldzxZjWinyIcNqhZnLdlqv7Kifbtn8bB9ujNJxVZ3bUNQncxB3ZK1ghGdOaTw/w400-h313/mend-vulnerability-fix-recommendation.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;How to fix vulnerabilities reported by Mend&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;If you have received a report of vulnerabilities from Mend, it is important to address them as soon as possible in order to secure your system and prevent potential attacks. The first step is to carefully review the report and understand the nature of the vulnerabilities and the potential risks they pose. Next, you should determine the best course of action to fix the vulnerabilities. It is also a good idea to test the fixes to ensure that they effectively address the vulnerabilities and do not cause any unintended issues. It is important to keep in mind that vulnerabilities can be exploited quickly, so it is crucial to prioritize and address them in a timely manner.&lt;br /&gt;&lt;br /&gt;In the YouTube video above, I showed how to fix the reported vulnerability by upgrading the dependency version to a higher version with a fix. This is a manual step. In another video, I took this a step further and used another open source tool which integrates with GitHub named Dependabot to automatically update the outdated dependencies. Check out &lt;a href=&quot;https://youtu.be/wKIAo0hRu1Q&quot;&gt;this video&lt;/a&gt; if you are interested to know more about it.&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Advantages of using Mend&lt;/h3&gt;&lt;p&gt;Mend helps organizations identify and address vulnerabilities in their systems. Some of the advantages of using Mend include:&lt;/p&gt;&lt;p&gt;&lt;b&gt;Improved security&lt;/b&gt;: By regularly scanning for vulnerabilities, Mend can help organizations identify and fix potential security weaknesses before they can be exploited by attackers.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Risk management&lt;/b&gt;: Mend can help organizations prioritize vulnerabilities based on their severity and the potential risks they pose, allowing them to focus their efforts on the most critical issues first.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Compliance&lt;/b&gt;: Many organizations are required to meet certain security standards in order to comply with regulations or industry standards. By using Mend, organizations can ensure that their systems are in compliance with these requirements.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Time and cost savings&lt;/b&gt;: Fixing vulnerabilities can be time-consuming and costly, especially if they are discovered after an attack has occurred. By using Mend to proactively identify and address vulnerabilities, organizations can save time and resources that would otherwise be spent on remediation.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Mend can help organizations improve their security posture and mitigate the risk of cyber attacks by identifying and fixing vulnerabilities in a timely and cost-effective manner.&amp;nbsp;Cyber attacks are becoming more sophisticated and frequent, and it is important to have tools in place to protect yourself and your organization from these threats. Mend is a powerful tool that can help you identify and address vulnerabilities in your systems before they can be exploited by attackers. By using Mend, you can improve your security posture, mitigate the risk of cyber attacks, and save time and resources that would otherwise be spent on remediation. Protecting your systems and data is crucial in today&#39;s digital world, and Mend is an excellent tool to help you do so.&lt;br /&gt;&lt;br /&gt;Until next time, &lt;b&gt;Code with Passion and Strive for Excellence&lt;/b&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2023/01/scan-opensource-libraries-free-with-mend.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/TfZomwycKKQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-5145055473857041674</guid><pubDate>Tue, 01 Nov 2022 02:28:00 +0000</pubDate><atom:updated>2022-10-31T19:28:43.840-07:00</atom:updated><title>Code faster with AI using tabnine</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;&lt;b&gt;Artificial Intelligence (AI)&lt;/b&gt; is getting infused into every sphere of our life. We find AI-powered smartphone cameras, devices, and voice assistants like Cortana, Alexa, Bixby, and various other alternatives. AI and &lt;b&gt;Machine Learning (ML)&lt;/b&gt; is used to predict thing based on past patterns. In every industry, there are use cases related to AI and ML which can help improve people&#39;s lives in one way or the others.&lt;/p&gt;&lt;p&gt;One such area which is of keen interest is software developers. There are various studies done across the globe to improve developer productivity. Software developers spend a lot of time writing code and looking for information over the internet. We use things like code editors such as Notepad++, Sublime, Visual Studio Code, a full-blown integrated development environment such as Visual Studio Code, IntelliJ, PyCharm, Goland, Eclipse, Rider, etc., database connectivity tools, and many other things to get our work done. This involves context-switching between different tools depending on the type of application and the programming language or backend databases used for the application development.&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;AI-powered assistant for developers&lt;/h3&gt;&lt;p&gt;Many of the code snippets that we write are following a specific pattern. Some of the common examples are listed below&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Query database table and fetch top 100 Orders, sort by highest order value&lt;/li&gt;&lt;li&gt;Perform sentiment analysis on a tweet / social media post&lt;/li&gt;&lt;li&gt;Make an API call to query some data&lt;/li&gt;&lt;li&gt;Write a function to find the average size of the basket from a given carts&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;These are just a few examples. But you can get a sense of the pattern that is being used. What varies is the programming language used and the syntax of the language. Nowadays it is possible to use &lt;b&gt;Natural Language Processing&lt;/b&gt; (NLP) to specify the intent of what the code intends to do and let AI generate the code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One such tool I came across is called &lt;a href=&quot;https://www.tabnine.com/&quot;&gt;tabnine&lt;/a&gt;. The tagline for tabnine says that it is an AI assistant for software developers. It helps developers to write code faster. It has two modes of operation. First is the single line mode where it recommends code for one single line. Ans second is the whole function code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It integrates with the most common &lt;b&gt;Integrated Development Environments (IDE)&lt;/b&gt; and supports most of modern-day programming languages and frameworks. The screenshots below list the IDEs and programming languages that it supports.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytlvT5IfcfxrnbDjg6RgcIEm7N6C1uoSIzuWKopDwSBr-ypYYHxa3KX6CtDv7scSJRuKry6cNjQwu6L3DsYORO8Uuxc_-D7QI9bZMAkT0WqAFTLRLREbEpvrd_-ef-zV10Fj_BJQizyc72Qoiag12vMvqK8GVmGXBsOAyh_fAmuuaJk9Z2Q/s2090/tabnine-supported-ide.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1472&quot; data-original-width=&quot;2090&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytlvT5IfcfxrnbDjg6RgcIEm7N6C1uoSIzuWKopDwSBr-ypYYHxa3KX6CtDv7scSJRuKry6cNjQwu6L3DsYORO8Uuxc_-D7QI9bZMAkT0WqAFTLRLREbEpvrd_-ef-zV10Fj_BJQizyc72Qoiag12vMvqK8GVmGXBsOAyh_fAmuuaJk9Z2Q/w640-h450/tabnine-supported-ide.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAyf6Vpu3TSc9hDfoSqtxqYZ2ncrfi8hxyBuFniS3GoneQrMzrx0ymv_TV7P3kMZMV5zzDeAsTWcQjoeLco4VV6xxTYObEbjo7s2qyqdPb-2luNese1Dl5rNKXB5lG6GXEtYvXxO_IoVg0Dze0suP2skRZCssnwsBEYt-GtfzSIVJOFa1oNQ/s2848/tabnine-supported-languages.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2848&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAyf6Vpu3TSc9hDfoSqtxqYZ2ncrfi8hxyBuFniS3GoneQrMzrx0ymv_TV7P3kMZMV5zzDeAsTWcQjoeLco4VV6xxTYObEbjo7s2qyqdPb-2luNese1Dl5rNKXB5lG6GXEtYvXxO_IoVg0Dze0suP2skRZCssnwsBEYt-GtfzSIVJOFa1oNQ/w640-h346/tabnine-supported-languages.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Refer to the &lt;a href=&quot;https://www.tabnine.com/install&quot;&gt;install &lt;/a&gt;section to get the most updated list of IDEs and programming languages. If the language you are using or the IDE you are using is not on the list, most probably you are not working with a modern tech stack :)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;My experience with Tabnine&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I used Tabnine with my favorite code editor Visual Studio Code. I used it to generate C# code, document the project using Markdown files, and to write Powershell scripts. It was quite accurate in terms of its suggestions and recommendations with an accuracy rate of about &lt;b&gt;75-80%&lt;/b&gt;. It saved me quite a lot of time while writing the docs for a project.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Although Markdown and Powershell are not listed in the supported languages, tabnine did a fantastic job in terms of proving context-aware recommendations.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I shared my experience of using Tabnine in a YouTube video.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/3l4_cX9CImY&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Summary / Conclusion&lt;/h3&gt;Personally, I found Tabnine very useful. It avoided the context switching for me to look for information. It helped me to generate code faster. Documenting the code or project with markdown files was a breeze saving me at least 70% of the typing efforts.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I think a tool like Tabnine can be very handy when we are learning a new programming language. It can help us quickly understand code syntax and best practices. The machine learning model used to train the assistant can scan different types of repositories within the organization as well as public repositories. This can help to implement best practices.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Hope you find this useful. I would love to hear about your experience.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Until next time, &lt;b&gt;&lt;i&gt;Code with Passion and Strive for Excellence.&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2022/10/code-faster-with-ai-using-tabnine.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytlvT5IfcfxrnbDjg6RgcIEm7N6C1uoSIzuWKopDwSBr-ypYYHxa3KX6CtDv7scSJRuKry6cNjQwu6L3DsYORO8Uuxc_-D7QI9bZMAkT0WqAFTLRLREbEpvrd_-ef-zV10Fj_BJQizyc72Qoiag12vMvqK8GVmGXBsOAyh_fAmuuaJk9Z2Q/s72-w640-h450-c/tabnine-supported-ide.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-192971835543552800</guid><pubDate>Wed, 12 Oct 2022 23:00:00 +0000</pubDate><atom:updated>2022-10-12T16:03:56.102-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">progressive delivery</category><category domain="http://www.blogger.com/atom/ns#">rolling update</category><title>Zero downtime deployment with Kubernetes using Rolling update Strategy</title><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;Nowadays modern cloud-native applications are developed and deployed at a rapid scale and pace. The legacy techniques used for upgrading applications and services are no longer relevant. We want to give the best user experience to end users. One of the things which are gaining popularity and is already a mainstream technique is &lt;b&gt;progressive delivery&lt;/b&gt;. This allows us to upgrade the application version in a progressive manner by reducing the blast radius. In this post, we will look at how to achieve &lt;b&gt;zero downtime deployment&lt;/b&gt; using the&lt;b&gt; Rolling Update strategy&lt;/b&gt; with &lt;b&gt;Kubernetes&lt;/b&gt;.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Quick overview of the rolling update strategy&lt;/h2&gt;&lt;p&gt;The rolling update strategy allows applications with multiple instances or replicas to upgrade from one version to another in a controlled manner. Instead of upgrading all the replicas together, this strategy applies changes in batches and replaces the older version with a new one. As a result of this, the application can continue to run with the reduced number of instances while the upgrade is progressing.&amp;nbsp;&lt;/p&gt;&lt;p&gt;One of the pre-requisite for implementing a rolling update strategy is that the application needs to have &lt;b&gt;multiple replicas or instances &lt;/b&gt;running. If there is only a single instance of the application, there will be a slight downtime. Kubernetes supports the rolling update strategy natively. We do not need any additional things to implement it with Kubernetes. When we use Kubernetes Deployment to deploy our pods, the rolling update is the default strategy.&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you have been using Kubernetes deployments, you would have unknowingly used the rolling update strategy when upgrading the application version.&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Use the Rolling update strategy for zero downtime deployment&lt;/h2&gt;&lt;p&gt;If we don&#39;t override any settings related to rolling updates, by default Kubernetes will apply 25% &lt;b&gt;MaxSurge &lt;/b&gt;and 25% &lt;b&gt;MaxUnavailable &lt;/b&gt;settings. What this means is that at the time of the upgrade maximum of 25% of the replicas will be added. Same way, when the old version of the replica is replaced with the new one, a maximum of 25% would be replaced at a time.&lt;/p&gt;&lt;p&gt;By doing this, it ensures that there are 80% of replicas in working condition during the upgrade process and the end users are not impacted. If we have exposed the deployment outside of the Kubernetes cluster using a Service, then the LoadBalancer will route the traffic accordingly between the new and older versions.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Youtube video demo&lt;/h3&gt;&lt;p&gt;Refer to the YouTube video to see this in action.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Y_ITXcL94T0&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Other alternatives to Rolling Update Strategy&lt;/h2&gt;&lt;p&gt;There are other alternatives to the rolling update strategy. Modern-day cloud-native applications support advanced deployment strategies or techniques such as &lt;a href=&quot;https://youtu.be/bm6RYgVuAzo&quot;&gt;Blue-Green deployment&lt;/a&gt; or &lt;a href=&quot;https://youtu.be/_-_KnmAbKIo&quot;&gt;Canary deployment&lt;/a&gt; which also allow zero downtime deployment with progressive delivery. Refer to the links to watch YouTube videos on my channel to understand how these can be applied to your Kubernetes applications.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Gone are the days of bringing down servers and applications to upgrade them. With the cloud, we can easily upgrade applications and services with minimal impact on end users. Use modern techniques such as rolling update, Blue Green deployment or Canary deployment to achieve 100% availability for your application.&lt;/p&gt;&lt;p&gt;Until next time, &lt;b&gt;&lt;i&gt;Code with Passion and Strive for Excellence&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2022/10/zero-downtime-deployment-with.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Y_ITXcL94T0/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-3770210701409596445</guid><pubDate>Tue, 09 Aug 2022 11:02:00 +0000</pubDate><atom:updated>2022-10-04T07:12:52.231-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">12FactorApps</category><category domain="http://www.blogger.com/atom/ns#">15FactorApps</category><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">FifteenFactorApps</category><category domain="http://www.blogger.com/atom/ns#">twelvefactorapps</category><title>Cloud native Fifteen Factor Apps</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;A few years back Heroku &lt;a href=&quot;https://12factor.net/&quot;&gt;published a set of guidelines&lt;/a&gt; for building and deploying applications which became known as 12 Factor App. These are guiding principles for developing, operating and deploying Web apps or software-as-a-service (SaaS). Over a period of time, as cloud adoption increased and microservices became popular there are additional factors which got added. We also saw changes in the application integration space with more real-time processing gaining popularity. We now have event driven microservices which empower organisations to leverage data to get more value using event driven architecture.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;15 Factor Apps series&lt;/h3&gt;&lt;p&gt;In order to understand the 15 factors better, I am creating this series of YouTube videos. We will cover all the 15 factors in different parts. Below is the picture showing the initial 12 factors as described in the 12Factor.net and then we also have the next picture showing the additional 3 factors as part of the 15 factors.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgALAZicqyGQCBcGufaUd8IAU87vUDh3TpLmw9QGmxRKDBzlW1jmdqA0pzlfbgBAdgeU4tCal0W-JJxf5UPykagZOmPh5WJrM3k2W0ZOL_QCvE7iiHupVjfwogVbuK14Tb1yoRM5Hc13q2Sb22eVD-KoFEtK3pGSiV51sFqk6fbTxqDzjGQsg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;12 Factor Apps&quot; data-original-height=&quot;1314&quot; data-original-width=&quot;2350&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgALAZicqyGQCBcGufaUd8IAU87vUDh3TpLmw9QGmxRKDBzlW1jmdqA0pzlfbgBAdgeU4tCal0W-JJxf5UPykagZOmPh5WJrM3k2W0ZOL_QCvE7iiHupVjfwogVbuK14Tb1yoRM5Hc13q2Sb22eVD-KoFEtK3pGSiV51sFqk6fbTxqDzjGQsg=s16000&quot; title=&quot;12 Factor Apps&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFnb11W_eZuvNjbyToGtU3EZmRk4QaFrtrIEL3ITCK-s5StBLy0KHXp3TElb_cx8S6fRdl9F6n4EIzhnxuXNg58tYcZmBWV4dvh8jF0iby3LJ27VWQOel7eqQZjF67S7Aztio65on-fyDALL8GwRS35EXIREMfovYNOT1bLoImmpkw2tvoNg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;1262&quot; data-original-width=&quot;2434&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFnb11W_eZuvNjbyToGtU3EZmRk4QaFrtrIEL3ITCK-s5StBLy0KHXp3TElb_cx8S6fRdl9F6n4EIzhnxuXNg58tYcZmBWV4dvh8jF0iby3LJ27VWQOel7eqQZjF67S7Aztio65on-fyDALL8GwRS35EXIREMfovYNOT1bLoImmpkw2tvoNg=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Here is a list of 15 Factors which help to make the modern cloud-native applications highly scalable, resilient and portable:&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Codebase - one codebase tracked in version control, many deploys&lt;/li&gt;&lt;li&gt;Dependencies - Explicitly declare and isolate dependencies&lt;/li&gt;&lt;li&gt;Config - store config in environment&lt;/li&gt;&lt;li&gt;Backing services - treat backing service as an attached resource&lt;/li&gt;&lt;li&gt;Build, release and run - strictly separate build and run phases&lt;/li&gt;&lt;li&gt;Processes - execute app as one or more stateless processes&lt;/li&gt;&lt;li&gt;Port binding - expose services via port binding&lt;/li&gt;&lt;li&gt;Concurrency - scale-out via process model&lt;/li&gt;&lt;li&gt;Disposability - maximize robustness with fast startup and graceful shutdown&lt;/li&gt;&lt;li&gt;Dev/Prod parity - keep development, staging and production as similar as possible&lt;/li&gt;&lt;li&gt;Logs - treat logs as stream of events&lt;/li&gt;&lt;li&gt;Admin processes - Run admin/management tasks as one-off process&lt;/li&gt;&lt;li&gt;API first - define service contract&lt;/li&gt;&lt;li&gt;Telemetry - monitor process performance&lt;/li&gt;&lt;li&gt;Authentication - secure applications across hardware, network and software layers&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Youtube videos&lt;/h3&gt;&lt;div&gt;Below is the list of videos covering each of these factors&lt;/div&gt;&lt;div&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/GKk8ASJyBDc&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
  &lt;br /&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/9Z0M5pTg7Dk&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/doixRulPgPc&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/s3cqcUibHI0&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/xt3Ls0l8BmQ&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/mICkIeDKQSg&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
  
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/wFy39z4G_2Q&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read the ebook by Kevin Hoffman about the 15 Factor Apps named&amp;nbsp;&lt;a href=&quot;https://learning.oreilly.com/library/view/beyond-the-twelve-factor/9781492042631/&quot;&gt;Beyond the Twelve-Factor App (oreilly.com)&lt;/a&gt;.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjNgU9Ku7ivUAiBgptQxiIy5WHaGlZrANwQ57QiK3P9DMzOa_79zzfTbi0pHHi0UusthRxszr1_1veDHG1lDU0xYT92d0fDtFMyP2TGxO3uL0YR-Km4jSqjHlH5lPhPXtnfSNyOSIYULVJbhRgldpC1QJb0gXcTToZZH8Y9FBWFyhXGJyDOBg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;400&quot; data-original-width=&quot;400&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjNgU9Ku7ivUAiBgptQxiIy5WHaGlZrANwQ57QiK3P9DMzOa_79zzfTbi0pHHi0UusthRxszr1_1veDHG1lDU0xYT92d0fDtFMyP2TGxO3uL0YR-Km4jSqjHlH5lPhPXtnfSNyOSIYULVJbhRgldpC1QJb0gXcTToZZH8Y9FBWFyhXGJyDOBg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Until next time, &lt;b&gt;Code with Passion and Strive for Excellence&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2022/08/cloud-native-fifteen-factor-apps.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgALAZicqyGQCBcGufaUd8IAU87vUDh3TpLmw9QGmxRKDBzlW1jmdqA0pzlfbgBAdgeU4tCal0W-JJxf5UPykagZOmPh5WJrM3k2W0ZOL_QCvE7iiHupVjfwogVbuK14Tb1yoRM5Hc13q2Sb22eVD-KoFEtK3pGSiV51sFqk6fbTxqDzjGQsg=s72-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-1250095286938159263</guid><pubDate>Tue, 08 Feb 2022 14:39:00 +0000</pubDate><atom:updated>2022-02-08T06:39:09.562-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure Kubernetes Service</category><category domain="http://www.blogger.com/atom/ns#">blue green deployment</category><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">zero downtime deployment</category><title>Kubernetes Blue-Green Deployment</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBscjyNQaD9vc2BnsIs6T1PZxufAzm9Pe6KolPITQCnivS7_jBxOKUu1IRKugNoT4ZMJHwl1tokgnLkj9vgSQzLHGcc7_n95gZUO705N9VZt-AGA9FpWXo9HCev3GcKWJLwRAZ57ciKQplDn3lvkqW3cy_WnirfL7VpeyAqDRjpq0bPO4AWA/s3480/Blue-green-deployment-title-slide.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;1702&quot; data-original-width=&quot;3480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBscjyNQaD9vc2BnsIs6T1PZxufAzm9Pe6KolPITQCnivS7_jBxOKUu1IRKugNoT4ZMJHwl1tokgnLkj9vgSQzLHGcc7_n95gZUO705N9VZt-AGA9FpWXo9HCev3GcKWJLwRAZ57ciKQplDn3lvkqW3cy_WnirfL7VpeyAqDRjpq0bPO4AWA/s320/Blue-green-deployment-title-slide.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Blue-Green deployment is a strategy to achieve zero-downtime deployment. With cloud-native applications, it is common practice to reduce downtime when upgrading the application version. Due to the ease with which we can provision new infrastructure on the cloud, it becomes easier to adopt new ways of improving the deployment.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Blue Green deployment definition&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;In this post, we will look at how to use Blue-Green deployment with Kubernetes. One of the best places to look for definition is the glossary of terms provided by Cloud Native Computing Foundation (&lt;b&gt;CNCF&lt;/b&gt;). The CNCF defines &lt;a href=&quot;https://glossary.cncf.io/blue_green_deployment/&quot;&gt;Blue Green deployment &lt;/a&gt;as&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;segoe ui&amp;quot;, Roboto, &amp;quot;helvetica neue&amp;quot;, Arial, sans-serif, &amp;quot;apple color emoji&amp;quot;, &amp;quot;segoe ui emoji&amp;quot;, &amp;quot;segoe ui symbol&amp;quot;&quot; style=&quot;background-color: white; color: #2a0054; font-size: 16px;&quot;&gt;&lt;i&gt;&quot;A strategy for updating running computer systems with minimal downtime. The operator maintains two environments, dubbed “blue” and “green”. One serves production traffic (the version all users are currently using), whilst the other is updated. Once testing has concluded on the non-active (green) environment, production traffic is switched over (often via the use of a load balancer).&quot;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;The main point here is two identical environments named blue and green and the traffic switching using load balancer. Lets see how this can be applied to the Kubernetes environment.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;How to perform Kubernetes Blue Green Deployment&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;We start by creating two versions of the application. Let&#39;s say V1 which is deployed to the live environment. This forms our Blue environment. To keep things simple, I have created a simple ASP.Net Core application. It is packaged into a Docker image with two tags. One tag has Blue background and will be used to deploy to the Blue environment. The other container image with green tag will be used to deploy to the Green environment. The two docker container images are published to Dockerhub as&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;nileshgule/blue-green-demo:blue&lt;/li&gt;&lt;li&gt;nileshgule/blue-green-demo:green&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Step 1 : Setup Blue environment&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Once the container images are pushed to the container registry, we can use Kubernetes Deployment to deploy to the Kubernetes cluster. We create a &lt;a href=&quot;https://github.com/NileshGule/canary-demo-kuberentes/blob/main/k8s/blue-deployment.yml&quot;&gt;blue-deployment &lt;/a&gt;using the image tagged as blue. The Kubernetes deployment will internally create a replicaset and related pod. In the pod deployment template we set the label as app: blue.&lt;br /&gt;&lt;br /&gt;The deployment is exposed outside the Kubernetes cluster using a &lt;a href=&quot;https://github.com/NileshGule/canary-demo-kuberentes/blob/main/k8s/blue-green-service.yml&quot;&gt;Kubernetes service &lt;/a&gt;of the type loadbalancer. The service uses the selector with app: blue value.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCaW_GLv9GxVAult8rYNtrp0DtLWYaDBrwijsNTXyhoLe6M9WdkxFGvatecQl-jwl9Ob1K0jQ4dEh-WAHlCHFfKGEX-LdH3YceUKapUqvhn3G7amhvEJUNDNvsNIZlr66rUbTIOhT-AvlH0i76-ACfioP2W3wsX4l0Tp8U-7TkiiemmOEboQ/s3676/step1-blue-environment.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1274&quot; data-original-width=&quot;3676&quot; height=&quot;139&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCaW_GLv9GxVAult8rYNtrp0DtLWYaDBrwijsNTXyhoLe6M9WdkxFGvatecQl-jwl9Ob1K0jQ4dEh-WAHlCHFfKGEX-LdH3YceUKapUqvhn3G7amhvEJUNDNvsNIZlr66rUbTIOhT-AvlH0i76-ACfioP2W3wsX4l0Tp8U-7TkiiemmOEboQ/w400-h139/step1-blue-environment.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Browse the public IP of the loadbalancer service and we will be presented with the web page with Blue background.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Step 2:&amp;nbsp; Setup Green environment&lt;/h3&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;The second step of the Blue-Green deployment is to create the Green environment. This is done by creating a 2nd &lt;a href=&quot;https://github.com/NileshGule/canary-demo-kuberentes/blob/main/k8s/green-deployment.yml&quot;&gt;Kuberentes deployment&lt;/a&gt; using the image nileshgule/blue-green-demo:green tag. We also set the label for the deployment as app: green. The rest of the attributes in the manifest file are almost same as the blue deployment. After applying the Green deployment, the service is still serving 100% traffic to Blue environment. We can perform test on the next version or release of the application which is deployed to the green environment. If the tests are successful, we can switch the traffic to green environment.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilXBF983mOyS-k4GBB1ILLd4DpxGX591n8e4VZdrlG2Djo1ZVRHZijf0SPUQ6nDowB7gS0GlVbU5a3luXr7a4gOqRawg1yxR1bilmDnDYFa8dRI3A5mjLUdoImJBab_pS7cVjfJhv9rihaNnbYZA-NkK9AdWgwdC_TzRA_Vf6ZAogJxPUAXw/s3518/step2-blue-green-environment.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2040&quot; data-original-width=&quot;3518&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilXBF983mOyS-k4GBB1ILLd4DpxGX591n8e4VZdrlG2Djo1ZVRHZijf0SPUQ6nDowB7gS0GlVbU5a3luXr7a4gOqRawg1yxR1bilmDnDYFa8dRI3A5mjLUdoImJBab_pS7cVjfJhv9rihaNnbYZA-NkK9AdWgwdC_TzRA_Vf6ZAogJxPUAXw/w320-h186/step2-blue-green-environment.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Step 3: Route traffic to Green environment&lt;/h3&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;The final step in the Blue-Green deployment is to switch the traffic to the Green environment. We can do this by editing the service manifest. We update the selector to select the pods with app: green label. Apply this change to the Kubernetes service. All the traffic is now redirected to the Green environment.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_fY_L65l5nkxgBS5SwLSopSj_e5uJI230S9SIdVCtsdRlOUEemAUvhTHpTVnM3x7dOMlxrPMxBr5WZfQ74PusDM93984wL4es2EmdlUctELCM0PLZdCI_Uu5jd83kiKNn1qTEOtwgTcEWMwyz_WTXjBYRgyNbuzp-r7SqTbePcfb_I05rwQ/s3512/step3-green-environment.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2064&quot; data-original-width=&quot;3512&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_fY_L65l5nkxgBS5SwLSopSj_e5uJI230S9SIdVCtsdRlOUEemAUvhTHpTVnM3x7dOMlxrPMxBr5WZfQ74PusDM93984wL4es2EmdlUctELCM0PLZdCI_Uu5jd83kiKNn1qTEOtwgTcEWMwyz_WTXjBYRgyNbuzp-r7SqTbePcfb_I05rwQ/w320-h188/step3-green-environment.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;Note that the Blue environment is still there, but the active or live traffic is served by the green environment. If there is any problem with the Green environment, we can change the selector in the service again to point back to the Blue environment quickly allowing us to revert the changes with minimal impact on the end users.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;clear: both; text-align: left;&quot;&gt;Youtube video&lt;/h2&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;The steps explained in this blog post are demonstrated in the Youtube video in detail. Watch the video for a live demo and feel free to provide feedback in the video comments.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/bm6RYgVuAzo&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;clear: both; text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;It is very easy to use the Blue-Green deployment strategy with Kubernetes using Service. This strategy is quite useful to reduce the downtime for stateless applications. Stateful applications are a bit more involved. This reduces the risk during application upgrades. By having a standby environment we can easily fallback to an older version with no downtime. Hope you found this useful.&lt;br /&gt;&lt;br /&gt;Until next time, Code with Passion and Strive for Excellence.&lt;br /&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2022/02/kubernetes-blue-green-deployment.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBscjyNQaD9vc2BnsIs6T1PZxufAzm9Pe6KolPITQCnivS7_jBxOKUu1IRKugNoT4ZMJHwl1tokgnLkj9vgSQzLHGcc7_n95gZUO705N9VZt-AGA9FpWXo9HCev3GcKWJLwRAZ57ciKQplDn3lvkqW3cy_WnirfL7VpeyAqDRjpq0bPO4AWA/s72-c/Blue-green-deployment-title-slide.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-2978111848868280213</guid><pubDate>Thu, 13 Jan 2022 11:26:00 +0000</pubDate><atom:updated>2022-01-13T03:26:59.461-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">aliases</category><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">kubectl</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><title>Improve your productivity with Kubernetes using aliases</title><description>&lt;h1 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h1&gt;&lt;p&gt;Kubernetes is the de-facto standard for orchestrating containers. If you are working on a daily basis with Kubernetes, you are most likely using the kubectl to interact with the Kubernetes cluster for performing different operations like listing pods, checking for deployments, viewing logs etc. Working with kubectl using a terminal is the most common approach in such a scenario.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Earlier I had demonstrated how to use two &lt;a href=&quot;https://www.handsonarchitect.com/2021/08/improve-productivity-while-working-with.html&quot;&gt;power tools kubectx and kubens&lt;/a&gt;. In this post, we will look at how to give kubectl a huge productivity boost by using programmatically generated aliases.&amp;nbsp;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;A quick word on the alias&lt;/h1&gt;&lt;p&gt;If you come from a scripting background with experience in bash or shell scripting or even Powershell scripts, you might be familiar with aliases. These are like shortcuts that we can add to the terminal session to execute a command or piece of code. One of the most commonly used alias while working with kubectl is k. Instead of typing kubectl every time, most people create an alias with k and we can replace/substitute kubectl with k.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can persist the aliases across sessions and store them permanently. In the case of bash aliases on Linux or Unix systems, mostly these are stored in the .bashrc profile file under the home directory of the user. The same thing can be done on a Windows environment by creating a function as an alias in a PowerShell profile document.&amp;nbsp;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;Need for kubectl aliases&lt;/h1&gt;&lt;p&gt;Now that we understand a bit about aliases, let us see how we can use them with Kubernetes and kubectl to be specific. Kubernetes has various objects like Pods, Deployments, Replicasets, Nodes, Endpoints, PersistentVolume, PersistentVolumeClaims etc. Each of these objects has support for different operations like create, update, delete, edit, get. Along with the different types of operations, there are also different flags that can be used while working with these objects using kubectl like -A or --all for listing objects from all namespaces.&lt;/p&gt;&lt;p&gt;Kubectl also supports displaying information in different formats like JSON or YAML. In order to improve efficiency and productivity while working with kubectl, we can alias the commonly used commands as shown below:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;alias kg=&quot;k get&quot;&lt;/li&gt;&lt;li&gt;alias kgpo=&quot;kg po&quot; or alias kgpo=&quot;kg pods&quot;&lt;/li&gt;&lt;li&gt;alias kgno=&quot;kg no&quot; or alias kgno=&quot;kg nodes&quot;&lt;/li&gt;&lt;li&gt;alias kd=&quot;k describe&quot;&lt;/li&gt;&lt;li&gt;alias kaf=&quot;k apply -f&quot;&lt;/li&gt;&lt;li&gt;alias kdf=&quot;k delete -f&quot;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Note that some Kubernetes objects have short forms like po for pods and no for nodes. We can get the list of resources supported by Kubernetes along with their short names using the following command&lt;/p&gt;&lt;p&gt;&lt;b&gt;kubectl api-resources&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCFcPWz4zBC-Vce-ZuDJ2YwkU46TapDQKYBobPEHQmI8B15gc48LHw-6C8S6v6v3C02MoN6ARELn6Q122M38tum9KApb06qfb0G0Gc2pBoXVtMMBXpgIpo97fCh0PM1Wy9vV-DUp7OcpVtj8IFsC_iR8-g-VFptrS97spwBY38n97AcOmvww=s3226&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1778&quot; data-original-width=&quot;3226&quot; height=&quot;220&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCFcPWz4zBC-Vce-ZuDJ2YwkU46TapDQKYBobPEHQmI8B15gc48LHw-6C8S6v6v3C02MoN6ARELn6Q122M38tum9KApb06qfb0G0Gc2pBoXVtMMBXpgIpo97fCh0PM1Wy9vV-DUp7OcpVtj8IFsC_iR8-g-VFptrS97spwBY38n97AcOmvww=w400-h220&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;The above screenshot shows a partial list of resources, their short names, API versions etc.&lt;/p&gt;&lt;p&gt;If we were to create aliases for each of the resources and different operations supported for that resources, it will be a very time consuming and cumbersome process. This is where a smart guy names Ahmet Alp Balkan came up with a programmatic way to generate aliases for kubectl.&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;kubectl-aliases&lt;/h1&gt;&lt;p&gt;The &lt;a href=&quot;https://github.com/ahmetb/kubectl-aliases&quot;&gt;Github repository&lt;/a&gt; contains the list of over 800 aliases that are programmatically generated. It also contains instructions about how to set up these aliases. We need to download the file and source it in our bash profile which makes these aliases available for us to use with the terminal session.&lt;/p&gt;&lt;p&gt;There is a set of conventions followed while naming or generating these aliases.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;k = kubectl&lt;/li&gt;&lt;ul&gt;&lt;li&gt;sys = --namespace kube-system&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;commands&lt;/li&gt;&lt;ul&gt;&lt;li&gt;g = get&lt;/li&gt;&lt;li&gt;d = describe&lt;/li&gt;&lt;li&gt;rm = delete&lt;/li&gt;&lt;li&gt;a : apply -f&lt;/li&gt;&lt;li&gt;ak : apply -k&lt;/li&gt;&lt;li&gt;k : kustomize&lt;/li&gt;&lt;li&gt;ex : exec -t -t&lt;/li&gt;&lt;li&gt;lo : logs -f&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;resources&lt;/li&gt;&lt;ul&gt;&lt;li&gt;po = pod&lt;/li&gt;&lt;li&gt;dep = deployment&lt;/li&gt;&lt;li&gt;ing = ingress&lt;/li&gt;&lt;li&gt;svc = service&lt;/li&gt;&lt;li&gt;cm = configmap&lt;/li&gt;&lt;li&gt;sec = secret&lt;/li&gt;&lt;li&gt;ns = namespace&lt;/li&gt;&lt;li&gt;no = node&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;flags&lt;/li&gt;&lt;ul&gt;&lt;li&gt;output formats : oyaml, ojson, owide&lt;/li&gt;&lt;li&gt;all : -all or --all-namespaces depending on command&lt;/li&gt;&lt;li&gt;sl : --show-labels&lt;/li&gt;&lt;li&gt;w : -w/--watch&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;value flags : should be at the end&lt;/li&gt;&lt;ul&gt;&lt;li&gt;n = -n/--namespace&lt;/li&gt;&lt;li&gt;f = -f/--filename&lt;/li&gt;&lt;li&gt;l = -l/--selector&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Using these conventions it is quite convenient to work with kubectl. This reduces typing errors and improves our efficiency greatly. Here are a few examples&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;k get pods --&amp;gt; kgpo&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;k get pods --all-namespaces --&amp;gt; kgpoall&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;k get pods -n kube-system --&amp;gt; ksyspo&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;k get pods -o yaml -&amp;gt; kgpooyaml&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;k get configmaps -n keda --&amp;gt; kgcmn keda&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;If you are on Windows machine, you need not be left behind. There is a PowerShell version of these aliases. Here is the link to the &lt;a href=&quot;https://github.com/shanoor/kubectl-aliases-powershell&quot;&gt;Github repository&lt;/a&gt; created by Shanoor.&amp;nbsp;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;Youtube video&lt;/h1&gt;&lt;p&gt;I created a short video demonstrating these in much more detail. Catch all the action in the below Youtube video.&lt;/p&gt;&lt;p&gt;&amp;nbsp;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/-i23FORAavg&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h1&gt;&lt;p&gt;We all want to improve our daily ways of working. I am sure you will benefit from this little tip if you are a regular user of Kubectl. Hopefully in your role as a developer or DevOps engineer or SRE role you find this useful. Do let me know in the comments of this post or in the Youtube video if you have any feedback.&lt;br /&gt;&lt;br /&gt;Until next time, &lt;b&gt;Code with Passion and Strive for Excellence&lt;/b&gt;.&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2022/01/improve-your-productivity-with.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiCFcPWz4zBC-Vce-ZuDJ2YwkU46TapDQKYBobPEHQmI8B15gc48LHw-6C8S6v6v3C02MoN6ARELn6Q122M38tum9KApb06qfb0G0Gc2pBoXVtMMBXpgIpo97fCh0PM1Wy9vV-DUp7OcpVtj8IFsC_iR8-g-VFptrS97spwBY38n97AcOmvww=s72-w400-h220-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-49171010580645994</guid><pubDate>Wed, 05 Jan 2022 13:37:00 +0000</pubDate><atom:updated>2022-01-05T05:39:59.602-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">certification</category><category domain="http://www.blogger.com/atom/ns#">certified kubernetes application developer</category><category domain="http://www.blogger.com/atom/ns#">CKAD</category><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">CNCF</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><title>How to prepare and clear CKAD certification exam</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;The new year started on a happy note for me. A few days back, I cleared the &lt;b&gt;Certified Kubernetes Application Developer (CKAD)&lt;/b&gt; certification. This was on the second attempt that I managed to clear the exam. It is the best online certification exam I have answered so far. This post is about my experience with the exam and how to prepare for it. I also share some information that might be helpful during the exam itself.&lt;/p&gt;&lt;h2&gt;Exam Curriculum&lt;/h2&gt;&lt;p&gt;The exam is completely hands on. There are no multiple choice questions. We are given a set of 6 different Kubernetes clusters. Each cluster has a different configuration and the questions are related to designing and developing cloud native applications in the Kubernetes environment. There are five different broad areas which are assessed as shown below. These include&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Application Design and Build 20%&lt;/li&gt;&lt;li&gt;Application Deployment 20%&lt;/li&gt;&lt;li&gt;Application Observability and Maintenance 15%&lt;/li&gt;&lt;li&gt;Application Environment, Configuration and Security 25%&lt;/li&gt;&lt;li&gt;Services &amp;amp; Networking 20%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The exam is conducted by &lt;b&gt;Linux Foundation&lt;/b&gt; in collaboration with &lt;b&gt;Cloud Native Computing Foundation (CNCF)&lt;/b&gt;. You can find out more about the exam on the&amp;nbsp;&lt;a href=&quot;https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/&quot;&gt;Linux Foundation training website&lt;/a&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd9U0Lx0kJQ3F_Lwo8C7HRwNTOfymOAKNG5pyBSl5NfDSL9e30BqEK_armbTp0zJzGwUK8jRvVNV90UEcxAMHTf5p1f9IEkzVd1ahVQgSpBKYDqAw9Zied28dSe07pz-k6KpL_v6TewnZpb1IL2XZ0MWZg4OUF8EZlWDjYlJicYxmsJW0Zsg=s1266&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1266&quot; data-original-width=&quot;1171&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd9U0Lx0kJQ3F_Lwo8C7HRwNTOfymOAKNG5pyBSl5NfDSL9e30BqEK_armbTp0zJzGwUK8jRvVNV90UEcxAMHTf5p1f9IEkzVd1ahVQgSpBKYDqAw9Zied28dSe07pz-k6KpL_v6TewnZpb1IL2XZ0MWZg4OUF8EZlWDjYlJicYxmsJW0Zsg=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;The duration of the test is &lt;b&gt;2 hours&lt;/b&gt; with &lt;b&gt;66%&lt;/b&gt; as the minimum passing score. The certificate is valid for &lt;b&gt;3 years&lt;/b&gt;. In case you are not able to clear on the first attempt, you get &lt;b&gt;1 free retake&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;References for exam preparation&lt;/h2&gt;&lt;p&gt;I like to use multiple resources while preparing for any certifications. For CKAD as well I referred to multiple sources of information. Here is a quick list of different references I used.&lt;/p&gt;&lt;h3&gt;Kubernetes docs&lt;/h3&gt;&lt;p&gt;We are allowed to refer to the Kubernetes docs during the exam. It is like an open book test. The following links are helpful for getting started with Kubernetes and understanding the different concepts.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Kubernetes docs - https://kubernetes.io/docs/home/&lt;/li&gt;&lt;li&gt;Kubernetes.io tasks - https://kubernetes.io/docs/tasks/&lt;/li&gt;&lt;li&gt;kubectl cheatsheet - https://kubernetes.io/docs/reference/kubectl/cheatsheet/&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Learning course&lt;/h3&gt;&lt;p&gt;Along with the Kubernetes docs, I supplemented the knowledge by registering for the eLearning course. There are many courses available online. Almost every eLearning platform will have one or more course related to the CKA exam preparation. Some also offer mock test. I took the CKAD exam plus the Kubernetes fundamentals bundle from&amp;nbsp;&lt;a href=&quot;https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/&quot;&gt;Linux foundation&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg-HRPMB7xbSAQ0smIaoLMjyRiT-3vPsH7MFC7Vb9dJbwHGVXKyckC4VWsiUzmJ2iuhuX3b4SHu8wFH4dQsBu1LQLLxmhYnL0-AcHFNQGJI9Q3XpYOeqsZvABDhlvEg_hbxHtaM_ubfpk3i0mbpgVuV3eHlqfhMTG2uANB-5PI1Pe56BCx2Mw=s1288&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;630&quot; data-original-width=&quot;1288&quot; height=&quot;157&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg-HRPMB7xbSAQ0smIaoLMjyRiT-3vPsH7MFC7Vb9dJbwHGVXKyckC4VWsiUzmJ2iuhuX3b4SHu8wFH4dQsBu1LQLLxmhYnL0-AcHFNQGJI9Q3XpYOeqsZvABDhlvEg_hbxHtaM_ubfpk3i0mbpgVuV3eHlqfhMTG2uANB-5PI1Pe56BCx2Mw=s320&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The&amp;nbsp;&lt;a href=&quot;https://www.udemy.com/course/certified-kubernetes-application-developer/&quot;&gt;Kubernetes Certified Application Developer (CKAD) with Tests&lt;/a&gt;&amp;nbsp;on Udemy by &lt;b&gt;Mumshad Mannambeth&lt;/b&gt; is also one of the most popular courses.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgGXnO41zRdJC1DfWuWzsbyp_W4TePfZK0UdmW1_Z2TMEh8aC5UGrumxorLJ_kvjHLCx789BZAbAXr-YxE_k6Ap5e71UTfZFHRUNFJsJOggNfvUuOoplBHP-4Qy0PoZ5bGCwr6YEoHEeaGtKmhNhwOipXD-QsgK9iDOZx6fHV6lwUytF00fcg=s1724&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;548&quot; data-original-width=&quot;1724&quot; height=&quot;102&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgGXnO41zRdJC1DfWuWzsbyp_W4TePfZK0UdmW1_Z2TMEh8aC5UGrumxorLJ_kvjHLCx789BZAbAXr-YxE_k6Ap5e71UTfZFHRUNFJsJOggNfvUuOoplBHP-4Qy0PoZ5bGCwr6YEoHEeaGtKmhNhwOipXD-QsgK9iDOZx6fHV6lwUytF00fcg=s320&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;I liked the details and the depth this course covers the contents. There are hands on labs or mini tests after every major topic. The course is filled with lots of gems in the form of tips and tricks related to the actual exam.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Github Repos&lt;/h3&gt;&lt;p&gt;Here is a list of Github repositories I found useful&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;CKAD Excercises - https://github.com/dgkanatsios/CKAD-exercises&lt;/li&gt;&lt;li&gt;CKAD resources - https://github.com/lucassha/CKAD-resources&lt;/li&gt;&lt;li&gt;&lt;b&gt;Nilesh Gule CKAD exam prep&lt;/b&gt; - https://github.com/NileshGule/ckad-exam-prep&lt;/li&gt;Denny Zhang kubectl cheatsheet - https://github.com/dennyzhang/cheatsheet-kubernetes-A4&lt;li&gt;Ahmet Alp Balkan Kubernetes network policy recipes - https://github.com/ahmetb/kubernetes-network-policy-recipes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Blogs&lt;/h3&gt;&lt;p&gt;These blog posts provide useful tips for preparation as well as exam&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Be fast with kubectl - https://faun.pub/be-fast-with-kubectl-1-18-ckad-cka-31be00acc443&lt;/li&gt;&lt;li&gt;How to nail Kubernetes certification exams - https://www.infoworld.com/article/3631108/how-to-nail-the-kubernetes-certification-exams.html&lt;/li&gt;&lt;li&gt;Codefresh Kubernetes cheatsheet - https://codefresh.io/kubernetes-tutorial/kubernetes-cheat-sheet/&lt;/li&gt;&lt;li&gt;CKAD practical challenge series - https://codeburst.io/kubernetes-ckad-weekly-challenges-overview-and-tips-7282b36a2681Tips&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Watch out for discounts&lt;/h3&gt;&lt;p&gt;You will find discounts during Black Friday, Cyber Monday, Christmas, New Year, Diwali, Eid etc. Make use of these discounts on learning courses as well as the actual test.&lt;/p&gt;&lt;h3&gt;Learn Imperative commands&lt;/h3&gt;&lt;p&gt;Due to the time limit of 2 hours, you need to be quick in finishing the tasks related to completing the exam. While you can copy and paste yaml from the Kubernetes documentation, editing it could take some time. The test will have specific requirements like naming Kubernetes objects with specific names and deploying them to a specific namespace. Usually, Kubernetes docs will deploy the objects in default namespace. It will save you quite some time if you know how to work with imperative commands. The output of these commands can be piped to yaml files and then you can make the required modifications instead of handcrafting the complete yaml from scratch.&lt;/p&gt;&lt;p&gt;Compared to CKA exam, I found the questions in CKAD to be lengthy. There are more subtasks for each question. You end up solving more subtasks and you need to be really fast.&lt;/p&gt;&lt;h3&gt;Learn basic vi or nano editor commands&lt;/h3&gt;&lt;p&gt;The test environment is Linux based. If you are coming from Windows background like me, you need to be familiar with vi or nano code editors. Be familiar with editing files and command like deleting lines of code, navigating to specific lines, updating a word, saving files etc.&lt;/p&gt;&lt;p&gt;Here is a handy &lt;a href=&quot;https://www.cs.cmu.edu/~15131/f17/topics/vim/vim-cheatsheet.pdf&quot;&gt;cheatsheet&lt;/a&gt; I found to work with the vi editor more effectively.&lt;/p&gt;&lt;h3&gt;Practice, Practice, practice&lt;/h3&gt;&lt;p&gt;Whoever has cleared the CKA, CKAD or CKS exams will tell you that practice is the most important part of exam preparation. If you don&#39;t know how to work with the Kubernetes resources or objects using kubectl, there is no way you are going to clear this test. There could be multiple ways of achieving the same task. You need to find the one which is the most time efficient.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Bookmark specific links&lt;/h3&gt;&lt;p&gt;Bookmarking the links from Kubernetes documentation is helpful to find the resource quickly. Instead of bookmarking the top level pages, I recommend bookmarking specific sections to avoid scrolling through the lengthy page looking for information.&lt;/p&gt;&lt;h3&gt;Practice exam&lt;/h3&gt;&lt;p&gt;If you book the Kubernetes related certification exam after June 2021, you will have access to the practice exam from&amp;nbsp;&lt;a href=&quot;https://killer.sh/ckad&quot;&gt;Killer.sh&lt;/a&gt;. This exam gives you two attempts at the same test. The environment is available for 36 hours and answers along with a detailed explanation of the steps is provided to help you prepare better for real test.&lt;/p&gt;&lt;h2&gt;Tips during the exam&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use external monitor (recommended), &lt;i&gt;minimize screen switching&lt;/i&gt;&lt;/li&gt;&lt;li&gt;External keyboard and mouse can be used&lt;/li&gt;&lt;li&gt;Enable kubectl auto completions&lt;/li&gt;&lt;li&gt;create aliases (before starting test)&lt;/li&gt;&lt;li&gt;Update vimrc / editor profile&lt;/li&gt;&lt;li&gt;Time management&lt;/li&gt;&lt;ul&gt;&lt;li&gt;use imperative commands (&lt;b&gt;huge time saver&lt;/b&gt;)&lt;/li&gt;&lt;li&gt;use copy feature instead of typing&lt;/li&gt;&lt;li&gt;use the notepad feature to make quick notes&lt;/li&gt;&lt;li&gt;flag questions for review&lt;/li&gt;&lt;li&gt;don&#39;t spend too much time on a single question (&lt;b&gt;avg 5-6 mins&lt;/b&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;verify solution after task completion&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Aliases in bash profile&lt;/h3&gt;&lt;p&gt;I added the following aliases in the bash profile to reduce typing kubectl commands&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;alias cls=clear&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alias kg=&#39;k get&#39;&lt;/li&gt;&lt;li&gt;alias kgpo=&#39;kg po&#39;&lt;/li&gt;&lt;li&gt;alias kgno=&#39;kg no&#39;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alias kdes=&#39;k describe&#39;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;alias kaf=&#39;k apply -f&#39;&lt;/li&gt;&lt;li&gt;alias kdf=&#39;k delete -f&#39;&lt;/li&gt;&lt;/ul&gt;Along with these aliases, I had also exported to handy commands&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;export do=&#39;--dry-run=client -o yaml&#39;&lt;/li&gt;&lt;li&gt;export fg=&#39;--force --grace-period=0&#39;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;vi editor settings&lt;/h3&gt;&lt;p&gt;Last but not the least, I also updated the settings for vi editor so that text can be aligned/indented properly when we tab in the editor. This also helps when we copy and paste the code snippets from Kubernetes docs.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;set tabstop=2&lt;/li&gt;&lt;li&gt;set shiftwidth=2&lt;/li&gt;&lt;li&gt;set expandtab&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 style=&quot;text-align: left;&quot;&gt;Youtube video&lt;/h1&gt;&lt;p&gt;All the topics mentioned in this post are explained in more detail in the Youtube video.&amp;nbsp;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/hKVz-Mwo9DM&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;CKAD certification is meant to gauge the skills of Kubernetes developers. If you do not know how to build and deploy cloud-native applications which are deployed on the Kubernetes cluster, this certification is not for you. Practice well before taking the exam. There are 17 questions with different weights. Hope this post is helpful for those preparing for the exam in future.&lt;/p&gt;&lt;p&gt;Until next time, Code with Passion and Strive for Excellence.&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2022/01/how-to-prepare-and-clear-ckad.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjd9U0Lx0kJQ3F_Lwo8C7HRwNTOfymOAKNG5pyBSl5NfDSL9e30BqEK_armbTp0zJzGwUK8jRvVNV90UEcxAMHTf5p1f9IEkzVd1ahVQgSpBKYDqAw9Zied28dSe07pz-k6KpL_v6TewnZpb1IL2XZ0MWZg4OUF8EZlWDjYlJicYxmsJW0Zsg=s72-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-3071149879568077444</guid><pubDate>Wed, 22 Dec 2021 15:29:00 +0000</pubDate><atom:updated>2021-12-22T07:38:57.429-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">metrics server</category><title>How to install Metrics Server on Kubernetes cluster</title><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;This post is about installing the Metrics Server on a Kubernetes cluster. We had provisioned a 3 node Kubernetes cluster in the &lt;a href=&quot;https://www.handsonarchitect.com/2021/12/how-to-bootstrap-multi-node-kubernetes.html&quot;&gt;previous post&lt;/a&gt;. In a multi-node cluster, the workloads will get scheduled on different nodes. If we want to find out which pods are consuming more resources or which nodes are having more resources, we need some way to aggregate the pod level metrics. This is where &lt;a href=&quot;https://github.com/kubernetes-sigs/metrics-server&quot;&gt;Metrics Server&lt;/a&gt; comes into the picture.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;How to install Metrics Server on Kubernetes cluster&lt;/h2&gt;&lt;p&gt;Kubernetes does not provide a default metrics aggregator. We need to install Metrics Server which helps to collect the container level metrics like CPU or RAM usage. These metrics can then be used by other Kubernetes APIs and objects like the &lt;b&gt;Horizontal Pod Autoscaler (HPA)&lt;/b&gt; or &lt;b&gt;Vertical Pod Autoscaler (VPA)&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;We will use a manifest file to install the required components onto our Kubernetes cluster. The manifest file is available in the Github repo for the Metrics Server project. Run the following command to apply the manifest&lt;/p&gt;&lt;p&gt;&lt;b&gt;kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This will create the service account, RBAC for cluster role, cluster role binding, expose the metrics server as service etc. Verify these by listing the pods in the kube-system namespace&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgRokqhvsWBR66nBMbwdYJVl2Nr_EXcjpEOnOtmZSHDP-RtDzpmo_4R0cHkQc0ZiDtI36z8HBJNcAIsng7nVB8b_Dt53mPjz9uO7VjdJh_p6ppdFV4obsPsRJ-Fhh3FlWYRcIcexf1BzyrXyNVD_6xS_lXFOppJSV1J9OU0VHfnCbLqzT-fcA=s988&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;437&quot; data-original-width=&quot;988&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgRokqhvsWBR66nBMbwdYJVl2Nr_EXcjpEOnOtmZSHDP-RtDzpmo_4R0cHkQc0ZiDtI36z8HBJNcAIsng7nVB8b_Dt53mPjz9uO7VjdJh_p6ppdFV4obsPsRJ-Fhh3FlWYRcIcexf1BzyrXyNVD_6xS_lXFOppJSV1J9OU0VHfnCbLqzT-fcA=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;We can see that the metrics-server pod is running but the container is not ready. Use the describe command of Kubectl to identify the reason.&lt;/p&gt;&lt;p&gt;&lt;b&gt;kubectl -n kube-system describe pod metrics-server-&amp;lt;&amp;lt;dynamic-name&amp;gt;&amp;gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiVw6TrFdleEGUGtaN7Lg4xhJwTGz9mwOMSsL9WbxqNQzPkuWAR_97wrOK3GpZ97ff1uoDoraRdNF39YW2yCCgjh4uQDwsf68jyvsJCtn82PakPOjc5vdoUZrzDiGRa-ZkWV0WoPaeqHWvixI6KHMxHQReF8x42cTfCe_PSsQVm2ZkqOR6CBA=s2536&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1067&quot; data-original-width=&quot;2536&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiVw6TrFdleEGUGtaN7Lg4xhJwTGz9mwOMSsL9WbxqNQzPkuWAR_97wrOK3GpZ97ff1uoDoraRdNF39YW2yCCgjh4uQDwsf68jyvsJCtn82PakPOjc5vdoUZrzDiGRa-ZkWV0WoPaeqHWvixI6KHMxHQReF8x42cTfCe_PSsQVm2ZkqOR6CBA=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;In the events section, we can see there is a warning which suggests that the readiness probe failed. This happens because the pod is unable to establish communication with the Kube API server. We need to override some defaults to fix this issue.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Override the metrics server command&lt;/h2&gt;&lt;p&gt;We will go and edit the metrics-server deployment. Use the following command to edit the deployment&lt;/p&gt;&lt;p&gt;&lt;b&gt;k -n kube-system edit deploy metrics-server&lt;/b&gt;&lt;/p&gt;&lt;p&gt;scroll down into the section where we define the settings for the container. Add the following lines just before the image tag.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;command:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - /metrics-server&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - --kubelet-insecure-tls&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - --kubelet-preferred-address-types=InternalIP&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Save the changes. The deployment will kill the older version of the pod and recreate a new pod for the metrics server. After making the above changes we will be able to successfully run the metrics server on our Kubernetes cluster.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Verify Metrics Server functionality&lt;/h2&gt;&lt;p&gt;Run the top command with node and pods subcommands to find out the resource usage at node &amp;amp; pods levels respectively. We can also examine the resource usage at the individual container level where there are multi-container pods by passing the --containers flag to the &lt;b&gt;&lt;i&gt;kubectl top pods --containers&lt;/i&gt;&lt;/b&gt;. Below screenshots show the output of these commands&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgM2oStf8nQ004VPekqeidb8AyvN2oBigUVng_YrOT2f9gmvZwXgvjDzJpXai8-YzYPgGLMooWyqlxJDu1BfPKbkyyKmkPYTdfJ9Cma1W2DzEPI-D_KJwMj12p8g9eUHBHD3ICjc2rA6E8Qah6-I4cKbhq-RDCAT5Y4Z4ScCdAAzkL0O_ELtg=s2543&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1067&quot; data-original-width=&quot;2543&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgM2oStf8nQ004VPekqeidb8AyvN2oBigUVng_YrOT2f9gmvZwXgvjDzJpXai8-YzYPgGLMooWyqlxJDu1BfPKbkyyKmkPYTdfJ9Cma1W2DzEPI-D_KJwMj12p8g9eUHBHD3ICjc2rA6E8Qah6-I4cKbhq-RDCAT5Y4Z4ScCdAAzkL0O_ELtg=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEig4O0AcGCrWmijBpI_Ws9jCoF21t9dd6BGO-ml193kMplenPtS-c0hunCuKJdO4Yhbz2ZZP2FbHBi9GtcZVZsSy6TYhVE3mCMz-tinJmsd5toJEsSl5IRuoEUqjFdRY5brEa_pJz8m77sMuneGZ2XM_zT1l-huOEhB_lS1frhpY6fxXeMXOw=s2533&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1065&quot; data-original-width=&quot;2533&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEig4O0AcGCrWmijBpI_Ws9jCoF21t9dd6BGO-ml193kMplenPtS-c0hunCuKJdO4Yhbz2ZZP2FbHBi9GtcZVZsSy6TYhVE3mCMz-tinJmsd5toJEsSl5IRuoEUqjFdRY5brEa_pJz8m77sMuneGZ2XM_zT1l-huOEhB_lS1frhpY6fxXeMXOw=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj9jgueNggCreCuBC5VOOOPDniaAlCY173i1vTzH_16idoKjVdh3lZXFSaGu3VctSAvh58GCxRiGW9LIFvrsNK8kT7cjh0QGrwa8lIBjGzUdqK7dixOYDXefo5hfiB9Q8vYaAErFBO8pgJY2YRBuJWoLq5rr90JKK-XruW6TgMJTMdG25XR1A=s2535&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1066&quot; data-original-width=&quot;2535&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj9jgueNggCreCuBC5VOOOPDniaAlCY173i1vTzH_16idoKjVdh3lZXFSaGu3VctSAvh58GCxRiGW9LIFvrsNK8kT7cjh0QGrwa8lIBjGzUdqK7dixOYDXefo5hfiB9Q8vYaAErFBO8pgJY2YRBuJWoLq5rr90JKK-XruW6TgMJTMdG25XR1A=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Youtube video&lt;/h2&gt;&lt;p&gt;All the steps mentioned here are demonstrated in the Youtube video.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/0UDG52REs68&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Metrics Server helps to aggregate the CPU &amp;amp; RAM related metrics across nodes in a multi-node Kubernetes cluster. Hope you found this post useful. The default settings need to be overridden to allow insecure traffic between the kubelet and the metrics server.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Until next time, Code with Passion, Strive for Excellence&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2021/12/how-to-install-metrics-server-on.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgRokqhvsWBR66nBMbwdYJVl2Nr_EXcjpEOnOtmZSHDP-RtDzpmo_4R0cHkQc0ZiDtI36z8HBJNcAIsng7nVB8b_Dt53mPjz9uO7VjdJh_p6ppdFV4obsPsRJ-Fhh3FlWYRcIcexf1BzyrXyNVD_6xS_lXFOppJSV1J9OU0VHfnCbLqzT-fcA=s72-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-4378749627588518443</guid><pubDate>Wed, 15 Dec 2021 05:21:00 +0000</pubDate><atom:updated>2021-12-14T21:21:52.942-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">kubeadm</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><title>How to bootstrap multi node Kubernetes cluster on Azure using Kubeadm</title><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;In the earlier &lt;a href=&quot;https://www.handsonarchitect.com/2021/12/how-to-prepare-for-cka-certification.html&quot;&gt;post&lt;/a&gt;, I shared my experience with preparing and passing the &lt;b&gt;Certified Kubernetes Administrator (CKA)&lt;/b&gt;. Currently, I am preparing for the &lt;b&gt;Certified Kubernetes Application Developer (CKAD)&lt;/b&gt;. In order to prepare for this certification, I need a Kubernetes cluster where I can practice. I decided to create a 3 node Kubernetes cluster on Microsoft Azure using Kubeadm. This post is a step by step process of creating a Kubernetes cluster with version 1.22 on Azure.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Bootstrap k8s cluster on Azure using kubeadm&lt;/h2&gt;&lt;p&gt;As of this writing, the &lt;a href=&quot;https://www.cncf.io/certification/ckad/&quot;&gt;CKAD certification&lt;/a&gt; is based on the &lt;a href=&quot;https://github.com/cncf/curriculum/blob/master/CKAD_Curriculum_v1.22.pdf&quot;&gt;1.22 version of Kubernetes&lt;/a&gt;. The latest stable &lt;a href=&quot;https://kubernetes.io/releases/&quot;&gt;version of Kubernetes&lt;/a&gt; is &lt;b&gt;1.23&lt;/b&gt;. So I need a way to provision the cluster with the earlier version and not the latest version of Kubernetes. That is the reason I decided to provision Ubuntu Vms on Microsoft Azure and bootstrap the Kubernetes cluster with &lt;b&gt;1.22&lt;/b&gt; version.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here are the high level steps required to set up a brand new cluster on Azure:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Provision 3 Ubuntu VMs&lt;/li&gt;&lt;li&gt;Setup Docker, kubeadm, kubectl and Kubelet on each node&lt;/li&gt;&lt;li&gt;Install Control plane components on the master node&amp;nbsp;&lt;/li&gt;&lt;li&gt;Setup pod network&lt;/li&gt;&lt;li&gt;Join worker nodes to the cluster&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Provision Ubuntu VMs on Azure&lt;/h3&gt;&lt;p&gt;There are multiple ways in which the VMs can be provisioned on Azure using the portal, Azure CLI, ARM template etc. I prefer to use Azure CLI commands to provision the VMs. Over the years I have used a bit of Powershell scripts to provision Azure resources. In this case, I have created a small Powershell script that provisions the 3 Ubuntu VMs on Azure with public IP. You can find the &lt;a href=&quot;https://github.com/NileshGule/ckad-exam-prep/blob/main/cluster-setup/k8s-azure.ps1&quot;&gt;script &lt;/a&gt;in the &lt;a href=&quot;https://github.com/NileshGule/ckad-exam-prep&quot;&gt;Github repository&lt;/a&gt;. There is also an accompanying &lt;a href=&quot;https://github.com/NileshGule/ckad-exam-prep/blob/main/cluster-setup/cluster-setup.md&quot;&gt;markdown &lt;/a&gt;file that walks through the different steps to set up the cluster. The script is parameterized and the following parameters can be overridden while executing the script&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Subscription name&amp;nbsp;&lt;/li&gt;&lt;li&gt;Resource group name&lt;/li&gt;&lt;li&gt;Resource group location&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Setup Docker, kubeadm, kubectl and Kubelet on each node&lt;/h3&gt;&lt;p&gt;Once the VMs are provisioned, we need to set up Docker, Kubeadm, Kubectl and Kubelet on each of the nodes. Using the RSA key provided during the VM provisioning, I ssh into each node and setup these prerequisites. Here is an example of how to login to the master node&lt;/p&gt;&lt;p&gt;&lt;b&gt;ssh -i ~/.ssh/id_rsa azuser@kubeadm-ckad-master.southeastasia.cloudapp.azure.com&lt;/b&gt;&lt;/p&gt;&lt;p&gt;You can replace the hostnames for worker-1 and worker-2 to login to these VMs respectively.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Install Docker and enable the daemon so that Docker is restarted if the VM is rebooted.&lt;/p&gt;&lt;p&gt;&lt;b&gt;sudo apt install docker.io -y&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;sudo systemctl enable docker&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The current version of kubeadm, kubectl and kubelet are 1.23 but we need 1.22. We specify the version in the install command as follows&lt;/p&gt;&lt;p&gt;&lt;b&gt;sudo apt install kubeadm=1.22.0-00 kubectl=1.22.0-00 kubelet=1.22.0-00 -y&lt;/b&gt;&lt;/p&gt;&lt;p&gt;With these prerequisites installed, we are ready to install the Kubernetes cluster.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Install Control plane components on the master node&amp;nbsp;&lt;/h3&gt;&lt;p&gt;Before we initialize the control plane components using Kubeadm init command, we need to make some modifications to the Docker and Kubelet settings. This is to set up systemd as the group driver. This setting has to match the container runtime and kubelet. Refer to the &lt;a href=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot;&gt;Kubernetes documentation&lt;/a&gt; for more details.&lt;/p&gt;&lt;p&gt;We override the Docker daemon configuration as shown below&lt;/p&gt;&lt;p&gt;&lt;b&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/docker/daemon.json&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;{&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &quot;exec-opts&quot;: [&quot;native.cgroupdriver=systemd&quot;],&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &quot;log-driver&quot;: &quot;json-file&quot;,&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &quot;log-opts&quot;: {&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &quot;max-size&quot;: &quot;100m&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; },&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &quot;storage-driver&quot;: &quot;overlay2&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;EOF&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This needs to be done on all the nodes. On the master node, we also override the configuration for the Kubelet. You can find the &lt;a href=&quot;https://github.com/NileshGule/ckad-exam-prep/blob/main/cluster-setup/kubeadm-config.yaml&quot;&gt;kubeadm config yaml file&lt;/a&gt; in the repo. We use the file as overridden config along with the kubeadm init command as follows&lt;/p&gt;&lt;p&gt;&lt;b&gt;sudo kubeadm init --config kubeadm-config.yaml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;With these overrides, we should have the master node configured.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Setup pod network&lt;/h3&gt;&lt;p&gt;Kubernetes does not come with built in pod network by default. We need to setup our own Container Networking Interface (CNI) based pod network so that pods can communicate with one another. CoreDNS will not start until this step is completed. We will use &lt;a href=&quot;https://www.weave.works/oss/net/&quot;&gt;weavenet&lt;/a&gt; from Weaveworks.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;kubectl apply -f &quot;https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d &#39;\n&#39;)&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Make sure that the master node is in a ready state after applying the above manifest file.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Join worker nodes to the cluster&lt;/h3&gt;&lt;div&gt;The steps are exactly the same on the worker node for installing Docker, Kubeadm, Kubectl and Kubelet. The difference lies in the Kubelet configuration override. We do not need to do it on the worker node. However, we still need to override the Docker daemon configuration.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last step is to join the worker node to the cluster. Whe the control plane is ready on the master node, the join command will be output along with the steps to copy the Kubeconfig file. Run the join command on each node and verify that all the 3 nodes are shown in ready state.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;sudo kubeadm join 172.0.0.4:6443 --token pyyfr7.j97w0dcdpsajkgjl \&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --discovery-token-ca-cert-hash sha256:e096df8d88421a8e1f1fae731e424deb21a8e055e80b0168f86f3661797fbe88&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that the values will be different in your environment for the IP, token and the ca cert hash.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Youtube video&lt;/h2&gt;&lt;div&gt;All the steps mentioned above are demonstrated in the Youtube video along with additional details like setting up the bash profile and testing the cluster with a test deployment. Watch the video to see it in action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/fr8jtDPXKgo&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;div&gt;The Kubernetes 1.22 version requires some overrides to the Docker and Kubelet configuration to bootstrap using Kubeadm. The steps demonstrated here can be used on other cloud providers to set up a similar cluster once you have the Ubuntu based VMs ready. Hope this helps in your journey to learn more about Kubernetes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until next time, Code with Passion and Strive for Excellence.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2021/12/how-to-bootstrap-multi-node-kubernetes.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/fr8jtDPXKgo/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-1225527720726943640</guid><pubDate>Sun, 12 Dec 2021 01:34:00 +0000</pubDate><atom:updated>2021-12-11T17:40:40.203-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">certified Kubernetes Administrator</category><category domain="http://www.blogger.com/atom/ns#">CKA</category><category domain="http://www.blogger.com/atom/ns#">CKA exam prep</category><category domain="http://www.blogger.com/atom/ns#">CNCF</category><title>How to prepare for CKA certification</title><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;A few days back, I cleared the Certified Kubernetes Administrator (CKA) certification. This was on the second attempt that I managed to clear the exam. It is the best online certification exam I have answered so far. This post is about my experience with the exam and how to prepare for it. I also share some information that might be helpful during the exam itself.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Exam Curriculum&lt;/h2&gt;&lt;p&gt;The exam is completely hands on. There are no multiple choice questions. We are given a set of 6 different Kubernetes clusters. Each cluster has a different configuration and the questions are related to administering the Kubernetes environment. There are five different broad areas which are assessed as shown below. These include&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Storage 10%&lt;/li&gt;&lt;li&gt;Troubleshooting 30%&lt;/li&gt;&lt;li&gt;Workloads &amp;amp; Scheduling 15%&lt;/li&gt;&lt;li&gt;Cluster Architecture, Installation &amp;amp; Configuration 25%&lt;/li&gt;&lt;li&gt;Services &amp;amp; Networking 20%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The exam is conducted by Linux Foundation in collaboration with Cloud Native Computing Foundation (CNCF). You can find out more about the exam on the &lt;a href=&quot;https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/&quot;&gt;Linux Foundation training website&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoukNGJCdLaAN9bxXni8m6wcd1XIDbDOnCD_HDI1yfkZkBIVoHQhyQK_16mX4OeBoQqRIcXLnor0dn3XQKIa9oZfwELXNO4LJGIH2rITXejwMHItRrgV3lmnTTdSEPhqh3tjYU/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;824&quot; data-original-width=&quot;1678&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoukNGJCdLaAN9bxXni8m6wcd1XIDbDOnCD_HDI1yfkZkBIVoHQhyQK_16mX4OeBoQqRIcXLnor0dn3XQKIa9oZfwELXNO4LJGIH2rITXejwMHItRrgV3lmnTTdSEPhqh3tjYU/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The duration of the test is 2 hours with 66% as the minimum passing score. The certificate is valid for 3 years. In case you are not able to clear on the first attempt, you get 1 free retake.&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;References for exam preparation&lt;/h2&gt;&lt;p&gt;I like to use multiple resources while preparing for any certifications. For CKA as well I referred to multiple sources of information. Here is a quick list of different references I used.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Kubernetes docs&lt;/h3&gt;&lt;p&gt;We are allowed to refer to the Kubernetes docs during the exam. It is like an open book test. The following links are helpful for getting started with Kubernetes and understanding the different concepts.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Kubernetes docs - https://kubernetes.io/docs/home/&lt;/li&gt;&lt;li&gt;Kubernetes.io tasks - https://kubernetes.io/docs/tasks/&lt;/li&gt;&lt;li&gt;kubectl cheatsheet - https://kubernetes.io/docs/reference/kubectl/cheatsheet/&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Learning course&lt;/h3&gt;&lt;p&gt;Along with the Kubernetes docs, I supplemented the knowledge by registering for the eLearning course. There are many courses available online. Almost every eLearning platform will have one or more course related to the CKA exam preparation. Some also offer mock test. I took the CKA exam plus the Kubernetes fundamentals bundle from &lt;a href=&quot;https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/&quot;&gt;Linux foundation&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiM3R2OjjH7lg1t5bF0S82asfzUwbVBTVgw-nxPrRM1vtVCE9bIQVg0F6q2xVG8k7rtj-w7UHHuA9m-k7t0ThyphenhyphenJ0Gfg6GO7EpVwRMd1sSmDc-4IJyyrEfRaq_Hu2NdBLNzikqI/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;494&quot; data-original-width=&quot;1011&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiM3R2OjjH7lg1t5bF0S82asfzUwbVBTVgw-nxPrRM1vtVCE9bIQVg0F6q2xVG8k7rtj-w7UHHuA9m-k7t0ThyphenhyphenJ0Gfg6GO7EpVwRMd1sSmDc-4IJyyrEfRaq_Hu2NdBLNzikqI/w400-h195/image.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/&quot;&gt;Certified Kubernetes Administratr (CKA) with practice tests&lt;/a&gt; on Udemy by Mumshad Mannambeth is also one of the most popular courses.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPszIzsrklMXpQDknGeqTKmzTr08kPX_h3gStLkfJq_dIBqD3YCfi6xkmdcySjHfAnegaWB-PGsWVy_WVBPJ_6PeoxVUcvMXvAO3X0ZhvBr-bNVNIF79JTcSIxQeYWGvSgd0hS/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;220&quot; data-original-width=&quot;810&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPszIzsrklMXpQDknGeqTKmzTr08kPX_h3gStLkfJq_dIBqD3YCfi6xkmdcySjHfAnegaWB-PGsWVy_WVBPJ_6PeoxVUcvMXvAO3X0ZhvBr-bNVNIF79JTcSIxQeYWGvSgd0hS/w400-h109/image.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Github Repos&lt;/h3&gt;&lt;p&gt;Here is a list of Github repositories I found useful&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Shubham Tatvamasi CKA - https://github.com/ShubhamTatvamasi/cka&lt;/li&gt;&lt;li&gt;Walid Shaari Kuberentes Certified Administrator - https://github.com/walidshaari/Kubernetes-Certified-Administrator&lt;/li&gt;&lt;li&gt;Nilesh Gule CKA prep - https://github.com/NileshGule/cka-prep&lt;/li&gt;&lt;li&gt;Denny Zhang kubectl cheatsheet - https://github.com/dennyzhang/cheatsheet-kubernetes-A4&lt;/li&gt;&lt;li&gt;Ahmet Alp Balkan Kubernetes network policy recipes - https://github.com/ahmetb/kubernetes-network-policy-recipes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Blogs&lt;/h3&gt;&lt;p&gt;These blog posts provide useful tips for preparation as well as exam&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Be fast with kubectl - https://faun.pub/be-fast-with-kubectl-1-18-ckad-cka-31be00acc443&lt;/li&gt;&lt;li&gt;How to nail Kubernetes certification exams - https://www.infoworld.com/article/3631108/how-to-nail-the-kubernetes-certification-exams.html&lt;/li&gt;&lt;li&gt;Codefresh Kubernetes cheatsheet - https://codefresh.io/kubernetes-tutorial/kubernetes-cheat-sheet/&lt;/li&gt;&lt;li&gt;CKA practical challenge series - https://levelup.gitconnected.com/kubernetes-cka-example-questions-practical-challenge-86318d85b4d&lt;/li&gt;&lt;li&gt;Rudi Martinsen CKA resources - https://rudimartinsen.com/cka-resources/&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Tips&amp;nbsp;&lt;/h2&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Watch out for discounts&lt;/h3&gt;&lt;p&gt;You will find discounts during Black Friday, Cyber Monday, Christmas, New Year, Diwali, Eid etc. Make use of these discounts on learning courses as well as the actual test.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Learn Imperative commands&lt;/h3&gt;&lt;p&gt;Due to the time limit of 2 hours, you need to be quick in finishing the tasks related to completing the exam. While you can copy and paste yaml from the Kubernetes documentation, editing it could take some time. The test will have specific requirements like naming Kubernetes objects with specific names and deploying them to a specific namespace. Usually, Kubernetes docs will deploy the objects in default namespace. It will save you quite some time if you know how to work with imperative commands. The output of these commands can be piped to yaml files and then you can make the required modifications instead of handcrafting the complete yaml from scratch.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Learn basic vi or nano editor commands&lt;/h3&gt;&lt;p&gt;The test environment is Linux based. If you are coming from Windows background like me, you need to be familiar with vi or nano code editors. Be familiar with editing files and command like deleting lines of code, navigating to specific lines, updating a word, saving files etc.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Practice, Practice, practice&lt;/h3&gt;&lt;p&gt;Whoever has cleared the CKA, CKAD or CKS exams will tell you that practice is the most important part of exam preparation. If you don&#39;t know how to administer the Kubernetes cluster there is no way you are going to clear this test. There could be multiple ways of achieving the same task. You need to find the one which is the most time efficient.&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Bookmark specific links&lt;/h3&gt;&lt;p&gt;Bookmarking the links from Kubernetes documentation is helpful to find the resource quickly. Instead of bookmarking the top level pages, I recommend bookmarking specific sections to avoid scrolling through the lengthy page looking for information.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Practice exam&lt;/h3&gt;&lt;p&gt;If you book the Kubernetes related certification exam after June 2021, you will have access to the practice exam from &lt;a href=&quot;https://killer.sh/cka&quot;&gt;Killer.sh&lt;/a&gt;. This exam gives you two attempts at the same test. The environment is available for 36 hours and answers along with a detailed explanation of the steps is provided to help you prepare better for real test.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Tips during the exam&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Use external monitor (recommended)&lt;/li&gt;&lt;li&gt;Enable kubectl autocompletion&lt;/li&gt;&lt;li&gt;create aliases&lt;/li&gt;&lt;li&gt;Update vimrc / editor profile&lt;/li&gt;&lt;li&gt;Time management&lt;/li&gt;&lt;ul&gt;&lt;li&gt;use copy feature instead of typing&lt;/li&gt;&lt;li&gt;use the notepad feature to make quick notes&lt;/li&gt;&lt;li&gt;flag questions for review&lt;/li&gt;&lt;li&gt;don&#39;t spend too much time on a single question&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;verify solution after task completion&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;All the topics mentioned in this post are explained in more detail in the Youtube video.
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ancR_9Q_bW8&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;CKA certification is meant to gauge the skills of a Kubernetes administrator. If you do not know how to administer the Kubernetes cluster, this certification is not for you. Practice well before taking the exam. There are 17 questions with different weights. Hope this post is helpful for those preparing for the exam in future.&lt;/p&gt;&lt;p&gt;Until next time, Code with Passion and Strive for Excellence.&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2021/12/how-to-prepare-for-cka-certification.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoukNGJCdLaAN9bxXni8m6wcd1XIDbDOnCD_HDI1yfkZkBIVoHQhyQK_16mX4OeBoQqRIcXLnor0dn3XQKIa9oZfwELXNO4LJGIH2rITXejwMHItRrgV3lmnTTdSEPhqh3tjYU/s72-c/image.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-8362133889293072587</guid><pubDate>Sun, 29 Aug 2021 01:56:00 +0000</pubDate><atom:updated>2021-08-28T18:56:04.499-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">cloudnative</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">krew</category><category domain="http://www.blogger.com/atom/ns#">kubectl</category><category domain="http://www.blogger.com/atom/ns#">kubectl plugins</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">package management</category><title>How to manage Kubectl plugins using Krew package manager</title><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Background&lt;/h3&gt;&lt;p&gt;Currently, &lt;a href=&quot;https://kubernetes.io&quot;&gt;&lt;b&gt;Kubernetes&lt;/b&gt; &lt;/a&gt;is the most popular container orchestration platform. &lt;b&gt;&lt;a href=&quot;https://kubernetes.io/docs/reference/kubectl/overview/&quot;&gt;Kubectl&lt;/a&gt;&lt;/b&gt; is the most popular command-line tool to interact with Kubernetes cluster. Kubernetes is quite extensible. In this post, we are going to see how to make use of kubectl plugin manager &lt;a href=&quot;https://krew.sigs.k8s.io/&quot;&gt;&lt;b&gt;Krew&lt;/b&gt; &lt;/a&gt;to extend the functionality of Kubectl.&lt;/p&gt;&lt;h3&gt;Krew plugin manager&lt;/h3&gt;&lt;p&gt;You might have heard about package managers such as &lt;a href=&quot;https://brew.sh/&quot;&gt;&lt;b&gt;Homebrew&lt;/b&gt; &lt;/a&gt;for Mac, &lt;b&gt;&lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt;&lt;/b&gt; or &lt;b&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows/package-manager/&quot;&gt;Winget&lt;/a&gt;&lt;/b&gt; for Windows or &lt;b&gt;&lt;a href=&quot;https://ubuntu.com/server/docs/package-management&quot;&gt;apt-get&lt;/a&gt;&lt;/b&gt; for Linux. These package managers help us to search, install, uninstall and upgrade packages or software on our operating system. Similar to the package managers, there are plugins or extensions. These help to extend the functionality of a tool or program. The most common examples of plugins or extensions are found with browsers and also Integrated Development Environment(IDE) such as Visual Studio, IntelliJ Idea, Eclipse etc.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I hope you got the context now with regards to the plugins and package manager. Coming back to the topic of this blog post, we will look at Krew which is a package manager specifically for kubectl. As a plugin manager for kubectl, Krew performs 3 main activities&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;discover kubectl plugins&lt;/li&gt;&lt;li&gt;install them on your machine&lt;/li&gt;&lt;li&gt;keep the plugins up-to-date&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;As of this writing, there are &lt;b&gt;151 kubectl plugins&lt;/b&gt; that are distributed by krew. Krew is &lt;b&gt;cross-platform&lt;/b&gt; and works on Windows, macOS and Linux. Note that there are some plugins that work only on a particular operating system.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;In the video, we can see how to install Krew and work with different plugins.&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/HZhS81MqHBk?WT.mc_id=AZ-MVP-5003170&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;h3&gt;Krew commands&lt;/h3&gt;&lt;div&gt;Here are some of the commands demonstrated in the video related to krew&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;krew install krew - install krew on the system&lt;/li&gt;&lt;li&gt;kubectl krew list - list installed plugins&lt;/li&gt;&lt;li&gt;kubectl krew search - search available plugins&lt;/li&gt;&lt;li&gt;kubectl krew install [plugin name] - install a plugin&lt;/li&gt;&lt;li&gt;kubectl krew info [plugin name] - get info about the plugin&lt;/li&gt;&lt;li&gt;kubectl krew uninstall [plugin name] - uninstall a plugin&lt;/li&gt;&lt;li&gt;kubectl krew update - update the index of plugins&lt;/li&gt;&lt;li&gt;kubectl krew upgrade - upgrade plugin version&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h3&gt;Useful Kubectl plugins&lt;/h3&gt;&lt;p&gt;In the video, these plugins are demonstrated.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;pod-lens&lt;/h4&gt;&lt;p&gt;Pod-lens plugin shows the hierarchy of different objects related to a pod such as the namespace, container, services that interact with the pods, the associated persistent volume claim (PVC), secrets etc.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQ7EvyvahyphenhyphennxRkHe5G90AzJgo-dFTdIMH7Fn80Rlox1DKq5PcVcV7mUTXSYzXPDMqmjEX_wv-LFOjdTB7r6L0bx6TEliB1YxIyXeIYS_McXaQjTf5vjqwZDJqWp60FeWsDWH8/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;693&quot; data-original-width=&quot;1464&quot; height=&quot;151&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQ7EvyvahyphenhyphennxRkHe5G90AzJgo-dFTdIMH7Fn80Rlox1DKq5PcVcV7mUTXSYzXPDMqmjEX_wv-LFOjdTB7r6L0bx6TEliB1YxIyXeIYS_McXaQjTf5vjqwZDJqWp60FeWsDWH8/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The output shows an interactive option to select the pods in a namespace. By default, it shows the summary for the selected pod and once we select an individual pod the plugin lists all the dependencies.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGcgplqkF1hm5KQt2g8ABljDrKZW-tU-1I3OlgLvLysE80yxcS9u3ZodkbKFQtuzhPecXl4wwqZRTlOOJqqL-xXItG9GdTtBFW0-iS8bpovStZPlr-LQ0UXbIC-5EytWYIw6iR/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;983&quot; data-original-width=&quot;2091&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGcgplqkF1hm5KQt2g8ABljDrKZW-tU-1I3OlgLvLysE80yxcS9u3ZodkbKFQtuzhPecXl4wwqZRTlOOJqqL-xXItG9GdTtBFW0-iS8bpovStZPlr-LQ0UXbIC-5EytWYIw6iR/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;pod-dive&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Pod dive gives a minimal view of pod. As compared to the pod-lens it shows a hierarchical view of pod along with the siblings which are pods running on the same node. This can be quite handy to know what other pods are running on the node where a specific pod is currently scheduled to run.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-O7GhsHemm-U-G414wUkWH5veBrFFtAaeHR76ze5zDjiwsZ6oV-Eux07BAMciguNDjpt4-Hq9NOXyDtcQNI99iBBPRtG8-58C6v2G8TnkvvSPZnsCHY7spRteEPrEDGMP0P3H/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;806&quot; data-original-width=&quot;1829&quot; height=&quot;141&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-O7GhsHemm-U-G414wUkWH5veBrFFtAaeHR76ze5zDjiwsZ6oV-Eux07BAMciguNDjpt4-Hq9NOXyDtcQNI99iBBPRtG8-58C6v2G8TnkvvSPZnsCHY7spRteEPrEDGMP0P3H/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;pod-inspect&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Pod inspect is somewhat similar to pod-dive. Instead of showing the hierarchy, it depicts the information in a tabular format.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtuD89vAUx1csyRt2BlI1cVdqropPD5iWuO8waqb4fXc364prlFQ2LC8-SOXi-22EKeYN793U-TtEbtxnxO2bP9UUE3_npWZgQijDPAsrHXFCu1rYBBHp9eDdBDEGwQnmWnf02/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1169&quot; data-original-width=&quot;2689&quot; height=&quot;139&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtuD89vAUx1csyRt2BlI1cVdqropPD5iWuO8waqb4fXc364prlFQ2LC8-SOXi-22EKeYN793U-TtEbtxnxO2bP9UUE3_npWZgQijDPAsrHXFCu1rYBBHp9eDdBDEGwQnmWnf02/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;images&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I particularly like the images plugin. It gives information about the container images in the Kubernetes cluster. This can be quite handy to know which all images are running in the cluster and what is the source of those images. There is also a quick summary presented at the top of the output which lists the number of namespaces, pods, containers and different versions of images.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdeS0WV40Q6Q-LdKqoJSvT2CxVisc1Pqt3Um0dZcWSbW_C0MJQJW-7kiHQXJF5YurvQYI6Z_3eGQuAYGWwpElBEAG5acr3Y3lN4PMPqcIcKSRPYo1UPhAYRSxTTTX53_aLMCci/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;577&quot; data-original-width=&quot;3659&quot; height=&quot;50&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdeS0WV40Q6Q-LdKqoJSvT2CxVisc1Pqt3Um0dZcWSbW_C0MJQJW-7kiHQXJF5YurvQYI6Z_3eGQuAYGWwpElBEAG5acr3Y3lN4PMPqcIcKSRPYo1UPhAYRSxTTTX53_aLMCci/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;rbac-view&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;clear: both; text-align: left;&quot;&gt;The rbac-view plugin gives details about the ClusterRoles and Roles.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiomzsHCdC_1kswCQNIWVBO_ipKoB6EvEMy7skKG5qES6kMbz6J3cySzcTRUGqw37TVgyIJ2bo5Wyj37XqGZYUziHstOKFUbkDCUcfvrNWtJNy6S58blmLmHQvNOHZCnS_USNgh/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1029&quot; data-original-width=&quot;2048&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiomzsHCdC_1kswCQNIWVBO_ipKoB6EvEMy7skKG5qES6kMbz6J3cySzcTRUGqw37TVgyIJ2bo5Wyj37XqGZYUziHstOKFUbkDCUcfvrNWtJNy6S58blmLmHQvNOHZCnS_USNgh/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJGuvrvVH9BV6e6_pIjgjCJLSayl2R_vbc3iAuPLgl2HfnptzptXIfiuzWJseXVX2W4S_CHmNKtrmw-mtBXWxLCpX6_mlYDqvPP09zNq5Di-uoLvaRqPcUXjF7skLE4atdFmA/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1434&quot; data-original-width=&quot;2048&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJGuvrvVH9BV6e6_pIjgjCJLSayl2R_vbc3iAuPLgl2HfnptzptXIfiuzWJseXVX2W4S_CHmNKtrmw-mtBXWxLCpX6_mlYDqvPP09zNq5Di-uoLvaRqPcUXjF7skLE4atdFmA/&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Krew is quite handy when it comes to extending the functionality of kubectl using plugins. It makes life easier for searching, installing and managing the plugins. Without Krew, it would be difficult to know what plugins are available and how to keep them updated. I demonstrated only a handful of plugins here. If you have used any other kubectl plugin and find it useful please recommend using the comments either on Youtube video or this blog post. I would love to hear feedback from viewers/readers about krew and different kubectl plugins.&lt;/p&gt;&lt;p&gt;Until next time, Code with Passion and Strive for Excellence.&lt;/p&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2021/08/how-to-manage-kubectl-plugins-using.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/HZhS81MqHBk/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-1618315024573163428</guid><pubDate>Tue, 24 Aug 2021 14:39:00 +0000</pubDate><atom:updated>2021-08-24T07:54:33.222-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DevOps</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">kubectl</category><category domain="http://www.blogger.com/atom/ns#">kubectx</category><category domain="http://www.blogger.com/atom/ns#">kubens</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">sre</category><title>Improve productivity while working with Kubernetes using kubectl power tools Kubectx and kubens</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Background&lt;/h3&gt;&lt;p&gt;If you are a DevOps or Site Reliability Engineer (SRE) engineer, most probably you will be working with multiple clusters. You might also be working with multiple namespaces across these clusters. It can be quite time consuming to switch between contexts and namespaces while working with the kubectl command-line tool.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;kubectl power tools&lt;/h3&gt;&lt;p&gt;Kubernetes is quite popular nowadays and it is very common for people to work with Kubernetes clusters using &lt;b&gt;kubectl&lt;/b&gt; as command-line interface. Most people prefer to work with kubectl instead of working with GUI based tools.&lt;/p&gt;&lt;p&gt;For SRE and DevOps engineers as well as developers who are working with multiple clusters say for example Dev, staging / UAT and Production environments, they need to switch the context. In many enterprises, the Kubernetes clusters are shared by different teams. In order to isolate workloads, kubernetes &lt;b&gt;namespaces &lt;/b&gt;are used. You need to provide the namespace everytime any command is executed.&lt;/p&gt;&lt;p&gt;In such scenarios switching between namespaces on the same cluster and also switch the whole context to point to a different cluster can be a cumbersome task. That is where I came across two power tools while working with kubectl, &lt;b&gt;kubectx &lt;/b&gt;and &lt;b&gt;kubens&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;In the video, we can see how to install kubectx and kubens along with Fuzzy Search (FZF) tool for interactive mode.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/nGznJeOH4ws?WT.mc_id=AZ-MVP-5003170&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Using kubectx and kubens helps to improve productivity while working with kubectl. We don&#39;t need to remember lengthy context names and also names of each and every namespace in the cluster. Get more productive by using these power tools.&lt;/p&gt;&lt;p&gt;Until next time, Code with Passion and Strive for Excellence.&lt;/p&gt;&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2021/08/improve-productivity-while-working-with.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/nGznJeOH4ws/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-5278029340166391386</guid><pubDate>Fri, 16 Oct 2020 14:45:00 +0000</pubDate><atom:updated>2021-08-24T07:53:32.813-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">Azure Data Solution Exam</category><category domain="http://www.blogger.com/atom/ns#">certification</category><category domain="http://www.blogger.com/atom/ns#">DP-201</category><title>DP-201 Designing an Azure Data Solution Exam Preparation Guide</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;As part of Azure role based certifications, DP-201 Designing an Azure Data Solution certification exam is the 2nd in the list to get the Azure Data Engineer Associate certificate. I had cleared &lt;a href=&quot;https://www.handsonarchitect.com/2020/08/dp-200-implementing-azure-data-solution.html&quot;&gt;DP-200 exam&lt;/a&gt; earlier. Yesterday, I cleared DP-201 and achieved the Associate certification.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;DP-201 Designing an Azure Data Solution Exam&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;This exam focusses on assessing the candidate in the following areas:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Design Azure Data Solutions (40-45%)&lt;/li&gt;&lt;li&gt;Design Data Processing Solutions (25-30%)&lt;/li&gt;&lt;li&gt;Design for Data Security and compliance (25-30%)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The primary skills are tested against the following core services from Azure&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Azure Cosmos DB&lt;/li&gt;&lt;li&gt;Azure Synapse Analytics&lt;/li&gt;&lt;li&gt;Azure Data Lake Storage&lt;/li&gt;&lt;li&gt;Azure Data Factory&lt;/li&gt;&lt;li&gt;Azure Stream Analytics&lt;/li&gt;&lt;li&gt;Azure Databricks&lt;/li&gt;&lt;li&gt;Azure Blob Storage&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Note: There are changes to the contents of the exam as of 31st July 2020. One notable &lt;b&gt;exclusion&lt;/b&gt; from the list of services is the &lt;b&gt;Azure SQL Database.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The test focusses on assessing the design skills of the candidate. It is not important to know so much about the code. We need to make the right design choices when selecting the services. Design options related to batch processing and stream processing are important. We also need to understand the different options related to disaster recovery and high availability.&lt;/p&gt;&lt;p&gt;All the questions are multiple-choice questions (MCQ). There are&amp;nbsp; 2 case studies at the beginning of the test consisting of 9 questions. We can go back and forth on the questions within each case study and revise the answers. Once we mark the case studies as completed, we cannot go back and change the answers. The two case studies are followed by 30 questions. These questions are related to different services. Finally, there is one more case study with 3 questions towards the end. The trick here is that once a question answered, we cannot go back online the 2 earlier case studies.&lt;/p&gt;&lt;p&gt;Refer to the below Youtube video for more details about how I prepared for the test&lt;/p&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/6T8GG38A1BA&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Visual Notes taking&lt;/h3&gt;&lt;div&gt;During the preparations, I also started experimenting with the visual notes taking approach. Instead of taking notes in the plain text, I started to make them more visual. Here are some examples of this approach.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxxwHkKmSqDc-YKJhUQHvsVahvPFUnuJpkEG1fShbjNRJToalQKU6Wt27RnBdQ54srYnvVMJ56FemH4wS_3_WtVpxF_DCbjYhnzX9oX1hcZv-F25YAlY9faWkHu-JTtmKFocN/s2048/Cosmos+DB+API.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1307&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxxwHkKmSqDc-YKJhUQHvsVahvPFUnuJpkEG1fShbjNRJToalQKU6Wt27RnBdQ54srYnvVMJ56FemH4wS_3_WtVpxF_DCbjYhnzX9oX1hcZv-F25YAlY9faWkHu-JTtmKFocN/s320/Cosmos+DB+API.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8ut9zhqmmn7OCoLbIAHYjBMe20GPphwblNM__fYiPSnsszVEPbvBHm0PZ9D_ZsLYj96nsz_2rSMSB0bQJA9ds91P-RMg8rYZlXEtBttOdwsq1ifsFycm-arwx4IVVw8VTHLSG/s2048/cosmos+DB+consistency.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1453&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8ut9zhqmmn7OCoLbIAHYjBMe20GPphwblNM__fYiPSnsszVEPbvBHm0PZ9D_ZsLYj96nsz_2rSMSB0bQJA9ds91P-RMg8rYZlXEtBttOdwsq1ifsFycm-arwx4IVVw8VTHLSG/s320/cosmos+DB+consistency.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmVjjOZfgAeVOJD3GsIaOlieKiAAR0GniDBOcYgfx-KJErbknvQxcBNl3_buoo56vLxTyGK_NoPuFXNyHZot3aVX1-9safGAs6Vo8vsW0mzZYbzRhXFeo0kDia9ZujETrDB5-h/s2048/sas+types.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1534&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmVjjOZfgAeVOJD3GsIaOlieKiAAR0GniDBOcYgfx-KJErbknvQxcBNl3_buoo56vLxTyGK_NoPuFXNyHZot3aVX1-9safGAs6Vo8vsW0mzZYbzRhXFeo0kDia9ZujETrDB5-h/s320/sas+types.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IFtRFvealQNB7U721UTfG1gNCApIfEqfhrQ9_EfyhAtSXn6EBn2iyEWjVcAf-a8lEebGI2bTUPBtHakh_UeUCvSB3WYG5qtRhuHXHOHks_Cux6yd7FnDlH9tgkYfyMqW5B9J/s1744/Security+best+practices.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1655&quot; data-original-width=&quot;1744&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IFtRFvealQNB7U721UTfG1gNCApIfEqfhrQ9_EfyhAtSXn6EBn2iyEWjVcAf-a8lEebGI2bTUPBtHakh_UeUCvSB3WYG5qtRhuHXHOHks_Cux6yd7FnDlH9tgkYfyMqW5B9J/s320/Security+best+practices.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;I have published these visual notes to a &lt;a href=&quot;https://github.com/NileshGule/exam-prep-notes&quot;&gt;GitHub repository&lt;/a&gt; in PDF as well as OneNote format. I hope people will find it useful in their preparations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;I found this test easier compared to DP-200. The focus of this test is on design skills and its important to understand the differences in different options available with the services. I hope you find this useful.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;until next time, Code with &lt;b&gt;&lt;u&gt;Passion&lt;/u&gt;&lt;/b&gt; and Strive for &lt;b&gt;&lt;u&gt;Excellence&lt;/u&gt;&lt;/b&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/10/dp-201-designing-azure-data-solution.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/6T8GG38A1BA/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-8420222642068050557</guid><pubDate>Sun, 11 Oct 2020 14:19:00 +0000</pubDate><atom:updated>2021-08-24T07:54:17.341-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DevOps</category><category domain="http://www.blogger.com/atom/ns#">github actions</category><category domain="http://www.blogger.com/atom/ns#">hactoberfest</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><title>Hacktoberfest DevOps with GitHub Actions</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;In the month of October, DigitalOcean in partnership with Intel and Dev are celebrating the Hacktoberfest event across the globe. This is an annual event which aims to increase awareness of open source in communities all over the world. There are meetups and events scheduled all over in this regards. If you are an open-source contributor, you can get a free t-shirt by registering for the event and submitting at least 4 pull requests during the month of October. You can find out more about the event from the &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;website&lt;/a&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;DevOps with GitHub Actions&lt;/h3&gt;&lt;p&gt;The Hacktoberfest Singapore meetup was scheduled for &lt;a href=&quot;https://www.meetup.com/NET-Developers-SG/events/273366999/&quot;&gt;Saturday 10 October&lt;/a&gt;&lt;a href=&quot;https://www.meetup.com/NET-Developers-SG/events/273366999/&quot;&gt; &lt;/a&gt;with half-day event. I had the opportunity to present a topic on building DevOps pipelines with &lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions&quot;&gt;GitHub Actions&lt;/a&gt;. GitHub Actions allows us to automate workflows when certain events trigger on our repository.&lt;/p&gt;&lt;p&gt;In this session, we demonstrated 3 different scenarios&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;A simple workflow for linting codebase with &lt;a href=&quot;https://github.com/github/super-linter&quot;&gt;Github Superlinter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A workflow involving third party integration with &lt;a href=&quot;https://sonarcloud.io/&quot;&gt;SonarCloud&lt;/a&gt; for static code analysis&lt;/li&gt;&lt;li&gt;CI CD workflow for deploying a containerized app with &lt;b&gt;Azure Container Registry (ACR)&lt;/b&gt; and &lt;b&gt;Azure Kubernetes Service (AKS)&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The recording of the session is available on YouTube&lt;/p&gt;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/sFvCj62wmWU?start=6732&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Slides&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;The slides used during the session are available online&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Slideshare -&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;https://www.slideshare.net/nileshgule/devops-with-github-actions&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.72px; font-weight: 400;&quot;&gt;Speakerdeck - https://speakerdeck.com/nileshgule/devops-with-github-actions&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Source code&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;The source code of the demo used during the session is available on the &lt;a href=&quot;https://github.com/NileshGule/hoctoberfest2020&quot;&gt;GitHub repository&lt;/a&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;GitHub Actions provides an excellent option for automating workflows to run specific tasks when some event like code push or a release is triggered on the repository. The marketplace offers an opportunity for third-party vendors to provide actions for their products to integrate into automated workflows on repositories.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Until next time, Code with &lt;b&gt;&lt;u&gt;Passion&lt;/u&gt;&lt;/b&gt; and Strive for &lt;b&gt;&lt;u&gt;Excellence&lt;/u&gt;&lt;/b&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/10/hacktoberfest-devops-with-github-actions.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/sFvCj62wmWU/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-3564108305129525763</guid><pubDate>Fri, 18 Sep 2020 12:07:00 +0000</pubDate><atom:updated>2021-08-24T07:56:08.713-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ACI</category><category domain="http://www.blogger.com/atom/ns#">AKS</category><category domain="http://www.blogger.com/atom/ns#">azure container instances</category><category domain="http://www.blogger.com/atom/ns#">Azure Kubernetes Service</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">k8s</category><category domain="http://www.blogger.com/atom/ns#">KEDA</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><category domain="http://www.blogger.com/atom/ns#">RabbitMQ</category><category domain="http://www.blogger.com/atom/ns#">serverless</category><title>Scaling .Net containers with Azure Kubernetes Service and Serverless ACI</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;Following my virtual session to the &lt;a href=&quot;https://youtu.be/9_rxGygUH1Y?WT.mc_id=AZ-MVP-5003170&quot;&gt;Microsoft Cloud South Florida user group last week&lt;/a&gt;, I was invited to deliver a similar virtual event. This time it was for Dear Azure user group in India. I am thankful to Kasam Shaikh the organizer of this event. The event was scheduled for Sunday afternoon. Given the relaxed time of 12:30 PM IST, we decided to have a 2 hours session. This was the first time I was present to the vibrant community in India.&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Scaling .Net Containers with AKS and Serverless ACI&lt;/h3&gt;&lt;p&gt;The theme of the session is similar to the last one. The main difference here was the duration. We scheduled it for 2 hours and that provided me with an opportunity to do a deep dive on some of the topics. We started off by looking at the components of the application consisting of a Web API as Producer for RabbitMQ. Then we looked at the consumer which is built as .Net Core executable. We went through the steps of building Docker images using Docker compose. We also looked at the benefits of Docker.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS691UaR8vPkj9PSEFJ9LANIvQxzmFOGs8ZtIKi0M7WDKwY497nUuxr-Sp7H06NSJd76nLUajWdS-_mjtT_LaU0bos9DlqwfsopSymyEcF_koMSA0zS_HlrwUV_bTk8hyYrkTJ/s2048/Docker+benefits.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1070&quot; data-original-width=&quot;2048&quot; height=&quot;261&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS691UaR8vPkj9PSEFJ9LANIvQxzmFOGs8ZtIKi0M7WDKwY497nUuxr-Sp7H06NSJd76nLUajWdS-_mjtT_LaU0bos9DlqwfsopSymyEcF_koMSA0zS_HlrwUV_bTk8hyYrkTJ/w500-h261/Docker+benefits.PNG&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Next, we looked at private and public container registries. Kubernetes was our next logical step and we started by looking at the main features of Kubernetes.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7OTDSHCXVPu5QFwLnWO6Bn4E7K2dDdVClUpnfbLkJd6MHqQNBCwc2saMNLFaEeqkzYiQq0NfzqSZKb4c4_nf6iTWfrZ9S-yOJE7PSVbXmT7NeU69NYOoVe8KkO-8F-Au-OqQZ/s2048/Kubernetes+features.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7OTDSHCXVPu5QFwLnWO6Bn4E7K2dDdVClUpnfbLkJd6MHqQNBCwc2saMNLFaEeqkzYiQq0NfzqSZKb4c4_nf6iTWfrZ9S-yOJE7PSVbXmT7NeU69NYOoVe8KkO-8F-Au-OqQZ/s320/Kubernetes+features.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;RabbitMQ and KEDA were installed on Kubernetes cluster and the demo application was deployed using Kubernetes manifest files. In the closing stages of the demo, we looked at different options to scale a Kubernetes cluster. These included the manual scaling, Horizontal Pod Autoscaling (HPA) based on CPU or RAM utilization. There are cases when we need to scale not just on the resource usage but on some external factors. This is where we explored Kubernetes based Event Driven Autoscaling (KEDA). KEDA allows us to scale based on events.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Slight glitch&lt;/h3&gt;&lt;div&gt;Usually, due to the time constraint, I prepare the demo environment beforehand and show the relevant bits during the live demo. This time since we had 2 hours at our disposal, I created the AKS clusters right at the start of the session. Most of the things which I wanted to show worked fine, except for a scenario of scaling onto the serverless Azure Container Instances (ACI). My backup cluster also had some problem. Lesson learnt that next time if I do a live cluster setup, the backup cluster needs to be tested thoroughly. I have done a similar demo at least 8-10 times in different forums. Maybe I became a bit overconfident that it would work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;YouTube video recording&lt;/h3&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The recording of this session is available on YouTube&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ib-Jpfg6Iuk&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;Slides&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The slides used during the session are available online&lt;br /&gt;Slideshare -&amp;nbsp;&lt;a href=&quot;https://www.slideshare.net/nileshgule/scaling-containers-with-aks-and-aci&quot;&gt;https://www.slideshare.net/nileshgule/scaling-containers-with-aks-and-aci&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Speakerdeck -&amp;nbsp;&lt;a href=&quot;https://speakerdeck.com/nileshgule/scaling-containers-with-aks-and-aci&quot;&gt;https://speakerdeck.com/nileshgule/scaling-containers-with-aks-and-aci&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;It was a wonderful experience to present to the vibrant developer community in India. The questions which were asked during the session prompted me to make changes to my demo which will be helpful for the future sessions.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Until next time, Code with &lt;u&gt;Passion&lt;/u&gt; and Strive for &lt;u&gt;Excellence&lt;/u&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/09/scaling-net-containers-with-azure.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS691UaR8vPkj9PSEFJ9LANIvQxzmFOGs8ZtIKi0M7WDKwY497nUuxr-Sp7H06NSJd76nLUajWdS-_mjtT_LaU0bos9DlqwfsopSymyEcF_koMSA0zS_HlrwUV_bTk8hyYrkTJ/s72-w500-h261-c/Docker+benefits.PNG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-3691154080511361492</guid><pubDate>Mon, 07 Sep 2020 16:05:00 +0000</pubDate><atom:updated>2021-08-24T07:56:57.014-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Code Quality</category><category domain="http://www.blogger.com/atom/ns#">DevOps</category><category domain="http://www.blogger.com/atom/ns#">github actions</category><category domain="http://www.blogger.com/atom/ns#">sonar cloud</category><title>Automate SonarCloud code scans using GitHub Actions</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;In an earlier &lt;a href=&quot;https://www.handsonarchitect.com/2020/08/how-to-improve-code-quality-using.html?WT.mc_id=DOP-MVP-5003170&quot;&gt;post &lt;/a&gt;/ YouTube &lt;a href=&quot;https://youtu.be/7UsMweLh-ms?WT.mc_id=DOP-MVP-5003170&quot;&gt;video&lt;/a&gt;, I had demonstrated how to automate code lining process using the GitHub Super Linter and GitHub action. In this post, we will explore how to use GitHub actions to automate the static code analysis using SonarCloud.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;SonarCloud&lt;/h3&gt;&lt;p&gt;You might have heard about SonarQube. It offers scanners for different programming languages. &lt;a href=&quot;https://sonarcloud.io/&quot;&gt;SonarCloud &lt;/a&gt;is cloud service which scans codebases for bugs, vulnerabilities and code smells. At the point of this writing, there are 24 mainstream programming languages supported which include:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;C#&lt;/li&gt;&lt;li&gt;Java&lt;/li&gt;&lt;li&gt;Python&lt;/li&gt;&lt;li&gt;JavaScript&lt;/li&gt;&lt;li&gt;TypeScript&lt;/li&gt;&lt;li&gt;Go&lt;/li&gt;&lt;li&gt;Kotlin and others&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;SonarCloud provides detailed analysis across multiple dimensions of the code. These are helpful in identifying common mistakes done by developers and ensure that the code is of high quality. SonarCloud will also give an indicator of how much time is required to fix all the reported issues and remove the technical debt. The different dimensions are&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Reliability&lt;/li&gt;&lt;li&gt;Security&lt;/li&gt;&lt;li&gt;Maintainability&lt;/li&gt;&lt;li&gt;Coverage&lt;/li&gt;&lt;li&gt;Duplications&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SonarCloud also has Quality Gates and Quality Profiles. Quality profiles can be used to refine the rules which are applied to the code while scanning the files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Automate code scan with GitHub action&lt;/h3&gt;&lt;div&gt;In the video, we can see how to use GitHub Action to automate the code scan using SonarCloud GitHub Action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/zDkcffDsi24?WT.mc_id=DOP-MVP-5003170&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;SonarCloud offers a very good analysis of codebase by performing static code analysis. The ruleset can be customized as per the language and also based on organization policies. GitHub Actions make it very easy to automate the workflows. Combining the power of GitHub action and the SonarCloud we get an up to date insights about our code in an automated manner. I hope you found this post useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Until next time, Code with Passion and Strive for Excellence&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/09/automate-sonarcloud-code-scans-using.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/zDkcffDsi24/default.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-1440434411128220711</guid><pubDate>Sat, 29 Aug 2020 04:55:00 +0000</pubDate><atom:updated>2020-08-28T22:01:41.594-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net core</category><category domain="http://www.blogger.com/atom/ns#">ACR</category><category domain="http://www.blogger.com/atom/ns#">Azure Kubernetes Service</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Docker Compose</category><category domain="http://www.blogger.com/atom/ns#">KEDA</category><category domain="http://www.blogger.com/atom/ns#">Kubernetes</category><title>Scaling .Net Core containers with Event Driven Workloads</title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;Background&amp;nbsp;&lt;/h3&gt;&lt;div&gt;Due to the COVID-19 pandemic, many of the developer communities and user groups have been forced to conduct their regular session in a virtual manner. This has provided a great opportunity for organizers and speakers from across the globe to speak at community events and rope in speakers from different parts of the world. This might not have been possible in case of physical events.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have been speaking at the local community events in Singapore as well as other parts of Asia for the past 3-4 years. Recently, I got opportunity to speak at the virtual meetup across the globe for the &lt;b&gt;Microsoft Cloud South Florida&lt;/b&gt; user group.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;It started off with a Tweet from &lt;b&gt;&lt;a href=&quot;https://twitter.com/julielerman&quot;&gt;Julie Larman&lt;/a&gt;&lt;/b&gt; that she is getting multiple requests for speaking opportunities but could not fulfil all. She suggested the organizers can extend the opportunities to others who might be interested and available to speak. I thought it was a good opportunity and replied to her tweet. The thread got picked up by &lt;b&gt;&lt;a href=&quot;https://twitter.com/davenoderer&quot;&gt;Dave Noderer&lt;/a&gt;&lt;/b&gt; and we managed to set up a virtual meetup in no time.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Scaling .Net Core Containers with Event Driven Worksloads&amp;nbsp;&lt;/h3&gt;&lt;div&gt;I have presented the topic of autoscaling container using KEDA on multiple occasions in the past for different meetups and events in Asia. I also have a &lt;a href=&quot;https://www.youtube.com/playlist?list=PLOPXEdTIaFO8D73ufHmoGCauRRhCy5uBh&quot;&gt;3 part series&lt;/a&gt; on my recently launched YouTube channel about this. The duration of the meetup was 90 minutes and that provided me with an opportunity to do a deep dive on some of the topics which are not possible in a 45 minutes or 1 hour session.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The application I used in the demo is a dummy events management application called Tech Talks. There is a ASP.Net Core WebAPI which exposes a method to generate random events. These events are pumped into a RabbitMQ queue. We have a .Net Core exe which consumes these messages in a batch. It is the consumer which we use to showcase the autoscaling capabilities using an upcoming project called &lt;b&gt;Kubernetes-based Event Driven Autoscaling (KEDA)&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbt63l9HFsj9uH5J8C1cK3-gLh-F5A9-gWTTzMfcqkqfLFatl75aI0SRTZ0F9CFMTPfmWZJHT2B2RIMVb8E1YrUpOr1myZlPi8f3VrpPhoUYhxX_ZWaBTzNYSSTx_aj-FzpDT8/s2048/Demo+setup.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1169&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbt63l9HFsj9uH5J8C1cK3-gLh-F5A9-gWTTzMfcqkqfLFatl75aI0SRTZ0F9CFMTPfmWZJHT2B2RIMVb8E1YrUpOr1myZlPi8f3VrpPhoUYhxX_ZWaBTzNYSSTx_aj-FzpDT8/s640/Demo+setup.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During the session, I demonstrated the following features&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Containerize .Net Core Web API and executable using Dockerfile&amp;nbsp;&lt;/li&gt;&lt;li&gt;Build and Publish docker images to a private container registry (Azure Container Registry)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Use Docker-compose to multiple services&lt;/li&gt;&lt;li&gt;Use YAML files to describe Kubernetes deployments&amp;nbsp;&lt;/li&gt;&lt;li&gt;Provision AKS cluster using an idempotent Powershell script&amp;nbsp;&lt;/li&gt;&lt;li&gt;Deploy RabbitMQ cluster using Helm charts&amp;nbsp;&lt;/li&gt;&lt;li&gt;Deploy application containers to Kubernetes&amp;nbsp;&lt;/li&gt;&lt;li&gt;Auto scale RabbitMQ consumer using KEDA&amp;nbsp;&lt;/li&gt;&lt;li&gt;Extend the scaling capabilities to serverless Azure Container Instances (ACI) using Virtual Node
&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the end of the session, we have expanded the containers to be auto scaled on to serverless Azure Container Instances (ACI) using Virtual Node.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMddXRgdygM9CxVy8UnRQKebOX6jFk4Nyz8-fDYz0m3B6VcmF8919kI0u-pogtRvA11ztPwE64_6WZ_5kH3EORhmdmpxLRi9DHzg-1jshZ_Ipi5BDI6pHJo-1Y2kn5lGmhgWY/s2048/rabbit+MQ+virtual+node.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1336&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMddXRgdygM9CxVy8UnRQKebOX6jFk4Nyz8-fDYz0m3B6VcmF8919kI0u-pogtRvA11ztPwE64_6WZ_5kH3EORhmdmpxLRi9DHzg-1jshZ_Ipi5BDI6pHJo-1Y2kn5lGmhgWY/s640/rabbit+MQ+virtual+node.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;YouTube video recording&lt;/h3&gt;&lt;div&gt;The recording of this talk is now available on YouTube&lt;br /&gt;
  &lt;iframe allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/9_rxGygUH1Y&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Slides&lt;/h3&gt;&lt;div&gt;The slides used during the session are available on&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Slideshare -&amp;nbsp;&lt;a href=&quot;https://www.slideshare.net/nileshgule/scaling-containers-with-event-driven-workloads&quot; style=&quot;font-family: calibri; font-size: 18pt;&quot;&gt;https://www.slideshare.net/nileshgule/scaling-containers-with-event-driven-workloads&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Speakerdeck -&amp;nbsp;&lt;a href=&quot;https://speakerdeck.com/nileshgule/scaling-net-core-containers-with-event-driven-workloads&quot; style=&quot;font-family: calibri; font-size: 18pt;&quot;&gt;https://speakerdeck.com/nileshgule/scaling-net-core-containers-with-event-driven-workloads&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Source code&lt;/h3&gt;&lt;div&gt;The source code is available in GitHub &lt;a href=&quot;https://github.com/NileshGule/pd-tech-fest-2019&quot;&gt;repository&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;The session provided me an opportunity to speak for the first time across the globe. I like to attend in-person events as it helps a great deal to network with people. In a virtual event sometimes you feel like you are talking to a screen. It is difficult to gauge the reaction of the audience in virtual event.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the benefits of a virtual event is that we can focus more on the content delivery without getting distracted which could sometimes happen in a in-person event. Depending on which platform or communication tool is used (YouTube live stream / MS Teams/ Zoom etc) the question and answers can be handled separately. Aonther great advantage of virtual event is the ability to record it and share it on platforms like YouTube. People who could not attend due to timezone differences or due to emergencies can find these recording useful.&lt;br /&gt;&lt;br /&gt;Until next time, Code with &lt;u&gt;Passion&lt;/u&gt; and Strive for &lt;u&gt;Excellence&lt;/u&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/08/scaling-net-core-containers-with-event.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbt63l9HFsj9uH5J8C1cK3-gLh-F5A9-gWTTzMfcqkqfLFatl75aI0SRTZ0F9CFMTPfmWZJHT2B2RIMVb8E1YrUpOr1myZlPi8f3VrpPhoUYhxX_ZWaBTzNYSSTx_aj-FzpDT8/s72-c/Demo+setup.PNG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-5094235290632885474</guid><pubDate>Sat, 22 Aug 2020 03:41:00 +0000</pubDate><atom:updated>2020-08-21T20:47:50.405-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Code Quality</category><category domain="http://www.blogger.com/atom/ns#">DevOps</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio Code</category><category domain="http://www.blogger.com/atom/ns#">VS Code</category><title>How to improve code quality using GitHub Super Linter </title><description>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h3&gt;&lt;p&gt;As developers, we work on multiple programming languages like C#, Java, Python, JavaScript, SQL, etc. Apart from the mainstream programming languages, we also work with different file types like XML, JSON, YAML. Each of these languages and file types has their own styles and conventions. As a language or a format becomes mature, there are standards and best practices which get developed over a period of time.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Nowadays, many developers are full stack developers or polyglot developers. As part of the Microservices style of development, they might work on the web or Javascript based front end, a Java, C#, Go, Python or some other programming language based middle tier. And then some SQL or NoSQL backend. Each of these components can use a different language. And each language will have its own style. It can be very difficult for new or even experienced developers to follow all the best practices for all the languages at the same time.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Linter to the rescue&lt;/h3&gt;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Lint_(software)&quot;&gt;linter &lt;/a&gt;is a software or an add on which will help to identify issues in a file with respect to the rules or conventions. It is a static code analysis tool which helps to automate the process of validating common errors, bugs, style-related errors. Some of the Integrated Development Environments have built-in linters for the common programming languages. Visual Studio, for example, can suggest changes to classes and methods. External tools and extensions like Resharper can also help. One of the most popular code editors, Visual Studio Code has many extensions which are specific to a particular language like&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint&quot;&gt;ESLint for JavaScript&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=henriiik.docker-linter&quot;&gt;Docker&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=faustinoaq.javac-linter&quot;&gt;Java&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I tried doing a search for Linter in the Visual Studio Code Marketplace and as of this writing, there are more than 200 linters available.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXj6_XaXwvoFuzG5rAfskLQ_X3hPWnHS_FgNT9s_rSm_HiSAtEVGsRDs9jTYxAwCfnCJeOMU8pTuYsTLhwMXxwul6IaRILwrUcENadH_wTixpIKw_nc9cuL-0_34Zlo9Gug4n/s2048/VS+code+linters.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1430&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXj6_XaXwvoFuzG5rAfskLQ_X3hPWnHS_FgNT9s_rSm_HiSAtEVGsRDs9jTYxAwCfnCJeOMU8pTuYsTLhwMXxwul6IaRILwrUcENadH_wTixpIKw_nc9cuL-0_34Zlo9Gug4n/s640/VS+code+linters.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All these linters help in making sure an individual developer can follow the rules and styles correctly on their development environment. Things get tricky when we work in teams and multiple developers are working on the same project. Each developer can have their personal opinion. To avoid having multiple styles for the same codebase, it is necessary to standardize the rules across the whole team.&amp;nbsp;&lt;/p&gt;&lt;p&gt;These rules can then be automatically checked as part of the automated build process. All the modern day Continuous Integration (CI) systems like Azure DevOps, Jenkins, Bamboo, TeamCity, TavisCI etc. allow us to perform static code analysis.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;GitHub Super Linter&lt;/h3&gt;Github recently &lt;a href=&quot;https://github.blog/2020-06-18-introducing-github-super-linter-one-linter-to-rule-them-all/&quot;&gt;announced &lt;/a&gt;what they call the &lt;a href=&quot;https://github.com/github/super-linter&quot;&gt;Super Linter&lt;/a&gt;. GitHub also allows us to trigger certain actions based on some conditions like source code checkin into a master or main branch or a feature branch. These are called GitHub Actions.&lt;p&gt;&lt;/p&gt;&lt;p&gt;The Super Linter is a collection of more than 30 linters for some of the most commonly used programming languages. With one GitHub action, we can scan the whole codebase and identify any issues in a single go. If the team has its own set of predefined rules for a particular language, we can customize the defaults to use the team or organizational rules.&lt;/p&gt;&lt;p&gt;In the video below, we can see how GitHub Super Linter can be configured for your repository and triggered using GitHub Action.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/7UsMweLh-ms&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h3&gt;&lt;div&gt;As demonstrated in the video, GitHub Super Linter can be a great tool for automating the static code analysis. It can easily help to standardize coding practices across multiple languages for teams and organizations. It is very easy to set up and can help a great deal in DevOps practices. Hope you find this useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until next time, &lt;b&gt;Code&lt;/b&gt; with &lt;b&gt;Passion&lt;/b&gt; and &lt;b&gt;Strive&lt;/b&gt; for &lt;b&gt;Excellence&lt;/b&gt;.&lt;/div&gt;</description><link>http://www.handsonarchitect.com/2020/08/how-to-improve-code-quality-using.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXj6_XaXwvoFuzG5rAfskLQ_X3hPWnHS_FgNT9s_rSm_HiSAtEVGsRDs9jTYxAwCfnCJeOMU8pTuYsTLhwMXxwul6IaRILwrUcENadH_wTixpIKw_nc9cuL-0_34Zlo9Gug4n/s72-c/VS+code+linters.PNG" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-10435215.post-5157515591846317669</guid><pubDate>Mon, 10 Aug 2020 04:12:00 +0000</pubDate><atom:updated>2021-08-24T07:57:18.913-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">certification</category><category domain="http://www.blogger.com/atom/ns#">DP-200</category><title>DP-200 Implementing an Azure Data Solution Exam preparation guide</title><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Background&lt;/h2&gt;&lt;p&gt;Most of us are working from home due to the ongoing COVID-19 situation. This has saved some time in travelling for me personally. I managed to utilize some of this time to prepare for Azure Role-based certifications. In the past 3 months, I managed to clear &lt;a href=&quot;https://docs.microsoft.com/en-us/learn/certifications/exams/az-301&quot;&gt;AZ-301&lt;/a&gt;, &lt;a href=&quot;https://docs.microsoft.com/en-us/learn/certifications/exams/az-400&quot;&gt;AZ-400&lt;/a&gt; and &lt;a href=&quot;https://docs.microsoft.com/en-us/learn/certifications/exams/dp-200&quot;&gt;DP-200&lt;/a&gt; certification exams. Many people have asked me about how did I go about preparing for these certifications. This post and the accompanying YouTube video is about my preparation for the DP-200 exam.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;DP-200 Implementing an Azure Data Solution Exam&lt;/h2&gt;&lt;p&gt;In case you are new to Microsoft Role-based certifications, have a look at this excellent post by &lt;a href=&quot;https://www.thomasmaurer.ch/2019/08/how-to-pick-the-right-azure-exam-certification-path/&quot;&gt;Thomas Maurer about selecting the right exam&lt;/a&gt;. The DP 200 exam is focused on Data Engineer role and falls under the Data &amp;amp; AI category of tests. It is for the Associate level. I have been part of Data Engineering teams since late 2015. I have worked with Big Data technologies on Hortonworks Data Platform and also on Microsoft Azure. The exam consists of 3 main areas:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Implement data storage solutions (40-50%)&lt;/li&gt;&lt;li&gt;Manage and develop data processing (25-30%)&lt;/li&gt;&lt;li&gt;Monitor and optimize data solutions (30-35%)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Your skills are tested against following core services from Microsoft Azure:&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Azure Data Lake Storage (ADLS) Gen 2&lt;/li&gt;&lt;li&gt;Azure Data Factory&lt;/li&gt;&lt;li&gt;Azure Databricks&lt;/li&gt;&lt;li&gt;Azure SQL&lt;/li&gt;&lt;li&gt;Cosmos DB&lt;/li&gt;&lt;li&gt;Azure Stream Analytics&lt;/li&gt;&lt;li&gt;Azure Key Vault&lt;/li&gt;&lt;li&gt;Azure Monitor&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Since the test is focused towards implementing the Data solutions, we need to know the different options available for securing, managing, integrating and monitoring the solutions. I used the &lt;a href=&quot;https://acloud.guru/learn/b73d3b5f-cd39-477e-8636-7f7258e68d0&quot;&gt;Linux Academy course for DP 200 &lt;/a&gt;to prepare for this exam. If you are new to Azure I recommend going through the MS Learn paths related to DP 200. Following learning paths are available on MS Learn&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/azure-for-the-data-engineer/&quot;&gt;Azure for the Data Engineer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/store-data-in-azure/&quot;&gt;Store Data in Azure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/work-with-relational-data-in-azure/&quot;&gt;Work with relational data in Azure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/work-with-nosql-data-in-azure-cosmos-db/&quot;&gt;Work with NoSQL data in Azure Cosmos DB&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/data-processing-with-azure-adls/&quot;&gt;Large Scale Data Processing with Azure Data Lake Gen 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/learn/paths/implement-data-streaming-with-asa/&quot;&gt;Implement a Data Streaming Solution with Azure&amp;nbsp;Streaming Analytics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We need to understand batch processing, stream processing, structured &amp;amp; unstructured data, different APIs supported by Cosmos DB, different consistency levels. In terms of Data Integrations, it is important to understand the capabilities of Azure Data Factory. For Data Processing, Azure Databricks, Synapse Analytics and Stream Analytics play a very important role. If you are not familiar with the stream processing and real time data integration, focus on understanding the different Windowing mechanisms like sessions window, sliding window, tumbling window, hopping window etc.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The questions are all multiple choice questions (MCQ) based on case studies. For some questions, there is more than one correct answer and in such cases, we are also required to sequence the steps in the correct order. An example could be the data integration process which requires 5 steps. We are required to sequence all the steps correctly. The practice is very important due to this requirement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Refer to the below YouTube video for more details about how I prepared for this exam&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/7mNfd3UWhdQ&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;div&gt;It is very important to practice as much as possible. The questions are not straightforward and involve selecting the right choices as well as making the right sequence of steps. I would also recommend using more than one reference material. Do not rely only on one source of information. I prefer to combine the eLearning courses from one of the platforms like Linux Acadamy, Pluralsight, Udemy etc. with MS Learn. I also do not recommend using dumps. In my opinion, dumps reduce the actual value of the certification. Please don&#39;t take shortcuts when learning new technology.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Until next time, Code with &lt;u&gt;Passion&lt;/u&gt; and Strive for &lt;u&gt;Excellence&lt;/u&gt;.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.handsonarchitect.com/2020/08/dp-200-implementing-azure-data-solution.html</link><author>noreply@blogger.com (Nilesh Gule)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/7mNfd3UWhdQ/default.jpg" height="72" width="72"/><thr:total>1</thr:total></item></channel></rss>