<?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: SachinDas246</title>
    <description>The latest articles on DEV Community by SachinDas246 (@sachindas246).</description>
    <link>https://dev.to/sachindas246</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%2F590131%2F58f96097-5af4-4547-9cb9-0fa7ddadfdba.webp</url>
      <title>DEV Community: SachinDas246</title>
      <link>https://dev.to/sachindas246</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sachindas246"/>
    <language>en</language>
    <item>
      <title>Why the Web cannot beat Screen.Studio!</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Sat, 08 Nov 2025 12:45:37 +0000</pubDate>
      <link>https://dev.to/sachindas246/why-the-web-cannot-beat-screenstudio-40kl</link>
      <guid>https://dev.to/sachindas246/why-the-web-cannot-beat-screenstudio-40kl</guid>
      <description>&lt;p&gt;You’ve probably seen them, those incredibly polished screen recordings that seem to effortlessly guide your attention. With smooth, automatic zooms that follow the action and elegant cursor effects, these videos make tutorials and product demos more engaging than ever. Recently, a new wave of software has emerged that automates the hard parts of video creation, letting you simultaneously record your screen, camera, and microphone to produce stunning results with minimal effort.&lt;/p&gt;

&lt;p&gt;This is the magic that inspired us to create ScreenScript.app. We wanted to bring the power of tools like Screen Studio, which is designed for macOS, to the web, making professional-quality screen recording accessible to everyone directly from their browser. Within weeks, we had a working MVP, and after a month of deep-diving into the technical nuances of web-based video, we launched a stable, powerful product.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/nvMrGBWebvA"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;But this isn’t just a story about our product. It’s a look behind the curtain at the unique and often frustrating challenges that come with building sophisticated screen recorders using web technology instead of native software. If you’re a developer or just curious about the limits of what a browser can do, these are the hurdles we face every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Alluring Promise of the Web
&lt;/h2&gt;

&lt;p&gt;Web technology is evolving at a breakneck pace. With powerful tools like the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API" rel="noopener noreferrer"&gt;Screen Capture API&lt;/a&gt; and the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/File_System_API" rel="noopener noreferrer"&gt;File System Access API&lt;/a&gt;, it often feels like a web developer can do almost anything a native developer can. This promise of a single codebase that runs everywhere, accessible with just a URL is what drove us to build &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript&lt;/a&gt; on the web. The potential to create a seamless, installation-free experience was too compelling to ignore.&lt;/p&gt;

&lt;p&gt;However, as we moved from idea to implementation, we discovered that while you can do almost anything, there are subtle but significant limitations that browsers impose, often for very good security reasons. And for a screen recorder, many of these limitations revolve around one critical element: &lt;strong&gt;the cursor&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cursor: The Star of the Show and Our Biggest Headache
&lt;/h2&gt;

&lt;p&gt;For a tool like &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript&lt;/a&gt;, the cursor is everything. It’s the focal point of the viewer’s attention. The ability to track the cursor’s movements is what powers our most valuable features: automatic, intelligent zoom that follows where you click and the ability to customize its appearance to make it stand out. This is where native tools truly shine and where web-based recorders hit a wall. Let’s break down why.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The “Baked-In” Cursor Problem
&lt;/h3&gt;

&lt;p&gt;When you use the standard Screen Capture API in a browser like Chrome, you get a high-quality video stream of the screen. The problem is, the cursor is “&lt;strong&gt;baked&lt;/strong&gt;” directly into that video. Think of it like trying to remove the eggs from an already-baked cake; it’s impossible.&lt;/p&gt;

&lt;p&gt;This means that, unlike in native applications, we have no way to isolate the cursor to customize its appearance, change its size, or temporarily hide it to create smooth zoom animations. The only alternative would be to use complex AI to remove the cursor from every single frame, which is incredibly inefficient.&lt;/p&gt;

&lt;p&gt;Now, if you dig into the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API" rel="noopener noreferrer"&gt;technicals&lt;/a&gt;, you’ll find a setting in the Screen Capture API called “cursor,” which should theoretically allow us to control whether the cursor is captured. However, browser compatibility for this feature is inconsistent at best, making it an unreliable solution for a product that needs to work for everyone.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Cursor’s Invisible Walls
&lt;/h3&gt;

&lt;p&gt;This is the second, and perhaps bigger, challenge. In a browser, for critical security reasons, JavaScript can only track the position of your cursor within the confines of the webpage it’s running on. The moment you move your mouse to another browser tab, a different application window, or even your desktop, our web app loses all context. It has no idea where your cursor is.&lt;/p&gt;

&lt;p&gt;This single limitation is the primary roadblock to implementing true, action-following zoom for the entire screen on the web. It’s also why many web-based screen recorders rely on browser extensions. An extension grants the application deeper access to the browser, allowing it to “see” the cursor’s position across any tab.&lt;/p&gt;

&lt;p&gt;But even extensions have their limits. They still can’t track the cursor’s position once you leave the browser and interact with another application or your desktop. This is a fundamental boundary that native software doesn’t have, giving desktop apps a significant advantage in creating recordings that seamlessly follow your focus across your entire workflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Road Ahead: Innovating Within the Browser’s Limits
&lt;/h4&gt;

&lt;p&gt;If we could solve these two fundamental cursor challenges on the web, a new generation of screen recorders could be built that could potentially surpass the capabilities of even the best native apps. Until then, we are limited to minimal cursor customization and zoom automation that works best within a single browser tab.&lt;/p&gt;

&lt;p&gt;At ScreenScript.app, we are committed to pushing the boundaries of what’s possible in the browser. We are constantly exploring new web technologies and creative workarounds to overcome these hurdles. Our goal is to deliver the most powerful, intuitive, and accessible screen recording experience on the web. The challenges are significant, but so is the potential of the open web.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>browser</category>
      <category>javascript</category>
      <category>development</category>
    </item>
    <item>
      <title>How to Create Product Demos ? (Even Without a Video Team)</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Wed, 29 Oct 2025 18:37:52 +0000</pubDate>
      <link>https://dev.to/sachindas246/how-to-create-product-demos-even-without-a-video-team-4b9n</link>
      <guid>https://dev.to/sachindas246/how-to-create-product-demos-even-without-a-video-team-4b9n</guid>
      <description>&lt;p&gt;After months of building your product, you’re finally ready to show it to the world. But there’s one big question: &lt;strong&gt;how do you present it to your users?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, you guessed it. Video is the best way to engage your audience.&lt;/p&gt;

&lt;p&gt;Studies show that the average viewer watches only a few seconds of a product demo before skipping. So, the challenge is clear: how do you create a product demo video that actually holds attention?&lt;/p&gt;

&lt;p&gt;Let’s walk through how you can create product demo videos that look professional and convert viewers into customers.&lt;/p&gt;

&lt;p&gt;Why Product Demo Videos Matter&lt;/p&gt;

&lt;p&gt;A good demo helps your users understand exactly what your product does without reading long descriptions or guides. Whether you’re launching a SaaS, mobile app, or any digital product, showing it in action is the best way to build trust and clarity.&lt;/p&gt;

&lt;p&gt;But you don't need an expensive setup or professional video editor like &lt;a href="https://www.adobe.com/in/products/aftereffects.html" rel="noopener noreferrer"&gt;Adobe After Effects&lt;/a&gt; or &lt;a href="https://www.blackmagicdesign.com/in/products/davinciresolve" rel="noopener noreferrer"&gt;DaVinci Resolve&lt;/a&gt;. There are many simple tools, even &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;websites&lt;/a&gt;, that can help you create such demos at a fraction of the cost without any learning curve. For this we will be using &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;Screen Script&lt;/a&gt;, but feel free to experiment with others.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript.app&lt;/a&gt; helps us to create product demos quickly without needing any additional tools; just visit &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript.app&lt;/a&gt;. Also it has some great tools to improve presentation like background, effects, etc.&lt;/p&gt;

&lt;p&gt;Follow the steps to create a great demo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Visit &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript.app&lt;/a&gt; and sign up.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzz9abne68dsd4ecctqgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzz9abne68dsd4ecctqgq.png" alt="a screenshot of homepage of screenscript" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to the &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;Launcher&lt;/a&gt; and create a new project.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi71wp0uuk6pwps0m2en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi71wp0uuk6pwps0m2en.png" alt="screenshot of screenscript launcher" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Record to open the built-in online video recorder.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk3v86otcw6d2ds7nzhu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk3v86otcw6d2ds7nzhu.png" alt="screenshot of screenscript recorder tab" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure you have already opened your product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose what to record: your entire screen, an app window, or a browser tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once ready, click Start Recording and walk through your product’s main features.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it; you’ve captured your demo. Now let’s make it shine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Here is a simple structure to follow if you're starting out
&lt;/h3&gt;

&lt;p&gt;Want your video to convert? Structure it right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Start with the Problem.&lt;/strong&gt;&lt;br&gt;
Open with a simple, relatable line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I built this tool to help you automate your Instagram posts.”“This app helps you launch a website in 5 minutes.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Make it short, relatable, and clear about the intent behind your product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Share a Quick Backstory&lt;/strong&gt;&lt;br&gt;
In one sentence, explain why you built it; people love a personal reason or inspiration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Showcase the Core Functionality&lt;/strong&gt;&lt;br&gt;
Don’t show everything. Focus on your product’s most important and differentiating features. Keep it crisp so users stay engaged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Explain the Benefit&lt;/strong&gt;&lt;br&gt;
End with how your tool helps: save time, make money, or simplify work. That’s what viewers care about most.&lt;/p&gt;

&lt;p&gt;👉 Ideal length: 1–2 minutes (never more than 3).&lt;/p&gt;

&lt;h2&gt;
  
  
  Editing and Enhancing Your Demo Video
&lt;/h2&gt;

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

&lt;p&gt;Once you stop recording, you’ll be redirected to ScreenScript’s editor. Here’s what to do next:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Trim the video: Select start and end points to remove unnecessary parts.&lt;/li&gt;
&lt;li&gt;Adjust aspect ratio &amp;amp; viewport quality: Make your video look clean and sharp.&lt;/li&gt;
&lt;li&gt;Add background layers: A subtle wallpaper enhances visual appeal.&lt;/li&gt;
&lt;li&gt;Use zoom effects: Smooth zooms highlight key moments and make your demo feel professional.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once you are done with editing, click on the export button. Then choose your preferred resolution and export your final demo.&lt;/p&gt;

&lt;p&gt;All this happens directly in your browser: no downloads or external tools required. It’s a true online video recorder and editor for product demos.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Wrapping Up&lt;br&gt;
That’s it! You’ve just created a stunning product demo video maker, all without any technical skills. Most of the time, look for products that clearly focus on specific niches like these, as they reduce the learning curve and mostly will be cheaper.&lt;/p&gt;

&lt;p&gt;For most of the use cases, I’d recommend using &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;ScreenScript&lt;/a&gt;, but feel free to check out others too.&lt;/p&gt;

&lt;p&gt;Product I used 👉: &lt;a href="https://screenscript.app/" rel="noopener noreferrer"&gt;https://screenscript.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productdemo</category>
      <category>screenrecording</category>
      <category>buildinpublic</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Yet Another Product Hunt Alternative?</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Fri, 11 Apr 2025 05:01:49 +0000</pubDate>
      <link>https://dev.to/sachindas246/yet-another-product-hunt-alternative-1fa8</link>
      <guid>https://dev.to/sachindas246/yet-another-product-hunt-alternative-1fa8</guid>
      <description>&lt;h2&gt;
  
  
  Not Just Another Clone: What is Foundout.io?
&lt;/h2&gt;

&lt;p&gt;I'm currently preparing to launch a new product called &lt;a href="https://foundout.io/" rel="noopener noreferrer"&gt;Foundout.io&lt;/a&gt; - a product discovery platform designed for the modern age of software. As we gear up for a soft launch, one recurring question I keep hearing is: "So… it's just another Product Hunt clone, right?"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Well, not exactly. That question is actually the reason I'm writing this blog.&lt;/em&gt;  &lt;/p&gt;

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

&lt;p&gt;Yes, &lt;a href="https://foundout.io/" rel="noopener noreferrer"&gt;Foundout.io&lt;/a&gt; lets people discover new software products. But comparing it to Product Hunt just because it lists products is like calling Reddit a Twitter clone because both involve posting text. The core philosophy, approach, and value proposition are fundamentally different. Let's dive deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Look at Product Hunt
&lt;/h2&gt;

&lt;p&gt;Product Hunt is a well-known platform that helps makers launch their products to a global audience. The idea is simple: launch your product, get upvotes, and hope to hit the leaderboard for the day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Problem Does Product Hunt Solve?
&lt;/h2&gt;

&lt;p&gt;It gives creators visibility. In a digital world, especially for indie hackers and startups, Product Hunt offers a platform to break through the noise - for a short while.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is Product Hunt's Ideal Customer Profile (ICP)?
&lt;/h2&gt;

&lt;p&gt;Mostly tech enthusiasts, startup founders, indie makers, and early adopters. If your product targets these groups, Product Hunt can work wonders - but if not, things get tricky.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Happening Now? Current Trends
&lt;/h2&gt;

&lt;p&gt;On platforms like Reddit, users are increasingly voicing their frustrations with Product Hunt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overcrowded: It's flooded with AI tools and MVPs spun up in hours&lt;/li&gt;
&lt;li&gt;Lack of long-term discovery: It's great for launch day but poor for sustained visibility&lt;/li&gt;
&lt;li&gt;Repetition: Many launches feel similar or uninspired&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the same time, we're seeing an explosion of new product directories. Some are thriving, proving there's a real demand for alternatives. And as AI platforms like Replit and Lovable.dev lower the barrier to entry, the number of products keeps rising - but not necessarily the quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Foundout.io: Built for Discovery, Not Just Launch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://foundout.io/" rel="noopener noreferrer"&gt;Foundout&lt;/a&gt; is designed to help users discover the best products - not just witness their launches. In today's landscape where AI tools enable anyone to create a product in hours, the real challenge isn't building - it's finding. Foundout tackles this head-on by building a system where communities - not algorithms - drive visibility.&lt;/p&gt;

&lt;p&gt;Each user on Foundout can create or join topic-specific communities that act like mini Product Hunts. These communities are self-moderated and thrive based on engagement and relevance. If one community loses quality or direction, users can simply migrate to better ones. This natural curation system helps ensure only high-quality, well-managed spaces thrive.&lt;/p&gt;

&lt;p&gt;We also shift the focus from launch-day hype to long-term relevance. Founders don't need to climb to the top of a leaderboard on one day to be discovered. Instead, they can become visible to users who are actually looking for their kind of product, within a relevant niche.&lt;/p&gt;

&lt;p&gt;Think of Foundout as Reddit meets Product Hunt, but with a smart AI-assisted search layer that makes it easier to find gems hidden in the crowd. It's built to adapt to the future of product discovery - where quality, community, and relevance matter more than just a launch-day spike.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://foundout.io/" rel="noopener noreferrer"&gt;Foundout.io&lt;/a&gt; is not here to replace Product Hunt - we're building something different. It's not a launchpad. It's a discovery engine, powered by niche communities and real users.&lt;/p&gt;

&lt;p&gt;In a world overwhelmed by software noise, we believe the future of product discovery lies in decentralized curation, community-led organization, and authentic engagement. If that resonates with you, we invite you to join us at &lt;a href="https://foundout.io/" rel="noopener noreferrer"&gt;Foundout.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let's build a better way to find great products - together.&lt;/p&gt;

</description>
      <category>product</category>
      <category>showdev</category>
      <category>buildinpublic</category>
      <category>programming</category>
    </item>
    <item>
      <title>Django Build Automation</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Wed, 29 Nov 2023 17:14:40 +0000</pubDate>
      <link>https://dev.to/sachindas246/django-build-automation-3jbd</link>
      <guid>https://dev.to/sachindas246/django-build-automation-3jbd</guid>
      <description>&lt;p&gt;Hello! If you are a person like try to automate django build for production, here is a small script for you. Building Django for production is not a tedious task compared to other frameworks but, there are many elements that can go wrong because we need to configure each of them manually , which can be removed by automating the process. Though some other approaches like using environment variables , docker secrets , or even splitting settings.py into production.py and development.py exist , i felt this approach suits my current project and hope some other person would find this helpful.&lt;/p&gt;

&lt;p&gt;This is my current Folder structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project_name
├── docs
├── .git
├── .gitignore
└── source
    ├── django
        ├── conf
        │   ├── asgi.py
        │   ├── __init__.py
        │   ├── settings.py
        │   ├── urls.py
        │   └── wsgi.py
        ├── manage.py
        └── requirements.txt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1 . Create a file named build.py inside project_name (along with source dir, .git and docs ) and add the following content&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;shutil&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isabs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;source_dir&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isabs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;build_dir&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.buildignore&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prebuild_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pre_build&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_ignore_patterns&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_patterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_file&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;buildignore_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_patterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;buildignore_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;splitlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;      

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_patterns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;copy_to_build_dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copytree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;source_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ignore&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ignore_patterns&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ignore_patterns&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;replace_prebuild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copytree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prebuild_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dirs_exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_ignore_patterns&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy_to_build_dir&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace_prebuild&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;./source&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;./build&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# change the name of dir if needed
&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can change the name of the folders as you need in this file.&lt;/p&gt;

&lt;p&gt;2 . Create a file name .buildignore. This will act similar to .gitignore , ie you can can mention here the files and dirs you dont need in production. For now you can add the following content and edit as you need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.log
*.pot
*.pyc
__pycache__/
.env
db.sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 . Create a folder named pre_build and inside this create the files that you need to replace in production. Note you need to follow the same folder structure for the file you need to replace. For instance if you need to replace setting.py for production you should create settings.py in the following path: project_name/pre_build/django/conf/settings.py . Also you can add additional files that will be copied to the respective path in the build dir. In short, the script will copy all the contents from pre_build and replace any content that already exist from the source. You can utilise this to include other files like docker-compose,.env files or even nginx configs etc . Also you can configure your static files (change STATIC_ROOT to a dir inside pre_build).&lt;/p&gt;

&lt;p&gt;Now my dir would look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project_name
├── docs
├── .git
├── .gitignore
├── .buildignore
├── build.py
├── pre_build
│   └── django
│       └── conf
│           └── settings.py
└── source
    └── django
        ├── conf
        │   ├── asgi.py
        │   ├── __init__.py
        │   ├── settings.py
        │   ├── urls.py
        │   └── wsgi.py
        ├── manage.py
        └── requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4 . and when you want to build the production run the following&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



</description>
      <category>django</category>
      <category>python</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Django COPY PASTE !</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Fri, 24 Jun 2022 08:04:13 +0000</pubDate>
      <link>https://dev.to/sachindas246/django-copy-paste--1np0</link>
      <guid>https://dev.to/sachindas246/django-copy-paste--1np0</guid>
      <description>&lt;p&gt;If you are Beginner or an intermediate Django developer u know that starting a new project in Django project is easy, nothing more than just couple of commands right? But at least for me I have to Duck it or check the previous project every time to get it right. For instance I always get trouble if it is createapp or createproject or startproject to start a Django project.  &lt;/p&gt;

&lt;p&gt;So here are some  of the commands and snippets which you might find help full!. Note that these are not the steps to create a project nor are in particular order. Also you might not need all these steps in your project , so use only what you need.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Installing Virtual Env wrapper:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# For Linux and OS X :
pip install virtualenvwrapper

# For windows:
pip install virtualenvwrapper-win
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Creating, Enabling and Disabling Virtual Environment using wrapper :
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# To create virtual env
mkvirtualenv [virtual env name]
# To enable virtual env
workon [virtual env name]
# To disable virtual env
deactivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Installing Django
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install Django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Creating a Django Project:
&lt;/h4&gt;

&lt;p&gt;Some may prefer giving project name as "config" at first so they get a project with settings.py and other core files inside "config app and afterwards renaming the project root directory to the project name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject [project name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Running in development server
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# running on 127.0.0.1:8000
python manage.py runserver
# running on a different port (eg. 127.0.0.1:7777)
python manage.py runserver 7777
# running on a different ip (eg. 192.168.1.5:7777)
python manage.py runserver 192.168.1.5:7777

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. Access Database shell
&lt;/h4&gt;



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

&lt;/div&gt;



&lt;h4&gt;
  
  
  7. Access Django shell
&lt;/h4&gt;



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

&lt;/div&gt;



&lt;h4&gt;
  
  
  8. Make Database Migration and Migrate
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Make migration
python manage.py makemigrations
# Migrate
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  9. Adding new App to the project:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Run the following command to create an app&lt;/li&gt;
&lt;li&gt;Add your app name to the INSTALLED_APPS variable in settings.py
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# create new app
python manage.py startapp app_name
# add app to settings.py
INSTALLED_APPS = [
    'django...',
     .
     .
    'app_name'
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  10. A simple view that return a web page
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;define a function inside your app_name/view.py
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.shortcuts import render

def home(request):    
    return render(request,'home.html') # make sure you have home.html configured properly

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  11. Configure urls for each app
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You can have separate urls.py file in each app to efficiently route your project.For which:
create a file named urls.py inside your corresponding app and add it to the main urls.py (that resides along with your settings.py file )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;inside newly created urls.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from os import name
from django.urls import path
from . import views
urlpatterns = [
    path('__page_location__', views.function_name,name="name for the page"),
# here it would be path('home', views.home,name="home"),"
]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add this url.py to the main urls.py (that resides along with settings.py)&lt;br&gt;
main "urls.py"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.contrib import admin
from django.urls import path
from django.urls.conf import include

urlpatterns = [
  #  path('admin/', admin.site.urls),
  path('app_name', include('app_name.urls')),
]
# if you done properly you should see home page at http://127.0.0.1:8000/app_name/home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  12. Adding Templates
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create a Dir called templates(or anything you wish) inside project root Dir&lt;/li&gt;
&lt;li&gt;Update your TEMPLATES variable inside settings.py
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# add your templates dir to DIRS in TEMPLATES variable.
'DIRS': [os.path.join(BASE_DIR,'templates')],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  13. Configuring Static Dir
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create a dir called "static" (or anything you wish) in the project root dir .&lt;/li&gt;
&lt;li&gt;Update setting.py by adding static dir to it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# If you need a different name or location update it accordingly. you could add multiple dirs using ',' commas 
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  14. Loading static files inside html
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;whenever you need to static files in your template , you need to call &lt;code&gt;{% load static %}&lt;/code&gt; before hand ( note you need to call in every html(template) file that require static content.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% load static %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After that , you could load static file like ( here logo.png is the file located in the static dir. )
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src="{% static 'logo.png' %}" alt="logo"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  15. Similarly you could load your css file.
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;create  style/style.css inside static dir&lt;/li&gt;
&lt;li&gt;add this to your corresponding html template
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% load static %}
&amp;lt;link rel="stylesheet" href="{% static 'style/style.css' %}"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  16. Configuring Media files
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;As you might know Django don't like to serving its media file , so this config also allows only media file access in development&lt;/li&gt;
&lt;li&gt;Create a dir called media in the project root dir&lt;/li&gt;
&lt;li&gt;Add config to settings.py and urls.py (that resides along with your settings.py file )
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# in settings.py add the following
MEDIA_ROOT =os.path.join(BASE_DIR,'media/')
MEDIA_URL = '/media/'

# in urls.py 
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  17. A Simple Template Approach
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;A simple approach for the Django app is to create a base html template that includes the basic tags and extend it to the other pages. 

&lt;ul&gt;
&lt;li&gt;here is a sample basic template
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;PROJECT_NAME&amp;lt;/title&amp;gt;
    {% load static %}
    &amp;lt;link rel="stylesheet" href="{% static 'style/style.css' %}"&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    {% block content %}

    {% endblock %}    
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And extent in another template for example home.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}

&amp;lt;h1&amp;gt; this is home page &amp;lt;/h1&amp;gt;

{% endblock %}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  18. Including templates
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;If wish, you could include other templates to your main template. For instance you could create a template named nav_bar.html and include in every other templates ( here I have included it in home.html ).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;nav_bar.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;p&amp;gt; this is a nav bar. &amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;home.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
{% include 'navbar.html'%}

&amp;lt;h1&amp;gt; this is home page &amp;lt;/h1&amp;gt;

{% endblock %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  19. Simple regex verification
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Warning: these are very basic regex. Do your own research before using regex.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import re

email_regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9&amp;amp;]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
zip_regex = re.compile(r'^[A-Za-z0-9\.\-\s]{3,10}$')
password_regex = re.compile(r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&amp;amp;*-])[a-zA-Z0-9!@#$&amp;amp;*]{8,15}$')

# To verify
email = "someone@somewhere.com"
if not re.fullmatch(email_regex,email):
        return "Invalid email"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  20. CSRF for Api
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;By default Django checks for csrf verification, so make sure you add &lt;code&gt;{% csrf_token %}&lt;/code&gt; in your forms&lt;/li&gt;
&lt;li&gt;And if you are manually send request using js you need to include the csrf token in your request.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# for forms:
&amp;lt;form ... &amp;gt;
{% csrf_token %}             
&amp;lt;/form&amp;gt;

# For manual request 

# this function return csrf token from cookie 
function getCookie(name) {
        let cookieValue = null;
        if (document.cookie &amp;amp;&amp;amp; document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i &amp;lt; cookies.length; i++) {
                const cookie = cookies[i].trim();
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }


# inside your request options add csrf token in header
var requestOptions = {
            method: 'POST',
            headers: {'X-CSRFToken': getCookie('csrftoken')},
            body: formdata,
            mode: 'same-origin',
            redirect: 'follow'
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>django</category>
      <category>webdev</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>First Vlog on Logic Code</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Sun, 02 Jan 2022 14:32:04 +0000</pubDate>
      <link>https://dev.to/sachindas246/first-vlog-on-logic-code-133h</link>
      <guid>https://dev.to/sachindas246/first-vlog-on-logic-code-133h</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HJyFJ9Cb7p0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It's my first video explaining the working with logic code. I feel like its too long for some but if you only want to see usage of the program skip to the last part. &lt;br&gt;
If you don't know what logic code is Read my previous post:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/sachindas246" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F590131%2F58f96097-5af4-4547-9cb9-0fa7ddadfdba.webp" alt="sachindas246"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/sachindas246/create-a-new-language-for-logic-circuits-b21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Creating a new language for logic circuits&lt;/h2&gt;
      &lt;h3&gt;SachinDas246 ・ Nov 11 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#verilog&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>programming</category>
      <category>node</category>
      <category>hdl</category>
    </item>
    <item>
      <title>Creating a new language for logic circuits</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Thu, 11 Nov 2021 13:45:39 +0000</pubDate>
      <link>https://dev.to/sachindas246/create-a-new-language-for-logic-circuits-b21</link>
      <guid>https://dev.to/sachindas246/create-a-new-language-for-logic-circuits-b21</guid>
      <description>&lt;p&gt;Building electronic circuits can be difficult especially the bigger ones,as there is no printf to check if wire is properly connected. Being an electrical engineering ,I have tried to build tools that would help understand and design electronics faster and better. &lt;a href="https://play.google.com/store/apps/details?id=com.Codnet.ChipdotIO" rel="noopener noreferrer"&gt;Chip.io&lt;/a&gt; &lt;br&gt;
 is one such android app that would give a virtual experience of using a 8085 trainer kit.&lt;/p&gt;

&lt;p&gt;But in this project I want something more complex😈, &lt;br&gt;
something like a code that would define a logic circuit. I know what you are going say now, there is verilog for that ?  Ya ,there is .. but in my opinion it could be made more simpler and easy to use. More over my main focus is not to create a language to program a FPGA, instead to a language to define a logic circuit for simulation, so I believe there could some compromises which I could utilise to make it more understandable.&lt;/p&gt;

&lt;p&gt;However, I don't discourage the possibility of using it to program integrated circuits🤔.&lt;/p&gt;
&lt;h3&gt;
  
  
  How is it implemented?
&lt;/h3&gt;

&lt;p&gt;It's basically a nodejs project which utilizes nearley and Moo to parse the code which is then converted to a particular javascript format that simulates logic circuit.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where it started?
&lt;/h3&gt;

&lt;p&gt;All of this began while I was trying to design a circuit in &lt;a href="http://www.cburch.com/logisim/" rel="noopener noreferrer"&gt;logisim&lt;/a&gt; and was not able to do in the way I wanted it to be. Also at that time i had already started messing out with lexer and parsers, which finally led to this project. &lt;/p&gt;
&lt;h3&gt;
  
  
  Milestones 🗿 and targets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build an interpreter that can run the code&lt;/li&gt;
&lt;li&gt;Multiple libraries that implements complex circuits.&lt;/li&gt;
&lt;li&gt;A graphic interface which can generate the code by drag n drop ( Similar to logisim )&lt;/li&gt;
&lt;li&gt;Ability to program integrated circuits ( sometimes 😜)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Sample program
&lt;/h1&gt;

&lt;p&gt;Let me show you a sample of the program&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="nc"&gt;HalfAdder&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;XOR&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AND&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;HalfAdder&lt;/span&gt; &lt;span class="nx"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;Output&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;Output&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;wire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;wire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;wire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;wire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this would produce a circuit like &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqtszovviio4kvrayo54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqtszovviio4kvrayo54.png" alt="logic circuit" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Explanation
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I don't want to go deep into the explanation but in simple terms we created a blue print for HalfAdder ,whose inputs are a and b, outputs are s and c. After which we instantiated a HalfAdder ( as Adder) which is connected to input ports A and B , Output Ports S and C&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Any suggestions and feedbacks is greatly appreciated.&lt;br&gt;
Thank you ❤️ for reading.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>verilog</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Can anybody recommend a good Electronics project?</title>
      <dc:creator>SachinDas246</dc:creator>
      <pubDate>Sun, 11 Apr 2021 07:16:34 +0000</pubDate>
      <link>https://dev.to/sachindas246/can-anybody-recommend-a-good-electronics-project-3e3k</link>
      <guid>https://dev.to/sachindas246/can-anybody-recommend-a-good-electronics-project-3e3k</guid>
      <description>&lt;p&gt;I don't know if this kind of questions can be asked here.I want a good Electronics or electrical project.I have searched a lot most of them are mostly some Arduino and sensors , I want something better than that.It would be great help if you could recommend me some.&lt;/p&gt;

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