<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Favorite posts on Noetic Nought</title>
    <link>https://punchagan.muse-amuse.in/categories/best/</link>
    <description>Recent content in Favorite posts on Noetic Nought</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>© 2006-2026 CC-BY-SA-4.0</copyright>
    <lastBuildDate>Fri, 30 Jan 2026 16:58:00 +0530</lastBuildDate>
    <atom:link href="https://punchagan.muse-amuse.in/categories/best/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why my Elfeed index was 0 bytes</title>
      <link>https://punchagan.muse-amuse.in/blog/elfeed-index-0-bytes/</link>
      <pubDate>Fri, 30 Jan 2026 16:58:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/elfeed-index-0-bytes/</guid>
      <description>&lt;p&gt;My Linux machine crashed, while I was in the middle of a video call. I&#xA;restarted quickly, and continued the discussion. Later, when I was trying to&#xA;sync &lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;Elfeed&lt;/a&gt; updates onto the &lt;a href=&#34;https://github.com/punchagan/elfeed-offline/&#34;&gt;Elfeed Offline&lt;/a&gt; app on my phone, I found it acting&#xA;weird. All the &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/offline-friendly-elfeed-web-ui/&#34;&gt;bazillion things&lt;/a&gt; needed to get it working were in place, but it&#xA;was still complaining about the Emacs Elfeed server not being accessible. I&#xA;tried opening Elfeed inside Emacs and failed! The index file in &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/elfeed-db-back-up-hooks/&#34;&gt;Elfeed&amp;rsquo;s DB was&#xA;empty&lt;/a&gt;! Gone! Poof!&lt;/p&gt;&#xA;&lt;p&gt;Frustrating, but I didn&amp;rsquo;t have time to look into what happened. I would&amp;rsquo;ve been&#xA;furious if I had been using Elfeed for longer and had a lot more metadata&#xA;saved. But, it was only a few weeks of lost metadata - posts I read, starred,&#xA;etc. I quickly setup a &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/elfeed-db-back-up-hooks/&#34;&gt;Git based backup&lt;/a&gt; to prevent future losses and moved on.&lt;/p&gt;&#xA;&lt;p&gt;Later, I found time to dig into what might have happened&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-breadcrumbs&#34;&gt;The breadcrumbs&lt;/h2&gt;&#xA;&lt;p&gt;Elfeed stores all the metadata for all the posts in an &lt;code&gt;index&lt;/code&gt; file with a&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Content-addressable_storage&#34;&gt;content addressed store&lt;/a&gt; of the contents of each of the posts. The index file is&#xA;simply a dump of the hash-table containing the metadata for the subscribed&#xA;feeds, their entries and metadata like tags, read/unread status, etc.&lt;/p&gt;&#xA;&lt;p&gt;The DB save happens in &lt;a href=&#34;https://github.com/skeeto/elfeed/blob/a39fb78e34ee25dc8baea83376f929d7c128344f/elfeed-db.el#L271&#34;&gt;&lt;code&gt;elfeed-db-save&lt;/code&gt;&lt;/a&gt;, which simply dumps the hash-table to&#xA;disk inside a call to the &lt;code&gt;with-temp-file&lt;/code&gt; macro.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed-db-save&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;; &amp;lt;snip&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;with-temp-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;expand-file-name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;index&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed-db-directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;; ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;princ&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;;;; Elfeed Database Index (version %s)\n\n&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;nv&#34;&gt;elfeed-db-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;; ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;prin1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elfeed-db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;with-temp-file&lt;/code&gt;, as its documentation says, lets you create a new buffer,&#xA;evaluate the &lt;code&gt;body&lt;/code&gt; there, and write the buffer to &lt;code&gt;file&lt;/code&gt;. For a moment, I&#xA;thought there was some temporary file involved, but nope! I guess the name&#xA;comes as an extension from &lt;code&gt;with-temp-buffer&lt;/code&gt; which does create a temporary&#xA;buffer where the &lt;code&gt;body&lt;/code&gt; of the macro gets evaluated. Stripped to its core, &lt;a href=&#34;https://github.com/emacs-mirror/emacs/blob/3b547e4f5dc99dc157b52a059cf234f7a5d15112/lisp/subr.el#L5300-L5318&#34;&gt;this&#xA;function&lt;/a&gt; is:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;temp-file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;temp-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;generate-new-buffer&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; *temp file*&amp;#34;&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;prog1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;with-current-buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;temp-buffer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;o&#34;&gt;,@&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;with-current-buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;temp-buffer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;write-region&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;temp-file&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;write-region-and-o-trunc&#34;&gt;&lt;code&gt;write-region&lt;/code&gt; and &lt;code&gt;O_TRUNC&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So, &lt;a href=&#34;https://github.com/emacs-mirror/emacs/blob/3b547e4f5dc99dc157b52a059cf234f7a5d15112/src/fileio.c#L5512&#34;&gt;&lt;code&gt;write-region&lt;/code&gt; is the workhorse&lt;/a&gt; which writes the contents of the temporary&#xA;buffer to disk. It&amp;rsquo;s a roughly 300 line long C function that essentially opens&#xA;the file with the flags &lt;code&gt;O_WRONLY | O_CREAT | O_TRUNC&lt;/code&gt; (in this case) and then&#xA;does something to write the contents to the file, etc. Honestly, I didn&amp;rsquo;t look&#xA;at anything else too carefully after I spotted the &lt;code&gt;O_TRUNC&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The man page of &lt;code&gt;open&lt;/code&gt; explains &lt;code&gt;O_TRUNC&lt;/code&gt; as follows:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;O_TRUNC :: If the file already exists and is a regular file and the access mode&#xA;allows writing (i.e., is O_RDWR or O_WRONLY) it will be truncated to&#xA;length 0.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Voilà!&lt;/p&gt;&#xA;&lt;p&gt;The write is not atomic. The file first gets truncated to length 0, and then we&#xA;hope that the new contents get correctly written before something goes wrong.&lt;/p&gt;&#xA;&lt;p&gt;It now makes sense why the file got truncated to 0 bytes. The crash happened&#xA;after the &lt;code&gt;open&lt;/code&gt;, but before the write. Somehow the crash happened in this&#xA;short window, and poof!&lt;/p&gt;&#xA;&lt;h2 id=&#34;emacs-has-backup-files-doesn-t-it&#34;&gt;Emacs has backup files, doesn&amp;rsquo;t it?&lt;/h2&gt;&#xA;&lt;p&gt;Temporary files with &lt;code&gt;~&lt;/code&gt; in their file extensions have definitely annoyed me in&#xA;the past when Emacs created them where I didn&amp;rsquo;t want them. So, I do know that&#xA;Emacs has back-up mechanisms out of the box. But, it turns out that the backups&#xA;occur in code paths that are more interactive, like &lt;code&gt;save-buffer&lt;/code&gt;,&#xA;&lt;code&gt;write-file&lt;/code&gt;, etc. And not via the programmatic APIs like &lt;code&gt;write-region&lt;/code&gt; or the&#xA;higher level &lt;code&gt;with-temp-file&lt;/code&gt;. &lt;code&gt;save-buffer&lt;/code&gt; calls &lt;code&gt;backup-buffer&lt;/code&gt; before&#xA;writing, but &lt;code&gt;write-region&lt;/code&gt; is much more low-level and doesn&amp;rsquo;t deal with&#xA;backups.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The fix&lt;/h2&gt;&#xA;&lt;p&gt;My &amp;ldquo;fix&amp;rdquo; for this is to backup the Elfeed data in a git repository to be able&#xA;to recover from any such corruptions of data, which I already wrote about &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/elfeed-db-back-up-hooks/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I know that any code that uses &lt;code&gt;with-temp-file&lt;/code&gt; (or &lt;code&gt;write-region&lt;/code&gt;) could be&#xA;affected by this, and the right fix for this may be to write to a temporary&#xA;file and rename it. Maybe next time I lose data I&amp;rsquo;ll actually fix it properly.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>An offline-friendly Elfeed web UI</title>
      <link>https://punchagan.muse-amuse.in/blog/offline-friendly-elfeed-web-ui/</link>
      <pubDate>Wed, 07 Jan 2026 02:31:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/offline-friendly-elfeed-web-ui/</guid>
      <description>&lt;p&gt;I want to read articles from my RSS subscriptions on my phone without signing&#xA;up to a hosted service or running a public server.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;Elfeed&lt;/a&gt;, the Emacs feed reader, already lets me manage my subscriptions and read&#xA;from within Emacs. It comes with an experimental web UI, but needs the server&#xA;(running on my laptop) to be accessible whenever I want to read. My phone&#xA;becomes useless the moment my laptop sleeps.&lt;/p&gt;&#xA;&lt;p&gt;So, I built an alternate web UI with a service worker that caches content on&#xA;the client side for a smooth offline reading experience. It&amp;rsquo;s written in &lt;a href=&#34;https://ocaml.org/&#34;&gt;OCaml&lt;/a&gt;&#xA;and compiled to JavaScript using &lt;a href=&#34;https://ocsigen.org/js_of_ocaml/latest/manual/overview&#34;&gt;&lt;code&gt;js_of_ocaml&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-bother-with-rss-feeds&#34;&gt;Why bother with RSS feeds?&lt;/h2&gt;&#xA;&lt;p&gt;It is annoyingly easy to fall into the trap of short form videos or other&#xA;algorithmically &amp;ldquo;curated&amp;rdquo; feeds and get sucked into scrolling mindlessly. I&#xA;fear this is going to get even worse with all the generative AI stuff.&lt;/p&gt;&#xA;&lt;p&gt;I want to be more deliberate about what I consume. RSS feels calmer and gives&#xA;me a greater sense of control. Or it may just be nostalgia from good old Google&#xA;Reader days.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-emacs-and-elfeed&#34;&gt;Why Emacs and Elfeed?&lt;/h2&gt;&#xA;&lt;p&gt;Since Google Reader was killed, I&amp;rsquo;ve bounced between many readers but none of&#xA;them has really stuck with me. I&amp;rsquo;ve had &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/elfeed-hook-to-fetch-full-content/&#34;&gt;different phases&lt;/a&gt; of using Elfeed, over&#xA;the years, though.&lt;/p&gt;&#xA;&lt;p&gt;I like the fact that everything is local with Elfeed &amp;ndash; no hosted services, no&#xA;public servers. And since it lives inside Emacs, everything from tagging to how&#xA;entries are displayed can be tweaked.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-elfeed-offline&#34;&gt;Why Elfeed offline?&lt;/h2&gt;&#xA;&lt;p&gt;Elfeed also ships a basic web UI that lets me read my feeds from a different&#xA;device, but only when my laptop is online and reachable. I&amp;rsquo;d like to be able to&#xA;read these posts even when I&amp;rsquo;m &amp;ldquo;on the road&amp;rdquo;, say, while waiting for a train or&#xA;while taking a cab ride.&lt;/p&gt;&#xA;&lt;p&gt;I knew it should be possible to do this with some client side caching. And, I&#xA;considered improving the web UI of Elfeed itself but it doesn&amp;rsquo;t seem to be&#xA;&lt;a href=&#34;https://github.com/skeeto/elfeed/pulls&#34;&gt;actively maintained&lt;/a&gt; in the last couple of years. Creating a separate project&#xA;would also give me more freedom to experiment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-does-it-work&#34;&gt;How does it work?&lt;/h2&gt;&#xA;&lt;p&gt;Elfeed offline comes with a tiny &lt;a href=&#34;https://camlworks.github.io/dream/&#34;&gt;Dream&lt;/a&gt; based webserver that acts as a proxy in&#xA;front of the Emacs Elfeed webserver for the API requests. The Dream web server&#xA;also serves the static assets like the HTML, JavaScript, stylesheets and the&#xA;Service Worker for the web app. The diagram below shows how data flows between the different components.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-artist&#34; data-lang=&#34;artist&#34;&gt;+---------------+     +-----------------+&#xA;|  Emacs Elfeed |&amp;lt;---&amp;gt;|     Dream       |&#xA;|     Server    |     |   Web-server    |&#xA;+---------------+     +-----------------+&#xA;                               ^&#xA;                               |&#xA;                               v&#xA; +------------+        +----------------+       +---------+&#xA; |    Web     |        |    Service     |       | Browser |&#xA; |  Client    |&amp;lt;------&amp;gt;|     Worker     |&amp;lt;-----&amp;gt;|  Cache  |&#xA; +------------+        +----------------+       +---------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The Service Worker intercepts all the &lt;code&gt;GET&lt;/code&gt; requests from the client and&#xA;responds using a &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Caching#cache_first_with_cache_refresh&#34;&gt;cache-first-with-cache-refresh&lt;/a&gt; strategy. This makes the&#xA;reading experience feel very responsive. The web client also implements a &amp;ldquo;good&#xA;enough&amp;rdquo; clone of the original search functionality of Elfeed to allow searching&#xA;and filtering content while offline.&lt;/p&gt;&#xA;&lt;p&gt;The web app also lets me mark entries as read or star them when I&amp;rsquo;m offline.&#xA;The Service Worker caches these operations and updates the server when the&#xA;server becomes reachable. There&amp;rsquo;s no smart conflict resolution here, and the&#xA;API requests just overwrite and update the state on the server.&lt;/p&gt;&#xA;&lt;p&gt;I have been using this for a couple of weeks now, and am quite happy with how&#xA;responsive the UI feels and the number of posts I managed to read so far.&lt;/p&gt;&#xA;&lt;p&gt;But, there are definitely some rough edges to smoothen out.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a pain to make sure that both the servers are running when I&amp;rsquo;m online&#xA;and want to sync new updates to my phone. I&amp;rsquo;m considering adding a tiny Emacs&#xA;helper to manage this.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I need to remember to open the app on my phone to trigger a cache update&#xA;before stepping away from my laptop. I want to explore using the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Background_Synchronization_API&#34;&gt;Background&#xA;Sync API&lt;/a&gt; (not available on Firefox) to possibly make this easier.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The UI could use some improvements to indicate pending syncs when offline and&#xA;also indicate the last sync with the server to help ensure everything is&#xA;synced before stepping away from my laptop.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Service workers need the server to be accessible via https. I have a wrapper&#xA;script around mkcert to make this easy, but some apps on my phone &lt;a href=&#34;https://www.reddit.com/r/UPI/comments/1p4le9x/what_happened_to_my_bhim_app/&#34;&gt;refuse to&#xA;work&lt;/a&gt; correctly when there are user installed certificates.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;why-ocaml&#34;&gt;Why OCaml?&lt;/h2&gt;&#xA;&lt;p&gt;At work, I write OCaml every day and enjoy it. This project seemed like a good&#xA;one to try out &lt;code&gt;js_of_ocaml&lt;/code&gt; since everything is local and I don&amp;rsquo;t need to&#xA;worry about bundle sizes, etc.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;js_of_ocaml&lt;/code&gt; makes it quite convenient to share code between the server and&#xA;the client side. And given there&amp;rsquo;s also a &amp;ldquo;third&amp;rdquo; Service Worker component in&#xA;the mix, I thought it would make life easier. For instance, the message types&#xA;and the serialization code for the messages between the client and the service&#xA;worker are shared.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m also using this project to experiment with Dune&amp;rsquo;s &amp;ldquo;soon to be released&amp;rdquo;™&#xA;&lt;a href=&#34;https://dune.readthedocs.io/en/stable/tutorials/dune-package-management/index.html&#34;&gt;package management&lt;/a&gt; that our team at Tarides is working on building.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-can-you-use-it&#34;&gt;How can you use it?&lt;/h2&gt;&#xA;&lt;p&gt;You can try out Elfeed offline&amp;rsquo;s UI &lt;a href=&#34;https://elfeed-offline.muse-amuse.in/&#34;&gt;here&lt;/a&gt; as a static site (with some posts from&#xA;Planet Emacslife and The OCaml Planet). You should be able to read posts,&#xA;search and filter for posts, mark them as read or star them. Any changes you&#xA;make should be preserved between reloads.&lt;/p&gt;&#xA;&lt;p&gt;If you are an Emacs user but don&amp;rsquo;t use Elfeed, you can checkout the &lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;Elfeed&amp;rsquo;s&#xA;README&lt;/a&gt; for instructions to set it up. It also has links to a bunch of blog&#xA;posts and videos that show off the features of Elfeed.&lt;/p&gt;&#xA;&lt;p&gt;If you are already using Elfeed, you should be able to set it up quite easily&#xA;if you&amp;rsquo;re happy installing some OCaml tooling. The installations instructions&#xA;are available in the &lt;a href=&#34;https://github.com/punchagan/elfeed-offline/blob/main/README.org&#34;&gt;README&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;outro&#34;&gt;Outro&lt;/h2&gt;&#xA;&lt;p&gt;I have been enjoying using Elfeed offline for the past couple of weeks. And I&amp;rsquo;m&#xA;hoping I&amp;rsquo;ll end up spending much more time reading in it, than fixing and&#xA;building it. It currently definitely feels like something I built for myself,&#xA;but I&amp;rsquo;d love to hear from others who try it out.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>An innocent query that caused Zulip downtime</title>
      <link>https://punchagan.muse-amuse.in/blog/zulip-downtime-postmortem/</link>
      <pubDate>Thu, 28 May 2020 11:34:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/zulip-downtime-postmortem/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Recently, &lt;a href=&#34;https://github.com/zulip/zulip/commit/8f32db81a1a1230b425aef8f7c6d2b7fc4543ee7&#34;&gt;a change&lt;/a&gt; that I contributed caused some downtime on the Zulip cloud&#xA;(zulipchat.com). Here&amp;rsquo;s a user &lt;a href=&#34;https://twitter.com/zulip/status/1255005502599131137&#34;&gt;tweeting at us&lt;/a&gt;, about this.&lt;/p&gt;&#xA;&lt;p&gt;I shared this with some friends (who use Zulip) and they asked me to share more&#xA;about what happened. I began writing an explanation, and it eventually turned&#xA;into a blog post. The post tries to explain what caused the down-time, without&#xA;assuming too much knowledge of the Zulip DB schema, but it would help if you&#xA;used Zulip a little.&lt;/p&gt;&#xA;&lt;p&gt;The goal of my change was to change how Zulip backend calculates the&#xA;&lt;code&gt;furthest_read_time&lt;/code&gt; for a user &amp;ndash; the time stamp indicating when the last&#xA;message was read.&lt;/p&gt;&#xA;&lt;p&gt;Previously, the code used simply kept track of the message ID of the messages&#xA;being read by a user in a field called the &amp;ldquo;pointer&amp;rdquo;. My change was to move away&#xA;from this &lt;code&gt;pointer&lt;/code&gt; approach to using the actual timestamp of when a user last&#xA;read a message.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-the-pointer&#34;&gt;What is the pointer?&lt;/h2&gt;&#xA;&lt;p&gt;Put very simply, the pointer is just a message ID&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; &amp;ndash; ideally, the ID of the&#xA;&amp;ldquo;last message&amp;rdquo; a user has read. Message IDs in Zulip are incremental &amp;ndash; a&#xA;message that has arrived after another one, would have a higher ID than the&#xA;older message. So, it would&amp;rsquo;ve been a great way to keep track of the last read&#xA;message, if all the messages were in &amp;ldquo;one continuous feed&amp;rdquo;. But, guess what,&#xA;Zulip has streams and topics which are precisely what make Zulip such a valuable&#xA;communication tool!&lt;/p&gt;&#xA;&lt;p&gt;The pointer can be set to the ID of the message that is currently being read,&#xA;but only when we are in the &amp;ldquo;All messages&amp;rdquo; view. In this view, all messages are&#xA;ordered chronologically, so any message that is after another message would have&#xA;arrived after it, and would have an ID greater than the other message. So&#xA;reading a message in this view means, any message with a lower ID must&amp;rsquo;ve&#xA;already been read.&lt;/p&gt;&#xA;&lt;p&gt;When you are reading messages in a stream/topic (narrowed) view, the &lt;code&gt;pointer&lt;/code&gt;&#xA;is not updated. We can&amp;rsquo;t be sure that all messages with ID lower than the&#xA;current message&amp;rsquo;s ID have already been read. There could be a whole bunch of&#xA;unread messages in other streams/topics than the current one you are reading.&#xA;So, the &lt;code&gt;pointer&lt;/code&gt; doesn&amp;rsquo;t get updated until you go to the &amp;ldquo;All messages&amp;rdquo; view&#xA;and scroll over the messages, even if you have already read them in a narrowed&#xA;view.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-change-this&#34;&gt;Why change this?&lt;/h2&gt;&#xA;&lt;p&gt;Using the &lt;code&gt;pointer&lt;/code&gt; to compute the &lt;code&gt;furthest_read_time&lt;/code&gt; doesn&amp;rsquo;t work very well,&#xA;because it is only updated in the &amp;ldquo;All messages&amp;rdquo; view. In other words,&#xA;&lt;code&gt;furthest_read_time&lt;/code&gt; turned out to actually mean something like&#xA;&lt;code&gt;furthest_read_time_in_all_messages_view&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;furthest_read_time&lt;/code&gt; is used in the UI to display the bankruptcy banner &amp;ndash; a&#xA;prompt shown to a user to mark all messages as read, if they have &amp;ldquo;too many&amp;rdquo;&#xA;unreads, and haven&amp;rsquo;t read new messages in the last 48 hours.&lt;/p&gt;&#xA;&lt;p&gt;But, this is a problem, especially in Zulip instances with a lot of traffic,&#xA;where people leave a lot of messages unread until they have the time to&#xA;catch-up. It is common for people to communicate only in a handful of&#xA;streams/topics, and leave a lot of messages unread in other streams or topics,&#xA;that they are hoping to catch-up on, when they have more time at hand. Such&#xA;users would avoid using the &amp;ldquo;All messages&amp;rdquo; view at any cost.&lt;/p&gt;&#xA;&lt;p&gt;Even in not-so-high-traffic realms, some users just prefer not to use the &amp;ldquo;All&#xA;messages&amp;rdquo; view, and just stick to narrowed views.&lt;/p&gt;&#xA;&lt;p&gt;So, for these users the &lt;code&gt;furthest_read_time&lt;/code&gt; would get updated very rarely, and&#xA;could potentially remain at a date way back in the past. This meant the users&#xA;would see the bankruptcy banner despite actively participating in the Realm,&#xA;even if only in a few topics/streams. This is annoying UX, and what something we&#xA;wanted to fix.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-did-we-change-this-to&#34;&gt;What did we change this to?&lt;/h2&gt;&#xA;&lt;p&gt;We decided to use the last read message time as the message to consider for the&#xA;&lt;code&gt;furthest_read_time&lt;/code&gt;. The following &amp;ldquo;innocent looking&amp;rdquo; query should do that for&#xA;us, we thought&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;UserMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_profile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_profile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UserMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Well, it does, but not without bringing down the whole of &lt;code&gt;zulipchat.com&lt;/code&gt; after&#xA;a deploy! 🙈 But, why?!&lt;/p&gt;&#xA;&lt;p&gt;Some background on how data is stored would be useful to see why.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usermessage-table-is-huge-my-friend&#34;&gt;UserMessage table is huge, my friend&lt;/h2&gt;&#xA;&lt;p&gt;Zulip&amp;rsquo;s data model has a &lt;code&gt;Message&lt;/code&gt; table that stores the content of each&#xA;message, when it was sent, by whom, to which topic, etc. The &lt;code&gt;UserMessage&lt;/code&gt; table&#xA;is then used to keep track of what the status of this message is, for each user&#xA;that has received the message.  A 32 bit flag field is used to keep track of&#xA;things like, whether the user has read a message, starred a message, has been&#xA;mentioned in a message, etc. So, if a messages is sent to a stream with N users,&#xA;it creates 1 row in the &lt;code&gt;Message&lt;/code&gt; table and N rows in the &lt;code&gt;UserMessage&lt;/code&gt; table.&#xA;If M such messages are sent, it would create M*N rows in the &lt;code&gt;UserMessage&lt;/code&gt;&#xA;table. So, pretty soon, the &lt;code&gt;UserMessage&lt;/code&gt; table becomes huge! &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;To make common queries on this table efficient, the DB has indexes for them.&#xA;Some of the indexes on the &lt;code&gt;UserMessage&lt;/code&gt; table are documented &lt;a href=&#34;https://zulip.readthedocs.io/en/latest/production/expensive-migrations.html#running-expensive-migrations-early&#34;&gt;here&lt;/a&gt;, though the&#xA;documentation was created in the migration context for production deployments.&#xA;There are indexes for various things, including &lt;strong&gt;unread&lt;/strong&gt; messages.&lt;/p&gt;&#xA;&lt;p&gt;And here&amp;rsquo;s our innocent looking query, as a reminder.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;UserMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_profile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_profile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UserMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This query searches through the &lt;code&gt;read&lt;/code&gt; messages for a particular user, and tries&#xA;to figure out the last message they read. Note that the DB only has indexes for&#xA;unread messages, not read messages! So, this query isn&amp;rsquo;t using DB indexes to&#xA;search for this needle in the haystack, and ends up being pretty damn slow!&lt;/p&gt;&#xA;&lt;p&gt;Additionally, this query is run for every user when the &amp;ldquo;home page&amp;rdquo; is loaded&#xA;since we want to calculate their &lt;code&gt;furthest_read_time&lt;/code&gt; to decide if should show&#xA;the bankruptcy banner.&lt;/p&gt;&#xA;&lt;p&gt;Also, Zulip&amp;rsquo;s architecture is designed to allow using the same app server and DB&#xA;to host multiple different realms. And zulipchat.com is such a deployment where&#xA;a few servers are used to serve all the realms. (I don&amp;rsquo;t know too much about the&#xA;deployment setup, though).&lt;/p&gt;&#xA;&lt;p&gt;When a new change is deployed to zulipchat.com and the server is restarted, all&#xA;the clients of all the users reload. Having an expensive query in that path,&#xA;would just kill the DB. And this innocent looking query &lt;a href=&#34;https://twitter.com/zulip/status/1255005502599131137&#34;&gt;didn&amp;rsquo;t disappoint&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-did-we-fix-this&#34;&gt;How did we fix this?&lt;/h2&gt;&#xA;&lt;p&gt;Well, this change was &lt;a href=&#34;https://github.com/zulip/zulip/commit/976e554799a03ff9d82d7b75d77d45985cd25df4&#34;&gt;reverted&lt;/a&gt; immediately by &lt;a href=&#34;https://github.com/timabbott&#34;&gt;Tim&lt;/a&gt;, and things were kicked back&#xA;into a usable state.&lt;/p&gt;&#xA;&lt;p&gt;Later, we decided to take a different approach. We decided to look at a&#xA;different table (&lt;code&gt;UserActivity&lt;/code&gt;) that tracks user activity, mainly for the&#xA;purpose of analytics. This table keeps track of the last time a user performed&#xA;an action based on the API calls made.&lt;/p&gt;&#xA;&lt;p&gt;Among other things, changing any of the flags in the 32-bit flag field is one of&#xA;the actions that is tracked. Marking a message as read was being tracked too. We&#xA;use the last time this action was performed to compute the last time a user was&#xA;&amp;ldquo;active&amp;rdquo;, and based on that decide if we should show the bankruptcy banner or&#xA;not.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the &lt;a href=&#34;https://github.com/zulip/zulip/commit/ded3b0076070365dddccd43d7f05fd627c2637f7&#34;&gt;actual commit&lt;/a&gt; that makes this change. But, it turns out that needed a&#xA;&lt;a href=&#34;https://github.com/zulip/zulip/commit/734d651b45542e9a1bdea10cd290637f73be30d9&#34;&gt;follow-up fix&lt;/a&gt; too. 🙈&lt;/p&gt;&#xA;&lt;div style=&#34;font-size:small;&#34; class=&#34;reviewers&#34;&gt;&#xA;&lt;p&gt;Thanks to &lt;a href=&#34;https://web.mit.edu/tabbott/www/&#34;&gt;Tim Abbott&lt;/a&gt; and &lt;a href=&#34;http://baali.muse-amuse.in&#34;&gt;Shantanu&lt;/a&gt; for reading drafts of this post.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;The pointer was used to do a &lt;a href=&#34;https://zulip.readthedocs.io/en/latest/subsystems/pointer.html&#34;&gt;bunch of useful things&lt;/a&gt;, but we are&#xA;currently in the process of &lt;a href=&#34;https://github.com/zulip/zulip/issues/8994&#34;&gt;removing it&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Zulip&amp;rsquo;s code base uses a concept called &lt;a href=&#34;https://zulip.readthedocs.io/en/latest/subsystems/sending-messages.html#soft-deactivation&#34;&gt;soft-deactivation&lt;/a&gt;&#xA;to mitigate this problem on Realms where there are a lot of users who log in&#xA;very infrequently, or don&amp;rsquo;t login after an initial period of activity. So, the&#xA;number of rows are not exactly &lt;code&gt;M*N&lt;/code&gt; in all the cases, but in the worst case&#xA;they are.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>The tools we build change us</title>
      <link>https://punchagan.muse-amuse.in/blog/the-tools-we-build-change-us/</link>
      <pubDate>Wed, 22 Apr 2020 12:54:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/the-tools-we-build-change-us/</guid>
      <description>&lt;p&gt;A couple of weeks ago, I spent some time building a couple of &amp;ldquo;automation tools&amp;rdquo;&#xA;for myself. It is still early days to talk about their impact, but I have&#xA;already noticed some changes, and have some thoughts to share.&lt;/p&gt;&#xA;&lt;p&gt;Thanks to the lock-down, I felt like I needed to do something to get more&#xA;fresh-air and sunlight. I figured out a nice setup to work from my balcony, when&#xA;I feel like it. It&amp;rsquo;s nice to sit in the balcony, since there&amp;rsquo;s not as much&#xA;traffic, and there&amp;rsquo;s enough fresh-air and sunlight.&lt;/p&gt;&#xA;&lt;p&gt;I usually work with dark themes in all my tools - code editor, terminal, OS,&#xA;chat clients, etc. But, switching to the balcony during the day makes it harder&#xA;to read text in dark mode. I have to switch all my tools to light mode. And then&#xA;switch back, when I come back in. It takes me about a minute or so, each time to&#xA;make this switch. In a few days, this started to seem like work! And I could see&#xA;myself needing to push myself to step out, or step back in.&lt;/p&gt;&#xA;&lt;p&gt;A few days later, I spent about half a day writing a tool that could switch&#xA;modes for all of these programs with one command. If I was doing the switches&#xA;manually each time, it would take 2-4 months for the switching time to add up to&#xA;the 4-6 hours, I spent on getting everything working correctly. So, it&amp;rsquo;s not&#xA;really a bad investment. But, what matters more is that I don&amp;rsquo;t feel a mental&#xA;block to alternate between indoors and outdoors because of all the extra work&#xA;that manual theme switching felt like. I am getting some fresh air and sunlight&#xA;everyday. :)&lt;/p&gt;&#xA;&lt;p&gt;The other tool I wrote recently was for generating a daily summary of what I&#xA;worked on from my org-mode based clock entries. I add more detail to the&#xA;bulleted-list summary that gets generated, and then post it on our team&amp;rsquo;s Zulip.&#xA;I noticed a couple of changes because of this.&lt;/p&gt;&#xA;&lt;p&gt;First, I clock things more diligently than I did before. If I forget to clock&#xA;into something, I go back and add some manual entries, to maintain a proper log.&#xA;Second, a couple of other people on my team also have started posting a summary&#xA;of their day&amp;rsquo;s work, which is quite nice. This tool may have triggered a change&#xA;in my teammates&amp;rsquo; behavior, though I didn&amp;rsquo;t really intend it to.&lt;/p&gt;&#xA;&lt;p&gt;We are creatures of habit, often going through the motions, without needing to&#xA;think about what we are doing. This is evolution helping us save energy for the&#xA;more critical tasks. But, our environments can have a big impact on our habits.&#xA;Having tools around us, that are easy to use, can help us nudge ourselves in&#xA;directions that we want to be nudged in.&lt;/p&gt;&#xA;&lt;p&gt;The tools we build can change us; if we let them.&lt;/p&gt;&#xA;&lt;div style=&#34;font-size:small;&#34; class=&#34;reviewers&#34;&gt;&#xA;&lt;p&gt;Thanks to Rajesh, &lt;a href=&#34;https://www.lightstalking.com/author/riteshsaini/&#34;&gt;Ritesh&lt;/a&gt;, &lt;a href=&#34;https://tcluri.github.io/&#34;&gt;Tejaa&lt;/a&gt; and &lt;a href=&#34;http://baali.muse-amuse.in&#34;&gt;Shantanu&lt;/a&gt; for reading drafts of this post.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Been there, done that, and still doing it!</title>
      <link>https://punchagan.muse-amuse.in/blog/been-there-done-that-and-still-doing-it/</link>
      <pubDate>Thu, 05 Sep 2019 12:23:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/been-there-done-that-and-still-doing-it/</guid>
      <description>&lt;p&gt;I was talking to a friend a few days ago about a new internship she got. She&#xA;wasn&amp;rsquo;t sure if and how much she was going to get paid for it. Unpaid internships&#xA;aren&amp;rsquo;t cool, and experience doesn&amp;rsquo;t pay the bills, &lt;a href=&#34;https://twitter.com/aoc/status/1154466530500812800&#34;&gt;as they say&lt;/a&gt;. Eventually, it&#xA;turned out that she was indeed going to get paid for it.&lt;/p&gt;&#xA;&lt;p&gt;But, when she found out that she&amp;rsquo;ll be paid, she felt way more pressure to &amp;ldquo;not&#xA;screw up&amp;rdquo;. I think working in this mode of &amp;ldquo;don&amp;rsquo;t screw up&amp;rdquo; isn&amp;rsquo;t very productive.&#xA;Staying in the mindset of &amp;ldquo;learn as much as I can&amp;rdquo; would still be the best way&#xA;to go about the internship.&lt;/p&gt;&#xA;&lt;p&gt;Screwing up is a part of the job. People make mistakes and learn from them.&#xA;Screwing up is a part of gaining experience, and learning. To let people feel&#xA;comfortable and safe while they are learning, it&amp;rsquo;s important to have better&#xA;fallback and recovery mechanisms when things go wrong. The productivity gains&#xA;are worth investing time into such systems.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to write down a couple of times I screwed up &amp;ndash; one of them in my very&#xA;first job after college, and the other just a month or so ago. People screw up&#xA;every day, irrespective of how much experience they have.&lt;/p&gt;&#xA;&lt;h2 id=&#34;corrupted-a-server-s-hard-disk&#34;&gt;Corrupted a server&amp;rsquo;s hard-disk&lt;/h2&gt;&#xA;&lt;p&gt;In my &lt;a href=&#34;https://python.fossee.in/&#34;&gt;first job&lt;/a&gt;, I had screwed up big time in the first couple of weeks of my&#xA;job. It&amp;rsquo;s been a while, and a lot of the details escape me now.&lt;/p&gt;&#xA;&lt;p&gt;I was supposed to resize partitions on a server&amp;rsquo;s hard disk so that there&amp;rsquo;s more&#xA;space available for the media that we were going to store on the server. The&#xA;server was pretty newly setup, and there wasn&amp;rsquo;t all that much data on it, but my&#xA;bosses (&lt;a href=&#34;https://in.linkedin.com/in/pasokan&#34;&gt;Asokan&lt;/a&gt; and &lt;a href=&#34;https://www.aero.iitb.ac.in/~prabhu/&#34;&gt;Prabhu&lt;/a&gt;) had spent some time on configuring it, and setting up&#xA;user accounts, etc., for all the people that were going to join the project.&lt;/p&gt;&#xA;&lt;p&gt;I tested the resize operation on a machine locally in the office that I worked&#xA;in, and it seemed to work. I replicated this on the server, and it went kaput!&#xA;All the data was lost and I could no longer SSH into it. I was totally freaking&#xA;out!&lt;/p&gt;&#xA;&lt;p&gt;But my boss ended up being really calm about it, and asked me to just write to&#xA;the server hosting service to get a new machine with a bigger media disk. And&#xA;no, I didn&amp;rsquo;t get fired from the job. I worked with him for 5-6 years after that,&#xA;including being hired again at a company he started working for.&lt;/p&gt;&#xA;&lt;h2 id=&#34;almost-deleted-7-8-years-of-email&#34;&gt;Almost Deleted 7-8 years of email&lt;/h2&gt;&#xA;&lt;p&gt;A few weeks ago, I screwed up again. It could&amp;rsquo;ve been pretty bad, but luckily&#xA;for me it wasn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;p&gt;I administer a &lt;a href=&#34;https://support.google.com/a/answer/2855120?hl=en&#34;&gt;legacy Google Suite&lt;/a&gt; for &lt;a href=&#34;https://indiaultimate.org&#34;&gt;UPAI&lt;/a&gt;. We have only 10 email IDs to&#xA;allocate, and we often recycle them. Recently, I had to merge 3 accounts into a&#xA;single one to free up 2 new accounts. I transferred data from two of them to the&#xA;third, and went ahead and deleted them. I did this with a couple of other email&#xA;accounts before, but they were barely used and nobody really cared about them.&lt;/p&gt;&#xA;&lt;p&gt;I hadn&amp;rsquo;t paid attention to what data gets transferred, and what doesn&amp;rsquo;t. It&#xA;turns out &lt;a href=&#34;https://support.google.com/a/answer/33314?hl=en&#34;&gt;emails don&amp;rsquo;t get transferred&lt;/a&gt;, and only data in the Google Drive gets&#xA;transferred. This meant I had lost years of important email communication for&#xA;the organisation. I freaked out!&lt;/p&gt;&#xA;&lt;p&gt;My &amp;ldquo;&lt;a href=&#34;https://indiaultimate.org/u/manickam-narayanan&#34;&gt;boss&lt;/a&gt;&amp;rdquo; was again pretty calm, and asked me to write to Google to see if I&#xA;could get them to restore the data. I looked around, and found that Google&#xA;allowed restoring deleted accounts for 20 days! I &lt;a href=&#34;https://support.google.com/a/answer/1397578&#34;&gt;restored those accounts&lt;/a&gt;,&#xA;&lt;a href=&#34;https://support.google.com/a/answer/6351475?hl=en&amp;amp;ref_topic=6351498&#34;&gt;transferred the email&lt;/a&gt; and then deleted the accounts again.&lt;/p&gt;&#xA;&lt;h2 id=&#34;learning-from-screw-ups&#34;&gt;Learning from screw-ups&lt;/h2&gt;&#xA;&lt;p&gt;Learning and improving the systems in-place to prevent such screw-ups is the&#xA;best thing that we can do from such screw-ups. Just like a piece of software&#xA;gets hardened by bug reports that are acted upon, over the course of time, other&#xA;systems can and should too.&lt;/p&gt;&#xA;&lt;p&gt;As described in this &lt;a href=&#34;https://about.gitlab.com/2015/01/23/how-to-turn-screw-ups-to-your-advantage/&#34;&gt;blog post by GitLab&lt;/a&gt; on how to take advantage of screw-ups,&#xA;acknowledging mistakes, fixing them, and improving the systems in-place to&#xA;prevent such mistakes is a good way to go about it.&lt;/p&gt;&#xA;&lt;p&gt;Systems needn&amp;rsquo;t always be super complicated things, but just a &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/automation-and-habits/&#34;&gt;little bit of&#xA;automation&lt;/a&gt;, and even &lt;a href=&#34;http://scattered-thoughts.net/blog/2016/01/28/notes-on-the-checklist-manifesto/&#34;&gt;simple checklists&lt;/a&gt; go a long way in improving work-flows and&#xA;making processes less error prone. Google&amp;rsquo;s recovery mechanism definitely&#xA;helped, and gives me confidence to continue working with these user accounts.&#xA;Our server had a system admin pretty soon, and he had automated back-ups and the&#xA;usual stuff in place, for us!&lt;/p&gt;&#xA;&lt;p&gt;The way a team deals with mistakes sets the tone for how the team works, takes&#xA;responsibility, and feels about working together. I still screw up after working&#xA;for about a decade as a developer, and being paid for it. I&amp;rsquo;m sure I&amp;rsquo;ll continue&#xA;to have my screw-ups, even though I&amp;rsquo;d like to have none. What was nice in both&#xA;the cases was the way in which my mentors/bosses reacted, and how calm they were&#xA;about the whole situation.&lt;/p&gt;&#xA;&lt;p&gt;May you have screw-ups that you learn and grow from!&lt;/p&gt;&#xA;&lt;p&gt;PS: Google&amp;rsquo;s &lt;a href=&#34;https://support.google.com/a/answer/6351475?hl=en&amp;amp;ref_topic=6351498&#34;&gt;Data Migration Service&lt;/a&gt; doesn&amp;rsquo;t support legacy Google Suite&#xA;accounts, and I ended up using &lt;a href=&#34;https://github.com/jay0lee/got-your-back&#34;&gt;Got Your Back&lt;/a&gt; to move email from the accounts I&#xA;wanted to delete to the other accounts. It worked pretty smoothly!&lt;/p&gt;&#xA;&lt;div style=&#34;font-size:small;&#34; class=&#34;reviewers&#34;&gt;&#xA;&lt;p&gt;Thanks to Aishwarya, Meghana, &lt;a href=&#34;https://twitter.com/cst2bicycle/&#34;&gt;Tejaa&lt;/a&gt; and &lt;a href=&#34;http://baali.muse-amuse.in&#34;&gt;Shantanu&lt;/a&gt; for reading drafts of this&#xA;post.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Self-care tips for new developers</title>
      <link>https://punchagan.muse-amuse.in/blog/self-care-tips-for-new-developers/</link>
      <pubDate>Wed, 24 Oct 2018 20:14:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/self-care-tips-for-new-developers/</guid>
      <description>&lt;p&gt;A couple of weeks ago, I was at &lt;a href=&#34;https://in.pycon.org/2018/&#34;&gt;PyCon India&lt;/a&gt; &amp;ndash; the 10th edition, the 8th PyCon I&#xA;was attending. It was great to see so many enthusiastic young developers,&#xA;attending their first PyCon. With each year, as the event gets bigger, you see&#xA;more and more of them. Lot of curiosity, and enthusiasm to become better&#xA;programmers.&lt;/p&gt;&#xA;&lt;p&gt;The conference had a whole bunch of talks, catering to people with varied&#xA;interests, at different stages in their career &amp;ndash; war stories, tips and tricks,&#xA;helpful advice on getting started with a library or tool, thoughts on the&#xA;community culture, etc. With each passing year, there are more and more&#xA;proposals for talks, and a lot of good talks have to be left out due to&#xA;constraints on the number of talks that the conference can accommodate.&lt;/p&gt;&#xA;&lt;p&gt;Having said that, I&amp;rsquo;d have liked to see a talk on self-care tips for developers&#xA;&amp;ndash; advice on staying sane and productive in the long run. It is quite common for&#xA;programmers to get burnt-out. I&amp;rsquo;m sure there are some useful lessons to be&#xA;shared by everyone who has been programming professionally for a while &amp;ndash;&#xA;ranging from about a couple of years to many decades!&lt;/p&gt;&#xA;&lt;p&gt;In a hallway conversation, &lt;a href=&#34;https://twitter.com/noufalibrahim/&#34;&gt;Noufal&lt;/a&gt; was telling some of us about the &lt;a href=&#34;https://en.wikipedia.org/wiki/Okinawan_martial_arts&#34;&gt;Okinawa&#xA;martial art&lt;/a&gt; lessons he&amp;rsquo;s been taking - it was inspiring to see how seriously he&#xA;takes the lessons. A lot of programmers that I know, who have been programming&#xA;for a while, have other interests that they pursue quite seriously, to take time&#xA;off from programming. It would be nice to have someone speak about mental health&#xA;and self care in a talk, rather than hope that people pick it up in hallway&#xA;conversations. Explicit is better than implicit.&lt;/p&gt;&#xA;&lt;p&gt;I was considering doing a lightning talk on this, but I didn&amp;rsquo;t get in touch with&#xA;the organizers early enough to get a slot. So, here&amp;rsquo;s a blog post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: Not all of these are things I&amp;rsquo;m good at doing consistently, but&#xA;they are things that have at some point helped me. This post is also a way for&#xA;me to write down things that I (or others) can come back to whenever necessary.&lt;/p&gt;&#xA;&lt;h2 id=&#34;take-breaks&#34;&gt;Take breaks&lt;/h2&gt;&#xA;&lt;p&gt;We are often so engrossed in getting something to work, that we lose track of&#xA;time &amp;ndash; slumping in our chairs for hours on end, forgetting to eat, hydrate or&#xA;move around.&lt;/p&gt;&#xA;&lt;p&gt;Our bodies weren&amp;rsquo;t made for this &amp;ndash; we were built to move around. Also, stepping&#xA;away from the problem for a bit, after wrestling with it for a while, brings a&#xA;fresh perspective and new ideas.&lt;/p&gt;&#xA;&lt;p&gt;You could use a tool like &lt;a href=&#34;http://www.workrave.org/&#34;&gt;workrave&lt;/a&gt; to remind you to take regular breaks and&#xA;stretch. Or use a &lt;a href=&#34;https://francescocirillo.com/pages/pomodoro-technique&#34;&gt;Pomodoro timer&lt;/a&gt;. Another trick is to drink keep drinking water&#xA;regularly, so you are forced to get up and take a piss, every once in a while.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hydrate-eat-and-sleep&#34;&gt;Hydrate, Eat and Sleep&lt;/h2&gt;&#xA;&lt;p&gt;Being dehydrated can make one feel tired and sleepy, making it hard to focus&#xA;well. Same goes for being hungry and sleep-deprived. Not having enough glucose&#xA;in your blood has been &lt;a href=&#34;http://www.pnas.org/content/108/17/6889&#34;&gt;shown&lt;/a&gt; to cause people to make bad decisions.&lt;/p&gt;&#xA;&lt;p&gt;Mental work uses up a lot of energy, even if we seem to be just sitting around&#xA;all day, and not expending much more energy than sleeping. It is important to&#xA;feel good physically to work effectively.&lt;/p&gt;&#xA;&lt;p&gt;You could have a bottle of water next to you, that you frequently drink from and&#xA;keep re-filling at breaks. Don&amp;rsquo;t skip on your lunch to use that extra half an&#xA;hour being productive. Keeping some snack accessible for you to eat towards the&#xA;end of the day, when you are tired, helps. Use a sleep tracker or just roughly&#xA;track sleep each night manually. Make sure you are getting enough of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;invest-in-a-good-set-up&#34;&gt;Invest in a good set-up&lt;/h2&gt;&#xA;&lt;p&gt;We spend around half of our waking time at work - over a life time, that&amp;rsquo;s a lot&#xA;of time! Sitting in a bad posture, or doing a only-slightly-uncomfortable action&#xA;over and over, can easily grow into bigger problems in the long run.&lt;/p&gt;&#xA;&lt;p&gt;You deserve good quality equipment, that &amp;ldquo;fits&amp;rdquo; you well. Get yourself a good&#xA;keyboard and mouse, an external monitor, or whatever it is that you think will&#xA;make your body thank you. If you end-up working a lot from your home office,&#xA;invest in a good chair and a table.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sunlight-and-exercise&#34;&gt;Sunlight &amp;amp; Exercise&lt;/h2&gt;&#xA;&lt;p&gt;Being locked up in our office buildings all day doesn&amp;rsquo;t help with how much&#xA;exposure we get to the sun. Not getting enough sunlight regularly can effect us&#xA;both mentally and physically. Same goes for exercise. Getting some exercise&#xA;everyday has been shown to have significant mental and physical health benefits.&lt;/p&gt;&#xA;&lt;p&gt;You can start playing a sport, if hitting the gym or doing something alone seems&#xA;like a chore. Playing a team sport helps even more since there are other people&#xA;you are accountable to. Try to get some sunlight every morning, even if it is&#xA;just standing out in the sun, while you drink your coffee.&lt;/p&gt;&#xA;&lt;h2 id=&#34;take-vacations&#34;&gt;Take Vacations&lt;/h2&gt;&#xA;&lt;p&gt;Switch off completely, and give your body and mind the rest they deserve. The&#xA;break not only lets you rejuvenate physically, but also gives your brain the&#xA;time to synthesize all the inputs it has, and come back with surprising ideas or&#xA;solutions to problems that have been troubling you for a while.&lt;/p&gt;&#xA;&lt;p&gt;The importance of taking a break is often forgotten, when we have so much to do.&#xA;Honestly, I&amp;rsquo;m not very good at taking regular vacations, myself.&lt;/p&gt;&#xA;&lt;p&gt;But, having a fixed time every year to take a vacation is something that I&amp;rsquo;ve&#xA;seen working. For example, 2 weeks around your birthday every year, you can&#xA;decide to take a vacation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;do-other-things&#34;&gt;Do other things&lt;/h2&gt;&#xA;&lt;p&gt;We get into the game because we are really excited by the things we can build by&#xA;flipping bits. We get so obsessed with it, that we lose ourselves in it,&#xA;oblivious to the world outside. All the people we hangout with are people very&#xA;similar to us.&lt;/p&gt;&#xA;&lt;p&gt;Often, we are building stuff for people very unlike us. It&amp;rsquo;s very helpful to see&#xA;the world from a different perspective than ours. Also, there is only so much we&#xA;can express through code. There is a whole lot of us that can be expressed in&#xA;other ways.&lt;/p&gt;&#xA;&lt;p&gt;Pick up a &lt;a href=&#34;https://thatteidlikaalsoup.team/&#34;&gt;team sport&lt;/a&gt;, do improv/stand-up, draw or paint, write, learn a martial&#xA;art, join a cross fit gym &amp;ndash; anything that you find interesting, other than&#xA;writing code. Hangout with people who do very different things everyday than&#xA;what you do. Their completely different perspective at life will make you a&#xA;better programmer and a better person.&lt;/p&gt;&#xA;&lt;h2 id=&#34;avoid-distractions&#34;&gt;Avoid distractions&lt;/h2&gt;&#xA;&lt;p&gt;The internet can be &lt;a href=&#34;https://xkcd.com/477/&#34;&gt;so distracting&lt;/a&gt;! But, as developers, we tend to be constantly&#xA;connected, leaving ourselves vulnerable to all this distraction. All these&#xA;distractions can lead to very &lt;a href=&#34;https://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/&#34;&gt;expensive context switches&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve found getting into, and working in flow-states to be enormously satisfying.&#xA;What I&amp;rsquo;m actually working on, doesn&amp;rsquo;t matter very much when I&amp;rsquo;m to deeply focus&#xA;on something I want to be doing.&lt;/p&gt;&#xA;&lt;p&gt;Creating an environment for yourself, where its easy to get into these states,&#xA;is totally worth it. I&amp;rsquo;ve found using &lt;a href=&#34;https://francescocirillo.com/pages/pomodoro-technique&#34;&gt;Pomodoros&lt;/a&gt; to be quite helpful, when I&amp;rsquo;m&#xA;feeling distracted. Shutting off the Internet, or using a tool like&#xA;&lt;a href=&#34;https://github.com/viccherubini/get-shit-done&#34;&gt;get-shit-done&lt;/a&gt; helps with stopping myself from getting distracted by cat videos&#xA;on the internet. Turning off all notifications on my phone and computer is&#xA;another thing that is quite effective I also find it helpful to not be able to&#xA;constantly have sight of the clock on my computer - so I work with all my&#xA;windows full-screen. &lt;a href=&#34;https://www.journals.uchicago.edu/doi/full/10.1086/691462&#34;&gt;Leaving the phone in another room&lt;/a&gt; or in my bag works great,&#xA;too. You can find a lot more tips on the internet, if these tricks aren&amp;rsquo;t up&#xA;your alley.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;If you see your team over-working themselves, and holding exhaustion as a badge&#xA;of honour, please be the person to strike conversations around self care. Your&#xA;team will thank you.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve only listed down some of the things that I&amp;rsquo;ve found helpful. But, I hope&#xA;this serves as a good starting point. Also, do take a look at &lt;a href=&#34;http://selfcare.tech/&#34;&gt;selfcare.tech&lt;/a&gt; for&#xA;more resources and advice.&lt;/p&gt;&#xA;&lt;p&gt;Thanks Akilesh Mani and &lt;a href=&#34;http://baali.muse-amuse.in/&#34;&gt;Shantanu Choudhary&lt;/a&gt; for&#xA;reading drafts of this and giving helpful suggestions.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Software development practices for sports teams</title>
      <link>https://punchagan.muse-amuse.in/blog/software-development-practices-sports-teams/</link>
      <pubDate>Sun, 23 Sep 2018 11:31:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/software-development-practices-sports-teams/</guid>
      <description>&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;&#xA;&lt;p&gt;A few weeks ago, I came across &lt;a href=&#34;https://www.youtube.com/watch?v=SHOVVnRB4h0&#34;&gt;a talk on Mob programming&lt;/a&gt; &amp;mdash; a technique for&#xA;working on a software project as a team, that was accidentally discovered by a&#xA;team trying to figure out how to work well together. The speaker lets us in on&#xA;how they stumbled on it, and how they fine-tuned it to make it more effective&#xA;while being relaxed and enjoyable.&lt;/p&gt;&#xA;&lt;p&gt;A few days before that, I shared &lt;a href=&#34;http://daydreamsinruby.com/getting-feedback/&#34;&gt;a post&lt;/a&gt; on &amp;ldquo;getting feedback (as a software&#xA;developer)&amp;rdquo; with my &lt;a href=&#34;https://www.youtube.com/watch?v=zEKnqFBajiI&#34;&gt;Ultimate Frisbee&lt;/a&gt; team-mates and it seemed to resonate with&#xA;them. I&amp;rsquo;m often looking at things happening in my sports team from a software&#xA;guy&amp;rsquo;s perspective, since I spend a lot of time being the software guy. But, I&#xA;rarely, if ever, directly share these thoughts and ideas with my team-mates.&lt;/p&gt;&#xA;&lt;p&gt;But, the mob programming talk inspired me to make a conscious effort to look for&#xA;software development patterns that could be adopted by &lt;a href=&#34;https://thatteidlikaalsoup.team/&#34;&gt;our (sports) team&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Most players on our team have been playing Ultimate for a while now (2-5 years).&#xA;So, we have more problems due to miscommunication and everyone not being on the&#xA;same page, than we have due to lack of skills or knowledge. When someone on the&#xA;team does not understand the plan, the whole plan goes for a toss.&lt;/p&gt;&#xA;&lt;p&gt;How do we make sure that everyone understands what the team is trying to do and&#xA;is able to contribute their bit to the team&amp;rsquo;s plans and success? How do we make&#xA;playing with each other as enjoyable as it can be?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;The object isn&amp;rsquo;t to make art, it&amp;rsquo;s to be in that wonderful state which makes&#xA;art inevitable.&amp;rdquo; &amp;mdash; Robert Henri&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;some-ideas-for-adoption&#34;&gt;Some ideas for adoption&lt;/h2&gt;&#xA;&lt;p&gt;Here are some ideas that, I think, could be adopted by our team. Some of these&#xA;are things that teams, including ours, do in some shape or form. But,&#xA;identifying and naming would make it easier for people to talk about them and&#xA;develop a common understanding of why and how to do them.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ubiquitous-language&#34;&gt;Ubiquitous Language&lt;/h3&gt;&#xA;&lt;p&gt;Eric Evans, in his book Domain Driven Design, talks about building a &lt;a href=&#34;https://martinfowler.com/bliki/UbiquitousLanguage.html&#34;&gt;Ubiquitous&#xA;language&lt;/a&gt; in the team. It grows as the team&amp;rsquo;s understanding of the problem grows,&#xA;and helps the team communicate clearly throughout the development cycle.&lt;/p&gt;&#xA;&lt;p&gt;Our team plays a lot of zone defense, and it usually works well for us But, it&#xA;wasn&amp;rsquo;t working particularly well, during one of the tournaments last year.&#xA;Luckily, we had &lt;a href=&#34;https://www.instagram.com/monsieurmoby/&#34;&gt;Moby&lt;/a&gt; playing with us, and he asked us some probing questions&#xA;around the objective of the play and the roles of each of the players. With just&#xA;a short chat and a few small adjustments, the zone became way more effective.&#xA;Essentially, we built a common understanding of the objective of the defense and&#xA;brought everyone onto the same page.&lt;/p&gt;&#xA;&lt;p&gt;Ultimate teams use a lot of lingo &amp;ndash; a lot. New players just pick it up by&#xA;osmosis, at practice, from the senior folks. This works most of the time, except&#xA;when it doesn&amp;rsquo;t. Each person on the team has a slightly different understanding&#xA;of what a term means, and the difference is sometimes big enough to cause a plan&#xA;to fail due to miscommunication. Spending time building a common understanding&#xA;would make the team communicate and operate more effectively. Practicing game&#xA;scenarios is essentially a way of doing this, but it would be worth thinking&#xA;about and discussing the terms and the language being used.&lt;/p&gt;&#xA;&lt;p&gt;Off-field lingo should also be clarified using a similar process &amp;ndash; for&#xA;instance, what does &amp;ldquo;good sideline support&amp;rdquo; mean? What does giving or not giving&#xA;&amp;ldquo;feedback on the field&amp;rdquo; mean?&lt;/p&gt;&#xA;&lt;h3 id=&#34;sprints&#34;&gt;Sprints&lt;/h3&gt;&#xA;&lt;p&gt;Agile development recommends continuous development of software. Often software&#xA;teams use 2-4 week development cycles, called &lt;a href=&#34;http://wiki.c2.com/?ScrumSprint&#34;&gt;sprints&lt;/a&gt;. For each sprint, the team&#xA;sets itself a goal, and the whole team prioritizes tasks and makes decisions&#xA;in-line with this goal.&lt;/p&gt;&#xA;&lt;p&gt;Sports teams would also benefit from sprints &amp;ndash; short and focused practice&#xA;cycles, where everyone on the team is aware of the team&amp;rsquo;s goal. This would make&#xA;it much easier for players to help each other out. Also, players can align their&#xA;individual goals with the team goal, making practices much more effective.&lt;/p&gt;&#xA;&lt;h3 id=&#34;retrospectives&#34;&gt;Retrospectives&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At regular intervals, the team reflects on how to become more effective, then&#xA;tunes and adjusts its behavior accordingly. &amp;mdash; The Agile Manifesto&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most Ultimate teams do some kind of post-practice retrospectives, though, they&#xA;don&amp;rsquo;t call it that. These retrospectives are a discussion of the good, bad and&#xA;the ugly. Usually, no conscious decisions are made about what practices are&#xA;working well for the team, and what should be taken forward to upcoming ones.&lt;/p&gt;&#xA;&lt;p&gt;Slightly longer term retrospectives would be quite useful too. If a team adopts&#xA;the idea of sprints, each new sprint should start with a retrospective of the&#xA;last one and planning for the next.&lt;/p&gt;&#xA;&lt;p&gt;A retrospective&amp;rsquo;s participants are expected to follow the &lt;a href=&#34;http://retrospectivewiki.org/index.php?title=The_Prime_Directive&#34;&gt;prime directive&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Regardless of what we discover, we understand and truly believe that everyone&#xA;did the best job they could, given what they knew at the time, their skills and&#xA;abilities, the resources available, and the situation at hand. &amp;mdash; Norm Kerth,&#xA;&lt;em&gt;Project Retrospectives: A Handbook for Team Review&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Internalising this would be really helpful especially during post-tournament&#xA;retrospectives, where emotions can run high &amp;ndash; it would keep the discussion&#xA;positive and focused on identifying problems and finding solutions, rather than&#xA;spiraling into blame games, defensive arguments, etc.&lt;/p&gt;&#xA;&lt;h3 id=&#34;daily-stand-ups&#34;&gt;Daily Stand-ups&lt;/h3&gt;&#xA;&lt;p&gt;Agile teams &lt;a href=&#34;https://www.mountaingoatsoftware.com/agile/scrum/meetings/daily-scrum&#34;&gt;gather each day&lt;/a&gt; at the start of the work-day, to let each know about&#xA;the progress of the work-items. The team tries to help each other get rid of the&#xA;impediments to progress.&lt;/p&gt;&#xA;&lt;p&gt;Ultimate teams could also benefit operating in this style &amp;ndash; everyone shares&#xA;with each other what they are working on, and the problems in their learning.&#xA;This would make it easier for others to look out for things to help with.&#xA;Team-mates would limit themselves to giving feedback to the thing that a player&#xA;is working on.&lt;/p&gt;&#xA;&lt;p&gt;Players setting themselves a small number of clear focus points would also force&#xA;them to consciously think about and work on their game more effectively.&lt;/p&gt;&#xA;&lt;h3 id=&#34;face-to-face-communication&#34;&gt;Face-to-face communication&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The most efficient and effective method of conveying information to and within a&#xA;development team is face-to-face conversation. &amp;mdash; The Agile Manifesto&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As our team has grown larger over the years, more and more communication has&#xA;moved to the WhatsApp group. Keeping everyone informed via face-to-face&#xA;communication, at this team size needs a lot of co-ordination and planning, and&#xA;the time at practice is considered to be too precious to be spent talking and&#xA;not practicing.&lt;/p&gt;&#xA;&lt;p&gt;But, clearly WhatsApp doesn&amp;rsquo;t seem like the best medium to have discussions.&#xA;Discussions rarely, if ever, happen on our groups. It often just seems to be&#xA;information dissemination. Using a &lt;a href=&#34;http://zulipchat.com/hello&#34;&gt;better communication tool&lt;/a&gt; could mitigate a&#xA;few of these problems, but face-to-face discussions have other benefits. They&#xA;bring about a greater sense of belonging to the team and increase buy-in into&#xA;the team&amp;rsquo;s plans.&lt;/p&gt;&#xA;&lt;h3 id=&#34;unit-tests-vs-dot-integration-tests&#34;&gt;Unit tests vs. Integration tests&lt;/h3&gt;&#xA;&lt;p&gt;Practice games are helpful to gauge if a team is playing well together and if&#xA;its plans are working. This seems analogous to &lt;a href=&#34;http://wiki.c2.com/?IntegrationTest&#34;&gt;integration tests&lt;/a&gt; &amp;mdash; checking&#xA;that we have functional software, end-to-end.&lt;/p&gt;&#xA;&lt;p&gt;But, in the early stages of development, it&amp;rsquo;s common to write &lt;a href=&#34;http://wiki.c2.com/?UnitTest&#34;&gt;unit-tests&lt;/a&gt; &amp;ndash;&#xA;tests to ensure that each of the individual components works well in isolation.&#xA;An analogous thing would be to have individual evaluations to help players&#xA;identify weak areas, and to measure progress in those areas. It would also&#xA;prevent players from slipping on important &amp;ldquo;indicators&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;other-ideas-to-think-about&#34;&gt;Other ideas to think about&lt;/h2&gt;&#xA;&lt;p&gt;Some ideas that I find interesting, but don&amp;rsquo;t yet know if and how they can be&#xA;adopted by sports teams are below.&lt;/p&gt;&#xA;&lt;h3 id=&#34;mob-programming&#34;&gt;Mob programming&lt;/h3&gt;&#xA;&lt;p&gt;In a &lt;a href=&#34;https://www.agilealliance.org/resources/experience-reports/mob-programming-agile2014/&#34;&gt;mob programming session&lt;/a&gt;, everyone on the team is working on the same&#xA;computer, in the same room, at the same time. This seems tremendously&#xA;ineffective at the face of it, but turns out to be a good way to produce high&#xA;quality software, quickly.&lt;/p&gt;&#xA;&lt;h3 id=&#34;hammock-driven-development&#34;&gt;Hammock driven development&lt;/h3&gt;&#xA;&lt;p&gt;Bugs are incredibly expensive to be found and fixed in production software. They&#xA;are cheaper to fix in the development phase. But, the design phase is the best&#xA;place to fix them.&lt;/p&gt;&#xA;&lt;p&gt;Rich Hickey &lt;a href=&#34;https://www.youtube.com/watch?v=f84n5oFoZBc&#34;&gt;recommends&lt;/a&gt; feeding a lot of information about the problem you are&#xA;trying to solve to your waking mind, so that your background mind can feed off&#xA;of it while you are asleep, and make useful connections.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Build projects around motivated individuals. Give them the environment and&#xA;support they need, and trust them to get the job done.  &amp;mdash; The Agile manifesto&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This sounds exactly like what players in our team need too. The captains and the&#xA;mentors in the team should work towards providing the environment and the&#xA;support everyone on the team needs, and trust them to do the job.&lt;/p&gt;&#xA;&lt;div style=&#34;font-size:small;&#34; class=&#34;reviewers&#34;&gt;&#xA;&lt;p&gt;Thanks Meghana Iyer, &lt;a href=&#34;https://twitter.com/cloud9trt/&#34;&gt;Ravitheja Tetali&lt;/a&gt;, &lt;a href=&#34;http://baali.muse-amuse.in/&#34;&gt;Shantanu Choudhary&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/vandith&#34;&gt;Vandith PSR&lt;/a&gt;, &lt;a href=&#34;https://varunrn.wordpress.com/&#34;&gt;Varun&#xA;Rangarajan&lt;/a&gt; and Vivek Krishnaswamy for reading drafts of this post and giving&#xA;helpful suggestions.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Cycling from Manali to Leh - An FAQ</title>
      <link>https://punchagan.muse-amuse.in/blog/cycling-from-manali-to-leh-an-faq/</link>
      <pubDate>Thu, 26 Oct 2017 12:55:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/cycling-from-manali-to-leh-an-faq/</guid>
      <description>&lt;figure&gt;&lt;img src=&#34;~/software/my-repos/muse-amuse.in/static/images/baralachala.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;div class=&#34;ox-hugo-toc toc&#34;&gt;&#xA;&lt;div class=&#34;heading&#34;&gt;Table of Contents&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#so-you-cycled-from-manali-to-leh&#34;&gt;So, you cycled from Manali to Leh?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#who-is-we&#34;&gt;Who is &amp;ldquo;we&amp;rdquo;?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-did-you-decide-to-do-this&#34;&gt;How did you decide to do this?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-the-maximum-elevation-you-cycled-to&#34;&gt;What is the maximum elevation you cycled to?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-long-did-the-whole-ride-take&#34;&gt;How long did the whole ride take?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#was-it-really-hard-why-couldn-t-you-finish-the-ride&#34;&gt;Was it really hard? Why couldn&amp;rsquo;t you finish the ride?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#so-you-do-really-need-a-support-vehicle&#34;&gt;So, you do really need a support vehicle?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-much-did-the-support-vehicle-cost-you&#34;&gt;How much did the support vehicle cost you?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#did-you-carry-your-own-bikes&#34;&gt;Did you carry your own bikes?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#did-the-flights-charge-you-for-the-bikes&#34;&gt;Did the flights charge you for the bikes?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#would-you-recommend-me-to-carry-my-bike&#34;&gt;Would you recommend me to carry my bike?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-cycle-spares-tools-did-you-carry&#34;&gt;What cycle spares/tools did you carry?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-sort-of-preparation-did-you-do-for-this-ride&#34;&gt;What sort of preparation did you do for this ride?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#can-you-share-your-ride-plan&#34;&gt;Can you share your ride plan?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-was-a-typical-day-during-the-trip-like&#34;&gt;What was a typical day during the trip, like?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-was-the-most-enjoyable-part-of-the-ride&#34;&gt;What was the most enjoyable part of the ride?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-was-the-most-challenging-part-of-the-ride&#34;&gt;What was the most challenging part of the ride?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#you-keep-saying-it-was-cold-how-cold-was-it-really&#34;&gt;You keep saying it was cold, how cold was it really?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#did-you-meet-any-interesting-people-en-route&#34;&gt;Did you meet any interesting people en-route?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#would-you-do-this-again&#34;&gt;Would you do this again?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#if-yes-which-part-of-the-year-would-you-do-it&#34;&gt;If yes, which part of the year would you do it?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#if-not-what-other-routes-would-you-try&#34;&gt;If not, what other routes would you try?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#do-you-have-any-pictures-that-you-can-share&#34;&gt;Do you have any pictures that you can share?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;!--endtoc--&gt;&#xA;&lt;h2 id=&#34;so-you-cycled-from-manali-to-leh&#34;&gt;So, you cycled from Manali to Leh?&lt;/h2&gt;&#xA;&lt;p&gt;Well, Not really. We cycled from &lt;a href=&#34;https://ridewithgps.com/routes/26328981&#34;&gt;Kalath to Whiskey Nala&lt;/a&gt; &amp;ndash; a distance of 280km&#xA;&amp;ndash; which is about 60% of the Manali-Leh route.&lt;/p&gt;&#xA;&lt;h2 id=&#34;who-is-we&#34;&gt;Who is &amp;ldquo;we&amp;rdquo;?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.strava.com/athletes/24792932&#34;&gt;Vivek&lt;/a&gt; and I were on the bikes. &lt;a href=&#34;https://www.facebook.com/people/Hemant-Sharma/100002458775314&#34;&gt;Shabu&lt;/a&gt; was our guide helping us fix our bikes and&#xA;fixing up our meals, but more than anything else, ensuring that we don&amp;rsquo;t freeze&#xA;to death. Susheel was driving along and cheering us.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-did-you-decide-to-do-this&#34;&gt;How did you decide to do this?&lt;/h2&gt;&#xA;&lt;p&gt;Vivek and I were going to Coorg with &lt;a href=&#34;https://www.instagram.com/pratikshasunder/&#34;&gt;Prats&lt;/a&gt; and &lt;a href=&#34;https://www.instagram.com/adarsh_makam/&#34;&gt;Addy&lt;/a&gt;, and Prats told us a whole&#xA;lot of stories of her adventures in the mountains. Not sure how bicycles came&#xA;into the picture, but as soon as they did, both of us got really excited about&#xA;it. This was on some sort of a bucket list for me, ever since I read &lt;a href=&#34;https://www.vatsap.com/2009/10/09/bicycle-diary-4-the-bus-to-manali/&#34;&gt;Vatsap&amp;rsquo;s&#xA;cycling story&lt;/a&gt; many years ago. Soon, after we were back in town, the ball was set&#xA;rolling&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-the-maximum-elevation-you-cycled-to&#34;&gt;What is the maximum elevation you cycled to?&lt;/h2&gt;&#xA;&lt;p&gt;We started off at around 1.8km and went up to about 5km in a span of 5 days. We&#xA;also spent a day in Manali, getting our cycles fixed and acclimatizing. You can&#xA;see the elevation profile &lt;a href=&#34;https://ridewithgps.com/routes/26328981&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-long-did-the-whole-ride-take&#34;&gt;How long did the whole ride take?&lt;/h2&gt;&#xA;&lt;p&gt;Our plan was to finish the whole distance in 7 days. We couldn&amp;rsquo;t get to our&#xA;designated camp on the 5th day, and had to use the support car to get to camp&#xA;before it got dark. We decided to end the ride once we took our bikes off the&#xA;road.&lt;/p&gt;&#xA;&lt;h2 id=&#34;was-it-really-hard-why-couldn-t-you-finish-the-ride&#34;&gt;Was it really hard? Why couldn&amp;rsquo;t you finish the ride?&lt;/h2&gt;&#xA;&lt;p&gt;We expected the primary challenges to be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the altitude and lack of oxygen&lt;/li&gt;&#xA;&lt;li&gt;the fatigue from riding day after day after day&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But, cold played a much bigger role than we thought it would. As we got higher&#xA;and higher, it got so cold that we spent a significant amount of energy and&#xA;brain cycles on trying to fight the cold, rather than enjoying the views or&#xA;pushing ourselves to keep going despite the non-cold-related discomfort.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-you-do-really-need-a-support-vehicle&#34;&gt;So, you do really need a support vehicle?&lt;/h2&gt;&#xA;&lt;p&gt;Not really, if you were riding in better weather or were better prepared. The&#xA;Manali to Leh route usually has a lot of temporary shops setup during the&#xA;season, where you could crash, if it was too cold to just crash in your tent.&#xA;Since, we were going after the season had almost ended, many of these shops were&#xA;no longer open, and having the support car turned out to be quite useful on the&#xA;last day.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-much-did-the-support-vehicle-cost-you&#34;&gt;How much did the support vehicle cost you?&lt;/h2&gt;&#xA;&lt;p&gt;It turned out to be quite an expense for something we originally didn&amp;rsquo;t have in&#xA;mind. We spent about 20k on the vehicle, fuel and the driver&amp;rsquo;s fee. We also paid&#xA;our guide + cook + bicycle expert, separately.&lt;/p&gt;&#xA;&lt;h2 id=&#34;did-you-carry-your-own-bikes&#34;&gt;Did you carry your own bikes?&lt;/h2&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Flew from Bengaluru to Delhi&lt;/li&gt;&#xA;&lt;li&gt;Took a bus from Delhi to Manali&lt;/li&gt;&#xA;&lt;li&gt;Carried the bikes on the support car from Whiskey Nala to Leh&lt;/li&gt;&#xA;&lt;li&gt;Flew back from Leh to Delhi&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;did-the-flights-charge-you-for-the-bikes&#34;&gt;Did the flights charge you for the bikes?&lt;/h2&gt;&#xA;&lt;p&gt;The carrier (IndiGo) from BLR to DEL charged us a handling fees of Rs. 1000. The&#xA;carrier (Vistara) on the return journey didn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;h2 id=&#34;would-you-recommend-me-to-carry-my-bike&#34;&gt;Would you recommend me to carry my bike?&lt;/h2&gt;&#xA;&lt;p&gt;You could find bikes on rent, both in Manali and Leh, for about 500 to 700 per&#xA;day. It would cost about 5-7k, based on how you plan your ride, to rent a bike.&#xA;You&amp;rsquo;ll have to make arrangements to get the bike returned back to the place you&#xA;rent it from &amp;ndash; this can get a little tricky.&lt;/p&gt;&#xA;&lt;p&gt;If you already own a bike, and can it packed in a proper box, I would highly&#xA;recommend that. The derailleurs, the shifters, and other such moving parts need&#xA;to be well packed and guarded. Use a box or a cycling bag to put it in. Get&#xA;professional help from a cycle retailer nearby, if required. This is one thing&#xA;you cannot take any chances on, or your whole trip may be jeopardized!&lt;/p&gt;&#xA;&lt;p&gt;We hadn&amp;rsquo;t paid enough attention to packing our bikes, and one of our bikes took&#xA;quite some beating on the way to Delhi. On the way back, we managed to get the&#xA;bike packed in a box and it was a breeze.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-cycle-spares-tools-did-you-carry&#34;&gt;What cycle spares/tools did you carry?&lt;/h2&gt;&#xA;&lt;p&gt;We were sort of ill prepared in this department. We only had the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hand pump&lt;/li&gt;&#xA;&lt;li&gt;Puncture kit&lt;/li&gt;&#xA;&lt;li&gt;Spare tubes (2 nos.)&lt;/li&gt;&#xA;&lt;li&gt;Allen key set&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Based on advice from Shabu, I think you should also take these things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brake cables&lt;/li&gt;&#xA;&lt;li&gt;Gear cables&lt;/li&gt;&#xA;&lt;li&gt;Spare tyre (1 Nos.)&lt;/li&gt;&#xA;&lt;li&gt;Brake shoes/pads&lt;/li&gt;&#xA;&lt;li&gt;Few spokes&lt;/li&gt;&#xA;&lt;li&gt;Chain oil&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-sort-of-preparation-did-you-do-for-this-ride&#34;&gt;What sort of preparation did you do for this ride?&lt;/h2&gt;&#xA;&lt;p&gt;We did a handful of 50-100km rides on weekends before this one. The only real&#xA;elevation training/trial that we did was the &lt;a href=&#34;https://www.strava.com/activities/1211612521&#34;&gt;Kalhatti climb&lt;/a&gt;, one weekend before&#xA;this ride. This turned out to be pretty useful, and we found all the other&#xA;climbs during this ride much less steeper than some of the Kalhatti ones.&lt;/p&gt;&#xA;&lt;h2 id=&#34;can-you-share-your-ride-plan&#34;&gt;Can you share your ride plan?&lt;/h2&gt;&#xA;&lt;h3 id=&#34;what-we-actually-rode&#34;&gt;What we actually rode&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Day&lt;/th&gt;&#xA;          &lt;th&gt;Start&lt;/th&gt;&#xA;          &lt;th&gt;End&lt;/th&gt;&#xA;          &lt;th&gt;Distance&lt;/th&gt;&#xA;          &lt;th&gt;Elevation gain&lt;/th&gt;&#xA;          &lt;th&gt;Comments&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;Kalath&lt;/td&gt;&#xA;          &lt;td&gt;-&lt;/td&gt;&#xA;          &lt;td&gt;-&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Fix cycles and acclimatize&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Kalath&lt;/td&gt;&#xA;          &lt;td&gt;Marhi&lt;/td&gt;&#xA;          &lt;td&gt;45km&lt;/td&gt;&#xA;          &lt;td&gt;1675m&lt;/td&gt;&#xA;          &lt;td&gt;Prepare to cross Rohtang!&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Marhi&lt;/td&gt;&#xA;          &lt;td&gt;Keylong&lt;/td&gt;&#xA;          &lt;td&gt;80km&lt;/td&gt;&#xA;          &lt;td&gt;-210m&lt;/td&gt;&#xA;          &lt;td&gt;Crossed Rohtang (3970m)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;Keylong&lt;/td&gt;&#xA;          &lt;td&gt;Patseo&lt;/td&gt;&#xA;          &lt;td&gt;48km&lt;/td&gt;&#xA;          &lt;td&gt;+644m&lt;/td&gt;&#xA;          &lt;td&gt;Easy ride; Deepak Tal!&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;Patseo&lt;/td&gt;&#xA;          &lt;td&gt;Sarchu&lt;/td&gt;&#xA;          &lt;td&gt;64km&lt;/td&gt;&#xA;          &lt;td&gt;+522m&lt;/td&gt;&#xA;          &lt;td&gt;Crossed Baralachala(4902m)!&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;Sarchu&lt;/td&gt;&#xA;          &lt;td&gt;Whiskey Nala&lt;/td&gt;&#xA;          &lt;td&gt;48km&lt;/td&gt;&#xA;          &lt;td&gt;+465m&lt;/td&gt;&#xA;          &lt;td&gt;Gata loops &amp;amp; Nakeela(4924m)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;original-plan&#34;&gt;Original plan&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Day&lt;/th&gt;&#xA;          &lt;th&gt;Start&lt;/th&gt;&#xA;          &lt;th&gt;End&lt;/th&gt;&#xA;          &lt;th&gt;Distance&lt;/th&gt;&#xA;          &lt;th&gt;Elevation gain&lt;/th&gt;&#xA;          &lt;th&gt;Comments&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;Sarchu&lt;/td&gt;&#xA;          &lt;td&gt;Pang&lt;/td&gt;&#xA;          &lt;td&gt;73km&lt;/td&gt;&#xA;          &lt;td&gt;+225m&lt;/td&gt;&#xA;          &lt;td&gt;Gata-loops, Nakeela(4924m) &amp;amp; Lachung La(5065m)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;Pang&lt;/td&gt;&#xA;          &lt;td&gt;Lato&lt;/td&gt;&#xA;          &lt;td&gt;103km&lt;/td&gt;&#xA;          &lt;td&gt;-530m&lt;/td&gt;&#xA;          &lt;td&gt;Moore Plains, Tanglang La (5328m)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;7&lt;/td&gt;&#xA;          &lt;td&gt;Lato&lt;/td&gt;&#xA;          &lt;td&gt;Leh&lt;/td&gt;&#xA;          &lt;td&gt;70km&lt;/td&gt;&#xA;          &lt;td&gt;-600m&lt;/td&gt;&#xA;          &lt;td&gt;Lots of downhill!&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;what-was-a-typical-day-during-the-trip-like&#34;&gt;What was a typical day during the trip, like?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wake up between 7 and 8, depending on when you can see/feel the warm sun. Laze&#xA;in bed if you woke up too early, and the sun hasn&amp;rsquo;t yet warmed the place up.&lt;/li&gt;&#xA;&lt;li&gt;Eat porridge, and a few slices of bread with peanut butter.&lt;/li&gt;&#xA;&lt;li&gt;Pack ourselves up in as many layers of clothing as we can, while still being&#xA;able to pedal.&lt;/li&gt;&#xA;&lt;li&gt;Check the bikes for any loose/fallen-off/broken parts, blow, etc.&lt;/li&gt;&#xA;&lt;li&gt;Start pedaling away - usually between 9 and 10. It&amp;rsquo;s too cold to start&#xA;earlier. Keep adjusting the clothing, based on how cold/warm it is, and the&#xA;wind chill.&lt;/li&gt;&#xA;&lt;li&gt;Keep munching, or sipping on some water (plain or mixed with some energizer).&lt;/li&gt;&#xA;&lt;li&gt;Continue pedaling, and start looking at the milestones a little more&#xA;carefully. Lunch is on our mind, already.&lt;/li&gt;&#xA;&lt;li&gt;Lunch at around 1:30pm - usually, a couple of boiled eggs, and a potato. May&#xA;be a chocolate, and some Frooti.&lt;/li&gt;&#xA;&lt;li&gt;More pedaling. The kilometers start getting harder, the chill is getting&#xA;harsher.&lt;/li&gt;&#xA;&lt;li&gt;Huff and puff, and reach our camp for the day. Hi-fives! We&amp;rsquo;d try and reach&#xA;the camp while there is still some sunlight there to keep us warm.&lt;/li&gt;&#xA;&lt;li&gt;Stretch it out, and switch into dry, warm clothes.&lt;/li&gt;&#xA;&lt;li&gt;Grab a quick snack - whole packets of biscuits would just disappear, alongside some tea.&lt;/li&gt;&#xA;&lt;li&gt;Talk, walk around, ponder about life, think about the day that&amp;rsquo;s been, think&#xA;about the day that is to come, and all that jazz.&lt;/li&gt;&#xA;&lt;li&gt;Eat dinner - dal and rice, mostly.&lt;/li&gt;&#xA;&lt;li&gt;Sleep like logs. Unless, there&amp;rsquo;s a rat in the room that&amp;rsquo;s attacking our dry&#xA;fruits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-was-the-most-enjoyable-part-of-the-ride&#34;&gt;What was the most enjoyable part of the ride?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I really enjoyed sitting at Deepak Tal, and just looking at the clear water&lt;/li&gt;&#xA;&lt;li&gt;The climb to Baralacha La was the most challenging part of the ride. We could&#xA;see that the weather was really bad in all the peaks around us, and it was&#xA;getting really cold. Briefly, it was even snowing very lightly and we could&#xA;see tiny snow flakes floating in front of us.&lt;/li&gt;&#xA;&lt;li&gt;The feeling of reaching the top of passes was quite thrilling, for both&#xA;Rohtang and Baralacha La. Nakee La, not so much, since we still had about 30km&#xA;ahead of us to finish the day.&lt;/li&gt;&#xA;&lt;li&gt;It was humbling to see all the BRO folks working to keep the roads open and&#xA;functional! A big salute to them!&lt;/li&gt;&#xA;&lt;li&gt;Each time we had a truck or some bikers pass by, we would wave at them or show&#xA;thumbs up, and it would give us some additional energy to keep pushing ahead.&lt;/li&gt;&#xA;&lt;li&gt;The tree covered road in Sissu was just mind blowingly beautiful, with all the&#xA;trees golden and yellow, preparing for the fall.&lt;/li&gt;&#xA;&lt;li&gt;It was also nice to turn 30, in the hills. Vivek tried to make it as special,&#xA;for me, as he could.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-was-the-most-challenging-part-of-the-ride&#34;&gt;What was the most challenging part of the ride?&lt;/h2&gt;&#xA;&lt;p&gt;The cold. (See, the &lt;a href=&#34;https://punchagan.muse-amuse.in/blog/cycling-from-manali-to-leh-an-faq/#was-it-really-hard-why-couldn-t-you-finish-the-ride&#34;&gt;answer&lt;/a&gt; on why we didn&amp;rsquo;t finish the ride).&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-keep-saying-it-was-cold-how-cold-was-it-really&#34;&gt;You keep saying it was cold, how cold was it really?&lt;/h2&gt;&#xA;&lt;p&gt;On the night we camped at Sarchu, the water in our bottles and unwashed cups had&#xA;frozen. We had gone to &lt;a href=&#34;https://www.accuweather.com/en/in/darcha-dangma/3323751/october-weather/3323751&#34;&gt;sub zero temperatures&lt;/a&gt; on many nights, it looks like. The&#xA;winds during the day were quite chilly, and got worse as we gained altitude.&lt;/p&gt;&#xA;&lt;h2 id=&#34;did-you-meet-any-interesting-people-en-route&#34;&gt;Did you meet any interesting people en-route?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We met a guy from Slovenia who has been taking a couple or so months off for&#xA;the past 10 years. He was riding around with a 55kg weighing bike for the past&#xA;3 weeks, and was going from Leh to Manali, when we met him. He had a lot of&#xA;stories to tell &amp;ndash; including recommending that we go cycling in Iceland, and&#xA;enjoy watching the Northern lights from hot water baths.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shabu himself had a lot of stories to tell about all the people he had taken&#xA;on this ride - from guys with a $6k bike to a 70 year old doing the route his&#xA;4th time to the guy who would eat only olive oil mixed in rice to safeguard&#xA;his tummy, and more!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;All the aachos and aamas in the shops/guest houses/etc that we went to were&#xA;really nice to us. Most of the folks in the shops were planning to leave in a&#xA;few days after we had met them since it had gotten really cold.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We had our camp-site at Marhi in the compound of a HP state guest house. The&#xA;care taker walks up to us, while we are setting up the tent, and says, &amp;ldquo;Idhar&#xA;kahi par bhi baithna mana hai, 10 hazaar ka fine lag jaayega. Udhar toilet&#xA;bana hua hai&amp;rdquo;, pointing to the public toilets in a distance, &amp;ldquo;paisa nahi&#xA;lagega&amp;rdquo;. We had a good laugh, and ended up wondering if it was Swach Bharat&#xA;showing some effect.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We probably would&amp;rsquo;ve talked to a lot more people, and met a lot more interesting&#xA;people, if we were there in better weather and didn&amp;rsquo;t have a support vehicle&#xA;taking care of us.  Next time!&lt;/p&gt;&#xA;&lt;h2 id=&#34;would-you-do-this-again&#34;&gt;Would you do this again?&lt;/h2&gt;&#xA;&lt;p&gt;May be. We feel like we got a taste of the challenge of the ride, and the rest&#xA;of the route wouldn&amp;rsquo;t be anymore challenging than what we already saw, if we did&#xA;it in better weather. But, the better weather would also mean more traffic and&#xA;noise on the road.&lt;/p&gt;&#xA;&lt;h2 id=&#34;if-yes-which-part-of-the-year-would-you-do-it&#34;&gt;If yes, which part of the year would you do it?&lt;/h2&gt;&#xA;&lt;p&gt;Late August to mid-September might be a better time. We&amp;rsquo;d also need to look out&#xA;for rains and land-slides, though.&lt;/p&gt;&#xA;&lt;h2 id=&#34;if-not-what-other-routes-would-you-try&#34;&gt;If not, what other routes would you try?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cycling around Europe sounds like a fun thing to try&lt;/li&gt;&#xA;&lt;li&gt;Rides in the western ghats and/or Kerala seem promising&lt;/li&gt;&#xA;&lt;li&gt;A Tour of Meghalaya was something a friend suggested&lt;/li&gt;&#xA;&lt;li&gt;Pushing that a little more, ride all the way to Singapore/Indonesia, starting&#xA;at home&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;do-you-have-any-pictures-that-you-can-share&#34;&gt;Do you have any pictures that you can share?&lt;/h2&gt;&#xA;&lt;p&gt;You can find some pictures and videos &lt;a href=&#34;https://photos.app.goo.gl/myqR5MktArCnlj4B3&#34;&gt;here&lt;/a&gt;. The album also includes some&#xA;pictures from our practice rides.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Google Trends, Clickbaits, and PV Sindhu</title>
      <link>https://punchagan.muse-amuse.in/blog/google-trends-clickbaits-and-pv-sindhu/</link>
      <pubDate>Sat, 20 Aug 2016 22:59:13 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/google-trends-clickbaits-and-pv-sindhu/</guid>
      <description>&lt;p&gt;TL;DR&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Am I saying India doesn&amp;rsquo;t have a caste problem?&lt;/p&gt;&#xA;&lt;p&gt;No, it&amp;rsquo;s definitely a HUGE problem!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Are these articles on Google Trends and Sindhu&amp;rsquo;s caste useful at all?&lt;/p&gt;&#xA;&lt;p&gt;Just more click-baits and no useful contribution to the discussion on caste.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;First of all, congratulations to PV Sindhu on making it to the finals and&#xA;giving the world number one a hard fight!&lt;/p&gt;&#xA;&lt;p&gt;This post, though, is not a celebratory one.  I read &lt;a href=&#34;http://www.thenewsminute.com/article/while-pv-sindhu-fought-hard-medal-many-indians-googled-her-caste-48545&#34;&gt;this article&lt;/a&gt; &amp;ndash; While PV&#xA;Sindhu fought hard for a medal, many Indians googled her caste &amp;ndash; by the News&#xA;Minute thanks to a &lt;a href=&#34;https://twitter.com/tmkrishna/status/766844023810117632&#34;&gt;re-tweet by TM Krishna&lt;/a&gt;.  I probably wouldn&amp;rsquo;t have paid much&#xA;attention to it, if not for the retweet by TMK.&lt;/p&gt;&#xA;&lt;p&gt;Caste is a huge problem for the country, and if you still like to pretend it&#xA;isn&amp;rsquo;t &amp;ndash; read &lt;a href=&#34;http://www.firstpost.com/india/from-gujarat-to-gurugram-atrocities-on-dalits-rise-even-as-their-protests-continue-2960548.html&#34;&gt;this&lt;/a&gt; for a start.  I&amp;rsquo;m not surprised that &lt;strong&gt;some&lt;/strong&gt; people searched&#xA;for Sindhu&amp;rsquo;s caste while she was battling it out at Rio.  But, &lt;strong&gt;some&lt;/strong&gt; people&#xA;also searched for Badminton rules, and others for Sania Mirza!  What surprises&#xA;me is that the article doesn&amp;rsquo;t try to put the data in a context at all.  Nor do&#xA;I understand the contribution this article makes to the discussion on caste.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c5.staticflickr.com/9/8541/28818616900%5Fd8e2b33cb0%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I played around a little more with these search terms and Google Trends, and&#xA;here are a few things that I thought were worth sharing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;indian-trends&#34;&gt;Indian trends&lt;/h2&gt;&#xA;&lt;p&gt;First of all, the article says &amp;ldquo;Many Indians&amp;rdquo;, and gives off cumulative&#xA;month-wise numbers (&lt;strong&gt;UPDATE &lt;span class=&#34;timestamp-wrapper&#34;&gt;&lt;span class=&#34;timestamp&#34;&gt;[2016-08-21 Sun 12:15]&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;: which are so wrong! See&#xA;Sankrant Sanu&amp;rsquo;s &lt;a href=&#34;http://indiafacts.org/lie-graphs-newsminute/&#34;&gt;excellent article&lt;/a&gt; on India Facts).  But, what does it really&#xA;mean?&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know if anybody actually wrote about how many people actually followed&#xA;the match, but Sindhu actually managed to get a whole lot of people interested!&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c2.staticflickr.com/9/8014/29105184025%5F777ac4e5d0%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;More people searched for PV Sindhu than the daily average number of searches&#xA;(not hits) for Facebook and very close to the daily number of searches for Porn&#xA;&amp;ndash; two of the biggest things Internet is allegedly used for.  Can you see the&#xA;red line at the bottom?  That is the number of people who actually searched for&#xA;Sindhu&amp;rsquo;s caste &amp;ndash; a tiny blip.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s take a closer look.  Here&amp;rsquo;s a plot of some of the other auto suggest&#xA;terms + badminton rules &amp;amp; courts compared to Sindhu&amp;rsquo;s name.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c7.staticflickr.com/9/8507/28818617070%5F9c9fdfeb12%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Nothing other than badminton rules (which is at about 1% of max. searches) is&#xA;even visible, clearly.&lt;/p&gt;&#xA;&lt;p&gt;So, these other terms (wiki &amp;amp; caste being auto-suggested ones) are nowhere near&#xA;the actual number of searches being made for PV Sindhu&amp;rsquo;s name alone.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get rid of the name graph to get a closer look at the other terms.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c6.staticflickr.com/9/8191/29105184165%5F133734e300%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The maximum number of people searching for Sindhu&amp;rsquo;s caste is at about a fifth&#xA;of the maximum number of people searching for badminton rules.  Interpreting&#xA;it is upto you.  But, I&amp;rsquo;m not surprised knowing how significant caste has&#xA;been in our society.  Also, notice that searches for wiki and caste fall off&#xA;more gradually than the searches for the rules which peak while the game is&#xA;being played and watched.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Unsurprisingly, a bulk of the searches appear to be coming from Andhra and&#xA;Telangana. Notice that the other states are searching more for the rules or&#xA;her wiki page.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c8.staticflickr.com/9/8169/29105184295%5Ff3e1448d10%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do you notice that the red (caste), blue (wiki) and violet (images) lines&#xA;following a similar trend, until the last few hours?  What do you think is&#xA;happening there? It&amp;rsquo;s the shitty click baits working!  Look at the trends from&#xA;~8:30AM to ~12:30AM below &amp;ndash; the red has spread to other states as well!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c6.staticflickr.com/9/8049/29105184245%5F6e691d318d%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;And this is how it looks by the evening (17:00-21:00).  Well done, folks!&#xA;The click bait articles totally succeeded!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c4.staticflickr.com/9/8144/29032147971%5Fc9c3c13fdc%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;If you are wondering how much effect the auto suggestions are having in&#xA;suggesting people to try searching for caste, I don&amp;rsquo;t think that is much&#xA;because wiki and images are the other auto-suggest terms, with no such surges&#xA;in the number of searches.&lt;/p&gt;&#xA;&lt;h2 id=&#34;trends-from-the-telugu-states&#34;&gt;Trends from the Telugu states&lt;/h2&gt;&#xA;&lt;p&gt;We could see that the two Telugu states were more worried about the caste, than&#xA;the rest of the country.  Let&amp;rsquo;s see how abnormal they are.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c8.staticflickr.com/9/8293/29105183935%5F5bc55c03b4%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c3.staticflickr.com/9/8395/28483785994%5F89f1c999e4%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;You can definitely see the red line more prominently.  In case of Andhra the&#xA;peak searches for caste are at about 5% of the name searches.  A statistically&#xA;significant difference from the rest of the country.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s zoom in at the auto-suggest terms alone.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c7.staticflickr.com/9/8317/28818617430%5Fbca8ed9d1a%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c4.staticflickr.com/9/8265/29105184115%5Fa0a8e34f4b%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Woah, Andhra is definitely quite an aberration from the rest of the country.&#xA;From about 1/5th of the maximum number of searches for rules, the maximum&#xA;number of caste searches jumps to about twice.  Telangana also is different,&#xA;but much less so.&lt;/p&gt;&#xA;&lt;p&gt;Tamil Nadu&amp;rsquo;s trends below for comparison.  You can&amp;rsquo;t help noticing the last few&#xA;hours, can you?&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://c3.staticflickr.com/9/8426/28818617290%5Feb4b3a2535%5Fb.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: The trends and screen-shots for the states are slightly more recent&#xA;than the others.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;Without a context, I don&amp;rsquo;t really see the point of these &amp;ldquo;news&amp;rdquo; articles.  It&#xA;seems more click-bait-y than useful to me.&lt;/p&gt;&#xA;&lt;p&gt;If you still feel &lt;strong&gt;many&lt;/strong&gt; Indians were searching for Sindhu&amp;rsquo;s caste, while she&#xA;was fighting it out, go ahead and play with Google trends &lt;a href=&#34;https://www.google.com/trends/explore?date=now%25207-d&amp;amp;geo=IN&amp;amp;q=pv%2520sindhu,pv%2520sindhu%2520caste,porn,movies&#34;&gt;here&lt;/a&gt;.  Add/remove&#xA;terms, change the time and location filters.  Some terms that could be&#xA;interesting to add to the comparison are: Kashmir, Independence day, Facebook.&lt;/p&gt;&#xA;&lt;p&gt;Later, I looked at the search results and then found that this article wasn&amp;rsquo;t&#xA;the only one like it.  I didn&amp;rsquo;t bother to read the others, but I really hope at&#xA;least some of them are talking sense.  Is any of them really trying to&#xA;contribute to the discussion on caste, meaningfully?&lt;/p&gt;&#xA;&lt;p&gt;Also, the actual search results don&amp;rsquo;t seem to give useful answers to the folks&#xA;so curious about Sindhu&amp;rsquo;s caste.  I hope none of these articles are trying to&#xA;help them out.&lt;/p&gt;&#xA;&lt;p&gt;Finally, if you are using Google Trends to write an article, &lt;a href=&#34;https://medium.com/@dannypage/stop-using-google-trends-a5014dd32588#.js332qw0h&#34;&gt;Danny Page has&#xA;some really good advice&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Thanks to &lt;a href=&#34;https://twitter.com/kamalx&#34;&gt;Kamal&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/baali%5F&#34;&gt;baali&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/cloud9trt&#34;&gt;9&lt;/a&gt; for reading and reviewing drafts of this.  Errors&#xA;mine, obviously.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>I love FOSS.  How do I start contributing (code)?</title>
      <link>https://punchagan.muse-amuse.in/blog/i-love-foss-how-do-i-start-contributing-code/</link>
      <pubDate>Mon, 28 Mar 2011 00:34:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/i-love-foss-how-do-i-start-contributing-code/</guid>
      <description>&lt;h2 id=&#34;why-this-article&#34;&gt;Why this article?&lt;/h2&gt;&#xA;&lt;p&gt;I teach (Science and Engineering) students and teachers to use Python for&#xA;their computational tasks.  I&amp;rsquo;m occasionally asked this question or something&#xA;similar.  I remember, it was not too long ago, that I asked this question&#xA;very often.  I asked anybody who was more experienced than me, &amp;ldquo;How do I&#xA;start contributing (code) to FOSS?&amp;rdquo; and all the answers I got, were very&#xA;similar.  Also, my answer is not going to be radically different.  But, I&#xA;would still like to answer this question, because -&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;All the answers I got, were from big-time, experienced contributors.  I&#xA;suspect, they only vaguely remember how it feels to be just starting off.&#xA;But, I am just starting off and I think my answer brings a slightly&#xA;different perspective that would help others&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#xA;&lt;li&gt;This piece of writing is meant to be one comprehensive compilation of&#xA;things I want to share, if and when I&amp;rsquo;m asked this question in the&#xA;future&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#xA;&lt;li&gt;More than anything else, a reminder and reference for myself.  I still&#xA;have a long way to go.  I only have a handful of contributions against my&#xA;name (none of them earth shattering).  I haven&amp;rsquo;t (yet) done my 10,000&#xA;hours of programming nor have I learned anything like half a dozen&#xA;programming languages.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thanks to baali, Ringo and Voodoo for reading drafts of this article and&#xA;giving some very valuable feedback to improve it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-should-i-do&#34;&gt;What should I do?&lt;/h2&gt;&#xA;&lt;p&gt;I know how exciting the FOSS world seems, the first time we discover it.  You&#xA;are dying to contribute.  You want to contribute, Right Now!  But you&amp;rsquo;ve no&#xA;clue, what, where and how.  Relax.  Give yourself time.  You&amp;rsquo;ve a lifetime&#xA;ahead of you.  Explore.  Explore, even more.  Play with things, Try out&#xA;stuff, Break stuff, Spill things all over the place.  Have fun!&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Given that you are reading this, I presume that, you do have access to the&#xA;Internet.  But, if you don&amp;rsquo;t, it could turn an impediment to your goal.  Easy&#xA;access to a decent internet connection is a prerequisite.&lt;/p&gt;&#xA;&lt;p&gt;Learn a programming language, well&lt;sup id=&#34;fnref1:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.  By learning, I don&amp;rsquo;t mean&#xA;getting familiar with the syntax or passing a bunch of exams.  Get familiar&#xA;with the paradigms of the language.  Learn to think in that language.  Write&#xA;code that does something &lt;strong&gt;real&lt;/strong&gt;, instead of doing toy examples.&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt; Also,&#xA;it helps know bits and pieces about the history and evolution of the&#xA;language.  This will give you a sense of why some features are present (or&#xA;absent) and will help you program better, in that language&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Some projects will definitely catch your eye, while you are exploring.  Start&#xA;using the ones that you need.  Follow them!&lt;/p&gt;&#xA;&lt;p&gt;Start with using the bleeding edge &lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt; software.  Bleeding edge refers&#xA;to the latest sources of the project, where the active development is going&#xA;on.  Given the continuous nature of software development, using the latest&#xA;source,&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;prevents you from wasting time on fixing bugs that have already been fixed&#xA;and&lt;/li&gt;&#xA;&lt;li&gt;lets you look at the latest changes being made and contribute effectively&#xA;and easily&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Also, start following the project&amp;rsquo;s mailing lists &amp;ndash; both the dev and the&#xA;user lists, if they are separate.  The user-list discussions will help you&#xA;discover functionality and possibly give you some chance to peek at the&#xA;source code, too.  Don&amp;rsquo;t be surprised or worried if you don&amp;rsquo;t follow most of&#xA;what goes on, in the dev-list.  Be patient and keep at it.  You will learn a&#xA;lot about the &lt;em&gt;what, why and how&lt;/em&gt; of the project.  Also don&amp;rsquo;t be afraid to&#xA;look foolish there!  There wouldn&amp;rsquo;t be one developer who doesn&amp;rsquo;t have some&#xA;embarrassing logs of stuff she said in public, in her initial days.&lt;/p&gt;&#xA;&lt;p&gt;Slowly you&amp;rsquo;ll start to learn the dynamics of the community &amp;ndash; how things&#xA;function, the DOs and DON&amp;rsquo;Ts, etc &lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;.  Also, there&amp;rsquo;s a good chance&#xA;that the project has an active IRC channel.  If it does, hanging out there&#xA;will give you more insights.  Contributing to the documentation, is often a&#xA;useful step before contributing code.  Cleaning up the documentation or&#xA;writing documentation, often requires you to read the code and helps you&#xA;understand it better.&lt;/p&gt;&#xA;&lt;p&gt;Next, start &lt;strong&gt;acting&lt;/strong&gt; on Bug reports (or tiny feature requests).  Start with&#xA;trying to reproduce the bugs and sending confirmations.  Gradually, start&#xA;looking at the source and trying to figure out where the problem is.  Be&#xA;patient, with this &lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt;.  Once you get comfortable with the code&#xA;and the coding style, start sending code snippets and comments, explaining&#xA;what you think might be the problem.  One fine day, you will be able to send&#xA;a full working patch!  But, before that don&amp;rsquo;t hesitate to send partial fixes.&#xA;You can learn a lot from the comments of the devs and looking at how they&#xA;finally fixed it.  Also, IRC could be a good place to ask for help, if you&#xA;are stuck and are looking for some quick help, so you can move further.&lt;/p&gt;&#xA;&lt;p&gt;In all of this, it helps if you have one (or a bunch of) favorite &lt;em&gt;area(s)&lt;/em&gt;&#xA;or &lt;em&gt;module(s)&lt;/em&gt; of the project, specially in a big project.  You should pounce&#xA;upon any issues in your favorite area.&lt;/p&gt;&#xA;&lt;p&gt;Participate in sprints.  It&amp;rsquo;s not uncommon for projects to have regular&#xA;sprints.  Make it there &lt;sup id=&#34;fnref:10&#34;&gt;&lt;a href=&#34;#fn:10&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;10&lt;/a&gt;&lt;/sup&gt;!  Also, a couple of developers may decide&#xA;to meet up on a weekend and hack.  If it&amp;rsquo;s happening in your neighborhood,&#xA;ask if you can join.  Don&amp;rsquo;t be surprised, if they shout out a big YES!  You&#xA;will definitely learn a lot, when there is help so close-by.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;em&gt;shortcut&lt;/em&gt; would be to start your own project!  It is easier (in some ways)&#xA;to release your own code under a FOSS license, than contribute to some of the&#xA;existing projects.  You don&amp;rsquo;t have to have your code approved by the project&#xA;leads, you don&amp;rsquo;t need to mould your code to fit the standards of the project,&#xA;you don&amp;rsquo;t have to read and understand all the (relevant parts of the)&#xA;existing code, etc.  But all of this, definitely teaches you a lot.&lt;/p&gt;&#xA;&lt;p&gt;As a beginner, I think it is important to solve your &lt;strong&gt;own&lt;/strong&gt; problems, problems&#xA;that you care about (at least at that point in time).  Most of the projects,&#xA;started off with their developers wanting to solve their own problems.  Only,&#xA;incidentally, they solved some of the World&amp;rsquo;s problems, too!&lt;/p&gt;&#xA;&lt;p&gt;Start small, though.  Don&amp;rsquo;t start off with a project that aims to replace&#xA;Chrome or Firefox as the best browser, or an editor to replace Vim or Emacs.&#xA;Writing extensions to your favorite software could be a good place to start,&#xA;for instance an Emacs minor/major mode&lt;sup id=&#34;fnref:11&#34;&gt;&lt;a href=&#34;#fn:11&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;11&lt;/a&gt;&lt;/sup&gt;, a Chrome&#xA;extension&lt;sup id=&#34;fnref:12&#34;&gt;&lt;a href=&#34;#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt;, etc.  Stand on the shoulders of giants!&lt;/p&gt;&#xA;&lt;p&gt;Also, take this as an opportunity to gain some of the skills that would be&#xA;useful, when you want to start contributing to others projects.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Learn to use Version Control (Git + GitHub is awesome!)&lt;/li&gt;&#xA;&lt;li&gt;Learn to use build and setup tools.&lt;/li&gt;&#xA;&lt;li&gt;Learn about packaging and distributing your software.&lt;/li&gt;&#xA;&lt;li&gt;Learn how to license your code.&lt;/li&gt;&#xA;&lt;li&gt;Learn to Collaborate!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;All of this, I hope, would suffice to get your first contribution in.  But,&#xA;there are a few things that will help you in the long run.&lt;/p&gt;&#xA;&lt;p&gt;Good English. Specially written communication, since that is how you would be&#xA;communicating, more often than not.  Fair or not, hackers are known to be&#xA;very particular about good communication.  I&amp;rsquo;m not exaggerating when I say,&#xA;what you say may be ignored even if it makes perfect sense, if you said it in&#xA;sloppy English.&lt;/p&gt;&#xA;&lt;p&gt;Using a *nix would put you in some great company.  At the very least, you&#xA;save time when looking for solutions to known problems.  Using a good editor&#xA;and learning to type quickly can be big productivity gains.  You only get 24&#xA;hours a day!&lt;/p&gt;&#xA;&lt;p&gt;An understanding of licensing issues, can come in handy, many a times.&lt;/p&gt;&#xA;&lt;p&gt;For more, read How to Become a Hacker by Eric Raymond.&lt;/p&gt;&#xA;&lt;p&gt;Happy Hacking!&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;I&amp;rsquo;m writing in the Indian context.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;All of this is generic advice, but students applying to programs like GSoC, may find it useful.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Teach Yourself Programming in Ten Years by Peter Norvig.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref1:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:4&#34;&gt;&#xA;&lt;p&gt;Getting yourself a GitHub account and &lt;em&gt;socializing&lt;/em&gt; there is a lot of fun and helps quite a bit. GitHub is my Facebook!&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:5&#34;&gt;&#xA;&lt;p&gt;I started learning Python from &lt;em&gt;the Python tutorial&lt;/em&gt; and some other sources and doing the examples in them. It was good, but I think I started learning more, and better, when I started solving problems from Project Euler. And writing an IRC bot in Python, taught me a lot more than all of this.&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:6&#34;&gt;&#xA;&lt;p&gt;I recommend Python, but I am definitely biased. Any language that is generic enough would do, really. 1. It gets you off the blocks, very quickly. 2. It is easy to learn. 3. It is batteries included. Read as, comes bundled with a huge bunch of libraries. 4. It is general purpose enough. Read as, it has libraries that let you do anything, you&amp;rsquo;d possibly want to do. 5. There&amp;rsquo;s a lot of Python code around, that you can read andlearn from.&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:7&#34;&gt;&#xA;&lt;p&gt;You may have to learn to use a version control system; at the very least cloning and pulling updates.&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:8&#34;&gt;&#xA;&lt;p&gt;Org-mode is the only project that I really contribute to, actively. I &lt;strong&gt;really&lt;/strong&gt; liked the way the community gels together and the kind of people on the list. There are some really knowledgeable, friendly and helpful people. It feels great to be a part of the community.&amp;#160;&lt;a href=&#34;#fnref:8&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:9&#34;&gt;&#xA;&lt;p&gt;There have been instances, where it took me half a day to fix something, that would&amp;rsquo;ve been fixed in about an hour by someone more comfortable with the code. But, I think everybody goes through this stage. This is how you learn.&amp;#160;&lt;a href=&#34;#fnref:9&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:10&#34;&gt;&#xA;&lt;p&gt;A few months ago, I was part of a sprint on the numpy-scipy eco-system. We had somewhere around 50 patches (a lot of them were documentation fixes) submitted to all the projects! Most of the people were submitting their first patch and I think it was a great opportunity for them to start. [I should try and get back to them.]&amp;#160;&lt;a href=&#34;#fnref:10&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:11&#34;&gt;&#xA;&lt;p&gt;Org-mode is really awesome, and I use it for everything I write. Blog posts are a big part of what I write, and so, I wanted to write them in orgmode. And so, org2blog was born.&amp;#160;&lt;a href=&#34;#fnref:11&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:12&#34;&gt;&#xA;&lt;p&gt;I recently wrote a Chrome extension, thanks to a friend&amp;rsquo;s idea. Inspired by Gmail notifications, a GitHub addict wanted notifications for activity in GitHub.&amp;#160;&lt;a href=&#34;#fnref:12&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
  </channel>
</rss>
