<?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: Aaron Kofi Gayi</title>
    <description>The latest articles on DEV Community by Aaron Kofi Gayi (@kekelidev).</description>
    <link>https://dev.to/kekelidev</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%2F676860%2F57617655-bd71-419e-959c-fd977c15d3f0.jpeg</url>
      <title>DEV Community: Aaron Kofi Gayi</title>
      <link>https://dev.to/kekelidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kekelidev"/>
    <language>en</language>
    <item>
      <title>Automated YouTube Downloads</title>
      <dc:creator>Aaron Kofi Gayi</dc:creator>
      <pubDate>Wed, 14 Aug 2024 13:43:51 +0000</pubDate>
      <link>https://dev.to/kekelidev/automated-youtube-downloads-5doe</link>
      <guid>https://dev.to/kekelidev/automated-youtube-downloads-5doe</guid>
      <description>&lt;p&gt;I have been looking for repositories and articles that will automate my youtube downloads using the available open sources packages. I did seem to find one that suited my need so just like any programmer will do; I built my own. Fully automated (maybe not), but I hope you find it useful. if there are features you want me to add let know.&lt;/p&gt;

&lt;p&gt;You can find the repository &lt;a href="https://github.com/KekeliDev/download_youtube" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Video downloader&lt;/li&gt;
&lt;li&gt;Playlist videos downloader&lt;/li&gt;
&lt;li&gt;Video to mp3 using FFmpeg&lt;/li&gt;
&lt;li&gt;Playlist to mp3 using FFmpeg&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>MonoRepo and MultiRepo which should you consider for your next project?</title>
      <dc:creator>Aaron Kofi Gayi</dc:creator>
      <pubDate>Mon, 21 Aug 2023 13:03:45 +0000</pubDate>
      <link>https://dev.to/kekelidev/monorepo-and-multirepo-which-should-you-consider-for-your-next-project-36dj</link>
      <guid>https://dev.to/kekelidev/monorepo-and-multirepo-which-should-you-consider-for-your-next-project-36dj</guid>
      <description>&lt;h2&gt;
  
  
  What is a Repo?
&lt;/h2&gt;

&lt;p&gt;A repo is a centralized digital storage that developers use to make and manage changes to an applications source code. (Source AWS).&lt;br&gt;
A repo foresters collaboration on project very easily among devs.&lt;br&gt;
A repo is not a git!&lt;br&gt;
Repo is built on top of git or  a version control system hence a repo can have several "git" repositories. &lt;br&gt;
When working on a small project you won't need to worry much about monorepo or multirepo environment but concern yourself with a version control of your application. However when work on large applications ( like Google, LinkedIn, or Meta) it is crucial for developers to understand the application's repo and coding standards especially syntaxing ( eg. CamelCase for classes and snake_case for functions)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yiu114yzu9z7hd6xjcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yiu114yzu9z7hd6xjcn.png" alt=" Monorepo and Multirepo by [Magenta Quin] (https://medium.com/@magenta2127/monorepo-vs-multi-repo-vs-monolith-7c4a5f476009)" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MonoRepo?
&lt;/h2&gt;

&lt;p&gt;A monorepo is one central hub for all the application packages. Windows and Linux is built in a monorepo. Google, Meta, AirBnB and Uber use this approach. All code changes are pushed to the central hub. &lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy cross project changes are easy:&lt;/strong&gt; For instance one utility class can be changed and all services that uses that interface will be aware and don't need to any extra works. (eg. Changing mailing server for the project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dependencies Management is easier:&lt;/strong&gt; All services use the same dependency version and all services (devs) are aware of the dependencies that are available for the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Promotes Consistency in codes:&lt;/strong&gt; All developers follow the same design, coding patterns and rules as everyone is playing by the rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Reuse:&lt;/strong&gt; if a functionality has already been implemented in a service another service wouldn't need to create the same functionality again. Eg. An email utility class  created for authentication system that sends email verification emails; the same function can be used to send order status, promos and news letters emails.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Despite the benefits here are some challenges of monorepo
It requires carefully planning and tooling like Bazel which was created by Google and Buck by Meta&lt;/li&gt;
&lt;li&gt;Slow CI/CD pipeline because of intensive code reviews and testing.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The repo can be overwhelming to new developers if repo is not documented properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customization of services to suit devs is challenge because there are rules and standards they must follow.  If a service requires a specific version of a library and that's not available at the repo dependency level this can cause that service to fail. Major changes need to consider the entire repo code base. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools like Bazel and Bucks can balance these tradeoffs. By the way they are open source. If you would like to do articles on them let me know in the comments&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MultiRepo?
&lt;/h2&gt;

&lt;p&gt;Services and Components are treated as separate entities; each service has its own dependencies, libraries and utility classes. It's decentralized unlike a monorepo that is centralized. LinkedIn, Amazon and Netflix uses this appapproach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independence of services and Teams:&lt;/strong&gt; Devs can manage and scale their respective repo (service) without concerning themselves with others&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk Isolation:&lt;/strong&gt; if a library or dependency in one repo becomes vulnerable it doesn't affect other repos or services even though the whole project might fail but it only requires "rescuing" only that repo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; Teams can select tools for their repo and environment for their service requirements &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clear ownership of repo among teams reduces responsibilities of teams as they are to concern themselves with their respective repo. (Mailing service devs wouldn't worry about Order service)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cross platform changes can be a nightmare. It will require collaboration and specialized tooling to achieve this, such tools include Nexus and Artifactory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Different coding standards among teams. This can result in poor code quality and inconsistency but this can be mitigated through establishing an organization wide coding standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code duplication is paramount. Because there might be no project wide shared utility classes and functions each service team will have to implement these classes and functions in their service even though other services may have implemented them already. Creating shared libraries can help mitigate this issue.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which to choose for your next project?
&lt;/h2&gt;

&lt;p&gt;There's a gray shade when choosing between the two. Factors such as team size, organization size, nature of project, modularity, security and many more will affect your choice. You have plan ahead and with teams come out what will best the project and the devs.&lt;/p&gt;

&lt;p&gt;However if you want consistency, smooth cross project change, code reusability and have large teams then monorepo will be a great suite and will require upfront planning and tooling.&lt;br&gt;&lt;br&gt;
If you want flexibility, risk isolation, clear ownership and responsibility among devs then multirepo will be a great fit. This prioritizes team autonomy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why does it a long time launch a product?</title>
      <dc:creator>Aaron Kofi Gayi</dc:creator>
      <pubDate>Wed, 21 Jun 2023 19:28:18 +0000</pubDate>
      <link>https://dev.to/kekelidev/why-does-it-a-long-time-launch-a-product-2c5c</link>
      <guid>https://dev.to/kekelidev/why-does-it-a-long-time-launch-a-product-2c5c</guid>
      <description>&lt;p&gt;Usually it will take less than half the time it takes to develop a software but because inclusivity for all (possibly), it takes twice or thrice that. We try to account for all possible scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.eqs.com/compliance-blog/biggest-gdpr-fines/" rel="noopener noreferrer"&gt;A list of biggest GDPR compliance fines for 2022&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can't take humans out of the equation; we build for humans and with humans. This inclusivity for all is major reasons for most cyberattacks as the additional "features" makes a relatively simpler system more complex and introduces vulnerabilities that are sometimes difficult to mitigate without breaking a whole system. The extremes are government regulations, policies and religions beliefs and political correctness.&lt;/p&gt;

&lt;p&gt;Over a decade in my software development journey. One of the things I have noticed is that we developers think we are building for ourselves without considering the average user (the actual user) of the platform. This slows development such that an MVP that will take a month or two to build might take several months and sometimes end up in the 12+ months mark. Software development is an iterative process; We can't consider all possible scenarios in the same vein we can't leave some essential things out.&lt;br&gt;
Does that mean we should ask users what they want all the time? No!!! As Phil Libin ( creator of evernote and four other startups) puts it: " build for yourself; it is better for 100 people to like your product than a million people who kinda like it." The" build it for yourself" doesn't mean for your usage but how you as a regular user would prefer it because if it is left to us developers/engineers everything should be terminal base, sorry Windows users😌. &lt;/p&gt;

&lt;p&gt;Software Development is an iterative process; start with the knowns to get to the unknowns just like everything in life. You can't please everyone. Launch the product, the world has been waiting too long for it.&lt;/p&gt;

&lt;p&gt;Launch The Product!!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A shell script to create a Django project.</title>
      <dc:creator>Aaron Kofi Gayi</dc:creator>
      <pubDate>Sat, 10 Dec 2022 18:34:56 +0000</pubDate>
      <link>https://dev.to/kekelidev/a-shell-script-to-create-a-django-project-4a6c</link>
      <guid>https://dev.to/kekelidev/a-shell-script-to-create-a-django-project-4a6c</guid>
      <description>&lt;p&gt;I have been a Django developer for half a decade now and I always wish there was a way to start a project without having to deal with the boring stuffs. Every month  I start at least three projects.&lt;br&gt;
Today, I introduce to you a simple shell script that automates the start of a Django project. &lt;/p&gt;

&lt;h2&gt;
  
  
  What does it do exactly?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Creates a virtual environment&lt;/li&gt;
&lt;li&gt;Upgrades pip and install Django and Pillow, and other packages you added&lt;/li&gt;
&lt;li&gt;Starts a Django project &lt;/li&gt;
&lt;li&gt;Gets list of apps you will need for your project and creates them&lt;/li&gt;
&lt;li&gt;Creates &lt;code&gt;requirements.txt&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Starts the project at port &lt;code&gt;8000&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can access the script at this &lt;a href="https://github.com/KekeliDev/django_setup_shell_script.git" rel="noopener noreferrer"&gt;github repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please follow the instructions at the repo&lt;br&gt;
Enjoy and have fun!&lt;/p&gt;

</description>
      <category>django</category>
      <category>shell</category>
      <category>python</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
