<?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: Bee</title>
    <description>The latest articles on DEV Community by Bee (@bocha).</description>
    <link>https://dev.to/bocha</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%2F3290829%2F0b83265b-7664-480b-81fc-de8adbed5183.png</url>
      <title>DEV Community: Bee</title>
      <link>https://dev.to/bocha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bocha"/>
    <language>en</language>
    <item>
      <title>Why Data Cleaning is 80% of Data Science</title>
      <dc:creator>Bee</dc:creator>
      <pubDate>Thu, 21 Aug 2025 10:29:53 +0000</pubDate>
      <link>https://dev.to/bocha/-why-data-cleaning-is-80-of-data-science-3ma</link>
      <guid>https://dev.to/bocha/-why-data-cleaning-is-80-of-data-science-3ma</guid>
      <description>&lt;p&gt;When most people imagine Data Science, they picture building shiny machine learning models or crafting beautiful dashboards.&lt;br&gt;
But here’s the truth: &lt;strong&gt;if your data is messy, no model can save you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s why people say:&lt;br&gt;
👉 &lt;em&gt;“80% of a data scientist’s time is spent cleaning data.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And it’s not a joke.&lt;/p&gt;
&lt;h2&gt;
  
  
  Common Data Cleaning Nightmares
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Missing values&lt;/strong&gt; → blank cells, &lt;code&gt;NaN&lt;/code&gt;s, or inconsistent entries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates&lt;/strong&gt; → one user recorded multiple times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outliers&lt;/strong&gt; → extreme values like a salary of &lt;code&gt;$1,000,000,000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent categories&lt;/strong&gt; → &lt;code&gt;Nairobi&lt;/code&gt;, &lt;code&gt;NBO&lt;/code&gt;, &lt;code&gt;254-Nairobi&lt;/code&gt; treated as different.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong data types&lt;/strong&gt; → numbers stored as text.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🛠 Practical Cleaning in Python (with Pandas)
&lt;/h2&gt;

&lt;p&gt;Here’s how I usually tackle some of these:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Example dataset
&lt;/span&gt;&lt;span class="n"&gt;data&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;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;Alice&lt;/span&gt;&lt;span class="sh"&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;Bob&lt;/span&gt;&lt;span class="sh"&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;Charlie&lt;/span&gt;&lt;span class="sh"&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;Alice&lt;/span&gt;&lt;span class="sh"&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;Age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Salary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# notice the outlier
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;City&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;Nairobi&lt;/span&gt;&lt;span class="sh"&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;NBI&lt;/span&gt;&lt;span class="sh"&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;254-Nairobi&lt;/span&gt;&lt;span class="sh"&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;Nairobi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Before Cleaning:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Handle missing values
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;inplace&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="c1"&gt;# 2. Drop duplicates
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop_duplicates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inplace&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="c1"&gt;# 3. Fix inconsistent categories
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;City&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;City&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NBI&lt;/span&gt;&lt;span class="sh"&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;Nairobi&lt;/span&gt;&lt;span class="sh"&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;254-Nairobi&lt;/span&gt;&lt;span class="sh"&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;Nairobi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# 4. Handle outliers (example: cap salaries above 200k)
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Salary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Salary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;After Cleaning:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Output
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before Cleaning:&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;      Name   Age       Salary         City
0    Alice  25.0       50000      Nairobi
1      Bob   NaN       60000          NBI
2  Charlie  37.0  1000000000  254-Nairobi
3    Alice  25.0       50000      Nairobi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After Cleaning:&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;      Name   Age  Salary     City
0    Alice  25.0   50000  Nairobi
1      Bob  25.0   60000  Nairobi
2  Charlie  37.0  200000  Nairobi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don’t ignore missing values, understand the &lt;em&gt;why&lt;/em&gt; before filling/dropping.&lt;/li&gt;
&lt;li&gt;Standardize categories early to avoid “ghost” groups.&lt;/li&gt;
&lt;li&gt;Outliers may be errors or &lt;em&gt;real rare events&lt;/em&gt;, investigate before deleting.&lt;/li&gt;
&lt;li&gt;A clean dataset can &lt;strong&gt;outperform a complex model trained on dirty data.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>datascience</category>
      <category>data</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>django architecture;MVC vs MVT</title>
      <dc:creator>Bee</dc:creator>
      <pubDate>Tue, 01 Jul 2025 19:27:41 +0000</pubDate>
      <link>https://dev.to/bocha/django-architecturemvc-vs-mvt-3c3d</link>
      <guid>https://dev.to/bocha/django-architecturemvc-vs-mvt-3c3d</guid>
      <description>&lt;p&gt;In this post, we'll demystify both patterns and show how Django's MVT is related to the classic MVC. Let’s get into it!&lt;/p&gt;




&lt;h2&gt;
  
  
  MVC
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;MVC (Model-View-Controller)&lt;/strong&gt; design pattern is a &lt;strong&gt;software architectural pattern&lt;/strong&gt; that separates application logic into three interconnected components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; The part that handles the &lt;strong&gt;data&lt;/strong&gt;. It defines how data is stored, retrieved, and manipulated — usually tied to a database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View:&lt;/strong&gt; The &lt;strong&gt;UI&lt;/strong&gt; or representation layer. It presents the data to the user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller:&lt;/strong&gt; The &lt;strong&gt;traffic cop&lt;/strong&gt; that handles user input, updates the model, and decides which view to show.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation makes applications easier to scale and maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Here's a visual breakdown:
&lt;/h3&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%2Frmw69re2ds6lboezhgqo.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%2Frmw69re2ds6lboezhgqo.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MVC is widely used in frameworks like Ruby on Rails, Laravel (PHP), and ASP.NET.&lt;/p&gt;




&lt;h2&gt;
  
  
  Enter Django: The MVT Way
&lt;/h2&gt;

&lt;p&gt;Django follows the &lt;strong&gt;MVT&lt;/strong&gt; &lt;strong&gt;(Model-View-Template)&lt;/strong&gt; architectural pattern, which is a variation of the traditional &lt;strong&gt;MVC&lt;/strong&gt; &lt;strong&gt;(Model-View-Controller)&lt;/strong&gt; design pattern used in web development. This pattern separates the application into three main components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model (same as MVC):&lt;/strong&gt; Manages the data — built using Django’s ORM. Defines the structure of your database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View (different from MVC):&lt;/strong&gt; In Django, the “View” contains the &lt;strong&gt;business logic&lt;/strong&gt;. It fetches data from the model and passes it to the template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template:&lt;/strong&gt; Responsible for rendering the final &lt;strong&gt;HTML&lt;/strong&gt; — your front-end content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now here’s the diffrence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In Django, the "View" from MVC is called the "Template", and the "Controller" role is handled by the Django framework itself.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So Django's View is actually the Controller in traditional MVC!&lt;/p&gt;

&lt;h3&gt;
  
  
  here is the visual breakdown
&lt;/h3&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%2Fuzua6pdpvoiinc1851se.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%2Fuzua6pdpvoiinc1851se.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 Side-by-Side: MVC vs MVT
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;MVC&lt;/th&gt;
&lt;th&gt;Django (MVT)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Handles data &amp;amp; logic&lt;/td&gt;
&lt;td&gt;Handles data &amp;amp; logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View&lt;/td&gt;
&lt;td&gt;UI layer&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Template (HTML)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controller&lt;/td&gt;
&lt;td&gt;Handles user input&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;View (Python functions)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Passive&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Active controller&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  here is the visual breakdown!
&lt;/h3&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%2Fn13wchn1joe9ifihlbhu.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%2Fn13wchn1joe9ifihlbhu.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So Django automates a lot of what traditional MVC expects you to write manually. &lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Example: A Simple Blog
&lt;/h2&gt;

&lt;p&gt;Let’s say we’re building a blog:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Model:&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# models.py
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TextField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;date_posted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto_now_add&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;View:&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# views.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.shortcuts&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog/home.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&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;posts&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Template:&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- home.html --&amp;gt;&lt;/span&gt;
{% for post in posts %}
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;{{ post.title }}&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ post.content }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;small&amp;gt;&lt;/span&gt;{{ post.date_posted }}&lt;span class="nt"&gt;&amp;lt;/small&amp;gt;&lt;/span&gt;
{% endfor %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the heart of Django’s MVT — clean separation, yet tightly integrated by Django’s robust request handling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why MVT Works So Well
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separation of concerns:&lt;/strong&gt; You work on templates separately from the business logic and data models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in admin panel:&lt;/strong&gt; The model definitions give you an auto-generated backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; The architecture supports large projects out-of-the-box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rapid development:&lt;/strong&gt; You can go from idea to MVP in record time.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;By understanding how MVT maps to traditional MVC, you'll appreciate Django’s design even more. It's MVC with a twist — and that twist is what makes Django so &lt;strong&gt;developer-centric&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;📝 &lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  here are the links to learn more;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/system-design/mvc-design-pattern/" rel="noopener noreferrer"&gt;MVC Pattern  -geeksforgeeks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/python/django-project-mvt-structure/" rel="noopener noreferrer"&gt;Django MVT Structure -geeksforgeeks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>django</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>Django: my first django project</title>
      <dc:creator>Bee</dc:creator>
      <pubDate>Mon, 30 Jun 2025 20:17:46 +0000</pubDate>
      <link>https://dev.to/bocha/day-4-of-django-my-first-dajngo-project-1i1m</link>
      <guid>https://dev.to/bocha/day-4-of-django-my-first-dajngo-project-1i1m</guid>
      <description>&lt;p&gt;on day four of django learning i created a simple project following these  steps&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-requisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python installed&lt;/li&gt;
&lt;li&gt;Basic command-line knowledge
install django
on your terminal run
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  pip &lt;span class="nb"&gt;install &lt;/span&gt;django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  1. 📁 Start a Django Project
&lt;/h3&gt;

&lt;p&gt;In your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;django-admin startproject myproject
&lt;span class="nb"&gt;cd &lt;/span&gt;myproject
python manage.py startapp restaurant
python manage.py startapp shop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;myproject is the project name&lt;br&gt;
shop and restaurant are the names of the site i wanted to create&lt;/p&gt;

&lt;p&gt;Now, my structure looks like this :&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%2F70zlry6sw85ol05lcums.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%2F70zlry6sw85ol05lcums.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
open shop and it will display this&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%2F05ahrjtois2vxyrung4i.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%2F05ahrjtois2vxyrung4i.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;admin.py&lt;/code&gt;: Configuration for the Django admin interface.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;apps.py&lt;/code&gt;: Configuration for the app itself.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;models.py&lt;/code&gt;: Contains the database models for the app.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests.py&lt;/code&gt;: Contains tests for the app.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;views.py&lt;/code&gt;: Contains the request/response logic for the app.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;migrations/&lt;/code&gt;: Contains database migrations for the app&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. ⚙️ Register the App
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;myproject/settings.py&lt;/code&gt;, find &lt;code&gt;INSTALLED_APPS&lt;/code&gt;, and add &lt;code&gt;' shop'and 'restaurant'&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;INSTALLED_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;shop&lt;/span&gt;&lt;span class="sh"&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;restaurant&lt;/span&gt;&lt;span class="sh"&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;this is how it looks!&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%2F6la43hstnrj0qvvgk5tu.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%2F6la43hstnrj0qvvgk5tu.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 🧱 Create a shop  Model
&lt;/h3&gt;

&lt;p&gt;we shall start with shop model&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;shop/models.py&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TextField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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;python manage.py makemigrations
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. 👑 Register Model in Admin
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;shop/admin.py&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;

&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;here is how it looks&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%2Fc8bauf2vu4srrqgvrpfq.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%2Fc8bauf2vu4srrqgvrpfq.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a superuser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py createsuperuser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to &lt;code&gt;http://127.0.0.1:8000/admin/&lt;/code&gt; and add a few blog posts!&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Show Posts in the Browser
&lt;/h3&gt;

&lt;h4&gt;
  
  
  In &lt;code&gt;shop/views.py&lt;/code&gt;:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.shortcuts&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;shop/home.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&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;posts&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Create a file: &lt;code&gt;shop/urls.py&lt;/code&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog-home&lt;/span&gt;&lt;span class="sh"&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;h4&gt;
  
  
  Link it in your main &lt;code&gt;myproject/urls.py&lt;/code&gt;:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;admin/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;shop/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;shop.urls&lt;/span&gt;&lt;span class="sh"&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;h3&gt;
  
  
  6. 🖼 Create a Template
&lt;/h3&gt;

&lt;p&gt;Create folders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;shop/templates/shop/home.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My shop&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;shop Posts&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    {% for post in posts %}
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;{{ post.title }}&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ post.goods }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;hr&amp;gt;&lt;/span&gt;
    {% endfor %}
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🎉 Done!
&lt;/h3&gt;

&lt;p&gt;Now visit:&lt;br&gt;
👉 &lt;code&gt;http://127.0.0.1:8000/shop/&lt;/code&gt;&lt;br&gt;
And boom — your shop model will appear!&lt;/p&gt;




</description>
      <category>django</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>version control on git and github</title>
      <dc:creator>Bee</dc:creator>
      <pubDate>Thu, 26 Jun 2025 10:39:14 +0000</pubDate>
      <link>https://dev.to/bocha/version-control-on-git-and-github-5acm</link>
      <guid>https://dev.to/bocha/version-control-on-git-and-github-5acm</guid>
      <description>&lt;p&gt;in this article i will be sharing what i have learnt about &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Version control&lt;/li&gt;
&lt;li&gt; Forking&lt;/li&gt;
&lt;li&gt; Collaboration&lt;/li&gt;
&lt;li&gt; Pull Requests&lt;/li&gt;
&lt;li&gt; Merge Conflicts&lt;/li&gt;
&lt;li&gt; Code Reviews&lt;/li&gt;
&lt;li&gt; GitHub Issues&lt;/li&gt;
&lt;li&gt; Git Commands&lt;/li&gt;
&lt;li&gt; Pushing Changes to GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s get into it! &lt;br&gt;
&lt;strong&gt;(a)version control&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;Version control&lt;/strong&gt; software helps facilitate continuous software development workflows. As user demands scale up, version control helps developers work smarter together, using time and resources more efficiently.&lt;br&gt;
It keeps a historical record of software changes in a specialized database, logging edits made by individual developers. When conflicts emerge, developers can look back and resolve code conflicts, minimizing disruption to the codebase.&lt;/p&gt;

&lt;p&gt;here is the article i used to learn&lt;br&gt;
_&lt;a href="https://github.com/resources/articles/software-development/what-is-version-control" rel="noopener noreferrer"&gt;https://github.com/resources/articles/software-development/what-is-version-control&lt;/a&gt;&lt;br&gt;
_&lt;br&gt;
&lt;strong&gt;(b) forking&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;forking&lt;/strong&gt; is the process of creating your own copy of someone's else project on github ,it is mainly used if you dont have access to the original respiratory&lt;br&gt;
If you have write access to the original repository, you don’t need a fork. Instead, use branches to manage your work. If you don’t have write access to a repository you want to contribute to, fork it. Make your changes in your fork, then submit them through a merge request to the upstream repository.&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%2Fol4wug2bnrvftica4gh0.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%2Fol4wug2bnrvftica4gh0.png" alt="Image description" width="685" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;here is the article with more details&lt;br&gt;
_&lt;a href="https://docs.gitlab.com/user/project/repository/forking_workflow/" rel="noopener noreferrer"&gt;https://docs.gitlab.com/user/project/repository/forking_workflow/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;(c)collaboration&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;Collaboration&lt;/strong&gt; in GitHub means working on shared code with others—whether you're on the same team or contributing to someone else’s project.&lt;/p&gt;

&lt;p&gt;Here’s what good collaboration includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeping commits clean and meaningful&lt;/li&gt;
&lt;li&gt;Creating branches for features or fixes&lt;/li&gt;
&lt;li&gt;Communicating through issues, PRs, and comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip: Branch before you make changes (&lt;code&gt;git checkout -b feature-branch&lt;/code&gt;) and avoid working directly on the &lt;code&gt;main&lt;/code&gt; branch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(d) pull request(pr)&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;pull request&lt;/strong&gt; (PR) is how you propose changes from your branch (or fork) into another repository. &lt;/p&gt;
&lt;h3&gt;
  
  
  📥 Basic Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Fork or clone the repo&lt;/li&gt;
&lt;li&gt;Make changes in a new branch&lt;/li&gt;
&lt;li&gt;Push to your GitHub repo&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“New pull request”&lt;/strong&gt; in GitHub&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It opens a discussion space where reviewers can comment, approve, or request changes.&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%2Fpv10qmgkpmr89jg9i869.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%2Fpv10qmgkpmr89jg9i869.png" alt="Image description" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;here is the link to learn more&lt;br&gt;
&lt;em&gt;&lt;a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request" rel="noopener noreferrer"&gt;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(e) merge conflicts&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;Merge conflicts&lt;/strong&gt; happen when changes from different branches clash—often when two people edit the same lines of code.&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%2Ftdydssrmn97519ag7spl.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%2Ftdydssrmn97519ag7spl.png" alt="Image description" width="483" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to resolve them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Git tells you which files have conflicts.&lt;/li&gt;
&lt;li&gt;Open the file and manually choose what to keep.&lt;/li&gt;
&lt;li&gt;After editing, run:
git add .
git commit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;here is the link to learn more&lt;br&gt;
&lt;em&gt;&lt;a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts" rel="noopener noreferrer"&gt;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(f) Code Review&lt;/strong&gt;&lt;br&gt;
Before merging a PR, team members usually **review **your code. This ensures quality, consistency, and avoids bugs.&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%2Fab20aipfno1fc50rdxt2.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%2Fab20aipfno1fc50rdxt2.png" alt="Image description" width="421" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In code review, I learned to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Give clear commit messages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write readable code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave helpful comments (when reviewing others)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(g) GitHub Issues&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Issues&lt;/strong&gt; are a great way to track bugs, feature requests, or general tasks in a project. I’ve used them to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plan what needs to be done&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assign tasks in teams&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Link PRs to issues for better tracking &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can add labels, assign people, or even automate issue handling with bots.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcze8vk49ania1fhyxrv1.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%2Fcze8vk49ania1fhyxrv1.png" alt="Image description" width="544" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(h)Useful Git Commands&lt;/strong&gt; &lt;br&gt;
**Here are some of the commands to use regularly:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
git clone &amp;lt;repo-url&amp;gt;        # Copy a repo to your machine&lt;br&gt;
git checkout -b branch-name # Create and switch to a new branch&lt;br&gt;
git status                  # Check what has changed&lt;br&gt;
git add .                   # Stage all changes&lt;br&gt;
git commit -m "message"     # Save changes with a message&lt;br&gt;
git push                    # Upload changes to GitHub&lt;br&gt;
git pull                    # Get the latest changes from remote&lt;br&gt;
git fetch                   # Check for updates without merging&lt;br&gt;
git merge                   # Merge another branch into your current one&lt;/code&gt;&lt;br&gt;
here is the link to git cheat sheet&lt;br&gt;
_&lt;a href="https://training.github.com/downloads/github-git-cheat-sheet/" rel="noopener noreferrer"&gt;https://training.github.com/downloads/github-git-cheat-sheet/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;_&lt;strong&gt;(i) Pushing Changes to GitHub&lt;/strong&gt;&lt;br&gt;
**Once the work is done locally, here’s how to push it to GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git push origin branch-name&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Then  open a pull request from GitHub’s UI. This step is key in contributing to projects and sharing your work with others.&lt;br&gt;
&lt;strong&gt;(j)final thoughts&lt;/strong&gt; &lt;br&gt;
finally I would recommend using this site for practical experience&lt;br&gt;
_&lt;a href="https://skills.github.com/" rel="noopener noreferrer"&gt;https://skills.github.com/&lt;/a&gt;&lt;br&gt;
_&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title># Set Up My Dev Environment: Git, Docker, and GitHub SSH on Linux</title>
      <dc:creator>Bee</dc:creator>
      <pubDate>Thu, 26 Jun 2025 07:33:03 +0000</pubDate>
      <link>https://dev.to/bocha/-set-up-my-dev-environment-git-docker-and-github-ssh-on-linux-4jc5</link>
      <guid>https://dev.to/bocha/-set-up-my-dev-environment-git-docker-and-github-ssh-on-linux-4jc5</guid>
      <description>&lt;p&gt;Hi everyone! 👋&lt;br&gt;&lt;br&gt;
I recently set up my development environment and thought I’d share how I installed &lt;strong&gt;Git&lt;/strong&gt;, &lt;strong&gt;Docker&lt;/strong&gt;, and configured &lt;strong&gt;Git with GitHub SSH&lt;/strong&gt; on my machine. If you’re getting started with development or just want a clean setup, this guide might help you too!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 1. Installing Git
&lt;/h2&gt;

&lt;p&gt;Git is essential for version control, so it was my first step.&lt;/p&gt;

&lt;h3&gt;
  
  
  🖥️ Commands I Used:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Verifying Git Installation:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
git --version&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If installed correctly, this returns something like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
git version 2.xx.x&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🐳 2. Installing Docker
&lt;/h2&gt;

&lt;p&gt;Next up was Docker — a tool I’ll be using to containerize apps and run environments in isolated containers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps I Followed:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Removed old Docker versions&lt;/strong&gt; (just in case):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
sudo apt remove docker docker-engine docker.io containerd runc&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Installed dependencies&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
sudo apt update&lt;br&gt;
sudo apt install ca-certificates curl gnupg&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Added Docker’s GPG key&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br&gt;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \&lt;br&gt;
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Added the Docker repository&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
echo \&lt;br&gt;
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \&lt;br&gt;
  https://download.docker.com/linux/ubuntu \&lt;br&gt;
  $(lsb_release -cs) stable" | \&lt;br&gt;
  sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Installed Docker Engine&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
sudo apt update&lt;br&gt;
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verified Docker Installation&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
docker --version&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This gave me something like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
Docker version XX.XX.X, build XXXXX&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;(Optional)&lt;/strong&gt; To use Docker without typing &lt;code&gt;sudo&lt;/code&gt; every time:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
sudo usermod -aG docker $USER&lt;br&gt;
newgrp docker&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 3. Configuring Git with GitHub via SSH
&lt;/h2&gt;

&lt;p&gt;To avoid typing my GitHub credentials every time I push changes, I set up Git to authenticate using SSH.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧑‍💻 Steps I Took:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generated a new SSH key&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
ssh-keygen -t ed25519 -C "myemail@example.com"&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I accepted the default file location and passphrase.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Added the SSH key to the agent&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
eval "$(ssh-agent -s)"&lt;br&gt;
ssh-add ~/.ssh/id_ed25519&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copied my SSH key&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
cat ~/.ssh/id_ed25519.pub&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Added the key to GitHub&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Went to &lt;strong&gt;GitHub &amp;gt; Settings &amp;gt; SSH and GPG keys&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Clicked &lt;strong&gt;“New SSH Key”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Pasted the key and saved&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tested the SSH connection&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
ssh -T git@github.com&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It responded with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
Hi your-username! You've successfully authenticated...&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up Git username and email globally&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
git config --global user.name "Your Name"&lt;br&gt;
git config --global user.email "your-email@example.com"&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Now my environment is ready for development with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📁 Git for version control&lt;/li&gt;
&lt;li&gt;🐳 Docker for containerization&lt;/li&gt;
&lt;li&gt;🔐 GitHub SSH for secure, password-free pushing and pulling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup will help me manage projects more efficiently and collaborate more smoothly. If you're setting up yours too and get stuck—feel free to drop a question!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
