<?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: Luigi Antonio Guillen</title>
    <description>The latest articles on DEV Community by Luigi Antonio Guillen (@luigi_ichi).</description>
    <link>https://dev.to/luigi_ichi</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%2F1279000%2Ffe718d95-a3b8-4912-bf6b-1d399128a12d.png</url>
      <title>DEV Community: Luigi Antonio Guillen</title>
      <link>https://dev.to/luigi_ichi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luigi_ichi"/>
    <language>en</language>
    <item>
      <title>Ruby Debugging, VS Code, Gems, and Bundler!</title>
      <dc:creator>Luigi Antonio Guillen</dc:creator>
      <pubDate>Thu, 05 Sep 2024 07:31:01 +0000</pubDate>
      <link>https://dev.to/luigi_ichi/ruby-debugging-vs-code-gems-and-bundler-a49</link>
      <guid>https://dev.to/luigi_ichi/ruby-debugging-vs-code-gems-and-bundler-a49</guid>
      <description>&lt;p&gt;After installing your Ruby development environment, you might find yourself in the void thinking what to do next. In this article, we take a look at the bigger picture before you, as a developer, would dive into the smaller chunks of going through your projects: setting up your code editor and get to know how gems work, as they are the essentials!&lt;/p&gt;

&lt;p&gt;While the article's title may sound like a random mashup of four concepts, it's more like setting up your ground for your code to be written down to running/debugging, knowing how to extend your code through libraries or &lt;strong&gt;gems&lt;/strong&gt;, and make your project immune to &lt;em&gt;dependency hell&lt;/em&gt; with the help of Bundler, especially when sharing your projects to everyone else who definitely has a different set of gems installed on their environment!&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging
&lt;/h2&gt;

&lt;p&gt;With a fresh installation of your environment, you can immediately run your Ruby file (ending in &lt;strong&gt;&lt;code&gt;.rb&lt;/code&gt;&lt;/strong&gt;) in the Terminal. The same is true for Python and various C/C++ compilers (&lt;code&gt;clang&lt;/code&gt;, &lt;code&gt;gcc&lt;/code&gt;, MinGW)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ruby FILE
&lt;span class="c"&gt;# EXAMPLE&lt;/span&gt;
ruby /Users/User/Desktop/hello.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more about how your file will be interpreted (flags) by executing &lt;code&gt;ruby -h&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby and Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;For developers who want to streamline their code editor experience into a near-IDE one, code editors like &lt;strong&gt;Visual Studio Code&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;(VS Code)&lt;/em&gt;&lt;/strong&gt; offer extensions to streamline your Ruby experience and your development environment!&lt;/p&gt;

&lt;h3&gt;
  
  
  Extensions
&lt;/h3&gt;

&lt;p&gt;For beginners, I suggest three extensions for you to get started with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp" rel="noopener noreferrer"&gt;Ruby Language Server Protocol (LSP)&lt;/a&gt; - for rich features in the editor like semantic highlighting and documentation on hover for classes, modules, etc.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg" rel="noopener noreferrer"&gt;VSCode rdbg Ruby Debugger&lt;/a&gt; - a debugger-focused extension with some support for running code without debugging&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner" rel="noopener noreferrer"&gt;Code Runner&lt;/a&gt; - supports Ruby among many languages focusing on running code without debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Ruby LSP and Code Runner works out of the box but the VSCode rdbg Ruby Debugger extension needs configuration after installation. On the next section, we focus on the big elephant in the room, the rdbg Ruby Debugger.&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuring VSCode rdbg Ruby Debugger
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; &lt;code&gt;debug&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What makes the rdbg Ruby Debugger distinct from our Code Runner extension is that it makes use of VS Code's debugging part of it, allowing you to make breakpoints and keep track of Variables, Watch, and your Call Stack found in the same &lt;em&gt;Run and Debug&lt;/em&gt; view on your sidebar. It is identical to when you try to debug a C/C++ or Python program given you have these VS Code extensions and compilers installed.&lt;/p&gt;

&lt;p&gt;After installing the extension, install the &lt;code&gt;debug&lt;/code&gt; gem via the terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;debug
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For your launch configurations which are applied only to the scope of your current project, these are the default configurations in your &lt;code&gt;launch.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IntelliSense&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;learn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;possible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;attributes.&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Hover&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;view&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;descriptions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;existing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;attributes.&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;more&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;information&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;visit:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://go.microsoft.com/fwlink/?linkid=&lt;/span&gt;&lt;span class="mi"&gt;830387&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rdbg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Debug current file with rdbg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"script"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${file}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"askParameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rdbg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Attach with rdbg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"attach"&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your Ruby project doesn't have launch configurations or you are unsure of it, you can navigate to the &lt;strong&gt;Run and Debug&lt;/strong&gt; in VS Code found on your sidebar. The same action can also be done by navigating to &lt;strong&gt;Run &amp;gt; Add Configuration…&lt;/strong&gt; in the menu bar. This will allow you to configure a &lt;code&gt;launch.json&lt;/code&gt; for your currently opened project.&lt;br&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%2Fo4nledi89wt3m6d99uqw.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%2Fo4nledi89wt3m6d99uqw.png" alt="Screenshots of VS Code showing how to add a launch configuration" width="800" height="449"&gt;&lt;/a&gt;Attempting to debug your program under &lt;em&gt;Run &amp;gt; Start Debugging&lt;/em&gt; will pop up a notification on the bottom right that it cannot find a program to debug. Closing the notification will also trigger the same action of configuring your &lt;code&gt;launch.json&lt;/code&gt;.&lt;br&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%2Fscspkdmwkfinshu1gsh8.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%2Fscspkdmwkfinshu1gsh8.png" alt="Screenshots of VS Code about attempting to debug a Ruby program without setting up launch.json" width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
You should be greeted with the said JSON file in a new tab.&lt;br&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%2Fbkimvckq6ch9xev3sbkp.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%2Fbkimvckq6ch9xev3sbkp.png" alt="A screenshot of VS Code showing a launch.json file of rdbg Ruby debugger" width="800" height="600"&gt;&lt;/a&gt;For this purpose, we can save and leave anything unchanged in this file that has been automatically generated for us. For more advanced projects, you might have to tinker on how your project will be debugged with flags (similar to how I discussed earlier on executing &lt;code&gt;ruby -h&lt;/code&gt; at the Terminal to learn more about the various flags that can be executed with your project).&lt;/p&gt;

&lt;p&gt;Afterwards, you can now debug your code by going to &lt;strong&gt;Run &amp;gt; Start Debugging&lt;/strong&gt; or by hitting &lt;code&gt;F5&lt;/code&gt; on your keyboard. You will be presented with this &lt;code&gt;bundle&lt;/code&gt; command for every time you will debug, so simply hit &lt;code&gt;ENTER&lt;/code&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%2Feaojretrk9xcvb67hzof.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%2Feaojretrk9xcvb67hzof.png" alt="A VS Code screenshot showing a bundle command upon debugging with rdbg Ruby Debugger" width="800" height="143"&gt;&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%2Fd59okrpw3e2euf1jupc7.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%2Fd59okrpw3e2euf1jupc7.png" alt="A VS Code screenshot on debugging a Ruby program" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And voilà! You can now debug your current project, even breakpoints! This is how you'll configure your launch configurations for every new project you'll make on moving forward.&lt;/p&gt;
&lt;h4&gt;
  
  
  Ruby LSP and Code Runner
&lt;/h4&gt;

&lt;p&gt;Since they run right away after installing these extensions, I'll give you a quick run through of these extensions!&lt;/p&gt;

&lt;p&gt;First is the &lt;strong&gt;Ruby Language Server Protocol (LSP)&lt;/strong&gt;, this extension is similar with the &lt;em&gt;C/C++&lt;/em&gt; and &lt;em&gt;Python&lt;/em&gt; extensions in VS Code in that it can display documentation and suggestions of certain keywords as you type them in.&lt;br&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%2Foxuryvvp4wwyieywi45y.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%2Foxuryvvp4wwyieywi45y.png" alt="Screenshot of VS Code showing a documentation of a Ruby keyword with the Ruby LSP extension installed" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And second is &lt;strong&gt;Code Runner&lt;/strong&gt;. It also works for a variety of other programming languages as it simply taps in to the Terminal to execute your Ruby project.&lt;br&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%2Fiyna2m26tctbj7a8d0st.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%2Fiyna2m26tctbj7a8d0st.png" alt="A screenshot of VS Code showing a Ruby program being run using Code Runner" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that VS Code is seamless with how you manage, run, and debug your Ruby projects—and speaking of projects—let's tackle about gems!&lt;/p&gt;
&lt;h2&gt;
  
  
  💎📚 Gems
&lt;/h2&gt;

&lt;p&gt;Like I shared in my first Ruby article, &lt;strong&gt;gems&lt;/strong&gt; are libraries of Ruby code that can be reused and for the simplicity sake of your code (especially if you can think that such a function may be already open-sourced by others). For context, gems are analogous to C/C++ library (&lt;code&gt;.h&lt;/code&gt;) files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://rubygems.org" rel="noopener noreferrer"&gt;RubyGems&lt;/a&gt;&lt;/strong&gt; is the Ruby's community hub for these gems while also serving itself as a gem hosting service. Not only you can install but also publish your own gems that you may think others may find it helpful! &lt;em&gt;Treat this as your directory plus documentation for gems that you might search in the future!&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Installing Gems
&lt;/h3&gt;

&lt;p&gt;Installing a gem to your Ruby environment involves this command syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install [NAME]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some gems in their documentations may require you to run this command with a &lt;code&gt;sudo&lt;/code&gt; command such as the &lt;code&gt;rails&lt;/code&gt; gem for example.&lt;/p&gt;

&lt;p&gt;For users that use a version manager to manage their Ruby environments (i.e. &lt;code&gt;rbenv&lt;/code&gt;, &lt;code&gt;rvm&lt;/code&gt;, or &lt;code&gt;asdf&lt;/code&gt;), installing a gem in one version may be independent from another version; it will not carry across different Ruby versions.&lt;/p&gt;

&lt;p&gt;By default, your Ruby development environment comes with essential gems necessary for building on top of other gems. For a fun little exercise, we can make use of a gem in a sample project that is more down-to-earth!&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Gems in Your Ruby Project
&lt;/h3&gt;

&lt;p&gt;To include a gem to use in your project, the syntax is as follows,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'[NAME]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our sample project, let's make use of the &lt;a href="https://github.com/ruby/matrix" rel="noopener noreferrer"&gt;&lt;code&gt;matrix&lt;/code&gt;&lt;/a&gt; gem that's included with our Ruby installation. If it comes that you run this sample code and stopped with an error because this gem is not found, you can execute &lt;code&gt;gem install matrix&lt;/code&gt; in the Terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'matrix'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's define a matrix and print the determinant of this! Take note of Ruby's object-oriented nature, as that's how you "call" things from a class on libraries (as seen in &lt;code&gt;mat.determinant&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'matrix'&lt;/span&gt;
&lt;span class="n"&gt;mat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Matrix&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;mat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;determinant&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; -3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's how you can use gems in your Ruby project! If you want to learn more about the documentation of the &lt;code&gt;matrix&lt;/code&gt; gem, you can head &lt;a href="https://ruby-doc.org/stdlib-2.5.1/libdoc/matrix/rdoc/Matrix.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For an index of the documentations of gems, you can head to &lt;a href="https://www.rubydoc.info" rel="noopener noreferrer"&gt;rubydoc.info&lt;/a&gt; or &lt;a href="https://ruby-doc.org/stdlib-2.5.1/libdoc/matrix/rdoc/Matrix.html" rel="noopener noreferrer"&gt;ruby-doc.org&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔨 Bundler
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;: &lt;code&gt;bundle&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When sharing Ruby projects with the gems you used to someone else (such as GitHub), it is likely that they can't run it because they haven't installed it on their own environments &lt;em&gt;or&lt;/em&gt; they have the gems but somehow, a newer or older version is interfering with the gems they have on their environment, this is what I meant by &lt;em&gt;dependency hell&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://bundler.io" rel="noopener noreferrer"&gt;Bundler&lt;/a&gt;&lt;/strong&gt; eliminates that, as its job is to keep an exact list of gems and optionally specify versions of gems for your project. This ensures that other people will have these exact gems installed without them manually telling them about it with a simple command later on.&lt;/p&gt;

&lt;p&gt;Upon installing Ruby, the &lt;code&gt;bundle&lt;/code&gt; gem should come with the installation. If somehow this gem doesn't exist, you can install it with the &lt;code&gt;gem&lt;/code&gt; command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Your Project Ready for Bundler
&lt;/h3&gt;

&lt;p&gt;In your project folder, Bundler needs two files, &lt;code&gt;Gemfile&lt;/code&gt; and &lt;code&gt;Gemfile.lock&lt;/code&gt; (yes, the first file doesn't have an extension). You can add a file by the Explorer found in the sidebar in VS Code:&lt;br&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%2Fl637bi58t8g614mlk5tb.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%2Fl637bi58t8g614mlk5tb.png" alt="Screenshot of VS Code adding a new file via the Explorer" width="731" height="669"&gt;&lt;/a&gt;In addition, you can do the same action using the &lt;code&gt;touch&lt;/code&gt; command in Unix/Unix-like systems (i.e. Linux and macOS) in the terminal.&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;touch &lt;/span&gt;Gemfile Gemfile.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's focus on the &lt;code&gt;Gemfile&lt;/code&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;Gemfile&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Gemfile&lt;/strong&gt; is where you can specify the gems that will be used by your project. This file will be read by Bundler.&lt;/p&gt;

&lt;p&gt;In practice, you include the source of where your gems should be downloaded from, though this is not required at all times. In this case, &lt;strong&gt;&lt;a href="https://rubygems.org" rel="noopener noreferrer"&gt;RubyGems&lt;/a&gt;&lt;/strong&gt; will be our source since they also host gems!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="s1"&gt;'https://rubygems.org'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Listing a gem in the &lt;code&gt;Gemfile&lt;/code&gt; is done through this similar syntax, differing only by a word when we &lt;code&gt;require&lt;/code&gt; a gem in our project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'[NAME]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In another sample project, let's try to include another gem that's not installed in our fresh Ruby environment, the &lt;a href="https://rubygems.org/gems/fibonacci" rel="noopener noreferrer"&gt;&lt;code&gt;fibobacci&lt;/code&gt;&lt;/a&gt; gem!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="s1"&gt;'https://rubygems.org'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'fibonacci'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this gem syntax, by default it will install the most current release of that gem. Should you need to install a gem with a specific version is in the form of this syntax, using &lt;code&gt;fibonacci&lt;/code&gt; as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'fibonacci'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'~&amp;gt; 0.1.8'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After listing the gems you need for your project, simply run this command in VS Code's terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you make changes to your &lt;code&gt;Gemfile&lt;/code&gt;, you can run this command again. Additionally, you can view the information of that gem you installed and where it's at by executing &lt;code&gt;bundle info [NAME]&lt;/code&gt;. &lt;br&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%2F66w7q009mm1xh4ynk9cq.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%2F66w7q009mm1xh4ynk9cq.png" alt="A VS Code screenshot showing a Gemfile document open and a Terminal installing gems using Bundler" width="800" height="600"&gt;&lt;/a&gt;Now we can get the first &lt;em&gt;n&lt;/em&gt; terms of a Fibonacci sequence where &lt;em&gt;n&lt;/em&gt; is inputted by the user with this snippet of code!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'fibonacci'&lt;/span&gt;

&lt;span class="n"&gt;fib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fibonacci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;gets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chomp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt; &lt;span class="c1"&gt;# Removes the terminating character at the end of the input and converts the input to integer&lt;/span&gt;
&lt;span class="n"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more about getting started with Bundler &lt;a href="https://bundler.io/guides/getting_started.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;! If you want specifics about how the &lt;code&gt;Gemfile&lt;/code&gt; works, then head &lt;a href="https://bundler.io/guides/gemfile.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

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

&lt;p&gt;Now that you have a near-IDE experience with VS Code, learned more about how to embed gems in your project, and learned the basics of Bundler so that other developers can also tap in to your project with the exact gems that you used, you can definitely rest easy and code away on your Ruby journey!&lt;/p&gt;

&lt;p&gt;Most of what I shared here, particularly with gems and Bundler, is just the foundation of what you'll encounter later with other gems and frameworks in Ruby!&lt;/p&gt;

&lt;p&gt;That is all, I hope you learned a lot about Ruby with this one! :)&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>vscode</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Install Ruby on Windows, macOS, and Linux</title>
      <dc:creator>Luigi Antonio Guillen</dc:creator>
      <pubDate>Sun, 01 Sep 2024 04:37:32 +0000</pubDate>
      <link>https://dev.to/luigi_ichi/how-to-install-ruby-on-windows-macos-and-linux-35o3</link>
      <guid>https://dev.to/luigi_ichi/how-to-install-ruby-on-windows-macos-and-linux-35o3</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Updated September 2025&lt;/em&gt;&lt;/strong&gt;: &lt;em&gt;Now friendly for Linux/WSL users!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is my take on making a tutorial on how to install Ruby across Windows, macOS, and Linux all in this one article!&lt;/p&gt;

&lt;p&gt;In a pinch, Ruby is an interpreted, dynamically-typed and high-level programming language where everything is an object! While it is a true object-oriented programming language, the paradigms of programming in a procedural and a functional way can also be done.&lt;/p&gt;

&lt;p&gt;Outside of the programming scheme, Ruby is popularly used alongside &lt;em&gt;&lt;a href="https://rubyonrails.org" rel="noopener noreferrer"&gt;Ruby on Rails&lt;/a&gt;&lt;/em&gt; which is a full-stack web framework. Others include &lt;em&gt;&lt;a href="https://bundler.io" rel="noopener noreferrer"&gt;Bundler&lt;/a&gt;&lt;/em&gt; which provides a consistent environment for managing gems and versions between independent Ruby projects, &lt;em&gt;&lt;a href="https://www.ruby2d.com" rel="noopener noreferrer"&gt;Ruby 2D&lt;/a&gt;&lt;/em&gt; for creating 2D apps, games, and visuals, and &lt;em&gt;&lt;a href="https://github.com/pry/pry" rel="noopener noreferrer"&gt;Pry&lt;/a&gt;&lt;/em&gt; as an interactive shell. All of these four are what you refer to as &lt;strong&gt;Gems&lt;/strong&gt;, basically libraries also containing Ruby code!&lt;/p&gt;

&lt;p&gt;That's all for the background of Ruby and without further ado, let's get right to installing Ruby on your machine!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In any mention of a version number past this point indicates the version of Ruby that was released at the time of writing this article. If you are looking to install an older version of Ruby, this guide is also for you! Just find the version you're looking for in the downloads page or by listing it in their respective package/version managers. This applies to future Ruby versions as well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using the standalone RubyInstaller setup executable
&lt;/h3&gt;

&lt;p&gt;If you're a novice, GUI-based person, you can install Ruby with a usual setup application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the latest setup executable &lt;a href="https://rubyinstaller.org/downloads/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and make sure it's the one with a DevKit. &lt;em&gt;Note that&lt;/em&gt; &lt;strong&gt;&lt;em&gt;you need the DevKit version&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;in order to build C/C++ extensions for Ruby and is necessary for Ruby on Rails, and hundreds of Ruby gems rely on it, so might as well go with the DevKit version as opposed to none&lt;/em&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%2Fh36zr0xez5phx63ef4fk.png" alt="A screenshot showing the Windows File Explorer on the Downloads folder showing the downloaded RubyInstaller setup executable" width="800" height="368"&gt;
&lt;/li&gt;
&lt;li&gt;You're given an option to let the installation be limited to the current user or system-wide. If you don't know what to select, let the installation be only installed to you, the current user
&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%2F9vp7gfuajkqr4zhzifz3.png" alt="A screenshot of a RubyInstaller setup window asking the user if the Ruby environment is to be installed only to the user or to the system" width="706" height="479"&gt;
&lt;/li&gt;
&lt;li&gt;Along the installation, you will be asked to add Ruby executables to your PATH environment variable and associate Ruby-related files. Assuming this is your first installation of Ruby, leave these checked. If you have an existing Ruby installation, either uncheck these or wipe your current Ruby installation before proceeding
&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%2Faijpqovabzkysvh5xccu.png" alt="A screenshot of the RubyInstaller setup window showing the default installation path and checkboxes that are checked if the install is installed to the PATH variable and to associate this installation with .rb and .rbw" width="800" height="594"&gt;
&lt;/li&gt;
&lt;li&gt;After finishing with the setup window, a terminal window will pop up that's the DevKit part! Specfically, MSYS2 concerns with necessary dependencies for building Ruby as well as Ruby gems with C-extensions. Press &lt;code&gt;ENTER&lt;/code&gt; to continue. This will pop up again after installation so hit &lt;code&gt;ENTER&lt;/code&gt; afterwards
&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%2F5zjm4jl737yczhbhlzae.png" alt="A screenshot of the Windows Command Prompt showing the continuation of the RubyInstaller setup with regards to the MSYS2 installation" width="800" height="428"&gt;
&lt;/li&gt;
&lt;li&gt;After installation, you're good to go! There's a Start Menu folder for Ruby where the Interactive Shell and documentation can be found. To verify your installation, you can type &lt;code&gt;ruby -v&lt;/code&gt; in the Terminal (this also verifies if Ruby is in the PATH environment variable as well!). You can also try line-by-line statements in the interactive shell or type &lt;code&gt;ruby&lt;/code&gt; in the Terminal followed by a &lt;code&gt;.rb&lt;/code&gt; file to interpret that Ruby file!
&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%2Fctpmn0aq8b56a4a1ee1o.png" alt="A screenshot of a Windows 10 desktop depicting the open Start Menu showing the Ruby folder and three open command prompts; one is displaying the list of gems installed, one is the interactive shell with the puts " width="800" height="500"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Using the Windows Package Manager &lt;code&gt;winget&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;If you have an up-to-date version of &lt;em&gt;App Installer&lt;/em&gt; (updated from the Microsoft Store), you can use &lt;code&gt;winget&lt;/code&gt; from the terminal to install Ruby with the following syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RubyInstallerTeam.Ruby.&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MAJOR&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MINOR&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where &lt;code&gt;{MAJOR}&lt;/code&gt; is the major version, while &lt;code&gt;{MINOR}&lt;/code&gt; is the minor version.&lt;/p&gt;

&lt;p&gt;To list all available versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RubyInstallerTeam.Ruby&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To install Ruby 3.2.4 with DevKit, the version available from winget at the time of this article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;RubyInstallerTeam.RubyWithDevKit.3.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ffj6jeth67cs0t0c7mgsf.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%2Ffj6jeth67cs0t0c7mgsf.png" alt="A screenshot showing the Windows Command Prompt installing Ruby using the winget command" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Afterwards, you should be able to perform the same little tests mentioned above as if you used the RubyInstaller method!&lt;/p&gt;

&lt;h2&gt;
  
  
  macOS
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, Homebrew, &lt;code&gt;libyaml&lt;/code&gt;, &lt;code&gt;asdf&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since OS X 10.11 El Capitan, Ruby is bundled alongside the operating system and the ability to install gems as the operating system came with such.&lt;br&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%2Fpz8en6stz0tcyl2isjn5.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%2Fpz8en6stz0tcyl2isjn5.png" alt="A screenshot of macOS showing two Terminal windows; one is displaying the Ruby version and one listing the gems installed by default" width="800" height="468"&gt;&lt;/a&gt;This is Ruby 2.6.10 that is bundled with macOS 11 Big Sur. With &lt;a href="https://brew.sh" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;, The built-in Ruby and its dependencies &lt;strong&gt;(especially &lt;code&gt;libyaml&lt;/code&gt;)&lt;/strong&gt; can be updated with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;ruby
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, this is for the system-wide Ruby installation. Most Gems wouldn't be compatible especially if they require Ruby 3 and later (such as Ruby 2D). We ran this command in preparation for the next step with the now-updated dependencies.&lt;/p&gt;

&lt;p&gt;Therefore, the use of a &lt;strong&gt;version manager&lt;/strong&gt; like asdf is recommended.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing &lt;code&gt;asdf&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://asdf-vm.com" rel="noopener noreferrer"&gt;Asdf&lt;/a&gt;&lt;/strong&gt; is a version manager that not only supports Ruby but also Node.js, Elixir, Erlang and more! Rbenv is usually the main go-to but there's only one con in that it's only a version manager strictly for Ruby, so from a scalability standpoint, I think asdf is the way to go!&lt;/p&gt;

&lt;p&gt;Recently, it is recommended that &lt;code&gt;asdf&lt;/code&gt; is installed through a package manager, using &lt;code&gt;brew&lt;/code&gt; from earlier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;asdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F94zngl70bxwpwyeafg5v.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%2F94zngl70bxwpwyeafg5v.png" alt="Screenshot depicting installing asdf on macOS using Homebrew" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After installation is finished, normally you wouldn't need to modify your shell profiles as the installation earlier would've taken care of that. Just in case that invoking &lt;code&gt;asdf&lt;/code&gt; does not work in the terminal, below are the additional steps to it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Adding shims directory to path/shell
&lt;/h4&gt;

&lt;p&gt;Edit &lt;code&gt;~/.zshrc&lt;/code&gt; to include this line, which will make asdf be able to switch between versions of tools/plugins across the system&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;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&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;ASDF_DATA_DIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.asdf&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/shims:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  If you have Oh My Zsh installed
&lt;/h4&gt;

&lt;p&gt;Look for &lt;code&gt;plugins=()&lt;/code&gt; then include &lt;code&gt;asdf&lt;/code&gt; inside plugins.&lt;br&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%2Fo03wq408kctmrqvv0y1y.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%2Fo03wq408kctmrqvv0y1y.png" alt="A macOS Terminal showing an excerpt of an Oh My Zsh configuration file" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Making asdf Take Control of Your Ruby Environment
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add Ruby as a plugin in asdf&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add ruby
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Search for a version of Ruby you want to download and install&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list all ruby
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
Multiple unrelated plugins may be listed. Scroll up the terminal until you find listings that are just version numbers, those are the available Ruby versions to download.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download and install your desired Ruby version, for example, Ruby 3.2.4&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;ruby 3.2.4
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;After installation, switch to your newly installed Ruby version after opening a new terminal session&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# SWITCH TO THE NEW RUBY&lt;/span&gt;
asdf &lt;span class="nb"&gt;set &lt;/span&gt;ruby 3.2.4
&lt;span class="c"&gt;# SWITCH BACK TO THE SYSTEM'S RUBY&lt;/span&gt;
asdf &lt;span class="nb"&gt;set &lt;/span&gt;ruby system
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&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%2Fa9lrrc5zia2zg0waecbb.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%2Fa9lrrc5zia2zg0waecbb.png" alt="A macOS Terminal showing the switching of Ruby versions using asdf" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take note that when using version managers, a gem installed in one version is independent from another. So for example, installing the &lt;code&gt;rails&lt;/code&gt; gem in our 3.2.4 installation will not carry to the operating system's 2.6.10 installation.&lt;/p&gt;

&lt;h4&gt;
  
  
  What if Ruby failed to install in asdf?
&lt;/h4&gt;

&lt;p&gt;A common problem is with &lt;code&gt;libyaml&lt;/code&gt;. It should be resolved by reinstalling it using Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;libyaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Afterwards, proceed installing Ruby in &lt;code&gt;asdf&lt;/code&gt; with the same syntax above.&lt;br&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%2Fek67bb69yjpkjppainq6.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%2Fek67bb69yjpkjppainq6.png" alt="A screenshot of two macOS Terminals showing the reinstallation of libyaml and ruby using asdf" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux (including WSL)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;For context, this is being installed on Windows using the &lt;strong&gt;Windows Subsystem for Linux (WSL)&lt;/strong&gt; on an Ubuntu/Bash distribution. Later, this is also being installed on on Linux Mint, an Ubuntu-based distribution, which is also based on Debian.&lt;/p&gt;

&lt;p&gt;In case if you didn't catch it, yes, this also applies to &lt;strong&gt;Windows Subsystem for Linux (WSL)&lt;/strong&gt; environments&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I know, this heading may be a too much than just specifying what kind of "Linux" it is, but if you're using a different Linux distribution such as Fedora or Arch, you can head &lt;a href="https://www.ruby-lang.org/en/documentation/installation" rel="noopener noreferrer"&gt;here&lt;/a&gt; from the official Ruby documentation website exploring these various distributions. The installation should be similar, only differing in the package manager in your Linux distribution.&lt;/p&gt;

&lt;p&gt;Like with the previous systems, you have the option of installing Ruby that taps in natively with your system with, for example, on Ubuntu:&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 &lt;span class="nb"&gt;install &lt;/span&gt;ruby-full
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However in the real world, there's no one Ruby version that everyone's using (fragmentation). &lt;strong&gt;From this point on, we'll still use &lt;code&gt;asdf&lt;/code&gt; for this&lt;/strong&gt;, but the steps are different as we don't have the luxury of an available package manager at the time of this writing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Obtaining a pre-compiled binary
&lt;/h3&gt;

&lt;p&gt;For our Ubuntu/Bash environment, we first make sure to install dependencies needed beforehand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the context that we'll use Ruby as one of the plugins in asdf, it also needs these dependencies to compile successfully and work with gems you will be using:&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 install -y &lt;span class="se"&gt;\&lt;/span&gt;
git curl wget unzip &lt;span class="se"&gt;\&lt;/span&gt;
build-essential &lt;span class="se"&gt;\&lt;/span&gt;
libssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
libreadline-dev &lt;span class="se"&gt;\&lt;/span&gt;
zlib1g-dev &lt;span class="se"&gt;\&lt;/span&gt;
libyaml-dev &lt;span class="se"&gt;\&lt;/span&gt;
libxml2-dev &lt;span class="se"&gt;\&lt;/span&gt;
libxslt1-dev &lt;span class="se"&gt;\&lt;/span&gt;
libcurl4-openssl-dev &lt;span class="se"&gt;\&lt;/span&gt;
libffi-dev &lt;span class="se"&gt;\&lt;/span&gt;
libgdbm-dev &lt;span class="se"&gt;\&lt;/span&gt;
libncurses5-dev &lt;span class="se"&gt;\&lt;/span&gt;
automake &lt;span class="se"&gt;\&lt;/span&gt;
libtool &lt;span class="se"&gt;\&lt;/span&gt;
bison &lt;span class="se"&gt;\&lt;/span&gt;
pkg-config &lt;span class="se"&gt;\&lt;/span&gt;
libc6-dev &lt;span class="se"&gt;\&lt;/span&gt;
libyaml-dev &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We go to the &lt;a href="https://github.com/asdf-vm/asdf/releases" rel="noopener noreferrer"&gt;latest releases of pre-compiled asdf binaries&lt;/a&gt; from their repository and download the latest version tailored for our architecture (for the vast majority, it is &lt;code&gt;amd64&lt;/code&gt;). &lt;strong&gt;As of this writing, version 0.18.0 is pre-compiled.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this, we'll place the downloaded file in our home directory. We now extract the archive using the  &lt;code&gt;tar&lt;/code&gt; utility:&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;tar&lt;/span&gt; -xzf asdf-v0.18.0-linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We then move the now-extracted binary to &lt;code&gt;/usr/local/bin&lt;/code&gt;(and make it executable via &lt;code&gt;chmod&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;&lt;span class="nb"&gt;sudo&lt;/span&gt; mv asdf /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we can verify if &lt;code&gt;asdf&lt;/code&gt; is on our shell's &lt;code&gt;$PATH&lt;/code&gt; by running the following:&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;type&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; asdf
&lt;span class="c"&gt;# asdf is /usr/local/bin/asdf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuring shell for asdf
&lt;/h3&gt;

&lt;p&gt;We add the shims to our PATH using our &lt;code&gt;.bashrc&lt;/code&gt; shell config. We can simply echo it to the file without opening any text editor:&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;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we source &lt;code&gt;.bashrc&lt;/code&gt; or also completely restart the terminal:&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;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;For &lt;code&gt;zsh&lt;/code&gt;, the steps are the same, only that the above command must be appended to &lt;code&gt;~/.zshrc&lt;/code&gt; or adding &lt;code&gt;asdf&lt;/code&gt; to the plugins list of your Oh-My-Zsh configuration, then source &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Similar to the guide above for macOS, we can now install the Ruby plugin for asdf and install the version of Ruby that we want.&lt;/p&gt;

&lt;h3&gt;
  
  
  Applying Ruby to Shell or Working Directory
&lt;/h3&gt;

&lt;p&gt;We simply set the Ruby version to be used, noting that a &lt;code&gt;.tool-versions&lt;/code&gt; file will be created at &lt;code&gt;~&lt;/code&gt; or wherever working directory you're currently on. At the time of writing, we set it to version &lt;code&gt;3.4.5&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;asdf &lt;span class="nb"&gt;set &lt;/span&gt;ruby 3.4.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fk9g0tdsaf1mjc3i0tum9.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%2Fk9g0tdsaf1mjc3i0tum9.png" alt="A screenshot depicting a Windows 11 environment using WSL to showcase a Ruby installation via asdf, an interpreter, and session of Ruby on Rails" width="800" height="450"&gt;&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%2F8mbp5rpj3jw3xps62hi7.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%2F8mbp5rpj3jw3xps62hi7.png" alt="A screenshot depicting a Linux Mint environment to showcase a Ruby installation via asdf, an interpreter, and session of Ruby on Rails" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Installing Gems! 💎
&lt;/h2&gt;

&lt;p&gt;Think of gems like Python or C/C++ libraries; they're also Ruby code that's also open-source! However, do note that this is applied/installed globally, so if you're working on a Ruby project that has gems (or dependencies) that your global Ruby environment does not necessarily need, it's important that you separate them (like using &lt;em&gt;Bundler&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Importing gems to a Ruby project is similar to the likes of C/C++ and Python save for syntax differences&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// C/C++&lt;/span&gt;
&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;stdio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# PYTHON
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# RUBY&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rake'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anyway back to Linux, I'll be installing the gem &lt;code&gt;pry&lt;/code&gt; which will allow me to have an interactive shell in the Terminal:&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;gem &lt;span class="nb"&gt;install &lt;/span&gt;pry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how you add these gems or libraries into your Ruby environment. Also notice how we need elevated permissions with the &lt;code&gt;sudo&lt;/code&gt; command when installing most gems.&lt;/p&gt;

&lt;p&gt;After installation, we can immediately interact with the Ruby interpreter by simply typing &lt;code&gt;pry&lt;/code&gt; in the terminal! You can perform the same tests I've done above!&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%2Fdfmxthjusawdcxpab4of.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%2Fdfmxthjusawdcxpab4of.png" alt="A screenshot of the Linux Mint desktop showcasing three Terminal window; one listing the Ruby version and the gems, one showing the interpreted local .rb file, and one with the interactive shell with " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Now that you have reached the end, you have not only installed Ruby as a fresh development environment alongside your system, but also discovered the convenience of version managers and learned the basics on how to install gems on your Ruby environment! You can now use this environment to run Ruby files with the &lt;code&gt;ruby&lt;/code&gt; command in the Terminal or interpret Ruby lines real-time with your respective interactive shells. With the power of gems, you can now explore the vastness of there is to offer with the simplicity of Ruby!&lt;/p&gt;

&lt;p&gt;For documentation on the Ruby programming language such as manuals, head &lt;a href="https://www.ruby-lang.org/en/documentation/" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Hope to do a future article on a deep dive on gems, specifically &lt;em&gt;Ruby on Rails&lt;/em&gt;!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Navigating Technological Enthusiasm: Al, Privacy, and Virtue Ethics in Human-Computer Interaction</title>
      <dc:creator>Luigi Antonio Guillen</dc:creator>
      <pubDate>Mon, 19 Feb 2024 12:47:59 +0000</pubDate>
      <link>https://dev.to/up_min_sparcs/navigating-technological-enthusiasm-al-privacy-and-virtue-ethics-in-human-computer-interaction-1cpe</link>
      <guid>https://dev.to/up_min_sparcs/navigating-technological-enthusiasm-al-privacy-and-virtue-ethics-in-human-computer-interaction-1cpe</guid>
      <description>&lt;h6&gt;
  
  
  📖 10 min. read
&lt;/h6&gt;

&lt;p&gt;This article was co-authored by &lt;a class="mentioned-user" href="https://dev.to/quennebria"&gt;@quennebria&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You live in a time of rapid technological advancement and change. With all your enthusiasm, you're missing something important, aren't you? How do we handle ethics, privacy, and surveillance?&lt;/p&gt;

&lt;p&gt;With Artificial lntelligence (AI), regarding to data collection, are concerns over its aggressiveness, loss of privacy, and even unintended consequences. How do we address these gray areas of AI? This is where virtue ethics comes into play.&lt;/p&gt;

&lt;p&gt;In this article, we will dive into ethical considerations around the integration of Artificial Intelligence (AI) into our daily life, particularly with privacy issues and use of virtue ethics in human-computer interaction. &lt;em&gt;A moral machine-driven future isn’t science fiction and you can be one of the people that help make it come true.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Technological Enthusiasm in the Age of Artificial Intelligence (AI)
&lt;/h2&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%2F74ki7c1fjbhov2ie5oyo.jpeg" 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%2F74ki7c1fjbhov2ie5oyo.jpeg" alt="A meme choosing two buttons between innovation and precaution" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Artificial Intelligence (AI) is becoming increasingly ingrained in our routines, yet issues, like automation, bias, and data privacy have surfaced (Biswas, 2023). An imbalance between innovation and ethical consideration will hinder us as a whole from advancing our humanity.&lt;br&gt;
In the progress of AI, one must impart teamwork across the fields thriving with ethical values that adhere to this invention, like policy making and tackling issues in advance, considering the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is information?&lt;/li&gt;
&lt;li&gt;How is it utilized? How could a system harm communities?&lt;/li&gt;
&lt;li&gt;Who takes responsibility if things go awry?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By encouraging collaborations and discussions, we increase the likelihood of developing AI that promotes welfare.&lt;/p&gt;

&lt;p&gt;These dilemmas will always remain to be the subject of continuous navigation between progress and precaution. On the other hand, we cannot let enthusiasm lead to technology development inconsiderate of ethics as it may create technologies that might do more harm than good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy Concerns and Ethical Considerations for AI
&lt;/h2&gt;

&lt;p&gt;While we laid out a rather utopian approach to AI, there is a need to voice out back to reality. As tech enthusiasts who witnessed the advent of AI from two years ago as of this writing, many have begun to question its gray area of the do’s and don’ts when using various AI models.&lt;/p&gt;

&lt;p&gt;AI has completely changed the landscape of what already was convoluted when it comes to privacy, particularly user data. The user-generated content of the World Wide Web has been leveraged out of the box wherein these are used to train AI models.&lt;/p&gt;

&lt;p&gt;Personally when AI surfaced two years ago, the first backlash felt against AI was the creative community, particularly digital artists. An article by O'brien (2023) states that the vast majority of artists criticize AI because&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Their works being used without their permission&lt;/li&gt;
&lt;li&gt;Their art is used to train AI models (or so-called &lt;strong&gt;data scraping&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;AI Art “devalues the value of human work”&lt;/li&gt;
&lt;/ul&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%2F92v0e5q08tkv81nq56vl.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%2F92v0e5q08tkv81nq56vl.png" alt="A picture depicting a robot with a digitized background with Bob Ross as the subject/foreground" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because of this, artists and creative minds alike are much more hectic in emphasizing rights to their works, with mixed opinions about the creative landscape living with AI. This judgment towards AI goes beyond IT ethics, as it also questions its artistic ethic that art is about the hard work and emotions that were put on a canvas.&lt;/p&gt;

&lt;p&gt;Art and Artificial Intelligence are just one among many scenarios questioned about the responsible use of AI, but a common theme arises: data scraping. AI Models in particular are trained with this method which is fed with data to be better, causing concern over the data of users in the user-generated content space of the World Wide Web (also known as Web 2.0). Not only does it concern copyright, but leaves a gray area for privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy and Giving Control Back to The User
&lt;/h2&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%2F76c4lpm7dhbc9lz4s17i.jpg" 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%2F76c4lpm7dhbc9lz4s17i.jpg" alt="Close-up shot of a man reviewing his Privacy Checkup on Facebook" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As of this writing, Web 2.0 is the current iteration of the World Wide Web (Paul, 2024).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is a defined era of the World Wide Web mainly due to &lt;strong&gt;user-generated content&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;With user-generated content in mind, it gave birth to &lt;strong&gt;centralized&lt;/strong&gt; networking platforms such as social media&lt;/li&gt;
&lt;li&gt;Because the web is mostly centralized, data is viewed as a capital asset for companies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the rise of smarter web advertisements that follow you around as you surf with the help of third-party cookies, these are &lt;strong&gt;data brokers&lt;/strong&gt;-companies that’s only sole purpose is to collect and sell your data. Not only do these practices track you across the web without your consent or prior knowledge, but the user now has a unique fingerprint that can be easily identified across the web. This allows individuals or companies that capitalize on data to give you relevant advertising in exchange for your data.&lt;/p&gt;

&lt;p&gt;In the near future, Web 3, when successful, could be the pioneer of Web 3.0 that contrasts to Web 2.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decentralization&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Data is now user-first and has all the rights and consent of the owner&lt;/li&gt;
&lt;li&gt;Blockchain — &lt;em&gt;basically a transparent, distributed database&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reviewing Privacy Settings on Your Accounts
&lt;/h3&gt;

&lt;p&gt;On a personal note, when encountering account creation on another platform or application, I always hunt down for privacy controls about my data. Additionally, I can only secure not only my data but of how private or anonymous I can be on that platform.&lt;/p&gt;

&lt;p&gt;As a user of the internet, especially when you already signed up for an account on a platform, managing your account settings may seem like a horror for most. These are pages or screens you wouldn’t want to tinker with. In reality, they are usually straightforward to use! Sometimes, however, navigating through privacy settings may be vague and can get you easily lost.&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%2Fp4d7ys3d5ppq3fd06b6s.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%2Fp4d7ys3d5ppq3fd06b6s.png" alt="Screenshots depicting Google and Meta's Ad preferences settings page" width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;center&gt;Google and Meta’s Ad preferences are an example wherein they refer to the user’s basic information and other observed behavior like suggested interests and similar search queries&lt;/center&gt;
&lt;/blockquote&gt;

&lt;p&gt;With recent laws and antitrust lawsuits that sparked in recent years concerning user privacy, particularly the General Data Protection Regulation (GDPR), companies were required to give the user a transparent overview of how their information and data is used.&lt;/p&gt;

&lt;p&gt;Some platforms or services collect your data for a number of reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is used to improve the application, platform, or service&lt;/li&gt;
&lt;li&gt;Data is used to sell to advertisers to give you a personalized experience&lt;/li&gt;
&lt;li&gt;Data is/may be used to train AI models for a better experience (i.e. Grammarly AI)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are concerned about your privacy, you are free to review these settings either by selecting parts of your data not to be shared, completely opting out of a personalized experience, or by deleting your data from the company from which your account was made.&lt;/p&gt;

&lt;p&gt;In short, if you’re concerned about your privacy as a user, you could either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voluntarily let all of your data be collected&lt;/li&gt;
&lt;li&gt;Only select some of your data to be collected&lt;/li&gt;
&lt;li&gt;Opt-out entirely of the platform or service’s data collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the very least, it’s about giving control back to the user of how their data should be managed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtue Ethics and Technological Enthusiasm
&lt;/h2&gt;

&lt;p&gt;As tech enthusiasts, ethics, particularly IT ethics, are important to take note of every day. These are a set of moral principles and do’s-and-don’ts that one must adhere in the field of technology looking forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Applying Virtue Ethics to Human-Computer Interaction
&lt;/h3&gt;

&lt;p&gt;Virtue ethics offers an important frame for the ethical considerations of AI. Hagendorff (2022) says about the abecedarian principles of virtue are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Equivalency&lt;/li&gt;
&lt;li&gt;Compassion&lt;/li&gt;
&lt;li&gt;Probity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI systems can be developed in a way that reflects moral values and ethical norms by enforcing these ideas in their design.&lt;/p&gt;

&lt;p&gt;Achieving this balance between invention and ethics becomes consummate as we become more habituated to AI in our daily lives. The excitement about progress has the effect that it can make one learn new effects about inventions and technology, but it can also beget a person to overlook troubles or unintended consequences. Training AI can be directed to conform to moral norms using virtue ethics.&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%2Fn55czulelcjlfdq6eurc.jpg" 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%2Fn55czulelcjlfdq6eurc.jpg" alt="A screenshot of an excerpt of a conversation in character.ai where the character's prompt is replaced with an error telling the user that the character's generated reply does not meet their guidelines" width="800" height="730"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;center&gt;In character.ai when a user enters a prompt that would lead to a “character” to say sensitive topics (i.e. inappropriate content), the character would refuse to reply and warns the user that the AI-generated prompt is against the platform's guidelines&lt;/center&gt;
&lt;/blockquote&gt;

&lt;p&gt;Virtue ethics, the primary idea of which is to develop moral rates and positive character traits, is the main end. The characteristics of empathy, translucency, and integrity are the most important for Al. Empathy should be shown by companies and inventors who are investing in AI Technology by considering the possible negative influence that Al has. Transparency should also be espoused in systems where individuals can understand how they operate and the reasons for their opinions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ethics Hidden in Plain Sight
&lt;/h3&gt;

&lt;p&gt;One of these ethics is a tech enthusiast’s duty to educate our less-tech-oriented peers and loved ones who are trying to keep up with the jargon of today’s technology in a friendly manner, not in a manner in which we assume that they would or &lt;em&gt;assume&lt;/em&gt; to know.&lt;/p&gt;

&lt;p&gt;When looking back at privacy, it’s not just about privacy to the user’s data, but the user itself. Giving back control to the user is also their means of privacy and consent, which was previously mentioned. One example is the user’s freedom to change their settings that do not necessarily default to the application’s preference.&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%2Fu5xa6x58hvz8r3cbk44w.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%2Fu5xa6x58hvz8r3cbk44w.png" alt="A series of screenshots depicting the Facebook application and the navigation to the user's notification preferences" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;center&gt;Buried underneath an obscured level of menus that’s not entirely “social media” friendly, Facebook has settings, for example, for controlling how notifications are sent through your device, e-mail, or SMS&lt;/center&gt;
&lt;/blockquote&gt;

&lt;p&gt;By default, every user on Facebook will have notifications sent through your device and e-mail, but we have the freedom to change it to our preference and liking with these granular settings. Personally, I changed these settings so that notifications would only happen inside the app. Knowing this paradigm, we may consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notification preferences&lt;/li&gt;
&lt;li&gt;Email subscriptions&lt;/li&gt;
&lt;li&gt;Optional data sharing (to the platform)&lt;/li&gt;
&lt;li&gt;Any (Optional) checkbox that you checked thinking it’s necessary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shedding some light that we change settings on this centralized platform is a gesture of “bringing back control to the user”.&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%2F8l0rkzim0g9xavhb8rj0.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%2F8l0rkzim0g9xavhb8rj0.png" alt="Screenshots of an e-mail thread, a registration form, and a cookie consent popup in several websites. The e-mail thread is emphasizing on the unsubscribe link on the bottom while the registration form emphasizes the optional checkbox to receive promotional" width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;center&gt;An email thread, a registration form with an optional checkbox, and a cookie popup asking the user if they accept all cookies or review if the user denies cookies&lt;/center&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;It is not all the time we have to agree or check an option or action&lt;/li&gt;
&lt;li&gt;If you are literate enough and see that you have the right not to, you can always leave that checkbox unchecked&lt;/li&gt;
&lt;li&gt;If the platform provides it, you have the right to unsubscribe to a mailing list or change notification preferences that are flooding your email inbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you are tech literate enough to scour through every “Settings” page of any application or platform or read carefully if you “Reject all cookies” on a webpage, you will feel that you have regained your privacy and control as a user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&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%2Fqhpdf4eay7boztvy7lb2.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%2Fqhpdf4eay7boztvy7lb2.png" alt="Fistbump between a human and robot knuckle" width="468" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With technology having rapid and exponential progress, being enthusiastic about it sometimes lets us forget about consideration to be ethical and human-friendly without infringing one’s rights, especially when it comes to the user-generated content of the World Wide Web. With AI one of the rapidly developing technologies of the decade, we should also develop responsible technologies—empathy, transparency and responsibility around Al will help us keep our humanness while bringing technology into our lives.&lt;/p&gt;

&lt;p&gt;As tech enthusiasts, we should be happy and responsible advocates of Artificial Intelligence and remember that you have every right and control when it comes to your data and privacy!&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%2Fwzu7l8r40fsmhyv8jzxh.jpeg" 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%2Fwzu7l8r40fsmhyv8jzxh.jpeg" alt="A meme depicting the guy who was previously troubled picking between the two buttons of innovation and precaution, now pressing both of them at the same time, satisfied" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://link.springer.com/article/10.1007/s13347-022-00553-z" rel="noopener noreferrer"&gt;https://link.springer.com/article/10.1007/s13347-022-00553-z&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/impacts-ai-robotics-automation-data-privacy-laws-adhere-biswas" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/impacts-ai-robotics-automation-data-privacy-laws-adhere-biswas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.computer.org/publications/tech-news/trends/artists-mad-at-ai" rel="noopener noreferrer"&gt;https://www.computer.org/publications/tech-news/trends/artists-mad-at-ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.techtarget.com/searchcio/tip/Top-Web-30-trends-and-predictions" rel="noopener noreferrer"&gt;https://www.techtarget.com/searchcio/tip/Top-Web-30-trends-and-predictions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://journals.sagepub.com/doi/10.1177/2053951718820549" rel="noopener noreferrer"&gt;https://journals.sagepub.com/doi/10.1177/2053951718820549&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoworld.com/article/3712021/3-visions-for-the-future-of-the-internet.html" rel="noopener noreferrer"&gt;https://www.infoworld.com/article/3712021/3-visions-for-the-future-of-the-internet.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>ethics</category>
      <category>privacy</category>
      <category>user</category>
    </item>
  </channel>
</rss>
