<?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: Abhishek Keshri</title>
    <description>The latest articles on DEV Community by Abhishek Keshri (@2kabhishek).</description>
    <link>https://dev.to/2kabhishek</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%2F256258%2Fcc211557-a459-418e-b317-8fb2ad1eedfb.jpeg</url>
      <title>DEV Community: Abhishek Keshri</title>
      <link>https://dev.to/2kabhishek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/2kabhishek"/>
    <language>en</language>
    <item>
      <title>Pending Code Reviews Are Blockers for Your Team 🚧</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Fri, 09 Aug 2024 09:00:07 +0000</pubDate>
      <link>https://dev.to/2kabhishek/pending-code-reviews-are-blockers-for-your-team-4m4e</link>
      <guid>https://dev.to/2kabhishek/pending-code-reviews-are-blockers-for-your-team-4m4e</guid>
      <description>&lt;p&gt;I've worked and interacted with a lot of people working in engineering teams across various contexts, and one of the most common pain points I've encountered is the prolonged wait time for code reviews.&lt;/p&gt;

&lt;p&gt;Long delays in code reviews can cause several issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Slower Delivery Pipeline 🐢&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When reviews are delayed, the overall progress of the project is hindered, affecting delivery timelines.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Idle Time and Context Switching 🦥&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers either move on to new tasks or, worse, sit idle waiting for reviews. When feedback finally arrives, they must context switch, which disrupts their flow and reduces productivity.&lt;/p&gt;

&lt;p&gt;Here are steps you can take to improve this process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Start Early 🐦&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t have to wait until your PR is fully refined to start getting feedback. It’s beneficial to seek input early—either right after the first draft or even during the ideation phase. This approach helps align the team early on and reduces the scope of later revisions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pair Programming / Mob Programming 🤝&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Collaborating on a piece of work through pair or mob programming ensures that your team is aligned and solves the problem together. This approach often eliminates the need for a formal code review altogether.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Treat Pending Code Reviews as Blockers 🚧&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Often, it’s not that we’re unwilling to do code reviews; rather, they get deprioritized amidst other daily tasks. Changing this mindset is crucial. Consider code reviews as blockers for your team and aim to address them as soon as possible. Personally, whenever I receive a notification about a code review, I ensure that I tackle it immediately after finishing my current task.&lt;/p&gt;

&lt;p&gt;What strategies have helped your team improve code review processes? 💬&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>agile</category>
      <category>codereview</category>
      <category>devops</category>
    </item>
    <item>
      <title>All the keyboard shortcuts I know! ⌨️🥂</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sun, 07 Jul 2024 11:56:33 +0000</pubDate>
      <link>https://dev.to/2kabhishek/keybindings-ftw-5dcd</link>
      <guid>https://dev.to/2kabhishek/keybindings-ftw-5dcd</guid>
      <description>&lt;p&gt;Keybindings or keyboard shortcuts are essential to an efficient workflow.&lt;br&gt;
They help you navigate faster, be more productive and reduce the time you spend on repetitive tasks.&lt;/p&gt;

&lt;p&gt;My workflow is heavily keyboard driven and primmarily relies on a browser and a terminal within a tiling window manager, for these I use my own set of keybindings. Because I work on multiple machines and operating systems, I have to keep track of all the keybindings I use and make sure they are somewhat consistent across all the systems and tools.&lt;/p&gt;

&lt;p&gt;I realized that this keybinding information was scattered across the internet and several configuration files, making it hard to find when needed. So, I embarked on a journey to document all the keyboard shortcuts I use daily!&lt;/p&gt;

&lt;p&gt;The purpose of this post is to provide a central location / index for all the keybindings I use across different tools and operating systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools Covered
&lt;/h2&gt;

&lt;p&gt;Here's all the tools I covered:&lt;/p&gt;

&lt;h3&gt;
  
  
  Aerospace
&lt;/h3&gt;

&lt;p&gt;Aerospace is my go to tiling window manager for macOS, its similar to i3, &lt;a href="https://github.com/nikitabobko/AeroSpace" rel="noopener noreferrer"&gt;find out more here&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/mac2k/blob/main/config/aerospace/aerospace.toml" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/mac2k/blob/main/docs/aerospace.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Alacritty
&lt;/h3&gt;

&lt;p&gt;Alacritty is a cross-platform, GPU-accelerated terminal emulator. &lt;a href="https://github.com/alacritty/alacritty" rel="noopener noreferrer"&gt;find out more&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/tree/main/config/alacritty" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/tree/main/docs/alacritty.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Arc Browser
&lt;/h3&gt;

&lt;p&gt;Arc is a web browser built on Chrome, that provides some handy features. &lt;a href="https://arc.net/" rel="noopener noreferrer"&gt;find out more&lt;/a&gt;&lt;br&gt;
Its my primary browser on MacOS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/mac2k/blob/main/docs/arc.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MacOS
&lt;/h3&gt;

&lt;p&gt;I change very few of the default keybindings on MacOS at a system level.&lt;br&gt;
I remap the &lt;code&gt;Caps Lock&lt;/code&gt; key to &lt;code&gt;Escape&lt;/code&gt; and Swap &lt;code&gt;Fn&lt;/code&gt; and &lt;code&gt;Ctrl&lt;/code&gt; keys.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/2KAbhishek/mac2k/blob/main/docs/macos.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Neovim
&lt;/h3&gt;

&lt;p&gt;Neovim is central to my workflow and my primary editor, where keyboard shortcuts significantly enhance productivity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2kabhishek/nvim2k" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/nvim2k/blob/main/docs/keybindings.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Qutebrowser
&lt;/h3&gt;

&lt;p&gt;Qutebrowser is a keyboard-driven browser that can be used with minimal mouse interaction.&lt;br&gt;
It's my primary browser on Linux and I use it on MacOS as well.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2kabhishek/qute2k" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/qute2k/blob/main/docs/keybindings.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Raycast
&lt;/h3&gt;

&lt;p&gt;Raycast is a macOS app launcher with tons of expandable plugins.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/mac2k/blob/main/docs/raycast.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Shell
&lt;/h3&gt;

&lt;p&gt;Efficient shell usage is crucial, I use zsh as my primary shell but knowing the basics of bash is also important.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/tree/main/config/shell" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/blob/main/docs/shell.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sway
&lt;/h3&gt;

&lt;p&gt;Sway is my primary window manager on Linux, it is a wayland port of i3.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2kabhishek/sway2k" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/sway2k/blob/main/docs/keybindings.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tmux
&lt;/h3&gt;

&lt;p&gt;Tmux helps manage terminal sessions efficiently, I rarely have a terminal open without tmux.&lt;br&gt;
I manage all my tmux keybindings with &lt;a href="https://github.com/2KAbhishek/tmux-tilit" rel="noopener noreferrer"&gt;tmux-tilit&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/tmux-tilit/blob/main/docs/keybindings.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vimium
&lt;/h3&gt;

&lt;p&gt;Vimiun is a Chrome extension that provides keyboard shortcuts for navigation and control in the spirit of Vim.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/tree/main/config/vimium.json" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/blob/main/docs/vimium.md" rel="noopener noreferrer"&gt;keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Zsh
&lt;/h3&gt;

&lt;p&gt;Zsh is my primary shell, I use it with oh-my-zsh and powerlevel10k among other plugins.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/tree/main/config/zsh/keys.zsh" rel="noopener noreferrer"&gt;Configs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2KAbhishek/dots2k/blob/main/docs/zsh.md" rel="noopener noreferrer"&gt;Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Alright, that's all for now, I hope you find some of these keybindings helpful.&lt;br&gt;
Feel free to tweak these keybindings to suit your needs better, I will be updating this list as I add more tools and keybindings to my workflow.&lt;/p&gt;

&lt;p&gt;Remember, the key to efficiency is not just knowing these shortcuts, but incorporating them into your daily workflow.&lt;br&gt;
Keep practicing, keep exploring, and you'll find your productivity soaring in no time. Happy coding!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>linux</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>How to be good at Open Source 🧑‍💻🌏</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sun, 24 Mar 2024 02:51:47 +0000</pubDate>
      <link>https://dev.to/2kabhishek/how-to-be-good-at-open-source-52cc</link>
      <guid>https://dev.to/2kabhishek/how-to-be-good-at-open-source-52cc</guid>
      <description>&lt;h2&gt;
  
  
  What's the coolest thing about open source software? 💭
&lt;/h2&gt;

&lt;p&gt;If you need a new feature, you can just go ahead and add it yourself!&lt;/p&gt;

&lt;p&gt;I recently did this with &lt;a href="https://github.com/jesseduffield/lazygit" rel="noopener noreferrer"&gt;lazygit&lt;/a&gt;, a terminal-based git client I use every day.&lt;br&gt;
I wanted to add co-authors to commits, which is handy for pair programming at Incubyte &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jesseduffield/lazygit/pull/3097" rel="noopener noreferrer"&gt;My pull request&lt;/a&gt; for this feature got merged recently, and now I'm thrilled to use it with the latest release!&lt;/p&gt;

&lt;p&gt;Here are some tips I learned along the way:&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Value
&lt;/h3&gt;

&lt;p&gt;Make sure your contribution adds value to the project. Don't just contribute because it's trendy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ask for Help
&lt;/h3&gt;

&lt;p&gt;Don't expect to get everything right on the first try. Ask the project maintainers for feedback and guidance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Be Patient
&lt;/h3&gt;

&lt;p&gt;Remember, many open source projects are labors of love. Be patient if things take time or responses are slow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accept Rejection
&lt;/h3&gt;

&lt;p&gt;Sometimes your ideas might not fit with the project's goals. Be polite and be prepared to fork the project if necessary (and maybe even become a maintainer yourself!).&lt;/p&gt;

&lt;p&gt;Most importantly, be a good open sourcerer, and may the code be with you! 🖖&lt;/p&gt;

&lt;p&gt;#OpenSource #Community #SoftwareDevelopment&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>community</category>
      <category>learning</category>
    </item>
    <item>
      <title>Master Git Interactive Rebase 🧑‍💻🎓</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sat, 27 Jan 2024 13:30:21 +0000</pubDate>
      <link>https://dev.to/2kabhishek/master-git-interactive-rebase-7a9</link>
      <guid>https://dev.to/2kabhishek/master-git-interactive-rebase-7a9</guid>
      <description>&lt;p&gt;A clean commit history can significantly enhance the speed and efficiency of code reviews. However, achieving it isn't always a walk in the park.&lt;/p&gt;

&lt;p&gt;Fortunately, we have powerful tools like Git Interactive Rebase to streamline the process.&lt;/p&gt;

&lt;p&gt;📚 I've put together a comprehensive guide to help you master Git's interactive rebase, making your commit history cleaner and more efficient.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/NMpCfuV21rU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out the guide and level up your version control game!&lt;/p&gt;

&lt;p&gt;We'll learn squashing, reordering, and editing commits, making your commit history tell a story.&lt;/p&gt;

&lt;p&gt;Tailored for both beginners and seasoned developers, this guide delivers actionable insights and best practices to help you master Git's interactive rebase feature.&lt;/p&gt;

&lt;p&gt;Let me know your thoughts and happy coding! 💻 &lt;/p&gt;

</description>
      <category>git</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Ultimate Windows Dev Environment for 2024! 🪟🧑‍💻</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Tue, 02 Jan 2024 15:59:52 +0000</pubDate>
      <link>https://dev.to/2kabhishek/ultimate-windows-dev-environment-for-2024-le9</link>
      <guid>https://dev.to/2kabhishek/ultimate-windows-dev-environment-for-2024-le9</guid>
      <description>&lt;p&gt;I was never a big fan of the command line experience on windows, but recently things have improved and I tried creating a command line based dev setup.&lt;/p&gt;

&lt;p&gt;Sharing it here.&lt;/p&gt;

&lt;p&gt;If you use windows I definitely recommend going through it.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/watch?si=9c_YY9LU1VdD35zj&amp;amp;v=Qt9dSfXjuxY&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Here's the repo link if you want to set it up directly.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/2KAbhishek" rel="noopener noreferrer"&gt;
        2KAbhishek
      &lt;/a&gt; / &lt;a href="https://github.com/2KAbhishek/win2k" rel="noopener noreferrer"&gt;
        win2k
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Ultimate Dev Setup for Windows 🪟🪄
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://github.com/2kabhishek/win2k" rel="noopener noreferrer"&gt;win2k&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/blob/main/LICENSE" rel="noopener noreferrer"&gt;
&lt;img alt="License" src="https://camo.githubusercontent.com/4efa4aeb2ea564110eec3805d7d3ce942adc0cfbdbb2bf7f34c6a2122f31b805/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d656565266c6162656c3d"&gt; &lt;/a&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/graphs/contributors" rel="noopener noreferrer"&gt;
&lt;img alt="People" src="https://camo.githubusercontent.com/37a0638413bcaf8d822b2e4585ec6b5e90d4e9103f75665efe81d02e825013b0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d666661616632266c6162656c3d50656f706c65"&gt; &lt;/a&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/stargazers" rel="noopener noreferrer"&gt;
&lt;img alt="Stars" src="https://camo.githubusercontent.com/387d64f812be2c2ec0e185adc4b0d1e11fbe1f475483e97940ab89fa9bcb9180/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d393863333739266c6162656c3d5374617273"&gt;&lt;/a&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/network/members" rel="noopener noreferrer"&gt;
&lt;img alt="Forks" src="https://camo.githubusercontent.com/c8921726e2e31c1dda94d9da61cc8bfb173c2c08b4b258e85496d0324bb7cba5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d363661386530266c6162656c3d466f726b73"&gt; &lt;/a&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/watchers" rel="noopener noreferrer"&gt;
&lt;img alt="Watches" src="https://camo.githubusercontent.com/25c5112145cdabb409a1f098a907597bca5423cb65bc9e2c1d2ada3ee9bd1580/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f77617463686572732f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d663564303862266c6162656c3d57617463686573"&gt; &lt;/a&gt;
&lt;a href="https://github.com/2KAbhishek/win2k/pulse" rel="noopener noreferrer"&gt;
&lt;img alt="Last Updated" src="https://camo.githubusercontent.com/d8628c05805c5f2c3dc890714257ee32f2179833e7fd84efd060b7d27864c5fb/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f326b616268697368656b2f77696e326b3f7374796c653d666c617426636f6c6f723d653036633735266c6162656c3d"&gt; &lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Ultimate Dev Setup for Windows 🪟🪄&lt;/h3&gt;
&lt;/div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/2KAbhishek/win2kimages/screenshot.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2F2KAbhishek%2Fwin2kimages%2Fscreenshot.png" alt="win2k in action"&gt;&lt;/a&gt;
  &lt;br&gt;
  win2k in action

&lt;/div&gt;
&lt;p&gt;win2k is a set of handcrafted configs for setting up a complete dev environment on Windows.&lt;/p&gt;
&lt;p&gt;It makes developing on Windows much more pleasant for CLI lovers.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Can set up a complete dev environment within minutes&lt;/li&gt;
&lt;li&gt;Full featured CLI dev environment on Windows (natively, without WSL!)&lt;/li&gt;
&lt;li&gt;Shiny and extensible prompt with &lt;a href="https://ohmyposh.dev/" rel="nofollow noopener noreferrer"&gt;oh-my-posh&lt;/a&gt; and &lt;a href="https://github.com/2kabhishek/posh2k" rel="noopener noreferrer"&gt;posh2k&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Powerful personalized editing with &lt;a href="https://github.com/2kabhishek/nvim2k" rel="noopener noreferrer"&gt;nvim2k&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tiling window management with &lt;a href="https://github.com/LGUG2Z/komorebi" rel="noopener noreferrer"&gt;komorebi&lt;/a&gt; and &lt;a href="https://github.com/LGUG2Z/whkd" rel="noopener noreferrer"&gt;whkd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Modern and intuitive keybindings for Windows inspired by &lt;a href="https://github.com/2kabhishek/tmux-tilit" rel="noopener noreferrer"&gt;tmux-tilit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Statusbar support with &lt;a href="https://github.com/denBot/yasb" rel="noopener noreferrer"&gt;yasb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;More!!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 Installation&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Enable remote script execution (Only needed one time)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;Set-ExecutionPolicy&lt;/span&gt; &lt;span class="pl-k"&gt;-&lt;/span&gt;ExecutionPolicy RemoteSigned &lt;span class="pl-k"&gt;-&lt;/span&gt;Scope CurrentUser&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Install scoop&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;Invoke-RestMethod&lt;/span&gt; &lt;span class="pl-k"&gt;-&lt;/span&gt;Uri https:&lt;span class="pl-k"&gt;//&lt;/span&gt;get.scoop.sh &lt;span class="pl-k"&gt;|&lt;/span&gt; &lt;span class="pl-c1"&gt;Invoke-Expression&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Install git (7zip and aria2 to help with scoop installations) if you haven't already&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;scoop install aria2 7zip git&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Clone win2k&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone &lt;span class="pl-k"&gt;--&lt;/span&gt;recurse&lt;span class="pl-k"&gt;-&lt;/span&gt;submodules https:&lt;span class="pl-k"&gt;//&lt;/span&gt;&lt;span class="pl-c1"&gt;github.com&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/2KAbhishek/win2k" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Nerdy.nvim : Find Nerd Glyphs Easily 🤓🔭</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sun, 24 Sep 2023 03:36:25 +0000</pubDate>
      <link>https://dev.to/2kabhishek/nerdynvim-find-nerd-glyphs-easily-3eco</link>
      <guid>https://dev.to/2kabhishek/nerdynvim-find-nerd-glyphs-easily-3eco</guid>
      <description>&lt;p&gt;Do you like &lt;a href="https://github.com/ryanoasis/nerd-fonts" rel="noopener noreferrer"&gt;Nerd fonts&lt;/a&gt;? but don't like going over to &lt;a href="https://www.nerdfonts.com/cheat-sheet" rel="noopener noreferrer"&gt;their site&lt;/a&gt; just to fetch a glyph for your pretty terminal?&lt;/p&gt;

&lt;p&gt;Well, me too!&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://github.com/2kabhishek/nerdy.nvim" rel="noopener noreferrer"&gt;nerdy.nvim&lt;/a&gt;, a super handy plugin that lets you easily search, preview and insert all nerd font glyphs straight from neovim!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhra0are555yzprbb2l4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhra0are555yzprbb2l4u.png" alt="nerdy.nvim"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fuzzy search nerd glyphs&lt;/li&gt;
&lt;li&gt;Preview glyphs before inserting&lt;/li&gt;
&lt;li&gt;Super lightweight&lt;/li&gt;
&lt;li&gt;Can auto generate new icons from source&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚡ Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have installed the latest version of &lt;code&gt;neovim&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These two plugins are optional but highly recommended for a smoother user experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/stevearc/dressing.nvim" rel="noopener noreferrer"&gt;dressing.nvim&lt;/a&gt; — for prettier select UI&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;telescope&lt;/a&gt; — for fuzzy searching in list&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Installation
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;

&lt;span class="c1"&gt;-- Lazy&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;'2kabhishek/nerdy.nvim'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s1"&gt;'stevearc/dressing.nvim'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'nvim-telescope/telescope.nvim'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Nerdy'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="c1"&gt;-- Packer&lt;/span&gt;
&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="s1"&gt;'2kabhishek/nerdy.nvim'&lt;/span&gt;



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

&lt;/div&gt;
&lt;h3&gt;
  
  
  💻 Usage
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;nerdy.nvim&lt;/code&gt; adds a new command &lt;code&gt;Nerdy&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can add your custom bindings for the command, the recommended keybinding is &lt;code&gt;&amp;lt;leader&amp;gt;f,&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;check &lt;code&gt;:help nerdy&lt;/code&gt; for more details.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: By default there are no configured keybindings.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Fetch new icons
&lt;/h4&gt;

&lt;p&gt;Running the &lt;code&gt;python scripts/generator.py&lt;/code&gt; command will automatically fetch new icons from &lt;a href="https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/glyphnames.json" rel="noopener noreferrer"&gt;source&lt;/a&gt; and update the icons.&lt;/p&gt;
&lt;h2&gt;
  
  
  Behind The Code
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🌈 Inspiration
&lt;/h3&gt;

&lt;p&gt;I love nerd font glyphs, and I use them anywhere I can! but I was wasting a lot of time going back and forth between nerd font site and neovim, also the copy feature was super buggy for me on the site, so I made nerdy!&lt;/p&gt;
&lt;h3&gt;
  
  
  💡 Challenges/Learnings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Making the generated icon table with vim.ui.select was a bit tricky.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🧰 Tooling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/2kabhishek/dots2k" rel="noopener noreferrer"&gt;dots2k&lt;/a&gt; — Dev Environment&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/2kabhishek/nvim2k" rel="noopener noreferrer"&gt;nvim2k&lt;/a&gt; — Personalized Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔍 More Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvimdev/nerdicons.nvim" rel="noopener noreferrer"&gt;nerdicons.nvim&lt;/a&gt; — Nerdy was inspired by nerdicons, thanks to the original authors for the groundwork.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/2kabhishek/co-author.nvim" rel="noopener noreferrer"&gt;co-author.nvim&lt;/a&gt; — Another one of my plugin that easily lets you add co authors&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  GitHub Repo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/2KAbhishek" rel="noopener noreferrer"&gt;
        2KAbhishek
      &lt;/a&gt; / &lt;a href="https://github.com/2KAbhishek/nerdy.nvim" rel="noopener noreferrer"&gt;
        nerdy.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find Nerd Glyphs Easily 🤓🔭
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://github.com/2kabhishek/nerdy.nvim" rel="noopener noreferrer"&gt;nerdy.nvim&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/blob/main/LICENSE" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="License" src="https://camo.githubusercontent.com/810df373122f705483ad552230ee320921f9f9a414bdd09908f5a070b91ccfaa/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d656565266c6162656c3d"&gt; &lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/graphs/contributors" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="People" src="https://camo.githubusercontent.com/19bed24ed858344d47c445878cf9dfb71e8c5d0a0dd3955bd00f0f2552ad77a3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d666661616632266c6162656c3d50656f706c65"&gt; &lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/stargazers" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="Stars" src="https://camo.githubusercontent.com/425aec247c55a2124e1c332bae118257a9bb1b1183b33bae680ae23b8c4d527d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d393863333739266c6162656c3d5374617273"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/network/members" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="Forks" src="https://camo.githubusercontent.com/93ae5164f119a92666939ebf9b0ecdea8a438e74fde9c18aef9ceaf035b68d48/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d363661386530266c6162656c3d466f726b73"&gt; &lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/watchers" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="Watches" src="https://camo.githubusercontent.com/a5ceac3fa4367e809fa2943459c94759c4ac58afb91f697a7dec92af9f098733/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f77617463686572732f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d663564303862266c6162656c3d57617463686573"&gt; &lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/2KAbhishek/nerdy.nvim/pulse" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img alt="Last Updated" src="https://camo.githubusercontent.com/cfdb7d28768e1eee0a33ef9624afa5ac94428071b013f1bbb0e2b6538b9fb16a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f326b616268697368656b2f6e657264792e6e76696d3f7374796c653d666c617426636f6c6f723d653036633735266c6162656c3d"&gt; &lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Find Nerd Glyphs Easily 🤓🔭&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/2KAbhishek/nerdy.nvimimages/screenshot.jpg"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2F2KAbhishek%2Fnerdy.nvimimages%2Fscreenshot.jpg" alt="nerdy.nvim in action"&gt;&lt;/a&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
  nerdy.nvim in action&lt;/p&gt;


&lt;/div&gt;

&lt;p&gt;Do you like &lt;a href="https://github.com/ryanoasis/nerd-fonts" rel="noopener noreferrer"&gt;Nerd fonts&lt;/a&gt;? but don't like going over to &lt;a href="https://www.nerdfonts.com/cheat-sheet" rel="nofollow noopener noreferrer"&gt;their site&lt;/a&gt; to fetch a glyph for your pretty terminal?
Well, me too!&lt;/p&gt;
&lt;p&gt;Introducing nerdy.nvim, a super handy plugin that lets you search, preview and insert all nerd font glyphs straight from neovim!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fuzzy search nerd glyphs, by name and unicode&lt;/li&gt;
&lt;li&gt;Preview glyphs before inserting&lt;/li&gt;
&lt;li&gt;Super lightweight&lt;/li&gt;
&lt;li&gt;Can auto generate new icons from source&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;⚡ Requirements&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;You have installed the latest version of &lt;code&gt;neovim&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These two plugins are optional but highly recommended for a smoother user experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/stevearc/dressing.nvim" rel="noopener noreferrer"&gt;dressing.nvim&lt;/a&gt; — for prettier select UI&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;telescope&lt;/a&gt; — for fuzzy searching in list&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 Installation&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-lua notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; Lazy&lt;/span&gt;
{
    &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;2kabhishek/nerdy.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
    &lt;span class="pl-smi"&gt;dependencies&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; {
        &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;stevearc/dressing.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
        &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;nvim-telescope/telescope.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
    },
    &lt;span class="pl-smi"&gt;cmd&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Nerdy&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;,
},

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;--&lt;/span&gt; Packer&lt;/span&gt;
&lt;span class="pl-c1"&gt;use&lt;/span&gt; &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;2kabhishek/nerdy.nvim&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;💻 Usage&lt;/h3&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/2KAbhishek/nerdy.nvim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>showdev</category>
      <category>neovim</category>
      <category>vim</category>
      <category>cli</category>
    </item>
    <item>
      <title>How to Think Like an Architect 🧠🏛️</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Mon, 14 Aug 2023 05:08:00 +0000</pubDate>
      <link>https://dev.to/2kabhishek/how-to-think-like-an-architect-1l5l</link>
      <guid>https://dev.to/2kabhishek/how-to-think-like-an-architect-1l5l</guid>
      <description>&lt;p&gt;Have you ever wondered what skills it takes to be a software architect?&lt;/p&gt;

&lt;p&gt;While civil architects design awe-inspiring structures that stand the test of time, software architects craft intricate architectures that form the foundation of modern technology. Software architects mold the digital landscape as we know it.&lt;/p&gt;

&lt;p&gt;Architects possess a unique mindset that enables them to design and develop robust software architectures. Their ability to think strategically, make informed decisions, and balance trade-offs is vital for creating successful systems.&lt;/p&gt;

&lt;p&gt;In this article, we dive deep into key principles and strategies that will help you train your brain to think like an architect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Law of Software Architecture: Everything is a Trade-off
&lt;/h2&gt;

&lt;p&gt;The foundation of architectural thinking lies in understanding that everything in software architecture involves trade-offs.&lt;br&gt;
Architectural decisions require careful consideration of competing factors, such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance vs. Readability&lt;/li&gt;
&lt;li&gt;Modularity vs. Reusability&lt;/li&gt;
&lt;li&gt;Flexibility vs. Simplicity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good architect recognizes and embraces these trade-offs, making balanced choices that align with a project's long-term goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architectural Thinking Impacts Businesses, Teams and End Users
&lt;/h2&gt;

&lt;p&gt;Architectural thinking impacts business facets such as values, internal team dynamics, and customer satisfaction.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Business Value&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In an organization, business executives and management may be concerned more with scalability, time-to-market, and cost-effectiveness.&lt;br&gt;
This is where architectural thinking becomes significant in delivering business value. Architects get to make technical choices with business goals in mind because they get to think more holistically.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Happier Teams&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architectural thinking fosters effective collaboration and empowers team members. By creating architectures that promote communication, clarity, and shared understanding, architects contribute to happier and more productive teams.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Satisfaction&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A well-designed architecture ensures system reliability, performance and usability. Thinking like an architect means you prioritize user experience, i.e., the needs of your end user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fdvka435gzepos1u4mbm5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fdvka435gzepos1u4mbm5.jpg" alt="Benefits of Architectural Thinking"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies for Identifying Architectural Characteristics
&lt;/h2&gt;

&lt;p&gt;Identifying architectural characteristics is crucial for designing effective software systems.&lt;br&gt;
Here are some strategies to find and define these characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Through Understanding the Business Domain:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gain a deep understanding of the domain in which the software system will operate.&lt;br&gt;
This understanding helps identify key concerns, requirements and constraints that influence the architecture.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Through User Stories and Requirements:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architectural characteristics can often be found implicitly or explicitly in user stories and requirements documents.&lt;br&gt;
Pay attention to both functional and non-functional requirements, as they provide insights into the desired qualities of the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Through Business Conversations:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Engage in conversations with stakeholders, business analysts, and domain experts to uncover architectural characteristics.&lt;br&gt;
Discussions about system goals, performance expectations, and scalability requirements can reveal crucial insights for architectural decision-making.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Depth vs. Breadth
&lt;/h2&gt;

&lt;p&gt;Striking a balance between technical depth and breadth is essential for architects.&lt;br&gt;
Here's a breakdown of these two dimensions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fzikpa70xih9419s246cr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fzikpa70xih9419s246cr.jpg" alt="Technical Depth vs. Breadth"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 20-Minute Rule
&lt;/h2&gt;

&lt;p&gt;To enhance technical breadth, commit at least 20 minutes each day to expand your knowledge.&lt;br&gt;
Here are some resources that you can use to stay updated and explore new ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.infoq.com/" rel="noopener noreferrer"&gt;InfoQ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://dzone.com/refcardz" rel="noopener noreferrer"&gt;Dzone Refcardz&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.thoughtworks.com/radar" rel="noopener noreferrer"&gt;Thoughtworks Radar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://news.ycombinator.com/" rel="noopener noreferrer"&gt;Hacker News&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips for Thinking Like an Architect
&lt;/h2&gt;

&lt;p&gt;To enhance your architect's mindset, keep the following tips in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Architecture is an iterative process,&lt;/strong&gt; just like software development.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Collaborative decision-making and communication are crucial in effective architecture&lt;/strong&gt;.
Involving developers and business stakeholders provides a broader perspective and considers multiple viewpoints.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Be mindful of the context when making decisions&lt;/strong&gt;
Consider the specific project requirements, constraints and objectives to avoid falling into out-of-context traps.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Avoid over-evangelizing a particular solution or technology&lt;/strong&gt;.
Architectural decisions should be driven by a project's unique needs rather than personal preferences or biases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embracing the principles of architectural thinking, you can cultivate a mindset that enables you to approach software design and decision-making like an architect.&lt;br&gt;
This perspective empowers you to create well-balanced, effective, and successful architectures.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>softwareengineering</category>
      <category>career</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Everything You Need To Know To Use ChatGPT More Efficiently 🤖🪄</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Fri, 23 Jun 2023 11:15:34 +0000</pubDate>
      <link>https://dev.to/2kabhishek/everything-you-need-to-know-to-use-chatgpt-more-efficiently-42bi</link>
      <guid>https://dev.to/2kabhishek/everything-you-need-to-know-to-use-chatgpt-more-efficiently-42bi</guid>
      <description>&lt;p&gt;Are you feeling lost in the new world of AI tools and Prompt Engineering?&lt;br&gt;
Don't worry, we got you!&lt;br&gt;
In this article, we'll demystify everything and equip you with the knowledge you need to get the most out of AI tools like ChatGPT.&lt;br&gt;
So, let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Prompt Engineering?
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is like being the conductor of an AI orchestra.&lt;br&gt;
It's the art of crafting carefully tailored instructions, or prompts, that guide language models like GPT-3.5 (Used in ChatGPT) to produce the outputs we desire.&lt;br&gt;
Think of it as giving your AI companion the perfect set of directions to create the results you're looking for.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore the fundamental principles of prompt engineering and how they can be applied in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principle 1: Write clear and specific instructions
&lt;/h2&gt;

&lt;p&gt;The clarity and specificity of instructions greatly influence the output generated by the model.&lt;br&gt;
Here are some guidelines to follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use delimiters to clearly indicate distinct parts of the input.
Delimiters can be anything like triple backticks (

```

) or semicolon (;).
For example, when providing multiple inputs, you can separate them using delimiters to ensure the model processes them correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2F8bn108ayy771jaai5yba.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F8bn108ayy771jaai5yba.jpg" alt="delimiter-example" width="757" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask for a structured output format such as JSON or HTML.
This helps in obtaining well-organized and easily parseable results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fb8k725gdpyh6uoyxmwfo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fb8k725gdpyh6uoyxmwfo.jpg" alt="json-example" width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instruct the model to check whether certain conditions are satisfied.
This allows you to incorporate logical checks in the output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fn6rjj0h7cduovbet1jpj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fn6rjj0h7cduovbet1jpj.jpg" alt="conditional-example" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize the power of "few-shot" prompting.
Instead of asking the model to perform a task from scratch, provide an example or a partial solution and ask it to do something similar.
This enables the model to generalize from the given example and produce the desired output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fnvkpzh8c4uq353cbjqnj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fnvkpzh8c4uq353cbjqnj.jpg" alt="few-shot-example" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By clearly specifying the desired output format and providing structured inputs, we increase the likelihood of obtaining the desired JSON response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principle 2: Give the model time to "think"
&lt;/h2&gt;

&lt;p&gt;Language models like GPT-3.5 need time to process and generate outputs, especially for complex tasks.&lt;br&gt;
To facilitate this, follow these guidelines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specify the steps required to complete a task.
Number and list the steps clearly in your instructions.
This helps the model understand the desired process and ensures a logical flow of information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fht4p2fkwkldnctg38pll.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fht4p2fkwkldnctg38pll.jpg" alt="list-example" width="800" height="839"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask for output in a specified format and provide an output template.
By providing a template, you guide the model to generate output that adheres to the desired structure.
For example, if you want the model to generate a formatted email, provide a template with placeholders for the recipient, subject and body.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fwn1cyh5reeeagu8i13t5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fwn1cyh5reeeagu8i13t5.jpg" alt="output-format-example" width="800" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instruct the model to work out its own solution before rushing to a conclusion.
Allowing the model to ponder and analyze the problem can lead to more thoughtful and accurate outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.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%2Ffqsnnkmqg0c36io4d22m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Ffqsnnkmqg0c36io4d22m.jpg" alt="evaluation-example" width="800" height="852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By specifying the steps clearly and providing a template for the output, we enable the model to generate a well-structured guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iterative Prompt Development
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is an iterative process.&lt;br&gt;
It involves refining and improving prompts based on the model's outputs and analysis.&lt;br&gt;
Here's a suggested approach for iterative prompt development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Start with a clear and specific implementation of your idea, following the prompting principles mentioned earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analyze the generated outputs and identify any discrepancies or issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refine your idea, and the prompt by further clarifying the instructions or addressing any ambiguities that may have led to undesired outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhance prompts with a batch of examples.&lt;br&gt;
Providing additional examples helps the model learn and generalize better, resulting in improved outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repeat the process until the desired results are achieved.&lt;br&gt;
Iteration allows for continuous refinement and optimization of prompts.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Capabilities of Prompt Engineering
&lt;/h2&gt;

&lt;p&gt;Prompt engineering empowers us to leverage the capabilities of language models effectively.&lt;br&gt;
Here are a few key capabilities and their applications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Summarizing&lt;/strong&gt;: Language models can summarize larger pieces of text to their essential points.&lt;br&gt;
This can be customized to focus on specific topics or aspects within the text.&lt;br&gt;
For instance, you can prompt the model to summarize a news article while emphasizing the key events.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inferring&lt;/strong&gt;: Models can understand the content and make inferences.&lt;br&gt;
This capability is valuable for tasks like sentiment analysis, topic extraction, grammar checks, and more.&lt;br&gt;
For example, you can ask the model to determine the sentiment of a customer review or identify the primary topic in a given text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transforming&lt;/strong&gt;: Language models can transform content from one form to another.&lt;br&gt;
This includes tasks like format conversion (e.g., JSON to HTML), language translation, or even changing the mood or tone of the text.&lt;br&gt;
For instance, you can prompt the model to translate an English sentence to French or convert a CSV file to JSON format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expanding&lt;/strong&gt;: Models can generate large content from smaller inputs, allowing for the generation of articles, emails, lists, and more.&lt;br&gt;
For example, you can provide the model with a few bullet points and ask it to expand them into a full-length article.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Get Prompting!
&lt;/h2&gt;

&lt;p&gt;That's all folks, you now have all the fundamentals you need to go out there and craft your own prompts.&lt;br&gt;
Use this knowledge to unleash the power of prompt engineering and watch your AI companion create wonders at your command.&lt;/p&gt;

&lt;p&gt;This article is a condensed version of &lt;a href="https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/1/introduction" rel="noopener noreferrer"&gt;this course&lt;/a&gt; by Isa Fulford and Andrew Ng, you can take a look to explore more and try different examples.&lt;/p&gt;

&lt;p&gt;This article was first published on Incubyte's blog, It can be found &lt;a href="https://blog.incubyte.co/blog/prompt-engg/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>promptengineering</category>
      <category>learning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Video: Customising Your GitHub Profile!</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sun, 28 May 2023 00:52:37 +0000</pubDate>
      <link>https://dev.to/2kabhishek/video-customising-your-github-profile-4ebj</link>
      <guid>https://dev.to/2kabhishek/video-customising-your-github-profile-4ebj</guid>
      <description>&lt;p&gt;In this video, I show you how to utilise Markdown and automated Github Actions to create an impressive Readme for your #github profile.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/PPSVGEqFtys"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you have any thoughts or feedback, do let me know in the comments section.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>tutorial</category>
      <category>video</category>
    </item>
    <item>
      <title>PR Labeler: Simplify Repo Maintenance with Automated Labels and More</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Mon, 22 May 2023 21:03:39 +0000</pubDate>
      <link>https://dev.to/2kabhishek/pr-labeler-simplify-repo-maintenance-with-automated-labels-and-more-586p</link>
      <guid>https://dev.to/2kabhishek/pr-labeler-simplify-repo-maintenance-with-automated-labels-and-more-586p</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Hey there! I've built a super handy GitHub Action that's all about making the lives of repo maintainers a breeze.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add labels for the current and required number of reviews&lt;/li&gt;
&lt;li&gt;Pop in a "Work in Progress" label for draft PRs&lt;/li&gt;
&lt;li&gt;Keep an eye on a target branch (like staging) to make sure all the current PR commits are there&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Maintainer Must-Haves&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;You can find the action right here: &lt;a href="https://github.com/2KAbhishek/gh-pr-labeler" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;So, here's the deal: my GitHub Action is all about helping repo maintainers tackle their daily tasks with ease. It offers some nifty features, like automatically adding labels based on review counts, throwing in that "Work in Progress" label for those draft PRs, and even letting you track if all the PR commits exist on a specific target branch. It's all about making your life simpler!&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;Feel free to check out the source code over at: &lt;a href="https://github.com/2KAbhishek/gh-pr-labeler" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Alright, so let me share a little story with you. I've had my fair share of struggles when it comes to finding PRs that desperately need some reviews. On top of that, I often found myself wondering if all the changes in my current PR actually made it to the staging/test branch. It was a real headache! That's why I built this action—to help me out (and hopefully you too!) by solving these pesky problems once and for all.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I hopped on the GitHub Actions train and made great use of the Actions Toolkit provided by GitHub. Along the way, I learned some cool stuff about the updated API and YAML syntax. Now, if I could offer some feedback, I'd love to see better ways to debug and test GitHub Actions. And boy, a faster feedback loop would be a game-changer, trust me! Making those improvements would make the whole development experience a whole lot smoother.&lt;/p&gt;

&lt;p&gt;That's it! Hope you find my GitHub Action as useful as I do. Happy maintaining!&lt;/p&gt;

</description>
      <category>githubhack23</category>
      <category>opensource</category>
      <category>github</category>
      <category>community</category>
    </item>
    <item>
      <title>Video: Personal Knowledge Management with Neovim</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Sat, 13 May 2023 05:27:08 +0000</pubDate>
      <link>https://dev.to/2kabhishek/i-made-a-video-about-taking-notes-in-neovim-2l5i</link>
      <guid>https://dev.to/2kabhishek/i-made-a-video-about-taking-notes-in-neovim-2l5i</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FP7sQhc8kek"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this video I walk you through my note taking process with Neovim, I talk about how I organize, sync and search my notes and all the different tools and custom commands I use to achieve this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Neovim configs here:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2kabhishek/nvim2k" rel="noopener noreferrer"&gt;https://github.com/2kabhishek/nvim2k&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Telekasten plugin:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/renerocksai/telekasten.nvim" rel="noopener noreferrer"&gt;https://github.com/renerocksai/telekasten.nvim&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Telekasten config file:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2KAbhishek/nvim2k/blob/main/lua/nvim2k/plugins/telekasten.lua" rel="noopener noreferrer"&gt;https://github.com/2KAbhishek/nvim2k/blob/main/lua/nvim2k/plugins/telekasten.lua&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Committer repo:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2kabhishek/committer" rel="noopener noreferrer"&gt;https://github.com/2kabhishek/committer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment variable for NOTES_ROOT:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/envars.sh#L46" rel="noopener noreferrer"&gt;https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/envars.sh#L46&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;todo&lt;/code&gt; alias:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/aliases.sh#LL118C5-L118C5" rel="noopener noreferrer"&gt;https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/aliases.sh#LL118C5-L118C5&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;todos&lt;/code&gt; function:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/functions.sh#LL130C1-L134C2" rel="noopener noreferrer"&gt;https://github.com/2KAbhishek/Dotfiles/blob/5c601e6e54cbaf6f683f29261c4aa5d8fa099f90/.config/shell/functions.sh#LL130C1-L134C2&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Video for setting up Neovim:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=WfhylGI_F-o&amp;amp;list=PL52YFor3VtLegIRc3uDl9koGP-Fu_YGru&amp;amp;index=4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=WfhylGI_F-o&amp;amp;list=PL52YFor3VtLegIRc3uDl9koGP-Fu_YGru&amp;amp;index=4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find all my Dotfiles here: &lt;a href="https://github.com/2kabhishek/Dotfiles" rel="noopener noreferrer"&gt;https://github.com/2kabhishek/Dotfiles&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My Links: &lt;a href="https://2kabhishek.github.io/links/" rel="noopener noreferrer"&gt;https://2kabhishek.github.io/links/&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/2KAbhishek" rel="noopener noreferrer"&gt;https://github.com/2KAbhishek&lt;/a&gt;&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/2KAbhishek" rel="noopener noreferrer"&gt;https://twitter.com/2KAbhishek&lt;/a&gt;&lt;br&gt;
Instagram: &lt;a href="https://instagram.com/iam2kabhishek" rel="noopener noreferrer"&gt;https://instagram.com/iam2kabhishek&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any feedback or comments do let me know.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Learnings From Clean Code</title>
      <dc:creator>Abhishek Keshri</dc:creator>
      <pubDate>Mon, 27 Mar 2023 05:00:00 +0000</pubDate>
      <link>https://dev.to/incubyte/learnings-from-clean-code-788</link>
      <guid>https://dev.to/incubyte/learnings-from-clean-code-788</guid>
      <description>&lt;h2&gt;
  
  
  Learnings from Robert “Uncle Bob” Martin
&lt;/h2&gt;

&lt;p&gt;Robert Martin, fondly known as “Uncle Bob” in software community, is a software engineer and more famously an author and one of the founding fathers of software movements like software craftsmanship, agile methodology, and test-driven development. Some of his most famous works include Clean Code, The Clean Coder, Clean Architecture, and Clean Agile. Martin is also a frequent instructor, with the ability to boil down difficult topics into a simple, understandable format, along with occasional cheeky humor.&lt;/p&gt;

&lt;p&gt;One of the most striking qualities of Martin – in all of his writing and lectures, is that nowhere does he claims to have a full-proof solution or a doctrine that could solve all software development problems. He acknowledges that the teachings and lessons are ones he acquired from his 40+ years of experience and encourages the reader to validate the “time-testiness” and accuracy of those lessons. One of the qualities of a software craftsperson, according to Martin, is adapting to changing times and let go of irrelevant principles.&lt;/p&gt;

&lt;p&gt;This article can be thought of as a list of learnings from the book Clean Code. By no means this is an exhaustive list, but rather a list of all lessons which had the most impact (personally) while reading.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Meaning of Clean Code
&lt;/h3&gt;

&lt;p&gt;Uncle Bob starts off the book by exploring the term itself.&lt;br&gt;
Without stating a single clear-cut definition, he presents various definitions from prominent computer scientists.&lt;br&gt;
Reading which, one can figure out common themes and characteristics that define 'Clean Code' being – readability, straightforward, maintainable, reads like prose, and doesn’t contain duplication.&lt;/p&gt;

&lt;p&gt;Core learning: Clean code has more to do with writing understandable code which is both easily maintainable and changeable, versus clever (read complicated) logic which is harder to maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Duplication is the Evil
&lt;/h3&gt;

&lt;p&gt;Uncle Bob goes on a length about various characteristics of bad code.&lt;br&gt;
Amongst them, code duplication holds a special spot, because majority of code problems have their origins linked to duplication.&lt;br&gt;
It has inspired many coding patterns, techniques, and ideologies.&lt;/p&gt;

&lt;p&gt;For example, database normalization techniques (1NF, 2NF, 3NF…) by Codd are ultimately about removing redundancy in database design.&lt;/p&gt;

&lt;p&gt;In fact, paradigms like OOP, AOP, COP, and Structured Programming, are all different ways to deal with duplication.&lt;br&gt;
Duplications can be of different types, the most obvious one being repetition of the same lines of code.&lt;br&gt;
A more subtle form of duplication includes a chain of if/else statements that test the same conditions over and over.&lt;/p&gt;

&lt;p&gt;In some cases, embracing duplication might be the way to go. An example would be hitting a deadline.&lt;br&gt;
An example would be hitting a deadline.&lt;br&gt;
If duplicating code helps in achieving a target, the pragmatic course of action would be to allow duplication and treat it as a technical debt (that needs to be addressed later).&lt;br&gt;
The only risk with this approach is that the duplication is never removed, and it keeps getting accumulated.&lt;/p&gt;

&lt;p&gt;Core learning: While writing a piece of software, be mindful of code duplication.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. One and Only One
&lt;/h3&gt;

&lt;p&gt;Similar phrases appear quite often in the book –&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“Classes should have only one reason to change”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“A single source file should contain only one language”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“Functions should descend only one abstraction level”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“One assert statement per test”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Core learning: Doing more than one thing at a time, or trying to “juggle” multiple things will ultimately lead to poor code quality and make the code less flexible. By making sure that we keep things simple, it makes life easier for the entire team.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. F.I.R.S.T Principle for Tests
&lt;/h3&gt;

&lt;p&gt;Writing tests is often seen as something which takes a lot of time and doesn’t serve a real purpose.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“I wrote the code, I know it works… Don’t you trust me?”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, that’s far from truth, writing tests unravels many aspects we would have not uncovered otherwise.&lt;br&gt;
A good test suite could be a challenge to write, but the F.I.R.S.T. principle can help us out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast – Tests should run fast. If they are slow, nobody would want to run them.&lt;/li&gt;
&lt;li&gt;Independent – Each test should be independent of other tests, and they should be isolated enough to be run individually.&lt;/li&gt;
&lt;li&gt;Repeatable – They should be environment-independent. Should run on dev, prod, QA, etc.&lt;/li&gt;
&lt;li&gt;Self-Validating – The test should either pass or fail. Anything in between means more time would be wasted on reading log messages.&lt;/li&gt;
&lt;li&gt;Timely – Unit tests should be written before writing the production code. Tests serve their purpose only when written in a timely manner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Core learning: Having a good test suit is important.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Clean Code and Concurrency
&lt;/h3&gt;

&lt;p&gt;Coding is hard enough without concurrency.&lt;br&gt;
It has its unique challenges – complexity, overhead, non-repeatability of bugs, etc. and as such it requires a fundamental change in the design strategy.&lt;br&gt;
That being said, some principles must be followed if we want to include concurrency in our system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single Responsibility Principle – Keep concurrent code separate from non-concurrent code&lt;/li&gt;
&lt;li&gt;Encapsulation – Limit access to the shared data&lt;/li&gt;
&lt;li&gt;Know the Library – Understand the concurrency library inside-out&lt;/li&gt;
&lt;li&gt;Keep It Simple, Silly – Make sure that non-concurrent code runs and functions properly first&lt;/li&gt;
&lt;li&gt;Platforms – Run your concurrent code on different platforms&lt;/li&gt;
&lt;li&gt;Go back to the basics – Problems like Consumer-Producer, Dining Philosophers, and Reader-Writers are a good start for selecting an execution method for concurrent code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Core learning: Follow best practices.&lt;/p&gt;

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

&lt;p&gt;This article is a condensed summary of the complete book, highlighting some of the more essential &amp;amp; impactful principles.&lt;br&gt;
The underlying principles remain somewhat same throught the book – a combination of the following principle - Do Not Repeat (&lt;code&gt;DRY&lt;/code&gt;), Keep it Simple Silly (&lt;code&gt;KISS&lt;/code&gt;) and You Ain’t Gonna Need It (&lt;code&gt;YAGNI&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;This book has a lot more to offer including error handling, writing effective comments, meaningful comments, unit testing, etc.&lt;br&gt;
We definitely recommend reading this by yourself for better insights!&lt;/p&gt;




&lt;p&gt;Like what you read? then visit &lt;a href="https://incubyte.co" rel="noopener noreferrer"&gt;our site&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;p&gt;We are also looking for awesome people to work with, if you'd like to be a part of our team &lt;a href="https://incubyte.co/careers" rel="noopener noreferrer"&gt;join us!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>books</category>
      <category>cleancode</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
