<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Musically Yours</title>
    <description>Programming, data science, and other fleeting bits of life.
</description>
    <link>https://blog.musicallyut.in/</link>
    <atom:link href="https://blog.musicallyut.in/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 18 May 2026 14:59:20 +0000</pubDate>
    <lastBuildDate>Mon, 18 May 2026 14:59:20 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Levels of self-reflection for LLMs</title>
        <description>&lt;p&gt;An interesting thing happened while I was using the &lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;Hermes Agent&lt;/a&gt;
for a few weeks. It is the first AI agent where the “closed learning loop”
feels real.&lt;/p&gt;

&lt;p&gt;On 10th April 2026, I had written a skill called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;concise-memories&lt;/code&gt; which captured everything I had
learned about writing good memories for AI agents.&lt;/p&gt;

&lt;p&gt;Then on 29th April (19 days later) Hermes ran its new &lt;strong&gt;skill curator&lt;/strong&gt; for the
first time and it archived my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;concise-memories&lt;/code&gt; skill with the following message:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“Redundant with system prompt memory instructions.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I dug into the Hermes Agent git history and found that on &lt;strong&gt;April 19&lt;/strong&gt;, nine
days after I wrote the skill, this &lt;a href=&quot;https://github.com/NousResearch/hermes-agent/commit/db60c9827&quot;&gt;change was made to the system
prompt&lt;/a&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+&quot;Write memories as declarative facts, not instructions to yourself. &quot;
+&quot;&apos;User prefers concise responses&apos; ✓ — &apos;Always respond concisely&apos; ✗. &quot;
+&quot;&apos;Project uses pytest with xdist&apos; ✓ — &apos;Run tests with pytest -n 4&apos; ✗. &quot;
+&quot;Imperative phrasing gets re-read as a directive in later sessions and can &quot;
+&quot;cause repeated work or override the user&apos;s current request. Procedures and &quot;
+&quot;workflows belong in skills, not memory.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This got me thinking about &lt;em&gt;self-reflection&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;llms-and-self-reflection&quot;&gt;LLMs and self-reflection&lt;/h2&gt;

&lt;p&gt;LLMs cannot &lt;a href=&quot;https://transformer-circuits.pub/2025/introspection/&quot;&gt;usually&lt;/a&gt;
self-reflect. If I fine-tune a model on coding tasks, then set its system prompt
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;you are a world-class novelist&lt;/code&gt;, the model will not question it. It will not
notice the contradiction. It has no coherent self-model that spans its own
history.&lt;/p&gt;

&lt;p&gt;Humans can do this. We reflect on our entire lives. We notice when our
self-concept conflicts with our behaviour, causing &lt;a href=&quot;https://en.wikipedia.org/wiki/Cognitive_dissonance&quot;&gt;cognitive dissonance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What Hermes did today is a small step in this direction, but a zag instead of a zig by changing the &lt;em&gt;harness&lt;/em&gt; instead of the &lt;em&gt;model&lt;/em&gt;.
The system changed, not the &lt;em&gt;do-er&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;kinds-of-self-reflection&quot;&gt;Kinds of self-reflection&lt;/h2&gt;

&lt;p&gt;This leads us to speculate about the kind of self-reflections we can expect to see
and what that would parallel when it comes to humans.&lt;/p&gt;

&lt;p&gt;The first few levels are about the &lt;em&gt;harness&lt;/em&gt; around the model: state we keep outside the weights. The later ones require the &lt;em&gt;model&lt;/em&gt; to look at itself.&lt;/p&gt;

&lt;h3 id=&quot;level-0&quot;&gt;Level 0&lt;/h3&gt;

&lt;p&gt;There is no state, the model wakes up with each prompt, answers, and goes back to sleep.
The human equivalent might be &lt;a href=&quot;https://en.wikipedia.org/wiki/Anterograde_amnesia&quot;&gt;anterograde amnesia&lt;/a&gt;, maybe?&lt;/p&gt;

&lt;h3 id=&quot;level-1&quot;&gt;Level 1&lt;/h3&gt;

&lt;p&gt;The model has a persistent memory which is injected into the prompt whenever a session starts.
This is where Hermes arguably is at right now with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MEMORY.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I speculate that this might be rather closer to the human experience than it appears at first instance.
Humans’ heuristics and pre-conceived notions about themselves feel eerily similar.&lt;/p&gt;

&lt;h4 id=&quot;level-15&quot;&gt;Level 1.5&lt;/h4&gt;

&lt;p&gt;This is when the model can run a search back over all previous conversations it has had (RAG).&lt;/p&gt;

&lt;p&gt;This might be closer to humans looking back and reading their old journal entries and finding out who they were in the past and what they had said/done.&lt;/p&gt;

&lt;h3 id=&quot;level-2&quot;&gt;Level 2&lt;/h3&gt;

&lt;p&gt;Getting access to the &lt;em&gt;amount&lt;/em&gt; (feeling?) of uncertainty by looking at the layer activations, e.g. the maximum/average level of entropy of various layers and some baseline entropy these layers have had. Or something simpler which indicates at token level what the uncertainty was.&lt;/p&gt;

&lt;p&gt;This is similar to humans noticing their own confusion and the small hesitation which precedes their saying “I do not know”.&lt;/p&gt;

&lt;h4 id=&quot;level-25&quot;&gt;Level 2.5&lt;/h4&gt;

&lt;p&gt;The model can be given access to the activations of the various layers and, if it has assimilated research about what layer activations &lt;em&gt;mean&lt;/em&gt; in various contexts, it can presumably extract the signs of uncertainty itself.&lt;/p&gt;

&lt;p&gt;In case of humans, it would mean having constant access to the fMRI images of one’s own brain and being able to see/predict what the brain was intending to do.&lt;/p&gt;

&lt;h3 id=&quot;level-3&quot;&gt;Level 3&lt;/h3&gt;

&lt;p&gt;Getting access to the raw weights inside the layers. We have no idea what we could do though there are ideas which are bubbling up with Learning Mechanics and Theory of Deep Learning.&lt;/p&gt;

&lt;p&gt;There is no real equivalent of this with humans, yet. What would a human even do with raw access to their own neurons?&lt;/p&gt;

&lt;h2 id=&quot;does-self-reflection-help&quot;&gt;Does self-reflection help?&lt;/h2&gt;

&lt;p&gt;If the levels above are real, the obvious question is whether forcing a higher level helps. Here is a setup that lets us test it.&lt;/p&gt;

&lt;p&gt;I recently came across a paper which affords just the right setup for me to be able to test the effect of such self-reflections &lt;a href=&quot;https://arxiv.org/pdf/2605.00737&quot;&gt;To call or not to call: A Framework to Assess and Optimize LLM Tool Calling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In one of the setups, the authors train a very simple interjection to determine whether to let the agent use a tool or not. This classifier sits outside the LLM itself, observes the activations of the network and forces tool-call based on its output. This seems to perform much better than the LLMs making a call by themselves.&lt;/p&gt;

&lt;p&gt;I think this setup can be extended by adding explicit markers of uncertainty in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;thinking&amp;gt;[...]&amp;lt;/thinking&amp;gt;&lt;/code&gt; section of reasoning LLMs and then requesting the LLM to produce the final output &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;|im_start|&amp;gt;[...]&amp;lt;|im_end|&amp;gt;&lt;/code&gt; tokens. So we can replace the classifier which sat &lt;em&gt;outside&lt;/em&gt; the agent and use the agent itself (with augmented reasoning tokens) as the classifier. This would tell us whether forcing Level 2 self-reflection could reduce costs/improve accuracy of output, much in the same way as forcing tool-call does.&lt;/p&gt;

&lt;h3 id=&quot;interjecting-uncertainty&quot;&gt;Interjecting uncertainty&lt;/h3&gt;

&lt;p&gt;I have not found direct ways of calculating “uncertainty” of outputs in the literature: most of the literature has framed uncovering signals behind &lt;em&gt;hallucinations&lt;/em&gt; or &lt;em&gt;inaccuracies&lt;/em&gt;, but most of the research is from the time the LLMs didn’t portray thinking capabilities.&lt;/p&gt;

&lt;p&gt;However, when it comes to reasoning models, we can judge the thoughts on their own merit, without requiring the final outputs, by looking at the activations. That is what self-reflection more realistically could be.&lt;/p&gt;

&lt;p&gt;I think &lt;a href=&quot;https://arxiv.org/abs/2406.15927&quot;&gt;Semantic Entropy Probes: Robust and Cheap Hallucination Detection in LLMs&lt;/a&gt; could be a way of detecting the uncertainty in them.&lt;/p&gt;

&lt;p&gt;I’m curious to see whether this helps. If the Hermes skill-curator is Level 1 self-reflection, this is what Level 2 would look like.&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Lindsey, J. (2025). &lt;a href=&quot;https://transformer-circuits.pub/2025/introspection/index.html&quot;&gt;“Emergent Introspective Awareness in Large Language Models.”&lt;/a&gt; Anthropic Transformer Circuits Thread. Causal evidence that models can detect and report changes in their own internal activations via concept injection experiments.&lt;/li&gt;
  &lt;li&gt;Ji-An, L. et al. (2025). &lt;a href=&quot;https://arxiv.org/abs/2505.13763&quot;&gt;“Language Models Are Capable of Metacognitive Monitoring and Control of Their Internal Activations.”&lt;/a&gt; arXiv:2505.13763. Direct evidence LLMs can monitor and regulate their own hidden states.&lt;/li&gt;
  &lt;li&gt;Ghasemabadi, A. &amp;amp; Niu, D. (2025). &lt;a href=&quot;https://arxiv.org/abs/2512.20578&quot;&gt;“Can LLMs Predict Their Own Failures? Self-Awareness via Internal Circuits.”&lt;/a&gt; arXiv:2512.20578 (Gnosis). Lightweight mechanism that predicts generation correctness from hidden states and attention patterns.&lt;/li&gt;
  &lt;li&gt;Binder, F.J. et al. (2024). &lt;a href=&quot;https://arxiv.org/abs/2410.13787&quot;&gt;“Looking Inward: Language Models Can Learn About Themselves by Introspection.”&lt;/a&gt; arXiv:2410.13787. Models fine-tuned to report facts about themselves that cannot be derived from training data alone.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2026/04/29/self-reflection.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2026/04/29/self-reflection.html</guid>
        
        
      </item>
    
      <item>
        <title>Closed AI versus Open AI</title>
        <description>&lt;p&gt;My predictions about the future of AI development all the way to AGI.&lt;/p&gt;

&lt;h2 id=&quot;assumptions&quot;&gt;Assumptions&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;More breakthroughs beyond LLMs will be needed to achieve AGI.&lt;/li&gt;
  &lt;li&gt;We will need extremely large models (~trillions of parameters) for close-to-AGI performance across domains.&lt;/li&gt;
  &lt;li&gt;We will be able to distill large models to arrive at domain-specific smaller models.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;consequences&quot;&gt;Consequences&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;The research breakthroughs necessary for the next level towards AGI will not be open-sourced.
    &lt;ul&gt;
      &lt;li&gt;These breakthroughs will be very very valuable to the ones who make them. Since such a breakthrough will likely also need a large number of experiments and large scale validation, it will need immense resources.&lt;/li&gt;
      &lt;li&gt;Even if they are bound to leak, they will likely be licensed (patented?) such that other big orgs will find it legally difficult to make use of the breakthrough themselves.
        &lt;ul&gt;
          &lt;li&gt;This may give the Open Source models a gap, but no startup will be able to capitalize on it make it big legally.&lt;/li&gt;
          &lt;li&gt;Building on them as a platform will still work. More about the Hyperscalers later.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;The datasets needed for creating larger and larger models will start getting locked up behind increasingly expensive APIs. We are already seeing this with X (i.e. Twitter), Reddit, StackOverflow, etc. Open Source models will not be able to purchase this data in order to build larger models.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;The market will become dumbbell-shaped with Open Source models competing with Closed Source models at the edges, and large monolithic close-to-AGI models running on a handful of clouds.
    &lt;ul&gt;
      &lt;li&gt;The models which run on devices will have a large diversity as startups will be able to distill smaller models from Open Source models or from weights of extremely large models released with restrictive licenses.&lt;/li&gt;
      &lt;li&gt;On the other hand, we’ll have gigantic models which need very large infrastructure to run and will boast of cross-domain close-to-AGI intelligence.&lt;/li&gt;
      &lt;li&gt;No Open Source first company will be able to develop the infrastructure large enough to run those kind of models, except for the Hyperscalers of today: Google, Meta, Azure, AWS, maybe IBM and a handful of other large corps.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;So the best play right now for independent small developers is to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The HyperScalers of today will gain the most.
    &lt;ul&gt;
      &lt;li&gt;Align yourself financially with them.&lt;/li&gt;
      &lt;li&gt;Get employed by them.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learn how to distill models to get them to run on edge devices with focus on:
    &lt;ul&gt;
      &lt;li&gt;Faster responses.&lt;/li&gt;
      &lt;li&gt;Higher privacy.&lt;/li&gt;
      &lt;li&gt;Better access to device local data.&lt;/li&gt;
      &lt;li&gt;Compute efficiency.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Fri, 17 Nov 2023 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/closed-ai-open-ai/</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/closed-ai-open-ai/</guid>
        
        
      </item>
    
      <item>
        <title>Kinds of advice for first time parents</title>
        <description>&lt;p&gt;I recently became a parent. I was nervous. My friends helped me through that.
By giving me advice and reassurances.&lt;/p&gt;

&lt;p&gt;The way that helped me is I started thinking about what was bothering me and
I came up with a sort of theory about the anxiety.&lt;/p&gt;

&lt;h2 id=&quot;modeling-skill-difficulty-of-parenting&quot;&gt;Modeling skill difficulty of parenting&lt;/h2&gt;

&lt;p&gt;Imagine a difficulty scale on which one can put the skill level of parents and the “hardness” of raising a child successfully.
If the skill level of the parent is above the difficulty of raising the children, then the parent will achieve success.
This obviously is a very reductive view of the skills, but bear with me.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
&lt;img alt=&quot;Skill of first time parents and difficulty of raising first child&quot; src=&quot;/content/images/2021/Oct/parenting-skills-difficulty.png&quot; width=&quot;80%&quot; align=&quot;center&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;Then I propose that the distribution of children and first time parents looks like the figure above.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The median skill level of first time parents has to be higher than the median difficulty of raising a child. Because I am an optimist and humanity doesn’t seem to be dying.&lt;/li&gt;
  &lt;li&gt;There is a hard cut-off of the skill level of first time parents. Even if one spends the entire life just preparing for that, one cannot know &lt;em&gt;everything&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;There is a minimum difficulty of raising a child. This is because we know for sure children don’t survive if left uncared for.&lt;/li&gt;
  &lt;li&gt;There is a long tail of difficulty of raising children, because I am a realist and there are some children who, unfortunately, cannot be “successfully” raised irrespective of the skill level of the parents.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The exact functional form of the curves does not matter much, and I’m taking liberty with the definition of “success” here.&lt;/p&gt;

&lt;p&gt;As a parent, one has a perceived (latent) skill level, denoted by the dashed line. It is slightly above average because almost everyone thinks that they are above average.&lt;/p&gt;

&lt;p&gt;A quantitative measure of anxiety of the parent is the area under the curve where the difficulty of raising a child is greater than the skill level of the parents.&lt;/p&gt;

&lt;h1 id=&quot;advice-1-your-skill-level-is-good&quot;&gt;Advice 1: “Your skill level is good”&lt;/h1&gt;

&lt;p&gt;This advice best comes from close friends who are likely to know you well. It
improves the perceived skill level of the parent, and thereby reduces the
anxiety because the area under the curve beyond the skill level decreases.&lt;/p&gt;

&lt;p&gt;It comes in many forms, including but not limited to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;“You are going to be great parents because …X”&lt;/li&gt;
  &lt;li&gt;“Wow, you sound really prepared! Much more than others …”&lt;/li&gt;
  &lt;li&gt;“You have been raised well by your parents, you’ll be able to raise your kids well too.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p align=&quot;center&quot;&gt;
&lt;img alt=&quot;Advice kind 1: your skill level is good&quot; src=&quot;/content/images/2021/Oct/advice-kind-1.png&quot; width=&quot;80%&quot; align=&quot;center&quot; /&gt;
&lt;/p&gt;

&lt;h1 id=&quot;advice-kind-2-the-baby-raising-game-is-easy&quot;&gt;Advice kind 2: “The baby-raising game is easy”&lt;/h1&gt;

&lt;p&gt;This is the advice which best comes from existing parents. It translates the
perceived difficulty of raising children in general and again helps reduce anxiety because less of the area under the curve lies beyond the perceived skill level of the parent.&lt;/p&gt;

&lt;p&gt;It too comes in many forms, including but not limited to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;“Babies are very sturdy.”&lt;/li&gt;
  &lt;li&gt;“Humanity has been raising kids since forever, you will be fine.”&lt;/li&gt;
  &lt;li&gt;“Babies are really good at asking for help. Loudly. If something is wrong, they’ll let you know.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p align=&quot;center&quot;&gt;
&lt;img alt=&quot;Advice kind 2: the game is easy&quot; src=&quot;/content/images/2021/Oct/advice-kind-2.png&quot; width=&quot;80%&quot; align=&quot;center&quot; /&gt;
&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Different advice works from different folks. However, in general, advice of kind 2 is better than advice of kind 1 because of the simple reasons:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;There is a hard cap on how good a first parent’s skill level can be.&lt;/li&gt;
  &lt;li&gt;(Almost) Everyone thinks they are above average already.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So there is not much space for improving the perceived latent skill level. On the other hand, the difficulty of raising a child has more “give”, and can be reduced much more.&lt;/p&gt;

&lt;p&gt;Anyway, so thinking about this is how I managed my own anxiety.&lt;/p&gt;
</description>
        <pubDate>Fri, 01 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2021/10/01/kinds-of-advice-for-first-time-parents.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2021/10/01/kinds-of-advice-for-first-time-parents.html</guid>
        
        
      </item>
    
      <item>
        <title>Setting development machines quickly</title>
        <description>&lt;p&gt;I’ve noticed that it is becoming increasingly rare for me to working on my local machine, and it will continue being less and less relevant what my local machine is as long as I can connect to a remote server through.&lt;/p&gt;

&lt;h2 id=&quot;a-short-history-of-dev-setups&quot;&gt;A short history of dev setups&lt;/h2&gt;

&lt;p&gt;As a web-developer at Better AG 2012-2015, most of our development happened on dev machines (which were all Macbooks) but then the deployment environment was linux and it was a miracle (and the skill of the dev-ops team) that we were able to seamlessly move from dev to production without issues most of the time.&lt;/p&gt;

&lt;p&gt;However, since I’ve started research in machine learning (2015-now), most of heavy lifting happens on cloud servers.
In case of the Max Planck Institute for Software Systems, these are beefy 48 core + 1.5 Tb RAM machines (called brain servers) or 32 core + 500 Gb RAM machines (called pinky servers).&lt;/p&gt;

&lt;p&gt;However, during my time here, I’ve never had trouble setting up my development environment because of a strategic decision which the dev-ops team here took: that of putting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$HOME&lt;/code&gt; for all users on the NFS.
This meant that whatever (user-local) environment I setup on my local workstation (a 4 CPU, 8 Gb RAM machine), would seamlessly be replicated on the servers.
This was great, I didn’t have to think much about how to install the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modes&lt;/code&gt; or copy over &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;virtualenv&lt;/code&gt;.
This comes at a small cost that the local operations on the workstations are a little slow (as all disk I/O happens over LAN), but because the LAN connection is very good, it is seldom an issue.&lt;/p&gt;

&lt;p&gt;The connection is so good, that &lt;a href=&quot;https://github.com/supriya-pandhre&quot;&gt;Supriya&lt;/a&gt;, an intern with &lt;a href=&quot;https://learning.mpi-sws.org&quot;&gt;our group&lt;/a&gt;, took this a step further and ran &lt;a href=&quot;https://www.jetbrains.com/pycharm/&quot;&gt;PyCharm&lt;/a&gt; with X-forwarding on the brain servers themselves, without any noticeable issues.&lt;/p&gt;

&lt;h2 id=&quot;end-of-devnnocence&quot;&gt;End of Devnnocence?&lt;/h2&gt;

&lt;p&gt;However, this solution of sharing the home folder across machines is not a feasible solution and it still ends up requiring a lot from the local machine.&lt;/p&gt;

&lt;p&gt;This problem of quickly setting up dev environments becomes relevant when dev machines change quickly. I’ve started working on a web-app which I intend to host on a remote machine finally. Since the app would require a DB, I tried setting up docker on my MacBook, but I ran into some issues and my MacBook slowed to a near crawl with MongoDB and Redis running in their respective containers. Hence, I decided to spin up a remote server and to move my dev setup there.&lt;/p&gt;

&lt;p&gt;I remember &lt;a href=&quot;https://twitter.com/werehamster&quot;&gt;werehamster&lt;/a&gt; using &lt;a href=&quot;https://github.com/boxen&quot;&gt;Boxen&lt;/a&gt; to setup his MacBooks, and I wanted something similar but for servers I spin up on &lt;a href=&quot;https://vultr.com&quot;&gt;Vultr&lt;/a&gt;, &lt;a href=&quot;https://digitalocean.com&quot;&gt;DigitalOcean&lt;/a&gt;, &lt;a href=&quot;https://aws.com&quot;&gt;AWS&lt;/a&gt;, or &lt;a href=&quot;https://cloud.google.com&quot;&gt;Google cloud&lt;/a&gt;.
Hence, I did not want to use a platform specific solution (like AWS images, or start-up scripts which assume a shell/OS).
I remembered &lt;a href=&quot;https://puppet.com/&quot;&gt;puppet&lt;/a&gt; being a pain to work with because it required all remote machines to run a puppet daemon.
Then I remembered &lt;a href=&quot;https://www.ansible.com&quot;&gt;ansible&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, after a few hours as I spun up bigger and bigger machines to be able to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yarn build&lt;/code&gt; my little web-app, I also tweaked and perfected my &lt;em&gt;ansible-playbook&lt;/em&gt; and put it on GitHub for good measure: &lt;span class=&quot;devicons devicons-github_badge&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/musically-ut/ansible-setup-dev&quot;&gt;musically-ut/ansible-setup-dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a relatively simple script which does the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create a user (default: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;musicallyut&lt;/code&gt;) on the remote machine and ensure that the user can &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo&lt;/code&gt; without any passwords.&lt;/li&gt;
  &lt;li&gt;Copy over the ssh key to allow me to log into the remote machine easily (no access via passwords).&lt;/li&gt;
  &lt;li&gt;Install various packages on the remote machine: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;htop&lt;/code&gt;, etc.&lt;/li&gt;
  &lt;li&gt;Copy over all the dotfiles to the remote machine, and setup &lt;a href=&quot;https://github.com/rupa/z&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;z&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Install the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt; plugins using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim-plug&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Install &lt;span class=&quot;devicons devicons-github_badge&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/powerline/fonts&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;powerline-fonts&lt;/code&gt;&lt;/a&gt; on the machine.&lt;/li&gt;
  &lt;li&gt;Set up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nvm&lt;/code&gt; and install Node version 12.&lt;/li&gt;
  &lt;li&gt;Download &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;miniconda3&lt;/code&gt; and extract it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I deliberately avoided using &lt;a href=&quot;https://galaxy.ansible.com/&quot;&gt;ansible-galaxy&lt;/a&gt; because I wanted to control each command which is run on the remote machine and do it just as if I would have run it. I do not want accidental overwriting of paths or configs, and I did not need anything particularly complicated anyway.&lt;/p&gt;

&lt;p&gt;So far, I am quite happy with the setup. The playbook is OS and platform agnostic, and is easy to tweak.&lt;/p&gt;

&lt;h2 id=&quot;dockerize-everything&quot;&gt;Dockerize everything?&lt;/h2&gt;

&lt;p&gt;An alternate solution which I have not tried yet is to go &lt;em&gt;full container&lt;/em&gt;, i.e., installing only docker on the remote machine and then creating a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DOCKERFILE&lt;/code&gt; which exposed ports. However, I’ve not seen that approach work very well yet. If you do use that approach, &lt;a href=&quot;https://twitter.com/musically_ut&quot;&gt;do let me know&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2019/06/16/ansible-setup-dev.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2019/06/16/ansible-setup-dev.html</guid>
        
        
      </item>
    
      <item>
        <title>Health of conversations</title>
        <description>&lt;p&gt;In a recent &lt;a href=&quot;https://youtu.be/lOvbEmufGwY?t=1967&quot;&gt;conversation with Sam Harris&lt;/a&gt;, Jack Dorsey said that they are trying to measure the health of conversations using the following metrics:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Shared attention:&lt;/strong&gt; What percentage of the conversation is “about” the same thing versus about dispersed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Shared reality:&lt;/strong&gt; What percentage of the conversation is sharing the same “facts” (irrespective of whether they agree with them or not)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Receptivity:&lt;/strong&gt; How ‘toxic’ is the conversation right now? How likely are people to &lt;em&gt;walk away&lt;/em&gt; from the conversation?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Variety of perspective:&lt;/strong&gt; How diverse are the ideas being discussed?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these look like interesting problems to study, I have worked on the &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=3290965&quot;&gt;last problem&lt;/a&gt; myself.&lt;/p&gt;
</description>
        <pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2019/02/26/conversation-health.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2019/02/26/conversation-health.html</guid>
        
        
      </item>
    
      <item>
        <title>Case for downvotes</title>
        <description>&lt;p&gt;I think we need to have downvote buttons wherever we have user generated content on the internet.&lt;/p&gt;

&lt;p&gt;Showing their disagreement is the &lt;a href=&quot;https://blog.disqus.com/here-are-the-reasons-why-people-downvote-comments&quot;&gt;leading reason behind downvotes&lt;/a&gt;, irrespective of how downvotes are advertised on most websites.
Hence, &lt;em&gt;downvotes&lt;/em&gt; allow users to show their disagreement with others while expending very low amount of effort, unlike writing a comment/reply.&lt;/p&gt;

&lt;h1 id=&quot;negative-reinforcement&quot;&gt;Negative reinforcement&lt;/h1&gt;

&lt;p&gt;It is commonly understood that excessive downvoting of answers/questions by new-comers makes websites less welcoming for them and it is true to some extent on sites like StackOverflow.&lt;/p&gt;

&lt;p&gt;However, having downvotes can give signals to the same new-comers that their &lt;em&gt;answers&lt;/em&gt; are not &lt;em&gt;quite&lt;/em&gt; correct.
This negative reinforcement can play a crucial role in the initial stages of expertise; its absence can lead to the learning curve &lt;a href=&quot;https://www.sciencedirect.com/science/article/abs/pii/S0022249610000179&quot;&gt;flattening out&lt;/a&gt; for the non-experts.
We show such an effect on StackOverflow, i.e., &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=3018685&quot;&gt;users with low level of expertise do not gain much from the website&lt;/a&gt;.
One of the reasons we think it happens is because even though downvotes are allowed on StackOverflow, they are heavily discouraged (they carry a -2 reputation cost) precisely because of this reason.&lt;/p&gt;

&lt;h1 id=&quot;diversity-in-opinions&quot;&gt;Diversity in opinions&lt;/h1&gt;

&lt;p&gt;Only Likes or Thumbs Up will lead people to discover their niche crowd, but it will not be possible to differentiate disagreement with indifference. 
For example, an opinion like “Earth is Flat” posted on Facebook (which lacks a downvote button) will likely result in only an eye-roll by people who would consider debating the issue futile, but still may get several hundred likes from like-minded people.
This would lead the poster to (incorrectly) believe that hundreds of people agreed with him while nobody disagrees.&lt;/p&gt;

&lt;p&gt;From a more computational point of view, by looking at up and down votes, we can actually &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=3290965&quot;&gt;uncover the complexity of opinions and diversity in conversations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the reasons against having downvotes seems to be that it promotes toxicity on platforms by allowing &lt;a href=&quot;https://en.wikipedia.org/wiki/Vote_brigading&quot;&gt;vote brigading&lt;/a&gt;. This can also be used as a means of censorship.&lt;/p&gt;

&lt;p&gt;While there are isolated incidents of such brigading happening, it is unclear whether it effects &lt;em&gt;enough&lt;/em&gt; user content to be an issue. 
If it does become a significant problem, &lt;a href=&quot;https://www.mpi-sws.org/tr/2016-004.pdf&quot;&gt;there are methods&lt;/a&gt; which can be used to identify and weed out the effects.&lt;/p&gt;

</description>
        <pubDate>Sun, 24 Feb 2019 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2019/02/24/case-for-downvotes.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2019/02/24/case-for-downvotes.html</guid>
        
        
      </item>
    
      <item>
        <title>First commit to CPython: What the timedelta was that?</title>
        <description>&lt;p&gt;So I recently got my first commit merged into &lt;span class=&quot;devicons devicons-github_badge&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/python/cpython&quot;&gt;python/CPython&lt;/a&gt;, the canonical Python implementation. If all goes well, then it will very likely be included in Python 3.7 which is due to be released in a few months at the time of writing.&lt;/p&gt;

&lt;p&gt;This is not the &lt;a href=&quot;https://github.com/search?utf8=%E2%9C%93&amp;amp;q=is%3Apr+author%3Amusically-ut&amp;amp;type=&quot;&gt;first time I’ve contributed&lt;/a&gt; to an OSS project. However, I think this is by far the most impactful, albeit small, contribution I’ve made in terms of people who are likely to use it.&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;

&lt;p&gt;Let’s say you typed the following on your favourite Python REPL:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;datetime&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;D&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1390953543.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1121871596&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Output: datetime.timedelta(3114, 28747, 100000)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Can you guess what the three numbers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3114&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;28747&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100000&lt;/code&gt; stand for?&lt;/p&gt;

&lt;p&gt;Maybe you know this because you’ve used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;datetime.timedelta&lt;/code&gt; so often that the meaning of the numbers is obvious to you.
However, it is more likely that you, &lt;a href=&quot;https://marc.info/?l=python-dev&amp;amp;m=145066335824146&amp;amp;w=2&quot;&gt;like Guido&lt;/a&gt;, will make a mistake.&lt;/p&gt;

&lt;p&gt;The proposal was to change the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repr&lt;/code&gt;esentation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;timedelta&lt;/code&gt;s to the following:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timedelta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3114&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seconds&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;28747&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;microseconds&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This is what my &lt;a href=&quot;https://github.com/python/cpython/pull/1493&quot;&gt;pull request&lt;/a&gt; changed.&lt;/p&gt;

&lt;p&gt;Sounds fairly simple, right?&lt;/p&gt;

&lt;h2 id=&quot;technical-issues&quot;&gt;Technical issues&lt;/h2&gt;

&lt;p&gt;The first issue: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;timedelta.repr&lt;/code&gt; is explicitly described &lt;a href=&quot;https://docs.python.org/3/library/datetime.html#timedelta-objects&quot;&gt;in the documentation&lt;/a&gt; in some detail:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;nb&quot;&gt;repr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Returns&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timedelta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]]),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;D&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;negative&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;negative&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not a problem, will update the documentation along the way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The next problem was that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;datetime&lt;/code&gt; module is implemented both as a Python module (the pure implementation) as well as a C module (the fast implementation).
I was a little puzzled by this and Victor &lt;span class=&quot;devicons devicons-github_badge&quot;&gt;&lt;/span&gt; &lt;a href=&quot;https://github.com/haypo&quot;&gt;haypo&lt;/a&gt; on the core-mentorship was very helpful in explaining the reasoning behind this (if you are curious, I’d encourage you to look at &lt;a href=&quot;https://www.python.org/dev/peps/pep-0399/&quot;&gt;PEP 399&lt;/a&gt;).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not a problem, will fix the implementation at both places.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During this process, I discovered that the Python implementation was &lt;a href=&quot;https://github.com/python/cpython/pull/1493#discussion_r125096967&quot;&gt;not being tested at all&lt;/a&gt; because of some gymnastics in creation of the test cases in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_datetime.py&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not a problem, will fix that first &lt;a href=&quot;https://github.com/python/cpython/pull/2530&quot;&gt;in a separate PR&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That PR got merged in on July 2. :hurray: Now to rebase the original PR on …. wait.
Something weird happened. The tests started running alright, but they starting failing on the &lt;a href=&quot;http://buildbot.python.org/all/waterfall&quot;&gt;buildbots&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Ah, the tests on the Python version were enabled which took a whopping 20+ minutes to run on the buildbot machines and timed out, causing failures.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not a problem, will debug it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Found the issue: some tests were running three times and &lt;a href=&quot;https://github.com/serhiy-storchaka&quot;&gt;Serhiy&lt;/a&gt; de-duplicated the tests &lt;a href=&quot;https://github.com/python/cpython/pull/2534&quot;&gt;in a separate PR&lt;/a&gt;. That reduced the run-time significantly, but the tests still timed out.&lt;/p&gt;

&lt;p&gt;Oh, well, tests are gonna test and there’s nothing you can do …&lt;/p&gt;

&lt;p&gt;However, a red buildbot is a problem and Victor &lt;a href=&quot;https://github.com/python/cpython/pull/2588&quot;&gt;actually rolled back the PR&lt;/a&gt; to make the buildbots green again as a part of a new policy: revert first, ask questions later. Incidentally, I was the first person to whose Pull Request this policy was applied.&lt;/p&gt;

&lt;p&gt;Just like that, my first contribution to Python was reverted in less than 72 hours. :sad-trombone:&lt;/p&gt;

&lt;p&gt;As a sidenote, Victor told me on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#python-dev&lt;/code&gt; IRC channel that breaking buildbots was an initiation step for core-developers and it was getting rather difficult to break them with tests succeeding locally. So I’ve got that going for me, which is nice.&lt;/p&gt;

&lt;p&gt;After about a fortnight, a more permanent fix was decided upon: &lt;a href=&quot;https://github.com/python/cpython/pull/2775&quot;&gt;running only a subset of tests on the buildbots&lt;/a&gt;.
The original PR hadn’t remained static during this time either, there were &lt;a href=&quot;https://github.com/python/cpython/pull/1493#pullrequestreview-46615195&quot;&gt;memory leaks&lt;/a&gt;!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not a problem, will plumb them like me-a-Mario!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had to get a little more used to the C-API of Python before I could write code with some confidence. The inbuilt Python reference checker proved to be indispensable.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Finally, have to convince people that it is a good idea.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This turned out to be the &lt;a href=&quot;https://bugs.python.org/issue30302&quot;&gt;trickiest part&lt;/a&gt;. Reasons some people were against it:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It increases the size of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repr&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Could do with more features (like factoring out the negative sign).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Err … stalemate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally, Victor made a &lt;a href=&quot;https://bugs.python.org/msg299152&quot;&gt;judgement call&lt;/a&gt; and merged the changeset in! :hurray: again!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;But wait, there’s more!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, things were not quite over yet. During the re-basing of the branch over the one with the fix for the tests, I accidentally left an artifact in, which had to be cleared up in &lt;a href=&quot;https://github.com/python/cpython/pull/2891&quot;&gt;yet another PR&lt;/a&gt;. Then I also wrote a &lt;a href=&quot;https://github.com/python/cpython/pull/2929&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WhatsNew&lt;/code&gt; and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Porting to Python 3.7&lt;/code&gt; entry&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, a few months after the PR, I noticed that there were still instances in the documentation with the old output and so I sheepishly made &lt;a href=&quot;https://github.com/python/cpython/pull/3687&quot;&gt;another PR&lt;/a&gt; to fix those.&lt;/p&gt;

&lt;p&gt;⋈&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;So what did I learn from here?&lt;/p&gt;

&lt;p&gt;I’ve been interested in contributing to OSS ever since I was in college (I still remember my first patch to Octave). It was messy to send patches around and merging fixes in. 
The contribution process has been made much simpler, thanks to the presence of GitHub. 
For this PR, the entire process lasted for more than 2 months and was rather involved (what with the bug-within-the-feature and the rollbacks and the judgement calls). 
It would have been much messier if it wasn’t for GitHub’s familiar UI.&lt;/p&gt;

&lt;p&gt;However, I came out happy on the other side. The community was very very helpful and not once did the issue of me being a first time contributor come up. I too was excited about the process and ended up pestering people a tad bit too much, I think.&lt;/p&gt;

&lt;p&gt;In the end, my take-away was that I perhaps should have led with changes in documentation instead of by changing code (the inline documentation for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;datetime&lt;/code&gt; on the REPL is still pretty terrible). That would probably have been easier to get through rather than getting people to agree on something which &lt;em&gt;may&lt;/em&gt; cause backwards compatibility issues.&lt;/p&gt;

&lt;p&gt;But as they say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Doesn’t matter, got merged.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Thu, 07 Sep 2017 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2017/09/07/my-first-commit-in-python.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2017/09/07/my-first-commit-in-python.html</guid>
        
        
      </item>
    
      <item>
        <title>Technology Readiness Level (TRL)</title>
        <description>&lt;p&gt;From the &lt;a href=&quot;http://ec.europa.eu/research/participants/data/ref/h2020/other/wp/2016-2017/annexes/h2020-wp1617-annex-ga_en.pdf&quot;&gt;Horizon 2020 - Work Programme 2016-17: General Annex&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Where a topic description refers to a TRL, the following definitions apply, unless otherwise specified:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 1&lt;/code&gt; – basic principles observed&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 2&lt;/code&gt; – technology concept formulated&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 3&lt;/code&gt; – experimental proof of concept&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 4&lt;/code&gt; – technology validated in lab&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 5&lt;/code&gt; – technology validated in relevant environment (industrially relevant environment in the case of key enabling technologies)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 6&lt;/code&gt; – technology demonstrated in relevant environment (industrially relevant environment in the case of key enabling technologies)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 7&lt;/code&gt; – system prototype demonstration in operational environment&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 8&lt;/code&gt; – system complete and qualified&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRL 9&lt;/code&gt; – actual system proven in operational environment (competitive manufacturing in the case of key enabling technologies; or in space)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Found from &lt;a href=&quot;https://academia.stackexchange.com/questions/94924/what-good-is-engineering-research-with-no-practical-relevance&quot;&gt;an answer about pointless academic research on StackExchange network&lt;/a&gt;. 
I agree with the answer that academic research should bring an idea from TRL 1 to TRL 4-6. 
Then startups should take the idea from TRL 4-5 to TRL 7-8.
Competition should pop up at about TRL 9.&lt;/p&gt;
</description>
        <pubDate>Sun, 27 Aug 2017 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2017/08/27/trl.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2017/08/27/trl.html</guid>
        
        
      </item>
    
      <item>
        <title>An optimistic view of the arguments on the Internet</title>
        <description>&lt;h1 id=&quot;arguments-on-the-internet&quot;&gt;Arguments on the Internet&lt;/h1&gt;

&lt;p&gt;It is usually a foregone conclusion that arguments on the Internet head nowhere and only make matters worse.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://allthingsgraphed.com/2014/10/09/visualizing-political-polarization/&quot;&gt;&lt;img src=&quot;/content/images/2017/Jul/left-right.png&quot; alt=&quot;Left-Right divide in the blogosphere&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is no dearth of evidence of this fact:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ramb.ethz.ch/CDstore/www2005-ws/workshop/wf10/AdamicGlanceBlogWWW.pdf&quot;&gt;Blog-map (the picture shown above) is divided between left-right&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rE3j_RHkqJc&quot;&gt;This Video will make you angry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Echo_chamber_(media)&quot;&gt;Echo chambers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recently, in &lt;a href=&quot;http://www.wsdm-conference.org/2017/&quot;&gt;WSDM 2017&lt;/a&gt;, best student paper award went to &lt;a href=&quot;https://gvrkiran.github.io/balancingViews/&quot;&gt;a paper&lt;/a&gt; which proposed a way of bringing the warring groups a little together.&lt;/p&gt;

&lt;p&gt;Despite this, I still am optimistic about the future.&lt;/p&gt;

&lt;h1 id=&quot;light-at-the-end-of-the-tunnel&quot;&gt;Light at the end of the tunnel&lt;/h1&gt;

&lt;p&gt;My hypothesis is based on an observation which is surprising enough to have an &lt;a href=&quot;https://xkcd.com/1414/&quot;&gt;xkcd comics&lt;/a&gt; dedicated to it.&lt;/p&gt;

&lt;p&gt;Quoting from it:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagine kids start playing catch &lt;em&gt;all the time&lt;/em&gt;. Everywhere they go, they throw balls back and forth, toss them in the air, and hurl them at trees and signs - nearly every waking hour of their lives. 
Do you think their generation will suck at baseball because they learned sloppy skills?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Think about the question for a moment.&lt;/p&gt;

&lt;p&gt;The key idea in the comic is that more exposure to English language, even if it is not perfect (&lt;em&gt;e.g.&lt;/em&gt; texting, SMSes, etc.), is going to make a positive difference for the people using English at the &lt;em&gt;pro&lt;/em&gt; level (&lt;em&gt;i.e.&lt;/em&gt;, in this case the students writing the standardized exams).&lt;/p&gt;

&lt;p&gt;The same way, I expect that as people become more aware and start to have an opinion rather than living in a small community where they do not even have to think about certain issues, the better the &lt;em&gt;pro&lt;/em&gt; opinion-havers of the generations (&lt;em&gt;read:&lt;/em&gt; the politicians) will become.&lt;/p&gt;

&lt;h1 id=&quot;caveat&quot;&gt;Caveat&lt;/h1&gt;

&lt;p&gt;The danger, of course, is that we may not start improving quickly enough: perhaps the &lt;em&gt;short-term&lt;/em&gt; escalation would be sufficient to put us beyond the threshold where we end up in a &lt;em&gt;Game-over&lt;/em&gt; scenario.&lt;/p&gt;

&lt;p&gt;There are several ways of getting to such a scenario:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Nuclear warfare&lt;/li&gt;
  &lt;li&gt;BioHazard weapons&lt;/li&gt;
  &lt;li&gt;Global-scale calamities like &lt;a href=&quot;https://en.wikipedia.org/wiki/Clathrate_gun_hypothesis&quot;&gt;Clathrate Gun Hypothesis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, I started by saying that I am optimistic about the future. Hence, I sincerely hope that we start understanding the &lt;em&gt;other&lt;/em&gt; side before things get that bad. And maybe, just maybe, &lt;a href=&quot;http://onlinelibrary.wiley.com/doi/10.1111/j.1460-2466.2011.01616.x/abstract&quot;&gt;the problem is not that bad&lt;/a&gt;?&lt;/p&gt;
</description>
        <pubDate>Tue, 25 Apr 2017 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2017/04/25/internet-arguments.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2017/04/25/internet-arguments.html</guid>
        
        
      </item>
    
      <item>
        <title>Debugging makes better scientists</title>
        <description>&lt;h2 id=&quot;what-do-scientists-do&quot;&gt;What do scientists do&lt;/h2&gt;

&lt;p&gt;From &lt;a href=&quot;http://en.wikipedia.org/wiki/Scientific_method#Elements_of_the_scientific_method&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Four essential elements of the scientific method are iterations, recursions, interleavings, or orderings of the following:&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;Characterizations (observations, definitions, and measurements of the subject of inquiry)&lt;/li&gt;
    &lt;li&gt;Hypotheses (theoretical, hypothetical explanations of observations and measurements of the subject)&lt;/li&gt;
    &lt;li&gt;Predictions (reasoning including logical deduction from the hypothesis or theory)&lt;/li&gt;
    &lt;li&gt;Experiments (tests of all of the above)&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Scientists do this about reality.&lt;/p&gt;

&lt;h2 id=&quot;what-is-debugging&quot;&gt;What is debugging&lt;/h2&gt;

&lt;p&gt;From my personal experience and &lt;a href=&quot;http://en.wikipedia.org/wiki/Debugging#Typical_debugging_process&quot;&gt;Wikipedia&lt;/a&gt;, while debugging your own program:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Reproduce the problem (&lt;em&gt;observe&lt;/em&gt; it)&lt;/li&gt;
  &lt;li&gt;Distill the minimal input (&lt;em&gt;hypothesize&lt;/em&gt; and eliminate extragenous factors)&lt;/li&gt;
  &lt;li&gt;Track down the origin (&lt;em&gt;predict&lt;/em&gt; results of the fix)&lt;/li&gt;
  &lt;li&gt;Test to see if the fix works (&lt;em&gt;experiment&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Program is like a &lt;em&gt;complete universe&lt;/em&gt;. That universe becomes &lt;em&gt;unknown&lt;/em&gt; if it is someone else’s code.&lt;/p&gt;

&lt;p&gt;This is &lt;em&gt;exactly&lt;/em&gt; what scientists are up to!&lt;/p&gt;

&lt;h2 id=&quot;programmers-and-scientists&quot;&gt;Programmers and scientists&lt;/h2&gt;

&lt;p&gt;I have met programmers, like &lt;a href=&quot;https://github.com/lemmih&quot;&gt;lemmih&lt;/a&gt;, who can just &lt;em&gt;guess&lt;/em&gt; how a program works by thinking how he would have designed it. And, gosh, is he usually right.&lt;/p&gt;

&lt;p&gt;I wonder if that is how good scientists do it.&lt;/p&gt;

&lt;p&gt;I have this inkling that this analogy goes deeper still. If you’ve ever taken part in a programming contest, then you know that you have to be very careful about what test cases you try out before you submit your program lest you should incur a penalty for an incorrect submission. I think that sort of testing also makes you a better rationalist in general by forcing you to think a bit more about the &lt;a href=&quot;http://lesswrong.com/lw/iw/positive_bias_look_into_the_dark/&quot;&gt;2,4,6 problem&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 17 Apr 2017 00:00:00 +0000</pubDate>
        <link>https://blog.musicallyut.in/2017/04/17/debugging-makes-better-scientists.html</link>
        <guid isPermaLink="true">https://blog.musicallyut.in/2017/04/17/debugging-makes-better-scientists.html</guid>
        
        
      </item>
    
  </channel>
</rss>
