<?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: Mayank Arya</title>
    <description>The latest articles on DEV Community by Mayank Arya (@mayankarya).</description>
    <link>https://dev.to/mayankarya</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%2F172136%2F69505a3a-5d03-477a-b7cf-ad72d65740eb.jpeg</url>
      <title>DEV Community: Mayank Arya</title>
      <link>https://dev.to/mayankarya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mayankarya"/>
    <language>en</language>
    <item>
      <title>Stop Being the "Middleware": How I Automated My Entire Git Workflow with AI (not skills)</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Sat, 07 Feb 2026 11:03:56 +0000</pubDate>
      <link>https://dev.to/mayankarya/stop-being-the-middleware-how-i-automated-my-entire-git-workflow-with-ai-not-skills-1odp</link>
      <guid>https://dev.to/mayankarya/stop-being-the-middleware-how-i-automated-my-entire-git-workflow-with-ai-not-skills-1odp</guid>
      <description>&lt;p&gt;We’ve all had this Friday afternoon.&lt;/p&gt;

&lt;p&gt;You’ve been deep in "flow state" for four hours. You’ve fixed a nagging bug in the auth middleware, refactored a messy utility function, and added a new endpoint for the user profile. Your terminal shows 15 files changed across four different concerns.&lt;/p&gt;

&lt;p&gt;Now comes the part every developer hates: &lt;strong&gt;The Administrative Overhead.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have to manually stage the files, write a commit, stage the refactor, link the Linear ticket, and eventually write a Pull Request description that doesn’t just say "see commits". In that moment, you aren't an engineer. You are &lt;strong&gt;middleware&lt;/strong&gt;—the manual glue between your IDE, your Git history, and your issue tracker.&lt;/p&gt;

&lt;p&gt;I got tired of being the glue, so I built &lt;a href="https://www.npmjs.com/package/git-ship" rel="noopener noreferrer"&gt;git-ship&lt;/a&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%2Fjv5w6kem7je1fv2rwvl3.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%2Fjv5w6kem7je1fv2rwvl3.png" alt="Screenshot of the git-ship flow in progress" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Invisible Cost of "Commit Hygiene Debt"
&lt;/h2&gt;

&lt;p&gt;We’re often told that "clean commits" are an aesthetic choice. They aren't. They are a functional requirement for high-velocity teams. When we default to &lt;code&gt;git commit -am "update stuff"&lt;/code&gt;, we accrue "Commit Hygiene Debt":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer Fatigue:&lt;/strong&gt; A single PR with one massive commit is impossible to digest. Reviewers end up reviewing line-by-line instead of logic-by-logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Revert Risk:&lt;/strong&gt; If a feature breaks production, but the commit includes an unrelated refactor, you can't safely undo it. You're forced into high-stress "surgical" hotfixing while the site is down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken Debugging:&lt;/strong&gt; Powerful tools like &lt;code&gt;git bisect&lt;/code&gt; only work if commits represent atomic, functional states.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution: A Context-Aware Pipeline
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git-ship&lt;/code&gt; is an AI-powered CLI that replaces twenty minutes of manual labor with a single command: &lt;code&gt;gs&lt;/code&gt;. It orchestrates an 8-step pipeline that connects the &lt;em&gt;Why&lt;/em&gt; (your issue tracker) with the &lt;em&gt;What&lt;/em&gt; (your code).&lt;/p&gt;

&lt;h3&gt;
  
  
  How AI Grouping Actually Works
&lt;/h3&gt;

&lt;p&gt;The hardest part of this was the grouping logic. How do you decide which files belong together? I developed a dual-heuristic model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Revert Test (Safety Floor):&lt;/strong&gt; "If this commit were reverted, would the codebase still compile?". Files with hard dependencies (like a database migration and the code using it) must stay together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Review Test (Quality Goal):&lt;/strong&gt; "Can a reviewer understand this commit in isolation?". We strive for focus—separating tests from implementation and config from features.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Elephant in the Room: Why not just use a Claude Skill?
&lt;/h2&gt;

&lt;p&gt;An honest question I get often is: &lt;em&gt;If I'm already using Claude Code, why do I need a separate package?&lt;/em&gt; If you are living inside a chat-based assistant, a &lt;code&gt;/commit&lt;/code&gt; skill might actually be better for your personal flow. It already has the context of your entire conversation. But for professional engineering teams, a dedicated CLI offers advantages that an integrated assistant cannot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;git-ship CLI&lt;/th&gt;
&lt;th&gt;AI Assistant Skill (e.g., Claude Code)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reads diffs + fetches tracker data&lt;/td&gt;
&lt;td&gt;Knows the "Why" from your active chat history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Works for everyone on the team&lt;/td&gt;
&lt;td&gt;Only works for those with a specific subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Portability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can run in any terminal or CI/CD pipeline&lt;/td&gt;
&lt;td&gt;Locked to the specific AI environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agnosticism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Choose OpenAI, Anthropic, or Gemini&lt;/td&gt;
&lt;td&gt;Locked to one provider's ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Degrades gracefully (e.g., works offline)&lt;/td&gt;
&lt;td&gt;Requires active API/Socket connection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Honest Take:&lt;/strong&gt; If you're in the middle of a deep conversation with Claude, use the skill. But if you want a &lt;strong&gt;repeatable, team-wide standard&lt;/strong&gt; that works across any editor and integrates with your CI/CD, a specialized CLI is the way to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let the AI Handle the Paperwork
&lt;/h2&gt;

&lt;p&gt;The goal of &lt;code&gt;git-ship&lt;/code&gt; isn't to replace your judgment; it's to automate the mechanical work so you can keep the judgment calls. By making the "right way" to ship also the "fastest way" to ship, we eliminate the trade-off between speed and quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it today:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm install -g git-ship&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/thisismayank/git-ship" rel="noopener noreferrer"&gt;github.com/thisismayank/git-ship&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I would love to hear your thoughts on what your commit pipeline looks like today&lt;/em&gt; 👇&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tooling</category>
      <category>git</category>
      <category>npm</category>
    </item>
    <item>
      <title>Netlify Dynamic Site Challenge : Using the power of CDNs and Transformations for a visual feast</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Sun, 12 May 2024 22:58:51 +0000</pubDate>
      <link>https://dev.to/mayankarya/netlify-dynamic-site-challenge-using-the-power-of-cdns-and-transformations-for-a-visual-feast-4kce</link>
      <guid>https://dev.to/mayankarya/netlify-dynamic-site-challenge-using-the-power-of-cdns-and-transformations-for-a-visual-feast-4kce</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/netlify"&gt;Netlify Dynamic Site Challenge&lt;/a&gt;: Visual Feast.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built a webpage to display the power of CDNs and image transformations. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Libraries used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have used ReactJS to build this webapp&lt;/li&gt;
&lt;li&gt;I have also used Material UI to make the webpage responsive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Assets used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For the purpose of this project, I used a set of preloaded images. &lt;/li&gt;
&lt;li&gt;I've used normal &lt;code&gt;&amp;lt;img src={url} alt={text}/&amp;gt;&lt;/code&gt; tags, therefore, the code will run exactly the same even when the images are coming in the form of a url from a database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Netlify CDN and transformations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As the code has been deployed on Netlify, the images are being fetched from the Netlify CDNs&lt;/li&gt;
&lt;li&gt;I utilised the power of image transformations that come out of the box with Netlfiy CDN&lt;/li&gt;
&lt;li&gt;It can be done with the help of query parameters like &lt;em&gt;w for width&lt;/em&gt;, &lt;em&gt;h for height&lt;/em&gt;, &lt;em&gt;fit for fit&lt;/em&gt;, &lt;em&gt;fm for format&lt;/em&gt; and &lt;em&gt;q for quality&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;These transformations can allow us to control the amount of data being downloaded by the browser to display these assets, this can be especially helpful when we upload high quality images but want to show the same image in a small thumbnail.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;UI and UX elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On top is the url, which reflects the image url with all the transformations that the user selected.&lt;/li&gt;
&lt;li&gt;The UI is basically divided into three parts&lt;/li&gt;
&lt;li&gt;Left side is the list of images that the user can select&lt;/li&gt;
&lt;li&gt;Middle part is the image being displayed based on the transformations - you will also find the caption below the image explaining the meaning of the fit you choose.&lt;/li&gt;
&lt;li&gt;Right side is the section from which the user can control transformations&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;On the right side you will also see the difference in the size of the image being downloaded by the user in real time with each user transformation.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;For example:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;A Quality 100 image will be bigger in terms of bytes than a Quality 1 image - this control is the biggest advantage of transformations!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mayank-cdn-test.netlify.app/" rel="noopener noreferrer"&gt;Link to the website&lt;/a&gt;&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%2Fhuh3gn6jsqgs23azhf2c.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%2Fhuh3gn6jsqgs23azhf2c.gif" alt=" " width="600" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform Primitives
&lt;/h2&gt;

&lt;p&gt;I've used an image processing and delivery service, specifically a CDN (Content Delivery Network), to manage and optimize images dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Dynamic Image URL Construction&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I used a buildImageUrl function that dynamically constructs URLs based on various parameters like width, height, format, quality, and fit. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;These query parameters are controlled by the user on the UI and they request specific transformations from the Netlify Image CDN, which processes and serves optimized versions of the images based on these parameters.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const buildImageUrl = () =&amp;gt; {
  const { url } = images[selectedImageIndex];
  return `${baseUrl}?url=${encodeURIComponent(url)}&amp;amp;w=${imageWidth}&amp;amp;h=${imageHeight}&amp;amp;fit=${fit}&amp;amp;fm=${format}&amp;amp;q=${quality}`;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Features Leveraged:&lt;/strong&gt;&lt;br&gt;
&lt;u&gt;&lt;em&gt;Width and Height&lt;/em&gt;&lt;/u&gt;: Dynamic resizing of images to fit within specified dimensions without downloading the full-size image, reducing bandwidth usage.&lt;br&gt;
&lt;u&gt;&lt;em&gt;Format&lt;/em&gt;&lt;/u&gt;: Automatic conversion into different formats (e.g., WebP, JPG) based on the user's capabilities and settings, enhancing compatibility and performance.&lt;br&gt;
&lt;u&gt;&lt;em&gt;Quality&lt;/em&gt;&lt;/u&gt;: Adjusting the compression level to balance between image quality and file size, crucial for performance optimization.&lt;br&gt;
&lt;u&gt;&lt;em&gt;Fit&lt;/em&gt;&lt;/u&gt;: Specifies how images should fit within specified dimensions, which is essential for maintaining the aspect ratio or covering a specific area.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Fetching and Displaying Optimized Images&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I used a function to fetch the image from the constructed URL and calculate its file size. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This demonstrates the image’s weight after being processed by the CDN, providing real-time feedback on optimization benefits.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const fetchImageSize = async () =&amp;gt; {
  const response = await fetch(buildImageUrl());
  const blob = await response.blob();
  setFileSize(blob.size / 1024); // Convert bytes to KB
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. React Hooks for real time updates&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;React's useEffect hook is used to automatically update the image whenever relevant parameters change. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This ensures that any adjustments made to the settings by the user are immediately reflected in the image served, showcasing the real-time capabilities of the CDN.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useEffect(() =&amp;gt; {
  fetchImageSize();
}, [imageWidth, imageHeight, fit, format, quality]);

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

&lt;/div&gt;



&lt;p&gt;I will be making another submission for this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Rapid increase in media consumption have made CDNs a necessity. Netlify's powerful transformation features and ease of integration provide a much welcomed addition to the arsenal of developers.&lt;br&gt;
I have tried to keep the UI/UX as interactive and user-centric as possible and also tried to educate the user with real time changes in sizes and definition of some terms on the UI.&lt;br&gt;
I hope you all enjoy using the project as much as I enjoyed working on it. &lt;/p&gt;

&lt;p&gt;Thank you!&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%2Ftshn574t4jnlnhon7xmn.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%2Ftshn574t4jnlnhon7xmn.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Git Supremacy</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Mon, 11 Nov 2019 12:55:46 +0000</pubDate>
      <link>https://dev.to/mayankarya/the-git-supremacy-2i4l</link>
      <guid>https://dev.to/mayankarya/the-git-supremacy-2i4l</guid>
      <description>&lt;p&gt;After addressing the elephant in the room (Git vs GitHub).&lt;br&gt;
Let's look at how to start working with both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;You are going to work on a repository that already exists.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FORK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Forking is copying the contents of the main repository and pasting it in a new repository on your &lt;em&gt;GitHub&lt;/em&gt; account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;So basically &lt;strong&gt;copying happens on the GitHub account (only)&lt;/strong&gt; and you communicate with this newly created repository on &lt;em&gt;your GitHub account&lt;/em&gt; from the locally running git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any change you do henceforth will update this new repository created on your GitHub account and the main repository (from which you forked) will remain unaffected.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLONE&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Cloning is copying the contents of the main repository on your local machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;So basically &lt;strong&gt;copying happens between GitHub and your local machine over the network(internet)&lt;/strong&gt; i.e. you communicate to the original remote branch from the git in your local machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any change you do henceforth will update the main repository from which you took a clone.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;blockquote&gt;
&lt;p&gt;Cloning via https vs ssh&lt;br&gt;
We'll cover this on another post, but in short&lt;/p&gt;

&lt;p&gt;Clone using https:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You can clone from any repository just by doing directly
&lt;code&gt;git clone &amp;lt;link of repository&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You will have to input your username and password every time you want to communicate with GitHub (remote).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Clone using ssh:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You will have to put your public ssh key in your git hub account and then clone by
&lt;code&gt;git clone &amp;lt;link of repository&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You don't have to input your username and password to communicate with remote (GitHub).&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Scenario 2:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;You are starting your own project, working on your local machine and want to create a GitHub repository of the same.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;:
&lt;code&gt;git init &amp;lt;name of folder&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Go to your desired folder and type this command&lt;/em&gt;&lt;br&gt;
What this will do is create a folder as specified and also create a &lt;strong&gt;&lt;em&gt;.git&lt;/em&gt;&lt;/strong&gt; sub-directory.&lt;br&gt;
Basically it &lt;em&gt;initializes your git repository locally&lt;/em&gt;.&lt;br&gt;
&lt;em&gt;&lt;em&gt;.git&lt;/em&gt; directory contains all the information i.e. history, remote address, etc. about your repository on your local machine&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;git clone &amp;lt; &amp;gt;&lt;/em&gt; &lt;strong&gt;=&lt;/strong&gt; &lt;em&gt;git init &amp;lt; &amp;gt;&lt;/em&gt; &lt;strong&gt;+&lt;/strong&gt; copy files from remote repository&lt;/p&gt;

&lt;p&gt;Now you work on your files and save them as you do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 2&lt;/strong&gt;:
&lt;code&gt;git add .&lt;/code&gt; or &lt;code&gt;git add &amp;lt;name of files&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What this command does is that it adds all your files to the staging area.&lt;br&gt;
&lt;strong&gt;work/.git/index&lt;/strong&gt;&lt;br&gt;
Basically from here you can preview your commit i.e. add all the files you've modified to the commit or segregate the work into more accurate commits by adding file wise.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is a staging area will be covered on another post but in short imagine it is an area where you can put only those files which you need in your commit out of all the files you've worked on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 3&lt;/strong&gt;:
&lt;code&gt;git commit -m &amp;lt;commit message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What this command does is adds all your staged files into your repository as a commit (which has a unique hash to access) with a specific message for better understanding of anyone who looks at it&lt;br&gt;
&lt;strong&gt;work/.git/objects&lt;/strong&gt;&lt;br&gt;
Basically here all your changes will be added to the local git repository along with all the other commits you've done before.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Again, we will go into detail in another post and will cover blobs and trees etc. this is a beginner level post.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 4&lt;/strong&gt;:
&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What this command does is push/copies your local repository onto the remote repository i.e. a network command.&lt;br&gt;
Therefore all your files will be uploaded and stored &lt;em&gt;to the remote server(GitHub, GitLabs, etc.)&lt;/em&gt; &lt;strong&gt;from your local machine&lt;/strong&gt; with the help of the version control tool called &lt;em&gt;Git&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Once you've pushed your changes and your friend or collaborator wants to update his/her local repository they can do one of the following:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;git fetch --all&lt;/code&gt;&lt;br&gt;
This command downloads all the data from &lt;em&gt;remote repository&lt;/em&gt; into your &lt;strong&gt;local repository&lt;/strong&gt; i.e. a network command &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;git pull origin &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;br&gt;
This command downloads all the data from &lt;em&gt;remote repository&lt;/em&gt; and tries to merge or overwrite the data in your &lt;strong&gt;working directory&lt;/strong&gt; i.e. a network command&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
Here is a pictoral summary of everything I've said above

&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%2Fj2txbwdmcbmi6olausxb.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%2Fj2txbwdmcbmi6olausxb.png" alt="git lifecycle" width="600" height="361"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Git Identity</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Tue, 05 Nov 2019 12:09:50 +0000</pubDate>
      <link>https://dev.to/mayankarya/the-git-identity-4kci</link>
      <guid>https://dev.to/mayankarya/the-git-identity-4kci</guid>
      <description>&lt;h2&gt;
  
  
  What is Git?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Git&lt;/em&gt; is a tool.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Definition: Git is a distributed version-control system for tracking changes in source code during software development.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Git" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Github&lt;/em&gt; is a platform.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Definition: GitHub is an American company that provides hosting for software development version control using.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/GitHub" rel="noopener noreferrer"&gt;WIkipedia&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;In my words(for my absolute beginner friends), Version Control process is the one which handles all the issues that can arise due to multiple people contributing on a single project.&lt;br&gt;
No! It won't solve your bugs and errors but it makes the process seamless.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me paint a more easier to understand picture,&lt;/p&gt;

&lt;p&gt;Imagine you and your friend get a college project.&lt;br&gt;
You come up with a bifurcation of tasks between you two and start coding. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now after weeks of hard work when you try to merge both the parts it throws an error, you solve one it throws another and another and so much to the point that.....(you know it!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Even if you solve the merging of both parts, now you need someone to validate your code before going forward. You'll zip the folder and try all the platforms to send it to you senior(mentor).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Even if you succeed in sending, now this mentor has too many suggestions and you will find yourself in a never ending sequence of calls and screenshots, etc. to show what where and how it's bad.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This is just two contributors and see the frustrating problems. The intensity of these issues increases exponentially with the number of contributors and these solutions ability to solve your problem decreases as well.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is where a version control system comes in to play.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You and your friend could have uploaded a main working copy in master branch.&lt;/li&gt;
&lt;li&gt;Taken out your own branches and experimented on it leaving the working product untouched.&lt;/li&gt;
&lt;li&gt;You could have periodically merged your bug free fully tested code in to the master branch and keep on adding new features in your own branch.
And also could have asked that sweet senior(mentor) of yours (who agreed to help you) to keep checking the merge request code that you created.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Yeah yeah I know those who knew this or could understand this wouldn't have clicked on this post.&lt;br&gt;
So to break it down for absolute beginners, friends read in any way you want, I promise the next 20 lines will give you an answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It is basically a tool or a software which allows you to do version control and code sharing by  providing all the beloved commands that you will see in upcoming posts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is the &lt;em&gt;local part&lt;/em&gt; of version control process i.e. allows you to contribute from and on your local machine and just like any other software, it is also &lt;strong&gt;installed locally on your computer&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Just like most of tools(softwares), it has a GUI as well as a CLI&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub however is a platform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is a cloud based platform on which &lt;em&gt;git&lt;/em&gt;(&lt;em&gt;tool&lt;/em&gt;) is hosted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is the &lt;em&gt;network or the remote part&lt;/em&gt; of version control process i.e. using git you can connect to this cloud and upload/download resource&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;this is why you can use the same &lt;strong&gt;git&lt;/strong&gt; commands everywhere(git is used) like GitHub, GitLabs, etc.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We will discuss about the commands in next post.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I filter my arrays.</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Tue, 05 Nov 2019 08:28:07 +0000</pubDate>
      <link>https://dev.to/mayankarya/how-to-filter-your-array-4n60</link>
      <guid>https://dev.to/mayankarya/how-to-filter-your-array-4n60</guid>
      <description>&lt;p&gt;Javascipt has a very active community and that provides developers with a plethora of options in when it comes to solving a simple problem. &lt;/p&gt;

&lt;p&gt;Although I myself love to use libraries like lodash or underscore when it comes to iterating on arrays or objects. I suppose for a beginner being able to read and understand MDN docs is really really important to get that strong foundation. &lt;/p&gt;

&lt;p&gt;MDN however has a tendency of being a tad bit technical, which may or may not intimidate beginner coders.&lt;/p&gt;

&lt;p&gt;Anyways, this article is here to simplify or simply put forward a few of the everyday use-cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filtering an array&lt;/strong&gt;&lt;br&gt;
So, keeping aside the libraries I'm going to show you a set of functions which you will help you filter an array in different ways and are supported natively by the language.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find a value:
Use

&lt;code&gt;array.find(callback)&lt;/code&gt;

: It will stop and return the value as soon as the condition is satisfied.&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;Filter on the basis of a condition
Use

&lt;code&gt;array.filter(callback)&lt;/code&gt;

: It will iterate through the whole array and return a new array with only those elements which satisfy the condition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;filter&lt;/strong&gt; can be used for &lt;strong&gt;find&lt;/strong&gt; use-case but filter will iterate the whole array/list even if the first element was the only one that satisfied our condition&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find if atleast one element in list satisfies our condition
Use

&lt;code&gt;array.some(callback)&lt;/code&gt;

: It will stop and return a boolean value based on if the condition is satisfied (does not iterate the whole list).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;some&lt;/strong&gt; has its own use case because find will return you the value but if you just want to check, a boolean value is well better just to maintain a standard practice&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find if all the elements in list satisfy our condition
Use

&lt;code&gt;array.every(callback)&lt;/code&gt;

: It will iterate through the complete array and return a boolean according to the condition i.e. &lt;strong&gt;true&lt;/strong&gt; &lt;em&gt;if all elements satisfy our condition&lt;/em&gt; &lt;strong&gt;false&lt;/strong&gt; &lt;em&gt;if any one of the elements do not satisfy our condition&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Examples of all the above written functions
&lt;/h3&gt;


&lt;div class="ltag__replit"&gt;
  &lt;iframe height="550px" src="https://repl.it/@mak119/arrayFunctionsForFiltering?lite=true"&gt;&lt;/iframe&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>for-in and for-of with arrays.</title>
      <dc:creator>Mayank Arya</dc:creator>
      <pubDate>Tue, 05 Nov 2019 06:48:44 +0000</pubDate>
      <link>https://dev.to/mayankarya/for-in-and-for-of-with-arrays-5470</link>
      <guid>https://dev.to/mayankarya/for-in-and-for-of-with-arrays-5470</guid>
      <description>&lt;p&gt;So in the beginning of my career I was working for a project where I had to deal with a lot of arrays and objects. Also there was a requirement of an asynchronous task within the loop!&lt;br&gt;
On taking up the task I was like, "Eh, I'm going to complete this thing in no time and then watch an episode ;-)".&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;for () { await *db_call* }&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;But then as soon as I finished up writing my code, I tested it (just the response as I was too confident of the logic and implementation) and was surprised to see "undefined undefined undefined.....".&lt;/p&gt;

&lt;p&gt;Now "How to do an asynchronous task in a loop?" is a separate post. Here I will talk about how I approached looping.&lt;/p&gt;

&lt;p&gt;JavaScript has way too many methods to loop and doing asynchronous tasks within each one has a different level of difficulty but since this post is for beginners, the most basic loop is the for loop.&lt;br&gt;
Yup, talking about the omnipresent for(var i = 0; i&amp;lt;limit; i++){}.&lt;br&gt;
If we are talking about ES6, we also get very basic and easy to use (with easy to do async tasks facility) for-in and for-of loops.&lt;/p&gt;

&lt;p&gt;What I learned is what I am going to share with you in the simplest way possible.&lt;/p&gt;

&lt;p&gt;Syntax: &lt;em&gt;for(let item in array){}&lt;/em&gt; -&amp;gt; &lt;strong&gt;item will hold index of arrays&lt;/strong&gt;&lt;br&gt;
Syntax: &lt;em&gt;for(let item of array){}&lt;/em&gt; -&amp;gt; &lt;strong&gt;item will hold element of arrays&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Therefore, we can also call them as:&lt;/p&gt;

&lt;p&gt;for-in -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;for(let index in array) &lt;br&gt;
    {&lt;br&gt;
      // body&lt;br&gt;
    }&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;for-of -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;for(let element of array) &lt;br&gt;
    {&lt;br&gt;
      // body&lt;br&gt;
    }&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Example:
&lt;/h1&gt;

&lt;h2&gt;
  
  
  for-in
&lt;/h2&gt;


&lt;div class="ltag__replit"&gt;
  &lt;iframe height="550px" src="https://repl.it/@mak119/usingFor-inWithArrays?lite=true"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  Example:
&lt;/h1&gt;

&lt;h2&gt;
  
  
  for-of
&lt;/h2&gt;


&lt;div class="ltag__replit"&gt;
  &lt;iframe height="550px" src="https://repl.it/@mak119/usingFor-ofWithArrays?lite=true"&gt;&lt;/iframe&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
