<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Chandra Sekar&#39;s Blog</title>
    <link>https://blog.cskr.dev/</link>
    <description>Recent content on Chandra Sekar&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-in</language>
    <copyright>Copyright 2005 Chandra Sekar S.</copyright>
    <lastBuildDate>Sat, 03 May 2025 19:04:31 +0530</lastBuildDate>
    <atom:link href="https://blog.cskr.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Making pylsp Work in Vim</title>
      <link>https://blog.cskr.dev/posts/python-pylsp-vim-uv/</link>
      <pubDate>Sat, 03 May 2025 19:04:31 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/python-pylsp-vim-uv/</guid>
      <description>&lt;p&gt;Language servers enable IDE-like features in text editors that support the&#xA;&lt;a href=&#34;https://microsoft.github.io/language-server-protocol/&#34;&gt;Language Server Protocol&lt;/a&gt;. &lt;a href=&#34;https://github.com/python-lsp/python-lsp-server&#34;&gt;pylsp&lt;/a&gt; is a language server for&#xA;Python. I use &lt;a href=&#34;https://github.com/prabirshrestha/vim-lsp&#34;&gt;vim-lsp&lt;/a&gt; to integrate language servers into Vim.&#xA;Configuring a language server in vim-lsp is &lt;a href=&#34;https://github.com/prabirshrestha/vim-lsp/wiki/Servers-Go&#34;&gt;straightforward for most&#xA;languages&lt;/a&gt;, but not for Python.&lt;/p&gt;&#xA;&lt;p&gt;Any non-trivial Python codebase uses a virtual environment (venv) to store its&#xA;dependencies. pylsp needs to know the location of the venv, for the currently&#xA;open file, to function correctly. When using Vim in the terminal, pylsp can be&#xA;made aware of the location by activating the venv, before starting Vim. It is&#xA;not possible to do this when starting a Vim GUI, like GVim, outside the&#xA;terminal. If you use a modern Python dependency manager like uv or Poetry, this&#xA;post offers a solution that works both inside and outside the terminal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FIRE and Personal Finance Inspirations</title>
      <link>https://blog.cskr.dev/posts/fire-finance-inspirations/</link>
      <pubDate>Sat, 28 Sep 2024 16:52:25 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/fire-finance-inspirations/</guid>
      <description>&lt;p&gt;There are two key problems to solve on the journey to attaining Financial&#xA;Independence and Retiring Early (FIRE): 1) ensuring you have enough money for&#xA;the rest of your life and 2) figuring out what to do after retiring. While the&#xA;latter is critical for a fulfilling retirement, it is also highly personal.&#xA;However, the path to achieving the former is quite common to most people.&lt;/p&gt;&#xA;&lt;p&gt;One&amp;rsquo;s attitude towards money, not their skills, is the largest determinant of&#xA;their financial success. This post shares some of the resources I found&#xA;inspiring and useful to calibrate mine. Many of the behaviours encouraged by&#xA;these apply even if you do not intend to FIRE, but want to maintain a stable&#xA;financial position throughout your life.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Productivity as an Employed Software Engineer</title>
      <link>https://blog.cskr.dev/posts/software-engineer-productivity/</link>
      <pubDate>Wed, 15 Nov 2023 18:35:14 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/software-engineer-productivity/</guid>
      <description>&lt;p&gt;There has been a lot of talk about employee productivity in recent days, with&#xA;some Indian tech entrepreneurs asking people to work 70 hours a week.&#xA;Productivity is not the sole purpose of life. Health and relationships that we&#xA;value are more important and productivity must never come at the cost of these.&#xA;With that out of the way, here is my view of productivity and ways to improve it&#xA;as a software engineer working as a full-time employee.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Tale of a Corrupt Backup</title>
      <link>https://blog.cskr.dev/posts/corrupt-backup/</link>
      <pubDate>Sat, 25 Feb 2023 23:28:13 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/corrupt-backup/</guid>
      <description>&lt;p&gt;As I mentioned in &lt;a href=&#34;https://blog.cskr.dev/posts/personal-backup-system/&#34;&gt;the post about my backup system&lt;/a&gt;, I run &lt;code&gt;restic check&lt;/code&gt;&#xA;regularly, to test the integrity of my backup. It has never reported any error&#xA;in my repository. It performs a quick, shallow check, and does not verify that&#xA;all the data is intact. I also restore a random file, whenever I run &lt;code&gt;restic check&lt;/code&gt;, to test recoverability.&lt;/p&gt;&#xA;&lt;p&gt;Shortly after I wrote the &lt;a href=&#34;https://blog.cskr.dev/posts/personal-backup-system/&#34;&gt;previous post&lt;/a&gt;, I decided to run &lt;code&gt;restic check --read-data&lt;/code&gt; for the first time ever. This reads every file in the repository&#xA;and simulates a full restore. To my utter horror, it reported many errors like&#xA;these!&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Pack ID does not match, want 5e66c2ac, got e80051de&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pack d64be86d contains 1 errors: [Blob ID does not match, want 8ebf2c10, got 350f6ba1]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>My Personal Backup System</title>
      <link>https://blog.cskr.dev/posts/personal-backup-system/</link>
      <pubDate>Sat, 24 Dec 2022 21:24:22 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/personal-backup-system/</guid>
      <description>&lt;p&gt;Computing devices and online services can fail catastrophically and take our&#xA;data with them. It is crucial that we have a robust system to backup and&#xA;restore our data, to protect against such events. This post details what I&#xA;wanted from the backup system for my personal data and the tools I use to&#xA;achieve them. This system has served me well over the last 5 years, across&#xA;fat-fingerings and disk failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connection Leak in PgBouncer Behind AWS NLB</title>
      <link>https://blog.cskr.dev/posts/pgbouncer-nlb-connection-leak/</link>
      <pubDate>Sun, 10 May 2020 18:04:50 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/pgbouncer-nlb-connection-leak/</guid>
      <description>&lt;p&gt;At a previous job, we had several instances of Ruby on Rails applications&#xA;connecting to PostgreSQL through &lt;a href=&#34;https://www.pgbouncer.org/&#34;&gt;PgBouncer&lt;/a&gt;. The services and databases&#xA;were deployed on bare-metal servers and chugged along fine. We then decided to&#xA;migrate to AWS. Upon migration, we noticed that PgBouncer started leaking&#xA;connections to PostgreSQL like a sieve, leading to exhaustion of the maximum&#xA;number of connections configured in RDS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Command-Line Tools on Vim Buffers</title>
      <link>https://blog.cskr.dev/posts/vim-buffer-commandline-tools/</link>
      <pubDate>Thu, 23 Apr 2020 22:34:43 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/vim-buffer-commandline-tools/</guid>
      <description>&lt;p&gt;Vim offers many ways to use the command-line tools available on your system when editing. You can:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;insert the output of a command into the current buffer - e.g., insert the current date.&lt;/li&gt;&#xA;&lt;li&gt;process lines of the current buffer through a command - e.g., sum up a list of numbers in the file.&lt;/li&gt;&#xA;&lt;li&gt;manipulate lines of the current buffer using a command - e.g., sort a list of names in the file.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>GnuCash for Personal Finance: Online Quotes</title>
      <link>https://blog.cskr.dev/posts/gnucash-personal-finance-online-quotes/</link>
      <pubDate>Sat, 28 Jul 2018 13:32:12 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/gnucash-personal-finance-online-quotes/</guid>
      <description>&lt;p&gt;This is third in the series of posts describing how I use&#xA;&lt;a href=&#34;https://gnucash.org/&#34;&gt;GnuCash&lt;/a&gt; to manage my finances. In&#xA;&lt;a href=&#34;https://blog.cskr.dev/posts/gnucash-personal-finance-chart-of-accounts/&#34;&gt;previous&lt;/a&gt;&#xA;&lt;a href=&#34;https://blog.cskr.dev/posts/gnucash-personal-finance-transactions-taxes/&#34;&gt;posts&lt;/a&gt;, I had discussed&#xA;how I organize my accounts, record transactions and handle taxation in GnuCash.&#xA;In this post I&amp;rsquo;ll show how GnuCash can be configured to fetch the current NAV&#xA;of mutual funds from the Internet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GnuCash for Personal Finance: Transactions and Taxes</title>
      <link>https://blog.cskr.dev/posts/gnucash-personal-finance-transactions-taxes/</link>
      <pubDate>Thu, 26 Jul 2018 19:13:27 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/gnucash-personal-finance-transactions-taxes/</guid>
      <description>&lt;p&gt;This is second in the series of posts describing how I use&#xA;&lt;a href=&#34;https://gnucash.org/&#34;&gt;GnuCash&lt;/a&gt; to manage my finances. In the &lt;a href=&#34;https://blog.cskr.dev/posts/gnucash-personal-finance-chart-of-accounts/&#34;&gt;previous&#xA;post&lt;/a&gt; I had discussed how I&#xA;organize my accounts in GnuCash. In this post I&amp;rsquo;ll describe how I record&#xA;transactions and use GnuCash to help with computation of taxes and filing of&#xA;tax returns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GnuCash for Personal Finance: Chart of Accounts</title>
      <link>https://blog.cskr.dev/posts/gnucash-personal-finance-chart-of-accounts/</link>
      <pubDate>Sun, 22 Jul 2018 09:07:43 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/gnucash-personal-finance-chart-of-accounts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gnucash.org/&#34;&gt;GnuCash&lt;/a&gt; is an open-source double-entry bookkeeping&#xA;software. In a series of posts this week, I will describe how I use GnuCash to&#xA;manage my finances. The series will be biased towards a portfolio composed&#xA;primarily of Indian mutual funds. This post describes the &lt;a href=&#34;https://en.wikipedia.org/wiki/Chart_of_accounts&#34;&gt;chart of&#xA;accounts&lt;/a&gt; involved and the&#xA;purpose of each account.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Safe and Convenient Password Management</title>
      <link>https://blog.cskr.dev/posts/safe-convenient-passwords/</link>
      <pubDate>Mon, 09 Oct 2017 20:09:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/safe-convenient-passwords/</guid>
      <description>&lt;p&gt;For better or worse, passwords are central to the safety of almost all our&#xA;online accounts. 2-factor authentication systems are meant to protect users&#xA;from compromise of their passwords. However, not all services support it. Also,&#xA;several online services (including banks), use OTP sent over SMS as the second&#xA;factor. This has several vulnerabilities and has been &lt;a href=&#34;https://www.schneier.com/blog/archives/2016/08/nist_is_no_long.html&#34;&gt;deprecated by&#xA;NIST&lt;/a&gt;.&#xA;That leaves password as a critical piece of these accounts&amp;rsquo; security.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prepared Statements Without Additional Round-Trip</title>
      <link>https://blog.cskr.dev/posts/prepared-statements-without-additional-roundtrip/</link>
      <pubDate>Sun, 09 Jul 2017 08:12:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/prepared-statements-without-additional-roundtrip/</guid>
      <description>&lt;p&gt;Prepared statements are the best way to avoid SQL injections in applications&#xA;accepting user input. However they require an additional round-trip to&#xA;prepare the query, which increases latency when your queries are dynamic and&#xA;the statements are not re-used.  PostgreSQL allows execution of such queries&#xA;without the additional cost!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java&#39;s CompletableFuture and Threads</title>
      <link>https://blog.cskr.dev/posts/java-completablefuture-threads/</link>
      <pubDate>Fri, 19 May 2017 00:20:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/java-completablefuture-threads/</guid>
      <description>&lt;p&gt;Quiz time. How many threads (other than &lt;code&gt;main&lt;/code&gt;) will this program create on a&#xA;dual-core machine?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; 10; i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            CompletableFuture.&lt;span style=&#34;color:#a6e22e&#34;&gt;runAsync&lt;/span&gt;(() &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                System.&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;(currentThread().&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Timing Equity MFs with PE</title>
      <link>https://blog.cskr.dev/posts/timing-equity-mf-pe/</link>
      <pubDate>Mon, 08 May 2017 21:17:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/timing-equity-mf-pe/</guid>
      <description>&lt;p&gt;The rule of thumb for equity investments is to not time the market, but&#xA;there are also several analyses correlating investing at high index PE levels&#xA;with lower returns. So can we use the PE levels of indices to generate better&#xA;returns than SIP and reduce volatility of the portfolio?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arena Allocation in Go</title>
      <link>https://blog.cskr.dev/posts/arena-allocation-in-go/</link>
      <pubDate>Mon, 07 Jul 2014 13:55:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/arena-allocation-in-go/</guid>
      <description>&lt;p&gt;One of the weaknesses of Go&amp;rsquo;s runtime today is the relatively naive GC&#xA;implementation. This is evident from go performing consistently worse than most&#xA;other languages in the &lt;a href=&#34;http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=binarytrees#about&#34;&gt;binary trees&#xA;benchmark&lt;/a&gt;.&#xA;However, the language can make designing programs that reduce GC cost fairly&#xA;straightforward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Does Delegates Beautifully!</title>
      <link>https://blog.cskr.dev/posts/golang-does-delegates-beautifully/</link>
      <pubDate>Fri, 06 Apr 2012 13:12:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/golang-does-delegates-beautifully/</guid>
      <description>&lt;p&gt;When working with object-oriented languages, there are many instances when one&#xA;would want to implement an interface re-using code from another implementation&#xA;of the interface. While inheritance will work, it couples the new&#xA;implementation to the specific other implementation. Composition with&#xA;delegation will be a better way of doing this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Git Outshines Subversion at Merging</title>
      <link>https://blog.cskr.dev/posts/git-outshines-subversion/</link>
      <pubDate>Fri, 22 Jan 2010 18:49:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/git-outshines-subversion/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently started getting my head around Git having been a Subversion&#xA;(sadly even CVS) user all along. While I liked the fact that it was distributed&#xA;and way faster than Subversion at most operations, I couldn&amp;rsquo;t understand why&#xA;many claimed it was better at merging than Subversion (1.5 and above). Even the&#xA;&amp;ldquo;Branch Handling&amp;rdquo; section in &lt;a href=&#34;http://git.wiki.kernel.org/index.php/GitSvnComparsion&#34;&gt;Git&amp;rsquo;s&#xA;wiki&lt;/a&gt; talks only about&#xA;better history tracking but not about how Git is better at merging the content&#xA;themselves.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Layouts with JSP in Spring MVC</title>
      <link>https://blog.cskr.dev/posts/simple-layouts-with-jsp-in-spring-mvc/</link>
      <pubDate>Sun, 13 Dec 2009 00:55:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/simple-layouts-with-jsp-in-spring-mvc/</guid>
      <description>&lt;p&gt;Every web application has elements common to all its pages which are good&#xA;candidates for re-use. While Spring MVC provides integration with Tiles, it can&#xA;be an overkill for simple applications and needs using Spring&amp;rsquo;s client side JS&#xA;library for AJAX (correct me if I&amp;rsquo;m wrong).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mocking Math.random() Using PowerMock</title>
      <link>https://blog.cskr.dev/posts/mocking-mathrandom-using-powermock/</link>
      <pubDate>Sun, 01 Nov 2009 23:34:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/mocking-mathrandom-using-powermock/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s consider the below Game class in a guessing game where a random target is&#xA;chosen by the system and the user guesses the target. The system returns an&#xA;appropriate message based on whether the guess was higher, lower or equal to&#xA;the random target.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ScriptEngineBuilder for Java</title>
      <link>https://blog.cskr.dev/posts/scriptenginebuilder-for-java/</link>
      <pubDate>Fri, 28 Aug 2009 23:43:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/scriptenginebuilder-for-java/</guid>
      <description>&lt;p&gt;Java 6 allows you to execute and communicate with scripts written in any&#xA;scripting language, using the &lt;a href=&#34;http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html&#34;&gt;Scripting&#xA;API&lt;/a&gt;.&#xA;However, the code needed to create a&#xA;&lt;a href=&#34;http://java.sun.com/javase/6/docs/api/javax/script/ScriptEngine.html&#34;&gt;ScriptEngine&lt;/a&gt;&#xA;and evaluate a set of script files within it, is quite verbose and throws&#xA;several checked exceptions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keyboard Shortcuts in JSF Using AJAX4JSF</title>
      <link>https://blog.cskr.dev/posts/shortcuts-in-jsf-web-applications-using/</link>
      <pubDate>Mon, 06 Oct 2008 00:38:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/shortcuts-in-jsf-web-applications-using/</guid>
      <description>&lt;p&gt;AJAX4JSF is library of JSF components which can be used to easily add AJAX&#xA;capabilities to JSF web applications. AJAX4JSF is available as part of the&#xA;&lt;a href=&#34;http://www.jboss.org/jbossrichfaces/&#34;&gt;Richfaces&lt;/a&gt; component library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python&#39;s String Translations for Java</title>
      <link>https://blog.cskr.dev/posts/pythons-string-translations-for-java/</link>
      <pubDate>Sun, 14 Sep 2008 19:21:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/pythons-string-translations-for-java/</guid>
      <description>&lt;p&gt;Just as I started poking my nose into Python, I came across two really&#xA;interesting functions in its string module.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Local APT repository</title>
      <link>https://blog.cskr.dev/posts/local-apt-repository/</link>
      <pubDate>Fri, 09 Feb 2007 12:12:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/local-apt-repository/</guid>
      <description>&lt;p&gt;I have long been wanting to make a local directory, which contains all my&#xA;Debian packages, as a repository to be added in, &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;.&#xA;Finally, I did it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy Way to Create Slack Packages</title>
      <link>https://blog.cskr.dev/posts/easy-way-to-create-slack-packages/</link>
      <pubDate>Tue, 23 Aug 2005 16:48:00 +0530</pubDate>
      <guid>https://blog.cskr.dev/posts/easy-way-to-create-slack-packages/</guid>
      <description>&lt;p&gt;I came across this interesting utility which allows creation of slack packages&#xA;easily.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
