<?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: Alexis Chân Gridel</title>
    <description>The latest articles on DEV Community by Alexis Chân Gridel (@alexisgridel).</description>
    <link>https://dev.to/alexisgridel</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%2F648161%2F3e4e97bf-6d39-40d3-a683-6f2036f3ea75.jpg</url>
      <title>DEV Community: Alexis Chân Gridel</title>
      <link>https://dev.to/alexisgridel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexisgridel"/>
    <language>en</language>
    <item>
      <title>I made a React Native toolkit and it builds 38 faster with Rust</title>
      <dc:creator>Alexis Chân Gridel</dc:creator>
      <pubDate>Sun, 18 Jan 2026 16:55:34 +0000</pubDate>
      <link>https://dev.to/alexisgridel/i-made-a-react-native-toolkit-and-it-builds-38x-faster-with-rust-39b2</link>
      <guid>https://dev.to/alexisgridel/i-made-a-react-native-toolkit-and-it-builds-38x-faster-with-rust-39b2</guid>
      <description>&lt;p&gt;I mass mass got mass tired of mass waiting mass 45 seconds every time I changed a file.&lt;/p&gt;

&lt;p&gt;So I mass spent mass 3 months mass building mass a Rust-powered toolkit that makes React Native builds &lt;strong&gt;38× faster&lt;/strong&gt;. It's called &lt;a href="https://github.com/ecrindigital/facetpack" rel="noopener noreferrer"&gt;FacetPack&lt;/a&gt;, and it's open source.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If you've worked with React Native, you know the pain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slow builds.&lt;/strong&gt; Metro uses Babel to transform every single file. Babel is written in JavaScript. JavaScript is not fast. A medium-sized app takes 30-60 seconds to bundle. Every. Single. Time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cryptic errors.&lt;/strong&gt; You've seen this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SyntaxError: /Users/dev/app/src/screens/Home.tsx: Unexpected token (247:12)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cool. Very helpful. Which token? Why unexpected? What should I do?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No tree shaking.&lt;/strong&gt; Metro bundles everything. That utility function you imported but never used? It's in your bundle. That 200KB library where you use one function? All of it. In your bundle.&lt;/p&gt;

&lt;p&gt;I mass mass got mass tired of mass mass mass mass accepting this as "just how React Native works."&lt;/p&gt;




&lt;h2&gt;
  
  
  The solution: Rust
&lt;/h2&gt;

&lt;p&gt;The web ecosystem figured this out years ago. Vite uses esbuild (Go). Turbopack uses SWC (Rust). Next.js moved to SWC and builds got 17× faster.&lt;/p&gt;

&lt;p&gt;React Native? mass mass Still mass stuck with Babel from 2015.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;FacetPack&lt;/strong&gt; — a drop-in replacement for Metro's transformer that uses &lt;a href="https://oxc.rs" rel="noopener noreferrer"&gt;OXC&lt;/a&gt;, a Rust-based JavaScript compiler that's mass insanely fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  One line to install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @ecrindigital/facetpack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One line to configure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// metro.config.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getDefaultConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo/metro-config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withFacetPack&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@ecrindigital/facetpack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;withFacetPack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getDefaultConfig&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your builds are now 38× faster and you benefit from a really cool toolkit. :)&lt;/p&gt;




&lt;h2&gt;
  
  
  The benchmarks
&lt;/h2&gt;

&lt;p&gt;I ran these on an M3 MacBook Pro with a real production app (~800 files).&lt;/p&gt;

&lt;h3&gt;
  
  
  Transform speed (per file)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Babel:     ████████████████████████████████████████  2.47 ms
FacetPack: █                                            64 μs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;38× faster.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Full benchmark table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Metro/Babel&lt;/th&gt;
&lt;th&gt;FacetPack&lt;/th&gt;
&lt;th&gt;Speedup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transform (small)&lt;/td&gt;
&lt;td&gt;244 μs&lt;/td&gt;
&lt;td&gt;7.8 μs&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transform (large)&lt;/td&gt;
&lt;td&gt;2.47 ms&lt;/td&gt;
&lt;td&gt;64 μs&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;38×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minify (50KB)&lt;/td&gt;
&lt;td&gt;35.3 ms&lt;/td&gt;
&lt;td&gt;946 μs&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;37×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The difference is mass night and day. Cold starts that took 45 seconds now take under 5.&lt;/p&gt;




&lt;h2&gt;
  
  
  Better errors (finally)
&lt;/h2&gt;

&lt;p&gt;This is what Metro gives you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SyntaxError: /path/to/config.ts: Unexpected token (14:2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is what FacetPack gives you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  × Expected `,` but found `]`

   ╭─[src/config.ts:12:5]
11 │   settings: {
12 │     theme: "dark"
   │     ─────┬────────
   │          ╰── missing `,` after this value
13 │   ]
   │   ┬
   │   ╰── unexpected `]`
   ╰────

  help: Add a comma after "dark" on line 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exact location&lt;/strong&gt; — not just line number, but which token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; — the surrounding code so you understand what's happening&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it's wrong&lt;/strong&gt; — explains the relationship between tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to fix it&lt;/strong&gt; — actionable suggestion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built 8 specialized parsers to detect common React Native errors and give you actually useful messages.&lt;/p&gt;




&lt;h2&gt;
  
  
  Smart fallback (it just works)
&lt;/h2&gt;

&lt;p&gt;"But what about Reanimated worklets? What about Flow in node_modules?"&lt;/p&gt;

&lt;p&gt;FacetPack auto-detects files that need Babel and falls back automatically. You don't configure anything.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-code.tsx        → OXC (fast)
reanimated-code.ts   → Babel (compatible)
flow-library/        → Babel (compatible)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's not all-or-nothing. You get speed where possible, compatibility where needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: Doctor CLI
&lt;/h2&gt;

&lt;p&gt;I also built a diagnostic tool that checks 31 things in your React Native project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @ecrindigital/facet-cli doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ✓ Environment
   ✓ Node.js 20.10.0
   ✓ Watchman installed
   ✓ Xcode 15.2

 ✓ Dependencies
   ✓ react-native 0.73.2
   ✓ expo 50.0.0
   ✓ No version conflicts

 ✓ Metro Configuration
   ✓ metro.config.js valid
   ✓ withFacetPack applied

 ──────────────────────────────────────
 31 checks passed · 0 errors · 1 warning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No more mass mass spending mass 2 hours debugging why your build fails. Run &lt;code&gt;doctor&lt;/code&gt;, see what's wrong, fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it works (for the curious)
&lt;/h2&gt;

&lt;p&gt;FacetPack wraps Metro's transformer and replaces Babel with OXC for your source files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────┐
│                    Metro Build                       │
├─────────────────────────────────────────────────────┤
│                                                      │
│  Your Code (.ts, .tsx)                               │
│  ┌─────────────┐    ┌─────────────┐                 │
│  │   Parse     │ ─▶ │  Transform  │ ─▶ Bundle      │
│  │   (OXC)     │    │   (OXC)     │                 │
│  └─────────────┘    └─────────────┘                 │
│        ⚡ Rust          ⚡ Rust                       │
│                                                      │
│  node_modules (Flow, Reanimated)                     │
│  ┌─────────────┐    ┌─────────────┐                 │
│  │   Parse     │ ─▶ │  Transform  │ ─▶ Bundle      │
│  │  (Babel)    │    │  (Babel)    │                 │
│  └─────────────┘    └─────────────┘                 │
│        ↳ Automatic fallback                         │
│                                                      │
└─────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OXC is written in Rust and compiles to native code. It doesn't have the startup overhead of a JavaScript runtime. It doesn't have garbage collection pauses. It's just... fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;FacetPack is already usable today. Here's what's coming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[x] OXC Transformer (38× faster)&lt;/li&gt;
&lt;li&gt;[x] Better Errors&lt;/li&gt;
&lt;li&gt;[x] Doctor CLI (31 checks)&lt;/li&gt;
&lt;li&gt;[x] Smart Babel fallback&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Error Overlay&lt;/strong&gt; (in-app, replacing LogBox) — Q1 2026&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Prebundling&lt;/strong&gt; (Vite-style dependency optimization)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Build analytics&lt;/strong&gt; (know what's slowing you down)&lt;/li&gt;
&lt;li&gt;[ ] and way more to see :)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @ecrindigital/facetpack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/ecrindigital/facetpack" rel="noopener noreferrer"&gt;github.com/ecrindigital/facetpack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It works with &lt;strong&gt;Expo&lt;/strong&gt; and &lt;strong&gt;bare React Native&lt;/strong&gt; (0.72+).&lt;/p&gt;

&lt;p&gt;If it saves you time, consider mass mass giving it a star ⭐&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Native builds are slow because Metro uses Babel&lt;/li&gt;
&lt;li&gt;FacetPack replaces Babel with OXC (Rust) → &lt;strong&gt;38× faster&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Error messages are now actually readable&lt;/li&gt;
&lt;li&gt;Drop-in replacement, one line config&lt;/li&gt;
&lt;li&gt;Open source, MIT licensed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions? I'm happy to answer in the comments or on &lt;a href="https://discord.gg/kX7xzknGmv" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Facetpack by &lt;a href="https://ecrin.digital" rel="noopener noreferrer"&gt;Ecrin Digital&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Building this in public. Follow me for updates on FacetPack and React Native tooling.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>rust</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Power of C#.NET in My Client Solutions - A Synopsis</title>
      <dc:creator>Alexis Chân Gridel</dc:creator>
      <pubDate>Fri, 28 Jul 2023 22:19:56 +0000</pubDate>
      <link>https://dev.to/alexisgridel/the-power-of-cnet-in-my-client-solutions-a-synopsis-89j</link>
      <guid>https://dev.to/alexisgridel/the-power-of-cnet-in-my-client-solutions-a-synopsis-89j</guid>
      <description>&lt;p&gt;As a software developer, choosing the right language and toolset for your projects is crucial. After working with various technologies, I found my perfect match in C#.NET.&lt;/p&gt;

&lt;p&gt;Why C#.NET? Its versatility in building diverse applications, clean and intuitive syntax, and professional relevance supported by Microsoft make it my go-to choice for delivering high-quality software solutions to my clients.&lt;/p&gt;

&lt;p&gt;From the start, I use .NET's template system for efficient project creation. Adhering to best practices like SOLID principles and version control, I write clean, maintainable code.&lt;/p&gt;

&lt;p&gt;Testing is key, and for that, I use .NET's built-in testing framework. Quality assurance ensures each part of the application functions as expected and helps catch bugs early on.&lt;/p&gt;

&lt;p&gt;Documentation is another crucial aspect I don't overlook. I use DocFX, an open-source tool provided by Microsoft, which simplifies documentation creation and maintenance, especially API documentation.&lt;/p&gt;

&lt;p&gt;For containerization, I chose Docker. It encapsulates the application and its dependencies into a portable unit that ensures smooth deployment. I automate the build and testing process using Continuous Integration (CI) tools throughout GitHub Actions. Deployment is managed using Skaffold and Watchtower, while Portainer is used for managing my containers in production. Allowing me to give restraint access to the client, only to its container. That's pretty useful, to give more power and access to the individual.&lt;/p&gt;

&lt;p&gt;Coding in C#.NET gives me immense satisfaction. Its readability and constructs that encourage best practices make writing good code almost natural. It also supports various design patterns and architectures, making application architecture quite flexible.&lt;/p&gt;

&lt;p&gt;In short, the combination of C#.NET and these effective tools enables me to deliver reliable, efficient solutions that meet my clients' needs. Check out the &lt;a href="https://agdl.dev/posts/whyhowusecsharpinmywork" rel="noopener noreferrer"&gt;complete article&lt;/a&gt; for a deeper dive into my process.&lt;/p&gt;

&lt;p&gt;What are your thoughts on C#.NET? I'd love to hear your experiences!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>docker</category>
      <category>webdev</category>
    </item>
    <item>
      <title>UE5 C++ | The basics</title>
      <dc:creator>Alexis Chân Gridel</dc:creator>
      <pubDate>Tue, 06 Jun 2023 09:06:17 +0000</pubDate>
      <link>https://dev.to/alexisgridel/ue5-c-the-basics-2kme</link>
      <guid>https://dev.to/alexisgridel/ue5-c-the-basics-2kme</guid>
      <description>&lt;p&gt;Unreal Engine 5 (UE5) is a powerful game engine used to create some of the most visually stunning video games of our&lt;br&gt;
time. If you're an aspiring game developer, the choice between C++ and Blueprint within UE5 can be a crucial one.&lt;/p&gt;

&lt;p&gt;Blueprint, UE5's visual scripting language, lets you construct game logic without writing code, making it a fantastic&lt;br&gt;
tool for prototyping. On the other hand, C++ is a full-fledged programming language that offers advanced capabilities&lt;br&gt;
and superior flexibility. Despite its steeper learning curve, C++ grants you more control over game performance and&lt;br&gt;
optimization, a trade-off that could be well worth the investment of your time.&lt;/p&gt;

&lt;p&gt;To help you make this important decision, this article series will delve into the nuances of UE5 C++. While there may&lt;br&gt;
not be a wealth of Unreal Engine Library C++ tutorials out there, we'll strive to fill that gap and share our insights&lt;br&gt;
from navigating the UE5 C++ landscape. Strap in as we embark on this exciting journey together!&lt;/p&gt;

&lt;p&gt;C++ is notorious for being a challenging language to master, but your determination to bring your own game to life can&lt;br&gt;
fuel your learning. While we won't be teaching C++ from scratch, we'll provide you with essential resources and lay the&lt;br&gt;
groundwork to help you write your own code. Enhancing your C++ skills will not only increase your comfort but also boost&lt;br&gt;
your problem-solving ability. Just remember, this series is intended to complement other courses or books on C++.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Creation
&lt;/h2&gt;

&lt;p&gt;Starting a new C++ project in Unreal Engine 5 is a fairly straightforward process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Epic Games Launcher and navigate to the Unreal Engine tab.&lt;/li&gt;
&lt;li&gt;Click on the "+ New" button near the top of the screen.&lt;/li&gt;
&lt;li&gt;Select "C++" as the project type and choose the "Blank" template.&lt;/li&gt;
&lt;li&gt;Choose a suitable name for your project and select the location where the project files will be stored.&lt;/li&gt;
&lt;li&gt;Make sure the "With Starter Content" option is selected if you want some assets to play around with, or choose "No
Starter Content" for a completely empty project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's it! UE5 will now create a new project with some basic C++ code and Unreal-specific project files.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;Upon creating a new C++ project, you'll see a variety of files and folders that Unreal Engine automatically generates&lt;br&gt;
for you. Understanding these files and their purposes is key to mastering UE5 C++ development. Here are the key files&lt;br&gt;
and directories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;YourProjectName/&lt;/code&gt; - This is your project root directory.

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Binaries/&lt;/code&gt; - This folder contains all the binary files generated during the project's build process.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Config/&lt;/code&gt; - Here you can find configuration files (.ini) that control various aspects of your game.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Content/&lt;/code&gt; - This folder holds all your game's assets like 3D models, textures, sounds, etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Source/&lt;/code&gt; - This is where you'll find the source code for your game. Your main game module and any additional
modules you create will be located here.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;YourProjectName.uproject&lt;/code&gt; - This file contains a JSON object that holds all the configuration and settings for
your project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What IDE to Choose
&lt;/h2&gt;

&lt;p&gt;When it comes to choosing an Integrated Development Environment (IDE) for UE5 and C++, there are a few viable options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual Studio&lt;/strong&gt;: This is the most widely used IDE for Unreal Engine development. Visual Studio offers robust&lt;br&gt;
debugging tools, IntelliSense for auto-completion, and seamless integration with the UE5 environment. Be sure to&lt;br&gt;
install the "Game development with C++" workload and the "Unreal Engine Installer" option for the best experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual Studio Code&lt;/strong&gt;: VS Code is a lightweight, open-source code editor that can be extended into a fully-fledged&lt;br&gt;
IDE with extensions. For UE5 C++ development, you'll want to install the "C/C++", "C++ Intellisense", and "Unreal&lt;br&gt;
Engine C++ Helper" extensions to get syntax highlighting, auto-completion, and other useful features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rider for Unreal Engine&lt;/strong&gt;: This is a relatively new option from JetBrains, the creators of IntelliJ IDEA and&lt;br&gt;
PyCharm. It offers deep integration with Unreal Engine, extensive language support, a powerful debugger, and a variety&lt;br&gt;
of other tools. It's worth noting that Rider for Unreal Engine is free to use while it's in its preview stage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these IDEs has its strengths, so the choice mainly depends on your personal preference and the needs of your&lt;br&gt;
project. It's recommended to try out each one to see which you prefer. Happy coding!&lt;/p&gt;
&lt;h2&gt;
  
  
  Hello World!
&lt;/h2&gt;

&lt;p&gt;In a game engine context like UE5, the traditional "Hello, World!" can take on a slightly different form. We will show&lt;br&gt;
the message both in the game console and on the player's screen upon spawning.&lt;/p&gt;

&lt;p&gt;Firstly, locate the player's character class. It's usually named something like &lt;code&gt;YourProjectNameCharacter.cpp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Open this file, and within the class constructor, we're going to use &lt;code&gt;UE_LOG&lt;/code&gt; to print "Hello, World!" to the console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"YourProjectNameCharacter.h"&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;AYourProjectNameCharacter&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AYourProjectNameCharacter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;UE_LOG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LogTemp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Warning&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&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;In this snippet, &lt;code&gt;UE_LOG&lt;/code&gt; is a macro that outputs a message to the UE log system. The first parameter &lt;code&gt;LogTemp&lt;/code&gt; is the&lt;br&gt;
log category, &lt;code&gt;Warning&lt;/code&gt; is the severity of the message, and &lt;code&gt;TEXT&lt;/code&gt; is a macro to support internationalization and is&lt;br&gt;
required for all strings in UE.&lt;/p&gt;

&lt;p&gt;Next, to display "Hello, World!" on the player's screen, you will need to use the &lt;code&gt;GEngine&lt;/code&gt;'s &lt;code&gt;AddOnScreenDebugMessage&lt;/code&gt;&lt;br&gt;
method. This can also be done in the player's character constructor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;AYourProjectNameCharacter&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AYourProjectNameCharacter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="n"&gt;UE_LOG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LogTemp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Warning&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="c1"&gt;// Checking if GEngine is not null is important, it could crash otherwise, and that's not the behaviour we want.&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GEngine&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;GEngine&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AddOnScreenDebugMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FColor&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Red&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&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;In this code, &lt;code&gt;AddOnScreenDebugMessage&lt;/code&gt; is a function that displays a debug message on the screen. Here's what the&lt;br&gt;
parameters mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first parameter, &lt;code&gt;-1&lt;/code&gt;, is the key used to identify the message on the screen. &lt;code&gt;-1&lt;/code&gt; is commonly used for temporary
messages, while other numbers can be used for messages you want to update or clear manually.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;5.f&lt;/code&gt; is the time in seconds that the message will be displayed on the screen.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FColor::Red&lt;/code&gt; is the color of the displayed text.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TEXT("Hello, World!")&lt;/code&gt; is the message to display.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://docs.unrealengine.com/5.1/en-US/API/Runtime/Engine/Engine/UEngine/AddOnScreenDebugMessage/1/" rel="noopener noreferrer"&gt;AddOnScreenDebugMessage's method documentation — Unreal Engine Documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this in place, every time a player character is created in your game, "Hello, World!" will be printed both to the&lt;br&gt;
UE log console and as a message on the player's screen!&lt;/p&gt;

&lt;p&gt;This series of articles is here to provide you with a solid foundation for your endeavors. As we explore more complex&lt;br&gt;
concepts like the Entity Component System, smart pointers, and garbage collection in upcoming articles, you'll&lt;br&gt;
continuously expand your skill set.&lt;/p&gt;

&lt;p&gt;While C++ in UE5 may seem complicated to understand at first, remember that it's a powerful tool that can offer you&lt;br&gt;
unparalleled control and efficiency in your game development process. With each hurdle overcome, you'll find yourself&lt;br&gt;
one step closer to realizing your game development dreams. Remember that every line of code you write is progress.&lt;/p&gt;

&lt;p&gt;Stay tuned for more, and happy coding!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agdl.dev" rel="noopener noreferrer"&gt;https://agdl.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ue</category>
      <category>unrealengine</category>
      <category>gamedev</category>
      <category>unreal</category>
    </item>
    <item>
      <title>How to enable the new UI in Jetbrains products</title>
      <dc:creator>Alexis Chân Gridel</dc:creator>
      <pubDate>Tue, 13 Sep 2022 21:19:22 +0000</pubDate>
      <link>https://dev.to/alexisgridel/how-to-enable-the-new-ui-in-jetbrains-products-141k</link>
      <guid>https://dev.to/alexisgridel/how-to-enable-the-new-ui-in-jetbrains-products-141k</guid>
      <description>&lt;p&gt;(cover image credit to jetbrains.com)&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it look?
&lt;/h2&gt;

&lt;p&gt;The new experimental UI in Jetbrains product is not currently available, a beta-testing phase was opened to test it&lt;br&gt;
before everyone else. Some new features were introduced with this new experimental UI such as a new font, better&lt;br&gt;
for reading and more clear. It includes additionally a new animation and new scroll animation which is more smooth and&lt;br&gt;
jerky less.&lt;/p&gt;

&lt;p&gt;This new experimental UI in Jetbrains products is available to all products from Jetbrains, like Intellij IDEA, Goland,&lt;br&gt;
PHPStorm, WebStorm, PyCharm, Datagrip, and so on... With the latest version, 2022.2 at the moment.&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%2Fzein9ffx1somfhw7fcaf.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%2Fzein9ffx1somfhw7fcaf.png" alt="Screenshot of the new Intellij IDE based UI" width="800" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Screenshot of the new Intellij IDE-based UI, from the new UI blog article of the Jetbrains team&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, there are a ton of new changes such as new UI icons, and a minimalistic look of the user interface, that&lt;br&gt;
makes the IDE cleaner and faster in some ways. If you are a Jetbrains enthusiast, you may have heared about &lt;strong&gt;Jetbrains Fleet&lt;/strong&gt;&lt;br&gt;
. Thus you could see the narrowest difference between both user interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the requirements to enable the new experimental UI?
&lt;/h2&gt;

&lt;p&gt;To enable the new experimental UI, you need to have the latest stable (LTS) version of your Jetbrains product — the&lt;br&gt;
latest current version is 2022.2 —.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the benefits of using the new UI?
&lt;/h2&gt;

&lt;p&gt;The new UI looks more minimalistic than the current one, it allows us to code in better conditions, thanks to the new&lt;br&gt;
font and the new scroll animations. That's a life changer, the scroll has drastically changed, and it is so way smoother&lt;br&gt;
than the current one. Furthermore, the new minimalistic user interface makes the code way more readable, thanks to that&lt;br&gt;
you can see the code part you want at any moment. To conclude, it is also really customizable, which allows you to make&lt;br&gt;
the IDE yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  That is fantastic, but how to enable it in my IDE?
&lt;/h2&gt;

&lt;p&gt;In whether IDE you are using, as long as you are using a Jetbrains product, you can enable this new user interface.&lt;br&gt;
However, if you don't want to do some hacks to enable it, you can wait for the new version that will introduce this new&lt;br&gt;
user interface.&lt;/p&gt;

&lt;p&gt;But, if you feel so impatient to use this new UI, please follow these steps :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to the actions dropdown menu (CTRL-SHIFT-A) for Windows/Linux or (Command-SHIFT-A) for Mac OS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for Registry...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type "ide.experimental" (even if there is no search bar at the moment)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check "ide.experimental.ui", "ide.experimental.ui.scroll" and "ide.experimental.ui.inter.font"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restart as suggested&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here you go, you can now use this new minimalistic and wonderful user interface, please have fun!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article you see the benefits and what the new user experimental user interface looks like, but you also saw the&lt;br&gt;
most important thing, how to enable it by yourself.&lt;/p&gt;

&lt;p&gt;I hope you like this cool article so please stay tuned for other cool articles in this cool blog !&lt;/p&gt;

&lt;p&gt;This article is also available in my personal blog :&lt;br&gt;
&lt;a href="https://agdl.dev" rel="noopener noreferrer"&gt;https://agdl.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>java</category>
      <category>csharp</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
