<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ryan Machado</title>
    <description>The latest articles on Forem by Ryan Machado (@ryangst).</description>
    <link>https://forem.com/ryangst</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F271532%2F36ef5eb7-876c-4323-8794-0f00f30a1ed2.jpg</url>
      <title>Forem: Ryan Machado</title>
      <link>https://forem.com/ryangst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ryangst"/>
    <language>en</language>
    <item>
      <title>3 mistakes that are killing your dev resume</title>
      <dc:creator>Ryan Machado</dc:creator>
      <pubDate>Sun, 30 Nov 2025 17:06:46 +0000</pubDate>
      <link>https://forem.com/ryangst/3-mistakes-that-are-killing-your-dev-resume-l88</link>
      <guid>https://forem.com/ryangst/3-mistakes-that-are-killing-your-dev-resume-l88</guid>
      <description>&lt;p&gt;A dev resume isn't just a list - it's a &lt;strong&gt;context + impact sales doc&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After reviewing more than 25 developer resumes (mobile, backend, fullstack, career changers, etc.), the &lt;strong&gt;same 3 mistakes&lt;/strong&gt; kept showing up.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Talking tasks, not impact
&lt;/h2&gt;

&lt;p&gt;The most common error: the whole resume is written like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Development and maintenance of applications..."&lt;/li&gt;
&lt;li&gt;"Worked on bug fixes and new features..."&lt;/li&gt;
&lt;li&gt;"Responsible for system X..."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That says &lt;strong&gt;nothing&lt;/strong&gt; about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the size of the problem,&lt;/li&gt;
&lt;li&gt;how hard what you did was,&lt;/li&gt;
&lt;li&gt;the impact on the product or business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recruiters read this all day. It turns into noise.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix: turn each bullet into technical action + what + how + metric/scale&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Layout that kills ATS and readability
&lt;/h2&gt;

&lt;p&gt;Another classic: a beautiful resume full of columns, icons, colors, emojis, and &lt;em&gt;creative UX&lt;/em&gt;...&lt;br&gt;&lt;br&gt;
and completely indigestible for someone who needs to read fast (or for an ATS).&lt;/p&gt;

&lt;p&gt;Lots of people fell into these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-column&lt;/strong&gt; layout, heavy sidebar, icon, emoji in dates, cluttered header&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent&lt;/strong&gt; dates and sections ("Aug 24", "08/2024", "2024 - present")&lt;/li&gt;
&lt;li&gt;Important sections missing or weak: &lt;strong&gt;Projects&lt;/strong&gt;, poorly separated &lt;strong&gt;Skills&lt;/strong&gt;, giant text blocks&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix: &lt;strong&gt;One column only&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://rxresu.me/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frxresu.me%2Fopengraph%2Fbanner.jpg" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://rxresu.me/" rel="noopener noreferrer" class="c-link"&gt;
            Reactive Resume — A free and open-source resume builder
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Reactive Resume is a free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frxresu.me%2Ffavicon.ico"&gt;
          rxresu.me
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;&lt;a href="https://www.overleaf.com/latex/templates/faangpath-simple-template/npsfpdqnxmbc" rel="noopener noreferrer"&gt;FAANG LaTeX template&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Stack misaligned with experience (or too shallow)
&lt;/h2&gt;

&lt;p&gt;Saw this a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;giant skills list (Java 8 years, Docker, Kubernetes, AWS, Flutter, React...) &lt;strong&gt;without showing it once&lt;/strong&gt; in roles&lt;/li&gt;
&lt;li&gt;technologies only in the "Skills" section, &lt;strong&gt;zero proof&lt;/strong&gt; in experience or projects&lt;/li&gt;
&lt;li&gt;missing &lt;strong&gt;basic dev keywords&lt;/strong&gt;: Git, testing, CI/CD, REST API, cloud, even for people who clearly use them daily&lt;/li&gt;
&lt;li&gt;career in infra/support or teaching, but resume saying "full-stack dev" without a real project/product described&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix: Only list tech you can defend in an interview and &lt;strong&gt;tie each one&lt;/strong&gt; to a role or project.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Setting Up a VPS with Docker: A Step-by-Step Guide</title>
      <dc:creator>Ryan Machado</dc:creator>
      <pubDate>Sat, 03 May 2025 21:17:17 +0000</pubDate>
      <link>https://forem.com/ryangst/setting-up-a-vps-with-docker-a-step-by-step-guide-55hb</link>
      <guid>https://forem.com/ryangst/setting-up-a-vps-with-docker-a-step-by-step-guide-55hb</guid>
      <description>&lt;p&gt;Running applications in the cloud gives you reliability, accessibility, and the power to scale. In this guide, I'll walk through setting up a Virtual Private Server (VPS) with Docker, using environment variables to make this guide reusable for your own projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, set these variables according to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Your server details&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SERVER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-server-ip"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-domain.com"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-project-name"&lt;/span&gt;

&lt;span class="c"&gt;# User credentials for deployment&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEPLOY_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"deploy"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEPLOY_EMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DEPLOY_USER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;@&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 Connecting to Your VPS
&lt;/h2&gt;

&lt;p&gt;First, connect to your newly provisioned server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SERVER_IP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔧 Installing Docker
&lt;/h2&gt;

&lt;p&gt;After connecting to the server, install Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl
&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-d&lt;/span&gt; /etc/apt/keyrings
&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.asc
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;a+r /etc/apt/keyrings/docker.asc
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;UBUNTU_CODENAME&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$VERSION_CODENAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌐 Configuring DNS
&lt;/h2&gt;

&lt;p&gt;Create a DNS A record pointing your domain to the server IP. Once propagated, you can SSH using the domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🐳 Creating a Docker Context
&lt;/h2&gt;

&lt;p&gt;To make working with remote Docker commands easier, create a Docker context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context create &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--docker&lt;/span&gt; &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssh://root@&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
docker context use &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now all Docker commands will run on the VPS via this context.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Setting Up Docker Swarm
&lt;/h2&gt;

&lt;p&gt;Initialize Docker Swarm on your VPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker swarm init &lt;span class="c"&gt;# Optionally add: --advertise-addr ${SERVER_IP}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command will output a join token. Save this for adding worker nodes later if needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Example output - your token will be different&lt;/span&gt;
docker swarm &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="nt"&gt;--token&lt;/span&gt; SWMTKN-1-xxxxxxxxxxxxxxxxxxxx &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SERVER_IP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;:2377
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📦 Deploying Your Application Stack
&lt;/h2&gt;

&lt;p&gt;Deploy your application stack using docker-compose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stack deploy &lt;span class="nt"&gt;-c&lt;/span&gt; docker-compose.yml &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your application should now be accessible at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://${DOMAIN}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check service logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker service logs &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;_app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You now have a production-ready Docker environment on your VPS with a secure deployment user. This setup provides a solid foundation for running containerized applications in production with proper separation of concerns.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>cicd</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to install Flutter + My Flutter Experience so far</title>
      <dc:creator>Ryan Machado</dc:creator>
      <pubDate>Sat, 16 Nov 2024 18:19:18 +0000</pubDate>
      <link>https://forem.com/ryangst/how-to-install-flutter-my-flutter-experience-so-far-4k9k</link>
      <guid>https://forem.com/ryangst/how-to-install-flutter-my-flutter-experience-so-far-4k9k</guid>
      <description>&lt;p&gt;In my job &lt;a href="https://www.twiagemed.com/" rel="noopener noreferrer"&gt;@twiage&lt;/a&gt;, we have a flutter project called STAT, which is a rewrite of an native implementation. I've never liked Flutter/Dart and was always uncomfortable working with it. &lt;/p&gt;

&lt;p&gt;I've been playing with Flutter and React Native since 2020 and until the last couple of days, React Native was go to solution and Flutter was something that i considered "crappy". &lt;/p&gt;

&lt;p&gt;It was so comfortable with React Native and had a chance to work in the &lt;a href="https://github.com/facebook/react-native/commit/5ef5767c3c1423971558c87dfc63be9b7b354abe" rel="noopener noreferrer"&gt;RN@0.72.0&lt;/a&gt; (i tell this everyone 🥹)&lt;/p&gt;

&lt;p&gt;Here's why i loved React Native:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;li&gt;Massive community&lt;/li&gt;
&lt;li&gt;99% of JS libraries work with RN &lt;/li&gt;
&lt;li&gt;Easy to install&lt;/li&gt;
&lt;li&gt;Expo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flutter problems
&lt;/h2&gt;

&lt;p&gt;I had hard feelings about Flutter because the language (JS/Dart) differences and for being an React Native direct competitor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dart
&lt;/h2&gt;

&lt;p&gt;I could never pardon Dart for trying to replace Javascript. This almost made us enemies for life. &lt;/p&gt;

&lt;p&gt;Dart is a whole new language, not tied to Javascript, neither trying to keep backwards compatibility. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4npcpl7xmsp1ssgad2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4npcpl7xmsp1ssgad2n.png" alt="Dart compilation guide" width="792" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Flutter Installation
&lt;/h2&gt;

&lt;p&gt;Don't get too carried away thinking that you're going to run your package manager install command with ease. Flutter installation is way more complex&lt;/p&gt;

&lt;p&gt;To get things done, i've used my loyal companion &lt;a href="https://asdf-vm.com/guide/introduction.html" rel="noopener noreferrer"&gt;asdf&lt;/a&gt;, so a big part of the pain went away. &lt;/p&gt;

&lt;p&gt;So here's my step by step way to do it:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install Flutter
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add flutter
asdf &lt;span class="nb"&gt;install &lt;/span&gt;flutter latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Get mad at Flutter for not telling you the correct JDK version from start
&lt;/h3&gt;

&lt;p&gt;Actually, this is my fault, if you run &lt;code&gt;flutter doctor&lt;/code&gt;, the CLI will give you a warning about the mismatching JDK version. (this is still pretty annoying tho)&lt;/p&gt;

&lt;p&gt;Install JDK 17 (or whatever version is required by Flutter by the time you're reading this)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add java
asdf &lt;span class="nb"&gt;install &lt;/span&gt;java adoptopenjdk-17.0.0+12
asdf &lt;span class="nb"&gt;local &lt;/span&gt;java adoptopenjdk-17.0.0+12 &lt;span class="c"&gt;# will create your .tool-versions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can set the JDK that Flutter will use by passing the &lt;code&gt;--jdk-dir&lt;/code&gt; flag -- and you can get this value by running &lt;code&gt;asdf where java&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter config &lt;span class="nt"&gt;--jdk-dir&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;asdf where java&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Create a new Flutter project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter create myapp
&lt;span class="nb"&gt;cd &lt;/span&gt;myapp
flutter run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This guide should help you installing the Flutter SDK and the required JDK using &lt;code&gt;asdf&lt;/code&gt;, which is a really handy tool. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;asdf&lt;/code&gt; can be used with a big variety of languages and runtimes, take a look at their &lt;a href="https://asdf-vm.com/manage/versions.html" rel="noopener noreferrer"&gt;website&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;Thank you very much for readying my article, let me know if I can help with anything in your projects. &lt;/p&gt;

&lt;p&gt;Linkedin: &lt;a href="https://www.linkedin.com/in/ryangst/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ryangst/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>linux</category>
      <category>cli</category>
    </item>
    <item>
      <title>Prazer, MobX: uma solução de gerenciamento de estado para aplicações React</title>
      <dc:creator>Ryan Machado</dc:creator>
      <pubDate>Sat, 03 Feb 2024 13:43:55 +0000</pubDate>
      <link>https://forem.com/ryangst/prazer-mobx-uma-solucao-de-gerenciamento-de-estado-para-aplicacoes-react-l4j</link>
      <guid>https://forem.com/ryangst/prazer-mobx-uma-solucao-de-gerenciamento-de-estado-para-aplicacoes-react-l4j</guid>
      <description>&lt;p&gt;&lt;br&gt;
TLDR: Mobx é uma solução de gerenciamento de estado: Nesse artigo escrevo um pouco sobre a teoria por trás do funcionamento&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RyanGst/mobx-todo" rel="noopener noreferrer"&gt;Link de exemplo com react&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mobxjs/mobx" rel="noopener noreferrer"&gt;Link da documentação&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não existe maneira melhor de criar aplicações bugadas e difíceis de manter do que não gerenciar corretamente o estado da sua aplicação.&lt;/p&gt;

&lt;p&gt;Mobx busca fazer isso de maneira simples ao arrancar a raiz do problema: fazendo com que seja muito difícil criar estados inconsistentes. &lt;/p&gt;




&lt;p&gt;Para entender melhor como o MobX funciona, vamos começar pelo básico: o estado da aplicação. O estado da aplicação é basicamente todos os dados que são usados pela aplicação e que podem ser alterados ao longo do tempo. No React, esses dados geralmente são mantidos no componente de estado, mas com o MobX, podemos mantê-los em qualquer lugar.&lt;/p&gt;

&lt;p&gt;As derivações são valores que podem ser calculados a partir do estado da aplicação. Por exemplo, se o estado da aplicação inclui um array de números e você quer saber a soma desses números, essa soma seria uma derivada. O MobX permite que você defina essas derivações de maneira fácil e as mantém atualizadas automaticamente sempre que o estado da aplicação for alterado.&lt;/p&gt;

&lt;p&gt;As reações são basicamente como as derivações, mas em vez de produzir um valor, elas fazem alguma coisa quando o estado da aplicação muda. Por exemplo, você pode definir uma reação que atualize o DOM sempre que o estado da aplicação mudar. O MobX garante que as reações sejam executadas de maneira síncrona e sem problemas sempre que o estado da aplicação mudar.&lt;/p&gt;

&lt;p&gt;Por último, temos as ações. As ações são todas as coisas que alteram o estado da aplicação. No MobX, todas as ações são processadas por derivações e reações, o que significa que todas as alterações no estado da aplicação são feitas de maneira síncrona e sem problemas. Isso é útil porque garante que não haja problemas como estados inconsistentes ou alterações no estado que não são refletidas corretamente na interface do usuário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4q8klmpxd7elh7o115zo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4q8klmpxd7elh7o115zo.png" alt="Árvore de eventos MobX" width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em resumo, o MobX é uma ferramenta útil para gerenciar o estado da sua aplicação de maneira fácil e consistente. Ao permitir que você defina derivações e reações para manter o estado da aplicação atualizado, ele torna mais fácil criar aplicações robustas e sem problemas. Se você está procurando uma maneira de gerenciar o estado da sua aplicação com o React, definitivamente deve dar uma olhada no MobX.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conecte-se comigo 👍
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/ryan-lucas-machado/" rel="noopener noreferrer"&gt;Linkedinho&lt;/a&gt;&lt;br&gt;
&lt;a href="https://img.shields.io/twitter/follow/ryangst_" rel="noopener noreferrer"&gt;X - App do passarinho&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>mobx</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Como se conectar com QUALQUER comunidade tech no linkedin</title>
      <dc:creator>Ryan Machado</dc:creator>
      <pubDate>Fri, 02 Feb 2024 23:39:38 +0000</pubDate>
      <link>https://forem.com/ryangst/como-se-conectar-com-qualquer-comunidade-tech-no-linkedin-1h0o</link>
      <guid>https://forem.com/ryangst/como-se-conectar-com-qualquer-comunidade-tech-no-linkedin-1h0o</guid>
      <description>&lt;p&gt;Esse post vai mostrar um script para automatizar envio de conexões no linkedin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requisitos:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Pesquise por palavras chaves dos perfis que vc quer conectar. ["#reactnative", "#vue", "Tech Recruiter"]&lt;/li&gt;
&lt;li&gt;Selecione a aba "Pessoas", se necessário, adicione filtros como localização ou empresa em que trabalham&lt;/li&gt;
&lt;li&gt;Abra o console do navegador (F12) e cole o script em anexo&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;small&gt; 🦧 veja como salvar esse script no navegador no final do post &lt;/small&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  IMPORTANTE
&lt;/h3&gt;

&lt;p&gt;Lembre de modificar a mensagem em config.note e mudar a flag "addNote", caso tenha atingido o limite de mensagens de conexão personalizada.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  ✨ Bônus ✨
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;🧑‍💻 Obrigado por chegar até aqui, se esse script te ajudou de alguma forma, considere curtir/compartilhar essa postagem&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para salvar esse script no navegador e sempre que quiser, eu recomendo usar a extensão &lt;a href="https://chromewebstore.google.com/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag" rel="noopener noreferrer"&gt;🦍 ViolentMonkey&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqave9z5cskei3478cvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqave9z5cskei3478cvl.png" alt="boy searching for connections on linkedin" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conecte-se comigo 👍
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/ryan-lucas-machado/" rel="noopener noreferrer"&gt;Linkedinho&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/intent/follow?screen_name=ryangst_" rel="noopener noreferrer"&gt;X - App do passarinho&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jobs</category>
      <category>automation</category>
      <category>javascript</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
