<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Talks &amp; Conferences on Intellectual Web</title>
    <link>https://words.yudocaa.in/talks/</link>
    <description>Recent content in Talks &amp; Conferences on Intellectual Web</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Wed, 05 Feb 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://words.yudocaa.in/talks/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Flatcar Container Linux on Raspberry Pi</title>
      <link>https://words.yudocaa.in/blog/flatcar-on-raspberry-pi/</link>
      <pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/flatcar-on-raspberry-pi/</guid>
      <description>Been waiting to run Flatcar on Raspberry Pi? Now it&amp;#39;s possible with few simple steps.</description>
      <content:encoded><![CDATA[<figure><img src="/images/2021-12-25-flatcar-raspberry-pi_hu_3fb5acd0e4ac69d6.webp" srcset="/images/2021-12-25-flatcar-raspberry-pi_hu_2bfc509c077ffff5.webp 480w, /images/2021-12-25-flatcar-raspberry-pi_hu_788caef0e8f63004.webp 800w, /images/2021-12-25-flatcar-raspberry-pi_hu_49e186d1179d9aa3.webp 1200w, /images/2021-12-25-flatcar-raspberry-pi_hu_3fb5acd0e4ac69d6.webp 1600w" sizes="(min-width: 800px) 720px, calc(100vw - 32px)"
    width="1600" height="1067" alt="Fresh raspberries from a Canadian Local Market." loading="lazy" decoding="async">
</figure>

<p><a href="https://www.flatcar-linux.org/">Flatcar Container Linux</a> recently announced the <a href="https://twitter.com/flatcar/status/1471487489705582597">Stable support for ARM64</a>.</p>
<p>Perfectly timed! I had a Raspberry Pi 4 lying around and had just ordered a few more to set up a home lab during the holidays. The newer Pis are yet to arrive, so better utilize the time writing a walkthrough on how to use Flatcar Container Linux on your Pis.</p>
<h1 id="hardware-requirements">Hardware Requirements</h1>
<ul>
<li>Goes without saying, a Raspberry Pi 4</li>
<li>Form of storage, either USB and/or SD card. USB 3.0 drive recommended because of the much better performance for the price.</li>
<li>Display (via micro HDMI/HDMI/Serial Cables), keyboard</li>
</ul>
<hr>
<blockquote>
<p>⚠️ WARNING ⚠️
The UEFI firmware used in this guide is an <a href="https://rpi4-uefi.dev/faq/#Is_this_an_official_Raspberry_Pi_Foundation_project"><em>UNOFFICIAL</em> firmware</a>. There is a possibility of damage caused due to the usage of this firmware.
The author of this article would not be liable for any damage caused. Please follow this article at your own risk.</p>
</blockquote>
<hr>
<h1 id="update-the-eeprom">Update the EEPROM</h1>
<p>The Raspberry PI 4 use an EEPROM to boot the system. Before proceeding ahead, it is recommended to update the EEPROM. Raspberry Pi OS automatically updates the bootloader on system boot. In case you are using Raspberry Pi OS already, then the bootloader may be already updated.</p>
<p>For manually updating the EEPROM, you can either use the Raspberry Pi Imager or the raspi-config. The former is the recommended method in the <a href="https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-boot-eeprom">Raspberry Pi documentation</a>.</p>
<p>We will also see later how the RPi4 UEFI firmware needs a recent version of EEPROM.</p>
<h3 id="using-the-raspberry-pi-imager-recommended">Using the Raspberry Pi Imager (Recommended)</h3>
<ul>
<li>Install the <a href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a> software. You can also look for the software in your distribution repository.
Being a Fedora user I installed the software using <code>dnf</code></li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dnf install rpi-imager</span></span></code></pre></div><ul>
<li>Launch <code>Raspberry Pi Imager</code>.</li>
<li>Select <code>Misc utility images</code> under <code>Operating System</code>.</li>
<li>Select <code>Bootloader</code>.</li>
<li>Select the boot-mode, <code>SD</code>, <code>USB</code></li>
<li>Select the appropriate storage, <code>SD</code> or <code>USB</code></li>
<li>Boot the Raspberry Pi with the new image and wait for at least 10 seconds.</li>
<li>The green activity LED will blink with a steady pattern and the HDMI display will be green on success.</li>
<li>Power off the Raspberry Pi and disconnect the storage.</li>
</ul>
<h3 id="using-the-raspi-config">Using the raspi-config</h3>
<ul>
<li>Update the <code>rpi-eeprom</code> package.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update
</span></span><span style="display:flex;"><span>sudo apt full-upgrade
</span></span><span style="display:flex;"><span>sudo apt install rpi-eeprom</span></span></code></pre></div><ul>
<li>Run <code>sudo raspi-config</code></li>
<li>Select <code>Advanced Options</code>.</li>
<li>Select <code>Bootloader Version</code></li>
<li>Select <code>Latest</code> for latest Stable Bootloader release.</li>
<li>Reboot</li>
</ul>
<h3 id="using-the-rpi-eeprom-update">Using the rpi-eeprom-update</h3>
<ul>
<li>Update the <code>rpi-eeprom</code> package.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update
</span></span><span style="display:flex;"><span>sudo apt full-upgrade
</span></span><span style="display:flex;"><span>sudo apt install rpi-eeprom</span></span></code></pre></div><ul>
<li>Check if there are available updates.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo rpi-eeprom-update</span></span></code></pre></div><ul>
<li>Install the update</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># The update is pulled from the `default` release channel.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># The other available channels are: latest and beta</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># You can update the channel by updating the value of</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># `FIRMWARE_RELEASE_STATUS` in the `/etc/default/rpi-eeprom-update`</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># file. This is useful usually in case when you want</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># features yet to be made available on the default channel.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Install the update</span>
</span></span><span style="display:flex;"><span>sudo rpi-eeprom-update -a
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># A reboot is needed to apply the update</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># To cancel the update, you can use: sudo rpi-eeprom-update -r</span>
</span></span><span style="display:flex;"><span>sudo reboot</span></span></code></pre></div><h1 id="installing-flatcar">Installing Flatcar</h1>
<h3 id="install-flatcar-install-script">Install <code>flatcar-install</code> script</h3>
<p>Flatcar provides a simple installer script that helps install Flatcar Container Linux on the target disk. The script is available on <a href="https://raw.githubusercontent.com/flatcar-linux/init/flatcar-master/bin/flatcar-install">Github</a>, and the first step would be to install the script in the host system.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir -p ~/.local/bin
</span></span><span style="display:flex;"><span><span style="color:#75715e"># You may also add `PATH` export to your shell profile, i.e bashrc, zshrc etc.</span>
</span></span><span style="display:flex;"><span>export PATH<span style="color:#f92672">=</span>$PATH:$HOME/.local/bin
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>curl -LO https://raw.githubusercontent.com/flatcar-linux/init/flatcar-master/bin/flatcar-install
</span></span><span style="display:flex;"><span>chmod +x flatcar-install
</span></span><span style="display:flex;"><span>mv flatcar-install ~/.local/bin</span></span></code></pre></div><h3 id="install-flatcar-on-the-target-device">Install Flatcar on the target device</h3>
<p>Now that we have the <code>flatcar-install</code> installed in our host machine. We would go ahead and install the Flatcar Container Linux image on the target device.
The target device could be a USB or SD Card. In my case, I reused the existing SD Card which I used in the previous steps. You can use a separate storage device as well.</p>
<p>The options that we will be using with the scripts are:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># -d DEVICE   Install Flatcar Container Linux to the given device.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -C CHANNEL  Release channel to use</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -B BOARD    Flatcar Container Linux Board to use</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -o OEM      OEM type to install (e.g. ami), using flatcar_production_&lt;OEM&gt;_image.bin.bz2</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -i IGNITION Insert an Ignition config to be executed on boot.</span></span></span></code></pre></div><ul>
<li>The device would be the target device that you would like to use. You can use the <code>lsblk</code> command to find the appropriate disk. Here, I&rsquo;m using <code>/dev/sda</code> which was in my case.</li>
<li>With the given values of <code>channel</code> and <code>board</code>, the script would download the image, verify it with gpg, and then copy it bit for bit to disk.</li>
<li>In our case, Flatcar does not yet ship Raspberry PI specific OEM images yet so the value will be an empty string <code>''</code>.</li>
<li>Pass the Ignition file, <code>config.json</code> in my case, to provision the Pi during boot.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;ignition&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;config&#34;</span>: {},
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;security&#34;</span>: {
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;tls&#34;</span>: {}
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;timeouts&#34;</span>: {},
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;version&#34;</span>: <span style="color:#e6db74">&#34;2.3.0&#34;</span>
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;networkd&#34;</span>: {},
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;passwd&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;users&#34;</span>: [
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;core&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;sshAuthorizedKeys&#34;</span>: [
</span></span><span style="display:flex;"><span>          <span style="color:#960050;background-color:#1e0010">&lt;Insert</span> <span style="color:#960050;background-color:#1e0010">your</span> <span style="color:#960050;background-color:#1e0010">SSH</span> <span style="color:#960050;background-color:#1e0010">Keys</span> <span style="color:#960050;background-color:#1e0010">here&gt;</span>
</span></span><span style="display:flex;"><span>        ]
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    ]
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;storage&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;files&#34;</span>: [
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;filesystem&#34;</span>: <span style="color:#e6db74">&#34;OEM&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;path&#34;</span>: <span style="color:#e6db74">&#34;/grub.cfg&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;append&#34;</span>: <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;contents&#34;</span>: {
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">&#34;source&#34;</span>: <span style="color:#e6db74">&#34;data:,set%20linux_console%3D%22console%3DttyAMA0%2C115200n8%20console%3Dtty1%22%0Aset%20linux_append%3D%22flatcar.autologin%20usbcore.autosuspend%3D-1%22%0A&#34;</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">&#34;verification&#34;</span>: {}
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;mode&#34;</span>: <span style="color:#ae81ff">420</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    ],
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;filesystems&#34;</span>: [
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;mount&#34;</span>: {
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">&#34;device&#34;</span>: <span style="color:#e6db74">&#34;/dev/disk/by-label/OEM&#34;</span>,
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">&#34;format&#34;</span>: <span style="color:#e6db74">&#34;btrfs&#34;</span>
</span></span><span style="display:flex;"><span>        },
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;OEM&#34;</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    ]
</span></span><span style="display:flex;"><span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;systemd&#34;</span>: {}
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div><p>Write away!</p>
<pre tabindex="0"><code>sudo flatcar-install -d /dev/sda -C stable -B arm64-usr -o &#39;&#39; -i config.json</code></pre><p>If you already have the image downloaded you can use the <code>-f</code> param to specify the path of the local image file.</p>
<pre tabindex="0"><code>sudo flatcar-install -d /dev/sda -C stable -B arm64-usr -o &#39;&#39; -i config.json -f flatcar_production_image.bin.bz2</code></pre><h3 id="raspberry-pi-4-uefi-firmware">Raspberry Pi 4 UEFI Firmware</h3>
<p><a href="https://rpi4-uefi.dev">rpi-uefi community</a> ships a SBBR-compliant(UEFI+ACPI), ArmServerReady ARM64 firmware for Raspberry Pi 4. We would be using the same to UEFI boot Flatcar.</p>
<p><code>v1.17</code> of the <a href="https://github.com/pftf/RPi4/releases/tag/v1.17">pftf/RPi4</a> introduced two major changes:</p>
<ul>
<li>Firstly, it enabled firmware boot directly from the USB. This is particularly helpful if you are using the installation process using a USB device. To add a fun story, I dropped my Pi and broke the SD card slot. Until the Pi gets repaired, I&rsquo;m making use of direct USB boot 😎</li>
<li>Secondly, support for directly placing the Pi boot files into the EFI System Partition (ESP). This feature was not implemented in the firmware, rather from the upstream firmware from Raspberry Pi Foundation. This is why it is recommended to update the Pi EEPROM at the very beginning.</li>
</ul>
<p>Let&rsquo;s move ahead with the final steps.</p>
<ul>
<li>Place the UEFI firmware into the EFI System Partition.</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>efipartition<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>lsblk /dev/sda -oLABEL,PATH | awk <span style="color:#e6db74">&#39;$1 == &#34;EFI-SYSTEM&#34; {print $2}&#39;</span><span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>mkdir /tmp/efipartition
</span></span><span style="display:flex;"><span>sudo mount <span style="color:#e6db74">${</span>efipartition<span style="color:#e6db74">}</span> /tmp/efipartition
</span></span><span style="display:flex;"><span>pushd /tmp/efipartition
</span></span><span style="display:flex;"><span>version<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>curl --silent <span style="color:#e6db74">&#34;https://api.github.com/repos/pftf/RPi4/releases/latest&#34;</span> | jq -r .tag_name<span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>sudo curl -LO https://github.com/pftf/RPi4/releases/download/<span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span>/RPi4_UEFI_Firmware_<span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span>.zip
</span></span><span style="display:flex;"><span>sudo unzip RPi4_UEFI_Firmware_<span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span>.zip
</span></span><span style="display:flex;"><span>sudo rm RPi4_UEFI_Firmware_<span style="color:#e6db74">${</span>version<span style="color:#e6db74">}</span>.zip
</span></span><span style="display:flex;"><span>popd
</span></span><span style="display:flex;"><span>sudo umount /tmp/efipartition</span></span></code></pre></div><ul>
<li>Remove the <code>USB</code>/<code>SD</code> from the host device and attach it into the Raspberry Pi 4 and boot.</li>
</ul>
<p><em>Voilà</em>! In no time, your Raspberry Pi would boot and present you with a Flatcar Container Linux prompt.</p>
<h1 id="further-reading">Further Reading</h1>
<ul>
<li><a href="https://rpi4-uefi.dev/">rpi4-uefi.dev</a> - RPi4 UEFI Firmware Official Website</li>
<li><a href="https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-boot-eeprom">Raspberry Pi</a> documentation</li>
</ul>
<hr>
<p>Photo by <a href="https://unsplash.com/@antomeneghini%22">Anto Meneghini</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Love Boredom</title>
      <link>https://words.yudocaa.in/blog/love-boredom/</link>
      <pubDate>Sun, 21 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/love-boredom/</guid>
      <description>Why learning to love Boredom is important?</description>
      <content:encoded><![CDATA[<figure><img src="/images/2021-02-21-love-boredom_hu_7f1c2def32a06e9.webp" srcset="/images/2021-02-21-love-boredom_hu_d2f3997b30b1a5df.webp 480w, /images/2021-02-21-love-boredom_hu_4d086ee427149df8.webp 800w, /images/2021-02-21-love-boredom_hu_8d4c0b48430d6765.webp 1200w, /images/2021-02-21-love-boredom_hu_7f1c2def32a06e9.webp 1600w" sizes="(min-width: 800px) 720px, calc(100vw - 32px)"
    width="1600" height="1067" alt="Lazy &amp; Bored" loading="lazy" decoding="async">
</figure>

<p>I was talking to Jason today, discussing aspects of life and building habits.</p>
<p>Last week was pretty rough, devoid of motivation to maintain my habits.  To which he said to me, &ldquo;to fall in love with boredom&rdquo;
and passed me a couple of blog post from James Clear.</p>
<ul>
<li><a href="https://jamesclear.com/in-love-with-boredom">How to Fall in Love With Boredom and Unlock Your Mental Toughness</a></li>
<li><a href="https://jamesclear.com/stay-focused">How to Stay Focused When You Get Bored Working Toward Your Goals</a></li>
<li><a href="https://jamesclear.com/deliberate-practice">Lessons on Success and Deliberate Practice from Mozart, Picasso, and Kobe Bryant</a></li>
</ul>
<p>The first blog was one I could relate to in an instant. These days, the mind is
easily, actually very easily distracted.</p>
<p>Everything looks good when you start, you have the sheer motivation in the beginning,
or as in terms of relationship, the honeymoon phase. Once it fades, it&rsquo;s possible
the motivation fades away too. This is were the consistency plays a vital role.</p>
<p>James talks of a strategy known as &ldquo;Seinfeld Strategy&rdquo; based on Jerry Seinfeld.
At the core Seinfeld Strategy talks about not breaking the chain, and marking
on a calendar each single day to note the task has been done. Over the years of
consistency, the mastery will follow.</p>
<p>Few examples.</p>
<ul>
<li>Paul Erdos, the fantastic mathematician, published over 1,500 papers before establishing himself as a thought leader.</li>
<li>Famous composers put in 10 years of under appreciated work before earning recognition.</li>
<li>Milo of Croton, the legendary Greek wrestler, picked up a young calf every day until he developed incredible strength.</li>
</ul>
<p>Remember, it&rsquo;s a constant fight between procrastination and motivation.</p>
<hr>
<p>Photo by <a href="https://unsplash.com/@priscilladupreez">Priscilla Du Preez</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Managing Git configuration with git config</title>
      <link>https://words.yudocaa.in/blog/git-config/</link>
      <pubDate>Sat, 02 May 2020 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/git-config/</guid>
      <description>How git config&amp;#39;s local, global and system levels work, and how to set values at each level and see where they come from.</description>
      <content:encoded><![CDATA[<p>Git comes with this handy tool that let&rsquo;s you manage your Git configuration with ease.</p>
<h2 id="configuration-levels">Configuration Levels</h2>
<ul>
<li>
<p><code>--local</code></p>
<p><em><strong>(Default)</strong></em> Local configuration values are stored and managed at the repository level.
The values are stored in a file found in the repo&rsquo;s <code>.git</code> directory: <code>.git/config</code></p>
<p>If you are planning to set some configuration only to be used by the specific repo you
are in, then go ahead with using <code>--local</code>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --local user.email <span style="color:#e6db74">&#34;sayan@mycompany.io&#34;</span></span></span></code></pre></div></li>
<li>
<p><code>--global</code></p>
<p>Global configuration is one level above Local. These configuration are user-specific and
managed through the <code>.gitconfig</code> file in user&rsquo;s home directory: <code>~/.gitconfig</code></p>
<p>If you want your configuration to reflect to all your repo&rsquo;s in the system, then go ahead
with using <code>--global</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --global user.email <span style="color:#e6db74">&#34;sayan@emailprovider.io&#34;</span></span></span></code></pre></div></li>
<li>
<p><code>--system</code></p>
<p>System-level configuration applies to every user on the system, which means if none of the
the local or the global values overrides the system level Git configuration value will be
used. These configurations are true for all the repos&rsquo; in the system and is managed through
the <code>/etc/gitconfig</code> file.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --system user.email <span style="color:#e6db74">&#34;infra@mywebsite.io&#34;</span></span></span></code></pre></div></li>
</ul>
<h3 id="listing-all-the-configurations">Listing all the configurations</h3>
<ul>
<li>
<p>To see all the configuration values, use the command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --list</span></span></code></pre></div></li>
<li>
<p>It can get quite messy when you have configuration values coming from multiple sources. To see
the origin of the value as well add <code>--show-origin</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --list --show-origin</span></span></code></pre></div></li>
</ul>
<hr>
<h2 id="your-identity">Your Identity</h2>
<p>The first chore the you always need to do after setting up Git is setting up your user name and
email address. This is required because Git attaches this piece of information to ever changeset that
you create in Git, known as Git commit.</p>
<p>Which level of configuration should we use? Because the details are user specific in most cases, the
optimum answer is <code>--global</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --global user.name <span style="color:#e6db74">&#34;Sayan Chowdhury&#34;</span>
</span></span><span style="display:flex;"><span>git config --global user.name <span style="color:#e6db74">&#34;sayan@emailprovider.io&#34;</span></span></span></code></pre></div><p>Let&rsquo;s verify this in the global settings file:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ cat ~/.gitconfig
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>user<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>    name <span style="color:#f92672">=</span> Sayan Chowdhury
</span></span><span style="display:flex;"><span>	email <span style="color:#f92672">=</span> sayan@emailprovider.io</span></span></code></pre></div><blockquote>
<p>What are the other alternative will you use to verify?</p>
</blockquote>
<hr>
<h2 id="your-editor">Your Editor</h2>
<p><code>Git</code> invokes the editor for a lot of command for example while doing a commit,
or rebasing your commits. When you type these commands it&rsquo;s fire up the editor
infront of you. Now, each of us has their own choice of editor so vim gives you
option to configure which editor you would like to use.</p>
<p>I&rsquo;m a vim user, thus for me the command would be:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --global core.editor <span style="color:#e6db74">&#34;vim&#34;</span></span></span></code></pre></div><hr>
<h2 id="colors-in-git">Colors in Git</h2>
<p>Coming soon</p>
<hr>
<h2 id="merge-and-diff-tools">Merge and diff tools</h2>
<p>Coming soon</p>
<hr>
<h2 id="git-configurations-you-might-find-useful">Git configurations you might find useful</h2>
<p>More details on the following config coming soon</p>
<ul>
<li><code>alias</code></li>
<li><code>commit.template</code></li>
<li><code>core.excludesfile</code></li>
<li><code>gpg.program</code></li>
<li><code>help.autocorrect</code></li>
<li><code>http.cookiefile</code></li>
<li><code>push.current</code></li>
<li><code>user.signingkey</code></li>
</ul>
<p>&ndash;</p>
<blockquote>
<p>To more on git config, read <code>man git-config</code></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Force git to use git:// instead of https://</title>
      <link>https://words.yudocaa.in/blog/force-git-to-use-git-instead-of-https/</link>
      <pubDate>Sun, 28 Jul 2019 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/force-git-to-use-git-instead-of-https/</guid>
      <description>Keep cloning over SSH even when you paste an https:// URL, using git&amp;#39;s url.&amp;lt;base&amp;gt;.insteadOf setting.</description>
      <content:encoded><![CDATA[<p>I&rsquo;m an advocate of using SSH authentication and connecting to services like Github, Gitlab, and many others. I do make sure that the use the <code>git://</code> URL while cloning the repo but sometimes I do make mistake of using the <code>https://</code> instead. Only to later realise when git prompts me to enter my username to authenticate the SSH connection. This is when I have to manually reset my git remote URL.</p>
<p>Today, I found a cleaner solution to this problem. I can use <code>insteadOf</code> to enforce the connection via SSH.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git config --global url.<span style="color:#e6db74">&#34;git@github.com:&#34;</span>.insteadOf <span style="color:#e6db74">&#34;https://github.com/&#34;</span></span></span></code></pre></div><p>This creates an entry in your .gitconfig:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>[url <span style="color:#e6db74">&#34;git@github.com:&#34;</span>]
</span></span><span style="display:flex;"><span>    insteadOf <span style="color:#f92672">=</span> https:<span style="color:#f92672">//</span>github<span style="color:#f92672">.</span>com<span style="color:#f92672">/</span></span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Editing an older commit in a pull request</title>
      <link>https://words.yudocaa.in/blog/editing-git-commits-from-history/</link>
      <pubDate>Sun, 03 Feb 2019 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/editing-git-commits-from-history/</guid>
      <description>Reviewers asked for changes to an older commit in your pull request. How to fix that commit in place with fixup commits and an interactive rebase.</description>
      <content:encoded><![CDATA[<p>Let&rsquo;s say you&rsquo;ve raised a Pull Request on GitHub with 3 commits as shown below.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>d46d2f8a <span style="color:#f92672">(</span>HEAD -&gt; feature, devel/feature<span style="color:#f92672">)</span> Add Fedora system to handle the Fedora Cloud images
</span></span><span style="display:flex;"><span>f726b033 vendor: Add new dep github.com/ulikunitz/xz
</span></span><span style="display:flex;"><span>dbdbda67 Split release and pre-release to handle multiple systems</span></span></code></pre></div><p>Here, <code>d46d2f8a</code> is the <strong>HEAD,</strong> followed by <code>f726b033</code> and <code>dbdbda67</code>.</p>
<p>Your reviewers go through the commits, and suggest changes to some files. The suggestions now need to be applied to the commit <code>dbdbda67</code>. How would you fix this? This is a jam I usually land myself in, as for review I prefer my commits to be concise, shows incremental changes and for each commit to be atomic.</p>
<hr>
<p>There are two ways you can use to fix this issue:</p>
<h3 id="rebase-and-edit">Rebase and Edit</h3>
<p>I start off with <code>git rebase -i</code> which opens up the list of commits up for rebase. In our example here, the third commit from the HEAD needs to be changed, so I&rsquo;ll rebase commits till HEAD~3.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git rebase -i HEAD~3</span></span></code></pre></div><p>This opens up the editor, with the options</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pick dbdbda67 Split release and pre-release to handle multiple systems
</span></span><span style="display:flex;"><span>pick f726b033 vendor: Add new dep github.com/ulikunitz/xz
</span></span><span style="display:flex;"><span>pick d46d2f8a Add Fedora system to handle the Fedora Cloud images</span></span></code></pre></div><p>Below this, you will find a list of commands you can use with git-rebase:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># p, pick &lt;commit&gt; = use commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># r, reword &lt;commit&gt; = use commit, but edit the commit message</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># e, edit &lt;commit&gt; = use commit, but stop for amending</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># s, squash &lt;commit&gt; = use commit, but meld into previous commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># f, fixup &lt;commit&gt; = like &#34;squash&#34;, but discard this commit&#39;s log message</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># x, exec &lt;command&gt; = run command (the rest of the line) using shell</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># d, drop &lt;commit&gt; = remove commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># l, label &lt;label&gt; = label current HEAD with a name</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># t, reset &lt;label&gt; = reset HEAD to a label</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># m, merge [-C &lt;commit&gt; | -c &lt;commit&gt;] &lt;label&gt; [# &lt;oneline&gt;]</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       create a merge commit using the original merge commit&#39;s</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       message (or the oneline, if no original merge commit was</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       specified). Use -c &lt;commit&gt; to reword the commit message.</span></span></span></code></pre></div><p>The list is quite coherent, but for this post, we&rsquo;ll use the <code>edit</code> command. So replace <code>pick</code> with <code>edit</code> against the commit you would like to edit and exit the editor.</p>
<p>So for our example, it&rsquo;ll become (note the edit command in the first line):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>edit dbdbda67 Split release and pre-release to handle multiple systems
</span></span><span style="display:flex;"><span>pick f726b033 vendor: Add new dep github.com/ulikunitz/xz
</span></span><span style="display:flex;"><span>pick d46d2f8a Add Fedora system to handle the Fedora Cloud images
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Rebase 51c8dc75..d46d2f8a onto 51c8dc75 (3 commands)</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Commands:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># p, pick &lt;commit&gt; = use commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># r, reword &lt;commit&gt; = use commit, but edit the commit message</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># e, edit &lt;commit&gt; = use commit, but stop for amending</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># s, squash &lt;commit&gt; = use commit, but meld into previous commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># f, fixup &lt;commit&gt; = like &#34;squash&#34;, but discard this commit&#39;s log message</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># x, exec &lt;command&gt; = run command (the rest of the line) using shell</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># d, drop &lt;commit&gt; = remove commit</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># l, label &lt;label&gt; = label current HEAD with a name</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># t, reset &lt;label&gt; = reset HEAD to a label</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># m, merge [-C &lt;commit&gt; | -c &lt;commit&gt;] &lt;label&gt; [# &lt;oneline&gt;]</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       create a merge commit using the original merge commit&#39;s</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       message (or the oneline, if no original merge commit was</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># .       specified). Use -c &lt;commit&gt; to reword the commit message.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># These lines can be re-ordered; they are executed from top to bottom.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># If you remove a line here THAT COMMIT WILL BE LOST.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#       However, if you remove everything, the rebase will be aborted.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Note that empty commits are commented out</span></span></span></code></pre></div><p>What this will do is stop the rebase process at the commit you wanted to edit. At this moment, you can go ahead and perform your changes. Add files, modify them, remove them etc.</p>
<p>Once you&rsquo;re done, add the files using <code>git add</code> and continue the rebase using:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git rebase --continue</span></span></code></pre></div><hr>
<h3 id="the-other-way-rebase-and-fixup">The other way? Rebase and Fixup</h3>
<p>I&rsquo;ve recently started to use this method a whole lot more than the previous one I described. Here, you can just go ahead and do the changes.</p>
<p>Once done, pass the argument <code>--fixup</code>, while making the commit. For our example,</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git commit --fixup<span style="color:#f92672">=</span>dbdbda67</span></span></code></pre></div><p>This would create a fixup commit starting with <code>!fixup</code>. Next, go ahead and rebase the commits from the commit to be fixed to fixup commit.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git rebase -i --autosquash dbdbda67~1</span></span></code></pre></div><p>This will merge the fixup commit with the commit to be fixed.</p>
<p>Voila! Serve the PR while hot. 🍜</p>
<hr>
<p>Do you know easier methods to tackle this issue? Drop me a message on Twitter <a href="https://twitter.com/yudocaa">@yudocaa</a>. I would like to thank <a href="https://twitter.com/jasonbraganza">Jason</a>, <a href="https://twitter.com/Jaysinhp">Jaysinh</a>, and <a href="https://twitter.com/sayani0_0">Sayani</a> who did proofreading for this blog post. Thanks to <a href="https://unsplash.com/@anniespratt">@anniespratt</a> for the cover image.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Vim features I wish I&#39;d known sooner</title>
      <link>https://words.yudocaa.in/blog/vim-wish-i-knew-this-about-you-before/</link>
      <pubDate>Tue, 22 Jan 2019 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/vim-wish-i-knew-this-about-you-before/</guid>
      <description>After years of Vim and a switch to Neovim, the feature I wish I&amp;#39;d learned sooner: jump lists.</description>
      <content:encoded><![CDATA[<p>Almost all my life since I have started working around open source projects I have been a Vim user. That does not mean that I did not look into other options. I&rsquo;ve tried my hands on Emacs, Sublime Text, Visual Studio Code, Atom, et cetera. But, none of them pleased me like vim.</p>
<p>2018, I started working on Golang, and vim had to adapt to my needs, but it did not quite succeed and I made my switch to neovim around the end of the year. Around the same time, I took a resolution to dive deep into neovim to increase my productivity.</p>
<hr>
<h2 id="jump-lists">Jump Lists</h2>
<p>In golang, I heavily use a <code>:GoDef</code> which is part of the <a href="https://github.com/fatih/vim-go">vim-go</a> plugin to go to a specific symbol or declaration.</p>
<p>Vim keeps track of all the jumps (previously visited cursor positions). <code>:jumps</code> lists down all the performed jumps for the current window. <code>Ctrl+O</code> &amp; <code>Ctrl+I</code> helps you to cycle through the jumps. But, what counts as a jump?</p>
<p><img src="https://miro.medium.com/max/880/1*6uRvwb05pLvZzoEeBbRqjA.jpeg" alt="" loading="lazy" decoding="async"></p>
<p>Any of the actions mentioned on the above list counts as a jump, and makes an entry into the jump list. You can clear the jump list using <code>:clearjumps</code>.</p>
<p><img src="https://miro.medium.com/max/3602/1*jC7FEbaNOeiezu5fYwMCAw.png" alt="" loading="lazy" decoding="async"></p>
<p>The columns being jump, line, column and file/text. Given the above:</p>
<ul>
<li>Ctrl-I to jump to line 415 in the current buffer.</li>
<li>Ctrl-O to jump to line 358 in the current buffer.</li>
<li><code>3</code> then Ctrl-O to jump to line 364 in current buffer.</li>
<li><code>5</code> then Ctrl-I to jump to line 395 in the <code>mantle/cmd/plume/prerelease.go</code>.</li>
</ul>
<p><em>I&rsquo;ll keep on updating the posts as I learn more about vim/neovim. Till then, saraba da!</em></p>
<hr>
<p>Reference for this post</p>
<ul>
<li><a href="http://vim.wikia.com/wiki/Jumping_to_previously_visited_locations"><em>Jumping to previously visited locations</em></a></li>
<li><a href="https://medium.com/@kadek/understanding-vims-jump-list-7e1bfc72cdf0"><em>Understanding Vim’s Jump List</em></a></li>
<li><a href="https://unsplash.com/photos/yCkFqXOZuLk">Cover Image</a> by <a href="https://unsplash.com/@ryanpernofski">Ryan Pernofski</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Fedora AMIs for Arm-Based EC2 Instances (A1)</title>
      <link>https://words.yudocaa.in/blog/fedora-amis-for-ec2-instances-a1-powered-by-arm-based-aws-graviton-processors/</link>
      <pubDate>Wed, 28 Nov 2018 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/fedora-amis-for-ec2-instances-a1-powered-by-arm-based-aws-graviton-processors/</guid>
      <description>Fedora now publishes arm64 AMIs for AWS&amp;#39;s Graviton-powered A1 instances, thanks to fedimg 2.4.0. What changed, and the known issues.</description>
      <content:encoded><![CDATA[<p><a href="https://aws.amazon.com/blogs/aws/new-ec2-instances-a1-powered-by-arm-based-aws-graviton-processors/">AWS recently announced their new fleet of A1 EC2 instances which is powered by ARM at AWS re:Invent.</a></p>
<p>Gladly, the Fedora Kernel Team (Laura Abbott, Justin Forbes and Jeremy Cline) and Peter Robinson had already everything in place. The only missing piece was to add the support to fedimg to create arm64 based AMIs.</p>
<p>With the release of <a href="https://github.com/fedora-infra/fedimg/releases/tag/2.4.0">fedimg==2.4.0</a> (thanks to Patrick), the new AMIs were happily getting uploaded to AWS and with a slight delay, Fedora had the support for the arm64 along with the x86_64 AMIs.</p>
<h2 id="known-issues">Known issues?</h2>
<p>One of the issues which I faced was the instance getting ready takes some time which is almost 5 minutes. But <a href="https://fedoramagazine.org/fedora-29-arm-aws/">work is on the way to make the experience better</a>.</p>
<h2 id="availability">Availability?</h2>
<p>A1 instances are currently supported only in selected regions: US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland).</p>
<p>Also not all the availability zones are supported, so while launching instances you might see this error:</p>
<pre><code>An error occurred (Unsupported) when calling the RunInstances operation: Your requested instance type (a1.large) is not supported in your requested Availability Zone (us-west-2b). Please retry your request by not specifying an Availability Zone or choosing us-west-2c, us-west-2a.
</code></pre>
<p>which I found linked to the subnet&rsquo;s availability zone. So, you might need to change the subnet&rsquo;s availability zone to launch the instance.</p>
<p>For any more issues, drop into #fedora-arm or #fedora-cloud IRC channel on Freenode.</p>
<p>Read the official announcement <a href="https://fedoramagazine.org/fedora-29-arm-aws/">here</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Introducing SkipTheLine</title>
      <link>https://words.yudocaa.in/blog/introducing-skiptheline/</link>
      <pubDate>Wed, 10 Oct 2018 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/introducing-skiptheline/</guid>
      <description>Finding a good job is still hard five years after I graduated. A friend&amp;#39;s new effort, SkipTheLine, sets out to fix that.</description>
      <content:encoded><![CDATA[<h2 id="2013">2013</h2>
<p>The year I graduated from a third-tier college in Durgapur. I did not expect much from the college, mostly because of the poor placement record in the college.</p>
<p>To get myself a job, I was primarily going through hasjob.co and any job opportunities that came through Bangpypers mailing list.</p>
<p>Finally, I landed myself into an internship and later which turned into a full-time at HackerEarth was through the hasjob.co.</p>
<hr>
<h2 id="2018">2018</h2>
<p>5 years later, finding a job in a suitable company is still tough. In the last 5 years, I have come to know about more options, be it AngelList, Hasjob, StackOverflow, Facebook Job Groups etc.</p>
<p>But the problem still I think is the same, even if you apply through these websites a lot of times you don&rsquo;t get a reply from the company you applied to. On the other hand, referrals work. I&rsquo;ve referred good people to companies I know. This way, there is a chance of getting an interview in the company. Cracking the interview is a different story altogether which I believe depends a lot on the candidate.</p>
<p>Recently, I got to know that Prashant, one of my school senior and a close friend, who famously known in the tech community for his &ldquo;<a href="https://news.bitcoin.com/indian-couple-asked-gifted-bitcoin-wedding/">Bitcoin Wedding</a>&rdquo; started an effort called &ldquo;SkipTheLine&rdquo;.</p>
<p><a href="https://bit.ly/_SkipTheLine">SkipTheLine</a> is a newsletter where <a href="https://www.facebook.com/jps.prashant">Prashant</a> publishes profiles of three developers. These developers are from the community, who are active in open source, or competitive programming, or just good at technologies they work on. He goes on to introduce the developers through email with the companies point of contact via email and then the candidate and the POC take the discussion forward.</p>
<p>I personally loved the initiative that he took as at the end of the day if people whom I know come asking for a job referral I would just direct them to SkipTheLine. Prashant has quite a stronghold in the startup community and does great work in connecting the folks with some really good startup across the country.</p>
<p>I know people personally who got hired a within few days of their newsletter published so if you are looking out for a job, do fill out the <a href="https://bit.ly/_SkipTheLine">SkipTheLine</a> form.</p>
<p>If you are looking to hire, do drop me an email at gmail AT yudocaa DOT in.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Fedora AMIs get ENA support</title>
      <link>https://words.yudocaa.in/blog/fedora-amis-gets-ena-support/</link>
      <pubDate>Thu, 24 May 2018 18:30:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/fedora-amis-gets-ena-support/</guid>
      <description>From Fedora 28, the Fedora AMIs ship with Elastic Network Adapter support. How to check the enaSupport attribute with the AWS CLI.</description>
      <content:encoded><![CDATA[<p>It’s been a while that Amazon introduced Elastic Network Adapter (ENA) Support to their cloud. Amazon EC2 provides enhanced networking capabilities to C5, C5 with instance storage, F1, G3, H1, I3, m4.16xlarge, M5, P2, P3, R4, and X1 instances through the Elastic Network Adapter (ENA).</p>
<p>With the Fedora 28 release, the Fedora AMIs come with the ENA support.</p>
<p>To check whether an AMI has the Enhanced Networking with ENA-Enabled, you can query the AWS EC2 API, using the AWS Command Line Interface. You need to check if the enaSupport attribute set. If the attribute is set, the response is true.</p>
<pre><code>➜  ~ aws ec2 describe-images --region us-east-1 --image-id ami-cceb7ab3 --query 'Images[].EnaSupport'
----------------
|DescribeImages|
+--------------+
|  True        |
+--------------+
</code></pre>
<p>Also with Fedora 28 release, Fedora deprecates the release of paravirtual (PV) images.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Redesigning fedimg, part 2: talking to AWS</title>
      <link>https://words.yudocaa.in/blog/redesigning-fedimg-part-ii/</link>
      <pubDate>Sat, 04 Feb 2017 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/redesigning-fedimg-part-ii/</guid>
      <description>Why fedimg&amp;#39;s utility-instance design makes adding AWS regions painful, and how importing the image as a volume removes it.</description>
      <content:encoded><![CDATA[<p>In the previous <a href="/blog/redesigning-fedimg-part-i/">post</a>, I discussed what is fedimg and how it works currently.
In this post, I plan to explain the issue in the current uploading process of
the AMIs and how we plan to fix it.</p>
<h1 id="whats-the-problem">What&rsquo;s the problem?</h1>
<p><a href="https://github.com/fedora-infra/fedimg">fedimg</a> boots an utility instance
using the RHEL AMI configured for that region.</p>
<p>The problem with this design is that while adding a new region we need to look
for the appropriate RHEL AMI in the newer region first. Afterward, we need to
test if fedimg works with the newer regions RHEL AMIs. Finally, if
everything turns out to be okay we can go ahead with adding the AMI to the
fedimg configuration.</p>
<p>This becomes a tedious task over time and delays adding a new region.</p>
<h1 id="how-does-redesign-fixes-this">How does redesign fixes this?</h1>
<p>The new design completely removes the dependency of the utility instances.
fedimg would then utilize <code>euca-import-volume</code> to upload the raw cloud image to
create a volume via S3.</p>
<p>fedimg will keep retrying to check if the volume is read using
<code>euca-describe-conversion-tasks</code>. Once the volume is created, fedimg goes ahead
with creating the snapshot of the volume and then finally the AMI.</p>
<p>This change results in removing a lot of redundant code and a simpler fedimg
configuration file <a href="https://github.com/fedora-infra/fedimg/blob/develop/fedimg.cfg.example#L22">[1]</a><a href="https://github.com/fedora-infra/fedimg/blob/ec2-upload/fedimg.cfg.example#L14">[2]</a>.
I have been <a href="https://github.com/fedora-infra/fedimg/compare/ec2-upload">working</a> on this for sometime now.</p>
<p>Adding a new region now becomes effortless as we just need to append the
region to the configuration file.</p>
<p>Fedimg also right now boots up test instances to test the AMIs and does a basic
<code>/bin/true</code> test. This test just ensures that the machine boots and nothing
more than that.</p>
<p>In the next post, I will be writing on how I will be going ahead to build a testing
infrastructure for the AMIs using
<a href="https://apps.fedoraproject.org/autocloud/">Autocloud</a> and
<a href="http://docs.resultsdb20.apiary.io/">ResultsDB</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Redesigning fedimg, part 1: the AMI creation process</title>
      <link>https://words.yudocaa.in/blog/redesigning-fedimg-part-i/</link>
      <pubDate>Mon, 30 Jan 2017 20:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/redesigning-fedimg-part-i/</guid>
      <description>How fedimg turns Fedora composes into AWS AMIs today: from fedmsg messages and fedfind metadata to the EC2 upload steps.</description>
      <content:encoded><![CDATA[<h1 id="what-is-fedimg">What is fedimg?</h1>
<p><a href="https://github.com/fedora-infra/fedimg">Fedimg</a> is a <a href="https://www.python.org/">Python</a>-powered service that uploads the <a href="https://alt.fedoraproject.org/cloud/">Fedora Cloud</a> images on
various Cloud providers. such as Amazon Web Services (AWS) .</p>
<h1 id="how-does-it-currently-work">How does it currently work?</h1>
<p>Fedimg listens to fedmsg for nightly as well as the production compose builds
messages. On receiving a new message, the
<a href="https://github.com/fedora-infra/fedimg/blob/develop/fedimg/consumers.py#L35">FedimgConsumer</a>
triggers the upload process. fedimg uses fedfind to extract the metadata for
the compose from where it get&rsquo;s the URL for the compressed raw image files.</p>
<p>The AWS
<a href="https://github.com/fedora-infra/fedimg/blob/develop/fedimg/services/ec2.py#L58">EC2Service</a>
then starts the process of creating the AMI.</p>
<ul>
<li>
<p>Booting up the utility instance.<br>
The <code>EC2Service</code> parses the fedimg configuration file to get the list of
<a href="https://github.com/fedora-infra/fedimg/blob/develop/fedimg.cfg.example">configuration</a>
regions mapped with the RHEL AMIs, AKIs, architecture etc. <code>EC2Service.upload</code> starts the uploading by booting a utility instance in the
first region(determined from the config file). The process continuously keeps trying to ssh into the machine to check if the machine has boot-ed up.</p>
</li>
<li>
<p>Downloading image &amp; taking snapshot<br>
Once the utility instance is ready to use the compressed RAW image is
downloaded in the secondary volume. A snapshot is taken out of the volume and
the AMI is created out of it.</p>
</li>
<li>
<p>The AMIs are then copied to the other regions</p>
</li>
<li>
<p>Testing the AMIs
Once the AMIs are created, a very basic <code>/bin/true</code> test is performed on a test
instance created using one of the created AMIs. Once the tests passes, the AMIs
are made public.</p>
</li>
</ul>
<p>At any point doing the execution, if the code throws an exception and even if
the AMIs fails the <code>_clean_up</code> method is fired. The
<a href="https://github.com/fedora-infra/fedimg/blob/develop/fedimg/services/ec2.py#L140">method</a>
cleans up the utility instance, test instance and the volumes which were
created.</p>
<p>The next blog <a href="/blog/redesigning-fedimg-part-ii/">post</a> will discuss the issues related to the current
architecture and about the new architecture.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Trek Photographer of the Month, December 2016</title>
      <link>https://words.yudocaa.in/blog/trek-photographer-dec-2016/</link>
      <pubDate>Mon, 30 Jan 2017 11:00:00 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/trek-photographer-dec-2016/</guid>
      <description>I was nominated for Trek Photographer of the Month, December 2016.</description>
      <content:encoded><![CDATA[<p>I have been nominated for the <a href="https://indiahikes.com/december-2016-photo-contest-nominations/">Trek Photographer of the Month</a>. I am grateful to
the judges for nominating me. Appreciate if you vote for me. I&rsquo;m up against
some really tough competition :)</p>
]]></content:encoded>
    </item>
    <item>
      <title>What&#39;s new in Autocloud</title>
      <link>https://words.yudocaa.in/blog/autocloud-whats-new/</link>
      <pubDate>Wed, 24 Aug 2016 17:28:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/autocloud-whats-new/</guid>
      <description>How Autocloud, Fedora&amp;#39;s automated cloud image tester, changed in the Fedora 24 cycle after composes moved away from Koji build messages.</description>
      <content:encoded><![CDATA[<p><a href="https://apps.fedoraproject.org/autocloud/">Autocloud</a> was released during the Fedora 23 cycle as a part of the <a href="https://fedoraproject.org/wiki/Changes/Two_Week_Atomic">Two Week
Atomic Process</a>.</p>
<p>Previously, it used to listen to fedmsg for successful Koji builds. Whenever,
there is a new message the AutocloudConsumer queues these message for
processing. The Autocloud job service then listens to the queue, downloads the
images and runs the tests using Tunir. A more detailed post about it&rsquo;s release
can be read <a href="https://kushaldas.in/posts/introducing-autocloud.html">here</a>.</p>
<p>During the Fedora 24 cycle things changed. There was a change on how the Fedora
composes are built. Thanks to adamw for writing a detailed <a href="https://www.happyassassin.net/2016/02/15/pungi-4-the-new-generation-of-the-fedora-compose-tools-and-what-it-means-for-qa/">blogpost</a> on what, why and how things
changed.</p>
<p>With this change now autocloud listens to the compose builds over the fedmsg.
The topic being &ldquo;<a href="apps.fedoraproject.org/datagrepper/raw?topic=org.fedoraproject.prod.pungi.compose.status.change">org.fedoraproject.prod.pungi.compose.status.change</a>&rdquo;. It checks
for the messages with the status FINISHED and FINISHED_INCOMPLETE.</p>
<p>After the filtration, it gets the Cloud Images built during that particular
compose using a tool called fedfind. The job here is parse the metadata of
the compose and getting the Cloud Images. These images are then queued into both libvirt and vbox boxes. The Autocloud job service then downloads the images and run the tests using
Tunir.</p>
<h3 id="changes-in-the-autocloud-fedmsg-messages">Changes in the Autocloud fedmsg messages.</h3>
<p>Earlier the messages with the following topics were sent</p>
<ul>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-image-queued">autolcoud.image.queued</a> - When the images are queued for testing</li>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-image-running">autocloud.image.running</a> - When the tests for the images are running</li>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-image-success">autocloud.image.success</a> - When the tests for the images passes.</li>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-image-failed">autocloud.image.failed</a> - When the tests for the images failed</li>
</ul>
<p>Now along with the fedmsg message for the status of the image test. Autocloud also
sends messages for the status of a particular compose.</p>
<ul>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-compose-queued">autocloud.compose.queued</a> - When the composes is in queued state</li>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-compose-running">autocloud.compose.running</a> - When the images for the composes are in testing
phase</li>
<li><a href="https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#autocloud-compose-complete">autocloud.compose.complete</a> - When running the test for the images for a
compose finishes and contains the aggregate result for the tests</li>
</ul>
<p>The <code>compose_id</code> field was added to the <code>autocloud.image.*</code> messages</p>
<h3 id="changes-in-the-ui">Changes in the UI</h3>
<ul>
<li>A <a href="https://apps.fedoraproject.org/autocloud/compose">page</a> was added to list all the composes. It gives an overview of the
composes like if it&rsquo;s still running, number of tests passed, etc</li>
<li>The <a href="https://apps.fedoraproject.org/autocloud/jobs">jobs page</a> lists all the tests data as earlier. We added filtering to the
page so filter the jobs based on various params</li>
<li>You need to agree that the <a href="https://apps.fedoraproject.org/autocloud/jobs/458/output">jobs output page</a> looks better than before. Now, rather the showing a big dump of text the output now is properly formatted. You can now reference each line separately.</li>
</ul>
<p>Right now, we are planning to work on testing the images uploaded via fedimg in Autocloud. If the project looks interesting and you are planning to contribute? Ping us on #fedora-apps on Freenode.</p>
]]></content:encoded>
    </item>
    <item>
      <title>WeeChat notifications on your phone with Pushover</title>
      <link>https://words.yudocaa.in/blog/receiving-weechat-notifications-on-mobile-via-pushover/</link>
      <pubDate>Mon, 11 Apr 2016 11:44:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/receiving-weechat-notifications-on-mobile-via-pushover/</guid>
      <description>Running WeeChat in tmux on a remote box? Get its IRC notifications on your phone with Pushover.</description>
      <content:encoded><![CDATA[<p>I recently switched to use Weechat as my primary IRC client from X-Chat. I did
a setup of <a href="https://weechat.org">Weechat</a> on my <a href="https://m.do.co/c/6b0be140d8a3">Digital Ocean</a> box.</p>
<p>Weechat setup turned out to be super simple and out of the box. I am running
Weechat within a tmux session. But the problem I was facing was due to poor
internet connection (thanks to Airtel for this and this was my primary reason
for switching to weechat from Xchat) I got disconnected from the DO box quite
often.</p>
<p>So, I looked over for a solution to get IRC notfications to my mobile device
and Weechat seems to already have a script for that called
<a href="https://weechat.org/scripts/source/pushover.pl.html/">pushover.pl</a>.</p>
<p>So, The script pushes the notifications from weechat to your device via
Pushover.</p>
<h2 id="installing-the-script">Installing the script</h2>
<div class="highlight"><pre tabindex="0" style="color:#ccc;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#666">1</span><span>/script install pushover.pl</span></span></code></pre></div>
<p>Create an account in <a href="https://pushover.net/">Pushover</a>, verify your email and create an application.
Once the application is created you find your application token, and your user
key.</p>
<h2 id="configuring">Configuring</h2>
<div class="highlight"><pre tabindex="0" style="color:#ccc;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#666">1</span><span>/set plugins.var.perl.pushover.token &lt;your application token&gt;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#666">2</span><span>/set plugins.var.perl.pushover.user &lt;your user key&gt;</span></span></code></pre></div>
<p>Now, your weechat is set to send messages through Pushover, install the
<a href="https://pushover.net/clients">application on your mobile device</a> and you will start receiving the irc messages
whenever you are mentioned or a private message.</p>
<p>The script also offers other customizations like</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-perl" data-lang="perl"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#b44">&#39;enabled&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;on&#39;</span>, <span style="color:#b44">&#34;Turn script on or off&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#b44">&#39;service&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;pushover&#39;</span>, <span style="color:#b44">&#39;Notification service to use.&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#b44">&#39;token&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#39;pushover API token/key&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#b44">&#39;user&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;pushover user key&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span><span style="color:#b44">&#39;nma_apikey&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;nma API key&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span><span style="color:#b44">&#39;pb_apikey&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;Pushbullet API key&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span><span style="color:#b44">&#39;pb_device_iden&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;Device Iden of pushbullet device&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span><span style="color:#b44">&#39;sound&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;Sound (empty for default)&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span><span style="color:#b44">&#39;priority&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#34;priority (empty for default)&#34;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span><span style="color:#b44">&#39;show_highlights&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;on&#39;</span>, <span style="color:#b44">&#39;Notify on highlights&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span><span style="color:#b44">&#39;show_priv_msg&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;on&#39;</span>, <span style="color:#b44">&#39;Notify on private messages&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12</span><span><span style="color:#b44">&#39;redact_priv_msg&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;off&#39;</span>, <span style="color:#b44">&#39;Hide the private message text&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13</span><span><span style="color:#b44">&#39;only_if_away&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;off&#39;</span>, <span style="color:#b44">&#39;Notify only if away status is active&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14</span><span><span style="color:#b44">&#39;only_if_inactive&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;off&#39;</span>, <span style="color:#b44">&#39;Notify only if buffer is not active&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15</span><span><span style="color:#b44">&#39;blacklist&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;&#39;</span>, <span style="color:#b44">&#39;Comma separated blacklist for notifications&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16</span><span><span style="color:#b44">&#39;verbose&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;1&#39;</span>, <span style="color:#b44">&#39;Verbosity level&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17</span><span><span style="color:#b44">&#39;rate_limit&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;0&#39;</span>, <span style="color:#b44">&#39;Rate limit in seconds&#39;</span>]
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18</span><span><span style="color:#b44">&#39;short_name&#39;</span> <span style="color:#666">=&gt;</span> [<span style="color:#b44">&#39;off&#39;</span>, <span style="color:#b44">&#39;Use short buffer name in notification&#39;</span>]</span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Fedimg: course of action</title>
      <link>https://words.yudocaa.in/blog/fedimg-course-of-action/</link>
      <pubDate>Sat, 23 Jan 2016 11:48:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/fedimg-course-of-action/</guid>
      <description>The plan for fedimg, the service that publishes Fedora Cloud images to AWS: cleaning up old AMIs to cut costs, and supporting more cloud providers.</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/fedora-infra/fedimg">Fedimg</a> is a Python-powered service which is built to make Fedora-Cloud images
available on popular cloud providers, such as Amazon Web Services (AWS). The
plans are to support more cloud providers such as Rackspace, Google Compute
Engine.</p>
<p>Fedimg listens for the messages from <a href="http://www.fedmsg.com/en/latest/">Fedmsg</a>
for the <a href="http://koji.fedoraproject.org/koji/">Koji</a> image builds.</p>
<p>Plan of work</p>
<ul>
<li>
<p>Add scripts to remove old AMIs we have uploaded
(<a href="https://github.com/fedora-infra/fedimg/issues/37">https://github.com/fedora-infra/fedimg/issues/37</a>)</p>
<p>Storing the AMIs are costing us lot. So the Cloud WG has decided to delete
the older AMIs. The deletion criteria would be</p>
<ul>
<li>Delete the pre-release AMIs after the final release</li>
<li>Delete the nightly build AMIs after 5 days of build</li>
</ul>
</li>
<li>
<p>Reorganize the way we upload images to AWS
(<a href="https://github.com/fedora-infra/fedimg/issues/42">https://github.com/fedora-infra/fedimg/issues/42</a>)</p>
<p>Currently fedimg boots up an instance, and downloads the image to volume and
then takes the snapshot to create the AMI.</p>
<p><a href="http://blog.devzero.com/">gholms</a> suggested that instead we can use euca2ools and using the command
<code>euca-import-volume</code> we can directly create a volume out of the image. Then
take the snapshot and create the AMI.</p>
</li>
<li>
<p>Add generic re-try logic to all of fedimg&rsquo;s operations
(<a href="https://github.com/fedora-infra/fedimg/issues/34">https://github.com/fedora-infra/fedimg/issues/34</a>)</p>
<p>Currently, the upload method for the EC2 Service is a big chunk of code.
My plan is to break code like these into different chunks and add a retry
decorator to it. The decorator will handle things like delay, number of times
to run etc.</p>
</li>
<li>
<p>Get autocloud to do the testing on AMIs
(<a href="https://github.com/fedora-infra/fedimg/issues/43">https://github.com/fedora-infra/fedimg/issues/43</a>)</p>
<p>Currently, Tunir has the feature to test the AMIs but it&rsquo;s in the
development branch and before starting off with this issue we need to work on
autocloud too in between to integrate the feature to test AMIs.</p>
</li>
<li>
<p>Generate a work report at the end of a job
(<a href="https://github.com/fedora-infra/fedimg/issues/26">https://github.com/fedora-infra/fedimg/issues/26</a>)</p>
<p>This is an easy-fix to add to add standard logging and can be completed with
the other tasks in progress.</p>
</li>
<li>
<p>Add secondary cloud providers
(<a href="https://github.com/fedora-infra/fedimg/issues/10">https://github.com/fedora-infra/fedimg/issues/10</a>)</p>
<p>This issue is blocked on legal stuff. So, as I work on other issues I will be
checking the status for this ticket and can swap some low-priority issue with
this and write up the service which is clear to go.</p>
</li>
</ul>
<h2 id="interested">Interested?</h2>
<p>If you are interested to help out you can ping on IRC in #fedora-apps on
Freenode.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Introducing Bugyou</title>
      <link>https://words.yudocaa.in/blog/introducing-bugyou/</link>
      <pubDate>Thu, 07 Jan 2016 14:09:43 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/introducing-bugyou/</guid>
      <description>Bugyou listens to Autocloud&amp;#39;s fedmsg messages, files issues for Fedora images that fail their tests, and closes them once the tests pass.</description>
      <content:encoded><![CDATA[<p>We developed <a href="https://kushaldas.in/posts/introducing-autocloud.html">Autocloud</a>
as a part of Fedora 23 release cycle as a part of Two week atomic image.</p>
<p>Autocloud publishes the messages to fedmsg when the image is queued, running,
success and failed.</p>
<h2 id="what-is-bugyou">What is Bugyou?</h2>
<p>Bugyou files issues for failed tests from Autocloud. Bugyou is part of Fedora
Project. It listens to Autocloud messages from fedmsg and files bug for images
which have failed the tests. Bugyou keeps updating the status of the images in
the bug and closes the issue once the tests are successful.</p>
<p>Currently Bugyou files issues in the repo <a href="https://pagure.io/">atomic-images</a>
in <a href="https://pagure.io/">Pagure</a></p>
<p><img src="http://sayanchowdhury.fedorapeople.org/images/bugyou01.jpg" alt="bugyou01" loading="lazy" decoding="async"></p>
<p>If you want to learn about how it is deployed, please visit this
<a href="http://bugyou.readthedocs.org/en/latest/">page</a></p>
<h2 id="future-plans">Future plans</h2>
<p>The plan is to make Bugyou more generic and to have plugins (Autocloud, Koji)
and various issue tracking tools as services like Pagure, Github, Trac etc.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Four Weeks in Fedora</title>
      <link>https://words.yudocaa.in/blog/four-weeks-in-fedora/</link>
      <pubDate>Tue, 24 Nov 2015 08:24:43 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/four-weeks-in-fedora/</guid>
      <description>Four weeks after joining Red Hat&amp;#39;s Fedora Engineering Team: from askbot and Autocloud contributions to working on Fedora full time.</description>
      <content:encoded><![CDATA[<p>26th of October 2015, I joined <a href="http://www.redhat.com/"><strong>Red Hat</strong></a> as a part of the <a href="https://fedoraproject.org/wiki/Fedora_Engineering"><strong>Fedora Engineering
Team</strong></a>.</p>
<p>I have been contributing to the Fedora for couple of years now starting from
the contributing to <a href="https://github.com/ASKBOT/askbot-devel"><strong>askbot-devel</strong></a> while we were gearing up for the <a href="https://ask.fedoraproject.org/en/questions/"><strong>Ask
Fedora</strong></a> release. This year in July, I along with <a href="kushaldas.in"><strong>kushal</strong></a>, <a href="www.rtnpro.com"><strong>rtnpro</strong></a>, <a href="http://kumar-pravin.blogspot.in/"><strong>praveenkumar</strong></a>
started working on <a href="github.com/kushaldas/autocloud"><strong>Autocloud</strong></a>, as a part of the <a href="https://fedoraproject.org/wiki/Changes/Two_Week_Atomic"><strong>Two-Week Atomic</strong></a> during the
Fedora 23 cycle. So, I last couple of years of I have met and worked with a lot
of people in the Fedora community. Joining Fedora was like working with
friends.</p>
<p>I joined as a remotee working from Pune. I will be primarily working
on different applications in the <a href="github.com/fedora-infra/"><strong>Fedora Infrastructure</strong></a></p>
<h2 id="first-week">First Week</h2>
<p>I was handed over a Lenovo Thinkpad T450s, it turned out to be a good working
machine with good configs. I started using <a href="http://www.mutt.org/"><strong>mutt</strong></a> as my email client, <a href="http://www.passwordstore.org/"><strong>pass</strong></a> for
managing passwords, <a href="taskwarrior.org"><strong>taskwarrior</strong></a> and <a href="https://github.com/ralphbean/bugwarrior/"><strong>bugwarrior</strong></a> to manage my tasks and bugs.</p>
<p>Chalked out a plan for <a href="piratepad.ca/p/bugyou"><strong>Bugyou</strong></a> and worked on a POC. <a href="pagure.io/bugyou/"><strong>Bugyou</strong></a> is an automatic bug
reporting tool that consumes the messages from fedmsg and file bugs to
different bug tracking tools for registered topics. I wrote down a fedmsg
consumer that would be consuming the failed and the successful messages and file
tickets from them <a href="pagure.io"><strong>pagure</strong></a>.</p>
<h2 id="second-and-third-week">Second and Third Week.</h2>
<p>During these two weeks, my primary focus was on deploying Bugyou. I fixed a
couple of bugs in <a href="https://pagure.io/libpagure/"><strong>libpagure</strong></a>, which is a Python library for the Pagure APIs.
I started packaging python-libpagure and making it ready for deployment as it
was dependecies for Bugyou. python-libpagure being my first RPM package I spent
a lot of time reading through the guidelines, fixing the issues in accordance to the review
given in the <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1281739"><strong>review request</strong></a>.</p>
<p>I added some management commands for Autocloud to abort long running task and
also to re-queue tasks. I also started with learning golang and wrote a minimalist
logging framework from <a href="https://pagure.io/brume"><strong>brume</strong></a>.</p>
<p>We also had a <a href="https://fedoraproject.org/wiki/FAD_Python_3_Porting_2015"><strong>Python3 Porting FAD</strong></a> on November 14-15 where I ported the
python-retask to Python 3. <a href="github.com/kushaldas/retask/"><strong>Retask</strong></a> is a python module to create and
manage distributed task queue/job queue.</p>
<h2 id="fourth-week">Fourth Week</h2>
<p>I worked with a <a href="https://pagure.io/pagure/pull-request/491"><strong>feature</strong></a> in pagure to show the list of commits before a
particular commit hex. I gave a demo of Bugyou the <a href="https://youtu.be/bkEXz601kM4"><strong>Fedora Release Engineering Tools Demo</strong></a>.
At the end of the week, I had my New Hire Orientation programme where I learnt
more about the culture, people and met new people at Red Hat.</p>
<p><strong>It seems to be exciting road ahead!</strong>.</p>
<p>Currently, I am working on a <a href="https://github.com/sayanchowdhury/bugyou/blob/develop/docs/diagrams/bugyou.txt"><strong>new architecture</strong></a> for Bugyou. If you are looking forward to help, come to #fedora-apps on freenode.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Leaving HackerEarth</title>
      <link>https://words.yudocaa.in/blog/leaving-hackerearth/</link>
      <pubDate>Mon, 12 Oct 2015 08:24:43 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/leaving-hackerearth/</guid>
      <description>From a remote internship in 2013 to leaving: looking back on my years building HackerEarth.</description>
      <content:encoded><![CDATA[<p>It&rsquo;s very hard to write but I am leaving HackerEarth.</p>
<h2 id="2013-and-internship">2013 and internship</h2>
<p>My college days were coming to an end with placements all around. I was sure to
join in a startup. One fine day, I saw a job posting on hasjob on 12th December
2012 that boldly said &ldquo;HackerEarth is buidling its initial team - Python/Django enthusiast needed&rdquo;.
The idea made me apply to HackerEarth and after a few rounds of email with Sachin and Vivek.
I landed up in a remote intern position.</p>
<p>My first task at HackerEarth as an intern was to implement Auth/Profile system
for Codetable. Damn! My first task itself was a daunting task. There was so
many permutaiton of things to take care of private digest, public digest,
read-only mode, read-write mode, authenticated user, anonymous user. 10 days
into the internship the auth system was finally working. Finally, the code was
deployed and the feeling was amazing.</p>
<p>Four months into the internship, I got a full time position at HackerEarth. I
joined the team at their Bangalore office in July 2013.</p>
<h2 id="working-at-hackerearth">Working at HackerEarth</h2>
<p>The office I joined was Bangalore Alpha Labs, Koramangala. In the span of
two years, I worked on a couple of things. I have worked on the Recruiter Panel,
Plagiarism Detection Engine, Profile pages, Challenges pages, HackerEarth Shorterner and
for the past one year I have been working on HackerEarth Sprints.</p>
<p>HackerEarth has scaled at a very rapid rate and the engineering team at
HackerEarth to learn at a more faster pace to keep things going. At
HackerEarth, as a full-stack engineer I got to know the deep knowledge of what
it takes to keep a website running at such a huge scale.</p>
<h2 id="life-at-hackerearth">Life at HackerEarth</h2>
<p>Supercalifragilisticexpialidocious! I never felt here that I was out of
college. Food fests, hardware hacking, TT, packs of Redbulls, movie and gaming
nights and flexible timings. Anything that had to keep a developer going we had it all.</p>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>I have been using Fedora since the initial days of my college. An year, I was
contributing to Fedora. I have been working on Fedora Infrastructure projects
after regular office hours and weekends. I have been also involved in
evangelizing Fedora and organizing Fedora meetups.</p>
<p>But now I will be joining the <a href="https://fedoraproject.org/wiki/Fedora_Engineering"><strong>Fedora Engineering
Team</strong></a> working on Fedora as a
part of my day job. Looking forward to scale more mountains and see what rocks
life throws at me at my new role at Fedora.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Move a running process into tmux with reptyr</title>
      <link>https://words.yudocaa.in/blog/migrate-a-running-process-into-tmux/</link>
      <pubDate>Sat, 27 Dec 2014 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/migrate-a-running-process-into-tmux/</guid>
      <description>Started a long job over SSH outside tmux? reptyr moves a running process into a tmux or screen session so you can safely disconnect.</description>
      <content:encoded><![CDATA[<p>Being a regular tmux user. Migrating a running process into tmux using
reptyr comes handy.</p>
<p><a href="https://github.com/nelhage/reptyr">reptyr</a> is a utility for taking an
existing running program and attaching it to a new terminal. Started a
long-running process over ssh, but have to leave and don&rsquo;t want to
interrupt it? Just start a screen, use reptyr to grab it, and then kill
the ssh session and head on home.</p>
<p>The package available in Fedora/Ubuntu repositories.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>% sudo yum install -y reptyr        <span style="color:#75715e"># For Fedora users</span>
</span></span><span style="display:flex;"><span>% sudo apt-get install -y reptyr    <span style="color:#75715e"># For Ubuntu users</span></span></span></code></pre></div><p>The steps to migrate a process is</p>
<ul>
<li>Sending the current foreground job to the background using CTRL-Z.</li>
<li>List all the background jobs using <strong>jobs -l</strong>. This will get you
the PID</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>% jobs -l
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>1<span style="color:#f92672">]</span>  + <span style="color:#ae81ff">16189</span> suspended  vim foobar.rst</span></span></code></pre></div><p>Here the PID is 16189</p>
<ul>
<li>Start a new tmux or screen session. I will be using tmux</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>% tmux</span></span></code></pre></div><ul>
<li>Reattach the background process using</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>% reptyr <span style="color:#ae81ff">16189</span></span></span></code></pre></div><p>If this error appears</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>Unable to attach to pid 16189: Operation not permitted
</span></span><span style="display:flex;"><span>The kernel denied permission <span style="color:#66d9ef">while</span> attaching</span></span></code></pre></div><p>Then type in the following command as root.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>% echo <span style="color:#ae81ff">0</span> &gt; /proc/sys/kernel/yama/ptrace_scope</span></span></code></pre></div><p>These are commands are compatible with screen also</p>
]]></content:encoded>
    </item>
    <item>
      <title>Waartaa applies for GSoC 2014</title>
      <link>https://words.yudocaa.in/blog/waartaa-applies-gsoc-2014/</link>
      <pubDate>Fri, 07 Mar 2014 07:20:23 +0000</pubDate>
      <guid>https://words.yudocaa.in/blog/waartaa-applies-gsoc-2014/</guid>
      <description>Waartaa, an open-source IRC client as a service with centralized logging and notifications, is a GSoC 2014 project idea under Fedora.</description>
      <content:encoded><![CDATA[<p>We are elated to inform you that <a href="https://www.waartaa.com/">Waartaa</a> has been accepted as a <a href="https://fedoraproject.org/wiki/Summer_coding_ideas_for_2014#Waartaa">project idea</a> for <a href="https://www.google-melange.com/gsoc/homepage/google/gsoc2014">GSoC</a> under <a href="https://fedoraproject.org/">Fedora</a>&rsquo;s umbrella.</p>
<p>For those who are new to Waartaa, Waartaa is an open-source communication tool for teams and groups. It is built on top of IRC. Currently, Waartaa is an IRC client as a service and it supports centralized logging, 24x7 idling, notifications and unique identity to a user on IRC. The source code is available at <a href="https://github.com/waartaa/waartaa">https://github.com/waartaa/waartaa</a> for you to download and hack on it.</p>
<p>If you find Waartaa interesting and something that you need, please feel free to ping us at #waartaa on Freenode. If you are a student, you are most welcome to submit your project idea for GSoC 2014 to help make Waartaa awesome.</p>
<h2 id="mission">Mission</h2>
<p>Our mission is to implement a one-stop open-source communication and collaboration tool for teams and groups, built on top of open source technologies (IRC, WebRTC, etc.).</p>
<h2 id="current-status">Current Status</h2>
<p>Waartaa is no longer just an idea in pages, it&rsquo;s real, it&rsquo;s live. You can try
our demo instance at <a href="https://try.waartaa.com/">https://try.waartaa.com</a>. We
have also started to receive quite some
<a href="https://github.com/waartaa/waartaa/graphs/contributors">contributions</a> as well. Lately, Waartaa has seen some massive improvements in terms of optimization and scaling. You can download and run Waartaa in your server or machine very easily. This allows you to get your own IRC client as a service up and running in no time.</p>
<h2 id="technology-stack">Technology Stack</h2>
<ul>
<li>Meteor JS <a href="http://www.meteor.com/">http://www.meteor.com/</a></li>
<li>MongoDB <a href="http://www.mongodb.org/">http://www.mongodb.org/</a></li>
<li>Forked node-irc <a href="https://github.com/waartaa/node-irc">https://github.com/waartaa/node-irc</a></li>
<li>And a host of meteorite apps from <a href="https://atmosphere.meteor.com/">https://atmosphere.meteor.com/</a></li>
</ul>
<h2 id="roadmap">Roadmap</h2>
<ul>
<li>Build a central hub for searching/reading channel logs for Open Source communities and projects.</li>
<li>Build a faster and scalable backend.</li>
<li>Freedom of choice: Expose an API so that users can use their existing IRC clients with waartaa.</li>
<li>Find a secure way to authenticate with IRC services without storing RAW passwords.</li>
<li>Respect user privacy: user personal messages should be stored in an encrypted format in the server.</li>
<li>Allow users to download chat logs in various formats compatible with popular IRC clients.</li>
<li>HTML5 mobile app</li>
<li>VCS, Bugzilla and other task management tools integration.</li>
<li>Video/audio conference facility on top of HTML5 and JS technologies.</li>
</ul>
<h2 id="communicate">Communicate</h2>
<ul>
<li>IRC: #waartaa on Freenode</li>
<li>Report bugs or submit patches:</li>
<li><a href="https://github.com/waartaa/waartaa/issues">https://github.com/waartaa/waartaa/issues</a></li>
<li>Mailing list: <a href="waartaa@googlegroups.com">waartaa@googlegroups.com</a></li>
</ul>
<p><em>This is a re-post of</em> <a href="https://www.waartaa.com/blog/waartaa-applies-for-gsoc-2014.html">https://www.waartaa.com/blog/waartaa-applies-for-gsoc-2014.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>An open letter to bloggers from Kolkata</title>
      <link>https://words.yudocaa.in/blog/an-open-letter-to-bloggers-from-kolkata/</link>
      <pubDate>Wed, 05 Mar 2014 00:31:43 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/an-open-letter-to-bloggers-from-kolkata/</guid>
      <description>Kolkata&amp;#39;s blogging scene was loud in 2009 and near silent by 2014. A call to bring the city&amp;#39;s bloggers back together for a meetup.</description>
      <content:encoded><![CDATA[<p>On February 23, 2014 at 4:43pm, Anirban Saha made a
<a href="https://www.facebook.com/notes/anirban-saha/about-kolkata-bloggers/649516675111111">post</a> on Facebook</p>
<p>Where are the Kolkata Bloggers?
Like, seriously ?</p>
<p>In August 8, 2009, Webreps organised Kolkata Bloggers Meet. That time I joined Webreps.
In October 31, 2009, we organised the BCET Bloggers workshop in BCET. There BCREC and NITDgp also joined in.
Have been active ever since then.</p>
<p>In 2014 - I hardly find any blogger visible and audible.
I want to organise a Kolkata Bloggers Meet later this year. Any help shall be welcome.
Please connect to this page:
<a href="https://www.facebook.com/pages/Kolkata-Bloggers/401101290026684">https://www.facebook.com/pages/Kolkata-Bloggers/401101290026684</a></p>
<p>I dont know why I do not feel good about this scenario. Kolkata Bloggers make a sad story. There might be many bloggers. We have incredibly good writers. But the BUZZ is so not there. There is no enthusiasm.
There is hardly any blogging for the sake of blogging, the fun or the enthusiasm for it.
Let&rsquo;s find them from where ever they are hidden in Kolkata. Let&rsquo;s meet up.</p>
<p>Check this screenshot of <a href="http://www.indiblogger.in/">indiblogger</a>, how big is Kolkata?</p>
<p><img src="/images/kolkata-bloggers_hu_208d28a5a1cafaf7.webp" srcset="/images/kolkata-bloggers_hu_8b9a789f235e0198.webp 480w, /images/kolkata-bloggers_hu_208d28a5a1cafaf7.webp 649w" sizes="(min-width: 800px) 720px, calc(100vw - 32px)"
    width="649" height="164" alt="IndiBlogger’s city list: Kolkata in small type next to much larger Bangalore, Chennai, Delhi and Mumbai" loading="lazy" decoding="async"></p>
<p>This screenshot makes me really curious to know on what happened to the Kolkata
bloggers. So here&rsquo;s an <a href="https://www.dropbox.com/s/9zs3ac7g7vpzn8b/An%20open%20letter%20to%20Bloggers%20from%20Kolkata.pdf">open letter to bloggers from
Kolkata</a>.</p>
<p>Dear Kolkata Blogger,</p>
<p>“<strong>Kolkata Bloggers</strong>” is an initiative to <em>collect and unite Kolkata based bloggers</em>.
Our first aim is to connect all bloggers. This is why we are sending this open
letter to you. As of now, we do not have a website. We have a page. And I would
tell you how that might help you and the entire newer generation from Kolkata.</p>
<p><em>This initiative will help you reach more audience</em>: If you are a new blogger, this
page can help you get exposure. We are adding the RSS feeds of your blog to
the Facebook page. Each time you update your blog, your blog post is
automatically shared by our page and you reach to more number of viewer. If
you are an existing blogger, you can guide us spread the awareness among the
youth of Kolkata. You can always reach to newer audience in this way.</p>
<p>This page shall be <em>motivating for young writers</em> who do not blog. It is time we
spread the awareness and help groom newer bloggers from the city. I often see
good writers not taking the plunge to blog, but they have a wish to do it. This
initiative, if properly supported, I believe will motivate them go to the next step.</p>
<p>This initiative might help you <em>network better</em>. We aim to build this as a
networking platform for bloggers from Kolkata, both online and offline. I often
see fantastic writers who are bloggers not connected with the rest of the
community. Networking is fun and you reach to more people.</p>
<p><em>Be inspired</em>: In grand bloggers meet, we aim to bring the masters of this field in
front to hold seminars, talks, ideating sessions and workshops. This will help you
0to better your blogging skills.</p>
<p>Help companies organise Blogger engagement programmes in Kolkata: When it
comes to Blogger engagement programs and brand promotions, Delhi Mumbai
Pune and Bangalore are often preferred over Kolkata.</p>
<p><code>Learn. Network better. Reach more audience. Build the ecosystem.</code></p>
<p><strong>How to join Kolkata Bloggers?</strong></p>
<p>This is the link to the page: <a href="https://www.facebook.com/KolkataBloggers">facebook.com/KolkataBloggers</a></p>
<p>Message us your Name, Blog URL, Twitter URL, Facebook URL, Google+ URL,
email address (very required), Phone number. There is “Kolkata Bloggers badge”
in the page as a pinned post. Put the badge on your blog. Let us know once you
are done. We will add the RSS feed of your blog to our page. Stay connected.
If you require any help, drop a message to the page. We’ll get back to you.</p>
<p>Best Regards,<br>
Kolkata Bloggers team.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to get started with open source</title>
      <link>https://words.yudocaa.in/blog/how-to-get-started-with-open-source/</link>
      <pubDate>Tue, 04 Mar 2014 00:30:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/how-to-get-started-with-open-source/</guid>
      <description>Answers to the questions students ask me after GSoC: how to start contributing to open source, which project to pick and how to find a bug.</description>
      <content:encoded><![CDATA[<p>I have been involved in <a href="http://dgplug.org/">Durgapur Linux User&rsquo;s
Group</a> for around last five years. I have been
contributing to various open source projects quite sometime. The primary
reason on why I contribute to open source is the feeling, the enjoyment
when you send a patch or a PR to a open source project. It makes you
happy when millions of people use your few lines of code in day to day
life.</p>
<p>After getting through <a href="http://www.google-melange.com/">Google Summer of
Code</a> and getting covered in <a href="http://yourstory.com/2013/09/super-student-sayan-chowdhury-python-and-open-source-developer/">Super
Student</a>,
a lot of people contacted me. All of them had the same set of questions.</p>
<ol>
<li>How to get started?</li>
<li>I know x,y,z languages. which project should i contribute?</li>
<li>How can i filter out a bug?</li>
</ol>
<p>So, I thought of writing a blog post in which i&rsquo;ll try to answer the
questions. But, first let us overview on what is Open Source Software.</p>
<p><strong>What is Open Source Software(OSS)?</strong></p>
<p>Open Source Software is a computer software whose source code is made
publically available for modification and enhancements released under
various licenses. &ldquo;<a href="http://opensource.com/resources/what-open-source">What is open
source?</a>&rdquo; is a good
read.</p>
<hr>
<p>I believe in the fact that reading few lines of code is more worth than
read 500 pages of a book. When you follow code written by great
programmers you automatically tend to pickup some great practices while
coding.</p>
<p>Even before I studied the subject Software Engineering in college, I had
practical knowledge of version control systems, debuggers, issue
trackers, continuous integration tools and this was all because of
contributing to a open source project.</p>
<p>You make a great resume that stands out from the crowd. Contributing to
open source software helps you building online presence.</p>
<p>But, these merry words really are not much help to get you started.</p>
<p><strong>How do I get started?</strong></p>
<p>The first and the foremost thing is choose a programming language of
your choice. Once you are done with selecting a programming language,
search for a project you might be interested.</p>
<p><a href="https://openhatch.org/">Open Hatch</a> is just for beginners like you. The
search page of Open Hatch filters out bugs based on</p>
<ul>
<li>Languages</li>
<li>Projects</li>
</ul>
<p>Mozilla too has a wide range of projects filter based on programming
language. <a href="http://http://goo.gl/FDQibQ/">What can I do for Mozilla?</a></p>
<p><strong>How do I filter out a bug?</strong></p>
<p>Truly speaking, finding a bug for a beginner is really a hard job. I
faced the same problems. But i&rsquo;ll be listing down on how to find easy
bugs and get started with contributing a large organization.</p>
<h1 id="fedora">Fedora</h1>
<p><a href="http://fedoraproject.org/easyfix/">Fedora Easy Fix page</a> list down all
the easy fixes you can get started with. Each project lists down whom
you need to contact and the maintainer of the project.</p>
<p>Fedora Infrastructure respositories contain some easy fixes. Look for
the <em>EasyFix</em> label in the repository issues section.
<a href="https://github.com/fedora-infra"><a href="https://github.com/fedora-infra">https://github.com/fedora-infra</a></a></p>
<h1 id="mozilla">Mozilla</h1>
<p>Getting started with Mozilla is damn simple. Mozilla has multiple
gateway for their fellow new contributors.</p>
<ol>
<li><a href="http://www.whatcanidoformozilla.org">What can I do for mozilla?</a></li>
</ol>
<p>This site suggests you project based on the programming skill you
select. Once you decide you project it takes you to the respective
mozilla project.</p>
<ol start="2">
<li><a href="http://www.joshmatthews.net/bugsahoy/">Bugs Ahoy!</a></li>
</ol>
<p>Bugs Ahoy is a site particularly for the new contributors. The website
categorizes the &lsquo;Easy bugs&rsquo; and &lsquo;Mentored Bugs&rsquo; based on the various
project like JS Engine, Devtools, Firefox OS etc.</p>
<p>But, what if you don&rsquo;t know which project is based out of which
programming language. Bugs Ahoy categorizes the easy bugs based on the
programming languages too primarily Python, Java, Shell, JS, C/C++,
HTML/CSS. One can combine the combination of filters to choose the
perfect bug to get started.</p>
<ol start="3">
<li>Mozilla Getting Involved Pages.</li>
</ol>
<p>Mozilla has Getting Involved which list down the projects in a
particular team The projects contains</p>
<ul>
<li>The mentors who can be contacted</li>
<li>Bugzilla page</li>
<li>IRC channel name</li>
<li>List of mentored bugs</li>
<li>Getting Involved DevTools -
<a href="https://wiki.mozilla.org/DevTools/GetInvolved"><a href="https://wiki.mozilla.org/DevTools/GetInvolved">https://wiki.mozilla.org/DevTools/GetInvolved</a></a></li>
<li>Getting Involved Mozilla.org -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/mozilla.org</a></a></li>
<li>Getting Involved AMO -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/addons.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/addons.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/addons.mozilla.org</a></a></li>
<li>Getting Involved SUMO -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/support.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/support.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/support.mozilla.org</a></a></li>
<li>Getting Involved MDN -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/developer.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/developer.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/developer.mozilla.org</a></a></li>
<li>Getting Involved Socorro -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/crash-stats.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/crash-stats.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/crash-stats.mozilla.org</a></a></li>
<li>Getting Involved Mozillians -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/mozillians.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/mozillians.org">https://wiki.mozilla.org/Webdev/GetInvolved/mozillians.org</a></a></li>
<li>Getting Involved ReMo -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org</a></a></li>
<li>Getting Involved input.mozilla.org -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/reps.mozilla.org</a></a></li>
<li>Getting Involved careers.mozilla.org -
<a href="https://wiki.mozilla.org/Webdev/GetInvolved/careers.mozilla.org"><a href="https://wiki.mozilla.org/Webdev/GetInvolved/careers.mozilla.org">https://wiki.mozilla.org/Webdev/GetInvolved/careers.mozilla.org</a></a></li>
<li>Getting Involved QMO -
<a href="https://quality.mozilla.org/docs/webqa/get-involved/"><a href="https://quality.mozilla.org/docs/webqa/get-involved/">https://quality.mozilla.org/docs/webqa/get-involved/</a></a></li>
</ul>
<p>Here is another link for <em>Bugzilla Mentored Bugs list</em> -
<a href="https://bugzil.la/sw:mentor"><a href="https://bugzil.la/sw:mentor">https://bugzil.la/sw:mentor</a></a></p>
<h1 id="kde">KDE</h1>
<p>If you want to start contributing to KDE, look out for the <strong>Junior
Jobs</strong> tag. Like each organization KDE too contains a section on how to
get started with the KDE projects.</p>
<ul>
<li>Getting Started -
<a href="http://techbase.kde.org/Contribute"><a href="http://techbase.kde.org/Contribute">http://techbase.kde.org/Contribute</a></a></li>
<li>Building a KDE Application -
<a href="http://techbase.kde.org/Getting_Started/Build"><a href="http://techbase.kde.org/Getting_Started/Build">http://techbase.kde.org/Getting_Started/Build</a></a></li>
<li>KDE Guide for a new contributor -
<a href="http://flossmanuals.net/kde-guide/"><a href="http://flossmanuals.net/kde-guide/">http://flossmanuals.net/kde-guide/</a></a></li>
<li>IRC - #kde-devel on Freenode</li>
<li>Mailing List -
<a href="https://mail.kde.org/mailman/listinfo/kde-devel"><a href="https://mail.kde.org/mailman/listinfo/kde-devel">https://mail.kde.org/mailman/listinfo/kde-devel</a></a></li>
</ul>
<h1 id="openstack">OpenStack</h1>
<p>OpenStack is also a great project to start with. The OpenStack project
is divided into various components: Swift, Glance, Nova, Horizon,
Keystone etc. Each of these components have their own page. If you head
over to the <a href="https://wiki.openstack.org/wiki/Main_Page">OpenStack Wiki Main
page</a>, you can see the
components listed seperately.</p>
<p>Each Component page contains the link to repository, bug
tracker(Launchpad), Documentation etc. OpenStack call their beginner
bugs as &ldquo;<strong>Low Hanging Fruit</strong>&rdquo;.</p>
<ul>
<li>Getting Started -
<a href="https://wiki.openstack.org/wiki/How_To_Contribute"><a href="https://wiki.openstack.org/wiki/How_To_Contribute">https://wiki.openstack.org/wiki/How_To_Contribute</a></a></li>
<li>If you are a developer -
<a href="https://wiki.openstack.org/wiki/How_To_Contribute#If_you.27re_a_developer"><a href="https://wiki.openstack.org/wiki/How_To_Contribute#If_you.27re_a_developer">https://wiki.openstack.org/wiki/How_To_Contribute#If_you.27re_a_developer</a></a></li>
<li>Documentation - <a href="docs.openstack.org">docs.openstack.org</a></li>
<li>IRC - #openstack-101, #openstack on Freenode</li>
</ul>
<p>And to find the low hanging fruits? <a href="https://bugs.launchpad.net/openstack/&#43;bugs?field.tag=low-hanging-fruit">Click
here!</a></p>
<h1 id="wikipedia">Wikipedia</h1>
<p>Most of the people on the planet have heard of the name Wikipedia but
ever thought of contributing to it. Wikipedia is supported by Wikimedia
Foundation. Mediawiki tag their easy bugs with the easy tag.
<a href="https://bugzilla.wikimedia.org/buglist.cgi?bug_severity=normal&amp;bug_severity=minor&amp;bug_severity=trivial&amp;bug_severity=enhancement&amp;bug_status=NEW&amp;bug_status=REOPENED&amp;columnlist=product%2Ccomponent%2Cchangeddate%2Cbug_severity%2Cpriority%2Cshort_desc&amp;keywords=easy&amp;keywords_type=allwords&amp;order=changeddate%20DESC%2Cproduct%2Ccomponent">Click!</a></p>
<ul>
<li>Getting Started -
<a href="http://www.mediawiki.org/wiki/Gerrit/Getting_started"><a href="http://www.mediawiki.org/wiki/Gerrit/Getting_started">http://www.mediawiki.org/wiki/Gerrit/Getting_started</a></a></li>
<li>How to become a Mediawiki Hacker -
<a href="http://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker"><a href="http://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker">http://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker</a></a></li>
<li>Installing Mediawiki on local system -
<a href="http://www.mediawiki.org/wiki/MediaWiki-Vagrant"><a href="http://www.mediawiki.org/wiki/MediaWiki-Vagrant">http://www.mediawiki.org/wiki/MediaWiki-Vagrant</a></a></li>
<li>IRC - #mediawiki</li>
</ul>
<p>Now this link is important</p>
<ul>
<li>Annoying little bugs -
<a href="http://www.mediawiki.org/wiki/Annoying_little_bugs"><a href="http://www.mediawiki.org/wiki/Annoying_little_bugs">http://www.mediawiki.org/wiki/Annoying_little_bugs</a></a></li>
</ul>
<h1 id="gnome">GNOME</h1>
<p>&lsquo;<strong>Gnome-love</strong>&rsquo; is the loving tag for the easy bugs who want to get
started with the GNOME. If you ever visit the GNOME homepage: the
&ldquo;<strong>Getting Involved</strong>&rdquo; link is clearly visible in header menubar.
Anyways here is the
<a href="https://bugzilla.gnome.org/buglist.cgi?quicksearch=keywords%3Agnome-love">link</a>
if you don&rsquo;t want to search :)</p>
<p>GNOME maintains a guide for the newcomers:
<a href="https://wiki.gnome.org/NewcomersTutorial">https://wiki.gnome.org/NewcomersTutorial</a></p>
<p>If you want to know on how to submit your first patch, read this :
<a href="https://wiki.gnome.org/GnomeLove/SubmittingPatches"><a href="https://wiki.gnome.org/GnomeLove/SubmittingPatches">https://wiki.gnome.org/GnomeLove/SubmittingPatches</a></a></p>
<p>If you want to build the code, then just build it from here:
<a href="https://wiki.gnome.org/GnomeLove/JhbuildIntroduction"><a href="https://wiki.gnome.org/GnomeLove/JhbuildIntroduction">https://wiki.gnome.org/GnomeLove/JhbuildIntroduction</a></a></p>
<p>Documentation:
<a href="https://developer.gnome.org/"><a href="https://developer.gnome.org/">https://developer.gnome.org/</a></a></p>
<h1 id="apache">Apache</h1>
<p>Apache maintains quite a number of projects. project.apache.org lists a
catalog of more than 140 projects in which one can start contributing.
The New Comers section is an easy read on how to get started in Apache,
<a href="http://community.apache.org/newcomers/index.html"><a href="http://community.apache.org/newcomers/index.html">http://community.apache.org/newcomers/index.html</a></a></p>
<p>Getting Involved wit Apache Software Foundation:
<a href="http://www.apache.org/foundation/getinvolved.html"><a href="http://www.apache.org/foundation/getinvolved.html">http://www.apache.org/foundation/getinvolved.html</a></a></p>
<hr>
<p>I am an active Python/Django developer for a couple of years. So, I&rsquo;m
adding on how can one start contributing to Python / Django</p>
<h1 id="python">Python</h1>
<p>To start with contributing with Python, just head over to the
<strong>Developer&rsquo;s Guide</strong>
(<a href="http://docs.python.org/devguide/"><a href="http://docs.python.org/devguide/">http://docs.python.org/devguide/</a></a>
). It starts with cloning the repository in your system tell goes on to
tell how can you check for the easy fixes.</p>
<p>The developer guide mentions that how can you start with making
documentation fixes, then move up to fix small bugs. Once you get
acquainted you can start taking up easy bugs.</p>
<ul>
<li>READ:
<a href="http://docs.python.org/devguide/fixingissues.html"><a href="http://docs.python.org/devguide/fixingissues.html">http://docs.python.org/devguide/fixingissues.html</a></a></li>
<li>Issue Tracker: <a href="http://bugs.python.org/"><a href="http://bugs.python.org/">http://bugs.python.org/</a></a></li>
<li>Easy Issues: <a href="http://goo.gl/NzJuDp"><a href="http://goo.gl/NzJuDp">http://goo.gl/NzJuDp</a></a></li>
</ul>
<h1 id="django">Django</h1>
<p>Django is a Python based web-framework used by some really big companies
e.g. Disqus, Instagram, Transifex etc. To start contributing in Django,
head over to the page <a href="https://docs.djangoproject.com/en/1.6/internals/contributing/">Contributing to
Django</a>.</p>
<p>This page lists down the links to mailing list, IRC channel, Issue
Tracker.</p>
<ul>
<li>Getting Involved in Django:
<a href="https://code.djangoproject.com/#Gettinginvolved"><a href="https://code.djangoproject.com/#Gettinginvolved">https://code.djangoproject.com/#Gettinginvolved</a></a></li>
</ul>
<p>Like most of the open source project Django too has easy fixes for the
new contributors.</p>
<ul>
<li>Little Easy Improvement -
<a href="https://code.djangoproject.com/wiki/LittleEasyImprovements">https://code.djangoproject.com/wiki/LittleEasyImprovements</a></li>
<li>Easy pickings -
<a href="https://code.djangoproject.com/query?status">https://code.djangoproject.com/query?status</a>=!closed&amp;easy=1</li>
</ul>
<p>The &ldquo;Little Easy Improvement&rdquo; also mentions issue for which one can send
patches for
<a href="https://code.djangoproject.com/query?status=!closed&amp;needs_docs=1&amp;order=priority">documentation</a>,
<a href="https://code.djangoproject.com/query?status=!closed&amp;needs_tests=1&amp;order=priority">writing
tests</a>,
or improving the
<a href="https://code.djangoproject.com/wiki/LittleEasyImprovements">codebase</a>.</p>
<p>Django maintains a page to advice new contributors:
<a href="https://docs.djangoproject.com/en/1.6/internals/contributing/new-contributors/"><a href="https://docs.djangoproject.com/en/1.6/internals/contributing/new-contributors/">https://docs.djangoproject.com/en/1.6/internals/contributing/new-contributors/</a></a></p>
<hr>
<p>Contributing to Open Source does not enforce you to contribute only to a
well-known community. There is a huge collection of open source projects
available on websites like <a href="https://github.com/">Github</a>,
<a href="http://sourceforge.net/">SourceForge</a> , <a href="https://code.google.com/">Google
Code</a>, <a href="https://bitbucket.org/">Bitbucket</a>
etc. I also enforce on the fact that just open source contribution does
not help. One need to work on side-project for ideas to keep flowing out
of his brain.</p>
<p>I also you like to quote a few lines from a nice <a href="http://blog.codecombat.com/reasons-why-you-shouldnt-hack-on-open-source-projects">blog
post</a></p>
<blockquote>
<p><code>You shouldn't become an artist so you can be famous, but because there's art inside of you that will kill you if you don't let it out. You shouldn't found a startup to make money, but because it's your life's work. And you shouldn't hack on open source projects because someone told you that your GitHub profile is your new resume, but because you want to code socially.</code></p>
</blockquote>
<p>Once you start contributing, you start interacting to people via IRC,
mailing lists. I strongly suggest you to go through the etiquette an
organization follows. In general roll your eyes through this
presentation to get a brief of it.
<a href="http://www.shakthimaan.com/downloads/glv/presentations/mailing-list-etiquette.pdf"><a href="http://www.shakthimaan.com/downloads/glv/presentations/mailing-list-etiquette.pdf">http://www.shakthimaan.com/downloads/glv/presentations/mailing-list-etiquette.pdf</a></a></p>
<p>Even after reading this if you face any problem. Feel free to reach me
on <a href="https://twitter.com/yudocaa">twitter</a> or shoot me a mail at
<em>sayan DOT chowdhury2012 AT gmail DOT com</em>. I would also like to thank
<a href="https://twitter.com/ciypro">Chandan Kumar</a> who helped me in writing
this blog post, he can be reached on chandankumar DOT 093047 AT gmail
DOT com.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: pen down</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-pen-down/</link>
      <pubDate>Wed, 25 Sep 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-pen-down/</guid>
      <description>Wrapping up GSoC 2013: writing my first setup.py and RPM package to deploy the Darkserver work to staging.</description>
      <content:encoded><![CDATA[<p>Lot of things to do!</p>
<p>Lot of things to do!</p>
<p>Lot of things to do!</p>
<p>This was continuously revovlving around my head for last 2 weeks. I had to
deploy the work i had done on staging instance and test it. But wait! I had
never written a setup.py before, never made a RPM package before.</p>
<p>While in college, I had a fascination toward RPM packaging as most of my
college seniors had created a RPM package sometime or other. During Mukti
2011, I had attended a RPM packaging workshop by Rahul Sundaram(mether), so i had the idea of how to package a RPM.</p>
<p>But well before that i had to write a setup script for darkserver. Though the basic setup.py did not take much time, but i got stuck when it came to
include staticfiles in setup.py. After a lot of googling and seraching, the
result was null. So i asked in #python IRC channel, when Ned Batchelder
helped me out. Finally, I got a link to package a Django app titled-
Packaging a Django resuable app</p>
<p>After completing writing setup.py, I started working on building RPM
packaging. Here are some links:</p>
<ul>
<li><a href="https://fedoraproject.org/wiki/Packaging:Guidelines?rd=Packaging/Guidelines">Packaging:Guidlines</a></li>
<li><a href="http://fedoraproject.org/wiki/How_to_create_an_RPM_package">How to create an RPM package</a></li>
<li><a href="http://fedoraproject.org/wiki/Packaging:Python">Packaging:Python</a></li>
</ul>
<p>After completing rpm packaging, it’s time for koji scratch build. And i did it
but while installing it in the staging instance, something happened. I had
used target as rawhide instead of dist-6E-epel while koji scratch build.
Nevermind, I repeated the steps and voilà, i successfully perform a fresh
install of the package and everything was working properly.:)</p>
<p>And, with that Google Summer of Code came to an End.</p>
<p><img src="/images/darkserver-the-end_hu_11fd34e848e9c5fb.webp" srcset="/images/darkserver-the-end_hu_5046f9acc7fe2b.webp 480w, /images/darkserver-the-end_hu_11fd34e848e9c5fb.webp 490w" sizes="(min-width: 800px) 720px, calc(100vw - 32px)"
    width="490" height="367" alt="“The End” title card" loading="lazy" decoding="async"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: web dashboard</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-web-dashboard/</link>
      <pubDate>Mon, 09 Sep 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-web-dashboard/</guid>
      <description>GSoC 2013 update: secondary architecture support in Darkserver&amp;#39;s command-line dashboard, and chasing a daemon that wouldn&amp;#39;t start on the dev instance.</description>
      <content:encoded><![CDATA[<p>There has been a lot of changes since I last posted my blog.</p>
<p><em>Darkserver’s command line dashboard now supports the secondary architecture.
You can easily shutdown the darkproducer of specifying which architecture to
shutdown.</em></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>dark&gt; shutdown darkproducer arch</span></span></code></pre></div><p><em>The support for multiple buildqueues was removed.</em></p>
<p>After a rigorous testing on my laptop, i pushed the code to the dev
instance that was assigned to me. But, a mysterious error happened, nor the pid or the daemon of darkproducer was getting created. Due to which the
complete project came to a halt. Later, it was figured out that i was
passing the config (<code>--config</code>) argument as a relative path of the conf file,
rather than the absolute path which created all this trouble. So, the
proper way to start the darkproducer is:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ python darkproducer --start<span style="color:#f92672">=</span><span style="color:#ae81ff">157435</span> --config<span style="color:#f92672">=</span>/home/sayan/Development/darkserver/configs/darkserverurl-arm.conf
</span></span></code></pre></div><p>Darkserver also now has a web dashboard which shows the status of the
darkproducer, darkbuildqueue and the darkjobworkers.</p>
<p><img src="/images/darkserver-web-dashboard_hu_978dee65a7031b4f.webp" srcset="/images/darkserver-web-dashboard_hu_e2b13d0a527ecc88.webp 480w, /images/darkserver-web-dashboard_hu_909dabae98b6a697.webp 800w, /images/darkserver-web-dashboard_hu_978dee65a7031b4f.webp 1024w" sizes="(min-width: 800px) 720px, calc(100vw - 32px)"
    width="1024" height="505" alt="Darkserver web dashboard showing the status of the producers, build queue and job workers" loading="lazy" decoding="async"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: testing by hand</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement/</link>
      <pubDate>Fri, 26 Jul 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement/</guid>
      <description>Manual testing of my Darkserver changes turned up bugs the local setup hid, including an XML-RPC server rejecting GET requests.</description>
      <content:encoded><![CDATA[<p>I am currently doing some manual testing of my code, and it proved to be vital. It helped me figure out a lot of bugs. One of seemed weird to me in the beginning: The get <a href="https://github.com/sayanchowdhury/darkserver/blob/config/darkimporter/libimporter.py#L310">here</a> returned an error.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Method Not Allowed This is an XML-RPC server. Only POST requests are
</span></span><span style="display:flex;"><span>accepted.</span></span></code></pre></div><p>The project required a heavy amount of download, so my mentor gave me a dev
instance to test out my code, all seemed to be fine, with the code properly
working on local machine. But on the dev instance a major bug surfaced, all the architecture with referring to the same key. So, currently i started
working on implementing different darkproducer-ids for different darkproducers.Also, I need to get started with a long-term bug, my mentor
pointed me in the shutdown functionality of darkserver.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: weeks two and three</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-week-two-and-week-three/</link>
      <pubDate>Wed, 10 Jul 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-week-two-and-week-three/</guid>
      <description>GSoC 2013, weeks two and three: illness, an injured wrist and a move to Bengaluru, then starting secondary architecture support in Darkserver.</description>
      <content:encoded><![CDATA[<p>It’s been two weeks since i last posted my report on Darkserver. I could not
post week two update as I had been down with bad health(seasonal changes +
Loo). With the week coming to an end and /me recovering from fever, i badly
hurt my right wrist and that was end of it. I somehow manage to move myself to
a new city, Bengaluru. The week passed as a trauma for me :’(</p>
<p>After recovering, i was back to coding/resolving issue in darkserver.
Starting from the mid of week three, I started working on implementing the
support for secondary architecture. Darkserver now supports secondary
architecture(arm, ppc).</p>
<p><strong>Defining the current structure of Darkserver:</strong>
|
<strong>darkproducer</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ darkproducer --start=BUILD_ID --config=CONFIG
</span></span><span style="display:flex;"><span>Options:
</span></span><span style="display:flex;"><span>-s BUILD_ID, --start=BUILD_ID Specifies the build id
</span></span><span style="display:flex;"><span>-c CONFIG, --config=CONFIG Specifies the Config file</span></span></code></pre></div><p>The config files points to either of the configuration files for Koji, ARM,
PowerPC. The files being darkserverurl-koji.conf, darkserverurl-arm.conf,
darkserverurl-ppc.conf placed under configs/. The default being for koji.</p>
<p>A &lsquo;url&rsquo; key was added to retask Queue to maintain the relation between the
build_id and the architecture.</p>
<p>The command line arguments in Darkserver are currently now parsed by
optparse python module. So, a pid is added to darkbuildqueue and
darkjobworker, so the command line arguments now is:</p>
<p><strong>darkbuildqueue</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ darkbuildqueue --start --pid=1
</span></span><span style="display:flex;"><span>Options:
</span></span><span style="display:flex;"><span>-s, --start start the buildqueue
</span></span><span style="display:flex;"><span>-p PID, --pid=PID specify the pid for build queue</span></span></code></pre></div><p><strong>darkjobworker</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ darkjobworkder --start --pid=1 // To start job worker 1
</span></span><span style="display:flex;"><span>$ darkjobworkder --start --pid=2 // To start job worker 2
</span></span><span style="display:flex;"><span>$ darkjobworkder --stop --pid=1 // To stop job worker 1
</span></span><span style="display:flex;"><span>Options:
</span></span><span style="display:flex;"><span>-s, --start start the buildqueue
</span></span><span style="display:flex;"><span>-e, --stop stop the buildqueue
</span></span><span style="display:flex;"><span>-p PID, --pid=PID specify the pid</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Google Summer of Code 2013: Welcome Kit</title>
      <link>https://words.yudocaa.in/blog/google-summer-of-code-2013-welcome-kit/</link>
      <pubDate>Tue, 25 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/google-summer-of-code-2013-welcome-kit/</guid>
      <description>My Google Summer of Code 2013 welcome kit arrived.</description>
      <content:encoded><![CDATA[<p>Today, I got my GSoC welcome Kit. YaY!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: week one</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-week-one/</link>
      <pubDate>Mon, 24 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-week-one/</guid>
      <description>First week of GSoC 2013 coding on Darkserver: replacing hard-coded links in libimporter with config files to allow multiple job queues.</description>
      <content:encoded><![CDATA[<p>The ‘Google Summer of Code’ code period began on June 17 and it’s already one
week into it. Prior to the beginning of the coding period, I went into the
depths of the darkserver codebase. In the current version of Darkserver, the
link present in the libimporter are hardlinks and it is pretty well visible
on Github</p>
<p>So, I removed the urls and the values from the libimporter and made it
configurable via config files. The config files are currently present in the
configs/ directory. This will eventually help to allow us to add different job
queues for different secondary architectures.</p>
<p>According to the Darkserver wiki, the steps for starting the darkproducer is:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ darkproducer start KOJI_BUILD_ID
</span></span></code></pre></div><p>Now, after removing the hardlinks and making it accesible through config
files, the steps to start the darkproducer is:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ darkproducer start KOJI_BUILD_ID --config<span style="color:#f92672">=</span>/path/to/config/file
</span></span></code></pre></div><p>The configuration file for koji should be in form of:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[darkserver]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">url</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;http://koji.fedoraproject.org/kojihub/&#39;</span></span></span></code></pre></div><p>In case of violation, the config option defaults to
/etc/darkserver/darkserverurl-koji.conf</p>
<p>Next, I would be aiming for implementing the support for the secondary
architectures, arm, ppc and add support to maintain different job queues for
the different secondary architectures.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: random scribblings</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-random-scribblings/</link>
      <pubDate>Sun, 23 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-random-scribblings/</guid>
      <description>Sketching the whole Darkserver workflow on paper to make sense of it during Google Summer of Code 2013.</description>
      <content:encoded><![CDATA[<p>It was worth trying to sit down with pen and paper and sketch out the
compete workflow of Darkserver. I got the idea to try out this stuff from
Vivek’s blogpost. Though, I could not get hold of a board but A4 did the job
for me and it is really proving out to be helpful.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: getting prepared</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-getting-prepared/</link>
      <pubDate>Sat, 22 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-getting-prepared/</guid>
      <description>Week zero of my Google Summer of Code 2013 project: reading through Darkserver, retask and Redis before writing any code.</description>
      <content:encoded><![CDATA[<p>The Google Summer of Code 2013 results was declared on 27th May 2013, in
between my semester exam so i had no time to devote until the end of my
semester exams and /me returning back to my home.</p>
<p>With the beginning of the 2nd week of June, I started to hack around with the
project, Darkserver. The project is available on
<a href="https://github.com/kushaldas/darkserver">GitHub</a>.</p>
<p>That week was pretty much a reading week rather than coding week as I had to
go through all kinds of documentation. Darkserver is implemented using
retask, which uses Redis. Though, I earlier little knowledge about the
topics, I went thoroughly through the Redis documentation and googled more
about Redis.</p>
<p>I also had to go through the retask documentation. Finally, I went once
again went through darkserver code and created diagrams, this will me
helping out the solve out the task and helping me to know where to hack the
code to get the work running.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Darkserver improvement: Google Summer of Code 2013</title>
      <link>https://words.yudocaa.in/blog/darkserver-improvement-google-summer-of-code-2013/</link>
      <pubDate>Tue, 18 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/darkserver-improvement-google-summer-of-code-2013/</guid>
      <description>I was selected for Google Summer of Code 2013 to improve Darkserver for Fedora, mentored by Kushal Das.</description>
      <content:encoded><![CDATA[<p>It’s better later than never. It’s been two week since the Google Summer of
Code 2013 results were announced and I am glad to say that I got selected
this year.</p>
<p>I will be working on Darkserver Improvement under Fedora. One can see a
draft of my proposal here. My mentor is <a href="http://kushaldas.in">Kushal Das</a> and i am really helpful for
helping me out in the whole process both in code and application.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Never do it for free</title>
      <link>https://words.yudocaa.in/blog/never-do-it-for-free/</link>
      <pubDate>Sat, 08 Jun 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/never-do-it-for-free/</guid>
      <description>The Joker&amp;#39;s line from The Dark Knight turns out to be right more often than I expected.</description>
      <content:encoded><![CDATA[<p>This was legendary quote given by “The Joker” in the movie The Dark Knight.</p>
<p>I was never a fan of this quote, until, I realized “The Joker” parted the right
message, not for all cases but <strong>Yes</strong> this quote does hold true for certain
instances.</p>
<p>Choose your students wisely. :P</p>
]]></content:encoded>
    </item>
    <item>
      <title>dgplug Summer Training 2013</title>
      <link>https://words.yudocaa.in/blog/dgplug-summer-training-2013/</link>
      <pubDate>Wed, 24 Apr 2013 12:00:00 +0530</pubDate>
      <guid>https://words.yudocaa.in/blog/dgplug-summer-training-2013/</guid>
      <description>The dgplug summer training returns for 2013: an online program where upstream developers teach students how to contribute to open source.</description>
      <content:encoded><![CDATA[<p>The time has come again this year for the dgplug summer training.</p>
<p>The summer training is conducted each year during the month of June. Though, we
cannot call June as the summer season but end of June is a suitable time for
most of the Indian students. During this summer training, a number of upstream
developers give talk on various open-source technologies. This guides the
student on how to contribute back to open source. At the end of the summer
training the student get a project which gives a strong base of the language as
well as programming skills.</p>
<p>Speaking on a personal note, I did this training twice, first in 2010, then in
2011 and this training helped me pave my career path. It gave me a lot of
exposure. It injected in me the habit of self-dependence, googling out your own
problems, hungry for knowledge of new ideas etc. Being a student of a private
engineering college, where project for any student meant any kind of online
management system, this training helped me think beyond that and go for solving
real life problems.</p>
<p>The details of the training can be found at <a href="http://dgplug.org/summertraining">dgplug summer
training</a> or you can
shoot a mail at <strong>kushaldas AT gmail DOT com</strong> for more details.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
