<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
  xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sridhar Raj Sampath Kumar</title>
    <link>https://sridhar.co/</link>
    <description>Home for Sridhar's thoughts, book notes, code on the Internet.</description>
    <pubDate>Tue, 13 Dec 2022 08:12:58 GMT</pubDate>
    <image>
      <url>https://sridhar.co/avatar.png</url>
      <title>Sridhar Raj Sampath Kumar</title>
      <link>https://sridhar.co</link>
    </image>
    <item>
      <title>Year 2025 in review</title>
      <description>
        <![CDATA[<section><p>
        A Year in Review should be a reflection of the decisions we’ve taken, not about the outcomes that
        materialised. In this post, I'll try to remind my future self of what I did, but unlike previous years, there's a lot less public
        work (side projects, blog posts), a lot less book reading and generally, I think, a lot less.
    </p></section><section><h2>Work</h2><p>

        2025 has been work, work and work alone. At work, to collaborate with teams in different time zones, my day
        started with SGT and ended with PST. Being available across three time zones left me little to no energy to
        work on
        things outside of work. I was able to write a couple of posts, but that was it.
    </p><ul><li>
            I enabled <a href="/weekly-updates/enabling-dropbox-on-kobo">Dropbox on Kobo eReader</a> to read books from
            Dropbox.
        </li><li>
            I published <a href="/books/range">my notes</a> from the Range book.
        </li></ul><p>I read the following books.</p><ol><li><strong>
                University of Berkshire Hathaway</strong>: 30 Years of Lessons Learned from Warren Buffett & Charlie
            Munger at the Annual Shareholders Meeting by Daniel Pecaut & Corey Wrenn
        </li><li><strong>Building an Effective Dev Portfolio</strong> by Joshua Comeau</li><li><strong>Software Engineering - The Soft Parts</strong> by Addy Osmani </li><li><strong>Excellent Advice for Living</strong>: Wisdom I Wish I'd Known Earlier by Kevin Kelly</li><li><strong>Same as Ever</strong>: A Guide to What Never Changes by Morgan Housel</li><li><strong>The Art of Spending Money</strong>: Simple Choices for a Richer Life by Morgan Housel</li><li><strong>The Art of Execution</strong>: How the world's best investors get it wrong and still make millions
            by Lee Freeman-Shor</li><li><strong>Common Stocks and Uncommon Profits and Other Writings</strong> by Philip A. Fisher</li><li><strong>Peaks and Valleys</strong>: Making Good And Bad Times Work For You - At Work And In Life by Spencer
            Johnson</li><li><strong>One Up On Wall Street</strong>: How to Use What You Already Know to Make Money in the Market by
            Peter Lynch</li><li><strong>Getting Things Done</strong> by David Allen</li></ol><p>I donated to Kaniyam Foundation, Free Software Foundation, Wikipedia, Let's Encrypt, and Mozilla
        Foundation.</p></section><section id="family"><h2 class="hyperlinked-header"><a href="#family">Family</a></h2><p>
        For the whole year, it was challenging to balance work and family. I learnt the hard way that you only
        have a finite amount of energy every day. You need to manage your energy levels before you manage your time. If you've
        time but no energy, you'll be grumpy, and your kids will sense it. 
        So, the solution was to prioritise doing NOTHING that puts me on a guilt trip during my
        ME time every day. So, I had to stop all the usual things that I do every year, like side projects, reading books, to
        conserve energy and to be in a good mood all the time. It stayed the same way until December.
    </p><p>
        The biggest personal highlight of the year was my sabbatical.
        As a reward for completing 5 years of service, my company offered a 4 weeks of paid sabbatical.
        Ever since my school days, I had wanted to stay home during Margazhi and sleep well, so I timed my sabbatical
        in December to align my children’s school holidays, and to plan our family vacation better.
    </p><p>
        To avoid any regrets, I split the time evenly. Two weeks for my family and two weeks
        for myself. During the family time, we travelled to Kerala, Pudhukottai and two other places before the year end
        rush. For my personal time, I want to learn a new skill. So, I read about 8 books on
        two topics - stock picking and being organised. Exploring ways to get more things done with less time.
    </p><p>
        Presence > productivity: For the 2nd time in a row, I'm publishing year in review during Pongal holiday week,
        intentionally stepping away from my usual year-end ritual.
    </p><p>
        Looking back, the most important lesson of 2025 was fluidity: using energy as my compass, letting go without
        guilt, and
        adapting without forcing balance. Some years are about acceleration; others are about alignment. I think our
        2025 was about
        alignment.
    </p><p>
        Previously
        <a href="/year-2024-in-review">2024</a>,
        <a href="/year-2023-in-review">2023</a>,
        <a href="/year-2022-in-review">2022</a>, <a href="/year-2021-in-review">2021</a>, <a
            href="/year-2020-in-review">2020</a>,
        <a href="/year-2019-in-review">2019</a>, <a href="/year-2018-in-review">2018</a>, <a
            href="/a-year-that-was-2017">2017</a>,
        <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2025-in-review</link>
      <guid>https://sridhar.co/year-2025-in-review</guid>
      <pubDate>Thu, 15 Jan 2026 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Range by David Epstein</title>
      <description>
        <![CDATA[<div class='image-container'><img alt="Range by David Epstein" class="responsive" height="300" width="199"
        src="/images/range-david-epstein.jpg" /></div><section><p>
        There are two types of domains for building your careers.
    </p><ul><li>Kind domains</li><li>Wicked domains </li></ul><table class="table table-hover"><thead><tr><th>Kind domain </th><th>Wicked domain </th></tr></thead><tbody><tr><td>“Kind” learning environments are domains in which instinctive pattern recognition is rewarded. </td><td>“Wicked” domains have complex, unclear or incomplete rules, patterns may not be recognizable </td></tr><tr><td>Feedback cycle is faster aiding the learning process </td><td>feedback is often delayed, inaccurate, or both. </td></tr><tr><td>Experience might led to expertise. </td><td>There is no guarantee whether experience will improve outcomes.
                </td></tr><tr><td>narrow specialization + expertise be helpful to solve problem </td><td>you need a range of tools and the ability to integrate ideas across domains.
                </td></tr><tr><td>Better suited for specialist </td><td>Better suited for Generalists </td></tr><tr><td>eg: golf and chess </td><td>eg: politics, entrepreneurship, research and finacial analysts. </td></tr></tbody></table></section><section><ul><li><strong>Specialists</strong> is a person who focuses narrow field. Starting early is often necessary to
            become a specialist since
            the underlying rules don't change.

        </li><li><strong>Generalists</strong> is a person who explorers many fields before committing to one. The biggest
            advantage he has is
            cross pollinates of ideas from other fields.
        </li><li>
            Based on the domain, you
            might either need to be specialist or generalist. The world needs both specialists and generalists to solve
            different kind of problems.
        </li><li>
            Our work and life preferences aren't fixed as we assume. We learn who we are through living, not beforehand.
        </li><li>
            As Moravec paradox suggest, Machines and humans have opposite strengthen and weakness. If we can codifiy it,
            machines can do it better than us. It is the ability to integrate broadly across domains differentiates us.
            In open ended real world problems, humans have a huge advantage over AI.
        </li><li><strong>
                The best way to choose a field for building career, is through "sampling period". i.e., you try
                different
                things in and around your field of interest before narrowing down to one.</strong><br><strong>eg:</strong> Roger federer played a varied
            of sports before choosing to go professional on tennis.
        </li><li>
            Experiment to discover your possible selves. A short term, trial-and-error approach may be better for career
            success than following a fixed, long-term plan.
        </li><li>
            Exploration and switching are necessary to find a good match. Don’t be afraid to quit. Quitting isn’t an
            admission of failure. Quitting is an art that can learnt only by practice. Persistence for the sake of
            persistence is unwise.
        </li><li>
            Don't commit to anything in the future, by looking at the current options. <mark> Choose those that will
                give you
                the most promising range of options <em>afterwards</em></mark>. Instead of working back from a goal,
            work from a promising
            situation.
        </li><li><mark>
                Finding a field that suits you through test-and-find, and working hard will set you apart. From outside
                it
                might appear to be grit, but in reality, it is <em>your strengthens aligned with the challenges</em>. Late
                specialization
                > early head start.</mark></li><li>
            Don’t feel behind. Everyone progresses at a different rate. Compare yourself to your yesterday's version.
        </li><li>
            Without knowing the domain which you operate in, general advice such as start early, narrow your focus and
            specialize soon are unhelpful.
        </li></ul></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/range</link>
      <guid>https://sridhar.co/books/range</guid>
      <pubDate>Fri, 08 Aug 2025 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2024 in review</title>
      <description>
        <![CDATA[<section><p>
        The easiest way for scaling is to double down on what's already working. That's exactly what I did in 2024. I
        extended my weekly work strategy to health and finance. 
    </p></section><section><h2>Work</h2><p>
        Building on last year's foundation for my weekly system, I consolidated all my bookmarks from external services like Twitter and Mastodon into Pinboard. Additionally, I set up an RSS reader to manage individual blogs.
    </p><ul><li>I've been reading <strong>Designing Data-Intensive Applications</strong> since last year. The book is packed with at least two semesters' worth of computer science material, so I'm taking time to absorb it well.</li><li>I created <a href="https://github.com/sridharrajs/transcribe" rel="nofollow">transcribe</a>, a Python utility that uses Amazon transcribe service to extract and format transcripts from an audio file.</li><li>Doom emacs experimentation didn't go well. I configured <a href="/weekly-updates/20-year-software-vimrc-syntax-highlighting">.vimrc</a>
            for File Opening, Syntax, and Search Highlighting, and use <a href="https://github.com/VSCodeVim/Vim" rel="nofollow">vscodevim.vim</a> 
            which supports <code>.vimrc</code> configurations within VS Code.</li><li><a rel="nofollow" href="https://www.instagram.com/p/DBUUgF9MpSM/">After Attending</a> React conference 2024, I'm
            working on creating a mobile app as a side project using React native in Typescript. </li></ul><p>
        Finally, the weekly experiment <a href="/weekly-updates/weeklies-season-2">wrapped up successfully</a>, and my blog is back to featuring a <a href="/now">now</a> page.
    </p><p>I read the following books.</p><ol><li><strong>Impact Players</strong>: How to Take the Lead, Play Bigger, and Multiply Your Impact by Liz Wiseman
            - <a href="/books/impact-players">My notes</a></li><li><strong>The Daily Dad</strong>: 366 Meditations on Parenting, Love and Raising Great Kids by Ryan Holiday -
            <a href="/books/daily-dad">Quotes</a>, <a href="https://www.instagram.com/p/DAWRu2YSOwj/"
                rel="nofollow">highlights</a></li><li><strong>The Intelligent Investor</strong> by Benjamin Graham - <a href="/books/intelligent-investor">My
                notes</a></li><li><strong>How to Talk so Kids Will Listen and Listen so Kids Will Talk</strong> by Adele Faber</li></ol><p>
        This year I donated to the 
        <a href="https://kaniyam.com/foundation/" rel="nofollow">Kaniyam Foundation</a>, Free Software Foundation, Wikipedia, Mozilla, and two YouTube channels.
    </p></section><section><h2>Health</h2><p>
        I see a pattern emerging from my learning hours. I'm more focused in the early morning or late at night when the kids
        are asleep. Since there is nothing I need to attend to, getting into the flow comes naturally, but ending it after an
        hour is proving to be a challenge. But <strong> this is necessary to ensure I'm following all my curiosity without
            burning out.</strong></p><p>
        Instead of obsessing over working out every day, I've adopted the weekly approach. I lift weights once a week, and for the rest
        of the week, I do basics like doing stretches every day, taking afternoon walks post lunch every day, taking stairs
        whenever I can, and evening cycling with the kids.
    </p></section><section><h2>Family</h2><p>
        To apply the weekly strategy over my finances, I started paying bills at the end of each week instead of waiting until
        the month end. This led to three interesting outcomes: (1) it tested
        my emergency fund, as I had to pay bills from it before I received my salary (2) it gave me a clear idea of my
        current burn rate (3) and how much
        lifestyle creep have I picked up recently.
    </p><p>
        A lot happened this year. After 6 years of career break, Lakshmi joined Amazon. Aaradhana started school, and 
        Dhruvan has started getting homeworks as he is moving up grades. He is learning க ங ச ஞ, antonyms-synonyms, singular-plural, articles,
        addition-subtraction and multiplication tables. Wrapping Dhruvan's notebooks in brown covers reminded me of my school days. 
        Lakshmi is taking care of academics.
    </p><p>
        Our household loves reading. Both my paternal and maternal grandfathers started their day with a newspaper, and my parents still follow that tradition. 
        The ritual hasn't changed much except adding a English and a financial newspaper to the mix.
        Dhruvan, seeing this, is already picking up the habit early. He eagerly looks forward to சிறுவர் மலர் every week, enjoying
        activities like drawing pictures using numbers, coloring, and spotting 7 differences between image sections.
        One unindented side effect is that now, every wall is turning into a canvas.
    </p><div class="main"><div class="image-container"><img alt="modern art"
                 class="responsive" src="/images/modern-art.jpg"/><span>Modern art</span></div><div class="image-container"><img alt="dhruvan art"
                 class="responsive" src="/images/dhruvan-art.jpg"/><span>Dhruvan's art </span></div><div class="image-container"><img alt="aaradhana's art"
                 class="responsive" src="/images/aaradhana-art.jpg"/><span>Aaradhana</span></div><div class="image-container"><img alt="team work"
                 class="responsive" src="/images/team-work.jpg"/><span>Team work</span></div></div><p>
        Though I was a huge cricket fan, I had never been to a stadium. Lakshmi changed that. She took me to the CSK vs PBKS IPL
        match to see the man, the myth, the legend in action. 
    </p><p><a href="/year-2023-in-review#family">Last time, we couldn't visit Kanyakumari due to bad weather</a>, but this year <a href="https://www.instagram.com/p/DEsFUO2z9AQ/?img_index=1" rel="nofollow">we
        made it!</a> I took Lakshmi, the kids, and Appa-Amma 
        <a href="https://www.instagram.com/p/Bdx4oFEB25-/" rel="nofollow">to the same places</a> I visited in 
        2013. Back then, I was a bachelor on a
        career break, about to head to Mumbai to join a startup. Now, I'm married man with two kids. It's gratifying to see how
        far I've come in life. Thank God for these blessings. For this reason, Kanyakumari will always be special to me.
    </p><p>
        Previously <a href="/year-2023-in-review">2023</a>, <a href="/year-2022-in-review">2022</a>, <a
            href="/year-2021-in-review">2021</a>, <a href="/year-2020-in-review">2020</a>,
        <a href="/year-2019-in-review">2019</a>, <a href="/year-2018-in-review">2018</a>, <a
            href="/a-year-that-was-2017">2017</a>,
        <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2024-in-review</link>
      <guid>https://sridhar.co/year-2024-in-review</guid>
      <pubDate>Thu, 09 Jan 2025 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Impact Players by Liz Wiseman</title>
      <description>
        <![CDATA[<div class='image-container'><img alt="Impact Players by Liz Wiseman" class="responsive" height="300" width="199"
        src="/images/impact-players.jpg" /></div><section><p>
    There are three types of contributors.
</p><ul><li><strong>Impact contributors</strong>:  deliver high-value, impactful work.</li><li><strong>Typical contributors</strong>: talented individuals who confine themselves within defined tasks.</li><li><strong>Under contributors</strong>: talented individuals perform below their potential.</li></ul><p>
    Being an impact player <em>isn't</em> about special talent; it's about adopting a <em>differential mindset</em> to thrive in ambiguous,
    dynamic environments.
</p></section><section><p>Five traits that set impact players from ordinary contributors:</p><ol><li>Make yourself useful</li><li>Step up, step back</li><li>Finish strong</li><li>Ask and adjust</li><li>Make work light</li></ol></section><section><h2>1. Make yourself useful</h2><blockquote>opportunity is missed by most people because it is dressed in overalls and looks like work - Thomas A. edison</blockquote><ul><li>There is a huge disconnect between the job description and the actual work. Companies seek the right candidates but struggle to hire for specific skills.</li><li>We can increase our impact when we find problems that need to be solved and make ourselves useful to our organization. The value must be received and perceived by the customer or stakeholder.</li><li>Instead of contemplating the work's scope for impact, start with your bosses's top priority. </li></ul></section><section><h2>2. Step up, step back</h2><ul><li><strong>Be agile.</strong> You will need help to figure out everything for ambiguous tasks. Keep the stakeholders in the loop and be open to change. The goal is to win as a team instead of enforcing your agenda.</li><li>A good strategy has many thinkers but only one author.</li><li>You need a stewardship mentality to lead, not an authoritative title.</li><li>The best leaders create stability for their team by absorbing ambiguity. </li><li><mark>When you take on more responsibility, you make more money.</mark></li></ul></section><section><h2>3. Finish stronger</h2><ul><li>Finishing strong isn't about delivering at all costs. It's about working on the right set of things as we bring clarity, and see it through the completion.</li><li>Expecting obstacles from the start is the surest way to overcome them. By anticipating problems, we can finish strong, even in the worst of circumstances.</li><li>Success is about doing the right thing, not about doing everything right. Instead of finishing at all costs, you should cut your losses and let some projects go.</li></ul></section><section><h2>4. Ask and adjust</h2><blockquote>Intelligence is the ability to adapt to change - Stephen Hawking</blockquote><ul><li><mark>Relying on feedback gathered in the annual performance review won't suffice. When targets are continually moving, you need continual feedback, guidance, and correction so you can adjust your aim.</mark></li><li>If you want to have an impact amid moving targets, ask for guidance and adjust your aim.</li><li><mark>As a knowledge worker, never tie your identity to your work.</mark> Doing so will damage your well-being as it may rise and fall based on the project, performance review, and challenges you face in completing it. You're not your work. Your self-worth remains independent of your work performance.</li><li>With a <em>growth mindset</em>, you are capable of learning and changing. so, interpret the feedback objectively to refine your skills.</li></ul></section><section><h2>5. Make work light</h2><ul><li><strong>Be succinct</strong>: there is too much work to get done, too many new tools and technologies to master, and more information than we all can process. <mark>The same technology that enables us to work anywhere also urges us to work everywhere and at all hours</mark>.</li><li>Being ready to go when needed is a crucial feature. </li></ul></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/impact-players</link>
      <guid>https://sridhar.co/books/impact-players</guid>
      <pubDate>Mon, 16 Dec 2024 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The Intelligent Investor by Benjamin Graham</title>
      <description>
        <![CDATA[<div class='image-container'><img alt="The intelligent investor by Ben Graham" class="responsive" height="300" width="199"
        src="/images/the-intelligent-investor.jpg" /></div><section><p>
        To be a successful investor, you need two things. </p><ul><li>A framework for making investment decisions.</li><li>An ability to keep your emotions in check.</li></ul></section><section><p>
    If you want to pick stocks for the intellectual challenge, then Graham's investing framework can significantly help.
</p><ul><li>If your investment horizon is at least 25 or 30 years—there is only one sensible approach: Invest in a diversified
        low-cost index fund every month.</li><li>The whole point of investing is not to earn more than average but to earn enough money to meet your needs.</li><li><mark>Measure your investing success not by what you make, but by how much you keep after inflation.</mark></li><li>Have two accounts. One for investment and one for speculation. Doing both from the same account will delude
        you into thinking you're investing when speculating.</li><li>Invest 90% of the money in an index fund to create your investment foundation and experiment with a balance of 10%. </li><li>Allocate a maximum of 75% to stocks.</li><li>Allocate a minimum of 25% to bond: A minimum of 25% bond is sufficient to support your portfolio even when the
        market crashes. A 50-50 stock bond split or allocating bonds for 100 - your age would severely impact your returns
        when the investment horizon is over 20 years.</li><li>Diversification is the easiest and most cost-effective way to increase the margin of safety. It reduces the risk of
        being wrong and improves the chances of being right.</li><li>Own between 10 to 30 diversified stocks with a higher likelihood of profit than loss.</li><li>Reserve some amount of cash.</li><li><mark>We invest in the present, but we invest for the future.</mark> Choose industries that are most likely to grow and identify promising companies. </li><li>Avoid overexposure to one sector.</li><li>Narrow down to companies with a long record of profitable operations that generate more cash than they consume.
    </li><li>Read at least the last five years' annual reports before buying a stock.</li><li>Never buy a stock immediately after a substantial rise or sell one immediately after a significant drop.</li><li>Avoid companies with high projected growth rates. A company can be a giant or deserve a giant P/E ratio, but not both.</li><li>Avoid companies which pay no income tax since it raises questions about reported earnings.</li><li>Prefer companies that build their businesses from within rather than through acquisition funded by debt.</li><li>Prefer companies that buy back their shares when they are cheap not when they are at all time highs.</li><li>Good management is one that allocates capital wisely; and do not pay themselves hundred-million-dollar of stock
        options.</li><li><mark>If you live, work in US and earn in the U.S dollar, you are already financial tied to the U.S. economy. It’s
        risky to keep all your money in one country. Eg Japan. To be safe, diversify some of your investments
        internationally.</mark></li><li>Investing in your company's stock isn't risk free since you know the business more than an outsider. Eg:
        Enron, worldCom. </li><li>Never buy into a lawsuit.</li><li>No matter how good its products or how powerful its brands, a company must spend some money to develop new
        business.</li><li>Repeated selling by the insiders without a valid reason is a bright red flag.</li><li> Company executives should say what they will do, then do what they said.</li><li>Risk in investment can be managed, but can't be avoided.</li><li>Characteristics of a bull market (1) a historically high price level, (2) high price/earnings ratios, (3) low
        dividend yields as against bond yields, (4) much speculation on margin, and (5) many offerings of new
        common-stock issues of poor quality. </li></ul></section><section><h2>Margin of safety</h2><p>The current stock price reflects not only the past but also reasonably formed expectations of the future.</p><blockquote>
    The function of the margin of safety is, in essence, that of rendering unnecessary an accurate estimate of the
    future.
</blockquote><p>
    Every stock is a bargain at some point and expensive at another. While there are good and bad companies, no stock is
    inherently good—only its price matters, and good prices come and go.

</p><blockquote>
    The value of any investment is, and always must be, a function of the price you pay for it. A great company is not a
    great investment if you pay too much for the stock.
</blockquote><p>
    Many security analysts make the fundamental mistake of buying companies with the best management and growth prospects at
    any price. They avoid less promising companies no matter how low the price may be.
</p><p><mark>The margin of safety is always dependent on the price paid.</mark> By refusing to pay too much for an investment, you
    minimize
    the chance of losing your wealth.
</p><blockquote>
    If you have formed a conclusion from the facts and if you know your judgment is sound, act on it— even though others
    may hesitate or differ.” (You are neither right nor wrong because the crowd disagrees with you. You are right
    because your data and reasoning are right.) Similarly, in the world of securities, courage becomes the supreme
    virtue after adequate knowledge and a tested judgment are at hand.

    In investing, as with life in general, ultimate victory usually goes to the doers, not to the talkers.
</blockquote><p>
    Without bear markets, anyone waiting to "buy low" will feel left behind. Unless the investor has emotional discipline,
    they are more likely to jump back in with both feet, ignoring their investment framework. Invest only if you see the
    margin of safety else, refrain.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/intelligent-investor</link>
      <guid>https://sridhar.co/books/intelligent-investor</guid>
      <pubDate>Fri, 06 Dec 2024 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The Daily Dad by Ryan Holiday</title>
      <description>
        <![CDATA[<div class='image-container'><img alt="The Daily Dad by Ryan Holiday" class="responsive" height="300" width="199"
        src="/images/the-daily-dad.jpg" /></div><section><p>Parenting is a topic that
    every philosophy and religious tradition has spoken about.</p></section><section><h2>Teach by Example</h2><blockquote>
    First say to yourself what you would be; and then do what you have to do. - Epictetus
</blockquote><blockquote>
    I think of myself as a philosopher only in the sense of being able to set an example - Friedrich Nietzsche
</blockquote><blockquote>
    Don't worry that children never listen to you; worry that they are always watching you - Robert fulghum
</blockquote><blockquote>
    Without a ruler to do it against you won’t make crooked straight. - Seneca
</blockquote></section><section><h2>Love unconditionally</h2><blockquote>
    Future love doesn't exist. Love is a present activity only - Leo tolstoy
</blockquote></section><section><h2>Put your family first</h2><blockquote>
    Sometimes you will never know the value of a moment until it becomes a memory - Dr. Seuss
</blockquote></section><section><h2>Master your emotions</h2><blockquote>
    Every event has two handles, one by which it can be carried, and one by which it can’t. <br />
    If your brother does you wrong, don’t grab it by his wronging, because this is the handle incapable of lifting it.
    <br />
    Instead, use the other—that he is your brother, that you were raised together, <br />
    and then you will have hold of the handle that carries. - Epictetus

</blockquote><blockquote>
    Anger always outlasts hurt. <br />
    Best to take the opposite course. <br />
    Would anyone think it normal to return a kick to a mule or a bite to a dog? - Seneca
</blockquote><blockquote>
    These things are not asking to be judged by you. <br />
    Leave them alone - Marcus Aurelius
</blockquote><blockquote>
    Old people are always very impatient with young ones. <br />
    Fathers always expect their sons to have their virtues without their faults. — Winston Churchill
</blockquote></section><section><h2>Character is fate</h2><blockquote>
    Character is fate - Heraclites
</blockquote><blockquote>
    If, at some point in your life, you should come across anything better than justice, truth, self-control,
    courage — it must be an extraordinary
    thing indeed—and enjoy it to the full - Marcus Aurelius
</blockquote></section><section><h2>Don't neglect yourself</h2><blockquote>
    The most important decision you make is to be in a good mood - Voltaire
</blockquote><blockquote>
    Keep company only with people who uplift you, whose presence calls forth your best - Epictetus
</blockquote><blockquote>
    Sleep is the interest we have to pay on the capital which is called in at death; <br />
    and the higher the rate of interest and the more regularly it is paid, <br />
    the further the date of redemption is postponed. - Arthur Schopenhauer
</blockquote></section><section><h2>Raise a reader</h2><blockquote>
    A reader lives a thousand lives before he dies. <br />
    The man who never reads lives only one. - George R.R. Martin
</blockquote><blockquote>
    I would rather have questions that can't be answered than answers that can't be questioned - Richard Feynman
</blockquote></section><section><h2>Time flies</h2><blockquote>
    This is the real secret of life -- to be completely engaged with what you are doing in the here and now. <br/>
    And instead of calling it work, realize it is play. - Alan Watts
</blockquote></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/daily-dad</link>
      <guid>https://sridhar.co/books/daily-dad</guid>
      <pubDate>Mon, 23 Sep 2024 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2023 in review</title>
      <description>
        <![CDATA[
<section><p>
    Usually, when the year ends, I take stock of things we did on the foundation pillars(work, health, and family) write a summary in my private
    journal and share the public ones. Going by the entries, 2023 seems to be the year of milestones for us.
</p><ul><li>This is going to be my 9th year in review.</li><li>I've been journaling for the past 9 years.</li><li>The domain sridhar.co is 10 years old.</li></ul></section><section><h2>Work</h2><p><a href="/year-2022-in-review#health">The learning system</a> that I built last year is serving me well.</p><ul><li>
        Learnt about <a href="/weekly-updates/week-44">Two-Phase Commit</a>, Paxos, and <a href="/weekly-updates/week-50">Raft</a> distributed
        consensus ideas.
    </li><li>
        Discovered <a href="/weekly-updates/week-32">prismjs</a>, a 15 KB lightweight utility for code syntax highlighting instead of using Github
        gists.
    </li><li>
        Discovered mermaid.js(.mmd file) for creating and embedding diagrams within the github repo. eg:
        <a href="https://gist.github.com/sridharrajs/f97ba3ed8c176aeb2b10b5986b21d931">TwoPhaseCommit.mmd</a></li><li>Read and cleared bookmarks: from <a href="/weekly-updates/week-52">10257</a> to 7425.</li><li>learnt Basics of Google Cloud Platform.</li><li>published summary of <a href="/books/rich-dad-poor-dad">Rich Dad Poor Dad</a>.</li><li>published <a href="/weekly-updates">27 weekly</a> issues.</li><li>
        published
        <a href="https://github.com/onebible/android.onebible.in/blob/master/release.md">4 versions(1.5.10, 1.5.11, 1.5.12 and 1.5.13)</a> of onebible
    </li></ul><p>
    I'm going to make only one change to my system. Dust off my RSS reader and start adding blogs, youtube channels to manage them in a single place.
</p><p>In terms of <a href="/my-toolbox">My toolbox</a>, I made three changes.</p><ul><li>
        After having multiple false starts with learning Vim and emacs, I've realised that mastering an editor is a lifetime pursuit. You need to
        strike the right balance between learning the editor vs being productive. Doom emacs seem to have the right set of defaults that can make you
        productive instead of tinkering the editor. so far going good.
    </li><li>Moved to VS Code for all my JS/React/Python.</li><li>Started using Google Keep for all ephemeral notes.</li></ul><p>I read the following books.</p><ol><li>The Dhandho Investor: The Low-Risk Value Method to High Returns by Mohnish Pabrai</li><li>Wit and Wisdom from Poor Richard's Almanack by Benjamin Franklin</li><li>Outlive: The Science and Art of Longevity by Peter Attia</li><li>Range: Why Generalists Triumph in a Specialized World by David Epstein - <a href="/books/range">My notes</a></li><li>
        Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not! by Robert Kiyosaki -
        <a href="/books/rich-dad-poor-dad">My notes.</a></li><li>Life Without Principle by Henry David Thoreau - <a href="/books/notes-on-life-without-principle">My notes</a> || 2nd reading</li></ol><p>The biggest highlight of the year was <a href="https://www.instagram.com/p/C2keqhKvMsQ/" rel="nofollow">meeting Derek Sivers</a> on Valentine's Day when he came to Chennai.</p><p>This year I donated to the Free Software Foundation, Wikipedia, and Mozilla.</p></section><section><h2>Health</h2><p>The single best thing that has increased my mobility is going office. I walked 1.8x more steps than when I worked from home.</p><div class='image-container'><img
    alt="steps in 2023"
    class="responsive"
    height="300" width="399"
    src="/images/2023-steps.png"></div><p>
    Except for a medical challenge, I was fairly regular to the office. I'm learning and experimenting more with health routines optimizing for energy, see family section.
</p></section><section id="family"><h2 class="hyperlinked-header"><a href="#family">Family</a></h2><p>
    After <a href="/weekly-updates/week-40">understanding NPS</a> and learning <a href="/weekly-updates/week-47">how it compares with index funds</a>,
    I added NPS to my financial strategy. Rest all stays the same.
</p><p>Dhruvan had couple of firsts in 2023</p><ul><li>
        He visited Chennai Book fair for the first time. His picks were a globe, a storybook (because it had
        <a href="https://www.instagram.com/p/Cnr-mwAvm5V/" rel="nofollow"> two horses on the covers</a>) and a bag of toys. We started with the
        stories from the book as bedtime stories but soon realised he had a different expectation. He likes Spiderman + Batman and Paw Patrol to save
        the world from cruel Mayor Humdinger, and robo cars taking on monster trucks. Partly inspired by her brother, Aaradhana wants crocodiles to
        take on dinosaurs and elephant finger family songs. We would have never imagined our bedtime stories taking such wild turns each day ;)
    </li><li>
        He had first-ever summer vacation for real. We went to my in-laws place. Every day had an agenda. Hot noon had cool rose milk, ice
        creams and Badam milk. Evenings had cricket(IPL) for entertainment. It sort of reminded my vacation during my school days. Nostalgic.
    </li></ul><p>Appa-amma had moved in with us. kids: Dhruvan, Aaradhana and their cousin Adhiyan are having a blast with playing with them every day.</p><p>
    Except for attending the marriage of a close friend to Trichy, I didn't travel much. We had plans to visit a few places down south of Tamil Nadu.
    But December weather thought otherwise. So Lakshmi insisted we continue our theme of visiting natural scenic places. Last year it was <a href="https://www.instagram.com/p/C2kd-UePsDw/" rel="nofollow">beaches</a> and
    <a href="https://www.instagram.com/p/C2keg7VP7Ic/" rel="nofollow">aquariums</a> in Chennai, so this year we picked a <a href="https://www.instagram.com/p/C2ke6n9vVZm/" rel="nofollow">hill station</a>.
</p><p>
    One noticeable observation is that, be it attending functions, during vacation, or just going out in general. My exercise routine is no match for
    the kids' energy levels. I and Lakshmi are experimenting with health routines that would help us to achieve this need. Maintaining the Energy level throughout
    the day is our only goal, everything else seems unnecessary. So in this phase of life, our goal is to try matching (50% from each of us) the
    energy levels of kids ;)
</p><p>
    Previously <a href="/year-2022-in-review">2022</a>, <a href="/year-2021-in-review">2021</a>, <a href="/year-2020-in-review">2020</a>,
    <a href="/year-2019-in-review">2019</a>, <a href="/year-2018-in-review">2018</a>, <a href="/a-year-that-was-2017">2017</a>,
    <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2023-in-review</link>
      <guid>https://sridhar.co/year-2023-in-review</guid>
      <pubDate>Thu, 25 Jan 2024 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Rich Dad and Poor Dad by Robert Kiyosaki</title>
      <description>
        <![CDATA[<div class='image-container'><img
        alt="rich dad and poor dad summary"
        class="responsive"
        height="300" width="199"
        src="/images/rd-pd-book.jpg"/></div><section><p>The main reason the rich get richer and the poor get poorer is because the subject of money is taught at home,<em> not in
    school</em>. School focus on academic and professional skills rather than financial skills.
</p><p>
    You have to understand three things to be rich.
</p><ul><li>Job mindset.</li><li>Taxes.</li><li>Financial literacy.</li></ul></section><section><h2>Job mindset</h2><p>The regular recipe of getting up every day, going to work, paying bills, and investing some savings in mutual funds
    won't make you rich. You need to map your work's impact on your paycheck. Strive to be a generalist who knows a
    little about many things to deliver a holistic value instead of perfecting a
    specific skill set.</p><p>Learn
</p><ul><li>accounting: profit, loss, pricing strategies.</li><li>valuing: identifying opportunities and market size.</li><li>visibility: branding, position, sales & marketing</li><li>communication: writing, speaking.</li><li>risk mitigation: learning to manage</li></ul><p>Always have something to show to yourself as an outcome. Don't toil the best years of your life in a job with no
    learning opportunities, even if it is high paying. <mark> Job security is an illusion. The sooner you realize better it is.</mark>
    Also, basing your lifestyle solely on your employer's paycheck is a bad idea because it is a single point of
    failure.
</p></section><section><h2>Taxes</h2><p><mark>Number one expense for most people is Taxes.</mark> There are two things that you need to note</p><ul><li>investors & business owners: Lesser tax slab than individuals incentivizing them to invest back in the
        economy.
    </li><li>workers: Govt takes its share of tax even before you receive it. The higher you earn, the higher the tax outgo will
        be.
    </li></ul><p>In a nutshell, <mark>Taxes punishes those who frequently take their money out and reward those who stay invested.</mark> Even if
    incentivized with tax credits, Mortage takes cash from your pocket, whereas every $ invested
    becomes your loyal employee and works 24 hours for you. So you need to factor in tax + inflation when building your
    cash flow.</p></section><section><h2>Financial literacy</h2><blockquote>financial literacy = understanding your cash flow.</blockquote><p>The main reason for the financial struggle is the ignorance of handling money.  <strong>It is not how much you make; it's how
    much money you keep and invest matters. Our spending habits reflect who we are. </strong> Avoid consumer debt at all costs.
    Keeping up with jones won't make you rich. Instead of buying investment instruments focused only on wealth building,
    learn how money works. Understand the fundamental difference between asset and liability.
</p><ul><li>Asset: puts money in the pocket.</li><li>Liability: takes money from the pocket.</li></ul><p>
    So, Focus on acquiring income-generating assets instead of assets that take money out of your pocket.
</p><p><mark>Money without financial intelligence will be, money gone <em>soon</em>.</mark><br>
    E.g. athletes making millions during their careers were miserable when they were on their retirement.
</p><p>
    Learning alone won't cut it. You need to refine these skills through practice. So, start small, and expect failures
    to be part of the process. We learn by mistakes, and people who avoid failure also avoids learning. Action beats
    inaction every single time.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/rich-dad-poor-dad</link>
      <guid>https://sridhar.co/books/rich-dad-poor-dad</guid>
      <pubDate>Sat, 04 Mar 2023 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2022 in review</title>
      <description>
        <![CDATA[<p>As the year winds down, it is an opportunity to reflect on how we have fared on our life's foundation pillars(work,
    health, and family).</p><section><h2>Work</h2><p>
    The most significant change I made this year is I started going office. Since the office environment has an
    ingrained work context, I quickly get into productive mode. Commuting to and fro from the office served as a signal
    to my brain to warm up and wind down from work. It helped me to meet colleagues who were working on different
    initiatives and helped me learn new things.
    Overall, it has improved my mental
    well-being by setting where-how I work context.
</p><p>I read the following books.</p><ol><li>
        Building a Second Brain: A Proven Method to Organize Your Digital Life and Unlock Your Creative Potential by
        Tiago Forte -
        <a href="/books/building-a-second-brain">My notes.</a></li><li>Just Keep Buying: Proven Ways to Save Money and Build Your Wealth by Nick Maggiulli</li><li>Show Your Work!: 10 Ways to Share Your Creativity and Get Discovered by Austin Kleon</li><li>How to Live on 24 Hours a Day by Arnold Bennett</li><li>What The Heck Do I Do With My Life by Ravi Venkatesan - <a href="/books/what-the-heck-do-i-do-with-my-life">My
        notes.</a></li><li>How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life by Scott Adams</li><li>Extreme Programming Explained: Embrace Change by Kent Beck</li></ol><p>
    This year I donated to the Free Software Foundation, Wikipedia, and Mozilla.
</p></section><section><div id="health"><h2 class="hyperlinked-header"><a href="#health">Health</a></h2><p>
    I worked on my mental health. As we came out of the pandemic mindset, there was a lot to catch up on, books to be
    read, blogs to write, and side
    projects to work on. I felt overwhelmed and stressed. I tried different approaches to managing it, but nothing
    worked until I figured <a href="https://twitter.com/sridharrajs/status/1608843551735173132">a
    combination of ideas</a> gathered from <strong>How to Fail at Almost Everything and Still Win Big</strong>,
    <strong>How to Live on 24 Hours a Day</strong>, and <strong>The Passionate Programmer: Creating a Remarkable
    Career</strong>.
</p><p>
    Since my backlog kept piling up for the last two years, there was a lot to catch up on. I wanted to clear them as
    early as possible and be on top of things.
    The problem was I relied on my willpower to complete them instead of building a system that would lead to that
    outcome.
</p><p>An example of the difference between a goal and a system.</p><p><strong>Goal</strong>: Lose 10 kgs. <br/><strong>System</strong>: Work out 30 minutes daily, and eat on a small plate. <br/></p><p>
    Thinking more about designing a system for creating things led me to
    <a href="/weekly-updates/week-25">weekly-updates</a> idea. <strong>If I consider
    everything to be a learning debt. Just
    like paying an EMI for a loan, I can spend 1 hour daily to clear it. Setting one hour limit forced me to be more
    stringent in choosing what to
    do.</strong> I shut down two projects I lost interest in maintaining, cancelled 3 domain names, and unsubscribed from a bunch
    of newsletters whose quality
    has gone down with time. It has also helped me discipline how I go about executing things. Some days I read books.
    Some days I work on my side
    project, and some days I learn new standards related to the work. Anything that I can write in my weekly review. I
    write a summary of things I did
    the whole week on the following Monday, just like how we do scrums but on a <strong>weekly cadence</strong>.
</p><p>
    I was <a href="/weekly-updates/week-27">able to read 7 books, work on 4 side projects, and answer 5 questions on
    stackoverflow</a> all by
    disciplining myself to work only for 1 hour a day.
</p></div></section><section><h2>Family</h2><p>
    The year was full of celebrations starting with our own. We celebrated <a href="/a-year-that-was-2017">5 years of
    togetherness</a>. We are a much
    different person now than how we were 5 years ago. Optimizing each other's schedules for continuous downtime,
    helping each in taking care of the kids, and having do-nothing weekends have taken priority over things in our life.
    It is interesting to see us evolve into this but at the same time, I'm sure we will have a different set of
    priorities at the end of the next 5 years.
</p><p>
    We took kids along with us where ever we went. We took them to all the marriages we attended this year, and they got
    to know the extended family and enjoyed playing with other kids.
</p><p>
    Dhruvan has started going to school from the beginning of the year. He uses the TV remote himself and instructs
    GoogleNest to play his favourite cartoons on Youtube. It is interesting to see how kids learn things by observing us
    these days.
</p><p>
    Aaradhana turned one. Just like we did for dhruvan, we captured everything she did leading up to walking on her own
    as memories. She misses her brother when he goes to school. But when dhruvan returns from school, he teaches her
    what he learned. Be it a new rhythm or a game. Then they play together :)
</p><p>
    With No lockdown restrictions, I'm exploring Chennai again through kids, taking them to parks, <a href="https://www.instagram.com/p/C2kd-UePsDw/" rel="nofollow">beaches</a> and
    <a href="https://www.instagram.com/p/C2keg7VP7Ic/" rel="nofollow">aquariums</a>. They are getting to see the animals, mountains and the sea in the real world than from youtube.
</p><p>
    I think 2022 was the year of celebration for us. I hope 2023 will be a good year for all of us.
</p><p>
    Previously <a href="/year-2021-in-review">2021</a>, <a href="/year-2020-in-review">2020</a>, <a
        href="/year-2019-in-review">2019</a>,
    <a href="/year-2018-in-review">2018</a>, <a
        href="/a-year-that-was-2017">2017</a>, <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2022-in-review</link>
      <guid>https://sridhar.co/year-2022-in-review</guid>
      <pubDate>Sat, 31 Dec 2022 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to generate a custom RSS feed from scratch programmatically</title>
      <description>
        <![CDATA[<p>
    RSS is an XML feed, so to generate a valid RSS programmatically, you need to understand the <a
        href="https://www.rssboard.org/rss-specification">RSS 2.0 Specification</a>.
</p><p>
    Lets first see how a RSS XML is structured.
</p><script src="https://gist.github.com/sridharrajs/6eef2b5f99f8ee8ab83accd6ef1cd000.js"></script><p>
    The XML consists of two set of sections.
</p><ul><li>Channel - <code>&lt;channel&gt;&lt;/channel&gt;</code></li><li>Item - <code>&lt;item&gt;&lt;/item&gt;</code></li></ul><section><h2>Channel</h2><p> The purpose of <code>Channel</code> element is to define the overall website information. so, the following elements
    are required.</p><ul><li><code>title</code> - Title of your website. REQUIRED.</li><li><code>link</code> - Link to the posts. REQUIRED.</li><li><code>description</code> - A HTML content of the page. If the page has the HTML content, wrap it within <code>&lt;![CDATA[your html content]]&gt;</code> REQUIRED.</li><li><code>pubDate</code> - Publication date for the post in <code>RFC 822</code>.Optional</li></ul><p>There are also other elements like <code>image</code>, <code>category</code>, <code>generator</code> and others but
    they are optional. Pick as you see it fit.</p></section><section><h2>Item</h2><p>Here again elements like <code>title</code>, <code>description</code> and <code>link</code> are REQUIRED.
    <code>Item</code> provides the information about the individual posts that goes into the website. So, we need to
    create
    <code>item</code> per posts that our website contains. There is no limit to the number of <code>item</code> a <code>channel</code>
    can contain.
</p></section><section><h2>Updating</h2><p>Once you publish a new blog post, you need to update both <code>sitemap.xml</code> and your <code>rss.xml</code>.
    Next add the reference to the rss on the index page -
    <code>&lt;link rel="alternate" type="application/rss+xml" href="https://example.org/rss.xml" title="Example site"&gt;</code>.
</p></section><section><h2>Schema Validation</h2><p>
    Once you generate the RSS, you can validate it using <a href="https://www.rssboard.org/rss-validator/">Feed
    Validator</a>, <a href="https://validator.w3.org/feed/check.cgi">W3C Feed Validation</a> or any other relevant
    RSS validators.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/how-to-generate-custom-rss-feed-from-scratch-programmatically</link>
      <guid>https://sridhar.co/how-to-generate-custom-rss-feed-from-scratch-programmatically</guid>
      <pubDate>Sun, 18 Dec 2022 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Building a Second Brain by Tiago Forte</title>
      <description>
        <![CDATA[<div class='image-container drop-shadow' 
        xmlns="http://www.w3.org/1999/html"><img
        alt="Building a Second Brain by Tiago Forte"
        title="Building a Second Brain by Tiago Forte"
        class="responsive"
        height="300" width="199"
        src="/images/building-a-second-brain-by-tiago-forte.jpg"/></div><section><p>
    A Second brain essentially means developing your own digital note-taking system that helps you achieve your purpose.
</p><ul><li>
        Calendar app - an extension of your brain's ability to remember events.

    </li><li>
        Smartphone - is an extension of your ability to communicate.
    </li><li>
        Cloud storage - an extension of your brain's memory.
    </li></ul><p>
    Similarly, a Note taking system is to extend your brain's ability to retain and process information.
</p><p>
    A Second brain note-taking system has four stages in it
</p><ul><li><strong>C</strong>apture</li><li><strong>O</strong>rganize</li><li><strong>D</strong>istill</li><li><strong>E</strong>xpress</li></ul><p>It is also called <strong>CODE</strong>.</p></section><section><h2>Capture</h2><p>
    A note can be an extract from a book, or text from an article, or an image. The idea here is to capture anything
    that would be useful for your future self and put it in a single, centralized place. It is okay to be an information
    hoarder in the beginning. Holding information in the brain doesn't scale. By offloading, you are leveraging time to
    build your knowledge over time.

</p><p><strong>If you capture everything that has caught your attention, your digital notes would be no better than scrolling
    through social media.</strong> Instead, capture things that you think can help you move forward with your goal. Also, trying
    to organize while creating the note increases friction in the process.
</p></section><section><h2>Organizing</h2><p>It does not make sense to put fresh, dried, and frozen fruit together in one place because they all happen to be
    fruit. Yet this is how most people take notes. They put notes from books, podcasts, quotes, and images separately.
</p><p><strong class="highlight">Instead of organizing by source, organize by outcomes.</strong> Create a project and collate related ideas within it.</p><p><strong>For example:</strong> Everything in a kitchen is being organized to support one goal - preparing a meal. The culinary process can
    offer us insights into how to effectively organize.</p><ul><li>Putting mixing spoon in a separate place where is expected.</li><li>Wiping a knife clean immediately after using it to be ready for the next cut.</li><li>Laying the ingredients in the same order as they were used.</li><li>The infrequently used items are in the deep freezer.</li></ul><p>
    Life is too short to spend time organizing notes that haven't proved their worth. Organize while executing, only
    when you visit the note for the second time, edit, and move around. This conservative approach would help you build
    a working system that aids your flow instead of a perfect system that requires hours of organizing.
</p><blockquote>Working system > Perfect system</blockquote></section><section><h2>Distill</h2><p>Don't copy the entire chapter or the transcript. Be picky. <strong>Every time you touch a note, better it. </strong> Prune the ordinary
    and spotlight the key points. Add a highlight, bullets, commentary anything that would benefit your future self.
</p></section><section><h2>Express</h2><p><strong class="highlight">With access to the wisdom personally gained from your conversations, mistakes, victories, and lessons learned, Your
    note-taking system isn't just a medium for storage but a tool for thinking.</strong> And a good test for that is knowledge
    applied through execution. It should help you to move forward with your goal. You should be able to deep work on
    complex problems that you may have at hand, or improve your learning potential, better your judgment skills, or
    transform your relationships.
</p><p>Being organized isn't a personality trait we are born with, nor is it merely a matter of finding the right apps or
    tools. It is the habit one should inculcate to put the information to use in today's world.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/building-a-second-brain</link>
      <guid>https://sridhar.co/books/building-a-second-brain</guid>
      <pubDate>Sat, 24 Sep 2022 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>PinQL roadmap</title>
      <description>
        <![CDATA[<h2>Why</h2><p>
    I've about <code>6873</code> unread links in Pinboard. This is by design, because of my workflow.
</p><blockquote>
    One way to improve your reading habits is to have <strong>a HEALTHY BACKLOG of all YOUR links in one place </strong>
    before you want
    to read them. Links from email newsletters, tweets, WhatsApp, and telegram all in one place.
</blockquote><p>
    Though the <a
        href="/pin-tweet-auto-tagging">pin
    tweet</a> was effective in auto-tagging the new links, the old links remain untagged.
</p><div class="main drop-shadow"><div class="image-container"><img alt="pinboard tag cloud"
             class="responsive" src="/images/tags.png"/><span>Pinboard Tag Cloud: A screenshot from https://pinboard.in/u:sridharrajs/tags/</span></div></div><p>
    The above is how My tag cloud looks like based on auto-tagging for the recent <code>~3k</code> of <code>6K</code>
    links. The older <code>3k</code> links remain untagged since they were bookmarked before I created the
    auto-tagging script. Since I'm reading through tags, these untagged links won't be getting a read. PinQL aims to
    solve this. It will improve
    existing pin-tweet to run tagging rules even for the back dated links through a web interface.
</p><section><h2>Milestone</h2><ol><li>Setup GraphQL server with pinboard integration - Completed in <a href="/weekly-updates/week-3">Week 3</a></li><li>Adding Mutations for CRUD on <code>links</code> - Completed in <a href="/weekly-updates/week-7">Week
        7</a></li><li>Adding Mutation for CRUD on <code>rules</code></li><li>Integrate pin-tweet with cron setup</li><li>Rules: Build React screens for adding, editing, and deleting rules</li><li>Links: Build screens for Adding, Listing, Updating, and Deleting links</li><li>Build screens for login, collect Twitter token</li><li>Retire pin-tweet</li></ol><p>
    I'm planning to use <a href="https://www.apollographql.com/docs/react/">Apollo
    Client</a> for integrating the frontend with the GraphQL backend. One another thing to note here is that pin-tweet
    stores
    both twitter-token and pinboard token in the <a
        href="https://github.com/sridharrajs/pin-tweet/blob/master/.env.sample#L4-L17">.env</a> file. Since this is a
    onetime activity while setting up and it isn't going to change. I'm leaving it as it is. PinQL is
    meant for personal single user use only. So should be okay. For the sake of simplicity, I'll continue to stick with
    a <code>JSON</code> file for storing rules instead of using a database.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/pinql-roadmap</link>
      <guid>https://sridhar.co/pinql-roadmap</guid>
      <pubDate>Fri, 05 Aug 2022 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>What The Heck Do I Do With My Life by Ravi Venkatesan</title>
      <description>
        <![CDATA[<div class='image-container drop-shadow'><img
        alt="What The Heck Do I Do With My Life by Ravi Venkatesan"
        class="responsive"
        height="300" width="199"
        src="/images/what-the-heck-do-i-do-with-my-life.jpg"/></div><p>During the 20th century, education was the enabler for uplifting people from poverty. But in the 21st century, it is
    going to be meta-skills.</p><blockquote>A meta-skill are higher-order, general skills that enable you to develop new skills.</blockquote><p>Though there are many, the book deals with the following three in detail.</p><ol><li>Learning agility</li><li>Entrepreneurial mindset</li><li>Leadership skills</li></ol><p>You would need them to thrive in the age of extreme change driven by rapidly changing technology, age demographic,
    inequality, and polarization.</p><section><h2>Learning agility</h2><p>It is the ability to learn, adapt, unlearn, and equip yourself in an environment you've never experienced. It is not
    about acquiring new skills, rather, it is about honing the behavioral trait. As darwin said - <strong class="highlight">not the strongest but
    the most responsive to change survive.</strong></p><blockquote>A rising tide lifts all boats.</blockquote><p>A big wave can catapult even a mediocre talent to extraordinary success. An average person in the raising industry
    will do better than a star talent in a less dynamic one. Be curious, and read widely. And this will equip you to
    ride a wave when you spot one because none has ridden it before.
</p><p><strong>For example:</strong> Globalization, the Advent of The Internet, Financialization of services.</p><p>Your experience working in volatile, uncertain, complex, and ambiguous environments will be a differentiator. Success
    happens because an opportunity meets a prepared mind at the right place at the right time. Each time you take a risk
    to learn things outside your comfort zone, you are strengthening your learning agility muscle. The more you use it,
    the stronger it becomes. It can't be taught except through experience. It means you should take on new challenges
    deliberately.
</p></section><section><h2>Entrepreneurial mindset</h2><p>Work gives us the identity and should best be viewed as a launch pad for your long-term goals.</p><p>Standout and differentiate. Attract opportunities instead of hunting them. Think marketing instead of sales for doing
    so. <strong>Shift your mindset from job-seeker to self-employed.</strong> To be one, you first have to identify your core skill. It
    can be writing a code or ability to fix things, being a clear communicator, or anything that people might need. Once
    identified, build on it until it is valuable enough for others to pay. This would mean you should never consider
    your job as long-term employment but rather a gig or a project. The goal is to learn things along the way and build
    a good reputation at the end of it. Think of it as an adventure instead of a ladder.</p><p>At any moment, be prepared to be independent and stand on your feet. We are better served with a self-employed
    mindset than disillusioned to think of retiring from a single company.
</p><blockquote>Job loyalty without upskilling will lead to job insecurity.</blockquote></section><section><h2>Leadership skills</h2><p>Leading people by building trust is the ultimate timeless skill that can never be automated. Leadership cant be
    characterized by a single personality trait. Some are quiet, some loud, some charismatic, and some soft-spoken, yet
    all are effective.</p><p>Dwight D. Eisenhower was a great coalition builder. Gandhi was a visionary who led by personal example. George S.
    Patton and Douglas MacArthur were brilliant military leaders. Churchill was a good wartime leader. Horses for
    courses.
</p><p><strong>Leaders are not born but made.</strong> And the first step toward becoming one is to take ownership and personal
    accountability. You need to develop this mindset and foster trust. <strong>It is more about the act than a title. A title
    can give you subordinates but not followers.</strong> What matters more is the ability to inspire others through your action.
</p><p>We'll be living longer and would desire to be productive till much later. The only way to stay relevant is to keep
    working on these meta-skills.
    Take charge of both your life and career. Live deliberately.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/what-the-heck-do-i-do-with-my-life</link>
      <guid>https://sridhar.co/books/what-the-heck-do-i-do-with-my-life</guid>
      <pubDate>Sat, 23 Jul 2022 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2021 in review</title>
      <description>
        <![CDATA[<p>Each passing year teaches us something. I think, 2021 will be the year we as a
    family learned resilience. We've made good progress on the foundation
    pillars(work, health, and family) of our life.

</p><section><h2>Work</h2><p>2021 <em>officially</em> marks a decade since I took up Software Development as a
    profession. Though I have been programming since high school, I'm still enjoy
    it. Programming languages I use might have changed, but never has my
    interest.
</p><h3>Books</h3><p>
    I read about 12 books in 2021
</p><ul><li>வீரயுக நாயகன் வேள்பாரி, தொகுதி 2 (வீரயுக நாயகன் வேள்பாரி, தொகுதி 2) by
        Su.Venkatesan
    </li><li>HDFC Bank 2.0 by Tamal Bandyopadhyay</li><li>Fooled By Randomness by Nassim Nicholas Taleb</li><li>The Psychology of Money by Morgan Housel</li><li>How to Live: 27 conflicting answers and one weird conclusion by Derek
        Sivers
    </li><li>The Passionate Programmer: Creating a Remarkable Career in Software
        Development by Chad Fowler
    </li><li>So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for
        Work You Love by Cal Newport
    </li><li> The Richest Man In Babylon by George S. Clason</li><li> Masterclass with Super-Investors by Vishal Mittal</li><li> Food Rules by Michael Pollan</li><li> No Limits: The Art and Science of High Performance by Mukesh Bansal</li><li> Gamechanger: Forget Start-ups, Join Corporate and Still Live the Rich
        Life
        you want by Pattabiraman
    </li></ul><h3>Donations</h3><p>This year I donated to the Free Software Foundation, Wikipedia, and Mozilla.
</p></section><section><h2>Personal</h2><p>I made 4 significant changes with respective to finance.</p><ol><li>I used cash over cards. It gave me control over my spending
        behavior by giving psychological feedback on my cash flow for a given
        month.
    </li><li>I disabled ATM cash withdrawal for my credit cards and have enforced
        3-digit
        limits for contactless payments.
    </li><li>I currently hold a few blue chips and a couple of mutual funds. <br> 1 -
        Sensex
        index
        fund <br> 1 - S & P 500 index fund for international diversification.
    </li><li>I had stopped investing in the ELSS mutual fund last year. I improved on
        it by
        opting for the New Tax regime. This is to decouple my long-term investments
        from
        tax planning.
    </li></ol></section><section><h2>Health</h2><p>I got our family(including parents and in-laws) vaccinated 100% with both
    doses. We accidentally discovered a major health challenge for my mother-in-law when
    we did a master health checkup. Since it was an early diagnosis, we had ample
    time for treatment and recovery.
</p></section><section><h2>Family</h2><p>The biggest highlight of the year came when we realized that we were on a
    journey of welcoming a new member to our family. We'd <a href="/year-2018-in-review">wonderful memories in welcoming
        Dhruvan</a>. We wanted to recreate similar memories this time as well
    but unfortunately, we ran into unforeseen medical challenges that required
    frequent in-hospital observations.
</p><p>
    Switching between work and attending to medical emergencies took a toll on my
    mental health. Fortunately, Working from home helped me to strike a balance
    between working and taking care of my family. It has helped us to stay
    together in difficult times and be supportive of each other.

</p><p><strong>Aaradhana</strong>, our baby girl was born during such tough times.
    All the
    struggles we endured,
    vanished the moment we received her for the very first time on our hands. With
    her, our family is now complete. We'll be ever grateful to God for her.
</p><p>Dhruvan has started attending school this year <em>virtually</em>. He has neither
    visited nor has any idea how the physical school would be. But Lakshmi is
    going to great lengths in compensating for that with a lot of physical and
    social activities. He has started to do many things on his own just by
    observing us.
</p><p>It warms my heart to see Dhruvan assist Lakshmi in taking care of his little
    sister, slowly fitting into his big brother's shoes. Time flies.
</p><p>
    Previously <a href="/year-2020-in-review">2020</a>, <a
        href="/year-2019-in-review">2019</a>,
    <a href="/year-2018-in-review">2018</a>, <a
        href="/a-year-that-was-2017">2017</a>, <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2021-in-review</link>
      <guid>https://sridhar.co/year-2021-in-review</guid>
      <pubDate>Thu, 30 Dec 2021 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2020 in review</title>
      <description>
        <![CDATA[<p>
    2020 was one of the most challenging yet memorable year of our
    life. Challenging because we were dealing with lockdown stress, being
    productive at work, organizing my brother's marriage, all amidst pandemic.
    Memorable because we were spending more time together with Dhruvan.
</p><section><h2>Professional</h2><h3>Books</h3><p>
    I've read the following 8 books as a part of the <a
        href="https://www.goodreads.com/user_challenges/19431225">Goodreads 2020
    challenge</a>.
</p><ol><li>When Breath Becomes Air by Paul Kalanithi - <a
            href="/books/when-breath-becomes-air">My notes</a></li><li>Atomic Habits by James Clear - <a href="/books/atomic-habits">My notes</a></li><li>JavaScript Patterns by Stoyan Stefanov
    </li><li>Sapiens: A Brief History of Humankind by Yuval Noah Harari
    </li><li>வீரயுக நாயகன் வேள்பாரி, பாகம் 1 by Su. Venkatesan
    </li><li>Hell Yeah or No: what's worth doing by Derek Sivers
    </li><li>Your Music and People: creative and considerate fame by Derek Sivers
    </li><li>Coffee Can Investing: The Low Risk Road to Stupendous Wealth by Saurabh
        Mukherjea
    </li></ol><h3 class="hyperlinked-header" id="sideproject"><a href="#sideproject">Side Projects</a></h3><p> Released <a href="https://github.com/sridharrajs/tabpro">TabPro</a>, a
    Firefox add-on to manage tabs, and updated pin-tweet to <a
            href="/pin-tweet-auto-tagging">v1.1</a>.
    Open sourced <a href="https://github.com/onebible">Onebible</a>, my first
    Android app. I got started with GraphQL but yet to do
    a side project using it.
</p><div class="image-container"><img alt="sridharrajs github 365"
         class="responsive" src="/images/github-2020.png"/></div><h3>Stack Overflow</h3><p>
    I was not active on StackOverflow yet
    <a href="https://stackoverflow.com/users/978501/sridhar">
        my reputation </a> grew from
    <code>6856</code> to <code>7975</code>, a <code>16%</code> increase.

<div class="image-container"><img alt="sridharrajs stack overflow"
         class="responsive" src="/images/so-2020.png"/></div></p><div id="mobile"><h3 class="hyperlinked-header"><a href="#mobile">Mobile</a></h3><p>
        I had a tough time getting my iPhone's battery replaced due to the
        pandemic. With all my contacts, 2FA codes in it, I found it painful to
        configure the replacement device. It made me
        realize how dependent I've become on a particular platform. I took this as an
        opportunity to move all my digital dependencies to open standards that are
        independent of both Android and iOS. I started consolidating all my
        contacts across accounts in a single vcf file. If I need to make any contact
        change, I'll do it on this file, and then have it imported to all my devices.
        Similarly, moved away from standalone authenticator apps to <a rel="nofollow"
            href="https://authy.com/blog/authy-vs-google-authenticator/">Authy</a> to
        sync my 2FA codes across devices.
    </p><p>I'm planning to switch between Android and iPhone frequently to keep my
        dependency in check. I intend to format the device before using it to
        check the reliability of my tech-independent strategy. Currently, I'm using an
        Android with minimal set of apps.
    </p><div class="image-container"><img alt="mobile screen 2020" height="250"
             class="responsive" src="/images/mobile-20201.png"/></div></div><h3>Donations</h3><p>This year I donated to <a href="https://www.fsf.org/">the Free Software
    Foundation</a>, Wikipedia, and Mozilla.</p></section><h2>Personal</h2><p>Working from home had freed-up 2 hours of commute
    time for my other works. I was insanely productive during the first two
    months of the lockdown. I read 4 books, made huge progress in all my side
    projects,
    checked off a lot of pending items from my to-do list, all using the newly
    available time. The problem with being too productive is that your days become
    monotonously
    boring. With highly optimized daily routines and no physical activity, I
    burned out. I couldn't gather myself to focus at all.
</p><p>
    While I was struggling with this, Amma & appa were
    having a good time away gardening at our home backyard.
</p><div class="main"><div class="image-container"><img alt="வெண்டைக்காய் செடி / Lady finger plant"
             class="responsive" src="/images/garden-1.jpeg"/><span>வெண்டைக்காய் செடி / Lady finger plant</span></div><div class="image-container"><img alt="சீத்தா மரம் / Wild sweetsop"
             class="responsive" src="/images/garden-2.jpeg"/><span>சீத்தா மரம் / Wild sweetsop </span></div><div class="image-container"><img alt="புளிச்சக்கீரை / Fermented lettuce"
             class="responsive" src="/images/garden-3.jpeg"/><span>புளிச்சக்கீரை / Fermented lettuce </span></div><div class="image-container"><img alt="வெத்தலை கொடி / Betel vine"
             class="responsive" src="/images/garden-4.jpg"/><span>வெத்தலை கொடி / Betel vine </span></div><div class="image-container"><img alt="தூதுவளை கொடி / Solanum Trilobatum"
             class="responsive" src="/images/garden-5.jpg"/><span>தூதுவளை கொடி / Solanum Trilobatum</span></div><div class="image-container"><img alt="பாகற்காய் கொடி / Bitter gourd"
             class="responsive" src="/images/garden-6.jpg"/><span>பாகற்காய் கொடி / Bitter gourd </span></div><div class="image-container"><img alt="தக்காளி செடி / Tomato plant"
             class="responsive" src="/images/garden-7.jpg"/><span>தக்காளி செடி / Tomato plant </span></div><div class="image-container"><img alt="கர்பூரவள்ளி / Indian Borage"
             class="responsive" src="/images/garden-8.jpg"/><span>கர்பூரவள்ளி / Indian Borage </span></div><div class="image-container"><img alt="மனதக்காளி / Solanum nigrum"
             class="responsive" src="/images/garden-9.jpg"/><span>மனதக்காளி / Solanum nigrum </span></div><div class="image-container"><img alt="சுண்டைக்காய் செடி / Solanum torvum"
             class="responsive" src="/images/garden-12.jpg"/><span>சுண்டைக்காய் செடி / Solanum torvum </span></div><div class="image-container"><img alt="வாழை மரம் / Banana tree"
             class="responsive" src="/images/garden-13.jpg"/><span>வாழை மரம் / Banana tree </span></div><div class="image-container"><img alt="பப்பாளி மரம் / papaya tree"
             class="responsive" src="/images/garden-11.jpg"/><span>பப்பாளி மரம் / papaya tree </span></div><div class="image-container"><img alt="முருங்கை மரம் / Drumstick tree"
             class="responsive" src="/images/garden-14.jpg"/><span>முருங்கை மரம் / Drumstick tree</span></div><div class="image-container"><img alt="காராமணி / Vigna unguiculata" class="responsive"
             src="/images/garden-16.jpg"/><span>காராமணி / Vigna unguiculata </span></div></div><p><strong> One of the things that 2020 had taught me is that you need to have a <em>real
    physical</em> hobby that is not related to your work. This is necessary to
    recharge your mind and body.</strong> Gardening would serve as a better option
    than
    reading books. Reading books is great, but it complements my work. With
    gardening, you get a chance to be with Nature.
</p><h3>Finance</h3><p>
    We made good progress on the financial front. I & Lakshmi opened a joint
    account for managing our home expenses. I closed all insurance policies except
    a term, stopped my SIP in ELSS, and started investing in an
    index fund for the long term.
</p><h3>Health</h3><p> Joining the Gym was one of the best things I did in 2020. It felt great and
    helped me to recharge myself. I'm planning to work on my fitness goals and
    improve my eating habits in 2021.</p><h3>Family & Self</h3><p>
    Though 2020 was challenging, we never had any shortage of celebration. <a
        href="https://sarav.co/">Saravanan</a>,
    my brother got married. We had invited only a few close friends and
    family members.</p><p>
    The real reason why 2020 became memorable was solely due to
    Dhruvan. Few first moments in life that are always special. The
    moments that won't happen again. The moments that you should never miss. You
    should consider yourself lucky if you get to witness them. We witnessed one
    such moment. We captured the moment Dhruvan walked for the very first time.
    With all the screams, and laughter he ran across our living room. I'm sure
    with the video, the moment will remain with us for eternity. I want to
    play the video to him when gets the age to understand it. With him around,
    our days were filled with pleasant surprises. I've captured boatloads of
    videos running into multiple GBs of all the cute things he said and did.
    For this very reason, 2020 will always be
    memorable for me and Lakshmi.
</p><p>A recap of 2020’s goals</p><ol><li><strong>
            Bring down mobile usage to 30mins/day.</strong> - Sort of became irrelevant.
        There is no
        point in obsessing over the mobile screen time when it is the only means to
        do a video call with your family.
    </li><li><strong><strike>
                Ship at least one side project. </strike></strong> - Launched TabPro and
        updated pin-tweet v1.1.
    </li><li><strong>
            Complete at least one item from my bucket
            list. </strong>
        - I was not specific about what that one item would be. In retrospection,
        this was a bad goal.
    </li><li><strong><strike>
            Go deep and reinvent the wheel for at least some of the items I
            do.</strike></strong>
        - When I wrote it, I implicitly meant the things I could do with this
        site. So, wrote the site from scratch, including the sitemap.xml generator
        and
        the emailing system (using Amazon
        SES).
    </li><li><strong><strike>
            Focus on health</strike></strong> - Made it a habit to hit the Gym
        every day.
    </li></ol><h3>New goals for 2021</h3><p>Unlike last year, I want to set one goal specific for each of the
    foundational(family, health, and work) pillars of my life.
</p><ol><li><strong>Follow offline Sundays</strong> - While I was in Mumbai, I use to follow
        this. I need to start following it again.
    </li><li><strong>Improve my eating habits</strong> - Increase our fruit consumption. Balance
        our carbohydrate intake and introduce a lot of variety to our food.
    </li><li><strong>Be tech independent</strong> - As with mobile, repeat the same exercise for
        music, photos, and computing device(laptop).
    </li><li><strong>Learn a new tech</strong> - Along with GraphQL, I want to learn a mobile
        language.
    </li></ol><p>
    Though things did not go the way we expected, I am grateful that we all made
    it
    to 2021. With vaccines around, I hope 2021 will be a great year for all of us.
</p><p>
    Previously <a href="/year-2019-in-review">2019</a>,
    <a href="/year-2018-in-review">2018</a>, <a
        href="/a-year-that-was-2017">2017</a>, <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2020-in-review</link>
      <guid>https://sridhar.co/year-2020-in-review</guid>
      <pubDate>Fri, 01 Jan 2021 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>pin-tweet, version 1.1 with auto tagging</title>
      <description>
        <![CDATA[<div><p>
    One way to improve your reading habits is to have <strong>a HEALTHY BACKLOG
    of all
    YOUR links in one place</strong> before you want to read them. Links from
    email
    newsletters, tweets, WhatsApp, and telegram all in one place. <a
    href="https://github.com/sridharrajs/browser-configurations#plugins">Pinboard
    browser extensions</a> can help on desktop but it was painful to move tweets
    to
    pinboard when using Twitter on the mobile browser.
  </p><p>
    I wrote <a href="https://github.com/sridharrajs/pin-tweet">pin-tweet</a>, a
    node utility script to solve it. As soon as I like a
    tweet, it posts the tweet to my pinboard account and removes it from my
    Twitter account. This way, I was able to have everything at one place.
  </p><p><a href="/pin-tweet-a-node-utility-to-move-your-liked-tweets-to-pinboard">Version
      1</a>, helped me to read posts in a single place. The next problem I
    faced was to have them categorized neatly.
  </p><p>
    I've addressed this in version 1.1, with rules.
  </p><script
    src="https://gist.github.com/sridharrajs/aee21a2fad9da27d104afb8eebd726dc.js"></script><ul><li>If a tweet contains <code>react</code> in it, tag it as
      <code>react</code>.
    </li><li>If the tweet has @kentcdodds's blog URL, tag it with <code>react</code>.
    </li><li>If the tweet contains @YouTube link, tag it with <code>video</code></li></ul><p>
    The idea here is to <em>read based on the free time and mood rather</em> the
    sequentially going through the list.
  </p><p>
    So, If you're using pinboard and Twitter, here you <a href="https://github.com/sridharrajs/pin-tweet">go</a>.
  </p></div>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/pin-tweet-auto-tagging</link>
      <guid>https://sridhar.co/pin-tweet-auto-tagging</guid>
      <pubDate>Thu, 17 Dec 2020 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>When Breath Becomes Air by Paul Kalanithi</title>
      <description>
        <![CDATA[<div class='image-container'><img
  alt="when breath becomes air by paul kalanithi"
  class="responsive"
  height="300" width="199"
  src="/images/when-breath-becomes-air-paul-kalanithi.jpg"/></div><ul><li>What do you do when death, a metabolism cessation that you've been
    trained to handle as a physician in your everyday routine, pays a personal
    visit?
  </li><li>
    When you came too close to realizing your potential, yet your future no
    longer exists?
  </li><li>
    When your own life is fading away, you contemplate having a child?
  </li><li>
    How do you live a meaningful life facing your mortality?
  </li></ul><p>These were the questions Paul Kalanithi, a 36-year-old
  neurosurgeon had to face after being diagnosed with Stage IV Lung cancer.
</p><p>Death isn'triddance new to Paul. As a resident neurosurgeon, he has been
  trained to handle it every day. His job was not merely to save lives, but to
  be a guide to the patient and their family. A guide who can help them to
  decide between the treatments and their tradeoffs. <strong> Tradeoff such as the
    ability to talk or a few extra months of mute life, a clear vision, or the
    fatal brain hemorrhage riddance. Neurologic suffering that the child has to
    endure their entire life or letting the life end. It is through this process
    that, paul encounters the question about life, death, and the meaning in the
    medical context. Generally, such questions would lead up to no answer since
    life and death are mere philosophical abstracts. But in the medical context,
    the question is not simply whether to live or die but what kind of life is
    worth living. </strong>Needless to say that the families suffered the most than
  the patient themselves, couping with the new reality. But after being
  diagnosed
  with Stage IV Lung cancer, this is going to be his first and the only time as
  a
  patient to answer the question for himself.
</p><p>
  99% of people select their job based on the pay, the work environment, and the
  hours. but that's the point. <strong> Putting lifestyle first is how you find
  a job -
  not a calling. </strong> But for Paul, neurosurgery is his calling. He was
  drawn by the
  excellence it demanded. The difference between life, death, and worse could be
  a matter of millimeters. When so much rests on your skills to save lives,
  being extremely competent becomes a moral requirement. He toiled hard,
  learning medicine, working 100+ hour works weeks, operating 36+ hour surgery.
  He has been building potential all through his time at residency, but now that
  potential would now go unrealized. After being diagnosed, he began
  re-evaluating his goals and aspirations in life. If he had 10 years, he would
  return to treating disease. If he had a year, he would write a book. If he had
  only three months, he would rather spend the time with the family.

</p><p>Though death may be a one-time event, <strong>living with a terminal illness is a
  journey whose only mission is to maximize the quality of remaining time</strong>. Paul
  and his wife discuss the idea of having a child. They both know that he’s
  going to die and that it will a distraction from their time together, but they
  understand that life isn’t about avoiding pain and suffering. That additional
  suffering may also be accompanied by extreme joy.
</p><p>They had the child.</p><p><blockquote>
  Yet one thing cannot be robbed of her futurity: my daughter, Cady. I hope I’ll
  live long enough that she has some memory of me. <strong> Words have a
  longevity I do
  not. </strong> I had thought I could leave her a series of letters — but what
  would they
  really say? I don’t know what this girl will be like when she is 15; I don’t
  even know if she’ll take to the nickname we’ve given her. There is perhaps
  only one thing to say to this infant, who is all future, overlapping briefly
  with me, whose life, barring the improbable, is all but past. <br/><br/>
  That message is simple:
  <br/><br/><strong>
  When you come to one of the many moments in life when
  you must give an account of yourself, provide a ledger of what you have been,
  and done, and meant to the world, do not, I pray, discount that you filled a
  dying man’s days with a sated joy, a joy unknown to me in all my prior years,
  a joy that does not hunger for more and more, but rests, satisfied. In this
  time, right now, that is an enormous thing.</strong></blockquote></p><p>This
  book and his daughter, Cady are the legacy that Paul has left us.</p><p>
  He faced each stage of his illness with grace -, not bravado or misguided
  faith that he would "overcome" or "beat" cancer with authenticity that allowed
  him to grieve the loss of the future he has planned and forge a new one. He
  cried on the day he was diagnosed, he cried on his last day in the operating
  room. He left himself to be open and vulnerable. Let himself be comforted.
  Being fully alive, full of hope not for an unlikely cure but for the days that
  were full of purpose and meaning. This is the life he was given, this is what
  he made of it.
</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/when-breath-becomes-air</link>
      <guid>https://sridhar.co/books/when-breath-becomes-air</guid>
      <pubDate>Fri, 28 Aug 2020 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to fix /Users/WebStormWebStorm.app does not exist in Mac</title>
      <description>
        <![CDATA[<p>
  I use Jetbrain's Toolbox to manage my Webstorm, AndroidStudio installations.
  Recently, when launching webstorm from terminal, I ran into <code>The file
  /Users/sridharrajs/Library/Application
  Support/JetBrains/Toolbox/apps/WebStorm/ch-0/201.7223.93/WebStorm.app does not exist.</code> I
  started to see this error after updating WebStorm via Toolbox.
</p><p>
  To fix this, we need to correct the <code>RUN_PATH</code></p><p>
  1.Find your executable location.

<blockquote> > which webstorm</blockquote>

For me, it was <code>/usr/local/bin/webstorm</code>.

</p><p>2. Find the <code>webstorm.app</code> in your Mac.

For me, it was in <code>/Users/sridharrajs/Applications/JetBrains Toolbox/WebStorm.app</code></p><p>3. Fix the broken <code>RUN_PATH</code> path. Open <code>/usr/local/bin/webstorm</code> in a text editor and replace the old run path with the current location of webstorm.</p><strong>Before</strong><div><img alt="setWindowSurfaceColorBuffer and flushwindowsurfacecolorbuffer"
       class="responsive" height="1481" src="/images/how-to-fix-users-webstorm-app-does-not-exist-in-mac-before.png"
       width="2000"/></div><hr><strong>After</strong><div><img alt="setWindowSurfaceColorBuffer and flushwindowsurfacecolorbuffer"
       class="responsive" height="1481" src="/images/how-to-fix-users-webstorm-app-does-not-exist-in-mac-after.png"
       width="2000"/></div><p>4. Save and Exit.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/how-to-fix-users-webstorm-app-does-not-exist-in-mac</link>
      <guid>https://sridhar.co/how-to-fix-users-webstorm-app-does-not-exist-in-mac</guid>
      <pubDate>Thu, 11 Jun 2020 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Atomic Habits by James Clear</title>
      <description>
        <![CDATA[<div class='image-container'><img
        alt="atomic habits by james clear"
        class="responsive"
        height="300" width="199"
        src="/images/atomic-habits-james-clear.png"/></div><section><h2>What is a habit?</h2><p>A habit is a behavior or routine that you do to solve life's problem spending the least effort.</p></section><section><h2>Why do habit matters?</h2><p>Habits matter because they can change <em>lives</em>.
</p><ul><li>If you've the habit of learning a new thing in your field every day, you can build a vast knowledge.
    </li><li>If you've the habit of being considerate in all your interactions, you can build a strong network.
    </li><li>If you've the habit of spending more than you earn each month, you'll end up in a debt trap.
    </li><li>If you've the habit of saving at least a little from your income irrespective of your spending, you'll attain
        financial independence.
    </li><li>If you've the habit of exercising every day, you'll stay healthy.</li></ul><p>You can leverage habits to improve your knowledge, network, finance and health. The key thing to note here is that
    you need to stick with them for years, for it to pay off. Because this is how habits work. <strong class="highlight"
                                                                                                       class="highlight">They
        don't add up, they
        compound.</strong>
    Once
    you reach the tipping point, you'll start to see remarkable results.
</p></section><section><h2>How can one make/break a habit</h2><p>Making/breaking a habit is a 4 step process</p><table class="table table-hover"><thead><tr><th>Law</th><th>How to Create a Good Habit</th><th>How to Break a Bad Habit</th></tr></thead><tbody><tr><td>I. Cue</td><td>Make it obvious</td><td>Make it invisible</td></tr><tr><td>II. Craving</td><td>Make it attractive</td><td>Make it unattractive</td></tr><tr><td>III. Response</td><td>Make it easy</td><td>Make it difficult</td></tr><tr><td>IV. Reward</td><td>Make it satisfying</td><td>Make it unsatisfying</td></tr></tbody></table><p>
    If a behavior is insufficient in any of the four stages, it will not become a habit.
</p><p>Eliminate the cue and your
    habit will never start. Reduce the craving and you won’t experience enough motivation to act.
    Make the behavior difficult and you won’t be able to do it. And if the reward is unsatisfactory, you won't do it
    again in the future.</p><p>Without the first three steps, a behavior will not occur.</p><p>Without all four, a behavior will not be repeated.
</p></section><section><h2>I. Cue</h2><p>The environment sets the bigger context for our behavior. Making or breaking habits becomes easy once you understand
    this. <strong>The cues within an environment initiates a behavior.</strong> This is why the people from the rehab
    center
    become
    re-addicted, once they stay in the same locality. The clue that caused the addiction in the first place still exist
    there.
</p><p>Two common cues are [Time] and [Location]. Create a separate environment for work, play, cooking, and
    entertainment</p><p>Eg:</p><ul><li>Bedroom, an environment to sleep.</li><li>Home Office, an environment to work.</li><li>Living room, an environment to use mobile, read the newspaper, relax, watch TV.</li></ul><p>Essentially, <strong>One place One use</strong>. Instead of relying on motivation and self-control, start filling
    these
    environments
    with clues that encourage the
    intended behavior.</p><strong>Priming your environment - make it obvious</strong><ul><li><strong>Bedroom</strong>: Invest in a good mattress and blackout curtains to improve your sleep.
    </li><li><strong>Home office</strong>: Invest in getting a highspeed Internet connection. Get a decent chair that takes
        care of
        your back and neck posture. Put your mobile in silent mode.
    </li><li><strong>Kitchen</strong>: Use smaller plates to reduce the amount of food you take. Keep nuts and fruits over
        the dining
        table. Always keep a bottle full of water over the table.
    </li></ul><p><strong>To break a habit - Make it invisible</strong></p><p>
    Remove the cue from the environment, your habit will disappear.
</p><ul><li><strong>Bedroom</strong>: Remove the TV from your bedroom and avoid taking a cellphone into the bedroom.
    </li><li><strong>Home office</strong>: Don't watch movies on your laptop.
    </li><li><strong>Living room</strong>: Don't take your laptop to your living room.</li></ul></section><section><h2>II. Craving</h2><p>
    Habits are dopamine-driven feedback loop. The more rewarding an opportunity appears to be, the more likely it is to
    become a habit. <strong>Every habit has a motivation</strong> and serves a purpose either good or bad. That is why
    we
    continue
    doing it.
</p><ul><li>Smoking a cigarette -> relief it provides</li><li>Brushing teeth -> clean mouth</li><li>Watching TV -> wanting to be entertained</li></ul><p>
    Friends and family have a huge impact on your habit formation. The Polgar sisters grew up in a family where chess
    was
    prioritized above all. It was praised and rewarded. In their culture, the obsession with chess was considered
    normal.
    Bill Gates's childhood had a similar obsession with solving puzzles and reading books.
</p><strong>To Feel motivated - Make it attractive</strong><p>
    We mimic our peers. If you want to improve your health, enroll yourself for a martial art or marathon. If you want
    to improve your
    knowledge, join a Meetup or book reading clubs. Essentially, join a culture where your desired behavior is the
    normal behavior.
    Surround yourself with people who have the habits
    you want to have.
</p><strong>To break a habit - Make it unattractive</strong><p>Increase the friction to attain the reward. </p><ul><li>To leave social media addiction, uninstall all social media apps, and use them only on the web
        browser on your phone. Don't post things. This breaks the dopamine feedback loop.
    </li><li>After watching a movie, uninstall the Netflix, Amazon app on your TV. Increase the friction of having to
        reinstall the app to keep a check on your mindless watching.
    </li></ul></section><section id="response"><h2 class="hyperlinked-header"><a href="#response">III. Response</a></h2><p><strong>The response is the actual habit you perform.</strong> They deliver the reward and forms the end of every
        habit.
        Practice is
        the most effective way of learning. So, instead of waiting for motivation to strike, act.</p><p>Lesser the friction to act, more like it to be a habit. Whenever possible, automate things. Automation can free
        you
        up for other tasks. <strong>You need to get started, before optimizing
            anything.</strong> Start with something that you can do within 2 minutes to build the
        momentum.</p><strong>Reducing the friction</strong><ul><li>If you want to eat healthier. Subscribe to the monthly vegetable pack of the nearby grocery for the home
            delivery.
        </li><li>Set automatic payments to move 10% of your salary into saving, once salary hits your bank account.</li><li>Set up automatic bill payments to save time that can be spent on knowledge building.</li></ul><strong>Increasing the friction</strong><ul><li>
            To be more present, uninstall all the mail apps on the phone and use a web browser to check your email.
        </li><li>
            Mute all groups by default in whats app and telegram. And selectively mute groups in slack.
        </li></ul><p></p></section><section><h2>IV. Reward</h2><p>
    We remember only the ending experiences of the habits. <strong>This experience needs to be satisfying for it to
    last</strong>.
    Our
    mind enjoys immediate rewards over the delayed results. You need to feel progress on the completion of a
    behavior. Our mind anticipates these dopamine surges to be satisfied, to be able to trigger the craving which is
    required for repeating the behavior in the future. Get analytical about reward and quantify it. The reward
    needs to be measurable, to denote progress. Only progress triggers a satisfying feeling.
</p><strong>Using dopamine surges - make it satisfying</strong><p>You can use a habit tracker to build a streak of how much you did an activity. Keep the
    streak
    alive. Eg: Github code streak. </p><strong>How to break - make it unsatisfying</strong><p>You can count the number of days you didn't watch TV. The longer the chain goes, the more motivated you'll be. Don't
    break the chain.</p></section><section><h2>How to pick a habit to form</h2><p>First, focus on who you wish to become instead of what you want. The "who" here refers to the type of person who
    could get the
    result that you aim for. A writer. A programmer. A musician. An entrepreneur. Work backward from the result.
    <strong>
        Start
        building deliberate practices and processes to set yourself in that path.</strong></p><blockquote>
    Habit + deliberate practice = mastery
</blockquote><p>
    Eg: If you want to be a writer, start writing every day.
</p><p>
    Identity is what you believe yourself to be. Your habit
    shape your identity, your
    identity shape your habit. It is a two-way street. <strong class="highlight">True
    behavior change is an identity change.</strong>
    The more you do, the more you reinforce the identity associated with that habit. The more pride you have in a
    particular aspect of your identity, the more motivated you will be to maintain the habit associated with it. </p><p>If you want to increase your chance of success, <strong class="highlight">choose the right field of competition that
    suits your
    personality.</strong>
    Michael Phelps, who won the most number of gold in Olympics history was a 6 feet 4-inch tall guy with strong back
    and
    arms. He was well suited for swimming, besides being trained for that. <strong class="highlight">You can stand out
        by combining your
        personality with your skills.</strong></p><p>Some closing tips on how to approach habit building</p><ol><li>To quickly get started with habit formation. You can pair up your newer habit with your current ones. After
        [current habit], I'll [new habit]
    </li><li>To master a habit, start with repetition, not perfection.</li><li>The greatest threat to success is not failure, but boredom. Stick to the schedule; don't let life get in the
        way. Focus on the progress than expecting immediate results.
    </li><li>
        Building a system that supports your habit steak is the most effective way to maintain a habit. Relying
        on will power to maintain the habit streak isn't effective.
    </li><li>
        Since habits compound. Never interrupt it unnecessarily. Never miss twice in a row. Missing once is an accident.
        Missing twice is the beginning of a new habit.
    </li><li>
        Establish a system for reflection and review.
    </li></ol></section>

]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/atomic-habits</link>
      <guid>https://sridhar.co/books/atomic-habits</guid>
      <pubDate>Wed, 25 Mar 2020 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Fullstack React: The Complete Guide to ReactJS and Friends by Anthony Accomazzo</title>
      <description>
        <![CDATA[<div class='image-container'><img
        alt="notes from eloquent javascript"
        class="responsive"
        height="300" width="199"
        src="/images/fullstack-react-the-complete-guide-to-reactjs-and-friends-by-anthony-accomazzo.jpg"/></div><p>
    React is a JavaScript library for building user interfaces.
</p><p>
    To understand react, we need to understand two things.

<ol><li>How react renders components</li><li>How data flows</li></ol></p><h4>How does React work</h4><p>
    Everything that you build with React builds is a react component. These react components are essentially a
    JavaScript objects. React takes these JavaScript object and constructs a tree representing the actual DOM. This
    virtual tree of react element representing the DOM is called virtual DOM.
</p><p>
    When we change a react element, React first batches the changes. It then does a comparison of the current and the
    previous state of the virtual DOM and updates the difference to the browser DOM for us. This comparsion is done by
    efficient diffing algorithm.
</p><script src="https://gist.github.com/sridharrajs/82408e1e1814fa7921f0fabd783417f0.js"></script><div>
    Things to note.
    <ol><li>To differentiate from the HTML components, React recommends naming components with initial capital letter.
            eg <code>&lt;App/&gt;</code></li><li><code>jsx</code> is the file extension. JSX = java script extenstion. <code>jsx</code> is syntactic sugar
            for html/css-in-js. <code>jsx</code> is
            transformed into <code>js</code> by Babel with <code>react</code> and
            <code>es2015</code> preset compiles these JSX down to <code>React.createElement()</code> calls.
        </li></ol></div><h4>How data flows</h4><p>
    React favours one-way data flow. i.e., the data flows down from <code>root</code> to components via
    <code>state</code> and <code>props</code>.
</p><div><h4>State</h4><p>
        State is where we hold the data that's local to the component. hence state is private, mutable. If it gets
        passed to the child components, then it becomes the props of child component. We can modify the state using
        <code>this.setState({})</code>. <code>this.setState({})</code> is asynchronous. All the updates are queued and
        the updates to the DOM
        is made after diffing.

    </p></div><div><h4>Props</h4><p><code>props</code> is the short form properties. props are immutable piece of data that are passed to child
        components from parents.
    </p></div><p><em>For both the props and state change, the component will be re-rendered.</em></p><div><h4>Component</h4><p>
        A component ideally should be responsible for only one functionality. Based on functionality, we can classify
        the components into two types.</p><p>
        Based on functionality, we can classify the components into two types.
    </p></div><ol><li>Functional component</li><li>Class component</li></ol><div><h4>State</h4><p>
        State is private, mutable and local to the component.
    </p><p>
        a value can be a state, if it cant be passed via Props
        https://medium.com/@wisecobbler/using-a-function-in-setstate-instead-of-an-object-1f5cfd6e55d1
        this.setState() is asynchronous.we need to use this.setState() after estting the inital state in the
        constructor.
        we need to use this.setState() to modify the state. It triggers the re-render
        when state changes we re-render the component. when ever a state update depends on the it is preferred to pass a
        function to current state. this is because it is
        async. react may not update the state immediately. it queues the update.
    </p><script src="https://gist.github.com/sridharrajs/6b26917b0bfca73ba3a6eba9b89d800d.js"></script></div><div><h4>Props</h4><p> props is one way data pipeline.props are immutable piece of data taht are passedinto child componentsfrom
        parents. state is where we hold the data
        thats local to the component. stateis private and mutable.props are the parameter. input to the function.
    </p></div><strong>The component will re-render when a props or state change.</strong><h4>Functional component</h4><p>
    Functional component doesn't have <code>state</code>.
</p><script src="https://gist.github.com/sridharrajs/4c8713aaf39c012d5e2d9ebe63d88a70.js"></script><h4>Class component</h4><p>
    This has <code>state</code>. <code>render()</code> is the only required method to be defined in a React class
    Component. After a
    component is <code>mounted</code> and <code>initialized</code> render() will be called.
</p><script src="https://gist.github.com/sridharrajs/e02c855105f2401a688d28024b10ea33.js"></script>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/fullstack-react</link>
      <guid>https://sridhar.co/books/fullstack-react</guid>
      <pubDate>Sat, 11 Jan 2020 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2019 in review</title>
      <description>
        <![CDATA[<p>
  2019 was an incredible year for me both personally and professionally. I
  gained a lot of clarity around my life's
  priorities.
</p><section><h2>Professional</h2><strong>Books</strong><p>
  I read just enough books to complete the <a
    href="https://www.goodreads.com/user_challenges/14602743">Goodreads 2019
    challenge</a>. Following
  were the books that I read.
</p><ol><li>Siddhartha by Hermann Hesse</li><li>Vetri Vendumenil by Balakumaran</li><li>Refactoring UI by Adam Wathan</li><li>The Art of War by Sun Tzu</li><li>Deep Work: Rules for Focused Success in a Distracted World by Cal
    Newport
  </li><li>Fullstack React: The Complete Guide to ReactJS and Friends by Anthony
    Accomazzo
    - <a href="/books/fullstack-react">My Notes</a></li></ol><div><strong>Github</strong><div class="image-container"><img alt="sridharrajs github 365"
      class="responsive" src="/images/sridharrajs-github-365.png" /></div><p>
    I made 780 contributions to GitHub. Developed and Open sourced two utility
    scripts - <a
      href="https://github.com/sridharrajs/goodreads-parser">goodreads-parser</a>,
    <a href="/pin-tweet-a-node-utility-to-move-your-liked-tweets-to-pinboard">pin-tweet</a>.
    Moved all
    of <a href="/works">my
      scripts and configurations</a> to GitHub. I have done a Github 365 this
    year.
  </p><p>Managing two domains, code.sridhar.co and blog.sridhar.co seemed a bit too
    much of an effort. So, I consolidated
    all
    my works under
    <a href="https://sridhar.co">sridhar.co</a></p></div><h3>Side Projects</h3><p>
  I launched <a href="/recommendedreads-in-a-book-recommendation-site">recommendedreads.in</a>,
  a site that helps to choose the most recommended books for book lovers. This
  site was built using newly acquired
  <a href="/im-learning-python">Python skills</a>. Also, Django was an
  incredible fit for a site which required heavy
  admin features for the data management. For this year, I learnt
  <code>react</code>.
</p><p>
  I and <a href="https://arunmozhi.in">arunmozhi</a> built <a
    href="https://tecoholic.github.io/LokShaba2019/">a
    visual
    dashboard</a> to analyze the LokShaba 2019 Election Results in a record 24
  hours.
</p><strong>Stack Overflow</strong><p><a href="https://stackoverflow.com/users/978501/sridhar">My Stack Overflow</a>
  reputation grew from
  <code>5207</code> to <code>6856</code>, a <code>31%</code> fetching me a
  <span class='silver-badge'>node.js</span> silver badge.

  <div class="image-container"><img alt="sridharrajs stack overflow"
      class="responsive" src="/images/sridhar-stack-overflow.png" /></div></p><h3>Mobile</h3><p>
  My mobile is still minimal. I'm using <a
    href="https://support.apple.com/en-us/HT208982">Screen Time</a> to manage
  the internet access and time I spent on my mobile. On an average, my mobile
  usage is about 43 mins/day.
  <div class="image-container"><img alt="mobile screen 2019"
      class="responsive" src="/images/mobile-screen-2019.png" /></div></p><h3>Donations</h3><p>This year I donated to the <a href="https://www.fsf.org">Free Software
    Foundation</a>, <a
    href="https://minikeepass.github.io">MiniKeePass</a>,
  <a href="https://en.wikipedia.org/wiki/Main_Page">Wikipedia</a>, <a
    href="https://www.mozilla.org/en-US/">Mozilla</a> and <a
    href="https://www.debian.org/">Debian</a></p></section><section><h2>Personal</h2><h3>Finance</h3><p>
  Based on the <a href="/advice-to-my-20-old-self/">learning that I got</a>, I
  consciously started working on creating
  my own financial plans to meet my needs. Got a term insurance that covers 5
  times of my
  annual salary. I think I'll continue to improve on this throughout 2020.
</p><h3>Health</h3><p>When this year started, I was 74kg, now I'm at 78. This is one of the action
  item for me to work on 2020.</p><h3>Family</h3><p>
  What they say about having a kid is true. Your day slows down. You start to
  think in ways that were unknown to you
  up until then. You have to constantly reprioritize all your work to
  get anything done. You have to learn to plan your work to be done in a
  discrete fashion. This is what I and Lakshmi
  mostly were doing all this year. Keeping dhruvan as our only priority and
  having everything else around him.
  Putting our conveniences away, just to be available to him all the time.
</p><p>
  We created memories in as many things as we could. Happiness to us, at this
  phase of our life, was to watch dhruvan turn 1. Everything else can wait.
</p><p><strong>
    In a true sense, Life becomes more meaningful once You become a parent. </strong></p></section><section><h2>Goals for 2020</h2><p>I have set myself 5 goals for 2020 based on my priorities</p><p><ol><li>Bring down mobile usage to 30mins/day.
    </li><li>Ship at least one side project.</li><li>Complete at least one item from my bucket list.
    </li><li>Go deep and reinvent the wheel for at least some of the items I do.</li><li>Focus on health.
    </li></ol></p><p>
  2019 was unique in its own way. Hope 2020 will be great for all of us.
</p></section><p>
  Previously <a href="/year-2018-in-review">2018</a>, <a
    href="/a-year-that-was-2017">2017</a>, <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014">2014</a></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2019-in-review</link>
      <guid>https://sridhar.co/year-2019-in-review</guid>
      <pubDate>Tue, 31 Dec 2019 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Announcing pin-tweet, a node utility to move your liked tweets to Pinboard</title>
      <description>
        <![CDATA[<div><p>
        I am open sourcing <a href="http://github.com/sridharrajs/pin-tweet">pin-tweet</a>, a utility program written in
        nodejs that moves your liked tweet to Pinboard.
    </p><h2>Why</h2><p>
        I am a power use of Twitter and <a href="/which-is-your-third-place/">relay on it</a> for
        to getting to know things. When I see something interesting to read on twitter, I’ve couple of options to come
        back
        to it later.
    </p><ul><li>Use Twitter offered bookmarking feature to bookmark it.</li><li>Auth Pinboard for my twitter access to mirror my liked tweets</li></ul><p>
        Option 1 is straight forward. Read when you get time. Remove the bookmark, when you’re done. But I prefer liking
        a tweet over bookmarking because, it just requires a single tap.

        Option 2 is quick and easy. But the downside is that, reading and deleting the link on Pinboard won’t unlike the
        tweet on Twitter.

        After using both the options for a long time, I took time to write my own utility that moves my liked tweets
        from twitter to pinboard for reading. Also, the things that I need to read is in one place instead of being
        scared across apps.
    </p><p>I invite you all to check <a href="http://github.com/sridharrajs/pin-tweet">pin-tweet</a></p></div>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/pin-tweet-a-node-utility-to-move-your-liked-tweets-to-pinboard</link>
      <guid>https://sridhar.co/pin-tweet-a-node-utility-to-move-your-liked-tweets-to-pinboard</guid>
      <pubDate>Wed, 01 May 2019 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Sell by Subroto Bagchi</title>
      <description>
        <![CDATA[<p>First and foremost thing that you need to understand is, Selling is no longer
  professional in and of itself. If you
  need other people to buy your idea (product or vision)you need to know how to
  sell. Hustling or be being intrusive
  doesn't work because at the end of the day people are people. You need to be
  empathetic with a clear end goal to get
  buy ins.</p><blockquote><p>you need to figure out who the buyer is, what we must say to them, as
    well as how and when.</p><p>process can be look at me, listen to me, buy my words even before you buy
    my wares, lets agree on the terms of
    our transaction, now tell every one about me and finally come back for
    more</p></blockquote><p style='text-align:center'><img
  alt="sell the art, the science, the witchcraft by subroto bagchi"
  class="aligncenter size-medium wp-image-1085"
  height="300" width="199"
  src="/images/sell-the-art-the-science-the-witchcraft-by-subroto-bagchi.jpg"/></p><section><h2>Prospecting</h2><p>Prospecting means seeking new territories with a clear end goal. Taking your
  product to someone you have sought out,
  whom you didn't know before and who doesn't necessarily have a stated need for
  what you are selling.</p><ol><li>Segment the people</li><li>Cast wide net among them</li><li>Figure out the customers who is most likely to make a purchase.</li></ol><p>Step 1 needs to be wide open so that you have a decent number at Step 3. For
  Step 2, you can use email to send
  information, schedule a phone call or face to face meeting at a convenient
  time.</p><blockquote><p>The idea that prospecting is successful only when a particular connections
    and negotiation results in a closed
    deal is a narrow way of viewing the sales process. <strong>Many connections that
      you make when you are out
      prospecting may yield rewards of different kind.</strong></p></blockquote></section><section><h2>Importance of Google quotient</h2><p>Before you search the prospects, the clients searches you. <strong>They use
  LinkedIn to know you professionally, Google
  you to know your products and services that you offer and Social media to know
  the pulse and review of them. If you
  aren't on any of those places, or there, but without strong presence, then
  you're a commodity.</strong></p><p>If the client considers you to be a commodity even before you approach them,
  there is a lesser chance for you to have
  the deal. End of the day People don't like to buy from someone who is not
  special. Even if you manage the deal, you
  can't command a premium because value is in the eyes of the beholder. So,
  Always dress up; do not dress down.</p></section><section><h2>Product and pricing</h2><p><strong>You really need to believe in your product.</strong> Since the value of a
  product is determined by the perception of
  the customer. Belief in the value your product delivers, is necessary to
  persuade the customer. <strong>If you don’t
    believe in your product, do not sell.</strong></p><p>Never go play with single story and single pitch. Have variations.</p><p>Also, when you are pricing a product, quote perceived value instead of the
  cost to manufacture the product.</p></section><section><h2>Connecting with your customer</h2><p><strong>You should be selling a solution to customer's pain instead of pushing
  your product.</strong> Be bold and ask
  questions. Don't presume things. Asking questions brings clarity. It is a
  strong indicator that you understood the
  pain right. Spend time in knowing Who is who. Play well with them and other
  partners of your clients to understand
  the pain before jumping into solution creation. Understanding the why-what and
  taking responsibility shows
  commitment.</p><blockquote><p>Good news can arrive in mail but a bad news in person. No one is perfect.
    but <strong>you will be judged for your
      response to the situation.</strong></p></blockquote><p>Present a human face at each step of the interaction. At each step, it is
  about the individuals. Customers need to
  see the names on the back of the jersey.</p><p>Once the project is over, thank the partners and others who worked along with
  you. People move on and change jobs and
  you are bound to get called again.</p></section><section><h2>Make it visual</h2><p><strong>People are visually driven.</strong> Prefer mock ups, prototypes over documents
  where ever possible. Show them the POC
  that you've built. Do things that will help them to see and experience what
  your proposed solution would look like.
</p></section><section><h2>Ask</h2><blockquote><p>People who sell must be supremely comfortable with the act of asking. <strong>The
    point is to never fear rejection and
    not to give up on a chance by giving into fear.</strong></p><p>Ask for directions, ask for leads, ask for referrals, ask for the request
    for proposal, ask for order above all
    ask for money. <strong>Ask you have nothing to lose.</strong></p></blockquote></section><section><h2>Presentation</h2><p><strong>Spell check your slides, provide proper attributions to logos and charts
  that are taken from the Internet. If you
  don't do it, it is unprofessional.</strong></p><p>Arrive early instead of on time, pre test the video that needs to be
  played.</p><p>Allow people to settle down, and calculate how much time is left for the
  presentation. Pay attention to those who
  joined on the call late. After understanding the mood and time limit, present
  the personalized deck with what you’ve
  learned about the Client and their needs before proposing the solution.</p><p>When presenting maintain an eye contact. Pause and look often if everyone is
  following. Keep ample time for QA, seek
  feedback. Listen before answering. Reply in short. If you don’t know, follow
  up when you know the answer.</p><p>To be champion seller, read up a lot on history, science, culture. Play for
  the long haul to outsmart the
  competition. Be informed and interesting all the times. At times, failing is
  necessary to improve and innovate.</p><blockquote><p>Book recommendations: <a
    href="http://www.goodreads.com/book/show/10534.The_Art_of_War">Art of
    war</a></p></blockquote><p>To be successful, you need to be genuinely interested in people and their
  emotions. So, be curious and learn to tell
  a story.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/notes-from-sell</link>
      <guid>https://sridhar.co/books/notes-from-sell</guid>
      <pubDate>Sat, 30 Mar 2019 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Announcing recommendedreads.in, a book recommendation site</title>
      <description>
        <![CDATA[<div><p>I present you, <a href="http://recommendedreads.in/">recommendedreads.in</a>, a new side project that helps you
        to
        read the most recommended books by the curators.
    </p></div><section><h2>Idea</h2><p>
    As a book reader, one of the challenges I face is, "<strong>How do I pick my next book to read?</strong>".

    Jeff atwood has <a href="http://blog.codinghorror.com/recommended-reading-for-developers/">Recommended Reading for
    developers</a>, Dhh has <a
        href="http://signalvnoise.com/posts/3375-the-five-programming-books-that-meant-most-to-me">5 programming books
    that means most to him</a>, Stack Overflow community has <a
        href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read">Most
    influential book every programmer should read</a> and Steve Yegge has <a
        href="http://sites.google.com/site/steveyegge2/ten-great-books">10 great books</a>.

    Though eventually, I might want to read all the books mentioned in those list. Which list should I start first? or
    better Which list has books that can have maximum impact on my life and work? What would be the cost, if I wrongly
    choose a list to read.

</p></section><section><h2>How</h2><p>
    After thinking about that, I arrived at a simple logic. <strong>Instead of burning through the recommendation list,
    build your own list. i.e., Built a list of most recommended books based on the number of times it was recommended by
    the curators in their list.</strong></p></section><section><h2>Why</h2><p>
    If I carefully pick the most recommended books, I can have maximum impact on my life and career with minimal
    reading.

    Also, choosing books this way, will be of good mix since the curators are from different domains.

</p><div class="drop-shadow"><img alt="recommendedreads.in" class="responsive"
         height="480" src="/images/recommendedreads.in_.png" width="1002"/></div><div><p>
        recommendedreads has 3 sections.
    </p><ol><li>Shelves</li><li>Books</li><li>Curators</li></ol></div><p>
    2 & 3 are straight forward. Shelves is something like grouping based on a common attribute.

    For eg: <a href="http://recommendedreads.in/curators/jason-fried">Jason
    Fried</a> has shared book recommendations on multiple places. The books that he has shared on the Twitter will be
    grouped under
    <a href="http://recommendedreads.in/shelves/jason-fried-recommended-on-twitter">Twitter
        shelve</a> and similarly the books that he has shared on ProductHunt will be grouped under <a
        href="http://recommendedreads.in/shelves/jason-fried-producthunt">ProductHunt shelve</a>

    I invite you all to check <a href="http://recommendedreads.in/">recommendedreads.in</a> and share me your thoughts
    :)
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/recommendedreads-in-a-book-recommendation-site</link>
      <guid>https://sridhar.co/recommendedreads-in-a-book-recommendation-site</guid>
      <pubDate>Wed, 27 Feb 2019 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to resolve setWindowSurfaceColorBuffer and flushwindowsurfacecolorbuffer error in Android</title>
      <description>
        <![CDATA[<p>
    I faced a strange issue today when developing an android app.

</p><p><blockquote>
    emulator: setWindowSurfaceColorBuffer: bad window surface handle 0x5
    emulator: fb::flushwindowsurfacecolorbuffer: window handle 0x9 not found
</blockquote></p><p>
    These errors started appearing in Event Log window and app build started failing. After long hours of searching the
    Internet for it, Wiping data from the simulator seem to be the only solution that works.

</p><p><blockquote><strong>Tools</strong> Menu -><strong>AVD Manager</strong></blockquote></p><p>
    Choose the dropdown under <strong>action</strong> column of the device which you’re using and select <strong>Wipe
    Data</strong>.
</p><div><img alt="setWindowSurfaceColorBuffer and flushwindowsurfacecolorbuffer"
         class="responsive" height="1481" src="/images/setwindowsurfacecolorbuffer.png"
         width="3151"/></div>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/how-to-resolve-setwindowsurfacecolorbuffer-and-flushwindowsurfacecolorbuffer-error-in-android</link>
      <guid>https://sridhar.co/how-to-resolve-setwindowsurfacecolorbuffer-and-flushwindowsurfacecolorbuffer-error-in-android</guid>
      <pubDate>Wed, 06 Feb 2019 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2018 in review</title>
      <description>
        <![CDATA[<p>Year 2018 was huge for me both professionally and personally. I turned <a
        href="/advice-to-my-20-old-self/">30 and did a retrospective</a>.</p><section><h2>Professional</h2><p><strong>Reading</strong></p><p>I completed <a href="http://www.goodreads.com/user_challenges/10346192">Goodreads 2018 challenge</a> reading 9
    instead of 6 books. Following were the books I read.</p><ol><li>Men Are from Mars, Women Are from Venus by John Gray</li><li>20 Years of KDE: Past, Present and Future by Lydia Pintscher</li><li>The First Step is the Last Step by Jiddu Krishnamurti</li><li>Natural Language Processing with Python by Steven Bird</li><li>Eloquent JavaScript, 3rd edition by Marijn Haverbeke - <a href="/books/notes-from-eloquent-javascript/">My Notes</a></li><li>Dive Into Python 3 by Mark Pilgrim</li><li>Sell: The Art, The Science, The Witchcraft by Subroto Bagchi - <a href="/books/notes-from-sell/">My Notes</a></li><li>Think Python: How to Think Like a Computer Scientist by Allen B. Downey</li><li>Mastering Emacs by Mickey Petersen</li><li>Parthiban Kanavu by Kalki</li><li>Ponniyin Selvan I by Kalki</li><li>Ponniyin Selvan II by Kalki</li><li>Ponniyin Selvan III by Kalki</li><li>Ponniyin Selvan IV by Kalki</li><li>Ponniyin Selvan V by Kalki</li></ol><p>I reread book 10 through 15 this year.<br></p><p><strong>Stackoverflow</strong></p><p>I unlocked a minor achievement, when my Stackoverflow activity had an <strong>impact of ~1.0 million people</strong>. My reputation grew <code>3294</code>
    to <code>5207</code>, <code>59%</code> increase from last year.</p><div class="image-container"><img alt="github sridharrajs"
         class="responsive" src="/images/1million.jpeg"/></div><p><strong>Github</strong></p><p>I consolidated my codes repos by moving them from BitBucket to private Github account and made 260 contributions in
    2018.</p><div class="image-container"><img alt="github sridharrajs"
         class="responsive" src="/images/sridharrajs-SridharrajS-·-GitHub.png"/></div><p>Other than few upstream commits to <a href="http://github.com/godlytalias/Bible-Database/commits/master">bible
    database</a>, I mostly worked on couple of new side project which I couldn't finish. Hope, I'll be able to launch
    them in 2019</p><p>I learnt <a href="/im-learning-python/">Python-Django</a> this year. My android side project,
    <a href="http://play.google.com/store/apps/details?id=co.sridhar.commithub">Commithub - a sleek client for
        BitBucket</a> has crossed 100 downloads in play store.</p></section><section><h2>Mobile</h2><p>Uninstalled most of the apps, to cut down on the amount of time I spend on mobile. This is my current mobile screen.
    No reading/surfing apps except utility. I intent to maintain it this way.</p><div class="image-container"><img alt="iphone screen"
         class="responsive" src="/images/photo6149946929816119345.jpg"/></div></section><section><h2>Personal</h2><p>There are few events in life that you shouldn’t miss. Events that your mind has no reference in the past, to relate
    to. Events that will make you discover yourself as you undergo. There is magic in such events when they happen for
    the first time. </p><p>We(I and Lakshmi) had one such moment as we were expecting to welcome a new member to our family this year. To make
    sweet memories, we consciously choose to spend most of our time offline. Living out one day at a time. <strong> No
        Twitter, No Movies, No TV. Spending time together instead of alone</strong>. We read books together. Just books
    and books alone, with Lakshmi. I resumed my daily diary writing habit that I’d stopped years ago. I started writing
    every day, capturing our progress, mindset, and excitement of each passing day. Each and every moment as it unfolds.
</p><p>In the past, I’d read both Parthiban Kanavu and Ponniyin Selvan(I-V). But Lakshmi hasn't. So, we decided to read them
    together. We got started with <a href="http://goodreads.com/book/show/35066874-amarar-kalkiyin-parthiban-kannavu">Parthiban
        kanavu</a> in May, <a href="http://goodreads.com/book/show/36358989-ponniyin-selvan---the-fresh-flood">Ponniyin
        selvan - Part I</a> in June, <a href="http://goodreads.com/book/show/41540370-ponniyin-selvan-part-2">Ponniyin
        selvan - Part II</a> in July, <a href="http://goodreads.com/book/show/36479438-ponniyin-selvan---kolai-vaal">Ponniyin
        selvan - Part III</a> in August, <a href="http://goodreads.com/book/show/37419952-ponniyin-selvan--manimagudam">Ponniyin
        selvan - Part IV</a> in September and finally <a
            href="http://goodreads.com/book/show/37548064-ponniyan-selvan---thiyaga-sigaram">Ponniyin selvan - Part
        V</a> in December. <strong>Dhruvan</strong>, our son was born with such memorable moments.</p><p>The best moment of the year came when I took Dhruvan for the first time in my hands right after being born. Words can't
    express the joy I had. We’re ever thankful to God for him.</p><p>Overall, 2018 was a blessing both personally and professionally. Hope 2019 too will be great for all of us.</p><p>Previously <a href="/a-year-that-was-2017/">2017</a>, <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014/">2014</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2018-in-review</link>
      <guid>https://sridhar.co/year-2018-in-review</guid>
      <pubDate>Mon, 31 Dec 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Javascript: Understanding Promise</title>
      <description>
        <![CDATA[<p>Promise is a <a href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">proxy
    value for an asynchronous action</a> leading upto success or a failure. Using Promise is necessary to avoid the <a
        href="http://callbackhell.com/">callback hell</a></p><p>

    A pending promise can either be fulfilled with a value, or rejected with a reason (error). When either of these
    options happens, the associated handlers queued up by a promise's then method are called.</p><div><p>
        A Promise can be in one of the following states </p><ul><li><strong>pending</strong>: initial state, neither fulfilled nor rejected.</li><li><strong>fulfilled</strong>: meaning that the operation completed successfully. <code>then()</code> clause of
            promise will be called.
        </li><li><strong>rejected</strong>: meaning that the operation failed. <code>catch()</code> clause of promise will be
            called.
        </li></ul></div><p><strong><a
            href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then"><code>Promise.prototype.catch()</code></a>
        will handle the errors thrown by the asynchronous flow execution of the Promise where as <code>catch()</code> of
        <code>try-catch</code> will catch the errors triggered by the synchronous flow</strong></p><h3>Promise are always asynchronous</h3><p>
    You can also resolve function statically like <code>Promise.resolve()</code> -
    <code>Promise.reject()</code> instead of calling the constructor <code>new Promise((resolve, reject) =&gt;
    {});</code></p><script src="https://gist.github.com/sridharrajs/cca0becba286f571307905412a11a608.js"></script><h3>Promise are immediately executing</h3><p>
    Unlike callbacks, A promise will be executed as soon as it is encountered.

    <script src="https://gist.github.com/sridharrajs/5b5903ea9e89d2a39d3a0489b01059fa.js"></script></p><h2>Async &amp; Await</h2><p><code>Async</code> &amp; <code>Await</code> is an <a
        href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla#ECMAScript_2017">ECMAScript
    2017 standard</a></p><p>
    An <a href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function">async
    function</a> is a function which is operated asynchronously via event loop returning an AsyncFunction object. It
    uses promises to return its result.
    <code>await</code> is to get the resultant from the promised function. </p><blockquote>
    Remember, <strong>the await keyword is only valid inside async functions.</strong> If you use it outside of an async
    function's body, you will get a SyntaxError.
</blockquote><p></p><p>We shouldn't make it sequentially,
</p><p>For instance,</p><script src="https://gist.github.com/sridharrajs/ff07121c6db18e2fc4bf06e99feddc88.js"></script><p>You can clearly see that, <code>parallel()</code> is twice as fast as
    <code>series()</code> is because it is not sequential.
</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/javascript-understanding-promise</link>
      <guid>https://sridhar.co/javascript-understanding-promise</guid>
      <pubDate>Wed, 28 Nov 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Advice to my 20 old self</title>
      <description>
        <![CDATA[<section><p>I recently turned 30 and wanted to take a step back and reflect. This post is
    my summary up of things that I figured
    out on this journey so far</p></section><section><h2>Time</h2><p>Time is one of the crucial
  things that you need to understand in your
  20&#8217;s. Understanding the weightage of timing will help you prioritize
  things in your life. <strong>Your time is
    very limited. Be judicious about the things that you spend time on</strong>.
</p><p>You&#8217;ll learn a lot by
  doing, than sitting on the fence. You&#8217;ll fail, but that is necessary to
  gather first hand experiences. Any
  worthy pursuit lies outside of work-life balance and your comfort zone.
  Choose the one that has a positive impact on
  your life.</p><p>There won’t be an ideal time for anything. <strong>Just get
    started with things and go with the
    flow. Ship the first cut, before perfecting. Release, when things are good
    enough. Iteration &gt;
    Perfection</strong></p><p>Use the time to your advantage. Pay for things and save
  time. Avoid things that don&#8217;t
  fit in into your grand scheme of things.</p></section><section><h2>Money</h2><p><strong>There is
    no correlation between how much you
    know and how much you get paid. Just like your career, you need to take care
    of your financials.</strong> Financial
  planning is more than avoiding taxes. Insurance is not an investment. Have an
  adequate health insurance cover in
  addition to the one that your employer provides. Planned debt is not a bad
  thing. Contingency fund needs to be at
  least 3 months of your salary.</p></section><section><h2>Relationships</h2><p>Maintenance is
  hard. More so in relationship than in
  software.</p><p>Talk to real people. You need to break your introvert mold.
  Don&#8217;t label people good or bad.
  <strong>Listen without judging them. Everything depends on the context. No one
    is pure evil or absolute altruist.
    Different people have different views. Empathizing with people is the first step
    towards understanding them. Trust
    people by default, unless they give you reason not to.</strong></p><p>Be
  explicitly clear in explaining what you
  want the listener to understand. Writing seem to work for you, write more.</p><p>Pick values over idols. If you need
  help, ask without holding back. Accept favors, when offered.</p></section><section><h2>Life</h2><p><strong>You&#8217;ll discover your
    own meaning for love, success-failure, and happiness.</strong> In the due
  process, you&#8217;ll make a ton of
  mistakes. It&#8217;s okay. Don&#8217;t be hard on yourself. Only through that
  experience, your mindset will change.
  Be prepared to shoulder responsibilities, handle stress, and deal with
  depression, all at the same time.</p><p><strong>Science can be understood but it can&#8217;t give you hope. You need
    HOPE to survive in testing
    times.</strong> Also, you seriously need to acquire some people and survival
  skills besides your primary.
</p><p>
  Take tons of photos without questioning, make memories. It is the only means
  to port you to the state of mind then.
  Celebrate little things. <strong>After every major event in life. Take time to
    pause and reflect. Document things in a
    journal.</strong> Write more year-in-reviews.</p><p>Travel, your money will
  return, your time won&#8217;t. Travel
  often and travel unplanned. Plan places, but not events. Expose yourself
  completely without holding back. Read <em>widely</em>
  about subjects. Read classics. <strong>It is through reading and traveling
    you&#8217;ll explore yourself
    more.</strong></p><p>Be an enthusiast. Try out new things. Embrace life with
  both hands open. <strong>Be
    more involved in this thing called life.</strong></p></section><section><h2>Career</h2><p>
  Family &gt; career. A career is necessary
  to provide means for the life but not the end. Understand this and allocate
  your limited time appropriately.</p><p>
  Being a generalist is far more rewarding than going in depth beyond a certain
  point. Learn to Sell. <strong>Never
    feel bad about promoting yourself. Do things in public.</strong></p><p>You&#8217;ll
  figure out what you are good
  at quickly. Don&#8217;t overlook it. Charge more for it.
  The only way to know what is the right
  amount for you is by constantly visiting the marketplace or checking with
  your peers. Remember, <strong>the value
    is in the eyes of the beholder.</strong></p><p>Any big decision will take 3-5
  years to pay off. <strong>unlearning
    is just as important as learning</strong></p><p>As they say it, I guess 20&#8217;s
  are for discovering how the world
  works. I am excited to know what the next decade could teach me.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/advice-to-my-20-old-self</link>
      <guid>https://sridhar.co/advice-to-my-20-old-self</guid>
      <pubDate>Fri, 23 Nov 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>I’m learning Python</title>
      <description>
        <![CDATA[<p>Its been long time since I learned a new language. It was <code>nodejs</code> in 2016. It was android in 2017. This
    year, I want to learn NLP, Machine learning and AI. Python seems to be the <em>lingua franca</em> of AI. So, I'm
    getting started with Python specifically for this reason.</p><p>With two months in, I can clearly say Python fits well into my toolbox. <a href="http://www.djangoproject.com/">Django</a>
    for web apps, Python core for my scripting needs.</p><p>If you're beginner like me, want to get started with Python. I highly recommend checking out <a
        href="http://www.goodreads.com/book/show/6919462-dive-into-python-3">Dive Into Python 3 </a>, <a
        href="http://www.goodreads.com/book/show/34462487-think-python-2nd-edition">Think Python, 2nd Edition</a></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/im-learning-python</link>
      <guid>https://sridhar.co/im-learning-python</guid>
      <pubDate>Mon, 28 May 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Eloquent JavaScript by Marijn Haverbeke</title>
      <description>
        <![CDATA[<p>Recently, I read <a href="http://eloquentjavascript.net/">Eloquent JavaScript</a> by <a
        href="http://marijnhaverbeke.nl/">Marijn Haverbeke</a> Following were my notes from it.</p><div class='image-container'><a href="https://eloquentjavascript.net/"><img
        alt="notes from eloquent javascript"
        class="responsive" height="450" src="/images/eloquent-javascript.jpg" width="318"/></a></div><h2 id="usestrictmode">Use <code>strict mode</code></h2><blockquote><p>Strict mode is a way to introduce better error-checking into your code. When you use strict mode, you cannot, for
        example, use implicitly declared variables, or assign a value to a read-only property, or add a property to an
        object that is not extensible. </p></blockquote><p>It is an ECMA 5 standard that you can 'opt-in' for executing the JavaScript in a restricted environment. 'opt-in'
    here means, you need to put <code>'use strict';</code> on the code blocks where you wish to enforce strict mode. A
    JavaScript file can have a mix of strict and non strict mode in it.</p><p>There are 2 ways to enforce the mode</p><ol><li>File level Strict mode</li><li>Function level Strict mode</li></ol><p><strong>File level Strict mode</strong></p><p>You need to put <code>'use strict';</code> as the first statement inside the file</p><pre><code>'use strict'

function add(a,b){
  let sum = a + b;
  return sum;
}
</code></pre><p><strong>Function level strict mode</strong></p><p>You need to put <code>'use strict';</code> as the first statement inside the function body</p><pre><code>function add(){
 'use strict';

  let sum = a + b;
  return sum;
}
</code></pre><script src="https://gist.github.com/sridharrajs/834f95af1c153c6aa097bdab6e5eff66.js"></script><h2 id="usemapforstoringkeyvalueassociation">Use <code>map</code> for storing key-value association</h2><p>Prior to ES6, Conventional <code>object</code> can be used to store key-value association. There are few drawbacks to
    this approach.</p><ol><li><p><code>Object</code> has <code>toString()</code> and other prototype methods. These methods are not needed for
        a <code>map</code>.</p><pre><code>let objectAsMap = {};
</code></pre></li></ol><div class='image-container'><img
        alt="object creation without null in javascript"
        class="responsive"
        height="300" width="199"
        src="/images/Selection_006.png"/></div><p>There is a workaround available for it </p><pre><code>let plainObjectAsMap = Object.create(null);
</code></pre><div class='image-container'><img
        alt="object creation using null in javascript"
        class="responsive" height="126" src="/images/Selection_007.png" width="404"/></div><ol><li><p>Objects can only have <code>string</code> values as the key. But with map, you can use any value as a key.
    </p></li><li><p>Map, by default comes with useful options.</p></li></ol><script src="https://gist.github.com/sridharrajs/4b9eb4b52abd0f07363d905e21aa8df0.js"></script><h2 id="automatictypeconversion">Automatic type conversion</h2><blockquote><p>When an operator is applied to the “wrong” type of value, JavaScript will quietly convert that value to the type
        it needs, using a set of rules that often aren’t what you want or expect. This is called type coercion.</p></blockquote><script src="https://gist.github.com/sridharrajs/b45e0310c3a1900ecb903ad1765214ac.js"></script><h2 id="differencebetweennamedfunctionandfunctionexpressions">Difference between Named function and function
    expressions</h2><p>Named function can help you to display function names while debugging the app. The main difference between these two
    lies in the way the function gets executed. </p><blockquote><p>Function declarations are not part of the regular top-to-bottom flow of control. They are conceptually moved to
        the top of their scope and can be used by all the code in that scope.</p></blockquote><script src="https://gist.github.com/sridharrajs/3415db2db939ef3b1d06ff651b92c78a.js"></script><p>I loved the way how we build the projects(especially <a href="http://eloquentjavascript.net/07_robot.html">chapter
    7</a>) along with the author. One another thing I liked, but dint expect from the book was when I found <a
        href="http://en.wikipedia.org/wiki/Tirukku%E1%B9%9Ba%E1%B8%B7">Thirukkural</a> on <a
        href="http://eloquentjavascript.net/05_higher_order.html">5 chapter - Higher-order Functions</a></p><div class='image-container'><img
        alt="Higher Order Functions in javascript"
        class="responsive" height="450" src="/images/thirukkural.png" width="318"/></div><p>This book has strong focus on the JavaScript basics. It covers <code>function</code>, <code>Objects</code>, <code>Promise</code>,
    in detail with neat examples for asynchronous programming. The book also talks about the ES6 array function such as
    <a href="/cleaner-array-manipulation-using-es5-6-lodash/"><code>filter</code>,
        <code>map</code> and <code>reduce</code></a>. If you want to brush up the basics, I highly recommend this book.
</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/notes-from-eloquent-javascript</link>
      <guid>https://sridhar.co/books/notes-from-eloquent-javascript</guid>
      <pubDate>Fri, 23 Mar 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Check if object is an array in plain javascript</title>
      <description>
        <![CDATA[<p>JavaScript is a dynamic language. At times, you might want to determine whether the <code>object</code> variable
    you're receiving is an <code>Array</code> or not. Usually, I use Lodash's <a
            href="http://lodash.com/docs/4.17.5#isArray"><code>_.isArray()</code></a> for this. For a change, I explored
    other options, using plain JavaScript.</p><p>I learnt that there are 3 methods to do this.</p><p><strong>Test inputs &amp; results</strong></p><ol><li><code>[]</code>, <code>new Array()</code> should be considered as an <code>array</code></li><li><code>undefined</code>, <code>{}</code>, <code>''</code>, <code>{length:1}</code> shouldn't be considered as an
        <code>array</code></li></ol><h2 id="1usinges5">1. Using ES5</h2><p>You can use ES5 <a
        href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray">Array.isArray()</a>
    to check whether a variable is an array or not</p><script src="https://gist.github.com/sridharrajs/e757eb407f6a9509525e971732bcaba7.js"></script><h2 id="2usingobjectstostring">2. Using Object's toString()</h2><p><code>toString()</code> returns the string representation of the object. Calling <code>toString</code> on an <a
        href="http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString"><code>Array</code>
    gives us <code>[object Array]</code></a></p><script src="https://gist.github.com/sridharrajs/f9f37f94b2d3f820da52582138f50c53.js"></script><h2 id="3usingconstructorandinstanceof">3. Using <code>constructor</code> and <code>instanceof</code></h2><script src="https://gist.github.com/sridharrajs/c9147ad02b499aa9d58963b7e01c9e4b.js"></script><p><strong>Note</strong>: You can't use <code>typeof</code> since <code>typeof arrayVariable</code> will give you an
    <code>object</code></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/check-if-object-is-an-array-in-plain-javascript</link>
      <guid>https://sridhar.co/check-if-object-is-an-array-in-plain-javascript</guid>
      <pubDate>Tue, 13 Mar 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2017 in review</title>
      <description>
        <![CDATA[<p>2017 has been a wonderful year for me both personally and professionally. These are the few highlights for the
    year</p><section><h2>Personal</h2><p>First, a major change in my life. I got married :). What they say about marriage is true. I am starting to see things
    in a different light than how I use to. Life has changed for good.</p><p>With this new perspective, I tested few strong opinions I held, pursued things that I was curious about. The results
    were interesting and I have documented all the learning I got. Will be sharing them soon.</p></section><section><h2>Professional</h2><p>I wanted to learn a tech and <strong><em>ship apps in it</em></strong>. I chose Android for this year. After being in
    JS land for a couple of years, I choose to do the app in <code>Java</code> instead using a js-framework like iconic.
</p><p>Launched the following android apps</p><p><strong><a href="http://play.google.com/store/apps/details?id=co.sridhar.tamilbible.full">Onebible.in</a></strong></p><blockquote><p>Offline ads free bible in Tamil, Hindi, Telugu, Malayalam and Kannada.</p></blockquote><p>This was my first Android app. It is approaching 1000 downloads.</p><p><strong><a href="http://play.google.com/store/apps/details?id=co.sridhar.commithub">CommitHub - a sleek client for
    BitBucket</a></strong></p><blockquote><p>All YOUR repos in one place</p></blockquote><p>The description says it all. It is nearing 100 downloads.<br></p><p>I started answering <code>nodejs</code> related questions. As a result, my SO reputation grew from <code>1341</code>
    to <code>3294</code>, a 1.45x growth.</p><p>I wanted to learn a web framework other than <code>node.js</code>. Laravel seemed to be a decent option. <a
        href="/introduction-laravel/">Learnt laravel</a> and built a sample application using it.</p><p>Towards the end of the year, I switched jobs. I'm now a <a href="http://linkedin.com/in/sridhar-raj-sampath-kumar/">Senior
    web developer</a>.</p></section><section><h2>Reading &amp; blogging</h2><p>I read more articles online than books. Dint complete <a
        href="http://www.goodreads.com/challenges/5493-2017-reading-challenge">the 2017 Goodreads challenge</a>. I want
    to improve on this in 2018. I want to read at least 6 books and write a post for each of them.</p><p>I wrote 8 posts on my coding blog mostly on what I learnt, observed. In this blog, I just wrote 1. I am planning to
    improve on this front as well.</p><p>2017 turned to be a great year for me. Hope 2018 will be a great year for all of us.</p><p>Previously <a href="/doing-things-along-the-way">2015</a>, <a href="/year-2014/">2014</a>.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/a-year-that-was-2017</link>
      <guid>https://sridhar.co/a-year-that-was-2017</guid>
      <pubDate>Wed, 03 Jan 2018 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Introduction to Node.js for web developers</title>
      <description>
        <![CDATA[<p><code>Node.js</code> is the JavaScript run-time environment on the server
  side. It uses open-sourced Chrome's V8
  engine for JavaScript execution. V8 is the same JavaScript engine that powers
  browsers like <a
    href="http://www.opera.com/docs/history/">Opera</a> and <a
    href="http://forum.vivaldi.net/topic/7488/where-are-technical-specs/2">Vivaldi</a>.
</p><section><h2 id="conceptsinnodejs">Concepts in Node.js</h2><ul><li><p>Node.js uses an event-driven, non-blocking I/O model. Functions like
    Querying Db, file system read/write
    operations are designed to be asynchronous non-blocking. Task completion
    will be signed through callbacks.
    Special care needs to be taken to avoid <a href="http://callbackhell.com/">callback
      hell</a></p></li><li><p>Node.js is single threaded. You need to use process managers like <a
    href="http://github.com/Unitech/pm2">pm2</a> to spin additional instance of
    your application to efficiently
    use the available cores on the server.</p></li><li><p>Node follows the Unix principle. One utility per file. Npm modules
    should be used <a
      href="http://github.com/sindresorhus/ama/issues/10#issuecomment-117766328">like
      Lego blocks</a> for building
    the software. </p></li><li><p>Validation logic, post records insertion logic are all written as
    middleware. It is <a
      href="http://english.stackexchange.com/questions/257120/middleware-vs-middlewares">Middleware
      not
      middlewares</a></p></li></ul></section><section><h2 id="javascriptvmchromesv8">JavaScript VM - Chrome's V8</h2><p>V8 engine, written in C++, is the only JavaScript VM that is currently being
  used. There are also proposals to use
  Microsoft's <a
    href="http://christianheilmann.com/2016/07/27/why-chakracore-matters/">Chakra
    core</a> and Mozilla's
  <a href="http://github.com/mozilla/spidernode">Spider Monkey</a>. Once the
  options are viable, execution engine can
  be switched. This shouldn't be a problem as the engine themselves will be
  implementing the TC39 standards. V8
  compiles the JavaScript code directly to native machine code. There is no
  interpreting or compiling phase.</p></section><section><h2 id="dependencymanagementnpmbower">Dependency management – npm &amp;
  bower</h2><div class="tweet-container"><blockquote class="twitter-tweet"><p dir="ltr" lang="en">They&#39;re all good
    package managers, really.<br><br>But
    when it comes to community size/activity, <a
      href="https://twitter.com/npmjs?ref_src=twsrc%5Etfw">@npmjs</a> is
    playing an entirely different game. <a href="https://t.co/UrQ2TksmS7">pic.twitter.com/UrQ2TksmS7</a></p>&mdash;
    isaacs 💙💜💖🏳️‍🌈 (@izs) <a
      href="https://twitter.com/izs/status/811337410902532096?ref_src=twsrc%5Etfw">December
      20, 2016</a></blockquote><script async charset="utf-8"
          src="https://platform.twitter.com/widgets.js"></script></div><p>npm, <a
  href="http://github.com/apigee/trireme/blob/master/apptests/src/test/resources/npm/node_modules/npm/doc/misc/npm-faq.md#if-npm-is-an-acronym-why-is-it-never-capitalized">a
  word play</a>, is the dependency manager for Node.js. Dependencies are
  maintained in <code>package.json</code> and
  are installed in <code>node_module</code> folder. </p><p><strong><a href="http://bower.io/">Bower</a></strong>
  It used for installing front-end assets like HTML, CSS, JS. The dependency
  details are maintained in <code>bower.json</code>
  and are installed in <code>bower_components/</code> folder. These days, more
  frontend framework are preferring npm
  over bower for managing dependencies.</p></section><section><h2 id="frameworks">Frameworks</h2><p><a href="http://expressjs.com/">Express</a> is the most popular, widely used
  framework in the Node land. It is
  partly, because it is the "E" of the "MEAN" stack. Also, it is unopinionated.
  You can use routes to handle request -
  response, controller for db model interaction. It is easy to set up and run
  with it.</p><p>There are also other notable frameworks such as Walmart's <a
  href="http://hapijs.com/">hapi.js</a>, Paypal's <a
  href="http://krakenjs.com/">kraken.js</a>. If you're coming from Rails
  background, you can check <a
    href="http://sailsjs.com/">sails.js</a>. It tries to solve the same problem
  that Rails had solved for Ruby.</p></section><section><h2 id="toolsetideslintingtaskrunners">Tool set - IDEs, Linting, task
  runners</h2><p>Statically typed language have IDEs that will prevent you from making errors
  while coding. but JavaScript is a
  dynamic language. Hence the IDE's assistance is very limited. You need to pick
  individual tools and build your tool
  suite.</p><p>Workflow activities like running tests, linting the source code for quality,
  transpile the source to ES5 version can
  be automated using task runners using <a href="http://gulpjs.com/">Gulp</a>.
  PHP's Laravel framework too <a
    href="/introduction-laravel/">uses gulp</a>.</p><p>For linting, you need to use <a href="http://eslint.org/">eslint</a> and <a
  href="http://jshint.com/">jshint</a>.</p><p>For break point debugging and live reload, you need to use a combination of
  <a
    href="http://github.com/node-inspector/node-inspector">node-inspector</a>
  and <a
    href="http://github.com/remy/nodemon">nodemon</a> and <a
    href="http://stackoverflow.com/questions/25798050/running-node-inspector-alongside-nodemon">run
    them
    combined</a>.</p><p>IDEs like <a href="http://www.jetbrains.com/webstorm/">WebStorm</a> will have
  everything integrated into the
  environment out of the box.</p></section><section><h2 id="guidesindentation">Guides - indentation</h2><p>Node.js uses <a
  href="http://github.com/nodejs/node/blob/master/.editorconfig#L12">2
  spaces</a>. npm uses <a
  href="http://docs.npmjs.com/misc/coding-style#indentation">2 spaces</a>.
  Google JavaScript style guide uses <a
    href="http://google.github.io/styleguide/jsguide.html#formatting-block-indentation">2
    spaces</a>. Felixge's
  node-style-guide uses <a
    href="http://github.com/felixge/node-style-guide#2-spaces-for-indentation">2
    spaces</a>.
  Even Ryan Dahl, the creator of Node.js uses <a
    href="http://nodeguide.com/style.html#tabs-vs-spaces">2 space</a>. So
  you're better off using 2-Spaces for indentation. </p></section><section><h2>For Java developers</h2><p><code>package.json</code> is the equivalent of <code>pom.xml</code>. <code>npmjs.com</code>
  is the dependency repository like <code>maven central</code>. Equivalent of Jar is <code>npm packages</code>.
</p></section><section><h2 id="deploying">Deploying</h2><p>You can run the Node.js application in any port you want, but it is highly
  desirable to have a public url address
  without port number. Since the default HTTP port 80 falls under 1024, you
  could require a sudo access to run the
  application on this port. This may lead to conflict with the web servers like
  Apache or Nginx that require port 80
  to run. We can avoid this by the starting the application in ports > 1024
  using process manager like pm2 and then
  fronting it with Nginx.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/introduction-node-js</link>
      <guid>https://sridhar.co/introduction-node-js</guid>
      <pubDate>Mon, 11 Sep 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Tool tip in Axis bank fund transfer form</title>
      <description>
        <![CDATA[<p>If you're web developer, every form you see across the Internet is an opportunity for you to learn about presenting
    options to the user. This is my observation of Axis bank fund transfer form.</p><div class="image-container"><img alt="axis bank fund transfer page"
         class="responsive"
         height="334" src="/images/DGMWbftVYAAqKVP.jpg" width="723"/></div><p><strong>Inappropriate use of tool tip</strong>
    Tooltip should be informative and the Control displaying that should benefit from the supplementary information.
    Displaying "chkbox" doesn't add any useful information to the user. Also, "chkbox" might actually be confusing to a
    non technical user.</p><p><strong>Buttons</strong>
    I personally think "Transfer" or "Pay" could be more appropriate caption for the button instead of "Confirm". I'm
    not confirming anything in this screen. The bank can show "Resend OTP", only if it is more than a minute since the
    form load and it isn't submitted yet.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/axis-bank-fund-transfer-form</link>
      <guid>https://sridhar.co/axis-bank-fund-transfer-form</guid>
      <pubDate>Sat, 05 Aug 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to fix blank white screen in Laravel 5 on Nginx</title>
      <description>
        <![CDATA[<p>Blank white page is <em>the frequent problem</em> that I ran often into when deploying the laravel applications.
    Following are the list of things I learned while fixing this issue.</p><h2 id="nginxchecks">Nginx checks</h2><p>I use nginx and these are the specific checks that you need to check in the conf created for the application.</p><ul><li><code>index</code> of the conf file needs to have <code>index.php</code>. <code>index.php</code> is the
        framework's base file for handling the incoming requests.
    </li></ul><p><code>index index.html index.htm index.php;</code></p><ul><li><code>root</code> of the conf file needs to point until <code>public</code> folder of the app.</li></ul><p><code>root /usr/share/nginx/example.org/public;</code></p><ul><li><code>storage/</code>, <code>public/</code> and <code>bootstrap/cache</code> folders needs to be writable.</li></ul><h2 id="appchecks">App checks</h2><ul><li>Absense of <code>.env</code></li></ul><p>Every environment needs to have its own <code>.env</code> file. Since <code>.env</code> is ignored as a part of <a
        href="http://laravel.com/docs/5.0/configuration#environment-configuration">the standards</a> in
    <code>.gitignore</code>, your local <code>.env</code> won't be checked into the repo. So, You need to create a new
    <code>.env</code> file with the environment specific details.</p><ul><li>Lack of dependencies</li></ul><p>A Laravel application has two set of dependencies. <code>composer.json</code> for Php and <code>package.json</code>
    for node.js. You need to install both the dependencies</p><p><code>composer install</code> for laravel dependencies
    <code>npm install</code> for node, laravel mix, js dependencies</p><p>You should see <code>vendor/</code> and <code>node_modules</code> at the root of the application.</p><ul><li>Not running scripts</li></ul><p>You need to run these scripts depending on the features you used for the application.</p><p><code>npm run prod</code> for transpiling sass, js.
    <code>php artisan migrate</code> for set the database changes.
    <code>php artisan key:generate</code> if you application has auth module and running the app for the very first
    time.</p><p>If you're still getting a blank white page, head to over <code>storage/logs</code> at the root of the application and
    start fixing the issues logged. Hope this helps.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/blank-white-screen-laravel-5-nginx</link>
      <guid>https://sridhar.co/blank-white-screen-laravel-5-nginx</guid>
      <pubDate>Tue, 04 Jul 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Introduction to Laravel for web developers</title>
      <description>
        <![CDATA[<p>Laravel is an opinionated MVC web framework for PHP. A typical application build using this framework consist of
    routes, controller, model and migrations.</p><h2 id="dependencymanagementcomposer">Dependency management - Composer</h2><p>Composer is the dependency management tool for Php. It <a
        href="http://getcomposer.org/doc/00-intro.md#dependency-management">is strongly inspired</a> by node's <a
        href="http://npmjs.org/">npm</a> and ruby's <a href="http://bundler.io/">bundler</a>. Laravel uses it to install
    and update dependencies. <code>composer.json</code> contains meta data about the dependencies and they are installed
    within the <code>vendor/</code> directory at the root of the application.</p><h2 id="versioning">Versioning</h2><p>Laravel uses <code>paradigm.minor.patch</code> versioning for the framework. <code>paradigm</code> here, represents
    the architectural changes. But for the framework components, it uses the standard semantic version.</p><h2 id="cli">CLI</h2><p>Laravel has its own CLI system called <code>Artisan</code>. Using it, you can create a project with a single command.
</p><p><code>laravel new &lt;project_name&gt;</code></p><p>You can also create standard components of applications like controller, middleware, model in seconds, using it.</p><h2 id="orm">ORM</h2><p>By default, the framework provides <a href="http://laravel.com/docs/5.4/eloquent">Eloquent</a> with ActiveRecord
    implementation for working with database. This is really handy to do CRUD operations real quick. It also adds
    defaults like <code>created_at</code> and <code>updated_at</code> for every table created.</p><p>As with any other framework, laravel too does the following things. </p><ul><li><p>Boiler plate generation</p><ul><li>It generates boiler plate code for all the project components. For instance, <code>--resource</code>
                generates a controller with methods for all the HTTP verb.
            </li></ul></li><li><p>Enforcing structure to the project.</p><ul><li><code>middleware</code> goes inside <code>app/Http/Middleware</code></li><li><code>controller</code> goes inside <code>app/Http/Controllers</code></li><li><code>database/</code> for the migration and seed.</li></ul></li><li><p>Naming convention for the components </p><ul><li><code>Controller</code> suffix is appended to generated suffix.</li></ul></li><li><p>Forces standards</p><p><ul><li><code>.env</code> for the storing the configuration of the respective environment.</li></ul><p></p></li></ul></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/introduction-laravel</link>
      <guid>https://sridhar.co/introduction-laravel</guid>
      <pubDate>Thu, 29 Jun 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Prerequisites for android programming</title>
      <description>
        <![CDATA[<p>If you're a Java developer want to get started with Android. Following are the things you need to know before getting started.</p><h2 id="eclipsevsandroidstudio">Eclipse vs Android studio</h2><p>Eclipse was once an option. Now
    that's gone. Google <a href="http://developer.android.com/studio/index.html">recommends Android studio</a>. So, have
    it installed.</p><h2 id="phonevsemulator">Phone vs Emulator</h2><p>You might notice that most of the tutorial uses an emulator. That's for the screen recording purpose. </p><p>Remember, emulator alone <a href="http://developer.android.com/studio/index.html">requires 1 GB of RAM</a></p><blockquote><p>3 GB RAM minimum, 8 GB RAM recommended; plus 1 GB for the Android Emulator</p></blockquote><p>Prefer to use an actual phone over an emulator during the development. Running the emulator along side the studio consumes
    extra 1 GB of RAM, that could be used efficiently for something else. App building was faster when I used a phone
    for the deployment. The difference was well noticeable on my 8 GB RAM machine.</p><h2 id="language">Language</h2><p>Android heavily uses OOPS concepts. Hence familiarly in OOPS is a required. There is overriding,
    generics-collections, type casting, threads, classes, interface and inheritance. Building app natively requires a
    decent hands on experience in Java. XMLs are heavily used for configuration and building the UI part of the app. But
    this specific use of XML can be easily picked up if you've any prior programming experience. If you're a JS
    developer, you can try <a
            href="http://facebook.github.io/react-native/">react native</a>.</p><h2 id="dbmanager">Db manager</h2><p>SQLite is an embedded SQL database that comes preinstalled on most devices. It is on the iPhone, iPad, and web
    browsers. That's the reason for it to be <a href="http://sqlite.org/mostdeployed.html">the most widely deployed
        database engine</a>. We can use <a href="http://sqlitebrowser.org/">SQLitebrowser</a> for managing our local phone db.</p><p>Also, I recommend installing <a href="http://play.google.com/store/apps/detailsl?id=com.google.android.apps.secrets">Playbook
    for Developers</a> by Google on your phone. Details about latest Android features, best practices, and strategies
    all within a single app.</p><p>That's it.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/prerequisites-for-android-programming</link>
      <guid>https://sridhar.co/prerequisites-for-android-programming</guid>
      <pubDate>Thu, 15 Jun 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Announcing a new side project: Tamil bible, an android app</title>
      <description>
        <![CDATA[<p>An app like the Tamil bible is a necessary for the everyday use. But finding a decent one for every day is a pain.
    The experience is same for whether you're on an android or iOS. Play store alone, has <a
            href="http://play.google.com/store/search?q=tamil%20bible&amp;c=apps">30 rows of Tamil bible android app</a>.
</p><section><h2 id="whatstheproblemwiththeexistingapps">What's the problem with the existing apps</h2><ul><li>They are <strong>invasive</strong>. They require access to my location to show ads.</li><li>They show me flashy ads in the likes of <em>Your phone is infected. Scan now</em>.</li><li>These apps gives sub par reading experience to the user. Verses get buried under ads in the layouts and an
        accident tap might open an ad banner.
    </li><li>They market their brand at the cost of the user. When you share a verse using them, they append "shared via xyz
        app" with play store link.
    </li></ul><p>Purchasing ads free version seems to be the quick solution. Though, I am all for paying for the software I use. I
    generally don't buy their ads-free version. Ads is one of the problems I find with them. Removing ads alone won't
    help it.</p><ul><li>They don't update the app often. Their iOS and android app looks identical and dated. They use non native
        components and styles (in my case, android). The entire app looks like a weekend hack.
    </li><li>I find "we need to add more features" mindset predominately among this category of app developers. Though, this
        might not be a problem. I've my own conviction against it.
    </li><li>They are bloated with features that I don't require.</li></ul><p>They are still badly designed, slow apps. These apps just don't seem worthy for the ads free purchase. I still
    wouldn't get the clutter free, pleasant reading experience that I am craving for.</p></section><section><h2 id="whyanativeandroidapp">Why a native android app?</h2><p>After thinking about this for a long time. I decided to take the plunge and built an app. Then came the question.
    <em>Should I build the app using iconic or similar frameworks to deploy it other OS or stick with the native
        one?</em> Having worked in <a href="http://angular.io/">Angular</a> for a good amount of time, I was tempted to
    choose it. But not being native app was one of the issues I'd with the existing apps. So, I went with the native app
    building using Java. It wasn't difficult at all since I already know Java and had work experience using it. The end
    result using this approach has come out really well.</p><p>The app is fast, clutter free and uses the android material design guidelines. Any android user can install and run
    with it. I've decided on the necessary functionalities that this app is supposed to have. This being the first
    version, I've built few from that list.</p><p>This App requires <strong>only couple of permissions</strong> from you</p><ol><li>Network Communication (for sending email to the developer and sharing to other apps)</li><li>Device access to storing and sharing the favorites.</li></ol></section><section><h2 id="whatyoullgetfromthisapp">What you'll get from this app</h2><ul><li>Clutter free, fast and smooth reading experience. No ads when reading the bible. We promise ;)</li><li>Powerful multiverse sharing at one go. You can share random verses like 1,3,6 at one shot</li><li>Swipe left to a share/favorite verse quickly.</li><li>Share verses without painfully removing "shared via xyz app" in whats app, telegram etc.</li></ul><p>I welcome early adopters, beta testers, android developers and anyone interested in general to head over to <a
        href="http://play.google.com/store/apps/details?id=co.sridhar.tamilbible.full">tamil bible</a>. Feedback are
    welcome :)</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/announcing-tamil-bible-android-app</link>
      <guid>https://sridhar.co/announcing-tamil-bible-android-app</guid>
      <pubDate>Sat, 27 May 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Contextual Communication</title>
      <description>
        <![CDATA[<p>While I was reading about the recent <a href="http://blog.zomato.com/post/160791675411/security-notice">security
    breach</a> that happened at zomato last week, I noticed a few things in the blog hosting platforms.</p><div class="image-container"><img alt="contextual-zomato" class="responsive" height="300" src="/images/contextual-zomato.png" width="169"><img alt="contextual-medium" class="responsive" height="300" src="/images/contextual-medium-500x889.png"
         width="169"><img alt="contextual-wordpress" class="responsive" height="300" src="/images/contextual-wordpress.png" width="169"></div><p><strong>Sites</strong></p><ol><li>Tumblr - <a href="http://blog.zomato.com/">http://blog.zomato.com/</a></li><li>Medium - <a href="http://m.signalvnoise.com/">http://m.signalvnoise.com/</a></li><li>WordPress - <a href="http://georgestocker.com/">http://georgestocker.com/</a></li></ol><h2 id="1installappsopeninapps">1. Install apps/Open in apps</h2><p>Only WordPress presented me the page without any such messages. Both Medium and Tumblr were showing me "open in
    app".</p><p>A user to this page can be of two types</p><ol><li>An unregistered casual user</li><li>A logged in user</li></ol><p>If you ask me, these platforms shouldn't show generic messages like "install app" or "open app" message in the first
    place. Instead, they should show it based only on the logged in state of the user.</p><p>For a logged in user, only when he clicks on the "write" button or types in a comment, these platforms should display
    "install app" notification. Since he has an account, he might consider installing the app. And also, <strong>you are
        talking to the user right in the context when he is about to do it</strong>. Such contextual message might work
    better since the native app is perceived to give a rich writing experience.</p><p>But when I am reading an article which I landed via search, your "install app" call to action seems too much to ask
    for. When a plain web page could suffice my need, there is no motivation for me to install your app.</p><p>Also, Tumblr's "get the tumblr app" and "open in app" seems contracting to me. It can be either one, not both.</p><h2>2. Avoid the platform that has a different motivation
    than yours.</h2><p>Tumblr is more concerned about letting the user know that he is reading it on Tumblr. You could see <em>tumblr</em>
    twice on the page. Medium is known for its clutter free, eye pleasing typography. In WordPress too, the focus is on
    the content but without much style. The focus was more on Tumblr than Zomato. The Focus should be more on the
    content than the platform.</p><h2>3. Contextual widgets - Using the screen real estate
    better.</h2><p>Though, WordPress fared well in #1, #2. It failed in this. Medium to an extend does this better. You could see the
    social sharing options at the bottom of the screen. It will be visible until you reach the response section of the
    post. Another example I can think of is TOI. TOI takes it to the next level by adding whats app to the share
    widget.</p><div class="image-container"><img alt="contexutal toi"
         class="responsive size-medium wp-image-165"
         height="300"
         src="/images/contextual-toi.png" width="169"/></div><p><strong>Use case of the user and the knowledge of the access device plays a huge role in delivering a good user
    experience.</strong> Showing whats app, share via SMS in the share widget is more contextual than showing generic
    "install our app" notification. Use the access device's capabilities to the fullest to deliver the contextual
    communication.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/contextual-communication</link>
      <guid>https://sridhar.co/contextual-communication</guid>
      <pubDate>Sat, 20 May 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to tweak your apps to deal with information anxiety</title>
      <description>
        <![CDATA[<p>Information anxiety is the ailment of this digital age. We're living in the digital world where one cannot consume
    the content created within the same day. You need to catch up with the fast moving landscape around you and at the
    same time have a life outside of work. This can be overwhelming at times.</p><p>These are the few app tweaks, I did to deal better with information anxiety.</p><section><h2 id="email">Email</h2><p>Every unread email is a psychic weight. Naturally, It is the first thing that you need to gain control of.</p><ul><li><p>Unsubscribe from all the blogs and switch to a RSS reader where ever possible.</p></li><li><p>Use <a href="https://github.com/notifications">Github notification center</a> instead of subscribing by email
        alert for the repos you watch.</p></li><li><p>Email list is the key medium to get your focus. That's the reason marketers consider email lists to be gold.
        But not all the emails are worthy. Ruthlessly mark SPAM when you receive an unsolicited email. By doing so,
        You're making others life easier by saving few seconds for them. This is how you contribute back to community
        knowledge.</p></li><li><p>Disable service notification emails for all the trivial activities. Twitter's email alert for new followers,
        direct message. Medium-Quora what's trending are all examples of it. You're better off without those engagement
        emails.</p></li><li><p>Email is an Aysnc communication medium. So, turn off all the mobile notification for it.</p></li></ul><p>I receive emails, if and only if, I make financial transactions. With these changes, I get about 4-5 emails/week. I
    archive them once I read them. Inbox Zero isn't that difficult at all.</p></section><section><h2 id="twitter">Twitter</h2><p>I've said it earlier that <a href="/which-is-your-third-place/">twitter is my third place on
    the internet</a>. This is my most tweaked medium. In following-unfollowing a bunch of people, tailoring my timeline
    as per my needs I learnt a few things.</p><p><strong>Follow</strong></p><p>
    Cut down on the number of people you follow. Though there is no optimal number, keep the following count manageable.
</p><ul><li><p>Follow people who have been there and done that. They are the ones that make things, have insights to share
        about them. </p></li><li><p>Don't let twitter be your echo chamber. If you're a bootstrapper follow a VC like a16z. Follow them for their
        perspective on things.</p></li><li><p>In general, follow the real people who are interesting</p></li></ul><p><strong>Unfollow</strong></p><ul><li><p>Unfollow all the brands and companies. Most of their tweets will be promotional in nature. Those who work
        there will retweet the major announcement. Also, few other companies use twitter as a support medium.</p></li><li><p>Unfollow people who are constantly sharing just the buff.ly links. They are into some sort of brand building
        exercise than sharing something interesting.</p></li><li><p>Unfollow meetup groups, conference. They tweet rarely, it's not worth following them for that once-in-a-month
        tweets.</p></li><li><p>Unfollow news channels since everything is breaking news for them. They are more focused on writing click
        baity titles that garner views than delivering a quality news. Rely on the community's retweet to know the
        breaking news. </p></li></ul></section><section><h2 id="rssreader">RSS reader</h2><p>RSS reader should be the aggregator for all your your blog feeds and podcasts. Since you don't give away your email.
    You can be sure of spam free content. They won't clog your email inbox and can be read leisurely.</p></section><section><h2 id="aggregator">Aggregator</h2><p>I particularly like Scott Hanselman's <a href="https://zapier.com/blog/scale-yourself-scott-hanselman/">trusted
    aggregators</a></p><blockquote><p>I used to have 1,000 blogs that I would read. And then who's the greatest blog reader in the world? It's Robert
        Scoble, he's always talking about how many blogs that he reads. So I finally decided, 'I'm not Robert Scoble.'
        He's a freak, and it's not healthy to keep up on that many blogs. So you know what I do? I read his blog. So I
        took the thousand blogs that I read and I pick five link blogs. I found my Scobles. And I read those five blogs
        and they give me an aggregated news. It's like why we listen to the BBC news on the hour, because it tells us
        what's going on so I don't have to watch all the other news. Find your aggregator inside of the company.</p></blockquote><p>A few trusted aggregators I follow on twitter.</p><ul><li><a href="https://twitter.com/kentcdodds">@kentcdodds</a>: for anything related to JS</li><li><a href="https://twitter.com/BenedictEvans">@BenedictEvans</a>: he sends weekly tech round up.
    </li></ul></section><section><h2 id="reading">Reading</h2><p>Every article you read should be considered as part of your reading habit. So, have a modest reading goal. Goodreads
    challenge of reading 6 books per year is good enough for me. Having an unrealistic goal like reading 36 books will
    add extra pressure and wont' do any good.</p><ul><li><p>Develope a taste for quality content. Skip the rest quickly. If you don't find the article interesting within
        first two paragraphs, skip it. Chances are less for it to turn useful when you are done. </p></li><li><p>Don't bother clicking on the link that has click bait-y titles unless it is heavily shared by the people.</p></li><li><p>Avoid clicking on the links that are within the pay wall. but post from <a
            href="https://hbr.org/">hbr.org</a> are of good standard.</p></li><li><p>No other medium vets links like twitter. Number of retweets, replies, likes, and trust on the person who has
        shared, are all the indicator of the quality of content. If you find something useful, retweet. Support the good
        content. It's a good karma.</p></li></ul></section><section><h2 id="notifications">Notifications</h2><p>Cut down on the number of notifications you receive each day. Turn on mobile notification only for the real time apps
    like telegram. Rest all can and should wait. News app like NDTV, economic times will keep sending notification.
    Being disturbed by that many notifications through out the day isn't healthy. Similarly, don't allow websites to
    send you notification. Not all news is a breaking news for you.</p><p>You don't have to check Medium, Quora, Reddit, hacker news everyday to keep up. <strong>
    Rather use very few platforms that
    you can optimize to get maximum value for your time spend. Optimizing is the way of life. Only those who
    find the
    inner balance between creation and consuming would survive stress free in this digital world.
</strong></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/deal-information-anxiety</link>
      <guid>https://sridhar.co/deal-information-anxiety</guid>
      <pubDate>Mon, 24 Apr 2017 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Emacs and Vim, text editors for programming?</title>
      <description>
        <![CDATA[<p>
    I was recently re-reading <a href="https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer">the pragmatic
    programmer</a>, and found this passage to be interesting.
</p><p><blockquote>
    We think it is better to know one editor very well, and use it for all editing tasks: code, documentation, memos,
    system administration, and so on. Without a single editor, you face a potential modern day Babel of confusion. You
    may have to use the built-in editor in each language's IDE for coding, and an all-in-one office product for
    documentation, and maybe a different built-in editor for sending e-mail. Even the keystrokes you use to edit command
    lines in the shell may be different. [4] It is difficult to be proficient in any of these environments if you have a
    different set of editing conventions and commands in each.

    <strong>Choose an editor, know it thoroughly, and use it for all editing tasks. If you use a single editor (or set
        of key bindings) across all text editing activities, you don't have to stop and think to accomplish text
        manipulation: the necessary keystrokes will be a reflex. The editor will be an extension of your hand;</strong>
    the keys will sing as they slice their way through text and thought. That's our goal. Make sure that the editor you
    choose is available on all platforms you use. Emacs, vi, CRiSP, Brief, and others are available across multiple
    platforms, often in both GUI and non-GUI (text screen) versions.
</blockquote></p><p>
    This book was published in the year 1999, pre-IDE age, when Java was still in 1.2. The authors think that code
    editing can be just like general purpose text editing. But
    <a href="https://twitter.com/SridharrajS/status/744728738407940098">Uncle Bob of the clean coder thinks
        otherwise</a> and recommends using specific purpose IDE than using a generic editor. Kathy sierra <a
        href="https://www.youtube.com/watch?v=FKTxC9pl-WM&amp;feature=youtu.be&amp;t=14m7s">had also upgraded from
    sublime to a Jet brains IDE</a>.
</p><p>
    Having made the progression from <code>Eclipse(for Java) -&gt; Sublime Text(for JS)-&gt; WebStorm(for
    JS)</code>. These perspectives left me with the question.
</p><p><blockquote>
    Is mastering a text editor in 2016 worth the effort?
</blockquote></p><p>The whole point of being a pragmatic programmer is to use the right tool for the job. Having used eclipse for Java
    and using WebStorm for Nodejs, I can say that. IDEs make life easy by offering semantic refactoring, intellisense
    auto-complete, break point, and the whole suite of plugins for running tests, transpile code and linters. If <em>wanting
        to learn different key
        binding</em> for the using different language's IDE, considered to be a pain then. I think we are in different
    age
    now.</p><p><ul><li>Open sourced IDE vendor like <a href="https://eclipse.org/">Eclipse</a> and <a href="https://netbeans.org/">NetBeans</a>
        are present across all major OS. They offer plugins to support different languages.
    </li><li>Commercial IDE like JetBrains also offers IDEs for <a href="https://en.wikipedia.org/wiki/JetBrains">all the
        major programming language</a> with the similar key binding.
    </li><li>The new age Text editors like <a href="https://www.sublimetext.com/">Sublime text</a>, <a
            href="https://atom.io/">Atom</a> and <a href="https://code.visualstudio.com/">Visual Studio code</a> also
        solves this problem by providing plugin for all major language.
    </li></ul></p><p>
    Both Vim and Emacs that the authors suggesting seem to offer something else. They offer the ability to customize key
    binding. This Emacs-Vim research turned out to be rabbit hole. Some even claim that
    <a href="https://m.xkcd.com/378/">real programmers use emacs</a></p><section><h2>Emacs</h2><ul><li> Guido van Rossum, the creator of <code>python</code><a
            href="https://twitter.com/gvanrossum/status/753963185741246465">uses emacs</a>.
    </li><li> Matz, the creator of <code>ruby</code><a
            href="http://www.slideshare.net/yukihiro_matz/how-emacs-changed-my-life">uses
        emacs</a>.
    </li><li> Pmarca, marc andresson of Netscape fame <a href="https://www.emacswiki.org/emacs/MarcAndreessen">uses emacs</a>.
    </li><li> ESR, <a href="http://www.catb.org/esr/software.html">uses emacs</a></li><li> Linus torvalds <a href="http://www.catb.org/esr/faqs/linus/">uses MicroEmacs</a>, a variant of emacs.</li><li> Steve yegge <a href="https://sites.google.com/site/steveyegge2/effective-emacs">uses emacs</a>.</li><li> Jamie Zawinski, one of founders of Netscape and Mozilla.org <a href="https://www.jwz.org/about.html">uses
        emacs</a></li><li> Sanjay Ghemawat of Google <a
            href="http://www.newyorker.com/magazine/2018/12/10/the-friendship-that-made-google-huge">uses emacs</a></li><li> Peter Norvig of Google <a href="http://www.dodgycoder.net/2012/09/q-with-nine-great-programmers.html">uses
        emacs</a></li><li> Martin Fowler of thoughtworks <a href="http://martinfowler.com/bliki/InternalReprogrammability.html">uses
        emacs</a></li><li> Donald Knuth <a href="http://www-cs-faculty.stanford.edu/~knuth/programs.html">uses emacs</a></li><li> Obviously, RMS <a href="https://stallman.org/stallman-computing.html">uses emacs</a></li></ul></section><section><h2>Vi</h2><a href="https://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a> created vi in 1976.
<code>Vim</code> that we are looking here seem to be the proper super set of <code>vi</code>.

<ul><li>Larry wall, the creator of <code>Perl</code><a href="http://www.wall.org/~larry/ungeek.html">uses vi</a>.</li><li>Paul Graham of YC guy <a href="http://www.paulgraham.com/pfaq.html">uses vi</a></li><li>Tim O'Reilly of O'Reilly <a href="http://archive.oreilly.com/pub/a/oreilly/ask_tim/1999/unix_editor.html">uses
        vi</a></li><li>BrendanEich <a href="https://twitter.com/wycats/status/553627953485996033">uses vim</a></li><li>Aaron Patterson of GitHub <a href="https://twitter.com/tenderlove/status/767776021386964992">uses Vim</a></li></ul><p>
    These two editors make you do things using keystrokes, forcing you do programming without using mouse. To truly the
    understand the potential of these editor one has to pick one of them and drive into it. This is what I concede after
    reading stack overflow answers, Hacker news comments, flame war threads relating to it. For now, I'm starting with
    Emacs.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/emacs-vim-text-editors-for-programming</link>
      <guid>https://sridhar.co/emacs-vim-text-editors-for-programming</guid>
      <pubDate>Sat, 22 Oct 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Mac cheat sheet for Debian users</title>
      <description>
        <![CDATA[<p><blockquote>
    You can check my <a href="https://github.com/sridharrajs/mac-guide">mac-guide</a> for customizing Mac to your needs.
</blockquote></p><p>My laptop had a hardware issue due to which I'd to use Mac for a week. While using it, these were the things I
    familiarized myself with to do the usual things.</p><section><h2 id="terminology">Terminology</h2><p><code>⌘</code>
    is the Command <br/><code>⌃</code> is the Control key <br/><code>⌥</code> is the Option (alt) key
<br/><code>⇧</code> is the Shift key </p></section><section><h2 id="pain">Pain</h2><ul><li>To open chrome developer
        tools, you need to press <code>Ctrl</code> + <code>Shift</code> + <code>I</code> instead of <code>F12</code>.
    </li><li>I missed <code>Home</code>, <code>End</code>, <code>Pg up</code>, <code>Pg dn</code>,
        <code>backspace</code> keys. For Mac, you need use <code>⌘</code> with the combination of arrow keys. Wanting to
        pressing two key in combination to do this seemed
        counter intuitive to me.
    </li></ul><div style="text-align: center"><table class='table-bordered'><thead><tr><th>Key Combination</th><th>Action</th></tr></thead><tbody><tr><td>Home</td><td>⌘ + &lt;-</td></tr><tr><td>End</td><td>⌘ + -&gt;</td></tr></tbody></table></div></section><section><h2 id="similarities">Similarities</h2><ul><li>Shortcuts for
        Cut, Copy, Paste, Select All, Close Window, Close tab are same as windows. We need to use <code>⌘</code> for
        these key combinations.
    </li><li>For deleting an item, it is <code>⌘ + Delete</code>. Just like how it is in
        Gnome.
    </li><li>For navigating to the browser's address bar, We need to use <code>⌘ + L</code> instead of
        <code>Alt + D</code>.
    </li><li>To right click, gently tap with two fingers.</li></ul></section><section><h2
        id="differences">Differences</h2><ul><li>For terminating a process, you need to use <code>Control</code> +
        <code>C</code>.
    </li><li>For using intelligence in IDE, you need to use <code>Control</code> +
        <code>space bar</code>.
    </li><li>To open a new tab in terminal, you need to use <code>Ctrl</code> +
        <code>T</code> just like opening a new browser tab.
    </li><li>Doubling clicking a folder, select the name for
        the renaming instead of opening. And also selecting a folder and hitting <code>enter</code> renames the folder.
    </li><li>To switch applications, you need to use <code>⌘</code> + <code>Tab</code> instead of <code>Alt</code> +
        <code>Tab</code>.
    </li></ul></section><section><h2 id="developernotes">Developer notes</h2><p>Though Mac OS is UNIX, you
    might find it to support only limited Linux command. <code>.dmg</code> is the extension for application installers .
    You can get those installers from respective software site or install it via <a
            href="https://www.apple.com/in/support/mac/app-store/getstarted/">Appstore </a>. App store is like
    Debian's
    <code>Synaptic Package Manager</code> except you need to sign in using your apple Id to use.</p><p><a
        href="http://brew.sh/">Brew </a> and <a href="https://www.macports.org/">Mac ports</a> are the third
    party
    package managers that provide most of the software required for developing application. Except <a
            href="http://meldmerge.org/">meld </a>, I didn't have any issue in installing software.</p><p>In
    addition
    to being a package manager, <code>brew</code> also manages the services it installs.
    <code>brew services start mysql</code> is the equivalent of <code>sudo service mysql restart</code></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/mac-cheat-sheet-debian-users</link>
      <guid>https://sridhar.co/mac-cheat-sheet-debian-users</guid>
      <pubDate>Fri, 23 Sep 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Life Without Principle by Henry David Thoreau</title>
      <description>
        <![CDATA[<p>Life without principle written in 1863, is a philosophical essay by Thoreau in which he criticizes <strong>how people
    chose to spend their lives</strong>. Though it may seem dated, I find Thoreau's views on Life, Labor and Livelihood
    interesting.</p><div class="image-container"><img alt="life without principle by henry david thoreau" class="responsive"
         height="300" width="199"
         src="/images/life-without-principle-by-henry-david-thoreau.jpg"></div><section><h2>Life</h2><blockquote><p>This world is a place of business. .. <strong>There is no sabbath. It would be glorious to see mankind at leisure
        for once. It is nothing but work, work, work</strong>. There is a coarse and boisterous moneymaking fellow in
        the outskirts of our town, who is going to build a bank wall... and he wishes me to spend three weeks there
        digging with him. <strong>The result will be that he will perhaps get some more money to hoard, and leave for
            his heirs to spend foolishly. If I do this, most will commend me as an industrious and hardworking man; but
            if I choose to devote myself to certain labors which yield more real profit, though but little money, they
            may be inclined to look on me as an idler</strong>. Nevertheless, as I do not need the police of meaningless
        labor to regulate me..</p></blockquote><p>One word for it. Enterprise.</p><blockquote><p>Time = Money</p></blockquote><p>Men during his time were busy spending their limited time on getting a living than actually living. If someone
    chooses to do a labor outside established societal norms to get his livelihood, he was in danger of being called an
    idler. Because, society simply couldn't understand why someone could labor for a little money.</p><p>Another problem, he observed was, men were busy drowning themselves in trivial things, such as reading newspaper.
    Instead, he wanted them to focus on things that matters to them.</p><blockquote><p>Just so hollow and ineffectual, for the most part, is our ordinary conversation. Surface meets surface.. We
        rarely meet a man who can tell us any news which he has not read in a newspaper, or been told by his neighbor;
        and, for the most part, the only difference between us and our fellow is that he has seen the newspaper, or been
        out to tea, and we have not. <strong>In proportion as our inward life fails, we go more constantly and
            desperately to the post-office</strong>. You may depend on it, that the poor fellow who walks away with the
        greatest number of letters, proud of his extensive correspondence, has not heard from himself this long while
    </p></blockquote><p>For Thoreau, what mattered was the solitude to know himself. We can know that from <a
        href="https://en.wikipedia.org/wiki/Walden">Walden</a>.</p><blockquote><p>When our life ceases to be inward and private, conversation degenerates into mere gossip. I do not know but it is
        too much to read one newspaper a week. I have tried it recently, and for so long it seems to me that I have not
        dwelt in my native region. The sun, the clouds, the snow, the trees say not so much to me. You cannot serve two
        masters.</p></blockquote><p>Stretching it a bit to suit today's context. I find Thoreau's days had newspapers, my dad's generation had
    televisions and my generation has it as <em>social media</em>.</p><blockquote><p><strong>It requires more than a day's devotion to know and to possess the wealth of a day.</strong></p></blockquote><p>They have far too many things in common. They inherently force you to catch up with the happenings around. They
    instill the fear of missing out. They are the modern day fire hose of overwhelming information. By being there all
    day, you can be a consumer, not the creator. By Thoreau standards, it's simply a hindrance to think and reason out
    the priorities in life.</p></section><section><h2>Labor</h2><p>Thoreau was of the strong opinion that everyone needs to be worthily employed. The honest labor, that will add value
    to the common stock, that men would love do with honest and sincerity, and strive to excel in it with each passing
    day. Such a labor could also be rewarding to pursue yielding more than tangibles such as a pay check.</p><blockquote><p>The aim of the laborer should be, not to get his living, to get "a good job," but to perform well a certain work;
        and, even in a pecuniary sense. .. Do not hire a man who does your work for money, but him who does it for love
        of it.. Furthermore, don’t hire someone who’s only in it for the money.</p><p>.. All great enterprises are self-supporting. The poet, for instance, must sustain his body by his poetry, as a
        steam planing-mill feeds its boilers with the shavings it makes. You must get your living by loving.</p></blockquote><p>He calls gold diggers of his days as the enemy of the honest labor and the greatest disgrace of the mankind. Because
    they aren't sustaining themselves by the wages of honest toil but at the cost of less fortunates. For the same
    reason, he deems living off an inheritance, charity to be shameful.</p><p>On the contrary, Thoreau being a land surveyor, was asked to do his job coarsely and not well enough, so that the
    sellers could make the most. He could not do his day job with the sincerity, he wished.</p><blockquote><p>Remember that what is valuable about a thing is not the same as how much money it will fetch on the market.</p></blockquote><p>Another business he had was, lecturing. He would travel around the country critiquing the society on all his lectures.
    Even if the society then, won't value it well enough. He being an outlier, won't care much of others opinion,
    continued to do it. Because he thought it to be a meaningful labor of his life. The result is, this and many other
    lectures. I think it is this labor of Thoreau, that was valuable to him, keeps him relevant to us today.</p></section><section><h2>Livelihood</h2><p>What I think actually differentiates Thoreau from other philosophers is the way in which he connects both of life and
    labor.</p><blockquote><p>There’s no shortage of gold, of tobacco, of alcohol, but there is a short supply of “a high and earnest
        purpose."</p></blockquote><p>What truly matters in life? Is it the livelihood or the life itself.</p><p>If it's the life, why are we spending our precious-finite amount of time in getting a livelihood and why aren't we
    doing a meaningful work for earning.</p><blockquote><p>So far I am successful. But I foresee that if my wants should be much increased, the labor required to supply
        them would become a drudgery. If I should sell both my forenoons and afternoons to society, as most appear to
        do, I am sure that for me there would be nothing left worth living for. I trust that I shall never thus sell my
        birthright for a mess of pottage.</p></blockquote><p>Thoreau had lesser need for things. Even if the needs increase, he won't care to off-balance his stand to meet his
    needs. 
    <strong>
        Sustain yourself by the life you live, not by exchanging your life for money and living off that.
    </strong></p></section>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/notes-on-life-without-principle</link>
      <guid>https://sridhar.co/books/notes-on-life-without-principle</guid>
      <pubDate>Fri, 02 Sep 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Which is your third place</title>
      <description>
        <![CDATA[<p>I recently came across <a
  href="http://www.hanselman.com/blog/TheDeveloperTheoryOfTheThirdPlace.aspx">developer
  theory of third place</a>. The theory says that every human will have a third
  place, besides home and work. It is
  the place where they meet each other, interact and have the outside world
  exposure.</p><p><a href="http://www.advomatic.com/blog/the-internet-as-third-place">Fred
  Gooltz</a> defines the criteria for third
  place as follows</p><blockquote><ul><li>They must be free or relatively inexpensive to enter and to purchase
      food and drinks.
    </li><li>They must be highly accessible, ideally one should be able to get there
      by foot from one’s home.
    </li><li>A number of people can be expected to be there on a daily basis.</li><li>All people should feel welcome, it should be easy to get into a
      conversation. A person who goes
      there should be able to find both old and new friends each time they
      visit.
    </li></ul></blockquote><p>Though these are laid out with assumption of the physical world. I will go
  ahead and retrofit these criteria to
  online. Because the Internet is my third place and I can only, apply to the
  platforms, I use every day during my
  free time.</p><p>I don't have Facebook account. I have also quit
  <a href="/free-of-whatsapp/">whats app for telegram</a> to focus on other
  things I care about. So, I don't seem to
  spend time here.</p><section><h2>Recommendation platforms</h2><p><strong>Medium</strong><br/>It was a pleasing experience to read the articles
  in sleek typography with no ads. But
  soon things started to go down the hill with people starting to write <a
    href="http://medium.com/@taliajane/an-open-letter-to-my-ceo-fb73df021e7a#.4ds8wym2b">open
    letter to their
    ceo</a>. But occasionally you might also stumble upon gems like <a
    href="http://medium.com/@StefWilliams25/an-open-letter-to-millenials-like-talia-52e9597943aa#.prcfx46fq">open
    to the open letter</a>. I also feel that Medium's primary motto with
  recommendation is tuned, to keep you
  engaged within the platform than anything else. Less informative article,
  articles that are gaming the system are
  getting huge page hits than the deserving ones. These days, I will read an
  article only if multiple people share it
  on Twitter. Medium for me, is just an <strong>attention craving</strong>
  platform. Me..Me..and Me.</p><p><strong>Quora</strong><br/>Exceptional <a
  href="http://blog.ycombinator.com/quora-in-the-next-yc-batch">one-off-late-stage
  YC company</a> sadly is, noisy and less moderated. People are too busy in
  asking questions like <a
    href="http://www.quora.com/What-can-I-learn-right-now-in-2-minute-that-will-be-useful-for-the-rest-of-my-life">What
    can I learn right now in 2 minutes that will be useful for the rest of my
    life?</a> I don't
  visit it unless my search engine takes me there and I haven't got what I was
  looking for elsewhere.</p></section><section><h2>Commenting platforms</h2><p><strong>Reddit</strong><br/>It is the geeky corner of the Internet. If you're
  interested in finding more <em>about
    few stuff</em>, then Reddit is the place to go. Content curation is the key
  here. You can customize your front page
  of the Internet.They have sub reddits to hang out with communities like <a
    href="http://www.reddit.com/r/selfhosted/">selfhosted</a>, <a
    href="http://www.reddit.com/r/freesoftware/">freesoftware</a>.
  At the same time, finding a valuable content is time consuming.
</p><p><strong>Hacker news</strong><br/>I have decided nested comments is not for
  me. For the same reason, I don't read all
  Slashdot comment. I may be biased, the best commenting system I've used is
  stack overflow's. Enforcing strictness to
  just one level nesting benefits the reader. In the long run, post will have
  more reader than participants. I also
  feel that comments can be of more value when its just below the same post than
  lying around in some other part of
  the web.</p></section><section><h2>Blogging platforms</h2><p><strong>Personal blogs</strong><br/><em>If something ever has challenged me
  for a change, It is the personal
  blog</em>. Particularly that of <a
  href="http://www.joelonsoftware.com">Joel</a> and <a
  href="http://blog.codinghorror.com">Jeff</a>. Reading their post has shaped my
  thought process and helped
  forming opinion on things. This platform has always delivered value to me. The
  post that <a
    href="http://blog.codinghorror.com/how-to-stop-sucking-and-be-awesome-instead/">impacted
    me most</a> was
  written years ago. I don't know what makes it work, whether my attention when
  am on it, or just their perspective
  without monetary motivation behind it, or just the long form with their
  argument, or the human touch. I don't know
  what it is. I am still an avid reader of blogs. On any given day, I will
  prefer things on personal blogs than hosted
  content on Medium or elsewhere.</p><p><strong>Business blogs</strong><br/>Only in our industry, People are sharing
  what worked for them. They teach how to
  trick the visitor for their email in the name of give aways, X things they did
  to increase their email list, How did
  they increase the revenue from $1000 to $XXXXX. Click baits. You will find
  their pitch somewhere inserted into them.
  Their intention is to collect your email now and sell something later. I
  believe you can't a deliver value if your
  intentions are tied to monetary gains. On the contrary, such articles on
  personal blogs will be of different tone,
  you won't feel odd.</p></section><section><h2>Micro blogging</h2><p><strong>Twitter</strong><br/>I agree with Fred wilson's reasoning on why he
  is bullish on <a
    href="http://avc.com/2016/02/the-twitter-contradiction/">Twitter but Not on
    Facebook. Not on Instagram. Not on
    Snapchat. Not on Pinterest</a>. I too consider twitter to be more of micro
  blogging platform than social network
  because people don't often share their personal things. Following strangers
  isn't creepy. There is no login wall for
  consumption and also <em>most</em> people are mindful of how they use 140
  characters to say what they wanted to say.
  Crowdsourcing and amazingly different people on twitter make it interesting.
  Retweets by people are far more
  sensible than a platform's recommendation.</p><p>To sum it, this is how my third place on the Internet looks like</p><blockquote><p>Personal blogs &gt; Micro blog &gt; Recommendation platforms &gt;
    Commenting platforms (reddit/HN) &gt; Business
    blog &gt; the social platforms</p></blockquote><p>The <em>restriction</em> and <em>moderation</em> within the platform seems to
  be the key in driving the value out it.
  If it occurs to you, that you're spending way too much of your time on your
  chosen third place instead of doing
  things you want to do. I hope, now you know what to look for when choosing a
  third place to spend your finite time.
</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/which-is-your-third-place</link>
      <guid>https://sridhar.co/which-is-your-third-place</guid>
      <pubDate>Fri, 01 Jul 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Cleaner array manipulation using ES5/6/lodash</title>
      <description>
        <![CDATA[<p>Array is the integral part of any modern programming language. In Java script, you have different inbuilt methods for
    array operations. This article will describe how you can write clean, readable program for variety of array
    manipulation requirements using inbuilt ES5/6 and <a href="https://lodash.com">lodash</a> functions.</p><p>Following are the few common array manipulation functions we use</p><ol><li>Iterating over a list - <code>Array.forEach()</code></li><li>Transform a list into another by property - <code>Array.map()</code></li><li>Find an element - <code>Array.find</code></li><li>To get a subset of item matching a specific condition - <code>Array.filter()</code></li><li>To compute an aggregate value for the each item of an array - <code>Array.reduce()</code></li><li>To test if some elements from the array implements the function - <code>Array.some()</code></li></ol><p>Let see each of them with their native and <code>lodash</code> counterparts with examples.</p><script src="https://gist.github.com/sridharrajs/5151f7ee21a37f469e7e.js"></script><section><h2 id="1iteratingoveralist">1. Iterating over a list</h2><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach">Array.forEach</a>
    is the ES5 standard for iterating over a list of items. It is better than conventional <code>for</code> loop,
    without needing a separate variable for keeping track of index.</p><script src="https://gist.github.com/sridharrajs/cd3d4a33ec313633bc8d.js"></script></section><section><h2 id="2transformalistintoanotherbypropertymap">2. Transform a list into another by property -- map</h2><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map">Array.map</a>
    returns a new array with results by calling the provided function.</p><script src="https://gist.github.com/sridharrajs/f879e9a8a054f05cd029.js"></script></section><section><h2 id="3findanelementfind">3. Find an element -- find</h2><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find">Array.find</a>
    is an ES6 standard. It returns the first matching element, If it is not present, it returns an
    <code>undefined</code>. <code>_.findLast</code> is identical to this, except it runs the search from right to left
    returning the last matching element.</p><script src="https://gist.github.com/sridharrajs/e71e7dbbda0c290d1033.js"></script></section><section><h2 id="4togetasubsetofitemmatchingaspecificconditionfilter">4. To get a subset of item matching a specific condition --
    filter</h2><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter">Array.filter</a>
    makes it easy to get list of items based on specific property.</p><script src="https://gist.github.com/sridharrajs/c99f690d06ad58030c32.js"></script></section><section><h2 id="5tocomputeanaggregatevaluefortheeachitemofanarrayreduce">5. To compute an aggregate value for the each item of
    an array - reduce</h2><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce">Array.reduce</a>
    is used to apply the given function to each item of the collection and reduce them to a single value.</p><script src="https://gist.github.com/sridharrajs/f5388deadd2d2dcce339.js"></script></section><section><h2 id="6totestifsomeelementsfromthearrayimplementsthefunctionsome">6.To test if some elements from the array implements
    the function -- some</h2><p>This function will be handy to test, if at least one element in the array implements the function.</p><script src="https://gist.github.com/sridharrajs/93829409487762b60fd33c6756463ccb.js"></script><p>Using lodash over the native functions has few advantages.</p><ul><li>Lodash provides consistent API to work across browsers. Though most of these functions except
        <code>Array.find</code> are supported by the modern browsers starting from IE9. Legacy browsers could require
        polyfills to work.
    </li><li>Accidental <code>undefined</code> are handled better by lodash than native ES5/6 functions. When the input turns
        <code>undefined</code> they don't error out.
    </li></ul><p>This post uses few ES6 features like <a href="https://github.com/airbnb/javascript#arrows--use-them">fat arrows
    function</a>, <a href="https://github.com/airbnb/javascript#es6-template-literals">string template</a>, <a
        href="https://github.com/airbnb/javascript#references--disallow-var">let</a>. For the complete list of ES6
    features, head over to <a href="https://babeljs.io/learn-es2015/">babel docs</a></p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/cleaner-array-manipulation-using-es5-6-lodash</link>
      <guid>https://sridhar.co/cleaner-array-manipulation-using-es5-6-lodash</guid>
      <pubDate>Sat, 12 Mar 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The right way to delight your customers</title>
      <description>
        <![CDATA[<p>In this age of social media, I see a huge disconnect in brand's intention and action. Unless they are <a
        href="https://www.groovehq.com/blog/zapier-interview-with-wade-foster">apple or amazon, rest of them</a>, has to
    take customer service as prime focus over class, economics of the product. Rather than picking <a
            href="http://xkcd.com/388/">delicious low hanging fruits</a>, I as a customer see them doing all sorts of
    creepy things that pisses me off on their quest to deliver a delightful experience. IMHO customer satisfaction is
    often mistaken as <a href="/books/delivering-happiness/">delivering delightful customer
        experience</a>.</p><p>As an early adopter of products, I've developed some rather strong opinions/beliefs about what should be standard of
    good customer servicing. I'd like to share a few of them. Before I begun, let me emphasize these are <em>my</em>
    opinions, not necessarily valid for you.</p><section><h2>1. Listen before you act</h2><p>This has topped the list. With India, being <a
        href="http://timesofindia.indiatimes.com/tech/tech-news/Bengaluru-is-home-to-5-of-Indias-8-unicorn-startups/articleshow/49316190.cms">the
    home of 2 eCommerce unicorn</a>. I had this experience for both of them. I'd ordered a book from one of them. When I
    checked the book after delivery, I noticed few pages were upside down, I'd written an email to them about it. To my
    surprise, I was given refunds along with the reply to my email. Firstly, I dint ask for refunds. My initial
    reaction, was WTH? I reported them this problem and I receive a refund without apologizing. I understand when you
    operate at scale, things can go wrong. But at the same time genuinely say sorry when you empathize with the customer
    after listening to customer could have given you a better position than rudely sending refunds. I could have
    patiently waited for 2 more days to get the replacement instead of refunds. It certainly isn't proactive measure. It
    was an assumption made because the agent has cast customer into a refund stereotype.</p></section><section><h2>2. Stop acting like you care</h2><p>I can't stress this enough. Sending birthday, new year wishes as SMS or email isn't caring. I am not excited to
    receive your wishes. In fact, I <a href="/free-of-whatsapp/">hate such things</a>. I am a
    developer and I know what it takes 'to care' for users at scale. So stop pretending. If you really care for the
    customer and my call was <em>really</em> important to you. Add more support agents to the customer service center.
    Show that you meaningfully care by reducing the time I had to hold on, on a call.</p></section><section><h2>3. Value your customer's time</h2><p>I find it to be the trickiest of all. With the advent of lean start up methodology, people know that feedback is
    essential for the product improvement. It involves two parts When and How. Be specific when you ask for feedback. I
    would say a minute after the purchase could be the ideal time to ask for, when it is about "purchase experience" and
    3 days later if it is about the product, depending on first usage. They are better without mixing them and asking at
    one shot. Feedbacks will be greatly helpful when it comes from early adopters. Not everyone will give you feedback
    and that should be fine. Now comes the second part, How. Sending survey like emails with strongly agree, disagree,
    neutral options do more harm than good.<br/>I remember how painstakingly I deleted emails from CEO
    <em>enlighten</em> me on what <a
            href="http://www.icicibank.com/aboutus/article.page?identifier=news--20141111115728149">Swachh Bharat</a>
    means to them? And what they are doing for it. Earlier it was mailers informing me that they are now available on <a
            href="https://www.instagram.com/axis_bank/?hl=en">Instagram</a>. Sending promotional emails with obscure
    unsubscribe links.</p></section><section><h2>4. Don't use customer's data other than necessary.</h2><p>No one can beat banks when it comes to cross selling data within its internal divisions. I get annoying calls from
    them stating that average quarterly balance of salary account is eligible for personal loan, home loan, etc. To top
    it up, When I make purchase for more than 10k using card swipes, I could get calls from them explaining why it is
    beneficial for me to convert that into an EMI. It is to be noted that I've registered for DND. I was tired of their
    service and finally closed the account with them.</p><p>Similarly, Indian eCommerce startups flood my inbox with my shipment tracking. I didn't find the preference to turn
    them off.</p><p>Enough on this side, lets move on to the other side.</p><ol><li>CITI bank does it right. I haven't received marketing calls from them. I don't get other than statement emails
        from them. There is this neat feature on their credit card PDF statement. Any transaction over and above 10k
        will be hyperlinked. Clicking that you can convert that into an EMI without speaking to anyone. I've been using
        their card for 5 years now. When it was about to expire a year ago, they sent me an email a month prior with an
        option to submit the form for card renewal. I don't remember when I lastly spoke with their customer care
        regarding an issue. It in itself is a testament to their service.
        <p></p></li><li><p>This is the 3rd year with SBI insurance. Every year around February, I will collect all the proof of
            investments I made to file for Tax. Multiple receipts for different investments. Its a tedious work. But
            this year I was surprised to see SBI Insurance send me a consolidated email of the all the policy
            proactively without having me to generate them by date and policy. This you can call it a delight. Readily
            usable without hassle, saving me time.</p></li></ol><p>When I see in retrospection with all my experience, I think setting an expectation is the problem. <strong>I as a
    customer chose a product knowing what service it would offer. Any amount of hard work done to provide that level of
    service will be appear to be normal. It deserves the appreciation of "customer satisfaction". Over doing few items
    goes creepy.</strong> In fact, there is scope for you to fall short of my expectation and get a worse rating from
    me. Delight is when you offer me something which I'd not expected.</p></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/the-right-way-to-delight-your-customers</link>
      <guid>https://sridhar.co/the-right-way-to-delight-your-customers</guid>
      <pubDate>Sun, 14 Feb 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Coloring console logs in nodejs</title>
      <description>
        <![CDATA[<p>Colored console log messages can be helpful in determining the progress of the application when we boot it. Since the
    application will be started from the console, displaying green for the infos, Red for the error will be helpful in
    diagnosing on which stage the application has failed.</p><p>I use <a href="https://github.com/sindresorhus">SindreSorhus's</a><a href="https://www.npmjs.com/package/chalk">chalk</a>
    because it is simple, doesn't extend <code>String.prototype</code> and used by ~4500 other modules.</p><p>Let's get to the code. First, we need to install chalk.</p><script src="https://gist.github.com/sridharrajs/1dda98fdfbe5faf4d506.js"></script><p>To demonstrate red, we are going to <a href="/printing-stack-trace-in-nodejs/">print stack trace of an error</a>.</p><script src="https://gist.github.com/sridharrajs/7c8b646de8562897e1de.js"></script>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/coloring-console-logs-in-nodejs</link>
      <guid>https://sridhar.co/coloring-console-logs-in-nodejs</guid>
      <pubDate>Tue, 02 Feb 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Printing stack trace in nodejs</title>
      <description>
        <![CDATA[<p>Debugging an issue can be hard if we don't get the stack trace. Stack trace saves us the time by taking us right to
    the line number inside a file where the error occurs. Just logging error with plain console.log won't work.</p><script src="https://gist.github.com/sridharrajs/309f4bfa6a4224fa18a8.js"></script><p>It logs <code>[TypeError: user.getName is not a function]</code></p><p>We got a <code>TypeError</code> when we called a non existing function in the user object. Since user object will be
    used in multiple files across our application, error type alone will be insufficient. We can enhance this by
    printing <code>stack</code> to get the exact location of the code causing an issue.</p><script src="https://gist.github.com/sridharrajs/20ac6d2b6e72e6181d41.js"></script><script src="https://gist.github.com/sridharrajs/be861b70277eba55368e.js"></script><p>With err.stack, we now know that the code at line number 3 of index.js causes the issue.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/printing-stack-trace-in-nodejs</link>
      <guid>https://sridhar.co/printing-stack-trace-in-nodejs</guid>
      <pubDate>Wed, 27 Jan 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Free of whatsapp</title>
      <description>
        <![CDATA[<blockquote><p><strong>Update(Nov 2017):</strong> After deleting Whatsapp, I reinstalled
    it after 23 months. Whatsapp has become a necessary evil because of the
    network efforts. Detaching oneself from the medium doesn't solve the
    medium's problem.
  </p></blockquote><p>I've been thinking of quitting whatsapp for some time now. The urge has been
  strong since the beginning of this year.
  This has to be an informed decision since I don't have a Facebook account.
  There are more chances for me, to lose
  the communication with others.</p><p>Being an early adopter, I switched from SMS to whatapps as soon I came to
  know of it. Ads free, a year's trial,
  Groups was convincing enough for me. When two third of my contacts started
  using whats app, Things gradually started
  to clutter. People could add me to school, ex-office groups without my
  consent. Then each morning, I will be
  greeted with the trending memes and GIFs. I say to you, there is a crazy
  amount of work that goes into making each
  of memes. I seriously wonder why people spend all their energy for such a
  temporal thing. In the beginning, it
  appeared normal, but as the days passed, it started to become overwhelming.
  The thing with the group is, all the
  time someone will be carry the baton when the rest are away. Catching up with
  the things that happened during my absence, felt worthless.</p><p>Muting helped to an extent. Slowly, "unread badge" started becoming psychic
  weight over me and I could feel restless
  until I clear them all. I realized that muting is half a solution to a
  problem, that never required solution in the
  first place.</p><p>My act of muting groups for a very long time and just being a spectator
  without either sending or caring to read
  messages, provoked questions within me.</p><blockquote><p>What value I get by being a member in such groups, what value I offer in
    return?</p><p>Why should I even be a member of such group in the first place?</p></blockquote><p>I also noticed yet another problem. <em>Technology has made communication
  inexpensive and took the human touch out of
  it</em> It was evident from this year's new year eve. There was no joy in
  seeing those wishes for the occasion. The
  joy you get when a friend wishes you over the phone, the fulfillment you get
  by wishing someone. But these whatsapp
  messages were formal, courteous, simply temp-latish. A friction like not being
  on whatsapp is sufficient to separate
  grain from the chaff. I quit whatsapp for telegram two weeks ago with my inner
  circle of half a dozen. Since we knew
  each others schedule, I now receive meaningful real messages. There are no
  SPAMS or forwards and importantly no
  namesake chit chats to stay in touch from casual contacts.</p><p>This real time communication is a good place to hang out if you want to be
  entertained, network. But if you really
  want to get stuff done, stay away from it and work on own your thing. <strong>By
    constantly being available, you are actually hurting yourself</strong></p><p><strong>If you ever regret not having enough time to do the things you want
  to do, make it little harder for yourself to indulge in this time stealing activities.</strong> By introducing a friction, I
  was able to free myself from the power
  hose. Fortunately, I dint lose any of the communications with those who
  mattered as they understood me and moved
  along. It was not as scary as I thought it would be. Now, I am able to give my
  complete attention to people I talk
  with and to things I do. The quality of time I spend on things has improved
  without digital distraction. I don't see
  myself going back to whatsapp again.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/free-of-whatsapp</link>
      <guid>https://sridhar.co/free-of-whatsapp</guid>
      <pubDate>Mon, 25 Jan 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2015 in review</title>
      <description>
        <![CDATA[<p>
    Year <a href="/year-2014/">2014</a> was my first year in review post and I got a realization when I sat down to write this year's.
</p><p>
    I took pointers on what all things I did last year. Half way into it, I felt comprehending all the stuff I did in a
    single blog post is not giving attention each item deserves. Things like why I moved out of shared hosting to EC2,
    learnings I got by launching a couple of my side projects, tweaks I made to better my routine to get work-life
    balance, How I consolidated apps I use every day, a new workflow routing all my email, number of books I read last
    year and tons of other things. All I can do here, is to say that, I did them. The post sort of became my report card
    without the <strong>Why</strong>.
</p><p>
    On the flip side, When I see in retrospection of all my last year posts, review of <a href="/books/badass-making-users-awesome/">Kathy's badass making user
    awesome</a> was the one I wrote instantly after
    reading that book. <strong>The earlier it is, the better. It was easier for me to write it, as things could just
    flow from the top of my head.</strong> Postponing, makes it harder for me to remember the details. So this year,
    I have decided to write a post as soon as I finish things. Glad if it helps someone, else it is still fine, because
    the motive was just to write it for myself.
</p><p><p>Previously <a href="/year-2014/">2014</a>.</p></p>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/doing-things-along-the-way</link>
      <guid>https://sridhar.co/doing-things-along-the-way</guid>
      <pubDate>Thu, 07 Jan 2016 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>My toolbox</title>
      <description>
        <![CDATA[<section><p>I'm a polygot pragmatic programmer, I choose the best tool for the job.
  Following are
  the list of tools I use on <a
    href="/my-desktop/">my HP Pavilion Notebook</a></p></section><section><h2>Mobile</h2><p>
  In 2020, I learnt <a href="/year-2020-in-review">the hard way</a> not to rely on a single phone without backups. But these days, I'm mostly on Android
  after my iPhone died due to a lack of OS Updates.
</p><div class="split-image-container"><div class="image-container"><img alt="old" class="responsive drop-shadow" style="height: 300px" src="/images/2020.jpg"/></div><div class="image-container"><img alt="new" class="responsive drop-shadow" style="height: 300px" src="/images/mobile-2023.jpeg"/></div></div><p>One obvious difference here is the screen size. Other than that, rest all remains the same.</p><ul><li><strong>Utility</strong> - BHIM, Gpay(for making payment via phonenumber), Dropbox, Authy(for all 2FAs), Pluxee and Spotify.</li><li><strong>Work</strong> - Slack and teams.</li><li><strong>Family</strong> - Telegram and Google Meet.</li><li><strong><a href="/free-of-whatsapp">Necessary evil</a></strong> - what’s app
    </li></ul><p>For everything else, Firefox.</p></section><section><h2>System</h2><p><strong>Debian OS</strong> -
  Initially, I got started with Ubuntu 9.04 and stayed with it until 11.04. But
  over a period of time, I got tired of
  having to keep with the latest version of the OS. I wanted a stable distro
  that had less releases than Ubuntu.
  That's when I found out Debian 6. Since then I am sticking with it. I use
  Debian 10 with <a
    href="http://www.gnome.org/" rel="nofollow">Gnome 3</a> desktop as my primary OS. If you
  want
  to try GNU/Linux, I still
  recommend you to get started with Ubuntu. Switch to Debian once you're
  familiar with the Linux way of doing things
</p><p><strong><a href="https://keepassxc.org/" rel="nofollow">KeePassXC</a></strong> - To generate
  and store passwords.
  I prefer <strong> stand alone, non-cloud, open sourced, desktop only</strong> password managers. For mobile, I
  use <a href="https://github.com/Kunzisoft/KeePassDX" rel="nofollow">KeePassDX</a>.
</p><h3>Note taking</h3><ul><li>Google Keep: for ephemeral notes.</li><li>Git based journal: for all note taking.</li><li>calendar in pdf: for planning all things with dates.</li></ul><h3>Browsers & Add-ons</h3><p>
  My browser configuration - <a rel="nofollow" 
  href="https://github.com/sridharrajs/browser-configurations">browser-configurations</a></p><ol><li><strong>Firefox developer version</strong> - for all My personal and casual surfing.</li><li><strong>Chrome</strong> - Strictly for development and for chrome only use case.</li></ol><h3>Text Editor/ IDEs</h3><ol><li><strong>VS Code</strong> - For all My Node.js/JavaScript/Python works. My configurations <a
    href="https://github.com/sridharrajs/vscode">here</a></li><li><strong>Vim/Emacs</strong> - the editor that I'm constantly learning. My .emacs
    config <a rel="nofollow" 
      href="http://github.com/sridharrajs/emacs.d">here</a></li></ol><h3>DB visualizers</h3><ol><li><strong>MongoDB Compass</strong> - cross platform GUI for MongoDB
  </li><li><strong>Sqlitebrowser</strong> - GUI for SQLite database when building android app.
  </li></ol><h3>Services</h3><ol><li><a href="https://pinboard.in" rel="nofollow"><strong>Pinboard</strong></a> - for managing my bookmarked links. For moving the links to my pinboard I use
    <a href="https://github.com/sridharrajs/pin-tweet" rel="nofollow">pin-tweet</a> + 
    <a href="https://github.com/sridharrajs/pin-tweet/pull/9" rel="nofollow">pintelegram</a>, a telegram bot.
  </li></ol><h3>Utility Tools</h3><ol><li><a href="http://meldmerge.org/" rel="nofollow"><strong>Meld</strong></a> - For occasional code
    comparison. I like its 2 & 3 way comparision between files and folder.
  </li><li><a href="http://shutter-project.org/ rel="nofollow"><strong>Shutter</strong></a> - For taking
    and annotating screenshot.
  </li><li><a href="http://dragly.org/2011/11/01/bookmarks-in-terminal/" rel="nofollow"><strong>Apparix
  </strong></a> - For bookmarking folders in terminal.
    After bookmarking you can go directly
    to the project by <code>to project1</code> than painstakingly typing <code>cd
      ../../github-repos/npms/project1</code>. You can find the resource file
    that holds all the location details
    at <code>$HOME/.apparixrc</code></li></ol></section>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/my-toolbox</link>
      <guid>https://sridhar.co/my-toolbox</guid>
      <pubDate>Thu, 31 Dec 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The joy of sharing</title>
      <description>
        <![CDATA[<blockquote><p>He Himself said, 'It is more blessed to give than to receive.' - <strong>Act 30:35</strong></p></blockquote><p>Last <a href="/year-2014/">year</a>, I hastily donated to the software I used with no proper planning and budget.
    Wikipedia, Mozilla and ADP, typical Internet application made into the list. My intention then, was just to donate.
    Days later, I realized that I had seen things as a normal Internet consumer, rather than seeing beyond the Internet.
    So this year, I took time to analysis the software I use and allocated $100 budget for them. Most of these software
    plays some role in defending privacy. Following made into this year's list</p><ol><li><a href="https://adblockplus.org/">ADP</a><br/>This extension alone, has saved me countless hours as I spend
        most of my day on the Internet everyday. Youtube videos plays instantly, all the pages you visit are neat and
        clean without pesky ads. This is second year they are featuring on my list.
    </li><li><a href="http://piwik.org/">Piwik</a><br/>I started using it a year ago. To me, It is how a open source project
        should be. It was easy to update with just a click of button, and never got into my way of managing blogs. I
        din't have any server crash while updating . For a guy, who values privacy, this level of robust software is
        highly appreciated. This is the first time, I am making a donation to Piwik.
    </li><li><a href="http://robomongo.org/">RoboMongo</a><br/>This is the best tool you can get for mongoDB. I have been
        using robomongo for atleast couple of years. Its the most stable client for mongoDB on Linux. Its open source
        and free for both personal and commercial use. They are now on <a
                href="https://www.indiegogo.com/projects/save-robomongo#/">Indiegogo</a> raising funds for active
        development. I donated to them and this is my first backing in indiegogo. You can donate without signing up for
        indiegogo.
    </li><li><a href="https://www.mozilla.org/en-US/">Mozilla</a><br/>I always had a soft corner for Mozilla. When I receive
        such a email from them, how can I not donate for the cause?
    </li></ol><blockquote><p><strong>You and I, we’re not average.</strong> We don’t see ourselves as passive consumers of the Web. We—you,
        me, the millions who are part of this movement—see ourselves as citizens of the Web.</p><p><strong>In 2016, here’s where we’re making a stand:</strong><br/><strong>Fight for online privacy:</strong> From
        surveillance to security to identity, trust is eroding. That hurts the open nature of the Web. Everyone should
        feel safe online. We will push governments and companies to give people the choice to be private and secure when
        they want to be.</p><p><strong>Help more people get access to the whole Internet, not just part of it:</strong> From zero rating to
        online harassment, inclusion is not guaranteed. We want to ensure everyone has a chance to shape the Internet so
        it reflects the beautiful diversity of our world.</p><p><strong>Put more people in control of their online lives:</strong> The Internet is growing, but too many people
        are still passive consumers of online content. Everyone deserves to have the skills and know-how to unlock
        opportunities online. That’s why we’ll continue to champion universal digital literacy.</p></blockquote><p>With the recent changes like these, Mozilla is fighting for online privacy like never before. Donating to them makes
    sense. You can donate in INR. This is the second time Mozilla is featuring in the
    list.</p><p>5.<a href="http://www.fsf.org/">Free Software Foundation</a><br/>For the record, this is the first time I making a
    donation to FSF. I was more of an open source guy than a free software. The entire Free software philosophy sounded
    crazy to me initially but with recent revelation like <a
            href="https://en.wikipedia.org/wiki/Volkswagen_emissions_scandal">volkswagen emission scadel</a>, <a
            href="http://boingboing.net/2015/09/22/yet-another-pre-installed-spyw.html">Lenovo installing spywares</a>,
    <a href="https://en.wikipedia.org/wiki/Global_surveillance_disclosures_%282013%E2%80%93present%29">Snowden
        revelations</a> and software venturing into all the appliances. I think we need FSF more than ever.</p><p>6.<a href="https://en.wikipedia.org/wiki/Main_Page">Wikipedia</a><br/>When Wikipedia asks for donation, I give it.
    It's too useful a tool, to use for free. Though, their ads for asking donation might be an irony, their cause is
    noble.</p><p class='image-container'><img alt="Wikipedia" src="http://imgs.xkcd.com/comics/the_problem_with_wikipedia.png"/></p><p>Saw that <strong><em>"Three hours of fascinated clicking"</em></strong>? I belong to that category. It has
    became a habit for me to surf hours on Wikipedia after each movie.</p><p>That's it, I'm done with donations for this year. </p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/the-joy-of-sharing</link>
      <guid>https://sridhar.co/the-joy-of-sharing</guid>
      <pubDate>Wed, 30 Dec 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>My resolution for 2016</title>
      <description>
        <![CDATA[<p>With new year around the corner, it is resolution time. People usually take resolutions at the <em>beginning of the
    year</em>. But I am going to continue my <em>mid year resolution</em> I took this year, as my 2016 resolution. It is
    religiously following Jeff Atwood's <a
            href="http://blog.codinghorror.com/how-to-stop-sucking-and-be-awesome-instead/">How to Stop Sucking and Be
        Awesome Instead</a>.</p><blockquote><p>Here's what I've seen work:<br/><strong>1. Embrace the Suck<br/>2. Do It in Public<br/>3. Pick Stuff That Matters</strong></p><p>Mostly, I think it's the fear that gets us, in all its forms. Fear of not achieving. Fear of not keeping up. Fear
        of looking dumb. Fear of being inadequate. Fear of being exposed. Fear of failure. <strong>The only thing
            preventing us from being awesome is our own fear of sucking.</strong> So that's why I say we embrace it. Who
        wants to live forever?</p></blockquote><p>I wanted to learn MEAN stack this year. So, I decided to use this post as my motivation for it. I got started with
    building <a href="https://github.com/sridharrajs/mywallet/">MyWallet</a>, an expense management hobby project built
    with MEAN stack. I strongly resisted the usual initial urge to hide my imperfection behind Bitbucket and went ahead
    and created a GitHub repository.</p><p>It was obvious, being a beginner in the chosen tech stack, I did multiple things wrongly. I used SHA1 to store
    password instead of <a href="http://codahale.com/how-to-safely-store-a-password/">Bcrypt</a>. I used NoSQL like SQL.
    I had over engineered database to accommodate future schema changes. I used angularJS with Jquery mindset writing
    ajax calls on controllers instead of services and <a
            href="http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background">many
        more</a>.</p><p>But I also learnt new things by debugging <code>nodejs</code> application which made it to production. <a
        href="https://github.com/TryGhost/Ghost">Ghost.org</a>, <a href="https://github.com/NodeBB/NodeBB">NodeBB</a>'s
    GitHub repository were of huge help to me. As soon as I discover a best practice, I would research and learn a
    little more about it and will implement them in my app. Every time I wrote something, I tried to keep it little
    tidier and better than how I checked it out.</p><p>This had a drastic impact in leveling up my developer skill. With the little changes, adding up, I could see myself
    making transition from newbie to a decent MEAN stack developer. I started seeing every thing as events and was ready
    to take up lesson when proven wrong. I no longer fear being rejected or wrong.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/resolution-for-2016</link>
      <guid>https://sridhar.co/resolution-for-2016</guid>
      <pubDate>Fri, 25 Dec 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>BadAss Making Users Awesome by Kathy Sierra</title>
      <description>
        <![CDATA[<p>This book will teach you to how to make an awesome user of your product than just
    making an
    awesome product.</p><p style="text-align: center"><iframe
            allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
            allowfullscreen
            frameborder="0" height="315"
            src="https://www.youtube.com/embed/tBioIUWEyzo" width="560"></iframe></p><p style="text-align:center"><img
        alt="badass-making- users-awesome"
        class="aligncenter size-medium wp-image-1000"
        height="300" width="199"
        src="/images/badass-making-users-awesome-by-kathy-sierra.jpg"/></p><p>To make users advance from beginner to expert, it takes</p><ol><li>Better practice with feedback.</li><li>Developing an
        appetite for deep perceptual knowledge and skills through high-quantity and
        high quality.
    </li><li>Dealing with
        cognitive resource leaks.
    </li></ol><h2>Better practice with feedback</h2><p>I'd perceived practice as long, hard session of doing the repeated task. No
    matter even if I'm bored, I did things
    for the sake of doing to better at it. Repeated task breed mediocrity and
    boredom. It makes things permanent and
    locks in whatever is practiced. I started to do things without consciously
    involving on it. Kathy has dealt that
    behavior in detail on why it is important to move tasks from half assed skill
    to half a skill.</p><p>Peter norvig also describes how a deliberate practice is important to improve
    one's skill in his classic <a
            href="http://web.archive.org/web/20161125182601/http://www.norvig.com/21-days.html">Teach
        Yourself Programming
        in Ten Years</a></p><blockquote><p>Researchers (Bloom (1985), Bryan &amp; Harter (1899), Hayes (1989), Simmon
        &amp; Chase (1973)) have shown it
        takes about ten years to develop expertise in any of a wide variety of
        areas, including chess playing, music
        composition, telegraph operation, painting, piano playing, swimming, tennis,
        and research in neuropsychology and
        topology. The key is <strong>deliberative practice</strong>: not just doing
        it again and again, but challenging
        yourself with a task that is just beyond your current ability, trying it,
        analyzing your performance while and
        after doing it, and correcting any mistakes. Then repeat. And repeat again.
        There appear to be no real
        shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more
        years before he began to produce
        world-class music. In another genre, the Beatles seemed to burst onto the
        scene with a string of #1 hits and an
        appearance on the Ed Sullivan show in 1964. But they had been playing small
        clubs in Liverpool and Hamburg since
        1957, and while they had mass appeal early on, their first great critical
        success, Sgt. Peppers, was released in
        1967. Malcolm Gladwell has popularized the idea, although he concentrates on
        10,000 hours rather than 10 years.
    </p></blockquote><p>We should constantly examine our <a
        href="https://youtu.be/FKTxC9pl-WM?t=8m45s">Mastered bucket</a>, and start
    looking for a scope to better.</p><h2>Developing an appetite for deep perceptual knowledge and skills through
    high-quantity and high quality</h2><p>In order to be an expert we need to take a different approach by
    watching/listening or being surrounded by experts.
    It is demonstrated through chicken sexing, perceptual learning in flight
    training anecdotes. Our brains recognizes a
    pattern on being exposed to such magnitude of high quality content.</p><h2>Dealing with cognitive resource leaks</h2><p> Having <a
        href="http://news.slashdot.org/story/12/10/04/1328227/for-obama-jobs-and-zuckerberg-boring-is-productive">not to
    think</a> about every day outfits is good.
    Making too many decisions the drain the mental energy and you should provide good <a
            href="http://businessofsoftware.org/2015/03/kathy-sierra-building-minimum-bad-ass-user-unfinished-business/">enough
        defaults</a> for your users to run out of the box. Wanting the users to take too many decision can have <a
            href="http://seriouspony.com/blog/2013/7/24/your-app-makes-me-fat">unintended health effects</a></p><blockquote><p>Because on their deathbed, our users won't be thinking,"If only I'd spent
        more time engaging with brands."</p></blockquote><p></p><blockquote><p>We all think that choice is awesome we give the user lots and lots of
        choices.But we know, this is not actually
        what they feel. When were confronted by choices. This is what they feel.
        When they have choices. Because even
        after they make the choices, it’s still stressful, their still leaking
        resources. So it doesn’t mean, don’t give
        them choices, but you don’t force them to make those choices. So if they
        have trusted filters and defaults, it’s
        a huge benefit, and we also have micro leaks. Micro leaks are just the tiny
        little things that add up that you
        worry about right? I did turn off the oven; I did switch my phone on
        airplane mode right? It’s not going to
        actually buzz while I’m in the theatre right? So, death by 1,000 cognitive
        micro leaks.</p></blockquote><blockquote><p>If your UX asks the user to make choices, for example, even if those
        choices are both clear and useful, the act
        of deciding is a cognitive drain. And not just while they're deciding...
        even after we choose, an unconscious
        cognitive background thread is slowly consuming/leaking resources, "Was that
        the right choice?"</p></blockquote><p>
    Understand <a href="https://www.youtube.com/watch?v=FKTxC9pl-WM">cognitive
    leak</a>, the app user has got a life to live and be mindful of it. Never
    plague your app with options, pre-configure
    defaults wherever possible.
</p>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/badass-making-users-awesome</link>
      <guid>https://sridhar.co/books/badass-making-users-awesome</guid>
      <pubDate>Fri, 06 Nov 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>1 Year Blogging Anniversary</title>
      <description>
        <![CDATA[<blockquote><p>Only a small percentage of blogs survive their first year.</p></blockquote><p>Today I am happy to say that I'm one of them :). It all started with these doubts</p><ol><li>Do I really have anything to say here for the people who could read my blog?</li><li>Can I say it in a way interesting enough to read the complete post?</li><li>Will anyone be interested in reading my blog?</li></ol><h3>1. Do I really have anything interesting thing to say?</h3><p>This is the biggest of all. Professional blogger says to start with things that you're familiar with. I'm being a
    developer was out of luck here. Though programming naturally becomes my familiar forte, Stack overflow has a
    solution to literally every single problem you might encounter, including all the best practices.</p><p>I think this is one of the reasons people stopped writing technical articles on their blog since the rise of Stack
    overflow. Searching for any technical problem, you will find help within top 3 SO pages on google.</p><p>Though, initially I didn't have any interesting thing to say here. I was clear that I was not a writer and certainly
    not a journalist following apple event for eyeballs. In fact, I consider that as a plain waste of time to say the
    same things in different ways. Writing for other was not my priority now.</p><h3>2. Can I say it in a way interesting enough to read the complete post?</h3><p>Surprisingly, it has found some takers. Following were the list of the top posts from my blog.<br/>1. <a
        href="/introverts/" rel="noopener" target="_blank">What is introvert</a><br/>2. <a
        href="/books/" rel="noopener" target="_blank">myBook shelf</a><br/>3. lesson learnt from
    failed startups</p><p>I find organized blog posts handy when I wanted to share a few examples of failed startups and design standards.</p><h3>3. Will anyone be interested in reading my blog?</h3><p>Hmmm.. Honestly speaking, If you're intending to monetize your blog with ads, it matters. Else its all fine. Without
    much social sharing I receive decent hits from my close circle.</p><p>Most of the time, I could know that I've shared some article with a friend, but locating it in medium(email, twitter
    dm, favorites, pocket) will be painful. Most of them are public in nature and organizing them in post made sense
    then. I've been the biggest benefactor of this blog. It saves tons of minutes, when I search for things in organized
    content.</p><blockquote><p>People reduce themselves to the predefined contents of checkboxes and drop-down relationship statuses.</p></blockquote><p>Some have <a href="https://about.me/" rel="noopener" target="_blank">about.me</a> serving them as online visiting
    cards. But Hey, isn't it cool to own your space? I no longer feel limited by platform to express <a
            href="/" rel="noopener" target="_blank">things</a>, list my <a
            href="/books/" rel="noopener" target="_blank">books</a>, <a
            href="/my-toolbox/" rel="noopener" target="_blank">toolbox</a>.
<p>I can say you that, buying a domain and doing it myself taught me a lot of stuff. I hope I'll continue to learn much
    more from the years to come.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/1-year-blogging-anniversary</link>
      <guid>https://sridhar.co/1-year-blogging-anniversary</guid>
      <pubDate>Sat, 03 Oct 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>How to set custom shortcuts on Debian</title>
      <description>
        <![CDATA[<p>
    One of the best things about using GNU/Linux is that you can set your own custom shortcut for applications. In this
    post, I will show you how to set shortcut for an application.
</p><h4>1. First open the System setting from, System tools -&gt; preference -&gt; system setting. It will look like the
    following. Click on the keyboard icon.</h4><div class="image-container"><img
            alt="system settings"
            class="responsive size-full wp-image-528"
            height="567" src="/images/Screenshot-from-2015-04-14-211035.png" width="677"/></div><h4>
    2. In Keyboard window, select Shortcuts Tab and click on "+" to add shortcut.
</h4><div class="image-container"><img
        alt="add custom"
        class="responsive size-full wp-image-529" height="494"
        src="/images/Screenshot-from-2015-04-14-211126.png" width="677"/></div><div class="image-container"><img
        alt="Selection_014"
        class="responsive size-full wp-image-530" height="489" src="/images/Selection_014.png"
        width="676"/></div><div><p>
        I want to create a shortcut for firefox, command for that is <code>firefox</code>. After adding them, the
        dialogue
        will look like the following one.
    </p></div><div class="image-container"><img
        alt="firefox"
        class="responsive size-full wp-image-531" height="492" src="/images/Selection_016.png"
        width="676"/></div><h4>3. After apply, click on disabled and press your desired key combination.</h4><div class="image-container"><img
        alt="change"
        class="responsive size-full wp-image-532" height="494"
        src="/images/Screenshot-from-2015-04-14-213157.png" width="677"/></div><p>In my case, I am setting Super + f as my desired shortcut.</p><div class="image-container"><img
        alt="final"
        class="responsive size-full wp-image-533" height="494"
        src="/images/Screenshot-from-2015-04-14-213438.png" width="677"/></div><p>4. Thats it folks, we have set a custom shortcut for an application.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/how-to-set-custom-shortcuts-on-debian</link>
      <guid>https://sridhar.co/how-to-set-custom-shortcuts-on-debian</guid>
      <pubDate>Mon, 13 Apr 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The Fountainhead by Ayn Rand</title>
      <description>
        <![CDATA[<p>I recently read <a href="https://www.goodreads.com/book/show/2122.The_Fountainhead">The Fountainhead</a>. It is a
    fictional work depicting the battles waged by Howard roak, an individual against the society. The choice to think
    for oneself, or to live second hand by depending upon the minds of others.</p><div class='image-container'><img
        alt="the-fountainhead"
        class="responsive"
        height="300" width="199"
        src="/images/the-fountainhead.jpg"/></div><p>I'm sharing few quotes which I loved from the book</p><blockquote><p>"Man's ego is the fountainhead of human progress"</p></blockquote><blockquote><p>“I love doing it. Every building is like a person. Single and unrepeatable.” “A house can have integrity, just
        like a person,' said Roark, 'and just as seldom.” “Now take a human body. Why wouldn't you like to see a human
        body with a curling tail with a crest of ostrich feathers at the end? And with ears shaped like acanthus leaves?
        It would be ornamental, you know, instead of the stark, bare ugliness we have now. Well, why don't you like the
        idea? Because it would be useless and pointless. Because the beauty of the human body is that is hasn't a single
        muscle which doesn't serve its purpose; that there's not a line wasted; that every detail of it fits one idea,
        the idea of a man and the life of a man.”</p><p>“Rules?" said Roark. "Here are my rules: what can be done with one substance must never be done with another. No
        two materials are alike. No two sites on earth are alike. No two buildings have the same purpose. The purpose,
        the site, the material determine the shape. Nothing can be reasonable or beautiful unless it's made by one
        central idea, and the idea sets every detail. A building is alive, like a man. Its integrity is to follow its
        own truth, its one single theme, and to serve its own single purpose. A man doesn't borrow pieces of his body. A
        building doesn't borrow hunks of its soul. Its maker gives it the soul and every wall, window and stairway to
        express it.”</p></blockquote><p>I liked the way how Ayn Rand defined <strong>integrity</strong></p><blockquote><p>“Do you think integrity is the monopoly of the artist? And what, incidentally, do you think integrity is? The
        ability not to pick a watch out of your neighbor's pocket? No, it's not as easy as that. If that were all, I'd
        say ninety-five percent of humanity were honest, upright men. Only, as you can see, they aren't.<strong>
            Integrity is
            the ability to stand by an idea. That presupposes the ability to think. </strong> Thinking is something one
        doesn't borrow
        or pawn.”</p><p>
        “To sell your soul is the easiest thing in the world. That's what everybody does every hour of his
        life. If I asked you to keep your soul - would you understand why that's much harder?”
    </p><p>“Listen to what is being preached today. Look at everyone around us. You've wondered why they suffer, why they
        seek happiness and never find it. If any man stopped and asked himself whether he's ever held a truly personal
        desire, he'd find the answer. He'd see that all his wishes, his efforts, his dreams, his ambitions are motivated
        by other men. He's not really struggling even for material wealth, but for the second-hander's delusion -
        prestige. A stamp of approval, not his own. He can find no joy in the struggle and no joy when he has succeeded.
        He can't say about a single thing: 'This is what I wanted because I wanted it, not because it made my neighbors
        gape at me'. Then he wonders why he's unhappy.”</p><p>“It's easy to run to others. It's so hard to stand on one's own record. You can fake virtue for an audience. You
        can't fake it in your own eyes. Your ego is your strictest judge. They run from it. They spend their lives
        running. It's easier to donate a few thousand to charity and think oneself noble than to base self-respect on
        personal standards of personal achievement. It's simple to seek substitutes for competence--such easy
        substitutes: love, charm, kindness, charity. But there is no substitute for competence.”</p><p>“Before you can do things for people, you must be the kind of man who can get things done. But to get things
        done, you must love the doing, not the secondary consequences. The work, not the people. Your own action, not
        any possible object of your charity.”</p></blockquote>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/books/the-fountainhead</link>
      <guid>https://sridhar.co/books/the-fountainhead</guid>
      <pubDate>Mon, 13 Apr 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Installing Firefox developer edition on Debian</title>
      <description>
        <![CDATA[<blockquote><strong>Update:</strong> The trademark issue <a href="https://wiki.debian.org/Firefox#From_Debian_packages"> has been resolved</a>. Firefox is now available in synaptic manager. </blockquote><p>
    Mozilla <a href="http://techcrunch.com/2014/11/10/mozilla-launches-firefox-developer-edition/"
               target="_blank">released</a> Firefox developer edition on their 10th year anniversary. I cant wait to
    install it on my Debian. Its know that Debian wont have it on their repos because of the branding
    <a href="https://en.wikipedia.org/wiki/Mozilla_Corporation_software_rebranded_by_the_Debian_project"
       target="_blank">issue</a></p><p>So, if you are wondering how to install Firefox developer edition on Debian. Here are the steps.
</p><ol><li>Go <a href="https://www.mozilla.org/en-US/firefox/developer/" target="_blank">https://www.mozilla.org/en-US/firefox/developer/</a>
        and download the firefox-XXX-linux-x86_64.tar.bz2 for corresponding to your OS's bit.
    </li><li>Now to navigate to downloaded location. In my case it was in downloads folder. When you unzip the archive, it
        could be just Firefox folder. Just to avoid conflict with existing Firefox installation we will rename it to be
        dev-firefox.
    </li></ol><p><blockquote>
    sridharrajs@Home:~/Downloads$ mv firefox dev-firefox
</blockquote><p>Now move the entire dev-firefox to opt directory
</p></p><p><blockquote>sridharrajs@Home:~/Downloads$ sudo mv dev-firefox/ /opt/</blockquote>

Navigate to the <code>/opt/dev-firefox</code> and start developer edition using <code>./firefox</code><blockquote>
    sridharrajs@Home:~/Downloads$ cd /opt/dev-firefox <br>
    sridharrajs@Home:/opt/dev-firefox$ ./firefox

</blockquote></p><p><strong>Note</strong> : If you want to create a shortcut for it in Gnome2 desktop. Read on.
    Holding <kbd> Window key</kbd> + <kbd>Alt </kbd> right click on the top panel. Select Add to panel

</p><div class="image-container"><img alt="add to panel"
         class="responsive size-medium wp-image-436"
         height="169" src="/images/Screenshot-from-2015-01-22-200506-300x169.png" width="300"/></div><p>Select Custom Application Launcher</p><div class="image-container"><img alt="application launcher"
         class="responsive"
         height="281" src="/images/Screenshot-from-2015-01-19-205659-300x281.png" width="300"/></div><p>You will see a window where you need to enter the location of the installation.</p><div class="image-container"><img alt="create launcher"
         class="responsive"
         height="171" src="/images/Screenshot-from-2015-01-16-130705-300x171.png" width="300"/></div><p>After filling details, in my case looked like the following.</p><div class="image-container"><img alt="Filled - Screenshot from 2015-01-16 13:10:28"
         class="responsive"
         height="122" src="/images/Filled-Screenshot-from-2015-01-16-131028-300x122.png"
         width="300"/></div><p>Say Close. Now you can see that Firefox developer edition icon appears in the panel. That's it.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/installing-firefox-developer-edition-on-debian</link>
      <guid>https://sridhar.co/installing-firefox-developer-edition-on-debian</guid>
      <pubDate>Sun, 18 Jan 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Year 2014 in review</title>
      <description>
        <![CDATA[<p>First post of this year. A review of last year after 13 days into the new year.</p><blockquote><p>Late, but done.</p></blockquote><p>This has been the only strategy I followed in almost all the things I did last year. Following were the list of major
    things I did last year.</p><p><strong>1. Resurrected my blogger only to move onto WordPress later</strong></p><p>I took this domain and self hosted it with WordPress. In process of setting up this blog, I learned the "How" &amp;
    "Why" part of categorizing SEO friendly post.</p><p><strong>2. Though I never answered on stack overflow, one accepted answer changed it.</strong></p><blockquote><p>StackOverflow is one of the best things that ever happened to developers after IDE</p></blockquote><p>My <a href="http://stackoverflow.com/users/978501/sridhar">SO reputation</a> grew from 1 to 309 getting me 2 silver
    and 13 bronze badges.</p><p><strong>3. Created PayPal account</strong></p><p>In 2013, it was just <a href="https://twitter.com/SridharrajS/statuses/417877748900581376">Wikipedia</a>. This year
    created PayPal account just to donate for <a
            href="https://sendto.mozilla.org/page/contribute/givenow-seq?source=base_url#page-1">Firefox</a> and <a
            href="https://adblockplus.org/">ADP</a> in addition to the usual <a
            href="https://twitter.com/SridharrajS/statuses/548889695032049665">Wikipedia</a>.</p><p><strong>4. Reading</strong></p><p>You should try <a href="https://www.goodreads.com/user/show/23885414-sridhar-raj-sampath-kumar">Goodreads</a> for
    organizing all your books neatly into read, reading, planning to read categories. I read 7 books this year.
    When it comes to articles, pocket says I read 895, 359 words equivalent to 19 books.</p><p>So that was how 2014 was for me. Lets see how 2015 will be.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/year-2014</link>
      <guid>https://sridhar.co/year-2014</guid>
      <pubDate>Mon, 12 Jan 2015 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>The Internet’s Own Boy: The Story of Aaron Swartz</title>
      <description>
        <![CDATA[<p , style='text-align: center'><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen frameborder="0" height="315"
            src="https://www.youtube.com/embed/3Q6Fzbgs_Lg" width="560"></iframe></p><p>I happen to see this video on first death anniversary of Aaron Swartz. I could say well spent one and half hour.</p><blockquote><p>I think deeply about things and want others to do likewise. I work for ideas and learn from people. I don’t like
        excluding people. I’m a perfectionist, but I won’t let that get in the way of publication. Except for education
        and entertainment, I’m not going to waste my time on things that won’t have an impact. I try to be friends with
        everyone, but I hate it when you don’t take me seriously. I don’t hold grudges, it’s not productive, but I learn
        from my experience. I want to make the world a better place.</p></blockquote>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/the-internets-own-boy-the-story-of-aaron-swartz</link>
      <guid>https://sridhar.co/the-internets-own-boy-the-story-of-aaron-swartz</guid>
      <pubDate>Wed, 12 Nov 2014 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Git for beginners</title>
      <description>
        <![CDATA[<p>
    Git, is the one of few thing you need to learn to work efficiently in a software team. That's the reason it is
    listed as the first item in
    <a href="http://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/">The Joel Test: 12 Steps to
        Better Code</a></p><p>
    Unlike other version controls, Git is distributed. Meaning, you can continue to create locally and commit branches
    locally without connecting to Git hosting servers. There is no thing as
    <em>central repository</em>. Every developer can have <em>his own copy of the entire history</em>.
</p><p>
    If you want to make yourself familiar with Git commands and best practises of PR, commit messages head over to <a
        href="http://github.com/sridharrajs/git-cheatsheet/">My GitHub cheatsheet</a></p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/github-resources</link>
      <guid>https://sridhar.co/github-resources</guid>
      <pubDate>Tue, 29 Jul 2014 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>My Laptop</title>
      <description>
        <![CDATA[<blockquote><p><strong>Update</strong> I upgraded to 8GB RAM after I got into <a
        href="/prerequisites-for-android-programming/">Android programming</a></p></blockquote><p>I wanted to buy a laptop this year. Moderate weight, compact screen, and decent battery life were my criteria. In terms
    of hardware specification, most laptops these days have 4th gen Intel i3 processor, 4 GB of RAM with 1 TB hard
    disk. Finally brought HP Pavilion Notebook – 13-b102tu.</p><p>My laptop will look like this. By default, it came with Windows 8 pre-installed and UEFI secure boot. I’d to
    downgrade to legacy boot to have Debian installed wiping
    windows 8. I somehow didn’t like Gnome 3, so switched to Gnome Classic desktop and started installing software. For the
    complete list of software I use, head over to <a href="/my-toolbox">my tools box</a>.</p><p>The Synaptic manager had most of it except the real Firefox and Firefox developer versions. But I <a
        href="/installing-firefox-developer-edition-on-debian">worked around to install</a> them on
    Debian</p><div class="image-container"><img
        alt="" class="responsive size-full wp-image-123"
        height="768"
        sizes="(max-width: 1366px) 100vw, 1366px" src="/images/my-desktop.png" width="1366"></div><p>After installing all of them, this is how my desktop looked.</p>]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/my-desktop</link>
      <guid>https://sridhar.co/my-desktop</guid>
      <pubDate>Wed, 22 Jan 2014 18:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Comeback</title>
      <description>
        <![CDATA[<div class="image-container"><a href="http://www.hcltech.com/" rel="noopener" target="_blank"><img
        alt="HCL_Technologies_logo"
        class="responsive wp-image-88 size-medium" height="45"
        src="/images/hcl.jpg" width="300"/></a></div><p>And that’s the reason for the long silence. Hope to blog a bit more regularly now.</p><p>It has been a year since I joined HCL. A lot of things have happened during these days. Hope to share the appropriate
    ones here.</p>
]]>
      </description>
      <atom:link href="https://sridhar.co/rss.xml" rel="self" type="application/rss+xml" />
      <link>https://sridhar.co/comeback</link>
      <guid>https://sridhar.co/comeback</guid>
      <pubDate>Fri, 25 Nov 2011 18:30:00 GMT</pubDate>
    </item>
  </channel>
</rss>