<?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: Adriano Gil</title>
    <description>The latest articles on DEV Community by Adriano Gil (@adrianogil).</description>
    <link>https://dev.to/adrianogil</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%2F1550114%2F6eda5158-aaa9-4e22-b4cb-68b65a92e30b.png</url>
      <title>DEV Community: Adriano Gil</title>
      <link>https://dev.to/adrianogil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adrianogil"/>
    <language>en</language>
    <item>
      <title>Blogging with Obsidian and Jekyll</title>
      <dc:creator>Adriano Gil</dc:creator>
      <pubDate>Wed, 05 Feb 2025 23:34:52 +0000</pubDate>
      <link>https://dev.to/adrianogil/blogging-with-obsidian-and-jekyll-5bgl</link>
      <guid>https://dev.to/adrianogil/blogging-with-obsidian-and-jekyll-5bgl</guid>
      <description>&lt;p&gt;&lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt; is a &lt;strong&gt;static site generator&lt;/strong&gt; that transforms Markdown files into a fully functional website. Everything is generated into plain HTML, which makes it simple to deploy on platforms like &lt;a href="https://docs.github.com/en/pages/quickstart" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Pages&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Writing in Obsidian&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt; for writing because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It supports &lt;strong&gt;Markdown&lt;/strong&gt;, making it easy to format posts.&lt;/li&gt;
&lt;li&gt;I can organize posts with &lt;strong&gt;tags and metadata&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It keeps my writing centralized before publishing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each blog post has metadata that determines if it’s ready for publication. Drafts are excluded from processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Templates in Obsidian
&lt;/h3&gt;

&lt;p&gt;To standardize my blog posts, I use &lt;strong&gt;templates&lt;/strong&gt; in Obsidian. Templates help maintain consistency across different posts and speed up the writing process. So any time I want to start a new post I first create a &lt;a href="https://github.com/adrianogil/ObsidianVault/blob/main/Templates/GilLabs%20Post%20Planning%20-%20Template.md" rel="noopener noreferrer"&gt;planning note&lt;/a&gt; with brainstorming ideas and references. Then I create a &lt;a href="https://github.com/adrianogil/ObsidianVault/blob/main/Templates/GilLabs%20Post%20Text%20-%20Template.md?plain=1" rel="noopener noreferrer"&gt;post note&lt;/a&gt; which contains the full text and metadata for each post. &lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://blacksmithgu.github.io/obsidian-dataview/" rel="noopener noreferrer"&gt;Dataview&lt;/a&gt;, an Obsidian plugin that allows me to &lt;strong&gt;query and display content dynamically&lt;/strong&gt; based on metadata, I can track posts in different stages of completion, identify missing translations, and view related notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Jekyll-Multiple-Languages-Plugin&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;jekyll-multiple-languages-plugin&lt;/code&gt; helps me to structure my content in multiple languages by creating different versions of each post. Here’s how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;My blog supports &lt;strong&gt;English, Portuguese, and French&lt;/strong&gt;, configured in &lt;code&gt;_config.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;languages:
 - en
 - pt
 - fr
default_lang: en
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each language has its own directory inside &lt;code&gt;_i18n/&lt;/code&gt;, for example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_i18n/en/_posts/2025-02-01-my-post.md
_i18n/pt/_posts/2025-02-01-meu-post.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The plugin automatically generates language-specific URLs:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://adrianogil.github.io/blog/en/2025/02/my-post/
https://adrianogil.github.io/blog/pt/2025/02/meu-post/
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can switch languages using a simple &lt;strong&gt;language selector&lt;/strong&gt; in the blog UI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Automating the Blog Post Processing with Python&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Manually copying Markdown files, managing assets, and handling metadata can be time-consuming. To ease my blogging process, I use a Python script that automates the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracting blog posts from my &lt;strong&gt;Obsidian&lt;/strong&gt; vault.&lt;/li&gt;
&lt;li&gt;Copying and processing images.&lt;/li&gt;
&lt;li&gt;Formatting metadata for &lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Jekyll&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Placing the final post in my blog’s &lt;a href="https://docs.github.com/en/pages/quickstart" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Pages&lt;/strong&gt;&lt;/a&gt; repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Fetching Notes&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;First, it gathers notes marked with a specific tag (&lt;code&gt;GilLabs/posts/text&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;notes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_notes_from_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GilLabs/posts/text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;as_obsidian_notes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;notes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;note&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;note&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;notes&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures only &lt;strong&gt;published&lt;/strong&gt; posts are processed.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Generating the Jekyll Blog Post File&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Each post is formatted into Jekyll’s &lt;code&gt;_posts&lt;/code&gt; structure with the correct &lt;strong&gt;date, language, and categories&lt;/strong&gt;. Metadata such as &lt;strong&gt;title, layout, and categories&lt;/strong&gt; are preserved.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;categories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2025-02-01&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;16:41:00&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
&lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;en&lt;/span&gt;
&lt;span class="na"&gt;lang-ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;intro-git&lt;/span&gt;
&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;post&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;First&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Steps&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Git"&lt;/span&gt;
&lt;span class="na"&gt;updated&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-02-01T16:41&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="gu"&gt;## Introduction&lt;/span&gt;
Hey there! I often find myself explaining Git from the ground up,...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;4. Deploying the Blog&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once the script updates the html files in my Jekyll project, I simply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the site&lt;/strong&gt; with:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://adrianogil.github.io/blog/2025/02/intro-git/" rel="noopener noreferrer"&gt;Push the changes&lt;/a&gt; to GitHub Pages&lt;/strong&gt; with:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"New blog post"&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within minutes, my blog is live!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>First Steps with Git</title>
      <dc:creator>Adriano Gil</dc:creator>
      <pubDate>Sat, 01 Feb 2025 20:46:12 +0000</pubDate>
      <link>https://dev.to/adrianogil/first-steps-with-git-5bfh</link>
      <guid>https://dev.to/adrianogil/first-steps-with-git-5bfh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hey there! I often find myself explaining Git from the ground up, so I decided to write this short introductory guide as a handy reference. This guide will walk you through the very basics. By the end of this post, you'll know how to set up your first repository, make your first commit, and more. Let's get started!&lt;/p&gt;

&lt;p&gt;I can't recommend enough having a playground local repository so you can test each command. You should be able to freely move around your repository noticing how each command changes the current state of your files and the commit history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Your First Git Repository
&lt;/h2&gt;

&lt;p&gt;First things first, let's set up your Git repository. This is where your project's history will live.&lt;/p&gt;

&lt;p&gt;To create a new Git repository, open your terminal and navigate to your project's directory. Then, run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This command sets up a brand new Git repository in your project folder. Easy, right?&lt;/p&gt;

&lt;p&gt;After running &lt;code&gt;git init&lt;/code&gt;, a hidden &lt;code&gt;.git&lt;/code&gt; directory is created. This directory contains all the necessary metadata and objects that Git uses to track and manage your project's history. &lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Files to Your Repository
&lt;/h2&gt;

&lt;p&gt;Next, let's add some files to your repository.&lt;/p&gt;

&lt;p&gt;Think of the staging area like a shopping cart—you gather changes here before you check out (commit) To add a file, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &amp;lt;file_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;file_name&amp;gt;&lt;/code&gt; with the name of your file. The &lt;code&gt;&amp;lt;file_name&amp;gt;&lt;/code&gt; is now on staging area. The staging area lets you review and prepare changes before committing them.&lt;/p&gt;

&lt;p&gt;If you want to add all changes in the current folder (including deletions and modifications), you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To see what's in your staging area and what's changed in your working directory, use:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This command gives you a summary of the current state of your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Committing Your Changes
&lt;/h2&gt;

&lt;p&gt;Now, let's commit your changes. A commit is like a snapshot of your project at a specific point in time.&lt;/p&gt;

&lt;p&gt;To commit your changes with a message, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Your commit message"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure your message is clear and descriptive so you know what this commit is about later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visualizing Your Commit History
&lt;/h2&gt;

&lt;p&gt;Seeing your commit history can be very helpful. To visualize your commit history, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--oneline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command shows a graphical representation of your commit history, which can be really useful for understanding how your project has evolved.&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%2Fb07oibcbydcid2yb2bql.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%2Fb07oibcbydcid2yb2bql.png" alt="Image description" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing Changes to a Remote Repository
&lt;/h2&gt;

&lt;p&gt;Once you've made some commits, you might want to share your work with others or back it up to a remote repository like GitHub.&lt;/p&gt;

&lt;p&gt;First, you need to add a remote repository. If you're using GitHub, it might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin https://github.com/yourusername/your-repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, push your changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command uploads your changes to the main branch of your remote repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Git Mindset
&lt;/h2&gt;

&lt;p&gt;To really make the most of Git, it helps to get familiar with how it works and the key parts of your project from Git’s perspective: the filesystem, the staging area, and commits. This workflow is all about how changes move through Git until they’re safely recorded in your project’s history.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Working Directory (Filesystem)&lt;/strong&gt;: When you modify files in your project, you're working directly in the filesystem. This is where you create, edit, and delete files. At this stage, these changes are not yet tracked by Git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Staging Area&lt;/strong&gt;: After making changes, you add the modified files to the &lt;em&gt;staging area&lt;/em&gt; using the &lt;code&gt;git add&lt;/code&gt; command. Think of the staging area as a clipboard for changes—it's where you prepare what will be included in your next snapshot. This step allows you to control exactly which changes are part of the next commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Commit as a Node in the Tree&lt;/strong&gt;: When you're ready, you use &lt;code&gt;git commit&lt;/code&gt; to take a snapshot of the staged changes. This snapshot acts like a &lt;em&gt;node&lt;/em&gt; in Git's version history, forming a connected structure. Each commit points back to its parent, creating a sequence of changes rather than separate folders. A branch is simply a pointer to one of these sequences, not a container of its own. By focusing on how changes flow through the tree, you can navigate Git more effectively and understand its true power.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A common mistake when thinking about Git is to see branches as if they were folders, but this mindset can be misleading. Instead of focusing on individual branches as separate containers, it’s better to see Git as a tree of changes—where each commit is a node and branches are just pointers to different sequences of snapshots.&lt;/p&gt;

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

&lt;p&gt;And that's it! You've just taken your first steps with Git. You now know how to set up a repository, add files, commit changes, push to a remote repository, and understand the basics of how Git works. Keep practicing these commands, and soon you'll be a Git pro!&lt;/p&gt;

&lt;p&gt;Remember, where Git is used, there is always hope. With Git, you can rewind changes, recover past versions of your code, and even undo mistakes with ease. It allows multiple developers to work on the same project and it’s the best way to share code with others. &lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;p&gt;If you want to dive deeper into Git, check out these resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/doc" rel="noopener noreferrer"&gt;Official Git Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guides.github.com/" rel="noopener noreferrer"&gt;GitHub Guides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jvns.ca/#git" rel="noopener noreferrer"&gt;Julia Evans' blog&lt;/a&gt; – I can’t recommend it enough! Intuitive explanations of Git commands and internals.&lt;/li&gt;
&lt;li&gt;Tools for visualizing your Git commit history, like &lt;a href="https://www.sourcetreeapp.com/" rel="noopener noreferrer"&gt;Sourcetree&lt;/a&gt; or &lt;a href="https://www.gitkraken.com/" rel="noopener noreferrer"&gt;GitKraken&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>My Roadmap for 2025</title>
      <dc:creator>Adriano Gil</dc:creator>
      <pubDate>Wed, 01 Jan 2025 23:45:05 +0000</pubDate>
      <link>https://dev.to/adrianogil/my-roadmap-for-2025-mjm</link>
      <guid>https://dev.to/adrianogil/my-roadmap-for-2025-mjm</guid>
      <description>&lt;p&gt;Several years ago, I started &lt;a href="https://adrianogil.github.io/blog/index.html" rel="noopener noreferrer"&gt;this blog&lt;/a&gt; as an excuse to document my learning process in some areas and to serve as additional material for courses or talks I've given. In 2025, I'm planning to make better use of this space—to keep track of what I’ve been working on and reflect on my progress. So, as the first post of the year, here are my professional goals for 2025.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Improving Technical Skills&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With over 10 years of experience working on &lt;a href="https://adrianogil.github.io/gameportfolio/" rel="noopener noreferrer"&gt;Unity projects for games, VR, and AR&lt;/a&gt;—plus a background in computer vision algorithms—I’ve had the chance to work on some fascinating challenges. However, over the past year, I’ve shifted my focus toward backend and mobile development, and in 2025, I’m doubling down on these areas.&lt;/p&gt;

&lt;p&gt;My main goal is to earn two certifications: &lt;strong&gt;AWS Certified Developer&lt;/strong&gt; and &lt;strong&gt;Android Enterprise Professional&lt;/strong&gt;. These will deepen my understanding of cloud services and enterprise mobile solutions, allowing me to contribute more effectively to my team’s full-stack projects.&lt;/p&gt;

&lt;p&gt;On top of this, I’ve started studying &lt;strong&gt;Godot&lt;/strong&gt; and &lt;strong&gt;Unreal Engine&lt;/strong&gt;, exploring procedural content generation (PCG) techniques such as mesh generation. It’s been exciting to dive into these engines and tackle algorithmic challenges, which I plan to continue throughout the year.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;PhD Research: Educational Games, LLMs, and Game AI&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As part of my PhD studies, I’m researching how large language models (LLMs) can be used in educational games. My goal is to explore methods that reduce development time and create games better aligned with pedagogical goals for classroom use. Over the past few years, I’ve published a couple of papers related to educational games, including one on learning analytics presented at &lt;a href="https://sol.sbc.org.br/index.php/sbgames_estendido/article/view/32061" rel="noopener noreferrer"&gt;last year’s SBGames conference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In parallel, I’m also exploring Game AI techniques such as procedural content generation (PCG) and NPC behavior learning, which have the potential to streamline the development of more dynamic and targeted game experiences. These topics have been a focus of mine for some time, and I’m excited to continue working on them.&lt;/p&gt;

&lt;p&gt;This year, I plan to advance my research and share updates as they become available. It’s a challenging but rewarding journey, and I look forward to contributing further to the fields of AI and educational games.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Language Learning Goals&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Language learning has been a long-term passion of mine, and 2025 is no exception. My plan for the year includes improving my metrics across all the languages I’m studying. Here’s how I’ll approach it: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spaced Repetition Systems (SRS):&lt;/strong&gt; I’ll expand my use of tools like Anki and possibly develop new ones to make my study sessions more effective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reading and Writing:&lt;/strong&gt; I’ll continue investing time in both areas to build a stronger foundation. Obsidian will play a key role here as a space to draft new texts and document insights from my reading sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listening:&lt;/strong&gt; Podcasts will remain my go-to resource for improving comprehension, and I’ll take notes in Obsidian to capture key phrases or expressions I want to revisit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speaking:&lt;/strong&gt; I plan to practice conversational skills more regularly, including using Advanced Voice Mode in ChatGPT for simulated dialogue practice. &lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Writing More&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Finally, one of my key goals for 2025 is to write more on this blog. Documenting my journey not only helps me reflect but also allows me to share insights with others. Whether it’s about tech, research, or personal growth, I’m excited to post more consistently this year.&lt;/p&gt;




&lt;p&gt;That’s my roadmap for 2025! If you have similar goals or are working on something interesting, feel free to share—I’d love to hear about it. Let’s make this year one of progress and growth!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
    </item>
  </channel>
</rss>
