<?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: Ruben Alvarado</title>
    <description>The latest articles on DEV Community by Ruben Alvarado (@ralvaracode).</description>
    <link>https://dev.to/ralvaracode</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%2F3500185%2Fee0dc951-b768-477e-8de9-886c6eb397b3.jpg</url>
      <title>DEV Community: Ruben Alvarado</title>
      <link>https://dev.to/ralvaracode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ralvaracode"/>
    <language>en</language>
    <item>
      <title>MongoDB didn't start because of File permission issue</title>
      <dc:creator>Ruben Alvarado</dc:creator>
      <pubDate>Fri, 27 Feb 2026 20:52:10 +0000</pubDate>
      <link>https://dev.to/ralvaracode/mongodb-didnt-start-because-of-file-permission-issue-19i5</link>
      <guid>https://dev.to/ralvaracode/mongodb-didnt-start-because-of-file-permission-issue-19i5</guid>
      <description>&lt;p&gt;The Wired Tiger Turtle in the logs&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Originalled published on &lt;a href="https://ralvaracode.hashnode.dev/when-mongodb-refuses-to-start" rel="noopener noreferrer"&gt;Web Warrior Toolbox&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Wired Tiger Turtle Story...
&lt;/h2&gt;

&lt;p&gt;While troubleshooting a project, I wanted to run the db locally before deploying my hotfix. I set my pc for that and I mocked a database with some useful data for my test before deploying to production that day.&lt;/p&gt;

&lt;p&gt;Two days later a new issue that needed a hotfix came to me and I needed to test again with a local database. I tried to start the db with the usual command &lt;code&gt;systemctl start mongod&lt;/code&gt; but I saw it didn't start when I checked with &lt;code&gt;systemctl status mongod&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When I checked status I saw a message saying that it didn't start but i couldn't understand the reason why.🤨&lt;/p&gt;

&lt;p&gt;After following multiple suggestions from chatbots and getting lost myself 😵‍💫 I understood that the answer to that question was in a place I didn't use to look at 💬​: THE LOGS! 🪵​&lt;/p&gt;

&lt;p&gt;In Linux you have that place dedicated to record what did your applications say and probably you didn't see or don't remember. Just look at &lt;code&gt;/var/log&lt;/code&gt; and then check your respective log.&lt;/p&gt;

&lt;p&gt;In my case I found the file &lt;code&gt;/var/log/mongodb/mongod.log&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Since it had many lines I just checked the last part of the log with the &lt;code&gt;tail&lt;/code&gt; 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 tail&lt;/span&gt; &lt;span class="nt"&gt;-n300&lt;/span&gt; /var/log/mongodb/mongod.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Still with that I got a wall of text so i decided to fed my chatbot to provide some advice. The chatbot showed that the most frequent text was indeed the most important part of this issue.&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="o"&gt;[&lt;/span&gt;ERROR]: __posix_open_file, 924: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied&lt;span class="s2"&gt;"}} 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;A wild Wire-tiger-turtle-appeared!🔌​🐯​​🐢&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The chatbot suggested that &lt;code&gt;/var/lib/mongodb/WiredTiger.turtle&lt;/code&gt; should be owned by &lt;code&gt;mongodb&lt;/code&gt;. I noted the file was owned by root. I tryed changing the owner to mongodb and it didn't work. Then tried changing the folder to be owned by mongodb. This last attemp was sucesful when i restarted mongod and check with &lt;code&gt;systemctl status mongod&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned from that story
&lt;/h2&gt;

&lt;p&gt;This story is longer than what I wrote. At the start I didn't know where to look and i received suggestions from the chatbot that lead me nowhere. This is the reason why I want to highlight the importance of logs. They provide some important detail that you can use to feed a chatbot, chat with another team member and to understand yourself what is happening. Take this story as a way to keep checking them when issues arise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side story
&lt;/h2&gt;

&lt;p&gt;why did that &lt;code&gt;wiredTiger.turtle&lt;/code&gt; file became owned by root? Well it happened that when I did the first hot fix I started the db with &lt;code&gt;sudo mongod --config /etc/mongod.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With that command I could use mongodb without problems during that session but I got the problem I tried to tweak again the app two days later.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let's keep coding, dev-san ​🤓​ 頑張って!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>mongodb</category>
      <category>linux</category>
      <category>database</category>
      <category>webdev</category>
    </item>
    <item>
      <title>PostGres Database Replication Using Pglogical</title>
      <dc:creator>Ruben Alvarado</dc:creator>
      <pubDate>Tue, 24 Feb 2026 20:52:44 +0000</pubDate>
      <link>https://dev.to/ralvaracode/postgres-database-replication-using-pglogical-3pd3</link>
      <guid>https://dev.to/ralvaracode/postgres-database-replication-using-pglogical-3pd3</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ralvaracode.hashnode.dev/postgres-database-replication-using-pglogical" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is an example of PostgreSQL database replication using the pglogical extension. In this example, I used Docker containers, with each container having its own database. When data is written to the primary database, the secondary container receives the same data.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👨‍💻A man proudly told his wife, &lt;em&gt;“I’m an SQL DB admin!”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;She threw him out of the house…&lt;/p&gt;

&lt;p&gt;Because he had &lt;strong&gt;one to many relationships&lt;/strong&gt;💔 — SQL News Network&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Start Docker
&lt;/h2&gt;

&lt;p&gt;If you have docker engine use&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 start docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker // &lt;span class="k"&gt;if &lt;/span&gt;you want start at boot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you have docker desktop use this in debian Linux (installed from .deb package)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start docker-desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create configuration files
&lt;/h2&gt;

&lt;p&gt;You need to create 2 config files as shown in this folder tree&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/&amp;lt;PATH_TO_PROJECT&amp;gt;/docker/
│
├── Dockerfile.pglogical
└── postgres/
    └── docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Define config files
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; is the file that defines how to run the containers.&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;cd&lt;/span&gt; &amp;lt;RATH_TO_PROJECT&amp;gt;/docker/postgres/ 
nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;paste this content for your yml&lt;/p&gt;

&lt;p&gt;container names are inside the services part. For these example containers are &lt;code&gt;pg1&lt;/code&gt; and &lt;code&gt;pg2&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;services:
  pg1:
    build:
      context: ..
      dockerfile: Dockerfile.pglogical      
    container_name: pg1
    &lt;span class="nb"&gt;command&lt;/span&gt;:
      - postgres
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;shared_preload_libraries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pglogical
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;wal_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;logical
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;max_replication_slots&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;max_wal_senders&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: testdb
      POSTGRES_HOST_AUTH_METHOD: trust
    ports:
      - &lt;span class="s2"&gt;"5433:5432"&lt;/span&gt;
    volumes:
      - pg1_data:/var/lib/postgresql/data
    networks:
      - pgnet

  pg2:
    build:
      context: ..
      dockerfile: Dockerfile.pglogical
    container_name: pg2
    &lt;span class="nb"&gt;command&lt;/span&gt;:
      - postgres
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;shared_preload_libraries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pglogical
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;wal_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;logical
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;max_replication_slots&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10
      - &lt;span class="nt"&gt;-c&lt;/span&gt;
      - &lt;span class="nv"&gt;max_wal_senders&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: testdb
      POSTGRES_HOST_AUTH_METHOD: trust
    ports:
      - &lt;span class="s2"&gt;"5434:5432"&lt;/span&gt;
    volumes:
      - pg2_data:/var/lib/postgresql/data
    networks:
      - pgnet

networks:
  pgnet:
    driver: bridge

volumes:
  pg1_data:
  pg2_data:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; has a limitation: It doesn’t let you install software inside the system images!&lt;/p&gt;

&lt;p&gt;Since pglogical is not included in the images we need to create &lt;code&gt;Dockerfile.pglogical&lt;/code&gt; to specify that we want to add pglogical to the image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FROM postgres:16

RUN apt-get update &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; postgresql-18-pglogical &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start the containers
&lt;/h2&gt;

&lt;p&gt;Use this command to start the containers&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;cd&lt;/span&gt; &amp;lt;ROUTE_TO_DOCKER_YML&amp;gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that containers are running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;you will get something 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;CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS                                         NAMES
c61ef5d393cc   postgres-pg1   &lt;span class="s2"&gt;"docker-entrypoint.s..."&lt;/span&gt;   3 days ago   Up 4 minutes   0.0.0.0:5433-&amp;gt;5432/tcp, &lt;span class="o"&gt;[&lt;/span&gt;::]:5433-&amp;gt;5432/tcp   pg1
b055528784d5   postgres-pg2   &lt;span class="s2"&gt;"docker-entrypoint.s..."&lt;/span&gt;   3 days ago   Up 4 minutes   0.0.0.0:5434-&amp;gt;5432/tcp, &lt;span class="o"&gt;[&lt;/span&gt;::]:5434-&amp;gt;5432/tcp   pg2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  Where each line is a container you have running&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get pglogical running in each container
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Follow this instructions for &lt;code&gt;pg1&lt;/code&gt; and &lt;code&gt;pg2&lt;/code&gt; the examples shown are also for &lt;code&gt;pg1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install pglogical in each container using 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;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; pg1 psql &lt;span class="nt"&gt;-U&lt;/span&gt; postgres &lt;span class="nt"&gt;-d&lt;/span&gt; testdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable the extension in each container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CREATE EXTENSION pglogical&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The use this sql command to check installed extensions in each container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;testdb=# \dx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;example output when pglogical is installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   List of installed extensions
   Name    | Version |   Schema   |          Description           
-----------+---------+------------+--------------------------------
 pglogical | 2.4.6   | pglogical  | PostgreSQL Logical Replication
 plpgsql   | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Register database as a pglogical node named pg1 and pg2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT pglogical.create_node(
    node_name := 'pg1',
    dsn := 'host=pg1 port=5432 dbname=testdb user=postgres password=postgres'
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create table in the provider database
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;pg1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect postgres&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT pglogical.create_replication_set(
    'demo_set',
    replicate_insert := true,
    replicate_update := true,
    replicate_delete := true,
    replicate_truncate := true
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create demo table &amp;amp; baseline data
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;pg1&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE demo_events (
    id SERIAL PRIMARY KEY,
    message TEXT,
    created_at TIMESTAMP DEFAULT now()
);

INSERT INTO demo_events (message)
SELECT 'baseline row ' || g
FROM generate_series(1,5) g;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the table to the replication set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT pglogical.replication_set_add_table(
    'demo_set',
    'demo_events'
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create subscriptor
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;pg2&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT pglogical.create_subscription(
    subscription_name := 'sub_pg1',
    provider_dsn := 'host=pg1 port=5432 dbname=testdb user=postgres password=postgres',
    replication_sets := ARRAY['demo_set'],
    synchronize_structure := true,
    synchronize_data := true
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait a few seconds, then verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM demo_events;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the &lt;strong&gt;5 baseline rows&lt;/strong&gt; on &lt;code&gt;pg2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Finally if you try to insert data in the table from pg1 (primary db) it will be successful but if you try from pg2 (replica db) you will get a error-only error. which shows that replication is working as expected.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;INSERT INTO demo_events &lt;span class="o"&gt;(&lt;/span&gt;message&lt;span class="o"&gt;)&lt;/span&gt;
VALUES &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'inserted new row'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enjoy! 🎉 You now have your replicated databases working. Feel the power of synchronized data with no more differing versions! 🔄💪&lt;/p&gt;




</description>
      <category>postgres</category>
      <category>database</category>
    </item>
    <item>
      <title>Docker Desktop and LM Studio installation</title>
      <dc:creator>Ruben Alvarado</dc:creator>
      <pubDate>Wed, 18 Feb 2026 20:44:23 +0000</pubDate>
      <link>https://dev.to/ralvaracode/docker-desktop-and-lm-studio-installation-3kdc</link>
      <guid>https://dev.to/ralvaracode/docker-desktop-and-lm-studio-installation-3kdc</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ralvaracode.hashnode.dev/docker-desktop-and-lm-studio-installation" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can self-host LLMs to automate tasks on your system like retrieving information from a website, writing a database, interacting with note apps, etc. To set up a PC for these automations you can install Docker and LM Studio. This document provides step-by-step instructions for installing and configuring these tools.🤓&lt;/p&gt;

&lt;h2&gt;
  
  
  🐳&lt;strong&gt;Install docker desktop in Ubuntu Linux&lt;/strong&gt;🐧
&lt;/h2&gt;




&lt;p&gt;Docker Desktop provides pre-packaged MCP servers to interact with web tools, databases, and other systems. It integrates seemlesly with LM Studio, which runs and manages your local LLMs.&lt;/p&gt;

&lt;p&gt;Before installing and running these tools, it is important to ensure that your system supports hardware virtualization, which is required for efficient container and virtual machine execution.&lt;/p&gt;

&lt;p&gt;First check that you have kmv module loaded to linux kernel 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;lsmod | &lt;span class="nb"&gt;grep &lt;/span&gt;kvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You should get a response like this that shows that kvm is running&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;08:14:19
kvm_intel             487424  18
kvm                  1425408  17 kvm_intel
irqbypass              12288  1 kvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Download latest DEB package. In my case I used this lnk&lt;/p&gt;

&lt;p&gt;&lt;a href="https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb?utm_source=docker&amp;amp;utm_medium=webreferral&amp;amp;utm_campaign=docs-driven-download-linux-amd64" rel="noopener noreferrer"&gt;Docker Desktop DEB package Download Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the package using apt. Replace &amp;lt;route_to_download_folder&amp;gt; with the route where you have your downloads.&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 update
 &lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;route_to_download_folder&amp;gt;
 &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; ./docker-desktop-amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Sucess you now have Docker Desktop!🤵&lt;/p&gt;
&lt;h2&gt;
  
  
  🎧&lt;strong&gt;Install LM Studio&lt;/strong&gt;
&lt;/h2&gt;



&lt;p&gt;LM Studio lets you run large language models locally on your PC, including models such as LLaMA, Mistral, and DeepSeek. Running models locally ensures full privacy and allows you to work offline.&lt;/p&gt;

&lt;p&gt;To install LM Studio, download the application from the official website:&lt;/p&gt;

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

&lt;p&gt;Follow these commands to install app image. Replace &lt;code&gt;&amp;lt;lmstudio_folder&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;download_folder&amp;gt;&lt;/code&gt; with the respective routes in your PC.&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;mkdir&lt;/span&gt; &amp;lt;lmstudio_folder&amp;gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;lmstudio_folder&amp;gt;
&lt;span class="nb"&gt;mv&lt;/span&gt; &amp;lt;download_folder&amp;gt;/LM-Studio-0.3.36-1-x64.AppImage &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x LM-Studio-0.3.36-1-x64.AppImage
./LM-Studio-0.3.36-1-x64.AppImage &lt;span class="nt"&gt;-appimage-extract&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After extraction is complete, navigate to this folder inside &lt;code&gt;&amp;lt;lmstudio_folder&amp;gt;&lt;/code&gt; and set chrome-sandbox to be executed as root from a normal user (no sudo command requiered for execution)&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;cd &lt;/span&gt;squashfs-root
&lt;span class="nb"&gt;sudo chown &lt;/span&gt;root:root chrome-sandbox
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;4755 chrome-sandbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now enable LM Studio to be found when you press windows (super key) in Ubuntu. Follow these commands to create the desktop file.&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;cd&lt;/span&gt; ~/.local/share/applications/
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano lmstudio.desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Paste these lines to the desktop file. Replace &amp;lt;USER_NAME&amp;gt; with your username in your PC&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="o"&gt;[&lt;/span&gt;Desktop Entry]
&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;LM Studio
&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Application
&lt;span class="nv"&gt;Exec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/&amp;lt;USER_NAME&amp;gt;/lmStudio/squashfs-root/lm-studio
&lt;span class="nv"&gt;Icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/&amp;lt;USER_NAME&amp;gt;/lmStudio/squashfs-root/lm-studio.png
&lt;span class="nv"&gt;Terminal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Press the super key and type “lm studio”. You can access the application without knowing its exact location now.🤩&lt;/p&gt;
&lt;h2&gt;
  
  
  References to Explore
&lt;/h2&gt;



&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://docs.docker.com/desktop/setup/install/linux/ubuntu/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocs.docker.com%2Fimages%2Fthumbnail.webp" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://docs.docker.com/desktop/setup/install/linux/ubuntu/" rel="noopener noreferrer" class="c-link"&gt;
            Ubuntu | Docker Docs
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn how to install, launch, and upgrade Docker Desktop on Ubuntu. This quick guide will cover prerequisites, installation methods, and more.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocs.docker.com%2Fassets%2Fimages%2Ffavicon-32x32.png"&gt;
          docs.docker.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/Bhzpph-OgXU"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>ai</category>
      <category>linux</category>
      <category>docker</category>
    </item>
    <item>
      <title>Set New Branch in Git</title>
      <dc:creator>Ruben Alvarado</dc:creator>
      <pubDate>Wed, 08 Oct 2025 18:35:59 +0000</pubDate>
      <link>https://dev.to/ralvaracode/set-new-branch-in-git-31gc</link>
      <guid>https://dev.to/ralvaracode/set-new-branch-in-git-31gc</guid>
      <description>&lt;p&gt;If you want to add a new feature to an app you have cloned. You can create a new branch for that feature following these git commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git switch -c &amp;lt;branch-name&amp;gt; // creates the branch
git add &amp;lt;file-or-folder&amp;gt;     // or use '.' to stage all changes
git commit -m "&amp;lt;commit-message&amp;gt;"
git push --set-upstream origin &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also simply try &lt;code&gt;git push&lt;/code&gt;, in that case you will get a warning that the branch doesn't exist in remote yet and you receive a suggestion using the &lt;code&gt;--set-upstream&lt;/code&gt; parameter. Instead of memorizing the last command with the parameter you can copy and paste the command that the terminal suggests.&lt;/p&gt;

&lt;p&gt;And that it. Use this snippet to preserve working code in master and your new code in your feature or bug fix branch.&lt;/p&gt;

&lt;p&gt;🤓Happy coding😎&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>🚀 How to Upload Environment Variables to GitLab CI/CD</title>
      <dc:creator>Ruben Alvarado</dc:creator>
      <pubDate>Sat, 13 Sep 2025 21:28:24 +0000</pubDate>
      <link>https://dev.to/ralvaracode/how-to-upload-environment-variables-to-gitlab-cicd-mo3</link>
      <guid>https://dev.to/ralvaracode/how-to-upload-environment-variables-to-gitlab-cicd-mo3</guid>
      <description>&lt;p&gt;Managing secrets and configuration in GitLab pipelines doesn’t have to be messy. Here’s a quick guide to securely upload your environment variables and integrate them into your .gitlab-ci.yml workflow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Gitlab goto left side bar, Settings, CI/CD&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to variables section, click add variable&lt;/p&gt;&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%2Fbeta.appflowy.cloud%2Fapi%2Ffile_storage%2F67b91e9f-1e54-4861-9909-2038e29a9b3d%2Fv1%2Fblob%2F1b81d85c-ec6d-406f-9903-82cf598f9cb0%2Fgdp_i-zbG263nXSlHGFRk9JnEP5XlLNq4oyqo1TWa4k%3D." 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%2Fbeta.appflowy.cloud%2Fapi%2Ffile_storage%2F67b91e9f-1e54-4861-9909-2038e29a9b3d%2Fv1%2Fblob%2F1b81d85c-ec6d-406f-9903-82cf598f9cb0%2Fgdp_i-zbG263nXSlHGFRk9JnEP5XlLNq4oyqo1TWa4k%3D." alt="Variables Menu" width="1249" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From right side bar select select &lt;code&gt;visible&lt;/code&gt; and deselect &lt;code&gt;protect variable&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%2Fa3v7irfjl2429f1v33ta.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%2Fa3v7irfjl2429f1v33ta.png" alt="Add Variable Menu" width="391" height="933"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Key write the name of the file that will store all the variables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In value enter the key and values of your variables (values are written without ")&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure that your yml script adds the env vars file&lt;br&gt;
&lt;code&gt;.gitlab-ci.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Autotest:
  stage: test
  image: node:22
  before_script:
    - cat "$ENV_VARS" | tr -d '\r' &amp;gt; .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ve now securely injected environment variables into your GitLab CI/CD pipeline. No more hardcoding secrets or juggling config files—just clean, maintainable automation.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
