<?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: Joel Lau</title>
    <description>The latest articles on DEV Community by Joel Lau (@joellau).</description>
    <link>https://dev.to/joellau</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%2F36026%2Ffb3f1591-895a-4e52-b324-908d6a1e43e5.png</url>
      <title>DEV Community: Joel Lau</title>
      <link>https://dev.to/joellau</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joellau"/>
    <language>en</language>
    <item>
      <title>zsh on windows</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Mon, 12 Jun 2023 22:45:33 +0000</pubDate>
      <link>https://dev.to/joellau/zsh-on-windows-55d5</link>
      <guid>https://dev.to/joellau/zsh-on-windows-55d5</guid>
      <description>&lt;h2&gt;
  
  
  End Goal
&lt;/h2&gt;

&lt;p&gt;To build a terminal environment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MSYS2&lt;/li&gt;
&lt;li&gt;Windows Terminal&lt;/li&gt;
&lt;li&gt;Winget&lt;/li&gt;
&lt;li&gt;Zsh&lt;/li&gt;
&lt;li&gt;Oh My Zsh&lt;/li&gt;
&lt;li&gt;Zsh Theme Of Choice: PowerLevel10k&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;

&lt;p&gt;Install Windows Terminal and MSYS2 using CMD or PowerShell:&lt;/p&gt;

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

winget install Microsoft.WindowsTerminal ;
winget install MSYS2.MSYS2 ;


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

&lt;/div&gt;

&lt;p&gt;Open MSYS2 from windows search bar and start installing from there:&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%2Fvy3eye5cmsi8nkebul6y.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%2Fvy3eye5cmsi8nkebul6y.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

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

# Install git and ZSH
pacman -S git zsh ;

# Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" ;

# Generate ~/.zshrc
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc ;


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

&lt;/div&gt;

&lt;p&gt;Create MSYS2 Profile for Windows Terminal (use zsh):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Windows Terminal App&lt;/li&gt;
&lt;li&gt;Open the Settings Pane (CTRL + .)&lt;/li&gt;
&lt;li&gt;Click on Open JSON&lt;/li&gt;
&lt;li&gt;Add this item to profiles.list and change profiles.default to the same guid (&lt;code&gt;{71160544-14d8-4194-af25-d05feeac7233}&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commandline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys -use-full-path -shell zsh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"elevate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{71160544-14d8-4194-af25-d05feeac7233}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:/msys64/msys2.ico"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MSYS / MSYS2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"startingDirectory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:/msys64/home/%USERNAME%"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;Restart Windows Terminal and you should be able to see Zsh running.&lt;/p&gt;

&lt;p&gt;Install ZSH Plugins&lt;/p&gt;

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

# Install Theme: Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# Syntax Highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# Autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions


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

&lt;/div&gt;

&lt;p&gt;In your ~/.zshrc, look for a line that says ZSH_THEME and change it to &lt;/p&gt;

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

ZSH_THEME="powerlevel10k/powerlevel10k"


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

&lt;/div&gt;

&lt;p&gt;In the same file, also modify the list of plugins: (ignore ssh-agent and gpg-agent if you haven't set up git)&lt;/p&gt;

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

plugins=( 
    git
    ssh-agent
    gpg-agent
    zsh-syntax-highlighting
    zsh-autosuggestions
)


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

&lt;/div&gt;

&lt;p&gt;Restart Windows Terminal for the final time and you should be brought to a powerlevel10k's wizard :)&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.msys2.org/docs/terminals/#windows-terminal" rel="noopener noreferrer"&gt;windows terminal / msys2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;oh-my-zsh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md" rel="noopener noreferrer"&gt;zsh-syntax-highlighting#install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md#oh-my-zsh" rel="noopener noreferrer"&gt;zsh-autosuggestions#install&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EDIT: added suggestions from &lt;a href="https://dev.to/psypher1"&gt;James 'Dante' Midzi&lt;/a&gt;'s comments&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setting Up Git (Windows)</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Mon, 01 May 2023 11:29:58 +0000</pubDate>
      <link>https://dev.to/joellau/windows-git-setup-2md4</link>
      <guid>https://dev.to/joellau/windows-git-setup-2md4</guid>
      <description>&lt;p&gt;In this post, I will run through how to properly set your Windows machine up for use with GitHub. We will install the necessary software, configure SSH for authentication, and GPG to sign off our commits.&lt;/p&gt;

&lt;p&gt;Skip to the TL;DR section if you already know what you're doing!&lt;/p&gt;

&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;p&gt;Install git if you haven't already done so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;Microsoft.Git&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;Found&lt;/span&gt; &lt;span class="nf"&gt;Microsoft&lt;/span&gt; &lt;span class="nf"&gt;Git&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Microsoft.Git&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nf"&gt;Version&lt;/span&gt; &lt;span class="nf"&gt;2.40.1.0.0&lt;/span&gt;
&lt;span class="nf"&gt;This&lt;/span&gt; &lt;span class="nf"&gt;application&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;licensed&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="nf"&gt;by&lt;/span&gt; &lt;span class="nf"&gt;its&lt;/span&gt; &lt;span class="nf"&gt;owner.&lt;/span&gt;
&lt;span class="nf"&gt;Microsoft&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="kr"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;responsible&lt;/span&gt; &lt;span class="nf"&gt;for,&lt;/span&gt; &lt;span class="nf"&gt;nor&lt;/span&gt; &lt;span class="nf"&gt;does&lt;/span&gt; &lt;span class="nf"&gt;it&lt;/span&gt; &lt;span class="nf"&gt;grant&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt; &lt;span class="nf"&gt;licenses&lt;/span&gt; &lt;span class="nf"&gt;to,&lt;/span&gt; &lt;span class="nf"&gt;third-party&lt;/span&gt; &lt;span class="nf"&gt;packages.&lt;/span&gt;
&lt;span class="nf"&gt;Downloading&lt;/span&gt; &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/github.com/microsoft/git/releases/download/v2.40.1.vfs.0.0/Git-2.40.1.vfs.0.0-64-bit.exe&lt;/span&gt;
  &lt;span class="nf"&gt;██████████████████████████████&lt;/span&gt;  &lt;span class="mf"&gt;55.2&lt;/span&gt; &lt;span class="nf"&gt;MB&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;55.2&lt;/span&gt; &lt;span class="nf"&gt;MB&lt;/span&gt;
&lt;span class="nf"&gt;Successfully&lt;/span&gt; &lt;span class="nf"&gt;verified&lt;/span&gt; &lt;span class="nf"&gt;installer&lt;/span&gt; &lt;span class="nf"&gt;hash&lt;/span&gt;
&lt;span class="nf"&gt;Starting&lt;/span&gt; &lt;span class="nf"&gt;package&lt;/span&gt; &lt;span class="nf"&gt;install...&lt;/span&gt;
&lt;span class="nf"&gt;Successfully&lt;/span&gt; &lt;span class="nf"&gt;installed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify that the installation is working.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;--version&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;version&lt;/span&gt; &lt;span class="nf"&gt;2.40.1.vfs.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SSH
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ssh-agent
&lt;/h3&gt;

&lt;p&gt;Verify that the &lt;a href="https://en.wikipedia.org/wiki/Ssh-agent"&gt;ssh-agent&lt;/a&gt; is running. It should have been included with your installation of Git (install Git)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Get-Service&lt;/span&gt; &lt;span class="nf"&gt;ssh-agent&lt;/span&gt;

&lt;span class="nf"&gt;Status&lt;/span&gt;   &lt;span class="nf"&gt;Name&lt;/span&gt;               &lt;span class="nf"&gt;DisplayName&lt;/span&gt;
&lt;span class="nf"&gt;------&lt;/span&gt;   &lt;span class="nf"&gt;----&lt;/span&gt;               &lt;span class="nf"&gt;-----------&lt;/span&gt;
&lt;span class="nf"&gt;Running&lt;/span&gt;  &lt;span class="nf"&gt;ssh-agent&lt;/span&gt;          &lt;span class="nf"&gt;OpenSSH&lt;/span&gt; &lt;span class="nf"&gt;Authentication&lt;/span&gt; &lt;span class="nf"&gt;Agent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the case that ssh-agent is &lt;code&gt;Stopped&lt;/code&gt; or &lt;code&gt;Disabled&lt;/code&gt;, follow the advice on this &lt;a href="https://stackoverflow.com/questions/52113738/starting-ssh-agent-on-windows-10-fails-unable-to-start-ssh-agent-service-erro/53606760#53606760"&gt;stackoverflow answer&lt;/a&gt; to run the following on PowerShell on admin mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;Get-Service&lt;/span&gt; &lt;span class="nf"&gt;-Name&lt;/span&gt; &lt;span class="nf"&gt;ssh-agent&lt;/span&gt; &lt;span class="nf"&gt;|&lt;/span&gt; &lt;span class="nf"&gt;Set-Service&lt;/span&gt; &lt;span class="nf"&gt;-StartupType&lt;/span&gt; &lt;span class="nf"&gt;Manual&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SSH Config
&lt;/h3&gt;

&lt;p&gt;Create an SSH key pair.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remember to replace &lt;code&gt;your_email@example.com&lt;/code&gt; with your own email address!&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;ssh-keygen&lt;/span&gt; &lt;span class="nf"&gt;-t&lt;/span&gt; &lt;span class="nf"&gt;ed25519&lt;/span&gt; &lt;span class="nf"&gt;-C&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;

&lt;span class="nf"&gt;Generating&lt;/span&gt; &lt;span class="nf"&gt;public&lt;/span&gt;&lt;span class="nv"&gt;/private&lt;/span&gt; &lt;span class="nf"&gt;ed25519&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;pair.&lt;/span&gt;
&lt;span class="nf"&gt;Enter&lt;/span&gt; &lt;span class="nf"&gt;file&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;which&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;save&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="s"&gt;(C:&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="err"&gt;Use&lt;/span&gt;&lt;span class="se"&gt;r&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="err"&gt;use&lt;/span&gt;&lt;span class="se"&gt;r&lt;/span&gt;&lt;span class="s"&gt;_name/.ssh/id_ed25519)&lt;/span&gt;&lt;span class="nf"&gt;:&lt;/span&gt;
&lt;span class="nf"&gt;Created&lt;/span&gt; &lt;span class="nf"&gt;directory&lt;/span&gt; &lt;span class="nf"&gt;'C:\Users\user_name&lt;/span&gt;&lt;span class="nv"&gt;/.ssh'.&lt;/span&gt;
&lt;span class="nf"&gt;Enter&lt;/span&gt; &lt;span class="nf"&gt;passphrase&lt;/span&gt; &lt;span class="s"&gt;(empty for no passphrase)&lt;/span&gt;&lt;span class="nf"&gt;:&lt;/span&gt;
&lt;span class="nf"&gt;Enter&lt;/span&gt; &lt;span class="nf"&gt;same&lt;/span&gt; &lt;span class="nf"&gt;passphrase&lt;/span&gt; &lt;span class="nf"&gt;again:&lt;/span&gt;
&lt;span class="nf"&gt;Your&lt;/span&gt; &lt;span class="nf"&gt;identification&lt;/span&gt; &lt;span class="nf"&gt;has&lt;/span&gt; &lt;span class="nf"&gt;been&lt;/span&gt; &lt;span class="nf"&gt;saved&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;C:\Users\user_name&lt;/span&gt;&lt;span class="nv"&gt;/.ssh/id_ed25519.&lt;/span&gt;
&lt;span class="nf"&gt;Your&lt;/span&gt; &lt;span class="nf"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;has&lt;/span&gt; &lt;span class="nf"&gt;been&lt;/span&gt; &lt;span class="nf"&gt;saved&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;C:\Users\user_name&lt;/span&gt;&lt;span class="nv"&gt;/.ssh/id_ed25519.pub.&lt;/span&gt;
&lt;span class="nf"&gt;The&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;fingerprint&lt;/span&gt; &lt;span class="nf"&gt;is:&lt;/span&gt;
&lt;span class="nf"&gt;SHA256:JDCPuYyjvbBApibR62OhJcBag&lt;/span&gt;&lt;span class="nv"&gt;/PGLbeunxYYD0BFc+w&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;
&lt;span class="nf"&gt;The&lt;/span&gt; &lt;span class="nf"&gt;key's&lt;/span&gt; &lt;span class="nf"&gt;randomart&lt;/span&gt; &lt;span class="nf"&gt;image&lt;/span&gt; &lt;span class="nf"&gt;is:&lt;/span&gt;
&lt;span class="nf"&gt;+--&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ED25519&lt;/span&gt; &lt;span class="mf"&gt;256&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;--+&lt;/span&gt;
&lt;span class="nf"&gt;|..o++.&lt;/span&gt;           &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|.&lt;/span&gt;   &lt;span class="nf"&gt;oB&lt;/span&gt;           &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|.o&lt;/span&gt;  &lt;span class="nf"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;o&lt;/span&gt; &lt;span class="nf"&gt;.&lt;/span&gt;        &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|+o=o&lt;/span&gt; &lt;span class="nf"&gt;E&lt;/span&gt; &lt;span class="nf"&gt;o&lt;/span&gt;         &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|+B+Bo&lt;/span&gt;   &lt;span class="nf"&gt;S&lt;/span&gt;        &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|*+Oo=&lt;/span&gt;            &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|**o+&lt;/span&gt; &lt;span class="nf"&gt;o&lt;/span&gt;           &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|=+o.o.&lt;/span&gt;           &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;|..+*+&lt;/span&gt;            &lt;span class="nf"&gt;|&lt;/span&gt;
&lt;span class="nf"&gt;+----&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;SHA256&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;-----+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to ssh-agent. You will need to do this whenever you first start up your computer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;ssh-add&lt;/span&gt; &lt;span class="nf"&gt;'C:\Users\user_name\.ssh\id_ed25519'&lt;/span&gt;
&lt;span class="nf"&gt;Identity&lt;/span&gt; &lt;span class="nf"&gt;added:&lt;/span&gt; &lt;span class="nf"&gt;C:\Users\user_name\.ssh\id_ed25519&lt;/span&gt; &lt;span class="s"&gt;(your_email@example.com)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Show your public key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;cat&lt;/span&gt; &lt;span class="nf"&gt;C:\Users\user_name&lt;/span&gt;&lt;span class="nv"&gt;/.ssh/id_ed25519.pub&lt;/span&gt;
&lt;span class="nf"&gt;ssh-ed25519&lt;/span&gt; &lt;span class="nf"&gt;AAAAC3NzaC1lZDI1NTE5AAAAIGy2VTtWVdYHlxCfnh8Me3V++wZBBxcnN0QiwkWrFbMX&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the terminal window open, you will need in the next steps.&lt;/p&gt;

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

&lt;p&gt;Get to your personal GitHub &lt;em&gt;Key&lt;/em&gt; settings by either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click this link: &lt;a href="https://github.com/settings/ssh/new"&gt;https://github.com/settings/ssh/new&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Navigate to github &amp;gt; profile picture (top right) &amp;gt; Settings &amp;gt; SSH and GPG keys &amp;gt; New SSH Key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x2vup-a2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kugkwezws88854b1j4z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x2vup-a2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kugkwezws88854b1j4z.png" alt="Filled 'Add SSH Key' form on Github" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the form with the necessary information before submitting the form. You should see the new entry on the keys page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MksqD0tH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j5p9xss2iczezhswdhrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MksqD0tH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j5p9xss2iczezhswdhrv.png" alt="Image description" width="760" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GPG
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installing
&lt;/h3&gt;

&lt;p&gt;Install GPG if you don't already have it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;GnuPG.GnuPG&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify that the &lt;a href="https://en.wikipedia.org/wiki/GNU_Privacy_Guard"&gt;GPG&lt;/a&gt; is running and that you're running version &amp;gt; 2.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--version&lt;/span&gt;

&lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="s"&gt;(GnuPG)&lt;/span&gt; &lt;span class="nf"&gt;2.4.1&lt;/span&gt;
&lt;span class="nf"&gt;libgcrypt&lt;/span&gt; &lt;span class="nf"&gt;1.10.2&lt;/span&gt;
&lt;span class="nf"&gt;Copyright&lt;/span&gt; &lt;span class="s"&gt;(C)&lt;/span&gt; &lt;span class="mf"&gt;2023&lt;/span&gt; &lt;span class="nf"&gt;g10&lt;/span&gt; &lt;span class="nf"&gt;Code&lt;/span&gt; &lt;span class="nf"&gt;GmbH&lt;/span&gt;
&lt;span class="nf"&gt;License&lt;/span&gt; &lt;span class="nf"&gt;GNU&lt;/span&gt; &lt;span class="nf"&gt;GPL-3.0-or-later&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/gnu.org/licenses/gpl.html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nf"&gt;This&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;free&lt;/span&gt; &lt;span class="nf"&gt;software:&lt;/span&gt; &lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="nf"&gt;are&lt;/span&gt; &lt;span class="nf"&gt;free&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;redistribute&lt;/span&gt; &lt;span class="nf"&gt;it.&lt;/span&gt;
&lt;span class="nf"&gt;There&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;NO&lt;/span&gt; &lt;span class="nf"&gt;WARRANTY,&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;extent&lt;/span&gt; &lt;span class="nf"&gt;permitted&lt;/span&gt; &lt;span class="nf"&gt;by&lt;/span&gt; &lt;span class="nf"&gt;law.&lt;/span&gt;

&lt;span class="nf"&gt;Home:&lt;/span&gt; &lt;span class="nf"&gt;C:\Users\user_name\AppData\Roaming\gnupg&lt;/span&gt;
&lt;span class="nf"&gt;Supported&lt;/span&gt; &lt;span class="nf"&gt;algorithms:&lt;/span&gt;
&lt;span class="nf"&gt;Pubkey:&lt;/span&gt; &lt;span class="nf"&gt;RSA,&lt;/span&gt; &lt;span class="nf"&gt;ELG,&lt;/span&gt; &lt;span class="nf"&gt;DSA,&lt;/span&gt; &lt;span class="nf"&gt;ECDH,&lt;/span&gt; &lt;span class="nf"&gt;ECDSA,&lt;/span&gt; &lt;span class="nf"&gt;EDDSA&lt;/span&gt;
&lt;span class="nf"&gt;Cipher:&lt;/span&gt; &lt;span class="nf"&gt;IDEA,&lt;/span&gt; &lt;span class="nf"&gt;3DES,&lt;/span&gt; &lt;span class="nf"&gt;CAST5,&lt;/span&gt; &lt;span class="nf"&gt;BLOWFISH,&lt;/span&gt; &lt;span class="nf"&gt;AES,&lt;/span&gt; &lt;span class="nf"&gt;AES192,&lt;/span&gt; &lt;span class="nf"&gt;AES256,&lt;/span&gt; &lt;span class="nf"&gt;TWOFISH,&lt;/span&gt;
        &lt;span class="nf"&gt;CAMELLIA128,&lt;/span&gt; &lt;span class="nf"&gt;CAMELLIA192,&lt;/span&gt; &lt;span class="nf"&gt;CAMELLIA256&lt;/span&gt;
&lt;span class="nf"&gt;Hash:&lt;/span&gt; &lt;span class="nf"&gt;SHA1,&lt;/span&gt; &lt;span class="nf"&gt;RIPEMD160,&lt;/span&gt; &lt;span class="nf"&gt;SHA256,&lt;/span&gt; &lt;span class="nf"&gt;SHA384,&lt;/span&gt; &lt;span class="nf"&gt;SHA512,&lt;/span&gt; &lt;span class="nf"&gt;SHA224&lt;/span&gt;
&lt;span class="nf"&gt;Compression:&lt;/span&gt; &lt;span class="nf"&gt;Uncompressed,&lt;/span&gt; &lt;span class="nf"&gt;ZIP,&lt;/span&gt; &lt;span class="nf"&gt;ZLIB,&lt;/span&gt; &lt;span class="nf"&gt;BZIP2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  GPG Config
&lt;/h3&gt;

&lt;p&gt;Generate a new key by entering &lt;code&gt;gpg --full-generate-key&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I recommend using the default settings by hitting enter at each step and picking a secure password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--full-generate-key&lt;/span&gt;

&lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="s"&gt;(GnuPG)&lt;/span&gt; &lt;span class="nf"&gt;2.4.1;&lt;/span&gt; &lt;span class="nf"&gt;Copyright&lt;/span&gt; &lt;span class="s"&gt;(C)&lt;/span&gt; &lt;span class="mf"&gt;2023&lt;/span&gt; &lt;span class="nf"&gt;g10&lt;/span&gt; &lt;span class="nf"&gt;Code&lt;/span&gt; &lt;span class="nf"&gt;GmbH&lt;/span&gt;
&lt;span class="nf"&gt;This&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;free&lt;/span&gt; &lt;span class="nf"&gt;software:&lt;/span&gt; &lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="nf"&gt;are&lt;/span&gt; &lt;span class="nf"&gt;free&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;redistribute&lt;/span&gt; &lt;span class="nf"&gt;it.&lt;/span&gt;
&lt;span class="nf"&gt;There&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;NO&lt;/span&gt; &lt;span class="nf"&gt;WARRANTY,&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;extent&lt;/span&gt; &lt;span class="nf"&gt;permitted&lt;/span&gt; &lt;span class="nf"&gt;by&lt;/span&gt; &lt;span class="nf"&gt;law.&lt;/span&gt;

&lt;span class="nf"&gt;Please&lt;/span&gt; &lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="nf"&gt;what&lt;/span&gt; &lt;span class="nf"&gt;kind&lt;/span&gt; &lt;span class="nf"&gt;of&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="nf"&gt;want:&lt;/span&gt;
   &lt;span class="s"&gt;(1)&lt;/span&gt; &lt;span class="nf"&gt;RSA&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;RSA&lt;/span&gt;
   &lt;span class="s"&gt;(2)&lt;/span&gt; &lt;span class="nf"&gt;DSA&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;Elgamal&lt;/span&gt;
   &lt;span class="s"&gt;(3)&lt;/span&gt; &lt;span class="nf"&gt;DSA&lt;/span&gt; &lt;span class="s"&gt;(sign only)&lt;/span&gt;
   &lt;span class="s"&gt;(4)&lt;/span&gt; &lt;span class="nf"&gt;RSA&lt;/span&gt; &lt;span class="s"&gt;(sign only)&lt;/span&gt;
   &lt;span class="s"&gt;(9)&lt;/span&gt; &lt;span class="nf"&gt;ECC&lt;/span&gt; &lt;span class="s"&gt;(sign and encrypt)&lt;/span&gt; &lt;span class="nf"&gt;*default*&lt;/span&gt;
  &lt;span class="s"&gt;(10)&lt;/span&gt; &lt;span class="nf"&gt;ECC&lt;/span&gt; &lt;span class="s"&gt;(sign only)&lt;/span&gt;
  &lt;span class="s"&gt;(14)&lt;/span&gt; &lt;span class="nf"&gt;Existing&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;from&lt;/span&gt; &lt;span class="nf"&gt;card&lt;/span&gt;
&lt;span class="nf"&gt;Your&lt;/span&gt; &lt;span class="nf"&gt;selection?&lt;/span&gt;
&lt;span class="nf"&gt;Please&lt;/span&gt; &lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="nf"&gt;which&lt;/span&gt; &lt;span class="nf"&gt;elliptic&lt;/span&gt; &lt;span class="nf"&gt;curve&lt;/span&gt; &lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="nf"&gt;want:&lt;/span&gt;
   &lt;span class="s"&gt;(1)&lt;/span&gt; &lt;span class="nf"&gt;Curve&lt;/span&gt; &lt;span class="mf"&gt;25519&lt;/span&gt; &lt;span class="nf"&gt;*default*&lt;/span&gt;
   &lt;span class="s"&gt;(4)&lt;/span&gt; &lt;span class="nf"&gt;NIST&lt;/span&gt; &lt;span class="nf"&gt;P-384&lt;/span&gt;
   &lt;span class="s"&gt;(6)&lt;/span&gt; &lt;span class="nf"&gt;Brainpool&lt;/span&gt; &lt;span class="nf"&gt;P-256&lt;/span&gt;
&lt;span class="nf"&gt;Your&lt;/span&gt; &lt;span class="nf"&gt;selection?&lt;/span&gt;
&lt;span class="nf"&gt;Please&lt;/span&gt; &lt;span class="nf"&gt;specify&lt;/span&gt; &lt;span class="nf"&gt;how&lt;/span&gt; &lt;span class="nf"&gt;long&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;should&lt;/span&gt; &lt;span class="nf"&gt;be&lt;/span&gt; &lt;span class="nf"&gt;valid.&lt;/span&gt;
         &lt;span class="mf"&gt;0&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;does&lt;/span&gt; &lt;span class="kr"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;expire&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;n&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;  &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;expires&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;n&lt;/span&gt; &lt;span class="nf"&gt;days&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;n&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;w&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;expires&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;n&lt;/span&gt; &lt;span class="nf"&gt;weeks&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;n&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;m&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;expires&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;n&lt;/span&gt; &lt;span class="nf"&gt;months&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;n&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;y&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;expires&lt;/span&gt; &lt;span class="nf"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;n&lt;/span&gt; &lt;span class="nf"&gt;years&lt;/span&gt;
&lt;span class="nf"&gt;Key&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;valid&lt;/span&gt; &lt;span class="nf"&gt;for?&lt;/span&gt; &lt;span class="s"&gt;(0)&lt;/span&gt;
&lt;span class="nf"&gt;Key&lt;/span&gt; &lt;span class="nf"&gt;does&lt;/span&gt; &lt;span class="kr"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;expire&lt;/span&gt; &lt;span class="nf"&gt;at&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;
&lt;span class="nf"&gt;Is&lt;/span&gt; &lt;span class="nf"&gt;this&lt;/span&gt; &lt;span class="nf"&gt;correct?&lt;/span&gt; &lt;span class="s"&gt;(y/N)&lt;/span&gt; &lt;span class="nf"&gt;y&lt;/span&gt;

&lt;span class="nf"&gt;GnuPG&lt;/span&gt; &lt;span class="nf"&gt;needs&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;construct&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;user&lt;/span&gt; &lt;span class="nf"&gt;ID&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;identify&lt;/span&gt; &lt;span class="nf"&gt;your&lt;/span&gt; &lt;span class="nf"&gt;key.&lt;/span&gt;

&lt;span class="nf"&gt;Real&lt;/span&gt; &lt;span class="nf"&gt;name:&lt;/span&gt; &lt;span class="nf"&gt;Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau&lt;/span&gt;
&lt;span class="nf"&gt;Email&lt;/span&gt; &lt;span class="nf"&gt;address:&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;
&lt;span class="nf"&gt;Comment:&lt;/span&gt; &lt;span class="nf"&gt;joel's&lt;/span&gt; &lt;span class="nf"&gt;desktop&lt;/span&gt; &lt;span class="nf"&gt;pc&lt;/span&gt;
&lt;span class="nf"&gt;You&lt;/span&gt; &lt;span class="nf"&gt;selected&lt;/span&gt; &lt;span class="nf"&gt;this&lt;/span&gt; &lt;span class="nf"&gt;USER-ID:&lt;/span&gt;
    &lt;span class="nf"&gt;"Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau&lt;/span&gt; &lt;span class="s"&gt;(joel's desktop pc)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;"&lt;/span&gt;

&lt;span class="nf"&gt;Change&lt;/span&gt; &lt;span class="s"&gt;(N)&lt;/span&gt;&lt;span class="nf"&gt;ame,&lt;/span&gt; &lt;span class="s"&gt;(C)&lt;/span&gt;&lt;span class="nf"&gt;omment,&lt;/span&gt; &lt;span class="s"&gt;(E)&lt;/span&gt;&lt;span class="nf"&gt;mail&lt;/span&gt; &lt;span class="kr"&gt;or&lt;/span&gt; &lt;span class="s"&gt;(O)&lt;/span&gt;&lt;span class="nf"&gt;kay&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="s"&gt;(Q)&lt;/span&gt;&lt;span class="nf"&gt;uit?&lt;/span&gt; &lt;span class="nf"&gt;O&lt;/span&gt;
&lt;span class="nf"&gt;We&lt;/span&gt; &lt;span class="nf"&gt;need&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;generate&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;lot&lt;/span&gt; &lt;span class="nf"&gt;of&lt;/span&gt; &lt;span class="nf"&gt;random&lt;/span&gt; &lt;span class="nf"&gt;bytes.&lt;/span&gt; &lt;span class="nf"&gt;It&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;good&lt;/span&gt; &lt;span class="nf"&gt;idea&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;perform&lt;/span&gt;
&lt;span class="nf"&gt;some&lt;/span&gt; &lt;span class="nf"&gt;other&lt;/span&gt; &lt;span class="nf"&gt;action&lt;/span&gt; &lt;span class="s"&gt;(type on the keyboard, move the mouse, utilize the
disks)&lt;/span&gt; &lt;span class="nf"&gt;during&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;prime&lt;/span&gt; &lt;span class="nf"&gt;generation;&lt;/span&gt; &lt;span class="nf"&gt;this&lt;/span&gt; &lt;span class="nf"&gt;gives&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;random&lt;/span&gt; &lt;span class="nf"&gt;number&lt;/span&gt;
&lt;span class="nf"&gt;generator&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;better&lt;/span&gt; &lt;span class="nf"&gt;chance&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;gain&lt;/span&gt; &lt;span class="nf"&gt;enough&lt;/span&gt; &lt;span class="nf"&gt;entropy.&lt;/span&gt;
&lt;span class="nf"&gt;We&lt;/span&gt; &lt;span class="nf"&gt;need&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;generate&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;lot&lt;/span&gt; &lt;span class="nf"&gt;of&lt;/span&gt; &lt;span class="nf"&gt;random&lt;/span&gt; &lt;span class="nf"&gt;bytes.&lt;/span&gt; &lt;span class="nf"&gt;It&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;good&lt;/span&gt; &lt;span class="nf"&gt;idea&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;perform&lt;/span&gt;
&lt;span class="nf"&gt;some&lt;/span&gt; &lt;span class="nf"&gt;other&lt;/span&gt; &lt;span class="nf"&gt;action&lt;/span&gt; &lt;span class="s"&gt;(type on the keyboard, move the mouse, utilize the
disks)&lt;/span&gt; &lt;span class="nf"&gt;during&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;prime&lt;/span&gt; &lt;span class="nf"&gt;generation;&lt;/span&gt; &lt;span class="nf"&gt;this&lt;/span&gt; &lt;span class="nf"&gt;gives&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;random&lt;/span&gt; &lt;span class="nf"&gt;number&lt;/span&gt;
&lt;span class="nf"&gt;generator&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt; &lt;span class="nf"&gt;better&lt;/span&gt; &lt;span class="nf"&gt;chance&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;gain&lt;/span&gt; &lt;span class="nf"&gt;enough&lt;/span&gt; &lt;span class="nf"&gt;entropy.&lt;/span&gt;
&lt;span class="nf"&gt;gpg:&lt;/span&gt; &lt;span class="nf"&gt;C:\\Users\\user_name\\AppData\\Roaming\\gnupg\\trustdb.gpg:&lt;/span&gt; &lt;span class="nf"&gt;trustdb&lt;/span&gt; &lt;span class="nf"&gt;created&lt;/span&gt;
&lt;span class="nf"&gt;gpg:&lt;/span&gt; &lt;span class="nf"&gt;directory&lt;/span&gt; &lt;span class="nf"&gt;'C:\\Users\\user_name\\AppData\\Roaming\\gnupg\\openpgp-revocs.d'&lt;/span&gt; &lt;span class="nf"&gt;created&lt;/span&gt;
&lt;span class="nf"&gt;gpg:&lt;/span&gt; &lt;span class="nf"&gt;revocation&lt;/span&gt; &lt;span class="nf"&gt;certificate&lt;/span&gt; &lt;span class="nf"&gt;stored&lt;/span&gt; &lt;span class="nf"&gt;as&lt;/span&gt; &lt;span class="nf"&gt;'C:\\Users\\user_name\\AppData\\Roaming\\gnupg\\openpgp-revocs.d\\DD2DB924314496969FFF1FC4FF7A0A2FE0F81BE3.rev'&lt;/span&gt;
&lt;span class="nf"&gt;public&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;secret&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="nf"&gt;created&lt;/span&gt; &lt;span class="kr"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;signed.&lt;/span&gt;

&lt;span class="nf"&gt;pub&lt;/span&gt;   &lt;span class="nf"&gt;ed25519&lt;/span&gt; &lt;span class="nf"&gt;2023-05-01&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;SC&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="nf"&gt;DD2DB924314496969FFF1FC4FF7A0A2FE0F81BE3&lt;/span&gt;
&lt;span class="nf"&gt;uid&lt;/span&gt;                      &lt;span class="nf"&gt;Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau&lt;/span&gt; &lt;span class="s"&gt;(joel's desktop pc)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;sub&lt;/span&gt;   &lt;span class="nf"&gt;cv25519&lt;/span&gt; &lt;span class="nf"&gt;2023-05-01&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Show the list of keys&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--list-secret-keys&lt;/span&gt; &lt;span class="nf"&gt;--keyid-format=long&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;keyboxd&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;---------&lt;/span&gt;
&lt;span class="nf"&gt;sec&lt;/span&gt;   &lt;span class="nf"&gt;ed25519&lt;/span&gt;&lt;span class="nv"&gt;/FF7A0A2FE0F81BE3&lt;/span&gt; &lt;span class="nf"&gt;2023-05-01&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;SC&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="nf"&gt;DD2DB924314496969FFF1FC4FF7A0A2FE0F81BE3&lt;/span&gt;
&lt;span class="nf"&gt;uid&lt;/span&gt;                 &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ultimate&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nf"&gt;Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau&lt;/span&gt; &lt;span class="s"&gt;(joel's desktop pc)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;your_email@example.com&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nf"&gt;ssb&lt;/span&gt;   &lt;span class="nf"&gt;cv25519&lt;/span&gt;&lt;span class="nv"&gt;/81D580E5588F5C57&lt;/span&gt; &lt;span class="nf"&gt;2023-05-01&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Print the key id you'd like to use&lt;/p&gt;

&lt;p&gt;&lt;em&gt;the key ID comes after the protocol name (&lt;code&gt;FF7A0A2FE0F81BE3&lt;/code&gt;)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--armor&lt;/span&gt; &lt;span class="nf"&gt;--export&lt;/span&gt; &lt;span class="nf"&gt;KEY_ID_HERE&lt;/span&gt;
&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;e.g.&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--armor&lt;/span&gt; &lt;span class="nf"&gt;--export&lt;/span&gt; &lt;span class="nf"&gt;FF7A0A2FE0F81BE3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the terminal window open, you will need in the next steps.&lt;/p&gt;

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

&lt;p&gt;Get to your personal GitHub &lt;em&gt;Key&lt;/em&gt; settings by either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click this link: &lt;a href="https://github.com/settings/gpg/new"&gt;https://github.com/settings/gpg/new&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Navigate to github &amp;gt; profile picture (top right) &amp;gt; Settings &amp;gt; SSH and GPG keys &amp;gt; New GPG Key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kacvOhM8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7efyhvc1vwemup9lea5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kacvOhM8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7efyhvc1vwemup9lea5.png" alt="Image description" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the form with the necessary information before submitting the form. You should see the new entry on the keys page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGtiUdNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mar5t5ptbaupmqcfeybg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGtiUdNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mar5t5ptbaupmqcfeybg.png" alt="Image description" width="765" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git (Again)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.name&lt;/span&gt; &lt;span class="nf"&gt;"Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau"&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;              &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;user&lt;/span&gt; &lt;span class="nf"&gt;name&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.email&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt; &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;email&lt;/span&gt; &lt;span class="nf"&gt;address&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;core.editor&lt;/span&gt; &lt;span class="nf"&gt;"code&lt;/span&gt; &lt;span class="nf"&gt;--wait"&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;         &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;VSCode&lt;/span&gt; &lt;span class="nf"&gt;as&lt;/span&gt; &lt;span class="nf"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt; &lt;span class="nf"&gt;editor&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;--unset&lt;/span&gt; &lt;span class="nf"&gt;gpg.format&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;                &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;unset&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt; &lt;span class="nf"&gt;previous&lt;/span&gt; &lt;span class="nf"&gt;GPG&lt;/span&gt; &lt;span class="nf"&gt;configuration&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;commit.gpgsign&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;               &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;sign&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt; &lt;span class="nf"&gt;commits&lt;/span&gt; &lt;span class="nf"&gt;using&lt;/span&gt; &lt;span class="nf"&gt;GPG&lt;/span&gt;
 &lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;gpg.program&lt;/span&gt; &lt;span class="nf"&gt;'C:\Program&lt;/span&gt; &lt;span class="nf"&gt;Files&lt;/span&gt; &lt;span class="s"&gt;(x86)&lt;/span&gt;&lt;span class="nf"&gt;\gnupg\bin\gpg.exe'&lt;/span&gt;                                &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;tell&lt;/span&gt; &lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;where&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;find&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.signingkey&lt;/span&gt; &lt;span class="nf"&gt;KEY_ID_HERE&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;     &lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;signing&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="s"&gt;(replace `KEY_ID_HERE`)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the resulting gitconfig file should look at follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;email&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;joel.lau@protonmail.com&lt;/span&gt;
    &lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau&lt;/span&gt;
    &lt;span class="nf"&gt;signingkey&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;977D5B2A1AA15946&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;defaultBranch&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;core&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;editor&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;code&lt;/span&gt; &lt;span class="nf"&gt;--wait&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;gpg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;program&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;C:\\Program&lt;/span&gt; &lt;span class="nf"&gt;Files&lt;/span&gt; &lt;span class="s"&gt;(x86)&lt;/span&gt;&lt;span class="nf"&gt;\\gnupg\\bin\\gpg.exe&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;gpgsign&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;NOTE:&lt;/span&gt; &lt;span class="nf"&gt;remember&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;use&lt;/span&gt; &lt;span class="nf"&gt;PowerShell&lt;/span&gt; &lt;span class="nf"&gt;on&lt;/span&gt; &lt;span class="nf"&gt;admin&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;git&lt;/span&gt;
&lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;Microsoft.Git&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nf"&gt;start&lt;/span&gt; &lt;span class="nf"&gt;ssh-agent&lt;/span&gt;
&lt;span class="nf"&gt;Get-Service&lt;/span&gt; &lt;span class="nf"&gt;-Name&lt;/span&gt; &lt;span class="nf"&gt;ssh-agent&lt;/span&gt; &lt;span class="nf"&gt;|&lt;/span&gt; &lt;span class="nf"&gt;Set-Service&lt;/span&gt; &lt;span class="nf"&gt;-StartupType&lt;/span&gt; &lt;span class="nf"&gt;Manual&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nf"&gt;create&lt;/span&gt; &lt;span class="nf"&gt;ssh&lt;/span&gt; &lt;span class="nf"&gt;keys&lt;/span&gt; &lt;span class="nf"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/github.com/settings/keys&lt;/span&gt;
&lt;span class="nf"&gt;ssh-keygen&lt;/span&gt; &lt;span class="nf"&gt;-t&lt;/span&gt; &lt;span class="nf"&gt;ed25519&lt;/span&gt; &lt;span class="nf"&gt;-C&lt;/span&gt; &lt;span class="nf"&gt;"your_email@example.com"&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nb"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;keys&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;ssh-agent&lt;/span&gt;
 &lt;span class="nf"&gt;ssh-add&lt;/span&gt; &lt;span class="nf"&gt;~&lt;/span&gt;&lt;span class="nv"&gt;/.ssh/id_ed25519&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt;
&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;NOTE:&lt;/span&gt; &lt;span class="nf"&gt;remember&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;'C:\Program&lt;/span&gt; &lt;span class="nf"&gt;Files&lt;/span&gt; &lt;span class="s"&gt;(x86)&lt;/span&gt;&lt;span class="nf"&gt;\gnupg\bin'&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;path&lt;/span&gt;
&lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;GnuPG.GnuPG&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nf"&gt;create&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;keys&lt;/span&gt; &lt;span class="nf"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/github.com/settings/keys&lt;/span&gt;
&lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--full-generate-key&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nb"&gt;show&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt; &lt;span class="nf"&gt;of&lt;/span&gt; &lt;span class="nf"&gt;keys&lt;/span&gt;
&lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--list-secret-keys&lt;/span&gt; &lt;span class="nf"&gt;--keyid-format=long&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt;     &lt;span class="nb"&gt;show&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="s"&gt;(the text after `sec   4096R/`)&lt;/span&gt;
&lt;span class="nf"&gt;gpg&lt;/span&gt; &lt;span class="nf"&gt;--armor&lt;/span&gt; &lt;span class="nf"&gt;--export&lt;/span&gt; &lt;span class="nf"&gt;KEY_ID_HERE&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;user&lt;/span&gt; &lt;span class="nf"&gt;name&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.name&lt;/span&gt; &lt;span class="nf"&gt;"Joel&lt;/span&gt; &lt;span class="nf"&gt;Lau"&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;email&lt;/span&gt; &lt;span class="nf"&gt;address&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.email&lt;/span&gt; &lt;span class="nf"&gt;your_email@example.com&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;VSCode&lt;/span&gt; &lt;span class="nf"&gt;as&lt;/span&gt; &lt;span class="nf"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt; &lt;span class="nf"&gt;editor&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;core.editor&lt;/span&gt; &lt;span class="nf"&gt;"code&lt;/span&gt; &lt;span class="nf"&gt;--wait"&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;unset&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt; &lt;span class="nf"&gt;previous&lt;/span&gt; &lt;span class="nf"&gt;GPG&lt;/span&gt; &lt;span class="nf"&gt;configuration&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;--unset&lt;/span&gt; &lt;span class="nf"&gt;gpg.format&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;sign&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt; &lt;span class="nf"&gt;commits&lt;/span&gt; &lt;span class="nf"&gt;using&lt;/span&gt; &lt;span class="nf"&gt;GPG&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;commit.gpgsign&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;tell&lt;/span&gt; &lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;where&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;find&lt;/span&gt; &lt;span class="nf"&gt;gpg&lt;/span&gt;
 &lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;gpg.program&lt;/span&gt; &lt;span class="nf"&gt;'C:\Program&lt;/span&gt; &lt;span class="nf"&gt;Files&lt;/span&gt; &lt;span class="s"&gt;(x86)&lt;/span&gt;&lt;span class="nf"&gt;\gnupg\bin\gpg.exe'&lt;/span&gt;

&lt;span class="nf"&gt;#&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;the&lt;/span&gt; &lt;span class="nf"&gt;signing&lt;/span&gt; &lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="s"&gt;(replace `KEY_ID_HERE`)&lt;/span&gt;
&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="nf"&gt;--global&lt;/span&gt; &lt;span class="nf"&gt;user.signingkey&lt;/span&gt; &lt;span class="nf"&gt;KEY_ID_HERE&lt;/span&gt; &lt;span class="nf"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/package-manager/winget/"&gt;winget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitforwindows.org/"&gt;Git for Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gnupg.org/"&gt;GPG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh"&gt;Github's Documentation on SSH Keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/authentication/managing-commit-signature-verification"&gt;Github's Documentation on GPG Keys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>windows</category>
      <category>config</category>
    </item>
    <item>
      <title>5 Must-Reads for the Junior Developer</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Sun, 15 May 2022 06:01:28 +0000</pubDate>
      <link>https://dev.to/joellau/4-must-reads-for-the-junior-developer-3d72</link>
      <guid>https://dev.to/joellau/4-must-reads-for-the-junior-developer-3d72</guid>
      <description>&lt;p&gt;A career as a Software Engineer can be confusing, moreso if you're new. Here are 5 books to help make sense of this complex problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--laPVuIV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iweilykdtfl9b99k4cq9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--laPVuIV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iweilykdtfl9b99k4cq9.png" alt="Image description" width="400" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. So Good They Can't Ignore You - Cal Newport
&lt;/h2&gt;

&lt;p&gt;The only book on this list not strictly catered for Software Engineers. Cal Newport writes about the mindset of taking control of your life, providing research-backed evidence for learning to love what you do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--35jnHneO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkf0zih1bf7rrt2ms4c9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--35jnHneO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkf0zih1bf7rrt2ms4c9.png" alt="Image description" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Complete Software Developer's Career Guide - John Sonmez
&lt;/h2&gt;

&lt;p&gt;A long, but comprehensive read that covers many of the strategies and techniques useful to planning your career. The audio book was narrated by John Sonmez (the author) himself and is easy to consume on your commute. The book covers many questions you might face such as which language to learn, how to fill gaps in your technical knowledge "softer" topics such as what to wear to interviews.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kPcaLlit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r4heoo727z2jgt3hmqfi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kPcaLlit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r4heoo727z2jgt3hmqfi.png" alt="Image description" width="250" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Pragmatic Programmer - David Thomas, Andrew Hunt
&lt;/h2&gt;

&lt;p&gt;Viewed in high regard by many and one of the top recommendations on any Software Engineer's reading list. The Pragmatic Programmer highlights many common pitfalls and best practices that will help you approach technical challenges. I reread this book every few years and it brings me new insight proves to be a gem every time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KIASxpv3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axydxhs3icrrudzl0gb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KIASxpv3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axydxhs3icrrudzl0gb6.png" alt="Image description" width="360" height="452"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Grokking Algorithms
&lt;/h2&gt;

&lt;p&gt;Grokking Algorithms is a very accessible way to learn data structures and algorithms. While it isn't the most comprehensive, it certainly makes it more enjoyable, especially if you do not have a background in Computer Science! I would recommend using this book as an introduction into more formal studies on the subject.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vvX-9-l7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ta4avfph6nveftu8wcjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vvX-9-l7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ta4avfph6nveftu8wcjt.png" alt="Image description" width="664" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Cracking the Coding Interview
&lt;/h2&gt;

&lt;p&gt;Probably the longest book I own. Similar to The Complete Software Developer's Career Guide - John Sonmez in scope, but with a focus on the technical aspect job hunt and how to prepare for it. Covers topics such as questions you should ask after an interview, and exerts of important data structures and algorithms.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setting Up a Mac in 2022</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Sat, 08 Jan 2022 07:17:58 +0000</pubDate>
      <link>https://dev.to/joellau/setting-up-a-mac-in-2022-1ci2</link>
      <guid>https://dev.to/joellau/setting-up-a-mac-in-2022-1ci2</guid>
      <description>&lt;h2&gt;
  
  
  System Preferences
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Disable "Natural" Mouse Scoll Direction

&lt;ul&gt;
&lt;li&gt;System Preferences &amp;gt; Mouse &amp;gt; Uncheck Scroll Direction: Natural&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Use function keys without fn key

&lt;ul&gt;
&lt;li&gt;System Preferences &amp;gt; Keyboard &amp;gt; Check Use F1, F2 etc. keys as standard function keys&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Remove text replacements

&lt;ul&gt;
&lt;li&gt;System Preferences &amp;gt; Keyboard &amp;gt; Text &amp;gt; Remove “omw”, Uncheck everything on the right&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Remove all items from dock

&lt;ul&gt;
&lt;li&gt;Right-click app icon &amp;gt; Options &amp;gt; Uncheck keep on dock&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Hide dock

&lt;ul&gt;
&lt;li&gt;Right-click on empty space on the dock &amp;gt; turn hiding on&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Show file extensions

&lt;ul&gt;
&lt;li&gt;Open finder (open any directory) &amp;gt; cmd + , to open settings &amp;gt; advanced tab &amp;gt; check show all filename extensions&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Homebrew (Package Manager)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;follow instructions on brew's &lt;a href="https://brew.sh/"&gt;home page&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;run the following in the terminal:&lt;/li&gt;
&lt;li&gt; &lt;code&gt;/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install and Replace Default Applications
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Section TL;DR
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;alfred iterm2 brave-browser visual-studio-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Replace Spotlight Search with Alfred 4
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Alfred is an ... app which boosts your efficiency ...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://www.alfredapp.com/"&gt;Alfred 4&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install alfred&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Change Spotlight's default hotkeys

&lt;ul&gt;
&lt;li&gt;Open Spotlight&lt;/li&gt;
&lt;li&gt;default: cmd + space&lt;/li&gt;
&lt;li&gt;Open Spotlight-specific preferences&lt;/li&gt;
&lt;li&gt;cmd + ,&lt;/li&gt;
&lt;li&gt;Go to shortcuts page&lt;/li&gt;
&lt;li&gt;click Keyboard Shortcuts...&lt;/li&gt;
&lt;li&gt;Change shortcuts for "Show Spotlight Search" or disable it (I use cmd + shift + space)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Setup Alfred

&lt;ul&gt;
&lt;li&gt;Open Alfred&lt;/li&gt;
&lt;li&gt;type alfred in spotlight search&lt;/li&gt;
&lt;li&gt;Go through setup, give it appropriate permissions&lt;/li&gt;
&lt;li&gt;Change Alfred hotkey to cmd + space&lt;/li&gt;
&lt;li&gt;in alfred, hit cmd + , to open settings&lt;/li&gt;
&lt;li&gt;in general tab, click on Alfred Hotkey:&lt;/li&gt;
&lt;li&gt;Add Downloads directory to config&lt;/li&gt;
&lt;li&gt;in Alfred, go to Features tab&lt;/li&gt;
&lt;li&gt;in Search Scope, click the + button near the bottom-right&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Replace Terminal with iTerm2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install iTerm2

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install iterm2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;iterm2 &amp;gt; preferences (cmd + ,) &amp;gt; keys &amp;gt; Check show/hide all windows with a system-wide hotkey&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Replace Safari with Brave
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install brave-browser&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Replace TextEdit with Visual Studio Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install visual-studio-code&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;remove last login message

&lt;ul&gt;
&lt;li&gt; &lt;code&gt;touch ~/.hushlogin&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;replace default zsh

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install zsh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;install zsh theme manager (&lt;a href="https://github.com/ohmyzsh/ohmyzsh"&gt;oh-my-zsh&lt;/a&gt;)

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)”&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;remove default theme

&lt;ul&gt;
&lt;li&gt;comment this (line 5): &lt;code&gt;# ZSH_THEME="robbyrussell”&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;install theme (&lt;a href="https://github.com/romkatv/powerlevel10k"&gt;powerlevel10k&lt;/a&gt;)

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install romkatv/powerlevel10k/powerlevel10k&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;apply theme

&lt;ul&gt;
&lt;li&gt;append to bottom: &lt;code&gt;source /usr/local/opt/powerlevel10k/powerlevel10k.zsh-theme&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;restart terminal (IMPORTANT)&lt;/li&gt;
&lt;li&gt;powerlevel10k should take you through its wizard, and install a powerline font (MesloLGS NF)&lt;/li&gt;
&lt;li&gt;apply new font to iTerm

&lt;ul&gt;
&lt;li&gt;open iTerm (cmd + space, if following previous setup)&lt;/li&gt;
&lt;li&gt;open settings (cmd + ,)&lt;/li&gt;
&lt;li&gt;profile &amp;gt; text &amp;gt; font &amp;gt; click change font ... &amp;gt; select MesloLGS NF&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;apply new font to Visual Studio Code

&lt;ul&gt;
&lt;li&gt;open Visual Studio Code&lt;/li&gt;
&lt;li&gt;open settings (cmd + ,)&lt;/li&gt;
&lt;li&gt;scroll to font and type MesloLGS NF&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Setup zsh autocompletions, syntax highlighting

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install zsh-autosuggestions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew install zsh-syntax-highlighting&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;add to bottom of zshrc

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;configure suggestion strategy (append anywhere on zshrc)

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ZSH_AUTOSUGGEST_STRATEGY=(completion history)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Misc
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;create ssh key (&lt;a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent"&gt;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&lt;/a&gt;)

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssh-keygen -t ed25519 -C "your_email@example.com"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh-add ~/.ssh/id_ed25519&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;enable zsh plugin for ssh-agent

&lt;ul&gt;
&lt;li&gt;add &lt;code&gt;ssh-agent&lt;/code&gt; between round brackets where plugins are defined&lt;/li&gt;
&lt;li&gt;e.g. &lt;code&gt;plugins=(git ssh-agent)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  node / nvm
&lt;/h3&gt;

&lt;p&gt;fast version manager (alternative to nvm)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install fnm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Make avaialable to zsh

&lt;ul&gt;
&lt;li&gt;append to zshrc: &lt;code&gt;eval "$(fnm env)"&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Show available node versions

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fnm list-remote&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Install a node version

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fnm install &amp;lt;node-version&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Make a version of node the default

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fnm default &amp;lt;node-version&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Check if node was install correctly

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;node --version&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mac</category>
      <category>setup</category>
    </item>
    <item>
      <title>CSS Specificity</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Fri, 24 Sep 2021 01:43:06 +0000</pubDate>
      <link>https://dev.to/joellau/css-specificity-1b96</link>
      <guid>https://dev.to/joellau/css-specificity-1b96</guid>
      <description>&lt;p&gt;&lt;em&gt;This articles assumes a basic understanding of HTML and CSS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most beginners quickly come to understand that elements on a page inherit every rule that applies to it, accumulating styles. However, few understand what happens when multiple rules apply to the same element - &lt;strong&gt;the selector which is more specific takes priority&lt;/strong&gt;. Conversely, rules that are less specific are overridden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculating Specificity
&lt;/h2&gt;

&lt;p&gt;In order to determine how specific a selector is, we must first determine the number of items that are present in each of the 4 categories.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;html &lt;code&gt;style&lt;/code&gt; attributes&lt;/li&gt;
&lt;li&gt;ids (&lt;code&gt;id&lt;/code&gt; attribute)&lt;/li&gt;
&lt;li&gt;other attributes (including &lt;code&gt;class&lt;/code&gt;), pseudo-classes (e.g. :link, :hover)&lt;/li&gt;
&lt;li&gt;elements, pseudo-elements(e.g. :before, :after)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When we have the number of items in each category, concatenate them back-to-back to form a final value. Like number systems with a large base, &lt;strong&gt;a number in a larger category always beats the number in a smaller category&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;/* priority: 0,0,0,1 */&lt;/span&gt;
    &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* priority: 0,0,1,1 */&lt;/span&gt;
    &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.para&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;/* (smaller priority that p.para)
        priority: 0,0,1,0 */&lt;/span&gt;
    &lt;span class="nc"&gt;.para&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- (style attribute) priority: 1,0,0,0 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"para"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color: purple"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Hello World
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the text will appear &lt;em&gt;purple&lt;/em&gt; because the style attribute has the highest priority and inherit other rules (font-weight, margin-left) that were applied.&lt;/p&gt;

&lt;h2&gt;
  
  
  !important
&lt;/h2&gt;

&lt;p&gt;The final consideration when trying to determine which CSS rules are applied is the &lt;code&gt;!important&lt;/code&gt; keyword. By appending this to any CSS value, it  increases its priority by another degree. &lt;code&gt;!important&lt;/code&gt; rules are sorted and applied in order of specificity with other &lt;code&gt;!important&lt;/code&gt; rules before normal rules are considered.&lt;/p&gt;

&lt;p&gt;However, using &lt;code&gt;!important&lt;/code&gt; often breaks the design of carefully crafted style sheets and should be avoided!&lt;/p&gt;

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

&lt;p&gt;By developing a thorough understanding of how specificity works, we can easily control which styles are applied by increasing or decreasing a selector's specificity. This allows us to elegantly design succinct style sheets that follow DRY principles.&lt;/p&gt;

&lt;p&gt;If you liked this article, give me a shoutout on Twitter at &lt;a href="https://twitter.com/JoelLau93"&gt;@JoelLau93&lt;/a&gt; or let me know how I can do better!&lt;/p&gt;

&lt;p&gt;Further Reading:&lt;br&gt;
&lt;a href="https://www.w3.org/TR/CSS2/cascade.html"&gt;https://www.w3.org/TR/CSS2/cascade.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Mac in minutes - How I set up new machines</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Sun, 25 Jul 2021 03:02:51 +0000</pubDate>
      <link>https://dev.to/joellau/mac-in-minutes-how-i-set-up-new-machines-3f82</link>
      <guid>https://dev.to/joellau/mac-in-minutes-how-i-set-up-new-machines-3f82</guid>
      <description>&lt;p&gt;Fresh installations are my guilty pleasure. While I could spend days configuring it to make it my own the realities of life often prove that time is often of the essence, making getting productive fast important.&lt;/p&gt;

&lt;p&gt;In this blog post, I share how I do this quickly, and the settings that make life easier. The secret sauce - Homebrew, a package manager for MacOS. With this, we save hours that might have been spent scouring the net for download links.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Homebrew
&lt;/h2&gt;

&lt;p&gt;To install, simply use run:&lt;br&gt;
&lt;em&gt;command from their &lt;a href="https://brew.sh/"&gt;home page&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BONUS TIP: keep all your applications up to date with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew update &lt;span class="p"&gt;;&lt;/span&gt; brew upgrade &lt;span class="p"&gt;;&lt;/span&gt; brew cleanup &lt;span class="p"&gt;;&lt;/span&gt; brew doctor &lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  For Everything Else
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install --cask bitwarden visual-studio-code firefox google-chrome iterm2 alfredbrew install --cask bitwarden visual-studio-code firefox google-chrome iterm2 alfred
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Testing External Systems (TDD)</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Sat, 12 Sep 2020 08:46:42 +0000</pubDate>
      <link>https://dev.to/joellau/testing-external-systems-tdd-2o0c</link>
      <guid>https://dev.to/joellau/testing-external-systems-tdd-2o0c</guid>
      <description>&lt;p&gt;Software developed seldom works in isolation.&lt;/p&gt;

&lt;p&gt;Connecting to external systems such as databases and consuming 3rd party APIs are integral parts of many products made today.&lt;/p&gt;

&lt;p&gt;However, how do we write tests for these BEFORE we write code that integrates with these external systems?&lt;/p&gt;

</description>
      <category>tdd</category>
      <category>discuss</category>
      <category>help</category>
    </item>
    <item>
      <title>[Angular] Why create local variables in templates?</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Sun, 17 May 2020 14:45:40 +0000</pubDate>
      <link>https://dev.to/joellau/angular-why-create-local-variables-in-templates-j73</link>
      <guid>https://dev.to/joellau/angular-why-create-local-variables-in-templates-j73</guid>
      <description>&lt;p&gt;I'm a newbie trying to pick up some angular when I came across this strange bit of code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;#movieplayer&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;(click)=&lt;/span&gt;&lt;span class="s"&gt;"movieplayer.play()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When / why would I create a local variable (&lt;code&gt;movieplayer&lt;/code&gt;) in the .html file rather than its .ts?&lt;/p&gt;

</description>
      <category>angular</category>
    </item>
    <item>
      <title>Template strings in documentation?</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Thu, 07 Nov 2019 11:13:02 +0000</pubDate>
      <link>https://dev.to/joellau/template-string-in-documentation-cj0</link>
      <guid>https://dev.to/joellau/template-string-in-documentation-cj0</guid>
      <description>&lt;p&gt;I'm looking into doing more writing and documentation and one of the biggest problems I'm facing is keeping certain pieces of information up to date.&lt;/p&gt;

&lt;p&gt;For example, I named &lt;code&gt;Chapter 2: Usage&lt;/code&gt;, referred to it a few times, and decided that I would like to change the title to &lt;code&gt;Chapter 2: Tutorial&lt;/code&gt; . &lt;/p&gt;

&lt;p&gt;Are there any existing solutions that would allow me to store these values somewhere as a single source of truth ?&lt;/p&gt;

</description>
      <category>help</category>
      <category>writing</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Things I wish I knew before Uni</title>
      <dc:creator>Joel Lau</dc:creator>
      <pubDate>Thu, 24 May 2018 16:56:35 +0000</pubDate>
      <link>https://dev.to/joellau/things-i-wish-i-knew-before-uni-jf9</link>
      <guid>https://dev.to/joellau/things-i-wish-i-knew-before-uni-jf9</guid>
      <description>&lt;p&gt;I recently finished studying after what seems like an eternity and entered the working world. Over the years of studying, here are the top things I wish I knew before entering University. The tips here SHOULD apply to other forms of education (bootcamps, self-studying, etc) as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Learn casually
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes in my life has been learning during downtime, and immersing myself in the Software Development culture. There're are amazing content creators on youtube, twitter, and site like &lt;a href="https://dev.to/"&gt;this one &lt;/a&gt; that produce videos and articles that are easy so easy to consume. You can read them during commutes, in the toilet or during breaks between study/pomdoro sessions.&lt;/p&gt;

&lt;p&gt;For example, here are some youtube channels that teach you how to be more productive.&lt;br&gt;
&lt;a href="https://www.youtube.com/user/electrickeye91"&gt;Thomas Frank&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UC3VWbWk8qDBiF0741izgpQg"&gt;Med School Insiders&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Programming (these might take some effort)&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=hQ2I8D2ogrs&amp;amp;list=PLSPw4ASQYyynKPY0I-QFHK0iJTjnvNUys"&gt;Making Games in C++&lt;/a&gt;, &lt;a href="https://www.youtube.com/user/TechGuyWeb"&gt;Traversy Media&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Heck, even the &lt;a href="https://www.reddit.com/r/ProgrammerHumor/"&gt;/r/ProgrammerHumor/ subreddit&lt;/a&gt; might teach you things from time to time.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. On dealing with forgetting things
&lt;/h2&gt;

&lt;p&gt;If it hasn't happened to you yet, it will. Between working on your assignments, catching up with lectures and spending time with other human beings, you might find yourself often forgetting things. Learn how to use the calendar app on your phone, and start noting down everything. Reserve your brain power for processing and computing information instead of storage.&lt;/p&gt;

&lt;p&gt;I should add that the art of taking notes is essential even at work. You never know when your colleagues will sit down with you and suggest many changes to your code, and you never want to miss important details when somebody is explaining a project's requirements to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Finish early
&lt;/h2&gt;

&lt;p&gt;Semesters often start off pretty slowly, where everybody's still in the holiday mood. This is the perfect time to get ahead of your peers. Start your research for that assignment early, and start on your assignments the moment you get them. &lt;/p&gt;

&lt;p&gt;This way, you always have more say in choosing between rushing for a deadline and going for a party.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Review often
&lt;/h2&gt;

&lt;p&gt;Always review your notes immediately after your lecture (or as soon as possible, if you don't have the option to). Your scratches and scribbles lose all meaning quicker than you think they do, so its best that you either tidy them up, and/or add to them to give them more context. As an added bonus, lecturers often stay behind in classrooms and theatres to answer questions from students. Take the opportunity to clarify things you're not clear about (or the parts you can't make sense of in your notes). You might even get a better sense of what your lecturers are looking for in assignments and tests, giving you a better chance at doing better grades-wise.&lt;/p&gt;

&lt;p&gt;You might also want to take time off every once in a while for some introspection. Ask yourself which parts of your life are going well/badly, try to figure out why, and what you're going to do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Set Up for Success
&lt;/h2&gt;

&lt;p&gt;The first year of any course is often where everybody is the most motivated. Know that you have the option of finding friends that are looking to do as well as you are. Create good studying habits within your group. Once you do, keep each other accountable to stay on track.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Motivation
&lt;/h2&gt;

&lt;p&gt;Many people deal with motivation in different ways. Here's how I currently deal with it. Firstly, build good habits. Once things become routine, it takes effort to STOP doing what you do. If you're a morning person, try starting your day with an 10 minutes of studying or exercise. It won't take long for you to notice that the minutes add up, and you'll be a better person. Secondly, start small. I personally take &lt;a href="https://www.youtube.com/watch?v=U6OoCaGsz94"&gt;this advice&lt;/a&gt;, and start checking items off my TODO list by making my bed. Finally, there are days where nothing works and you just feel uninspired. I believe that there are things that simply aren't fun or easy to motivate yourself to do (see: leg day). I figured, during my time serving my country, that some things are harder to get through while dragging your feet. PRETEND that you're happy to do it, and time might pass faster (i.e. FAKE IT TIL YOU MAKE IT)&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Use your free time
&lt;/h2&gt;

&lt;p&gt;That odd 5 min break between things that go on in your day could be used to text your family that you love them. Or finding out that odd piece of information that you meant need to google later. Maybe even something simple like setting up an appointment. &lt;/p&gt;

&lt;p&gt;On a larger scale, try looking for jobs related to the field. While you might not be compensated enough for the amount of work you do, I strongly believe that you now have more context as to what you will be studying, making school more interesting as well as making you more hirable in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Communicate
&lt;/h2&gt;

&lt;p&gt;If allowed, show your work to anyone, and ask for their opinion. Take in what they have to say and evaluate what they have to say. You might not agree with them, but you now have 1 new perspective that you likely would not have been able to see.&lt;/p&gt;

&lt;p&gt;Get to know people (juniors, peers, seniors, or alumni, lecturers, or faculty staff) they might be able to point you towards the correct resource, or someone else who might be able to help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Read books outside of your schoolwork
&lt;/h2&gt;

&lt;p&gt;Personally, I highly recommend &lt;a href="http://calnewport.com/books/straight-a-student/"&gt;How To Become a Straight-A Student&lt;/a&gt;, a book that's surprisingly easy to read, and is fairly straight to the point. The author provides very practical tips on dealing with school life and how to do well in that environment.&lt;/p&gt;

&lt;p&gt;Other books I would like to bring your attention to include How to Read a Book: &lt;a href="https://www.amazon.com/How-Read-Book-Classic-Intelligent/dp/0671212095"&gt;The Classic Guide to Intelligent Reading&lt;/a&gt;, which will change your approach towards reading in general, improving your ability to read. As well as &lt;a href="http://charlesduhigg.com/the-power-of-habit/"&gt;The Power of Habit&lt;/a&gt;, that teaches you managing your habits can change your life.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Remember that school is for learning how to learn
&lt;/h2&gt;

&lt;p&gt;In the fast paced world of Software Development, a significant portion of the things that you're about to learn will be outdated by the time you graduate. As such, developers constantly have to learn new frameworks, languages and other technologies to keep up with the times. On top of that, things that you learn in school often do not apply to your work place. As such, remember that you're honing your ability to learn (The most meta, OP, ability a human being can have), especially when you're working on something that seemingly seems unrelated to what you're interested in.&lt;/p&gt;

&lt;p&gt;Take the opportunity to take everything in - from learning to manage your time, money, relationships, and whatever your curriculum is trying to teach you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;On the topic of life decisions, my dad used to say that you can "pick what you like, or like what you picked". I'm a believer that given enough effort, we have the choice of liking what we do for a living (or studying, in this case). So I hope you do too, and this post has helped you down that path (:&lt;/p&gt;

&lt;p&gt;Let me know what other tips you have!&lt;/p&gt;

</description>
      <category>tips</category>
      <category>education</category>
      <category>productivity</category>
      <category>computerscience</category>
    </item>
  </channel>
</rss>
