<?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>DEV Community: Jordan Bravo</title>
    <description>The latest articles on DEV Community by Jordan Bravo (@jordanbravo).</description>
    <link>https://dev.to/jordanbravo</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%2F1053416%2F201a2cb8-7281-473f-af4f-98e958c26b52.jpg</url>
      <title>DEV Community: Jordan Bravo</title>
      <link>https://dev.to/jordanbravo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jordanbravo"/>
    <language>en</language>
    <item>
      <title>When Not To Use Python</title>
      <dc:creator>Jordan Bravo</dc:creator>
      <pubDate>Mon, 08 Jan 2024 15:18:14 +0000</pubDate>
      <link>https://dev.to/jordanbravo/when-not-to-use-python-1plm</link>
      <guid>https://dev.to/jordanbravo/when-not-to-use-python-1plm</guid>
      <description>&lt;p&gt;Python is useful in some specific situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scripting&lt;/li&gt;
&lt;li&gt;Wrangling data&lt;/li&gt;
&lt;li&gt;Large number of ML libraries with Python bindings to underlying C/C++&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a terrible choice for backend web services in enterprise environments across a team.&lt;/p&gt;

&lt;p&gt;Hypothetically it's a good fit for startups that need to quickly hack together a minimum viable product.  The problem is that all too often there is no time to rewrite it as the company grows.  Python's design does not discourage bad habits and in fact promotes some of the bad habits.&lt;/p&gt;

&lt;p&gt;Problems with Python:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Significant whitespace&lt;/li&gt;
&lt;li&gt;Slow&lt;/li&gt;
&lt;li&gt;Dynamic typing&lt;/li&gt;
&lt;li&gt;Async is an afterthought&lt;/li&gt;
&lt;li&gt;Python 2 to Python 3, broken APIs, essentially a new language&lt;/li&gt;
&lt;li&gt;Installation and environment is a headache:
&lt;h2&gt;
  
  
  - Installs globally to system
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;Global variables&lt;/li&gt;
&lt;li&gt;Mutable by default&lt;/li&gt;
&lt;li&gt;Implicit export (everything is exported)&lt;/li&gt;
&lt;li&gt;Imports/namespacing&lt;/li&gt;
&lt;li&gt;Heavily leans into object oriented code&lt;/li&gt;
&lt;li&gt;Allows shadowing and overwriting, and variable declarations don't use a keyword.  This might seem like a good feature at first because it's less typing, but it's actually terrible when working in a large complex codebase. Example:  I write 'data = xyz', but elsewhere in the code there exists 'data = abc', I will have no idea that I just overrode a variable.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>ASDF is a single version manager for all languages</title>
      <dc:creator>Jordan Bravo</dc:creator>
      <pubDate>Sat, 01 Apr 2023 15:22:41 +0000</pubDate>
      <link>https://dev.to/jordanbravo/asdf-is-a-single-version-manager-for-all-languages-a8m</link>
      <guid>https://dev.to/jordanbravo/asdf-is-a-single-version-manager-for-all-languages-a8m</guid>
      <description>&lt;p&gt;I had to manage multiple versions of NodeJS, so I installed Node Version Manager.&lt;/p&gt;

&lt;p&gt;Then I had to also manage multiple versions of Python, so I installed PyEnv.&lt;/p&gt;

&lt;p&gt;Then I had to manage multiple versions of Rust, Golang, Lua...&lt;/p&gt;

&lt;p&gt;There must be a better way.&lt;/p&gt;

&lt;p&gt;Enter &lt;code&gt;asdf&lt;/code&gt;, a single version manager for all programming languages.&lt;/p&gt;

&lt;p&gt;Homepage: &lt;a href="https://asdf-vm.com/"&gt;https://asdf-vm.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caveat:  It’s currently only available for MacOS and Linux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nIxqScMu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3bmz2dbffgqg3awfbg7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nIxqScMu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3bmz2dbffgqg3awfbg7f.png" alt="asdf on the terminal" width="880" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>How to speed up Docker on MacOS</title>
      <dc:creator>Jordan Bravo</dc:creator>
      <pubDate>Mon, 27 Mar 2023 15:33:53 +0000</pubDate>
      <link>https://dev.to/jordanbravo/how-to-speed-up-docker-on-macos-570m</link>
      <guid>https://dev.to/jordanbravo/how-to-speed-up-docker-on-macos-570m</guid>
      <description>&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;:  Containerization is a feature of the Linux kernel (namespaces + cgroups + chroot) and so MacOS and Windows must run a virtualized Linux environment to use Docker, which has a significant performance penalty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: To help mitigate this issue, Docker (the company) has some recommended configuration tweaks for optimizing performance on MacOS:&lt;/p&gt;

&lt;p&gt;Step 1. In Docker Desktop Settings &amp;gt; General &amp;gt; Choose file sharing implementation for your containers.  Select VirtioFS and restart Docker Desktop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jDzawm36--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m2tcpic45ms67k3a9je5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jDzawm36--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m2tcpic45ms67k3a9je5.png" alt="Image description" width="880" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2. If you’re using any bind mounts, add the &lt;code&gt;delegated&lt;/code&gt; option when you specify the mount source and destination in the &lt;code&gt;docker-compose.yml&lt;/code&gt; file, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  my-service:
    image: my-image
    container_name: my-container
    volumes:
      - ./my-app:/app:delegated  # this is the relevant setting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;References:&lt;br&gt;
&lt;a href="https://www.docker.com/blog/speed-boost-achievement-unlocked-on-docker-desktop-4-6-for-mac/"&gt;https://www.docker.com/blog/speed-boost-achievement-unlocked-on-docker-desktop-4-6-for-mac/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.docker.com.xy2401.com/compose/compose-file/#caching-options-for-volume-mounts-docker-for-mac"&gt;https://docs.docker.com.xy2401.com/compose/compose-file/#caching-options-for-volume-mounts-docker-for-mac&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
