<?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: Armstrong</title>
    <description>The latest articles on Forem by Armstrong (@lilarmstrong).</description>
    <link>https://forem.com/lilarmstrong</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%2F166700%2F7e565891-392d-4dae-ab26-9c5a87f00b2d.jpeg</url>
      <title>Forem: Armstrong</title>
      <link>https://forem.com/lilarmstrong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/lilarmstrong"/>
    <language>en</language>
    <item>
      <title>Install and setup WireGuard VPN client on Ubuntu</title>
      <dc:creator>Armstrong</dc:creator>
      <pubDate>Thu, 19 Dec 2024 16:41:57 +0000</pubDate>
      <link>https://forem.com/lilarmstrong/install-and-setup-wireguard-vpn-client-on-ubuntu-45oo</link>
      <guid>https://forem.com/lilarmstrong/install-and-setup-wireguard-vpn-client-on-ubuntu-45oo</guid>
      <description>&lt;p&gt;Follow these steps to install and setup WireGuard VPN client on Ubuntu&lt;/p&gt;

&lt;h3&gt;
  
  
  Install the WireGuard VPN client
&lt;/h3&gt;

&lt;p&gt;To install the VPN client, you need to run the following command&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 &lt;span class="nb"&gt;install &lt;/span&gt;wireguard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install ResolvConf
&lt;/h3&gt;

&lt;p&gt;WireGuard relies on &lt;code&gt;resolvconf&lt;/code&gt; to manage DNS settings when bringing up the VPN interface&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 &lt;span class="nb"&gt;install &lt;/span&gt;resolvconf &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the &lt;code&gt;resolveconf&lt;/code&gt; service&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;systemctl restart resolvconf.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setup the VPN Configuration file
&lt;/h3&gt;

&lt;p&gt;Move the VPN configuration files to the wireguard directory: &lt;code&gt;/etc/wireguard&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;mv&lt;/span&gt; &amp;lt;location of config file&amp;gt;/&amp;lt;config_file.conf&amp;gt; /etc/wireguard/&amp;lt;config_file.conf&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Ensure that the configuration file has a valid name. That is, no special characters only alpha-numeric characters are allowed. For example: &lt;code&gt;my_vpn&lt;/code&gt; or &lt;code&gt;my-vpn&lt;/code&gt; is not a valid file name. Instead use &lt;code&gt;myVPN&lt;/code&gt; or &lt;code&gt;myvpn&lt;/code&gt; or &lt;code&gt;vpn001&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Start up the WireGuard interface using the configuration file:
&lt;/h3&gt;

&lt;p&gt;Change your directory to &lt;code&gt;/etc/wireguard&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;wg-quick up &amp;lt;config_file_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;config_file_name&amp;gt;&lt;/code&gt; with the actual name of your configuration file (without the &lt;code&gt;.conf&lt;/code&gt; extension). For example, if your file is &lt;code&gt;myvpn.conf&lt;/code&gt;, the command would be:&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;wg-quick up myvpn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can stop the WireGuard VPN client by running the command: wq-quick down  &lt;/p&gt;

&lt;h3&gt;
  
  
  Verify that the VPN client is running:
&lt;/h3&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;wg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To stop the WireGuard VPN, run the following commands&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;wg-quick down &amp;lt;config_file_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should get a similar output as shown in the screenshot attachment below:&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%2Feamlku3wyzvoadsxrnzc.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%2Feamlku3wyzvoadsxrnzc.png" alt="Screenshot that verifies that the wireGuard VPN is running" width="575" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you followed this tutorial to this point and you get the above result, pat your self on the back. You’ve made it. Now share this to others. Bis später!&lt;/p&gt;

</description>
      <category>wireguard</category>
      <category>ubuntu</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why the R1 Rabbit OS Device Isn't Worth the Hype</title>
      <dc:creator>Armstrong</dc:creator>
      <pubDate>Mon, 17 Jun 2024 12:39:41 +0000</pubDate>
      <link>https://forem.com/lilarmstrong/why-the-r1-rabbit-os-device-isnt-worth-the-hype-246i</link>
      <guid>https://forem.com/lilarmstrong/why-the-r1-rabbit-os-device-isnt-worth-the-hype-246i</guid>
      <description>&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%2Flge51loseju7yzj9uwxn.gif" 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%2Flge51loseju7yzj9uwxn.gif" alt="The R1 device. Source: Rabbit" width="800" height="450"&gt;&lt;/a&gt;The debut of the R1 device promised a revolutionary gadget that could understand its owner and automate mundane visual tasks, a feature touted as a significant leap in mobile technology. When I pre-ordered the R1 device in January 2024, I had high expectations, fuelled by the considerable hype surrounding it. However, after receiving my order in June 2024, I found myself disappointed as the device fell short of my expectations. Below, I highlight key reasons why the Rabbit R1 device may not be the best choice for everyone, hoping to aid you in making an informed purchasing decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limited Conversation Duration
&lt;/h3&gt;

&lt;p&gt;Activating the voice prompt on the R1 device involves pressing and holding a button on the right-hand side. While this seems straightforward, the dual-purpose nature of this button—as both a voice activation and power button—results in a frustratingly short conversation window. Hold the button too long, and the device powers off, cutting off your interaction. Though there is an option to use an on-screen keyboard and images to communicate with the AI, this defeats the purpose of the device, as these tasks can be performed just as easily on a standard mobile device.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limited App Connections
&lt;/h3&gt;

&lt;p&gt;The R1 connects to apps like Spotify through its Large Action Model (LAM), which Rabbit describes as a method for the device to navigate and perform actions within apps based on user requests. This innovation aims to make the R1 more than just an information retrieval tool. However, the device currently supports only four apps: Uber for food, Spotify, DoorDash, and MidJourney. While Rabbit promises the ability to teach the device to use any app, the current limited app support significantly diminishes its value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Device Color
&lt;/h3&gt;

&lt;p&gt;Color plays a significant role in user experience, influencing emotions and behavior. The R1 device comes in red, a color that, while impactful, is not ideal for prolonged and diverse use due to its stimulating effects. Colors that promote calmness and clarity, such as blues and greens, would have been more appropriate, enhancing focus and comfort. While I was willing to overlook this in hopes that the device’s other benefits would outweigh my concerns, it unfortunately did not.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Issues
&lt;/h3&gt;

&lt;p&gt;The AI in the R1 device is far from novel. There are instances where the AI fails to respond or leaves the user clueless about ongoing processes. This often happens when the AI doesn’t understand the context or specific words. Although the device sometimes indicates when it hasn’t understood a query, there are many occasions where no feedback is provided, leading to a poor user experience. Additionally, the R1 lacks GPS and navigation capabilities and performs basic tasks like setting reminders and sending emails poorly. The necessity of being online 24/7 to use the R1 is another significant drawback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Poor Battery Life
&lt;/h3&gt;

&lt;p&gt;The R1 device’s battery life is unimpressive. For a device primarily using voice prompts, I expected a longer battery life. However, I found that the battery depletes quickly even when the device is idle. For instance, after leaving the device unused overnight, it was completely drained by the next morning despite starting at 100% charge.&lt;/p&gt;

&lt;h3&gt;
  
  
  No USB Charging Cable
&lt;/h3&gt;

&lt;p&gt;Another disappointing aspect was the lack of a USB charger and cable in the package. While this might have been a trade-off for a cheaper device, including a charger, even at an additional cost, would have been more user-friendly and cost-effective for the end user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confusing User Interface
&lt;/h3&gt;

&lt;p&gt;The R1 device’s user interface is confusing and not user-friendly. The lack of a comprehensive user manual exacerbates this issue, leading to a frustrating user experience. The interfaces introduced by the R1 team are not intuitive, making navigation and usage more complicated than necessary.&lt;/p&gt;




&lt;p&gt;In summary, while the R1 Rabbit OS device promised innovation, it falls short in several critical areas. Its limited conversation duration, poor app connectivity, unsuitable color choice, unreliable AI performance, lack of basic features, inadequate battery life, absence of essential accessories, and confusing user interface collectively contribute to a disappointing user experience. Potential buyers should carefully consider these drawbacks before purchasing the R1 device. The r1 device seems futuristic, but in my own honest opinion, it isn’t worth your time. Life with the r1 should be awesome, but it is a mess.&lt;/p&gt;

</description>
      <category>rabbitos</category>
      <category>technology</category>
      <category>ai</category>
      <category>computing</category>
    </item>
    <item>
      <title>How to install and uninstall Davinci Resolve using Terminal on Linux</title>
      <dc:creator>Armstrong</dc:creator>
      <pubDate>Fri, 08 Sep 2023 06:44:25 +0000</pubDate>
      <link>https://forem.com/lilarmstrong/how-to-install-and-uninstall-davinci-resolve-using-terminal-on-linux-1jg7</link>
      <guid>https://forem.com/lilarmstrong/how-to-install-and-uninstall-davinci-resolve-using-terminal-on-linux-1jg7</guid>
      <description>&lt;p&gt;Are you struggling to install/uninstall Davinci resolve on Linux OS? This article will help you do just that. It has been written to be concise and clear and I would be worth your time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Davinci Resolve?
&lt;/h2&gt;

&lt;p&gt;According to the official website:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DaVinci Resolve is the world’s only solution that combines editing, color correction, visual effects, motion graphics and audio post production all in one software tool! Its elegant, modern interface is fast to learn and easy enough for new users, yet powerful for professionals. DaVinci Resolve lets you work faster and at a higher quality because you don’t have to learn multiple apps or switch software for different tasks. That means you can work with camera original quality images throughout the entire process. It’s like having your own post production studio in a single app! Best of all, by learning DaVinci Resolve, you’re learning how to use the exact same tools used by Hollywood professionals!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To learn more about the software, you can visit their official website &lt;a href="https://www.blackmagicdesign.com/products/davinciresolve"&gt;here&lt;/a&gt;&lt;br&gt;
For demonstration purpose, I will be using Kali Linux to show you how to install/uninstall Davinci resolve.The steps shown here should work on any Debian Linux system. &lt;/p&gt;
&lt;h2&gt;
  
  
  How to install Davinci Resolve
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;To install Davinci Resolve, navigate to their website &lt;a href="https://www.blackmagicdesign.com/products/davinciresolve"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You should find a download button. Click the download button. You have to select the download based on the Operating System you are using. In this case, select the Linux operating system.&lt;/li&gt;
&lt;li&gt;You might be presented with a registration form. Which is fine. Just fill out all the required fields with the appropriate information.&lt;/li&gt;
&lt;li&gt;Once you are done filling the form, you can click the submit button and the download will begin automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;The application version at the time of writing is version 18 and the application size is 2.1GiB. So you should have enough disk space to cater for it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you have downloaded it, you will need navigate to the download folder and extract the downloaded archive. Open your terminal using &lt;code&gt;ctrl+alt+t&lt;/code&gt; or from the application launcher, search for the &lt;code&gt;terminal&lt;/code&gt; program. Navigate to the download location. We will be using &lt;code&gt;unzip&lt;/code&gt; command-line tool to extract the archive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unzip DaVinci_Resolve_18.x.x_Linux.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To install the application, follow the steps below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Once you are there, you need to write the following command as a root user to install Davinci Resolve
&lt;/li&gt;
&lt;/ol&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; ./DaVinci_Resolve_18.x.x_Linux.run &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the command completes, it should create a desktop entry where you can launch your application. That's it! :)&lt;/p&gt;

&lt;h2&gt;
  
  
  How to uninstall Davinci Resolve
&lt;/h2&gt;

&lt;p&gt;To uninstall Davinci Resolve, still in the extracted archive location, write the following commands:&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; ./DaVinci_Resolve_17.1.1_Linux.run &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;if you found this article helpful, don’t forget to like, follow, share and recommend this article to your friends and colleagues. Until we see again. :)&lt;/p&gt;

</description>
      <category>davinciresolve</category>
      <category>linux</category>
      <category>install</category>
      <category>uninstall</category>
    </item>
    <item>
      <title>How to setup path aliases in Vite 2,3 &amp; Typescript</title>
      <dc:creator>Armstrong</dc:creator>
      <pubDate>Thu, 10 Aug 2023 04:31:22 +0000</pubDate>
      <link>https://forem.com/lilarmstrong/how-to-setup-path-aliases-in-vite-23-typescript-54bn</link>
      <guid>https://forem.com/lilarmstrong/how-to-setup-path-aliases-in-vite-23-typescript-54bn</guid>
      <description>&lt;p&gt;&lt;em&gt; As of August 2023, this approach still works with Vite version 2 and 3. So whenever I mention Vite, I am referring to the version 2 and 3. Let me know if you encounter any problems in the comment section.&lt;br&gt;
&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have you ever thought of how to get rid of imports resembling &lt;code&gt;../../assets/*&lt;/code&gt; or &lt;code&gt;../../../assets/*&lt;/code&gt; in your vite project? Well, this article will help you to do just that.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reasons for Usage
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Simplify referencing the project root.&lt;/li&gt;
&lt;li&gt;Address module resolution errors when modifying files in directories.&lt;/li&gt;
&lt;li&gt;Satisfy your curiosity&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Alias Setup
&lt;/h2&gt;

&lt;p&gt;In this guide, I'll use the alias &lt;code&gt;@&lt;/code&gt; to denote the project root. This approach is demonstrated using a React project scaffolded with Vite. The technique can be applied to Vue, AngularJS, or other frameworks supporting &lt;a href="https://www.typescriptlang.org/"&gt;TypeScript&lt;/a&gt;. Learn how to scaffold a Vite app &lt;a href="https://vitejs.dev/guide/#scaffolding-your-first-vite-project"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Follow these steps to set up path aliases for TypeScript and Vite:&lt;/p&gt;


&lt;h2&gt;
  
  
  Steps to Follow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open your project's &lt;code&gt;tsconfig.json&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Inside the &lt;code&gt;compilerOptions&lt;/code&gt; section, add:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"paths"&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;"@/*"&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="s2"&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;This informs TypeScript to map module names matching the &lt;code&gt;@/*&lt;/code&gt; pattern to &lt;code&gt;src/*&lt;/code&gt; at runtime. Note that paths are resolved relative to the &lt;code&gt;baseUrl&lt;/code&gt; value of the project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update your Vite configuration (&lt;code&gt;vite.config.ts&lt;/code&gt;) as follows:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="c1"&gt;// ... other configurations&lt;/span&gt;
       &lt;span class="na"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
               &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ensure you've installed &lt;code&gt;@types/node&lt;/code&gt; for improved type checking.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Before:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;reactLogo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./asset/react.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;reactLogo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/asset/react.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/App.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your application should continue functioning correctly. Feel free to explore other options. If this guide was useful, let me know by commenting, sharing and giving a thumbs up.&lt;/p&gt;

</description>
      <category>vite</category>
      <category>typescript</category>
      <category>path</category>
      <category>alias</category>
    </item>
  </channel>
</rss>
