<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Abdullah Mujahid</title>
        <link>https://www.abdullahmujahidali.com</link>
        <description>Notes from Abdullah Mujahid on Python, Django, AI and running engineering teams.</description>
        <lastBuildDate>Sat, 24 Oct 2026 08:50:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Abdullah Mujahid</title>
            <url>https://www.abdullahmujahidali.com/favicon.ico</url>
            <link>https://www.abdullahmujahidali.com</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <item>
            <title><![CDATA[The Road Less Traveled: Exploring the Advanced Features of Django 🌟]]></title>
            <link>https://www.abdullahmujahidali.com/articles/django-road-less-travelled</link>
            <guid>https://www.abdullahmujahidali.com/articles/django-road-less-travelled</guid>
            <pubDate>Sun, 16 Apr 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Django is a robust web framework that allows developers to build complex web applications with ease. However, many developers only scratch the surface of what Django has to offer, missing out on some of its most advanced features.</p>
<img alt="" loading="lazy" width="800" height="400" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fplanetaria-design-system.89e2111a.png&amp;w=828&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fplanetaria-design-system.89e2111a.png&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fplanetaria-design-system.89e2111a.png&amp;w=1920&amp;q=75">
<p>In this article, we will explore some of the top advanced Django features that you may need to be using.</p>
<h2>1. Custom model fields</h2>
<p>Django comes with a wide variety of built-in model fields, but sometimes you need to implement
your own custom fields for specialized data types. That’s where custom model fields come in. You can write
your own field that implements custom validation logic and integrates with Django’s ORM.
For example, you could write a custom field that stores phone numbers as normalized strings:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>db <span class="token keyword">import</span> models
<span class="token keyword">from</span> phonenumbers <span class="token keyword">import</span> parse<span class="token punctuation">,</span> format_number<span class="token punctuation">,</span> PhoneNumberFormat

<span class="token keyword">class</span> <span class="token class-name">PhoneNumberField</span><span class="token punctuation">(</span>models<span class="token punctuation">.</span>CharField<span class="token punctuation">)</span><span class="token punctuation">:</span>
  <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> <span class="token operator">*</span>args<span class="token punctuation">,</span> <span class="token operator">**</span>kwargs<span class="token punctuation">)</span><span class="token punctuation">:</span>
    kwargs<span class="token punctuation">[</span><span class="token string">'max_length'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">20</span>
    <span class="token builtin">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>__init__<span class="token punctuation">(</span><span class="token operator">*</span>args<span class="token punctuation">,</span> <span class="token operator">**</span>kwargs<span class="token punctuation">)</span>
    <span class="token keyword">def</span> <span class="token function">from_db_value</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> value<span class="token punctuation">,</span> expression<span class="token punctuation">,</span> connection<span class="token punctuation">)</span><span class="token punctuation">:</span>
      <span class="token keyword">if</span> value <span class="token keyword">is</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
        <span class="token keyword">return</span> value
      <span class="token keyword">return</span> format_number<span class="token punctuation">(</span>parse<span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">,</span> PhoneNumberFormat<span class="token punctuation">.</span>E164<span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">to_python</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">:</span>
      <span class="token keyword">if</span> value <span class="token keyword">is</span> <span class="token boolean">None</span> <span class="token keyword">or</span> <span class="token builtin">isinstance</span><span class="token punctuation">(</span>value<span class="token punctuation">,</span> <span class="token builtin">str</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">return</span> value
      <span class="token keyword">return</span> format_number<span class="token punctuation">(</span>value<span class="token punctuation">,</span> PhoneNumberFormat<span class="token punctuation">.</span>E164<span class="token punctuation">)</span>

    <span class="token keyword">def</span> <span class="token function">get_prep_value</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">:</span>
      <span class="token keyword">return</span> self<span class="token punctuation">.</span>to_python<span class="token punctuation">(</span>value<span class="token punctuation">)</span>
</code></pre>
<p>You could then use this field in your models like any other field:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>db <span class="token keyword">import</span> models
<span class="token keyword">from</span> myapp<span class="token punctuation">.</span>fields <span class="token keyword">import</span> PhoneNumberField

<span class="token keyword">class</span> <span class="token class-name">Contact</span><span class="token punctuation">(</span>models<span class="token punctuation">.</span>Model<span class="token punctuation">)</span><span class="token punctuation">:</span>
  name <span class="token operator">=</span> models<span class="token punctuation">.</span>CharField<span class="token punctuation">(</span>max_length<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">)</span>
  phone_number <span class="token operator">=</span> PhoneNumberField<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre>
<h2>2. Caching</h2>
<p>Django provides a caching framework that allows you to cache the results of
expensive database queries or other computations. This can significantly improve
the performance of your application by reducing the number of times you need to
perform those operations. For example, you could cache the results of a database query
using the cache_page decorator:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>views<span class="token punctuation">.</span>decorators<span class="token punctuation">.</span>cache <span class="token keyword">import</span> cache_page
<span class="token keyword">from</span> myapp<span class="token punctuation">.</span>models <span class="token keyword">import</span> Product

<span class="token decorator annotation punctuation">@cache_page</span><span class="token punctuation">(</span><span class="token number">60</span> <span class="token operator">*</span> <span class="token number">15</span><span class="token punctuation">)</span> <span class="token comment"># Cache for 15 minutes</span>
<span class="token keyword">def</span> <span class="token function">get_products</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">:</span>
    products <span class="token operator">=</span> Product<span class="token punctuation">.</span>objects<span class="token punctuation">.</span><span class="token builtin">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token keyword">return</span> render<span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token string">'products.html'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">'products'</span><span class="token punctuation">:</span> products<span class="token punctuation">}</span><span class="token punctuation">)</span>

</code></pre>
<p>This will cache the results of the <code>get_products</code> view for 15 minutes,
so subsequent requests will be served from the cache rather than querying the database again.</p>
<h2>3. Asynchronous views</h2>
<p>Django supports asynchronous views using the <code>async</code> and <code>await</code> keywords in Python.
This allows you to write non-blocking code that can handle many requests simultaneously,
improving the performance of your application. For example, you could use the <code>asyncio</code> library to
write an asynchronous view that fetches data from an external API:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">import</span> asyncio
<span class="token keyword">import</span> aiohttp
<span class="token keyword">from</span> django<span class="token punctuation">.</span>http <span class="token keyword">import</span> JsonResponse

<span class="token keyword">async</span> <span class="token keyword">def</span> <span class="token function">get_data</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">:</span>
  <span class="token keyword">async</span> <span class="token keyword">with</span> aiohttp<span class="token punctuation">.</span>ClientSession<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">as</span> session<span class="token punctuation">:</span>
    <span class="token keyword">async</span> <span class="token keyword">with</span> session<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'https://api.abdullahmujahidali.com/data'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> response<span class="token punctuation">:</span>
      data <span class="token operator">=</span> <span class="token keyword">await</span> response<span class="token punctuation">.</span>json<span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token keyword">return</span> JsonResponse<span class="token punctuation">(</span>data<span class="token punctuation">)</span>
</code></pre>
<h2>4. Query Expressions</h2>
<p>Django’s query expressions allow you to perform complex database queries using simple
syntax. You can use query expressions to perform aggregation, filtering, and annotation
operations. For example, you could use a query expression to calculate the difference between two fields:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>db<span class="token punctuation">.</span>models <span class="token keyword">import</span> F
<span class="token keyword">from</span> myapp<span class="token punctuation">.</span>models <span class="token keyword">import</span> Product

Product<span class="token punctuation">.</span>objects<span class="token punctuation">.</span>annotate<span class="token punctuation">(</span>price_diff<span class="token operator">=</span>F<span class="token punctuation">(</span><span class="token string">'price'</span><span class="token punctuation">)</span> <span class="token operator">-</span> F<span class="token punctuation">(</span><span class="token string">'cost'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<h2>5. Database Optimization</h2>
<p>Django offers several tools to help you optimize your database queries and make your application faster.
Some of these tools include:</p>
<ol>
<li>Querysets: Querysets allow you to build complex queries in a chainable, object-oriented way. You can use query sets to filter, sort, and paginate your data.</li>
<li>Select Related: The select_related method allows you to fetch related objects in a single database query, rather than making multiple queries.</li>
<li>Prefetch Related: The prefetch_related method allows you to fetch related objects in a separate query, allowing you to avoid the N+1 query problem.</li>
</ol>
<h2>6. Custom Manager</h2>
<p>Django’s model manager is a powerful tool that allows you to encapsulate query logic within a model.
However, you can also create custom managers to encapsulate more complex query logic. For example, you could
create a manager that fetches all objects that have been updated within the last 24 hours:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>db <span class="token keyword">import</span> models
<span class="token keyword">from</span> datetime <span class="token keyword">import</span> datetime<span class="token punctuation">,</span> timedelta

<span class="token keyword">class</span> <span class="token class-name">UpdatedWithinManager</span><span class="token punctuation">(</span>models<span class="token punctuation">.</span>Manager<span class="token punctuation">)</span><span class="token punctuation">:</span>
  <span class="token keyword">def</span> <span class="token function">get_queryset</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">return</span> <span class="token builtin">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>get_queryset<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token builtin">filter</span><span class="token punctuation">(</span>updated_at__gte<span class="token operator">=</span>datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> timedelta<span class="token punctuation">(</span>hours<span class="token operator">=</span><span class="token number">24</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<h2>7. PostgreSQL-specific features</h2>
<p>Django supports a variety of databases, but its support for PostgreSQL is especially robust. PostgreSQL offers many features that can help you optimize your database queries and make your application faster. Some of the PostgreSQL-specific features that you can use with Django include:</p>
<ol>
<li>Window Functions: Window functions allow you to perform calculations across rows of a table, allowing you to do things like calculate running totals or moving averages.</li>
<li>Full-Text Search: PostgreSQL’s full-text search allows you to search for words or phrases within a document, even if they are not exact matches.</li>
<li>JSONB Fields: JSONB fields allow you to store JSON data in a PostgreSQL database and perform queries on that data.</li>
</ol>
<h2>8. Content Types</h2>
<p>Django’s content types framework allows you to create generic relationships between models. This can be especially useful when you have a model that can be related to multiple other models. For example, you could create a model that represents a comment, and use content types to allow comments to be associated with any model in your application.</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>contrib<span class="token punctuation">.</span>contenttypes<span class="token punctuation">.</span>fields <span class="token keyword">import</span> GenericForeignKey
<span class="token keyword">from</span> django<span class="token punctuation">.</span>contrib<span class="token punctuation">.</span>contenttypes<span class="token punctuation">.</span>models <span class="token keyword">import</span> ContentType

<span class="token keyword">class</span> <span class="token class-name">Comment</span><span class="token punctuation">(</span>models<span class="token punctuation">.</span>Model<span class="token punctuation">)</span><span class="token punctuation">:</span>
  content_type <span class="token operator">=</span> models<span class="token punctuation">.</span>ForeignKey<span class="token punctuation">(</span>ContentType<span class="token punctuation">,</span> on_delete<span class="token operator">=</span>models<span class="token punctuation">.</span>CASCADE<span class="token punctuation">)</span>
  object_id <span class="token operator">=</span> models<span class="token punctuation">.</span>PositiveIntegerField<span class="token punctuation">(</span><span class="token punctuation">)</span>
  content_object <span class="token operator">=</span> GenericForeignKey<span class="token punctuation">(</span><span class="token string">'content_type'</span><span class="token punctuation">,</span> <span class="token string">'object_id'</span><span class="token punctuation">)</span>
  text <span class="token operator">=</span> models<span class="token punctuation">.</span>TextField<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre>
<h2>9. Custom management commands</h2>
<p>Django comes with a powerful command-line interface for managing your application, but sometimes you need to perform more complex tasks than the built-in commands allow. That’s where custom management commands come in. You can write your own commands that perform custom logic and can be executed from the command line. For example, you could write a command that deletes all expired user accounts:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>core<span class="token punctuation">.</span>management<span class="token punctuation">.</span>base <span class="token keyword">import</span> BaseCommand
<span class="token keyword">from</span> django<span class="token punctuation">.</span>contrib<span class="token punctuation">.</span>auth<span class="token punctuation">.</span>models <span class="token keyword">import</span> User
<span class="token keyword">from</span> datetime <span class="token keyword">import</span> datetime

<span class="token keyword">class</span> <span class="token class-name">Command</span><span class="token punctuation">(</span>BaseCommand<span class="token punctuation">)</span><span class="token punctuation">:</span>
  <span class="token builtin">help</span> <span class="token operator">=</span> <span class="token string">'Deletes all expired user accounts'</span>
  <span class="token keyword">def</span> <span class="token function">handle</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> <span class="token operator">*</span>args<span class="token punctuation">,</span> <span class="token operator">**</span>options<span class="token punctuation">)</span><span class="token punctuation">:</span>
    now <span class="token operator">=</span> datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span>
    expired_users <span class="token operator">=</span> User<span class="token punctuation">.</span>objects<span class="token punctuation">.</span><span class="token builtin">filter</span><span class="token punctuation">(</span>last_login__lt<span class="token operator">=</span>now<span class="token punctuation">)</span>
    expired_users<span class="token punctuation">.</span>delete<span class="token punctuation">(</span><span class="token punctuation">)</span>
    self<span class="token punctuation">.</span>stdout<span class="token punctuation">.</span>write<span class="token punctuation">(</span>self<span class="token punctuation">.</span>style<span class="token punctuation">.</span>SUCCESS<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f'Deleted </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">len</span><span class="token punctuation">(</span>expired_users<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> expired users.'</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<h2>10. Custom authentication backends</h2>
<p>Django comes with several built-in authentication backends, but sometimes you need to implement your own custom authentication logic. That’s where custom authentication backends come in. You can write your own authentication backend that implements custom authentication logic and integrates with Django’s authentication framework. For example, you could write an authentication backend that allows users to log in with their email address instead of their username:</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> django<span class="token punctuation">.</span>contrib<span class="token punctuation">.</span>auth<span class="token punctuation">.</span>backends <span class="token keyword">import</span> BaseBackend
<span class="token keyword">from</span> django<span class="token punctuation">.</span>contrib<span class="token punctuation">.</span>auth<span class="token punctuation">.</span>models <span class="token keyword">import</span> User

<span class="token keyword">class</span> <span class="token class-name">EmailBackend</span><span class="token punctuation">(</span>BaseBackend<span class="token punctuation">)</span><span class="token punctuation">:</span>
  <span class="token keyword">def</span> <span class="token function">authenticate</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> request<span class="token punctuation">,</span> email<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> password<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token operator">**</span>kwargs<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">try</span><span class="token punctuation">:</span>
      user <span class="token operator">=</span> User<span class="token punctuation">.</span>objects<span class="token punctuation">.</span>get<span class="token punctuation">(</span>email<span class="token operator">=</span>email<span class="token punctuation">)</span>
    <span class="token keyword">except</span> User<span class="token punctuation">.</span>DoesNotExist<span class="token punctuation">:</span>
      <span class="token keyword">return</span> <span class="token boolean">None</span>

    <span class="token keyword">if</span> user<span class="token punctuation">.</span>check_password<span class="token punctuation">(</span>password<span class="token punctuation">)</span><span class="token punctuation">:</span>
      <span class="token keyword">return</span> user

  <span class="token keyword">def</span> <span class="token function">get_user</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> user_id<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">try</span><span class="token punctuation">:</span>
      <span class="token keyword">return</span> User<span class="token punctuation">.</span>objects<span class="token punctuation">.</span>get<span class="token punctuation">(</span>pk<span class="token operator">=</span>user_id<span class="token punctuation">)</span>
    <span class="token keyword">except</span> User<span class="token punctuation">.</span>DoesNotExist<span class="token punctuation">:</span>
      <span class="token keyword">return</span> <span class="token boolean">None</span>
</code></pre>
<p>You could then add this backend to your <code>AUTHENTICATION_BACKENDS</code> setting in <code>settings.py</code> to enable it:</p>
<pre class="language-py"><code class="language-py">AUTHENTICATION_BACKENDS <span class="token operator">=</span> <span class="token punctuation">[</span>
  <span class="token string">'myapp.backends.EmailBackend'</span><span class="token punctuation">,</span>
  <span class="token string">'django.contrib.auth.backends.ModelBackend'</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
</code></pre>
<p>In conclusion, Django is a powerful web framework that offers a wide range of advanced features that can help you optimize your web application and improve its performance. By taking advantage of these features, you can create complex applications that can handle large amounts of traffic and data. From custom model fields to custom authentication backends, Django offers a variety of tools that can help you build a robust and efficient web application. So, take the road less traveled and explore these advanced features to take your Django development skills to the next level.</p>]]></content:encoded>
            <author>abdullahmujahidali1@gmail.com (Abdullah Mujahid)</author>
        </item>
        <item>
            <title><![CDATA[Structural Pattern Matching in Python is a game-changer! 🔍🐍🚀]]></title>
            <link>https://www.abdullahmujahidali.com/articles/structural-pattern-matching-python</link>
            <guid>https://www.abdullahmujahidali.com/articles/structural-pattern-matching-python</guid>
            <pubDate>Sat, 04 Mar 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Simplify Your Code and Increase Your Productivity</p>
<img alt="" loading="lazy" width="1026" height="818" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.72c341ed.png&amp;w=1080&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.72c341ed.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.72c341ed.png&amp;w=3840&amp;q=75">
<p>If you’re a Python developer, you’re probably familiar with the traditional if statement and its many variations. But did you know that Python 3.10 introduces a powerful new feature called Structural Pattern Matching? With Structural Pattern Matching, you can easily match against complex data structures like lists and dictionaries using patterns. In this post, I'll introduce you to this exciting new feature and show you how it can simplify your code and increase your productivity.</p>
<p>To illustrate how Structural Pattern Matching works, let’s take a look at a simple example. Suppose we have a list called data with three elements: 1, 2, and 3. We want to match against data using several different patterns. Here's the code:</p>
<pre class="language-py"><code class="language-py">data <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>

<span class="token keyword">match</span> data<span class="token punctuation">:</span>
    <span class="token keyword">case</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Found 1 and 2"</span><span class="token punctuation">)</span>
    <span class="token keyword">case</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> x<span class="token punctuation">]</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Found 1 and </span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
    <span class="token keyword">case</span> <span class="token punctuation">[</span>_<span class="token punctuation">,</span> _<span class="token punctuation">,</span> _<span class="token punctuation">]</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Found a list of 3 elements"</span><span class="token punctuation">)</span>
    <span class="token keyword">case</span> <span class="token keyword">_</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Found something else"</span><span class="token punctuation">)</span>
</code></pre>
<p>The output of the code will be <code>Found a list of 3 elements</code></p>
<p>In this code, we use the match statement to match against data using several different patterns. The first pattern matches against a list with exactly two elements: 1 and 2. The second pattern matches against a list with two elements, where the first element is 1 and the second element can be anything (stored in the variable x). The third pattern matches against a list with exactly three elements. The last pattern matches against anything else and prints a message.</p>
<p>With Structural Pattern Matching, you can simplify your code and make it more expressive, allowing you to focus on the logic of your program instead of the details of your data. So why not give it a try in your next Python project and see how it can help you write better code?</p>
<p>In conclusion, Structural Pattern Matching is a powerful new feature in Python 3.10 that can simplify your code and increase your productivity. I hope this post has given you a taste of what’s possible with this exciting new feature. If you want to learn more, be sure to check out the official Python documentation for Structural Pattern Matching.</p>]]></content:encoded>
            <author>abdullahmujahidali1@gmail.com (Abdullah Mujahid)</author>
        </item>
        <item>
            <title><![CDATA[Why Fresh is the Best Choice for Server-Side Rendering]]></title>
            <link>https://www.abdullahmujahidali.com/articles/why-fresh-for-ssr</link>
            <guid>https://www.abdullahmujahidali.com/articles/why-fresh-for-ssr</guid>
            <pubDate>Fri, 17 Mar 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<img alt="" loading="lazy" width="600" height="346" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.601e379d.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.601e379d.png&amp;w=1200&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fpic.601e379d.png&amp;w=1200&amp;q=75">
<p>I was developing a simple application that involved server-side rendering. I know and have used Next JS to achieve this quite a few times. I was trying to find something new that I could learn from and also share with the audience. I came across Fresh, a cutting-edge web framework that provides a seamless and flexible solution for server-side rendering, and it’s powered by Deno 👀 (but let’s not talk about Deno, that will be for some other day 😁).</p>
<p>Fresh is definitely worth checking out.</p>
<p>Here’s why Fresh is the best choice for server-side rendering:</p>
<ol>
<li>Fresh is built with performance in mind. It uses a lightweight and minimalistic approach, resulting in faster page load times and better overall performance.</li>
<li>The fresh framework is beginner-friendly its intuitive API and clear documentation make it easy to get started and create complex server-side rendering applications.</li>
<li>Fresh provides 0 runtime overhead.</li>
<li>Fresh provides Island based client hydration.</li>
<li>Fresh comes with typescript and can be easily integrated with React JS etc.</li>
<li>Let’s look at the below comparison between Fresh and Next.js 13 to showcase the differences in their approach to server-side rendering</li>
</ol>
<p>Fresh:</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// server.js file</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> createServer <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fresh'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> html <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fresh/render'</span><span class="token punctuation">)</span>

<span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">createServer</span><span class="token punctuation">(</span><span class="token punctuation">)</span>

app<span class="token punctuation">.</span><span class="token method function property-access">get</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">req<span class="token punctuation">,</span> res</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> postData <span class="token operator">=</span> <span class="token keyword control-flow">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">'/api/getData'</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> <span class="token punctuation">{</span> mainTitle<span class="token punctuation">,</span> paragraph <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword control-flow">await</span> postData<span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token keyword">const</span> pageHtml <span class="token operator">=</span> html<span class="token template-string"><span class="token template-punctuation string">`</span><span class="token html language-html">
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">&gt;</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>mainTitle<span class="token interpolation-punctuation punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>mainTitle<span class="token interpolation-punctuation punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>paragraph<span class="token interpolation-punctuation punctuation">}</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span>
  </span><span class="token template-punctuation string">`</span></span>
  res<span class="token punctuation">.</span><span class="token method function property-access">send</span><span class="token punctuation">(</span>pageHtml<span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
app<span class="token punctuation">.</span><span class="token method function property-access">listen</span><span class="token punctuation">(</span><span class="token number">3000</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
  <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">'Server is up and running'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<p>Next.js:</p>
<pre class="language-js"><code class="language-js"><span class="token comment">// pages/index.js</span>

<span class="token keyword module">import</span> <span class="token imports"><span class="token punctuation">{</span> useState<span class="token punctuation">,</span> useEffect <span class="token punctuation">}</span></span> <span class="token keyword module">from</span> <span class="token string">'react'</span>
<span class="token keyword">function</span> <span class="token function"><span class="token maybe-class-name">Index</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> <span class="token punctuation">[</span>post<span class="token punctuation">,</span> setPost<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">mainTitle</span><span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token literal-property property">body</span><span class="token operator">:</span> <span class="token string">''</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
  <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">fetchData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> res <span class="token operator">=</span> <span class="token keyword control-flow">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">'/api/getData'</span><span class="token punctuation">)</span>
      <span class="token keyword">const</span> json <span class="token operator">=</span> <span class="token keyword control-flow">await</span> res<span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
      <span class="token function">setPost</span><span class="token punctuation">(</span>json<span class="token punctuation">)</span>
    <span class="token punctuation">}</span>
    <span class="token function">fetchData</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
  <span class="token keyword control-flow">return</span> <span class="token punctuation">(</span>
    <span class="token operator">&lt;</span>div<span class="token operator">&gt;</span>
      <span class="token operator">&lt;</span>h1<span class="token operator">&gt;</span><span class="token punctuation">{</span>post<span class="token punctuation">.</span><span class="token property-access">mainTitle</span><span class="token punctuation">}</span><span class="token operator">&lt;</span><span class="token operator">/</span>h1<span class="token operator">&gt;</span>
      <span class="token operator">&lt;</span>p<span class="token operator">&gt;</span><span class="token punctuation">{</span>post<span class="token punctuation">.</span><span class="token property-access">body</span><span class="token punctuation">}</span><span class="token operator">&lt;</span><span class="token operator">/</span>p<span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">&gt;</span>
  <span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token keyword module">export</span> <span class="token keyword module">default</span> <span class="token maybe-class-name">Index</span>
</code></pre>
<p>Fresh takes a simpler and more direct approach to server-side rendering, with HTML created directly on the server using a template literal. The Next.js example, on the other hand, renders the HTML on the server and client using React components.</p>
<p>While Next.js allows for greater flexibility and control over the rendering process, it may also be more difficult and time-consuming to set up. Fresh, on the other hand, is designed to be lighter and easier to use, making it an excellent choice for basic applications or those requiring speedier performance.</p>
<p>Thus, Fresh’s approach to server-side rendering is simpler and more direct for creating HTML on the server, whereas Next.js allows greater flexibility and control via React components. Depending on the nature of your project, either strategy may be preferable, but Fresh’s simplicity and quickness make it an appealing alternative to investigate.</p>]]></content:encoded>
            <author>abdullahmujahidali1@gmail.com (Abdullah Mujahid)</author>
        </item>
    </channel>
</rss>