<?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>Forem: Jogendra Kumar</title>
    <description>The latest articles on Forem by Jogendra Kumar (@jogendra).</description>
    <link>https://forem.com/jogendra</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%2F191644%2F3dff618e-7b39-4aa1-86a6-145e9d06b2d4.jpeg</url>
      <title>Forem: Jogendra Kumar</title>
      <link>https://forem.com/jogendra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jogendra"/>
    <language>en</language>
    <item>
      <title>How to write proposal for Google Summer of Code</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Fri, 11 Mar 2022 11:38:18 +0000</pubDate>
      <link>https://forem.com/jogendra/how-to-write-proposal-for-google-summer-of-code-55i</link>
      <guid>https://forem.com/jogendra/how-to-write-proposal-for-google-summer-of-code-55i</guid>
      <description>&lt;p&gt;It worth mentioning that the proposal plays a very big role in selecting in Google Summer of Code. A proposal is basically you describing to your organisation how you would go about the project. Based on this and your credibility, your organisation would contemplate on whether to select you or not. I was Google Summer of Code student in 2018. During the proposal submitting time, I have seen a lot of proposal on the organization chat channels, some are good and some bad. Many people try but some of them get in as there are limited slots in every organization. What stands out the selected student from the student who didn’t get selected is their proposals (there are other factors too). Your proposal should convince the mentors that you’re the right person for the project that can take project to next level.&lt;/p&gt;

&lt;p&gt;I did Google Summer of Code 2018 with FOSSASIA and Mentored Google Summer of Code 2019 students. I am sharing my perspective as a mentor, what mentor except in a proposal and what are some things that make you stand out.&lt;/p&gt;

&lt;p&gt;Read the full blog post here &lt;a href="https://jogendra.dev/how-to-write-proposal-for-google-summer-of-code"&gt;https://jogendra.dev/how-to-write-proposal-for-google-summer-of-code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gsoc</category>
      <category>opensource</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Writing maintainable Go code</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Sat, 19 Feb 2022 06:56:26 +0000</pubDate>
      <link>https://forem.com/jogendra/writing-maintainable-go-code-25hj</link>
      <guid>https://forem.com/jogendra/writing-maintainable-go-code-25hj</guid>
      <description>&lt;p&gt;Writing maintainable code is essential. Clarity, readability, and simplicity are all aspects of maintainability. It should make the process easy for someone to join your project or maintain it after someone leaves. Maintainability is measured by how effortless it is to introduce changes and the amount of risk associated with those changes. To write Go effectively, it is crucial to understand its properties and idioms and apply the established conventions related to naming, program construction, formatting, etc.&lt;/p&gt;

&lt;p&gt;Here are some good practices that will help write maintainable Go code.&lt;/p&gt;

&lt;p&gt;Link to full article: &lt;a href="https://jogendra.dev/writing-maintainable-go-code"&gt;https://jogendra.dev/writing-maintainable-go-code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>productivity</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Import Cycles in Golang: How To Deal With Them</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Mon, 18 Jan 2021 19:59:49 +0000</pubDate>
      <link>https://forem.com/jogendra/import-cycles-in-golang-how-to-deal-with-them-4ef3</link>
      <guid>https://forem.com/jogendra/import-cycles-in-golang-how-to-deal-with-them-4ef3</guid>
      <description>&lt;p&gt;As a Golang developer, you probably have encountered import cycles. Golang does not allow import cycles. Go throws a compile-time error if it detects the import cycle in code. In this post, let’s understand how the import cycle occurs and how you can deal with them.&lt;/p&gt;

&lt;p&gt;Read the full blog here:&lt;br&gt;
&lt;a href="https://jogendra.dev/import-cycles-in-golang-and-how-to-deal-with-them"&gt;https://jogendra.dev/import-cycles-in-golang-and-how-to-deal-with-them&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>Using Vim for Go Development</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Sat, 15 Aug 2020 13:23:44 +0000</pubDate>
      <link>https://forem.com/jogendra/using-vim-for-go-development-5hc6</link>
      <guid>https://forem.com/jogendra/using-vim-for-go-development-5hc6</guid>
      <description>&lt;p&gt;As a programmer, you spend a lot of time using text editors, IDEs, etc to code. So it is important what and how you use it. I recently moved to Vim for Go development and I am totally loving it. Initially, I was using VSCode with Go extension and after that, I used GoLand for a while. &lt;a href="https://github.com/microsoft/vscode"&gt;Visual Studio Code&lt;/a&gt; and &lt;a href="https://www.jetbrains.com/go/"&gt;GoLand&lt;/a&gt; both are totally awesome, I loved using them too. It definitely takes some time to learn using vim but it is worth the learning. It is totally up to you what works better for you. Do not use vim just because others are using it. I am very much a beginner to vim and things I am going to explain in this is what I learned after I started using it. I would be really glad if you are a long time Vim user and have some good advice/suggestions. You can put them in the comment section of this post. If you are a beginner, I will put some good resources for learning vim at the bottom of this post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: This post is originally posted on &lt;a href="https://jogendra.dev/using-vim-for-go-development"&gt;https://jogendra.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Read Full Blog here: &lt;a href="https://jogendra.dev/using-vim-for-go-development"&gt;https://jogendra.dev/using-vim-for-go-development&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>vim</category>
      <category>ides</category>
    </item>
    <item>
      <title>How to use multiple GitHub accounts on single machine</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Wed, 22 Jul 2020 05:41:37 +0000</pubDate>
      <link>https://forem.com/jogendra/how-to-use-multiple-github-accounts-on-single-machine-2me9</link>
      <guid>https://forem.com/jogendra/how-to-use-multiple-github-accounts-on-single-machine-2me9</guid>
      <description>&lt;p&gt;Most of us have multiple (mostly two) GitHub accounts, personal and work account. You need to have the ability to push and pull to multiple accounts. This post is about how to setup and use them on a single machine using HTTPS or SSH.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The instructions below have all been executed on macOS and should work fine on all &lt;strong&gt;Unix&lt;/strong&gt; based operating systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full blog here&lt;/strong&gt;: &lt;a href="https://jogendra.dev/how-to-use-multiple-github-accounts-on-single-machine"&gt;https://jogendra.dev/how-to-use-multiple-github-accounts-on-single-machine&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>opensource</category>
      <category>githunt</category>
    </item>
    <item>
      <title>Introduction to Dotfiles</title>
      <dc:creator>Jogendra Kumar</dc:creator>
      <pubDate>Tue, 21 Jul 2020 08:08:21 +0000</pubDate>
      <link>https://forem.com/jogendra/intro-to-dotfiles-4bb8</link>
      <guid>https://forem.com/jogendra/intro-to-dotfiles-4bb8</guid>
      <description>&lt;p&gt;One of the main advantages/beauty of Unix-like systems is that configurations of everything are very customizable. Dotfiles are simply amazing. They are tiny-little configurations files but they customize/decide a lot of your system. Well-organized and understandable dotfiles basically allow you to automatize complex tasks that you repeat every day. With dotfiles, your machine is more organized, advanced, and customized in the way you like your system to be. Also with dotfiles, you can mess around with new packages and settings quite easily, without ever having to worry about really breaking something important. If you would break something, your dotfiles are always right there to back you up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;This blog is originally posted at &lt;a href="https://jogendra.dev/i-do-dotfiles"&gt;https://jogendra.dev/i-do-dotfiles&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Invest time learning to configure your machine and automate processes, you'll get that time back tenfold.&lt;/p&gt;

&lt;p&gt;Your experience, knowledge and talent are key to success, but some kick-ass dotfiles speed you up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  🚀 ✨ &lt;em&gt;My dotfiles can be found at &lt;a href="https://github.com/jogendra/dotfiles"&gt;&lt;strong&gt;jogendra/dotfiles&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  What are dotfiles?
&lt;/h3&gt;

&lt;p&gt;Dotfiles are files and folders on Unix-like systems starting with &lt;code&gt;.&lt;/code&gt; (dot) that control the configuration of applications and shells on your system. Dotfiles are shell scripts that are executed to change the environment of your machine. The &lt;strong&gt;“dotfiles”&lt;/strong&gt; name is derived from the configuration files in Unix-like systems that start with a dot (e.g. &lt;em&gt;.zshrc&lt;/em&gt; and &lt;em&gt;.gitconfig&lt;/em&gt;). For normal users, this indicates these are not regular documents, and by default are hidden in directory listings. You can display dotfiles inside any directory by running &lt;code&gt;ls -a&lt;/code&gt; command.  &lt;a href="https://dotfiles.github.io/"&gt;GitHub does dotfiles&lt;/a&gt; is definitely great place to explore and know more about dotfiles.&lt;/p&gt;

&lt;p&gt;Why dotfiles start with &lt;code&gt;.&lt;/code&gt; (dot) is an interesting example of &lt;strong&gt;a bug that has become a feature&lt;/strong&gt;. Checkout interesting reads on &lt;a href="https://www.reddit.com/r/linux/comments/at05xh/why_do_hidden_files_in_unix_begin_with_a_dot/egyj6lr/"&gt;Why do hidden files in Unix begin with a dot?&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ONDSxaXr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/20956124/84434654-14866500-ac4e-11ea-8de3-413870e37893.png" class="article-body-image-wrapper"&gt;&lt;img class="fullimg" alt="dotfiles" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ONDSxaXr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/20956124/84434654-14866500-ac4e-11ea-8de3-413870e37893.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Codespaces and Dotfiles
&lt;/h3&gt;

&lt;p&gt;Recently GitHub announced Codespaces. According to GitHub, Codespaces uses your dotfiles repository on GitHub to personalize every new codespace that you create. Anyone can create a dotfiles repository to personalize Codespaces for their user account. If your user account on GitHub owns a public repository named dotfiles, GitHub automatically uses this repository to personalize your codespace environment. Read more about this &lt;a href="https://help.github.com/en/github/developing-online-with-codespaces/personalizing-codespaces-for-your-account"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sharing your dotfiles
&lt;/h3&gt;

&lt;p&gt;The main reason behind creating dotfiles is customizing your machine the way you like. Imagine the situation when your machine got broken or some reason you have to change your machine or you have changed your workplace so the machine, in that case, if you haven’t put your dotfiles on some remote machine, you will have to create the dotfile again which was was your long time iterations. With dotfiles, you can have a new machine ready in hours, providing the exact same user experience as the previous one. You can publicly put them on GitHub/Dropbox/etc or keep them private. It is worth keeping your dotfiles under version control for several reasons. Keeping a history of your changes allows you to safely experiment with new configurations, revert bad changes, and review the details of past changes. It is recommended to use different branch for different systems eg. you can put macOS focused dotfiles in one branch and linux system focused dotfiles on another branch so that it become easier for you when you shift between systems. I have made &lt;a href="https://github.com/jogendra/dotfiles"&gt;my own dotfiles&lt;/a&gt; open sourced, and parts of my configuration are inspired by other people’s dotfiles. Afterall, dotfiles are meant for sharing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do not blindly copy dotfiles
&lt;/h3&gt;

&lt;p&gt;Mostly, dotfiles are very specific to the individual developer. What works for someone else isn’t necessarily optimal for you. Rather than using someone else's dotfiles, it is recommended to create your own dotfiles. But it is always great to look into other’s dotfiles to get better ideas, also you can use a bit and pieces of their profiles if you think that will be helpful to you. Going through other’s dotfiles is a great way to improve your own dotfiles. Before creating mine, I went through a lot of other's dotfiles on GitHub. I took this idea of organizing (structure) dotfiles from &lt;a href="https://github.com/holman/dotfiles"&gt;Holman dotfiles&lt;/a&gt;. You can get ideas from different dotfiles and cherry pick some of their part into yours, so for the same reason you can make your dotfiles public on GitHub/GitLab etc. and let the other developers pick and choose from it. I do not agree with &lt;a href="http://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/"&gt;“dotfiles are meant to be forked”&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Securing the dotfiles
&lt;/h3&gt;

&lt;p&gt;Dotfiles often contain some private data like plain text passwords and some pieces of information you don’t wanna share publicly. Anything that is a security risk, like files in your &lt;code&gt;.ssh/&lt;/code&gt; folder, is not a good choice to share using this method. Be sure to double-check your configuration files before publishing them online and triple-check that no API tokens are in your files. You can use &lt;a href="https://git-scm.com/docs/gitattributes"&gt;gitattributes&lt;/a&gt; for git related sensitive information. Version controlled folder’s files that contain sensitive information and should not be published are kept secret using package-specific &lt;code&gt;.gitignore&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config credential.helper store&lt;/code&gt; is not a very secure way to store your git server passwords. According to &lt;a href="https://git-scm.com/docs/git-credential-store"&gt;git credential store documentations&lt;/a&gt;, &lt;em&gt;store&lt;/em&gt; helper will store your passwords unencrypted on disk, protected only by filesystem permissions. The &lt;code&gt;~/.git-credentials&lt;/code&gt; file will have its filesystem permissions set to prevent other users on the system from reading it, but will not be encrypted or otherwise protected. So it stores your password as is. So if you are running &lt;em&gt;macOS&lt;/em&gt; on your machine, Git allows to use your &lt;em&gt;keychain&lt;/em&gt;, which is way more secure. To set &lt;code&gt;osxkeychain&lt;/code&gt; as your git credential helper, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; credential.helper osxkeychain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are runnning &lt;em&gt;Linux&lt;/em&gt; on your machine, you can use &lt;a href="https://git-scm.com/docs/git-credential-cache"&gt;&lt;code&gt;git config credential.helper cache&lt;/code&gt;&lt;/a&gt;, which stores passwords in your memory. This way stored credentials never touch the disk, and are forgotten after a configurable timeout. To set &lt;code&gt;cache&lt;/code&gt; as your git credential helper, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; credential.helper cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mistakenly, if you commit sensitive data, such as a password or SSH key into dotfiles Git repository, you can remove it from the history. To entirely remove unwanted files from a repository's history you can use either the &lt;a href="https://git-scm.com/docs/git-filter-branch"&gt;&lt;code&gt;git filter-branch&lt;/code&gt;&lt;/a&gt; command or the &lt;a href="https://rtyley.github.io/bfg-repo-cleaner/"&gt;BFG Repo-Cleaner&lt;/a&gt; (an alternative to &lt;code&gt;git filter-branch&lt;/code&gt;) open source tool. You can check out GitHub's guide on &lt;a href="https://help.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository"&gt;Removing sensitive data from a repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I would recommend you to use &lt;a href="https://www.passwordstore.org/"&gt;Passwordstore&lt;/a&gt; (pass), the standard Unix password manager. It provides a secure way to encrypt, share, manage, and use private data or passwords. &lt;strong&gt;pass&lt;/strong&gt; makes managing these individual password files extremely easy. All passwords live in &lt;code&gt;~/.password-store&lt;/code&gt;, and &lt;code&gt;pass&lt;/code&gt; provides some nice commands for adding, editing, generating, and retrieving passwords. It is a very short and simple shell script. It's capable of temporarily putting passwords on your clipboard and tracking password changes using &lt;code&gt;git&lt;/code&gt;. You can &lt;a href="https://git.zx2c4.com/password-store/about/"&gt;read more about pass here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do checkout &lt;a href="https://www.outcoldman.com/en/archive/2015/09/17/keep-sensitive-data-encrypted-in-dotfiles/"&gt;Keep sensitive data encrypted in dotfiles&lt;/a&gt;. Also, check out &lt;a href="https://abdullah.today/encrypted-dotfiles/"&gt;how to secure your dotfiles&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using dotfiles through SSH
&lt;/h3&gt;

&lt;p&gt;This section is for those who login often on remote servers using SSH. When you enter into the remote server, your ZSH, plugins, all of your aliases, completions, color schemes, &lt;em&gt;&lt;strong&gt;NOTHING&lt;/strong&gt; is there&lt;/em&gt;. Everything set to their default values because your remote shell does not have access back to your local configurations. Terrible?. The solution to this, what I would recommend is to write a script that contains everything you want to put on your remote machine and install there whenever you log in. Keep this script separate from your dotfile installation script because you may not want/need to install everything that is inside your dotfiles repository. Also, because you may not want to slow down your remote server login process. You can also use this SSH wrapper tool called &lt;a href="https://github.com/fsquillace/kyrat"&gt;&lt;strong&gt;kyrat&lt;/strong&gt;&lt;/a&gt; that allows you to source local dotfiles on an SSH session to a remote host. It works either from/to a &lt;em&gt;Linux&lt;/em&gt; or &lt;em&gt;OSX&lt;/em&gt; machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting/Helpful Reads
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dotfiles.github.io/"&gt;GitHub ❤ ~/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mywiki.wooledge.org/DotFiles"&gt;Configuring your login sessions with dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/"&gt;Zsh/Bash startup files loading order&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/linux/comments/at05xh/why_do_hidden_files_in_unix_begin_with_a_dot/egyj6lr/"&gt;Why do hidden files in Unix begin with a dot?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://0x46.net/thoughts/2019/02/01/dotfile-madness/"&gt;Dotfiles madness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.com/article/18/9/shell-dotfile"&gt;What a shell dotfile can do for you&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.outcoldman.com/en/archive/2015/09/17/keep-sensitive-data-encrypted-in-dotfiles/"&gt;Keep sensitive data encrypted in dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chrisschuld.com/2019/06/securing-information-in-dotfiles-and-aliases-with-pass/"&gt;Securing Information in dotfiles with Password-Store (pass)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope this post will give you enough push to start with your own dotfiles. Looking forword to your freshly brewed dotfiles. You can reach out to me on &lt;a href="https://twitter.com/jogendrafx"&gt;Twitter&lt;/a&gt; in case of anything. Thanks for the read :)&lt;/p&gt;

</description>
      <category>dotfiles</category>
      <category>unix</category>
      <category>git</category>
    </item>
  </channel>
</rss>
