<?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: Ibrahim abo eita</title>
    <description>The latest articles on DEV Community by Ibrahim abo eita (@ibrahim99035).</description>
    <link>https://dev.to/ibrahim99035</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F566247%2Fcb057c4a-cd43-40ea-a55a-623d3548cbfd.jpeg</url>
      <title>DEV Community: Ibrahim abo eita</title>
      <link>https://dev.to/ibrahim99035</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ibrahim99035"/>
    <language>en</language>
    <item>
      <title>Learning Node-RED Through 6 Practical Labs</title>
      <dc:creator>Ibrahim abo eita</dc:creator>
      <pubDate>Mon, 07 Sep 2026 05:18:32 +0000</pubDate>
      <link>https://dev.to/ibrahim99035/learning-node-red-through-6-practical-labs-4fjk</link>
      <guid>https://dev.to/ibrahim99035/learning-node-red-through-6-practical-labs-4fjk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A collection of 6 Node-RED lab flows for learning the basics: Hello World with Inject/Debug, custom logic with Function nodes, no-code routing with Switch/Change, context exchange across Node/Flow/Global scopes, and MQTT pub-sub with a live dashboard via @flowfuse/node-red-dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lab 1: Hello World
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used: [Inject - Debug]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2a4fvruftum8yjqufgt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2a4fvruftum8yjqufgt.png" alt=" " width="462" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: core message flow between 2 nodes with an inject node to reserve the message and debug node to&lt;br&gt;
print the payload.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inject Node typically used to inject data, start the flow, testing, or periodic cycles&lt;/li&gt;
&lt;li&gt;Debug Node inspects the data flowing through the wires (connections between nodes) and is
essential for troubleshooting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Lab 2 - Function Nodes
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used: [Inject - Function - Debug]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff28vvtd3bc907jmybx9x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff28vvtd3bc907jmybx9x.png" alt=" " width="561" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: same concept as lab 1 but with an additional Function node to process the data passed from the&lt;br&gt;
previous node into different output.&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="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; - processed by Function node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Function Node: Runs custom JavaScript code on the incoming message.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lab 3 - Switch
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used [Inject - Change - Switch - Debug * 2]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7lj9710672aikb4v1qk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7lj9710672aikb4v1qk.png" alt=" " width="728" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: The key idea is to control the flow with no code as we convert the degrees from&lt;br&gt;
celsius to fahrenheit and routing the output to different slots based on the value.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change Node: Runs on the main event loop of Node-RED,while Function Node is
sandboxed JS Execution. Modifies message properties without writing code. Can set,
change, move, or delete properties.&lt;/li&gt;
&lt;li&gt;Switch Node: Routes a message to different outputs based on rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Lab 4 - Context Exchange
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used [Inject * 2 - Change * 2 - Debug]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd3ogdwljkhxcljrvyf1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd3ogdwljkhxcljrvyf1.png" alt=" " width="663" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxs3vs559am1gipu2j3g.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxs3vs559am1gipu2j3g.png" alt=" " width="489" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: Node-RED has three scopes of context:&lt;br&gt;
Scope Visibility Typical use&lt;br&gt;
Node Only the single node that set it Private counters, local state inside one&lt;br&gt;
Function node&lt;br&gt;
Flow All nodes on the same tab/flow Shared data for one workflow&lt;br&gt;
Global Entire Node-RED instance Data needed by multiple flows&lt;br&gt;
Context lets you keep data between messages or across different parts of a flow.&lt;/p&gt;
&lt;h2&gt;
  
  
  Lab 5 - MQTT
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used [Inject * 2 - MQTT IN - MQTT OUT - Change - Debug]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqeoh15liz3up4ec3k5dg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqeoh15liz3up4ec3k5dg.png" alt=" " width="621" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: Decoupled communication.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mqtt out node: Publishes a message to a topic on a broker.&lt;/li&gt;
&lt;li&gt;mqtt in node: Subscribes to a topic and injects received messages into the flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Lab 6 - MQTT
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Nodes Used [Inject * 2 - MQTT IN - MQTT OUT - Change - Debug]&lt;br&gt;
*&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfht1drlgyov0us8q7u8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfht1drlgyov0us8q7u8.png" alt=" " width="666" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Filjnc2xm4d4eo5t0jnki.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Filjnc2xm4d4eo5t0jnki.png" alt=" " width="564" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FLOW: Installing the @flowfuse/node-red-dashboard palette adds UI nodes. The&lt;br&gt;
dashboard is served at &lt;code&gt;http://localhost:1880/dashboard&lt;/code&gt;.&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="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>nodered</category>
      <category>lowcode</category>
      <category>automation</category>
    </item>
    <item>
      <title>I Built an Interactive Python Slicing Quiz (With a Live Sandbox)</title>
      <dc:creator>Ibrahim abo eita</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:36:13 +0000</pubDate>
      <link>https://dev.to/ibrahim99035/i-built-an-interactive-python-slicing-quiz-with-a-live-sandbox-1l85</link>
      <guid>https://dev.to/ibrahim99035/i-built-an-interactive-python-slicing-quiz-with-a-live-sandbox-1l85</guid>
      <description>&lt;p&gt;Python slicing looks simple until it isn’t.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;a[1:-1]&lt;/code&gt;, &lt;code&gt;a[::-2]&lt;/code&gt;, out-of-bounds indices, slice assignment… these trip up beginners and intermediate devs alike.&lt;/p&gt;

&lt;p&gt;So I built a free browser quiz to practice them properly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;40+ questions across difficulty levels&lt;/li&gt;
&lt;li&gt;Multiple-choice + type-the-answer modes&lt;/li&gt;
&lt;li&gt;A live &lt;strong&gt;sandbox&lt;/strong&gt; where you can try any sequence + start/stop/step and see the result + index visualization&lt;/li&gt;
&lt;li&gt;Points, streaks, hints, high scores, keyboard shortcuts&lt;/li&gt;
&lt;li&gt;Fully client-side (HTML/CSS/JS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Play here: &lt;a href="https://ibrahim99035.github.io/python-slicing-quiz/" rel="noopener noreferrer"&gt;https://ibrahim99035.github.io/python-slicing-quiz/&lt;/a&gt; &lt;br&gt;
Source: github.com/ibrahim99035/python-slicing-quiz&lt;/p&gt;

&lt;p&gt;Feedback welcome — especially on the harder questions and the sandbox UX.&lt;/p&gt;

</description>
      <category>python</category>
      <category>slicing</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Odoo Fundamentals</title>
      <dc:creator>Ibrahim abo eita</dc:creator>
      <pubDate>Mon, 19 May 2025 06:31:08 +0000</pubDate>
      <link>https://dev.to/ibrahim99035/odoo-fundamentals-558l</link>
      <guid>https://dev.to/ibrahim99035/odoo-fundamentals-558l</guid>
      <description>&lt;h2&gt;
  
  
  What is Odoo in simple points:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpsx7qg6mxcwiq79vv53.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%2Fqpsx7qg6mxcwiq79vv53.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-source ERP platform that provides a suit for business applications.&lt;/li&gt;
&lt;li&gt;It helps companies to manage their operations.&lt;/li&gt;
&lt;li&gt;It runs entirely on webserver and has strong modular architecture. &lt;/li&gt;
&lt;li&gt;It uses Python for the backend 🐍, PostgreSQL for the database 🐘, modern JavaScript library (called OWL) for frontend 🦉, and XML (Mainly) &amp;amp; CSV (security) for data.&lt;/li&gt;
&lt;li&gt;Fully Customizable.
&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%2F9p7mat0miying9gsrwgh.png" alt=" " width="666" height="374"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Odoo Object Relational Mapping:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Odoo has a strong ORM that automatically interact with the database without writing raw SQL.&lt;/li&gt;
&lt;li&gt;It performs automatic validation for fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Odoo modular system:
&lt;/h2&gt;

&lt;p&gt;In Odoo, each functional area is a separate installable module that can depend on other modules, and we can activate or remove what we want to extend the functionality without modifying core code.&lt;/p&gt;

&lt;p&gt;Then, the key idea about Odoo is everything is a module, and we can install or uninstall apps like pieces of Lego.&lt;/p&gt;

&lt;p&gt;Every app (module or addon) is a python module that has database models, views, business logic, security rules, web controllers &amp;amp; endpoints, reports &amp;amp; actions,..etc.&lt;/p&gt;

&lt;p&gt;This modular system makes Odoo a giant collection of modules that interact together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Odoo Web Library OWL 🦉:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OWL is a Modern JS framework for Odoo's UI similar to react but simpler, lighter, and made specifically for Odoo.&lt;/li&gt;
&lt;li&gt;Shortly it is a light-weight reactive JS framework.&lt;/li&gt;
&lt;li&gt;Unlike react, the component is always a class and never a function.&lt;/li&gt;
&lt;li&gt;OWL files are pure HTML documents and JS scripts (no JSX).&lt;/li&gt;
&lt;li&gt;It uses virtual DOM and reactive state for automatic update.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Odoo pre-requirements:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In simple terms, Python - PostgreSQL - XML - JavaScript - Git - Bach &lt;/li&gt;
&lt;li&gt;If you tried Python backend development using Flask, FastAPI, or Django you would not face a problem with Odoo backend.&lt;/li&gt;
&lt;li&gt;If you tried React as a modern JS framework, OWL would be much easier.&lt;/li&gt;
&lt;li&gt;You need a solid knowledge in git and GitHub for cloning the base, push your work, and deployment.&lt;/li&gt;
&lt;li&gt;It would be great to learn about XML, and CSV files.&lt;/li&gt;
&lt;li&gt;For tools, you would need an IDE like PyCharm, and you can use Visual Studio Code, you would need to install git bash, and you need to install PostgreSQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysxd09rii2603k41nzz6.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%2Fysxd09rii2603k41nzz6.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Odoo Cloning:
&lt;/h2&gt;

&lt;p&gt;The GitHub repository for Odoo is &lt;a href="https://github.com/odoo/odoo" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/odoo/odoo&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloning Odoo:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://www.github.com/odoo/odoo &lt;span class="nt"&gt;--depth&lt;/span&gt; 1 &lt;span class="nt"&gt;--branch&lt;/span&gt; 18.0 &lt;span class="nt"&gt;--single-branch&lt;/span&gt; odoo_18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--depth 1&lt;/code&gt;: is called shallow cloning that only downloads the latest snapshot of the selected branch without full commit history.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--branch 18.0&lt;/code&gt;: cloning the branch named 18.0 and it is the current version of Odoo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--single-branch&lt;/code&gt;: clones only the branch we specified.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;odoo_18&lt;/code&gt;: the name of local folder we are cloning the branch in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next step is to install all packages using the command &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Odoo configuration file &lt;code&gt;odoo.conf&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;In the root directory of the repo, create a file and name it &lt;code&gt;odoo.conf&lt;/code&gt; to add option.&lt;/p&gt;

&lt;p&gt;These options could be database configurations, addon paths, admin passwords, and more.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;options&lt;/span&gt;]
&lt;span class="n"&gt;addons_path&lt;/span&gt; = {&lt;span class="n"&gt;absolute_path&lt;/span&gt;}\&lt;span class="n"&gt;odoo18&lt;/span&gt;\&lt;span class="n"&gt;addons&lt;/span&gt;,
          {&lt;span class="n"&gt;absolute_path&lt;/span&gt;}\&lt;span class="n"&gt;odoo18&lt;/span&gt;\&lt;span class="n"&gt;odoo&lt;/span&gt;\&lt;span class="n"&gt;addons&lt;/span&gt;,

&lt;span class="n"&gt;db_user&lt;/span&gt; = &lt;span class="n"&gt;your_user&lt;/span&gt;
&lt;span class="n"&gt;db_password&lt;/span&gt; = &lt;span class="n"&gt;your_password&lt;/span&gt;

&lt;span class="n"&gt;admin_passwd&lt;/span&gt; = &lt;span class="n"&gt;your_admin_pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After doing these steps you could easily start the server by running the command &lt;code&gt;python odoo-main -c odoo.conf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2zh4o6vy5he4rshqyzu.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2zh4o6vy5he4rshqyzu.JPG" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You must activate developer mode by going to the path &lt;code&gt;localhost:8069/odoo/settings&lt;/code&gt;, then scroll down to &lt;code&gt;Developer Tools&lt;/code&gt; section and click on &lt;code&gt;Activate the developer mode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsin46evsc67kgbpkzhdt.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsin46evsc67kgbpkzhdt.JPG" alt=" " width="434" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Manager:
&lt;/h2&gt;

&lt;p&gt;Built-in tool used to create, duplicate, back up, restore, delete, and manage Odoo databases directly from web browser.&lt;/p&gt;

&lt;p&gt;Accessed via: &lt;code&gt;/web/database/manager/&lt;/code&gt;&lt;br&gt;
🆕 Create a new database&lt;br&gt;
📂 List existing databases&lt;br&gt;
🔁 Duplicate database&lt;br&gt;
📦 Backup database&lt;br&gt;
♻️ Restore database&lt;br&gt;
❌ Delete database&lt;br&gt;
🔒 Password protection&lt;/p&gt;

&lt;p&gt;Admin/master password is needed to access or manage databases&lt;br&gt;
Set via odoo.conf: &lt;code&gt;admin_passwd = yourpassword&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to start your new Odoo app:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;create a new directory in &lt;code&gt;{root}/odoo&lt;/code&gt; in your local repository.&lt;/li&gt;
&lt;li&gt;add the absolute path of the new directory as an &lt;code&gt;addon_path&lt;/code&gt; in odoo.conf.&lt;/li&gt;
&lt;li&gt;create an &lt;strong&gt;init&lt;/strong&gt;.py file within it as it is modular packages.&lt;/li&gt;
&lt;li&gt;inside this directory (optionally named &lt;code&gt;custome_addons&lt;/code&gt;) you can create all the new apps, so create a directory for your new app.&lt;/li&gt;
&lt;li&gt;we have 2 important files to create inside app's directory &lt;code&gt;__init__.py&lt;/code&gt; to address app parts, and &lt;code&gt;__manifest__.py&lt;/code&gt; to declare it.&lt;/li&gt;
&lt;li&gt;create a &lt;code&gt;models/&lt;/code&gt; directory and create an &lt;code&gt;__init__.py&lt;/code&gt; within it to address all the models.&lt;/li&gt;
&lt;li&gt;create a &lt;code&gt;controllers/&lt;/code&gt; directory and create an &lt;code&gt;__init__.py&lt;/code&gt; within it to address all the controllers.&lt;/li&gt;
&lt;li&gt;create a &lt;code&gt;views/&lt;/code&gt; for XML files.&lt;/li&gt;
&lt;li&gt;restart the server and update apps list from the web UI or you can run &lt;code&gt;python odoo-bin -c odoo.conf -u {app name}&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We may talk in depth about app development in another article.&lt;/p&gt;

</description>
      <category>odoo</category>
      <category>python</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
