<?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: Dmytro Litvinov</title>
    <description>The latest articles on DEV Community by Dmytro Litvinov (@dmytrolitvinov).</description>
    <link>https://dev.to/dmytrolitvinov</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%2F116911%2Fad7a3f77-3187-4410-828e-0edd597c4072.jpg</url>
      <title>DEV Community: Dmytro Litvinov</title>
      <link>https://dev.to/dmytrolitvinov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dmytrolitvinov"/>
    <language>en</language>
    <item>
      <title>📰 Monthly digests: January 2024</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Tue, 23 Jan 2024 19:12:46 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/monthly-digests-january-2024-1430</link>
      <guid>https://dev.to/dmytrolitvinov/monthly-digests-january-2024-1430</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZPakCRSz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2024/01/Monthly-Digest.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZPakCRSz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2024/01/Monthly-Digest.png" alt="📰 Monthly digests: January 2024" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey folks, we have not talked since &lt;a href="https://dmytrolitvinov.com/blog/digest-august-2023/"&gt;August 2023&lt;/a&gt; 😱&lt;br&gt;&lt;br&gt;
So this digest is like a phoenix - reborn with new articles and knowledge inside 😎&lt;br&gt;&lt;br&gt;
So, what's new? Let's take a sneak peek at our fresh batch of articles! 👇&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.percona.com/blog/uuids-are-popular-but-bad-for-performance-lets-discuss/?ref=dmytrolitvinov.com"&gt;🆔 &lt;strong&gt;UUIDs are Popular, but Bad for Performance — Let’s Discuss&lt;/strong&gt;&lt;/a&gt;
Also good article &lt;a href="https://buildkite.com/blog/goodbye-integers-hello-uuids?ref=dmytrolitvinov.com"&gt;Goodbye integers. Hello UUIDv7!&lt;/a&gt; In most cases small/mid projects will not see any performance issues such as big companies like Uber,Spotify,Netflix. In my cases at Django projects I leave &lt;code&gt;id&lt;/code&gt; as &lt;a href="https://docs.djangoproject.com/en/4.2/ref/models/fields/?ref=dmytrolitvinov.com#bigintegerfield"&gt;BigIntegerField&lt;/a&gt; and add separate separate &lt;code&gt;uuid&lt;/code&gt; field as &lt;a href="https://docs.djangoproject.com/en/4.2/ref/models/fields/?ref=dmytrolitvinov.com#uuidfield"&gt;UUIDField&lt;/a&gt; for not exposing to external my primary key.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vadimkravcenko.com/shorts/database-migrations/?ref=dmytrolitvinov.com"&gt;🔄 &lt;strong&gt;Database Migrations&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;-&lt;/strong&gt; as always good summarised article by Vadim about working with database migration during a software engineer’s life &lt;strong&gt;.&lt;/strong&gt; Links to complex database migration of others companies are included. Also not about Zero Downtime which every developer wants to have in their projects.
There are also a lot of articles related to Django framework 🎸&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;👨🏻‍💻&lt;/strong&gt; &lt;a href="https://github.com/github/how-engineering-communicates?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;How to communicate like a GitHub engineer: Our principles, practices, and tools&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Quick reference guide:&lt;/u&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be asynchronous first&lt;/li&gt;
&lt;li&gt;Write things down
&lt;em&gt;. Make work visible and overcommunicate
*. Prefer GitHub tools and workflows
*. Embrace collaboration
*. Foster a culture that values documentation maintenance
*. Communicate openly, honestly, and authentically
*&lt;/em&gt;. Strive for inclusivity
**. Use emoji and animated GIFs
*. Remember practicality beats purity

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.timescale.com/learn/real-time-analytics-in-postgres?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;💽 Real-time Analytics in Postgres: Why It's Hard (and How to Solve It)&lt;/strong&gt;&lt;br&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ByteByteGoHq/system-design-101?ref=dmytrolitvinov.com"&gt; &lt;strong&gt;🛠 System Design 101&lt;/strong&gt;&lt;br&gt;
&lt;/a&gt;Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://encore.dev/blog/retries?ref=dmytrolitvinov.com"&gt;🔄 &lt;strong&gt;An interactive study of common retry methods&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.germanvelasco.com/blog/refactoring-is-a-habit?ref=dmytrolitvinov.com"&gt;🫰 &lt;strong&gt;Refactoring has a price. Not refactoring has a cost. Either way, you pay&lt;/strong&gt;&lt;/a&gt;
&lt;em&gt;"Good habits have a price. Bad habits have a cost. Either way, you pay."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roughlywritten.substack.com/p/random-thoughts-15-years-into-software?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;🙌 Random Thoughts 15 years into Software Engineering&lt;/strong&gt;&lt;/a&gt;
Taking ownership and taking action instead of complaining 🚀&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎸&lt;/strong&gt; &lt;a href="https://confuzeus.com/hub/django-web-framework/model-polymorphism/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;The definitive guide to modeling polymorphism in Django&lt;/strong&gt;&lt;/a&gt;
Kinda new for me to read about &lt;code&gt;InheritanceManager&lt;/code&gt; from &lt;a href="https://django-model-utils.readthedocs.io/en/latest/?ref=dmytrolitvinov.com"&gt;django-model-utils&lt;/a&gt;. Need give it a try in a project.
As for &lt;a href="https://lukeplant.me.uk/blog/posts/avoid-django-genericforeignkey/?ref=dmytrolitvinov.com"&gt;GenericForeignKey good explanation by Luke Plant&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cloudbs.dev/research/cloud-object-storage-dubious-savings/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;💂🏼‍♂️ Vendors are Promising: 80%+ Savings on Object Storage Compared To Amazon S3&lt;/strong&gt;&lt;/a&gt;
Alternative S3 datastores, but with S3 protocol support.
Also, &lt;a href="https://www.scaleway.com/en/object-storage/?ref=dmytrolitvinov.com"&gt;Scaleway&lt;/a&gt; was not checked here, but as alternative can be checked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔢&lt;/strong&gt; &lt;a href="https://transactional.blog/blog/2023-cloud-storage-costs?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;S3-Compatible Cloud Storage Costs&lt;/strong&gt;&lt;/a&gt;
Additional article to previous one :)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>digests</category>
      <category>django</category>
      <category>programming</category>
      <category>web</category>
    </item>
    <item>
      <title>📰 Monthly digests: May 2023</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Wed, 31 May 2023 05:25:02 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/monthly-digests-may-2023-3ff3</link>
      <guid>https://dev.to/dmytrolitvinov/monthly-digests-may-2023-3ff3</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1lISXB17--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/size/w1600/format/avif/2023/05/Monthly-Digest--1-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1lISXB17--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/size/w1600/format/avif/2023/05/Monthly-Digest--1-.png" alt="📰 Monthly digests: April 2023" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎸 &lt;strong&gt;&lt;a href="https://adamj.eu/tech/2023/03/23/django-context-processors-database-queries/?ref=dmytrolitvinov.com"&gt;Django: Avoid database queries in template context processors&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;👾 &lt;strong&gt;&lt;a href="https://lucide.dev/?ref=dmytrolitvinov.com"&gt;Lucide&lt;/a&gt;&lt;/strong&gt; - Beautiful &amp;amp; consistent icon toolkit made by the community&lt;/li&gt;
&lt;li&gt;🌱 &lt;strong&gt;&lt;a href="https://awstip.com/handling-a-million-tasks-in-django-efficient-prioritization-with-celery-redis-and-flower-b06fc8957d5?ref=dmytrolitvinov.com"&gt;Handling a Million Tasks in Django: Efficient Prioritization with Celery, Redis, and Flower&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;&lt;a href="https://azeemcode.medium.com/17-django-tips-and-tricks-for-optimizing-your-application-848809bc1b48?ref=dmytrolitvinov.com"&gt;17 Django Tips and Tricks for Optimizing Your Application&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🌾 &lt;a href="https://github.com/mitsuhiko/rye?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;rye&lt;/strong&gt;&lt;/a&gt; - &lt;a href="https://github.com/mitsuhiko/rye?ref=dmytrolitvinov.com"&gt;An Experimental Package Management Solution for Python&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐍 &lt;strong&gt;&lt;a href="https://github.com/hsaunders1904/pyautoenv?ref=dmytrolitvinov.com"&gt;pyautoenv&lt;/a&gt;&lt;/strong&gt; - Automatically activate and deactivate Python environments as you move around the file system.&lt;/li&gt;
&lt;li&gt;🦗 &lt;strong&gt;&lt;a href="https://github.com/alteryx/locust-grasshopper?ref=dmytrolitvinov.com"&gt;locust-grasshopper&lt;/a&gt;&lt;/strong&gt; - A load testing tool extended from locust. More details about it &lt;a href="https://innovation.alteryx.com/introducing-grasshopper-an-open-source-python-library-for-load-testing/?ref=dmytrolitvinov.com"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://www.youtube.com/watch?v=L7Ry-Fiij-M&amp;amp;ref=dmytrolitvinov.com"&gt;&lt;strong&gt;How to Document Your Code Like a Pro&lt;/strong&gt;&lt;/a&gt; - TLTW: use comments in code, type hints (can be used just as comments - why not 🤷‍♂️), docstrings. And don’t forget about ChatGPT 😉&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;&lt;a href="https://www.builder.io/blog/ai-prompts-for-web-developers-chatgpt?ref=dmytrolitvinov.com"&gt;50+ ChatGPT Prompts for Web Developers&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bw-bkyLB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/05/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bw-bkyLB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/05/image.png" alt="📰 Monthly digests: May 2023" width="800" height="796"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quote of the Digest:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“We have to stop optimizing for programmers and start optimizing for users.”&lt;/em&gt; - Jeff Atwood&lt;/p&gt;

</description>
      <category>digests</category>
      <category>django</category>
      <category>programming</category>
      <category>web</category>
    </item>
    <item>
      <title>📰 Monthly digests: April 2023</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Thu, 27 Apr 2023 10:07:00 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/monthly-digests-april-2023-2508</link>
      <guid>https://dev.to/dmytrolitvinov/monthly-digests-april-2023-2508</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WoLEKtG1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/05/Monthly-Digest.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WoLEKtG1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/05/Monthly-Digest.png" alt="📰 Monthly digests: April 2023" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the company where I work, I do a monthly digest with information that I find valuable and interesting to share with my colleagues and discuss them.&lt;br&gt;&lt;br&gt;
&lt;em&gt;This digest will be mostly related to &lt;a href="https://www.djangoproject.com/?ref=dmytrolitvinov.com"&gt;Django framework&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;🎸 &lt;a href="https://www.djangoproject.com/weblog/2023/apr/03/django-42-released/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;Django 4.2 released&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;-&lt;/strong&gt; Django 4.2 is designated as a long-term support release. It will receive security updates for at least three years after its release. Support for the previous LTS, Django 3.2, will end in April 2024.&lt;/li&gt;
&lt;li&gt;💽 &lt;a href="https://www.revsys.com/tidbits/devdata-improving-developer-velocity-and-experience/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;devdata - Improving developer velocity and experience&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;&lt;a href="https://djangoandy.com/2023/03/18/how-i-am-using-chatgpt-increase-my-productivity-coding-django/?ref=dmytrolitvinov.com"&gt;How I am using ChatGPT to increase my productivity coding Django&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🎸 &lt;strong&gt;&lt;a href="https://adamj.eu/tech/2023/03/17/django-parameterized-tests-model-admin-classes/?ref=dmytrolitvinov.com"&gt;Django: Parametrized tests for all model admin classes&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🖇 &lt;a href="https://www.screamingatmyscreen.com/caching-and-django-rest-framework/?ref=dmytrolitvinov.com"&gt;Caching and Django Rest Framework&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;1️⃣ &lt;strong&gt;&lt;a href="https://suor.github.io/blog/2023/03/26/ban-1-plus-n-in-django/?ref=dmytrolitvinov.com"&gt;Ban 1+N in Django&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;&lt;a href="https://www.caktusgroup.com/blog/2023/03/22/denormalization-json-fields-performance-boost/?ref=dmytrolitvinov.com"&gt;Denormalization with JSON Fields for a Performance Boost&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.thoughtworks.com/radar?ref=dmytrolitvinov.com"&gt;Technology Radar #28&lt;/a&gt;&lt;/strong&gt; - An opinionated guide to technology frontiers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---mzg4uZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/04/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---mzg4uZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dmytrolitvinov.com/content/images/2023/04/image.png" alt="📰 Monthly digests: April 2023" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quote of the Digest:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Talking to people can save you hours of relentless, undirected and ultimately unsatisfying coding."&lt;/em&gt; - Marcel Gehlen&lt;/p&gt;

</description>
      <category>digests</category>
      <category>django</category>
      <category>programming</category>
      <category>web</category>
    </item>
    <item>
      <title>📰 Monthly digests: March 2023</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Sat, 25 Mar 2023 07:09:39 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/monthly-digests-march-2023-4j27</link>
      <guid>https://dev.to/dmytrolitvinov/monthly-digests-march-2023-4j27</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qO1PQ5d8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/Monthly-Digest.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qO1PQ5d8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/Monthly-Digest.png" alt="📰 Monthly digests: March 2023" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the company where I work, I do monthly digest with information that I find valuable and interesting to share with my colleagues and discuss them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;🐘 &lt;a href="https://psql-tips.org/psql_tips_all.html?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;psql Tips&lt;/strong&gt;&lt;/a&gt; - some useful psql tips to help you optimize your workflow and get the most out of your PostgreSQL database&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✉️ &lt;a href="https://www.mikecoutermarsh.com/storing-email-in-postgres-rails-use-citext/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;Storing Emails in Postgres + Rails - Use Citext&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://adamj.eu/tech/2023/02/23/migrate-django-postgresql-ci-fields-case-insensitive-collation/?ref=dmytrolitvinov.com"&gt;How to migrate from Django’s PostgreSQL CI Fields to use a case-insensitive collation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.djangoproject.com/en/4.2/ref/contrib/postgres/fields/?ref=dmytrolitvinov.com#django.contrib.postgres.fields.CIEmailField"&gt;CIEmailField deprecation for Django 4.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🍋 &lt;a href="https://gitmoji.dev/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;gitmoji&lt;/strong&gt;&lt;/a&gt; - Emoji guide for GitHub commit messages, which aims to be a standardisation cheatsheet. And here a command line tool for that - &lt;a href="https://github.com/carloscuesta/gitmoji-cli?ref=dmytrolitvinov.com"&gt;https://github.com/carloscuesta/gitmoji-cli&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🥸 &lt;a href="https://arc.net/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;Arc browser&lt;/strong&gt;&lt;/a&gt; -  Revolutionary, user-centric browser with innovative features&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🖼️ &lt;a href="https://diffusionbee.com/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;DiffusionBee&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;-&lt;/strong&gt; Stable Diffusion GUI App for MacOS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👽 &lt;a href="https://twitter.com/reactjs/status/1636441676506906626?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;React.dev&lt;/strong&gt;&lt;/a&gt; - the new home for React and its documentation. &lt;code&gt;create-react-app&lt;/code&gt; is &lt;a href="https://twitter.com/t3dotgg/status/1636462921281835009?ref=dmytrolitvinov.com"&gt;legacy&lt;/a&gt;. Use &lt;code&gt;create-next-app&lt;/code&gt; 🙂&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📚 &lt;a href="https://www.robinwieruch.de/react-libraries/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;React Libraries for 2023&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🤖 &lt;a href="https://openai.com/research/gpt-4?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;GPT-4 released&lt;/strong&gt;&lt;/a&gt; - Here is an example of using it: &lt;a href="https://twitter.com/damn_coder/status/1635834748630339585?s=46&amp;amp;3Bt=ksUe_vSX39huu3yMuMp3nw&amp;amp;ref=dmytrolitvinov.com"&gt;example 1&lt;/a&gt;, &lt;a href="https://twitter.com/saboo_shubham_/status/1635692366085468163?s=46&amp;amp;3Bt=ksUe_vSX39huu3yMuMp3nw&amp;amp;ref=dmytrolitvinov.com"&gt;example 2&lt;/a&gt;, &lt;a href="https://twitter.com/chrisstaud/status/1635543503135539201?s=46&amp;amp;3Bt=ksUe_vSX39huu3yMuMp3nw&amp;amp;ref=dmytrolitvinov.com"&gt;example 3&lt;/a&gt;, &lt;a href="https://twitter.com/heykahn/status/1635986061343211520?ref=dmytrolitvinov.com"&gt;example 4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🎸 &lt;a href="https://lp.jetbrains.com/django-developer-survey-2022/?ref=dmytrolitvinov.com"&gt;&lt;strong&gt;Django Developers Survey 2022&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ArhGXrhj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ArhGXrhj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/image.png" alt="📰 Monthly digests: March 2023" width="500" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Packages &amp;amp; resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lukasvinclav/django-admin-numeric-filter?ref=dmytrolitvinov.com"&gt;django-admin-numeric-filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bradtraversy/design-resources-for-developers?ref=dmytrolitvinov.com"&gt;design-resources-for-developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;P.S. That post was originally published at my website — &lt;a href="https://dmytrolitvinov.com/blog/digest-march-2023/"&gt;https://dmytrolitvinov.com/blog/digest-march-2023/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>digests</category>
      <category>programming</category>
      <category>web</category>
    </item>
    <item>
      <title>How to write better Git commits 🔨</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Tue, 07 Mar 2023 21:33:33 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/how-to-write-better-git-commits-85l</link>
      <guid>https://dev.to/dmytrolitvinov/how-to-write-better-git-commits-85l</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6kLz-cB4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/167822418124892055.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6kLz-cB4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/167822418124892055.png" alt="How to write better Git commits 🔨" width="880" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working with Git, writing clear and concise commit messages is essential for effective collaboration and maintainability of code. One approach to improve the quality of Git commit messages is to use &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/?ref=dmytro-litvinov"&gt;Semantic Commits&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Semantic Commits are a convention for writing commit messages that provides a structured and consistent format. It should contains a type, a scope, and a subject, all separated by colons.&lt;/p&gt;

&lt;p&gt;In each of these examples, the header follows the format of :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ℹ️ &lt;code&gt;type(scope): subject &amp;lt;optional metadata&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;type&lt;/em&gt; describes the nature of the change (such as adding a new feature or fixing a bug), the &lt;em&gt;scope&lt;/em&gt; indicates the part of the codebase that was modified, the &lt;em&gt;subject&lt;/em&gt; provides a brief summary of the changes in the imperative mode&lt;u&gt;,&lt;/u&gt; and the &lt;em&gt;metadata&lt;/em&gt; which is optional can provide context and additional details about the changes, such as the issue number or the author of the changes. These commit messages are clear and descriptive, making it easier to understand the nature of the changes and why they were made.&lt;/p&gt;

&lt;h3&gt;
  
  
  The type
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What types I use at my daily work:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;feat: A new feature or enhancement to existing functionality. For example, "feat(user): Add ability to reset password."
&lt;/li&gt;
&lt;li&gt;fix: A bug fix or correction to existing functionality. For example, "fix(login): Fix issue preventing users from logging in."
&lt;/li&gt;
&lt;li&gt;refactor: Changes to the codebase that do not add new features or fix bugs, but improve the structure, readability, or maintainability of the code. For example, "refactor(payment): Simplify payment processing code."
&lt;/li&gt;
&lt;li&gt;style: Changes to the formatting, style, or code layout that do not affect the functionality of the code. For example, "style(user): Format user profile page."
&lt;/li&gt;
&lt;li&gt;test: Adding or modifying tests for existing functionality. For example, "test(cart): Add test for cart checkout process."
&lt;/li&gt;
&lt;li&gt;docs: Changes to documentation, such as updating README files or inline code comments. For example, "docs(auth): Update authentication documentation."
&lt;/li&gt;
&lt;li&gt;chore: Changes to the build process, dependencies, or other maintenance tasks that do not affect the functionality of the code. For example, "chore(deps): Update dependency versions."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scope&lt;/p&gt;

&lt;p&gt;The scope is optional and can be used to indicate which part of the codebase was modified. For example, if you modified the login functionality, you could use "auth" as the scope.&lt;/p&gt;

&lt;h3&gt;
  
  
  The subject
&lt;/h3&gt;

&lt;p&gt;The subject is a brief summary of the changes, written in the imperative mode. This means that the subject should start with a verb in the present tense, and it should describe what the commit does, not what it did. For example, instead of writing "Fixed login bug," you should write "Fix login bug." This makes the commit message more actionable and easier to understand. When I write commit message I have a hint when I  compose commit message -  "If I apply that commit, it will {your commit message which you are going to commit}".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✍️ Use the imperative mood in commit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's an example of a Semantic Commit message:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;feat(auth): Add support for social media login (#32124)&lt;/li&gt;
&lt;li&gt;fix(cart): Fix issue with cart calculation  (#28567)&lt;/li&gt;
&lt;li&gt;refactor(user): Refactor user registration code  (#29745)&lt;/li&gt;
&lt;li&gt;style(product): Format product detail page  (#29812)&lt;/li&gt;
&lt;li&gt;test(login): Add test for login form validation  (#29015)&lt;/li&gt;
&lt;li&gt;docs(readme): Update README with installation instructions &lt;/li&gt;
&lt;li&gt;chore(deps): Update package dependencies  (#30867)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The metadata
&lt;/h3&gt;

&lt;p&gt;This information can help provide context and additional details about the changes being made. At my company where I work  &lt;a href="https://softformance.com/?ref=dmytro-litvinov"&gt;SoftFormance&lt;/a&gt;  we use Redmine project management tool and we work by tickets. I always add ticket number in metadata. Also, if  the changes being made are not backward-compatible with existing code, including a note about this can help alert other developers to potential issues that may arise when updating their code.&lt;/p&gt;




&lt;p&gt;While Semantic Commits provide a structured and clear way to write Git commit messages, you can also add some personality and fun to your commits by using emoji.&lt;/p&gt;

&lt;p&gt;Using emoji in Git commits can help convey emotions, add humor, or simply make your commit messages more interesting. Some developers use specific emoji to denote the type of change being made, while others use them as a way to add a personal touch to their commits.&lt;/p&gt;

&lt;p&gt;For example, you might use the following emoji to represent different types of changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎉 : For adding a new feature or functionality&lt;/li&gt;
&lt;li&gt;🐛 : For fixing a bug&lt;/li&gt;
&lt;li&gt;🔨 : For making code improvements or refactoring&lt;/li&gt;
&lt;li&gt;💄 : For making cosmetic changes such as updating the UI or formatting code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also use other emoji to add humor or personality to your commits, such as 🚀 for making performance improvements, 🤓 for adding technical documentation, or 🐢 for slow performance issues.&lt;/p&gt;

&lt;p&gt;When using emoji in Git commits, it's important to remember to use them in moderation and to keep them professional and appropriate for the context. Additionally, not all Git clients support emoji, so be aware that they may not display correctly in all instances.&lt;/p&gt;

&lt;p&gt;Overall, using emoji in Git commits can be a fun and creative way to add some personality to your commit messages, while still following the best practices of Semantic Commits.&lt;/p&gt;




&lt;p&gt;Writing Semantic Commits can help in debugging and collaboration with other developers in the future. When working on a project, having clear and descriptive commit messages can save valuable time and effort in identifying and fixing issues. Additionally, it can make it easier for other developers to understand the changes made to a codebase, which can lead to more effective collaboration and communication.&lt;/p&gt;

&lt;p&gt;While it may take some effort to establish the habit of writing Semantic Commits, the long-term benefits make it well worth the investment. Many open-source projects on GitHub require the use of Semantic Commits, making it an important skill for developers to learn if they plan on contributing to these projects or working collaboratively with other developers. By making Semantic Commits a habit, developers can improve the quality of their Git commit messages and make it easier to understand and maintain their code over time.&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>From Static to Dynamic: How I Migrated my Website to Ghost CMS on DigitalOcean</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Sun, 05 Mar 2023 16:21:41 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/from-static-to-dynamic-how-i-migrated-my-website-to-ghost-cms-on-digitalocean-ekm</link>
      <guid>https://dev.to/dmytrolitvinov/from-static-to-dynamic-how-i-migrated-my-website-to-ghost-cms-on-digitalocean-ekm</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---WMLvGYY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/imageedit_5_9386248476.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---WMLvGYY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/imageedit_5_9386248476.png" alt="From Static to Dynamic: How I Migrated my Website to Ghost CMS on DigitalOcean" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the main reasons I decided to migrate my blog from the previous version built with &lt;a href="https://getpelican.com/?ref=dmytro-litvinov"&gt;Pelican static site generator&lt;/a&gt; for &lt;a href="https://blog.dmytrolitvinov.com/?ref=dmytro-litvinov"&gt;https://blog.dmytrolitvinov.com&lt;/a&gt; to &lt;a href="https://ghost.org/?ref=dmytro-litvinov"&gt;Ghost CMS&lt;/a&gt; was because I wanted to create and manage my content more easily. With Ghost CMS, I found it easier to focus on writing and creating new content, rather than spending time on technical maintenance or worrying about the design of my website.&lt;/p&gt;

&lt;p&gt;In images below you can see old version of website. Homepage was built using &lt;a href="https://github.com/flexdinesh/dev-landing-page?ref=dmytro-litvinov"&gt;dev-landing-page&lt;/a&gt; GitHub repo and hosted using &lt;a href="https://pages.github.com/?ref=dmytro-litvinov"&gt;GitHub Pages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dNsFkUCe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/SCR-20230305-pqbi.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dNsFkUCe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/SCR-20230305-pqbi.webp" alt="From Static to Dynamic: How I Migrated my Website to Ghost CMS on DigitalOcean" width="880" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Old version of homepage &lt;a href="https://DmytroLitvinov.com"&gt;https://DmytroLitvinov.com&lt;/a&gt; using dev-landing-page repo&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y2PJlc1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/SCR-20230305-przy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y2PJlc1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dmytrolitvinov.com/content/images/2023/03/SCR-20230305-przy.webp" alt="From Static to Dynamic: How I Migrated my Website to Ghost CMS on DigitalOcean" width="880" height="481"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Old version of &lt;a href="https://blog.dmytrolitvinov.com"&gt;https://blog.dmytrolitvinov.com&lt;/a&gt; using Pelican static site generator&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Migrating to Ghost CMS hosted on &lt;a href="https://m.do.co/c/0bafff05bdec?ref=dmytro-litvinov"&gt;DigitalOcean&lt;/a&gt; (registering using my referral link will give you 200$ for 60 days) was a great move for my website. Ghost CMS is a user-friendly, powerful, and modern platform designed specifically for bloggers and content creators. Its intuitive interface, customizable themes, and powerful editor made it an ideal solution for my blog.&lt;/p&gt;

&lt;p&gt;To begin, I signed up for a DigitalOcean account and created a droplet (virtual machine) with Ubuntu using &lt;a href="https://marketplace.digitalocean.com/apps/ghost?ref=dmytro-litvinov"&gt;Ghost 1-Click App&lt;/a&gt; which allowed me to self-host my own Ghost instance up and running in two minutes.&lt;/p&gt;

&lt;p&gt;After installing Ghost CMS, I was able to customize my theme. Ghost CMS offers a variety of themes and plugins to enhance website, and its powerful editor allowed me to create beautiful and engaging content without any coding knowledge. As a theme for my website I found out a really cool theme called &lt;a href="https://github.com/royalfig/smart?ref=dmytro-litvinov"&gt;smart&lt;/a&gt; (Hi Ryan if you are reading it 👋)&lt;/p&gt;

&lt;p&gt;One of the main reasons I chose a self-hosted solution was to have full control over my website. With Ghost CMS hosted on DigitalOcean, I am able to manage my website and make changes whenever I want. Overall, migrating to Ghost CMS on DigitalOcean was a smooth and easy process, and I am very satisfied with the results.&lt;/p&gt;

&lt;p&gt;After migration I stacked with some of problems like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A lot of redirects because of SSL in CloudFlare.
Solution: &lt;a href="https://blog.lanway.dev/too-many-redirects-on-ghost-blog-install/?ref=dmytro-litvinov"&gt;https://blog.lanway.dev/too-many-redirects-on-ghost-blog-install/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;No swap on server (not a big deal, but still)
Solution: &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04?ref=dmytro-litvinov"&gt;https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Setup of MailGun
Solution: &lt;a href="https://forum.ghost.org/t/502-bad-gateway-after-reboot-the-server-any-hep/36203/14?ref=dmytro-litvinov"&gt;https://forum.ghost.org/t/502-bad-gateway-after-reboot-the-server-any-hep/36203/14&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ghost</category>
      <category>blog</category>
    </item>
    <item>
      <title>Awesome flake8 extensions</title>
      <dc:creator>Dmytro Litvinov</dc:creator>
      <pubDate>Thu, 22 Nov 2018 07:36:03 +0000</pubDate>
      <link>https://dev.to/dmytrolitvinov/awesome-flake8-extensions-gld</link>
      <guid>https://dev.to/dmytrolitvinov/awesome-flake8-extensions-gld</guid>
      <description>&lt;p&gt;Hello everyone.&lt;br&gt;
I would like to share with you &lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions"&gt;awesome-flake8-extensions&lt;/a&gt; repository.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DmytroLitvinov"&gt;
        DmytroLitvinov
      &lt;/a&gt; / &lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions"&gt;
        awesome-flake8-extensions
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      :octocat: A curated awesome list of flake8 extensions. Feel free to contribute! 🎓
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Awesome Flake8 Extensions &lt;a href="https://awesome.re" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/5d0405ddcbeac98b5806832e6254a0a102e09b47637c2ddec9a8094cb2257b31/68747470733a2f2f617765736f6d652e72652f62616467652d666c6174322e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;A curated list of awesome flake8 extensions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Inspired after reading a &lt;a href="https://julien.danjou.info/the-best-flake8-extensions/" rel="nofollow"&gt;post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#all-in-one"&gt;All-in-one&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#bugs"&gt;Bugs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#clean-code"&gt;Clean code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#limitations"&gt;Limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#naming"&gt;Naming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#complexity"&gt;Complexity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#comments"&gt;Comments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#docstrings"&gt;Docstrings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#tools"&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#imports"&gt;Imports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#testing"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#type-annotations"&gt;Type annotations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#library-specific-checks"&gt;Library-specific checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#integrations"&gt;Integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#wrappers"&gt;Wrappers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DmytroLitvinov/awesome-flake8-extensions#formatters"&gt;Formatters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
All-in-one&lt;/h2&gt;
&lt;p&gt;Extensions with more than 20 rules inside.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/dlint-py/dlint"&gt;dlint&lt;/a&gt; - Tool for encouraging best coding practices and helping ensure Python code is secure.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/PyCQA/flake8-bugbear"&gt;flake8-bugbear&lt;/a&gt; - Finding likely bugs and design problems in your program.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sbdchd/flake8-pie"&gt;flake8-pie&lt;/a&gt; - Extension that implements misc. lints.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/MartinThoma/flake8-simplify"&gt;flake8-simplify&lt;/a&gt; - Plugin that helps you to simplify code.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/openstack/hacking"&gt;hacking&lt;/a&gt; - Set of flake8 plugins that test and enforce the &lt;a href="https://docs.openstack.org/hacking/latest/user/hacking.html#styleguide" rel="nofollow"&gt;OpenStack StyleGuide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/wemake-services/wemake-python-styleguide"&gt;wemake-python-styleguide&lt;/a&gt; - The strictest and most opinionated python linter ever.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Bugs&lt;/h2&gt;
&lt;p&gt;Extensions for finding possible bugs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/asottile/flake8-2020"&gt;flake8-2020&lt;/a&gt; - Plugin which checks for misuse of &lt;code&gt;sys.version&lt;/code&gt; or &lt;code&gt;sys.version_info&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/datatheorem/flake8-alfred"&gt;flake8-alfred&lt;/a&gt; - Alfred is a flake8 plugin to warn on unsafe/obsolete symbols.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/cooperlees/flake8-async"&gt;flake8-async&lt;/a&gt; - A flake8 plugin that checks for bad async…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/DmytroLitvinov/awesome-flake8-extensions"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Feel free to contribute and have a nice day :)&lt;/p&gt;

</description>
      <category>python</category>
      <category>flake8</category>
      <category>linter</category>
    </item>
  </channel>
</rss>
