<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>@mandarvaze’s microblog - Posts</title>
    <link>https://microblog.desipenguin.com/https://microblog.desipenguin.com/post/</link>
    <description>All entries in Posts on microblog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
    <lastBuildDate>Sun, 12 Apr 2026 08:39:38 +0530</lastBuildDate>
    <atom:link href="https://microblog.desipenguin.com/post/" rel="self" type="application/rss+xml" />
    
      
      <item>
        <title>Duck Duck Go Browser</title>
        <link>https://microblog.desipenguin.com/post/duck-browser/</link>
        <pubDate>Sun, 12 Apr 2026 08:39:38 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/duck-browser/</guid>
        <description>&lt;p&gt;Every now and then, I use &lt;code&gt;private&lt;/code&gt; (or &lt;code&gt;temporary&lt;/code&gt;) chat mode when asking
something to AI.&lt;/p&gt;
&lt;p&gt;Not because I am asking something sensitive &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; but because
it is a one-off query, and I do not want to pollute my chat history.&lt;/p&gt;
&lt;p&gt;It may sound stupid, but &amp;hellip;&lt;/p&gt;
&lt;p&gt;Sometimes - most times - the default search engine &lt;a href=&#34;http://duckduckgo.com/&#34;&gt;DDG&lt;/a&gt; uses
its AI to find the answer rather than just searching.&lt;/p&gt;
&lt;p&gt;It is helpful.&lt;/p&gt;
&lt;p&gt;Most times, I look at the answer, and done.&lt;/p&gt;
&lt;p&gt;Yesterday, I noticed there is an edit box to ask follow up question.&lt;/p&gt;
&lt;p&gt;When asked, it takes the user to chat interface from the search engine interface.&lt;/p&gt;
&lt;p&gt;That is when I realized that all such chats are private.&lt;/p&gt;
&lt;p&gt;No need for the extra step to start a private chat.&lt;/p&gt;
&lt;p&gt;One thing led to another, and now I have native macOS app for the Duck Duck Go browser.&lt;/p&gt;
&lt;p&gt;I had used it in past (years ago?) but it got dropped to the sideways.&lt;/p&gt;
&lt;p&gt;So another try now.&lt;/p&gt;
&lt;p&gt;It looks better after a big gap.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I&amp;rsquo;m too paranoid to ask something sensitive to AI 🤷‍♂️- at least for now 😄&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Theme Update: Added Tags Listing</title>
        <link>https://microblog.desipenguin.com/post/theme-update-tags-listing/</link>
        <pubDate>Sun, 12 Apr 2026 08:28:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/theme-update-tags-listing/</guid>
        <description>&lt;p&gt;When adding a new post, I was looking for appropriate tag for the post.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t sure whether I have already used relevant tag earlier, so I checked
&lt;a href=&#34;https://microblog.desipenguin.com/tags/&#34;&gt;/tags&lt;/a&gt; assuming that I&amp;rsquo;ll see the tags there, but there was no
listing.&lt;/p&gt;
&lt;p&gt;I thought I broke it when I did a &lt;a href=&#34;https://microblog.desipenguin.com/post/theme-update/&#34;&gt;major update&lt;/a&gt; recently.
But that was not the case.&lt;/p&gt;
&lt;p&gt;So I checked the &lt;a href=&#34;https://github.com/jnjosh/internet-weblog&#34;&gt;original&lt;/a&gt; theme
from which I forked mine.&lt;/p&gt;
&lt;p&gt;Even their site does not have tags. (Their site uses &lt;code&gt;categories&lt;/code&gt; not tags, but
even categories listing doesn&amp;rsquo;t work)&lt;/p&gt;
&lt;p&gt;So (with the help of my coding assistant) I got it working. 🎉&lt;/p&gt;
&lt;p&gt;Additionally, I also fixed how code listing looked.&lt;/p&gt;
&lt;p&gt;Earlier, inline code blocks looked nice, but ones with three-back-ticks looked
horrible (Yes, only word I can think of)&lt;/p&gt;
&lt;p&gt;Now, it looks better.&lt;/p&gt;
&lt;p&gt;Also, &lt;code&gt;strong&lt;/code&gt; and &lt;code&gt;h3&lt;/code&gt; used grayish color, which was difficult to read (at least in the dark mode)&lt;/p&gt;
&lt;p&gt;Fixed that as well.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Bungalow</title>
        <link>https://microblog.desipenguin.com/post/sketch-bungalow/</link>
        <pubDate>Mon, 30 Mar 2026 12:55:54 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-bungalow/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/a1431798c-70628a/OXWDimSEuWin/FhJUa9PG801Z2WAFv3gcGqZFonYEWAWlq9slvwOJ.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a href=&#34;https://pixelfed.social/p/Vandenoever501/931987077476913715&#34;&gt;this sketch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Compared to the original, two humans and a dog are missing from my copy 😄&lt;/p&gt;
&lt;p&gt;It has been exactly a month since I posted my last sketch.&lt;/p&gt;
&lt;p&gt;I had been meaning to draw something smaller in between, but never got around to doing it.&lt;/p&gt;
&lt;p&gt;The original drawing (link above) says this was built in late 19th century.
But in reminds me of some old bungalow (not seen in person, just imagined)
in Lonavala - a (former?) hill station between Pune and Mumbai.&lt;/p&gt;
&lt;p&gt;I would really love to stay in such a quaint bungalow.&lt;/p&gt;
&lt;p&gt;Device: Lenovo Idea Tab&lt;/p&gt;
&lt;p&gt;Software: HiPaint&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Theme Update</title>
        <link>https://microblog.desipenguin.com/post/theme-update/</link>
        <pubDate>Sat, 28 Mar 2026 19:13:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/theme-update/</guid>
        <description>&lt;p&gt;The last update to the theme was in Dec 2024, as per the git &lt;a href=&#34;https://github.com/mandarvaze/hugo-microblog/commits/main/&#34;&gt;log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The website looked like &lt;a href=&#34;https://web.archive.org/web/20260209205739/https://microblog.desipenguin.com/&#34;&gt;this&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Then recently, I came across &lt;a href=&#34;https://blowfish.page/&#34;&gt;blowfish&lt;/a&gt; theme. XeroLinux used it &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; (but currently it uses Astro+Tailwind 🤷‍♂️)&lt;/p&gt;
&lt;p&gt;So I tried to locally see how my site would look with this theme.&lt;/p&gt;
&lt;p&gt;I liked it a lot.&lt;/p&gt;
&lt;p&gt;But &amp;hellip;&lt;/p&gt;
&lt;p&gt;The documentation site is s&amp;hellip;l&amp;hellip;o&amp;hellip;w &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;So slow, that the &lt;em&gt;entire machine&lt;/em&gt; comes to stand still if the browser is on the docs page.&lt;/p&gt;
&lt;p&gt;To be fair, the sites using blowfish aren&amp;rsquo;t slow.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t going to use background on my site, so locally it was OK.&lt;/p&gt;
&lt;p&gt;But one has to refer to the docs when changing theme, and reading docs was punishment (due to entire machine grinding to halt)&lt;/p&gt;
&lt;p&gt;That is when an idea struck me.&lt;/p&gt;
&lt;p&gt;Why not make existing site look more less blowfish?&lt;/p&gt;
&lt;p&gt;It was not going to be easy&lt;/p&gt;
&lt;p&gt;But it was.&lt;/p&gt;
&lt;p&gt;Enter AI assisted coding.&lt;/p&gt;
&lt;p&gt;I asked &lt;a href=&#34;https://microblog.desipenguin.com/post/opencode-second-impression/&#34;&gt;opencode&lt;/a&gt; to port blowfish look to my site.&lt;/p&gt;
&lt;p&gt;Voila!&lt;/p&gt;
&lt;p&gt;It did take couple of hours for 2-3 days each to get it the way I wanted, and bugfree, but I think I finally got it.&lt;/p&gt;
&lt;p&gt;You can read about it in the post linked above, if you are curious.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Is the link is dead, you can use wayback machine and search for this site&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://web.archive.org/web/20260112184513/https://xerolinux.xyz/&#34;&gt;this&lt;/a&gt; older version of the site via Wayback machine&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://github.com/nunocoracao/blowfish/discussions/2145&#34;&gt;this&lt;/a&gt; discussion&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Opencode: Second Impression</title>
        <link>https://microblog.desipenguin.com/post/opencode-second-impression/</link>
        <pubDate>Sat, 28 Mar 2026 19:13:31 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/opencode-second-impression/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/opencode/&#34;&gt;Last time&lt;/a&gt; I wrote about my first experience using opencode,
I was using (and learning) opencode CLI&lt;/p&gt;
&lt;p&gt;This time, I switched to &lt;a href=&#34;https://zed.dev/&#34;&gt;Zed editor&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Zed is so amazing that it can work with &amp;ldquo;Agents&amp;rdquo; installed on your machine (or it can install them for you) via ACP - Agent Control Protocol&lt;/p&gt;
&lt;p&gt;It recognized that opencode was already installed on the machine, and show it in the drop down.&lt;/p&gt;
&lt;p&gt;I decided to take it for spin.&lt;/p&gt;
&lt;p&gt;So I used Zed&amp;rsquo;s AI pane, which has opencode embedded in it ❓🤔&lt;/p&gt;
&lt;p&gt;So I was indeed talking to opencode, but only in right pane of Zed. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It means I could have been using opencode CLI and I would have got the same result (without other Zed panes like file editor, git integration etc.)&lt;/p&gt;
&lt;p&gt;OK, that is all fine, but how did opencode perform? You ask.&lt;/p&gt;
&lt;p&gt;Excellent!&lt;/p&gt;
&lt;p&gt;I used the recommended &lt;code&gt;OpenCode Zen/Big Pickel&lt;/code&gt; model.&lt;/p&gt;
&lt;p&gt;I gave it the task to port blowfish to my existing hugo theme.&lt;/p&gt;
&lt;p&gt;I did couple of things right 😄&lt;/p&gt;
&lt;p&gt;I opened parent folder containing my blog, my theme repo and folder where I was trying blowfish locally.&lt;/p&gt;
&lt;p&gt;So it had access to both blowfish code, as well as my theme&amp;rsquo;s code.&lt;/p&gt;
&lt;p&gt;Possibly due to idiosyncrasies of my theme, it took some iterations to get to 80%&lt;/p&gt;
&lt;p&gt;Remaining 20% took another 80% time (Such is the 80-20 principle 😂)&lt;/p&gt;
&lt;p&gt;It made some big blunders in the first go (where the task was high level - port blowfish to my theme)&lt;/p&gt;
&lt;p&gt;So I asked it to fix the issues one by one.&lt;/p&gt;
&lt;p&gt;And it worked!&lt;/p&gt;
&lt;p&gt;At one point though, it committed the go.mod containing the &lt;code&gt;replace&lt;/code&gt; directive, which is used for locally testing the theme. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I had to manually fix the file and commit the change&lt;/p&gt;
&lt;p&gt;I also reviewed the git diffs (when it was only make code changes - no git commits) and asked questions where needed.&lt;/p&gt;
&lt;p&gt;It caught some issues (and fixed them) while answering my query.&lt;/p&gt;
&lt;p&gt;The last/final part that impressed me was that one change worked locally, but was breaking when deployed to Netlify.&lt;/p&gt;
&lt;p&gt;We both (me and opencode) struggled a lot.&lt;/p&gt;
&lt;p&gt;Finally it suggested that Netlify has older hugo version installed.&lt;/p&gt;
&lt;p&gt;I was skeptical at first, but having no other option, I decided to try it.&lt;/p&gt;
&lt;p&gt;and it worked!&lt;/p&gt;
&lt;p&gt;I may not have guessed it.&lt;/p&gt;
&lt;p&gt;But opencode did.&lt;/p&gt;
&lt;p&gt;🙏&lt;/p&gt;
&lt;p&gt;I admit, I was harsh during my &lt;a href=&#34;https://microblog.desipenguin.com/post/opencode/&#34;&gt;first&lt;/a&gt; interaction with opencode, but it has grown on me.&lt;/p&gt;
&lt;p&gt;So current impression about opencode ?&lt;/p&gt;
&lt;p&gt;It is awesome!&lt;/p&gt;
&lt;p&gt;✌️&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I later confirmed from opencode CLI that all my interaction from Zed (opencode calls it session) were available there.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Need to figure out whether it has list of safe/approved commands. I never use agent to push to git. Never ever.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to enforce `uv` to use specific version?</title>
        <link>https://microblog.desipenguin.com/post/uv-enforce-python-version/</link>
        <pubDate>Mon, 23 Mar 2026 22:47:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/uv-enforce-python-version/</guid>
        <description>&lt;p&gt;Few days ago, in AIML cohort that I teach, one of the student
faced a problem where some python package refused to install because
it required python 3.10 or higher.&lt;/p&gt;
&lt;p&gt;So I asked the student to install the latest python using&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv python install 3.14&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But we kept getting the same error.&lt;/p&gt;
&lt;p&gt;Turns out, &lt;code&gt;uv&lt;/code&gt; uses system python by default. (Which was 3.8)&lt;/p&gt;
&lt;p&gt;Here are the steps that ensure &lt;code&gt;uv&lt;/code&gt; uses specific version for your project.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv python pin 3.14&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The command &lt;code&gt;uv python pin&lt;/code&gt; is used to set a specific Python version for
your project by creating a &lt;code&gt;.python-version&lt;/code&gt; file. This helps ensure that the
project consistently uses the specified Python version across different environments.&lt;/p&gt;
&lt;p&gt;Now check which version is being used via this command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv run python --version&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In our case, it would return 3.8 because the &lt;code&gt;.venv&lt;/code&gt; was already created with
System python. So we had to &lt;code&gt;rm -rf .venv&lt;/code&gt; first.&lt;/p&gt;
&lt;p&gt;Then &lt;code&gt;uv python pin 3.14&lt;/code&gt; itself is enough for &lt;code&gt;uv&lt;/code&gt; to install pinned
python version, if not then &lt;code&gt;uv python install 3.14&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finally, if you want to create &lt;code&gt;.venv&lt;/code&gt; with specific python version
you can always remove existing &lt;code&gt;.venv&lt;/code&gt; followed by &lt;code&gt;uv venv --python 3.14&lt;/code&gt;
(But usually it is not required. &lt;code&gt;uv&lt;/code&gt; automatically creates &lt;code&gt;.venv&lt;/code&gt;
if &lt;code&gt;.python-version&lt;/code&gt; exists.)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Opencode: First Impressions</title>
        <link>https://microblog.desipenguin.com/post/opencode/</link>
        <pubDate>Wed, 18 Mar 2026 18:46:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/opencode/</guid>
        <description>&lt;p&gt;Everyone is praising &lt;code&gt;opencode&lt;/code&gt; - It is like Claude Code, or Codex
(or Gemini CLI) except it is not tied to a corporation.
It works with models from all of them, and other models, not from these
corporations.&lt;/p&gt;
&lt;p&gt;I had installed &lt;a href=&#34;https://opencode.ai/&#34;&gt;opencode&lt;/a&gt; long time ago, but never used it.&lt;/p&gt;
&lt;p&gt;Today, I decided to give it a go.&lt;/p&gt;
&lt;p&gt;As I was exploring, I came across &lt;code&gt;/editor&lt;/code&gt; command. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
I had expected &lt;code&gt;/editor&lt;/code&gt; command to open a file in an editor&lt;/p&gt;
&lt;p&gt;But the command does not take argument/filename. So how would it know
which file(s) to open? 🤔&lt;/p&gt;
&lt;p&gt;So I asked opencode itself.
But it hallucinated.
Says, &amp;ldquo;Select the file from the sidebar&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Except there is none.&lt;/p&gt;
&lt;p&gt;OK, there is a sidebar, but it does not list any files.
It lists stats about the project.&lt;/p&gt;
&lt;p&gt;It told me how to toggle the sidebar. (Not its fault. I told it &amp;lsquo;There is no sidebar&amp;rsquo;)&lt;/p&gt;
&lt;p&gt;Finally I decided to solve this the old fashioned way.&lt;/p&gt;
&lt;p&gt;RTFM&lt;/p&gt;
&lt;p&gt;The documentation says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Open external editor for composing messages.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Then I shared this &amp;ldquo;knowledge&amp;rdquo; with opencode.&lt;/p&gt;
&lt;p&gt;Essentially, I taught opencode about its own features/commands&lt;/p&gt;
&lt;p&gt;🤦&lt;/p&gt;
&lt;p&gt;I wanted to share my conversations with opencode here, with a link.
Luckily, there is a &lt;code&gt;/share&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/share&lt;/code&gt; feature is great (but Amp already has this built-in and works better)
But the UI can be better.&lt;/p&gt;
&lt;p&gt;During the conversation with any agent, there are several back and forth.&lt;/p&gt;
&lt;p&gt;This is not obvious when viewing the same on the shared link (at least to me,
at first) that there are several dialogue in this conversation.&lt;/p&gt;
&lt;p&gt;Only the first one is shown.&lt;/p&gt;
&lt;p&gt;I thought it shared only part of the conversation. (bug/feature 🤷‍♂️)&lt;/p&gt;
&lt;p&gt;Turns out there is a hamburger menu like thing on the left, when clicked
&lt;em&gt;with precision&lt;/em&gt; opens subsequent dialogues.
Clicking on the appropriate one is not easy.&lt;/p&gt;
&lt;p&gt;I would have preferred that each dialog had separate anchor within the page that
can be linked to, separately.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not giving up on opencode yet.&lt;/p&gt;
&lt;p&gt;The first impression isn&amp;rsquo;t great.&lt;/p&gt;
&lt;p&gt;By the way, My favorite coding assistant, &lt;a href=&#34;https://ampcode.com/&#34;&gt;Amp&lt;/a&gt; has
stopped supporting VS Code extension, and is asking the users to use
&lt;code&gt;AMP CLI&lt;/code&gt; instead.&lt;/p&gt;
&lt;p&gt;Maybe that is the one I&amp;rsquo;ll use.&lt;/p&gt;
&lt;p&gt;Or that &lt;strong&gt;and&lt;/strong&gt; opencode&lt;/p&gt;
&lt;p&gt;🤷‍♂️&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Update: I asked opencode to commit this file, and to add suitable commit message.
It did surprisingly good job, following the style of my existing messages.
I&amp;rsquo;m impressed!&lt;/p&gt;
&lt;p&gt;There is hope after all 😄&lt;/p&gt;
&lt;p&gt;In past when used AI to generate commit message, it generated very verbose messages.
Sometimes that may be a good thing, but not always.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I started this blog post with title &amp;ldquo;/editor command in Opencode is misleading&amp;rdquo;
But as I used it (a little) more, I was disappointed. (and changed the title)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Taming Zellij Keybindings on macOS: A Journey Through Conflicts and Dead Ends</title>
        <link>https://microblog.desipenguin.com/post/zellij-keybindings-macos/</link>
        <pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zellij-keybindings-macos/</guid>
        <description>&lt;p&gt;If you use &lt;a href=&#34;https://zellij.rs&#34;&gt;Zellij&lt;/a&gt; as your terminal multiplexer on macOS, you&amp;rsquo;ve probably hit the same wall I did: the default keybindings are built around &lt;code&gt;Ctrl&lt;/code&gt;, but on macOS inside a modern terminal like &lt;a href=&#34;https://ghostty.org&#34;&gt;Ghostty&lt;/a&gt;, &lt;code&gt;Ctrl&lt;/code&gt; is a warzone. This post documents the full journey of finding a setup that actually works — including all the wrong turns.&lt;/p&gt;
&lt;h2 id=&#34;the-problem-with-ctrl-on-macos&#34;&gt;The Problem with &lt;code&gt;Ctrl&lt;/code&gt; on macOS&lt;/h2&gt;
&lt;p&gt;Zellij&amp;rsquo;s defaults use &lt;code&gt;Ctrl&lt;/code&gt; as the modifier for every mode-entry key: &lt;code&gt;Ctrl+T&lt;/code&gt; for tabs, &lt;code&gt;Ctrl+P&lt;/code&gt; for panes, &lt;code&gt;Ctrl+O&lt;/code&gt; for sessions, and so on. On macOS, this causes immediate conflicts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ghostty&lt;/strong&gt; binds &lt;code&gt;Ctrl+T&lt;/code&gt; to open a new tab&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amp CLI&lt;/strong&gt; and &lt;strong&gt;opencode CLI&lt;/strong&gt; use several &lt;code&gt;Ctrl+&lt;/code&gt; combos internally&lt;/li&gt;
&lt;li&gt;Many other terminal tools treat &lt;code&gt;Ctrl&lt;/code&gt; as their own domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The obvious fix is to switch to a different modifier. But finding one that&amp;rsquo;s actually clean turns out to be harder than it sounds.&lt;/p&gt;
&lt;h2 id=&#34;attempt-1-cmd-as-leader&#34;&gt;Attempt 1: &lt;code&gt;Cmd&lt;/code&gt; as Leader&lt;/h2&gt;
&lt;p&gt;The first instinct on macOS is to reach for &lt;code&gt;Cmd&lt;/code&gt;. It feels native, it&amp;rsquo;s easy to reach, and it&amp;rsquo;s what macOS apps use for everything important — which is exactly the problem. &lt;code&gt;Cmd+Q&lt;/code&gt; quits apps, &lt;code&gt;Cmd+T&lt;/code&gt; opens tabs in Ghostty, &lt;code&gt;Cmd+W&lt;/code&gt; closes windows. There&amp;rsquo;s essentially no safe &lt;code&gt;Cmd+letter&lt;/code&gt; space left for a terminal multiplexer. This idea was dropped immediately.&lt;/p&gt;
&lt;h2 id=&#34;attempt-2-alt-option-as-leader&#34;&gt;Attempt 2: &lt;code&gt;Alt&lt;/code&gt; (Option) as Leader&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Alt&lt;/code&gt; seemed more promising. It&amp;rsquo;s less used by macOS system shortcuts, and Ghostty doesn&amp;rsquo;t claim many &lt;code&gt;Alt+&lt;/code&gt; combos by default. The plan was to use left &lt;code&gt;Option&lt;/code&gt; as &lt;code&gt;Alt&lt;/code&gt; for Zellij, and keep right &lt;code&gt;Option&lt;/code&gt; for typing special characters like &lt;code&gt;©&lt;/code&gt; and &lt;code&gt;þ&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ghostty supports this cleanly with one config line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# ~/.config/ghostty/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;macos-option-as-alt&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;left&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: the setting is &lt;code&gt;macos-option-as-alt&lt;/code&gt;, not &lt;code&gt;option-as-alt&lt;/code&gt; — the &lt;code&gt;macos-&lt;/code&gt; prefix is required and its absence produces an &amp;ldquo;unknown field&amp;rdquo; error on config reload.&lt;/p&gt;
&lt;p&gt;This worked at the Ghostty level, but a new problem surfaced immediately: &lt;code&gt;Alt+P&lt;/code&gt; was triggering random behaviour at the zsh prompt. The culprit wasn&amp;rsquo;t Ghostty — it was &lt;strong&gt;readline&lt;/strong&gt;. zsh&amp;rsquo;s readline layer binds &lt;code&gt;Alt+P&lt;/code&gt; to backwards history search, so it was intercepting the keypress before Zellij ever saw it. The same issue exists for &lt;code&gt;Alt+N&lt;/code&gt;, &lt;code&gt;Alt+F&lt;/code&gt;, &lt;code&gt;Alt+B&lt;/code&gt;, and several other letters that readline claims as editing shortcuts.&lt;/p&gt;
&lt;p&gt;Worse, Zellij itself uses &lt;code&gt;Alt+P&lt;/code&gt; as a default binding (cycle pane focus), so the conflict was happening at two levels simultaneously.&lt;/p&gt;
&lt;h2 id=&#34;attempt-3-trying-to-work-around-alt-conflicts&#34;&gt;Attempt 3: Trying to Work Around &lt;code&gt;Alt&lt;/code&gt; Conflicts&lt;/h2&gt;
&lt;p&gt;The next idea was to keep &lt;code&gt;Alt&lt;/code&gt; but surgically remove the conflicting readline bindings in zsh:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bindkey -r &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;\ep&amp;#39;&lt;/span&gt;   &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# remove Alt+P in zsh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This works for specific keys, but the list of &lt;code&gt;Alt+letter&lt;/code&gt; bindings claimed by readline is long. After auditing all of Zellij&amp;rsquo;s default &lt;code&gt;Alt+&lt;/code&gt; bindings against readline&amp;rsquo;s defaults, it became clear that almost every useful letter was already spoken for by either readline or Zellij&amp;rsquo;s own built-in shortcuts. A clean &lt;code&gt;Alt&lt;/code&gt;-based setup would require unbinding half of zsh&amp;rsquo;s editing shortcuts — not a great trade.&lt;/p&gt;
&lt;h2 id=&#34;the-f-key-idea&#34;&gt;The F-Key Idea&lt;/h2&gt;
&lt;p&gt;At this point, function keys came up as an alternative. F-keys aren&amp;rsquo;t used by most CLI tools, aren&amp;rsquo;t grabbed by zsh readline, and Ghostty passes them through cleanly. The concern was macOS system-level conflicts.&lt;/p&gt;
&lt;p&gt;A quick test confirmed that pressing &lt;code&gt;Fn+F9&lt;/code&gt; inside Ghostty and running &lt;code&gt;cat -v&lt;/code&gt; prints &lt;code&gt;^[[20~&lt;/code&gt; — meaning Ghostty is forwarding the keycode to the terminal application. Zellij can bind to it using the simple string &lt;code&gt;&amp;quot;F9&amp;quot;&lt;/code&gt; in config.&lt;/p&gt;
&lt;p&gt;The ergonomic concern was real: on a MacBook with a Touch Bar, there are no physical F-keys. Every function key press requires &lt;code&gt;Fn+F9&lt;/code&gt;, &lt;code&gt;Fn+F10&lt;/code&gt;, etc. — a two-key combination every time. For a key used constantly as a leader, this would be miserable. But the conclusion here was pragmatic: the modes in question (tab, pane, session) aren&amp;rsquo;t used &lt;em&gt;that&lt;/em&gt; frequently. Pressing &lt;code&gt;Fn+F9&lt;/code&gt; a handful of times per session is acceptable.&lt;/p&gt;
&lt;h2 id=&#34;the-f11-casualty&#34;&gt;The &lt;code&gt;F11&lt;/code&gt; Casualty&lt;/h2&gt;
&lt;p&gt;The initial F-key plan assigned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;F9&lt;/code&gt; → Tab mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F10&lt;/code&gt; → Pane mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F11&lt;/code&gt; → Session mode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This lasted about five minutes before &lt;code&gt;F11&lt;/code&gt; turned out to be macOS&amp;rsquo;s &lt;strong&gt;Show Desktop&lt;/strong&gt; shortcut (Mission Control). Even inside Ghostty, &lt;code&gt;Fn+F11&lt;/code&gt; was triggering the desktop animation. &lt;code&gt;F11&lt;/code&gt; was swapped out for &lt;code&gt;F12&lt;/code&gt;, which produced no macOS-level conflict in practice.&lt;/p&gt;
&lt;h2 id=&#34;the-clear-defaultstrue-lesson&#34;&gt;The &lt;code&gt;clear-defaults=true&lt;/code&gt; Lesson&lt;/h2&gt;
&lt;p&gt;An earlier config iteration without &lt;code&gt;clear-defaults=true&lt;/code&gt; produced bizarre behaviour — typing the letter &lt;code&gt;t&lt;/code&gt; in the shell would silently vanish, &lt;code&gt;p&lt;/code&gt; would do nothing, and several other letters were being eaten. The root cause: Zellij&amp;rsquo;s &lt;code&gt;bind &amp;quot;F9&amp;quot; &amp;quot;t&amp;quot;&lt;/code&gt; syntax does not mean &amp;ldquo;F9 then t&amp;rdquo; as a sequence. It means &lt;strong&gt;F9 or t&lt;/strong&gt; — both keys independently trigger the same action. So every time the letter &lt;code&gt;t&lt;/code&gt; was typed in normal mode, Zellij was intercepting it as a mode-entry key.&lt;/p&gt;
&lt;p&gt;Adding &lt;code&gt;clear-defaults=true&lt;/code&gt; to the &lt;code&gt;keybinds&lt;/code&gt; block wipes all built-in bindings, ensuring nothing bleeds through unexpectedly:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-kdl&#34; data-lang=&#34;kdl&#34;&gt;keybinds clear-defaults=true {
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-final-configuration&#34;&gt;The Final Configuration&lt;/h2&gt;
&lt;p&gt;After all of that, the working setup is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ghostty config&lt;/strong&gt; (&lt;code&gt;~/.config/ghostty/config&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;macos-option-as-alt&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;left&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Zellij keybindings&lt;/strong&gt; (&lt;code&gt;~/.config/zellij/config.kdl&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Key&lt;/th&gt;
          &lt;th&gt;Action&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Fn+F9&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Enter Tab mode&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Fn+F10&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Enter Pane mode&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Fn+F12&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Enter Session mode&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Esc&lt;/code&gt; / &lt;code&gt;Enter&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Exit any mode back to normal&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Alt+h/l/j/k&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Move focus between panes (always available)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Alt+n&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;New pane (always available)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Ctrl+g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Lock Zellij&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Ctrl+q&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Quit Zellij&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Inside each mode, navigation uses plain &lt;code&gt;h/j/k/l&lt;/code&gt; keys with no modifier — this is Zellij&amp;rsquo;s modal design working as intended. You enter a mode once, do what you need, and &lt;code&gt;Esc&lt;/code&gt; returns you to normal.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Alt+&lt;/code&gt; shortcuts for focus movement and new panes are kept from Zellij&amp;rsquo;s stock defaults. Left &lt;code&gt;Option&lt;/code&gt; now sends proper &lt;code&gt;Alt&lt;/code&gt; keycodes thanks to the Ghostty config, so these work without any special handling.&lt;/p&gt;
&lt;h2 id=&#34;lessons-learned&#34;&gt;Lessons Learned&lt;/h2&gt;
&lt;p&gt;A few things worth knowing before you start this journey yourself:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is no perfect modifier on macOS.&lt;/strong&gt; Every key has claimed territory somewhere — &lt;code&gt;Cmd&lt;/code&gt; in system/app shortcuts, &lt;code&gt;Ctrl&lt;/code&gt; in readline and CLI tools, &lt;code&gt;Alt&lt;/code&gt; in readline&amp;rsquo;s line-editing bindings. The best you can do is find the modifier whose conflicts matter least for your specific workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test keycodes before configuring.&lt;/strong&gt; Running &lt;code&gt;cat -v&lt;/code&gt; and pressing your candidate key inside the terminal tells you immediately whether it&amp;rsquo;s being forwarded or swallowed. This saves a lot of config-reload cycles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;clear-defaults=true&lt;/code&gt; is almost always what you want&lt;/strong&gt; when doing significant keybinding overhauls. Zellij&amp;rsquo;s default config is additive — without clearing it, you&amp;rsquo;ll have phantom bindings from the built-in defaults layered under your custom ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zellij&amp;rsquo;s modal design rewards commitment.&lt;/strong&gt; The temptation is to make everything a single-key shortcut available at all times, like tmux&amp;rsquo;s prefix model. But Zellij&amp;rsquo;s modes are genuinely more efficient once you lean into them — three F-key presses to enter a mode, then free navigation with plain letters, beats modifier-chording every single action.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Oh My Posh</title>
        <link>https://microblog.desipenguin.com/post/oh-my-posh/</link>
        <pubDate>Sun, 01 Mar 2026 22:39:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/oh-my-posh/</guid>
        <description>&lt;p&gt;I had heard about Oh my Posh several years ago.
It was in the context of Oh my Zsh &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Oh My Posh was its Powershell cousin.&lt;/p&gt;
&lt;p&gt;Since (AFAIK) Powershell is on Windows, and I haven&amp;rsquo;t used Windows in so many years, I had no use of it.&lt;/p&gt;
&lt;p&gt;Then few days ago, I came across &lt;a href=&#34;https://xerolinux.xyz/&#34;&gt;XeroLinux&lt;/a&gt; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The shell prompt looked very nice. I had assumed it must be &lt;a href=&#34;https://starship.rs/&#34;&gt;starship&lt;/a&gt; which was my prompt engine till that point. But looking at XeroLinux&amp;rsquo;s github, I could not find &lt;code&gt;starship.toml&lt;/code&gt; but I found &lt;a href=&#34;https://github.com/xerolinux/xero-layan-git/tree/main/Configs/Home/.config/ohmyposh&#34;&gt;Oh my Posh config&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;Could my eyes be deceiving me? 😄&lt;/p&gt;
&lt;p&gt;So I searched, and it turns out it is (now?) shell agnostic Prompt engine.&lt;/p&gt;
&lt;p&gt;The site has install instructions for macOS as well as Linux (and Windows of course 😄)
It supports a lot of different shells, including zsh. They also have good documentation about how to integrate it with different shells. I used the one for &lt;a href=&#34;https://ohmyposh.dev/docs/installation/prompt?shell=zsh&#34;&gt;zsh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Currently, I&amp;rsquo;m using XeroLinux&amp;rsquo;s config almost as-is. That is what I wanted anyway 😄&lt;/p&gt;
&lt;p&gt;I wish I could post screenshots of my terminal, but it does not need to be &lt;em&gt;my&lt;/em&gt; terminal. Since I use the same config as XeroLinux, and since Oh-my-Posh is OS and shell agnostic, why not check XeroLinux screenshot directly ?
&lt;img src=&#34;https://xerolinux.xyz/images/Desktop.webp&#34; alt=&#34;&#34;&gt;
Check the beautiful prompt near the bottom of the terminal window. 👆&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Oh-My-Zsh is starter kit for Zsh. Check the &lt;a href=&#34;https://ohmyz.sh/&#34;&gt;site&lt;/a&gt; if you are curious&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It is a beautiful Arch Linux based distro. At least checkout the gorgeous screenshots.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Tortoise</title>
        <link>https://microblog.desipenguin.com/post/sketch-tortoise/</link>
        <pubDate>Wed, 25 Feb 2026 16:09:03 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-tortoise/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/fbedcc803-0ec729/Fn3UD9jJ32OB/gUlDeEYghNFYclPMOBkuu6a9W2VuPMM03fCmgIVl.png&#34; alt=&#34;Pencil Sketch of a Tortoise&#34;&gt;&lt;/p&gt;
&lt;p&gt;I had saved a pencil drawing of a tortoise from the internet. Unfortunately I
can not find the link to the original.&lt;/p&gt;
&lt;p&gt;I wanted to try a light pencil layer first and then a final layer, but since I
did not play around with brushes too much, it did not turn out the way I wanted.&lt;/p&gt;
&lt;p&gt;Looking back, I should have used lighter and broader pencil for the first layer,
and then HB, followed by darker (2B ?) at the end.&lt;/p&gt;
&lt;p&gt;But all 3 of my layers were HB, same thickness.&lt;/p&gt;
&lt;p&gt;I did a pencil drawing after a long time, and enjoyed the process.&lt;/p&gt;
&lt;p&gt;Device: Lenovo Idea Tab&lt;/p&gt;
&lt;p&gt;Software: HiPaint&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Now that I look at the drawing, it looks like one of the hind leg is missing.
Let us assume it is exactly behind the other hind leg and thus not visible&lt;/em&gt; 🙈&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/chatgpt-for-email/</link>
        <pubDate>Mon, 23 Feb 2026 22:27:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/chatgpt-for-email/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Using Gen AI in day-to-day life&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today, I wrote an angry email to some support team.
While I was writing it, I realized that while I&amp;rsquo;m pouring my heart out, the
tone I used will not help. Yet, I could not have made it better without a lot of
effort/multiple iterations.&lt;/p&gt;
&lt;p&gt;ChatGPT to the rescue.&lt;/p&gt;
&lt;p&gt;I simply pasted my response as-is, and asked it to make it professional
sounding.&lt;/p&gt;
&lt;p&gt;The reworded letter was much better.&lt;/p&gt;
&lt;p&gt;Thanks ChatGPT! 🙏&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Robot</title>
        <link>https://microblog.desipenguin.com/post/sketch-robot/</link>
        <pubDate>Wed, 18 Feb 2026 15:43:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-robot/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/fbedcc803-0ec729/9v82vkitO89r/6xVJMRxXkWWlWdx2GMof6WHNUuW0qdgfvMR9je9O.png&#34; alt=&#34;Robot walking while looking at the mobile&#34;&gt;&lt;/p&gt;
&lt;p&gt;This image inspired by a cartoon appeared in the local newspaper.
I liked how simple drawing the robot was. (I&amp;rsquo;m always looking for simple-to-draw sketches)&lt;/p&gt;
&lt;p&gt;For the first time, I used color (albeit very tiny, still&amp;hellip;) The original sketch
had light blue hue for the body of the robot, but I decided not to paint the
whole sketch. Just the eyes to draw viewer&amp;rsquo;s attention was enough.&lt;/p&gt;
&lt;p&gt;This time also I used multiple layers. Pencil layer at first, then Ink layer.&lt;/p&gt;
&lt;p&gt;At this point, I noticed that image is smaller for the entire canvas. So I
enlarged the sketch using the lasso+transform tool. I couldn&amp;rsquo;t have done this on
paper. 🤷‍♂️&lt;/p&gt;
&lt;p&gt;Then added name+date&lt;/p&gt;
&lt;p&gt;Finally color for the eyes. (It was an after thought 😅)&lt;/p&gt;
&lt;p&gt;I exported the pencil layer first and then final sketch. I had changed the size
between the two steps. I wanted to enlarge the pencil layer as well. But I got
an error that locked layer can&amp;rsquo;t be exported (or something) The layer was not
locked 🤷‍♂️. Need to figure it our some day.&lt;/p&gt;
&lt;p&gt;Device: Lenovo Idea Tab&lt;/p&gt;
&lt;p&gt;Software: HiPaint&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Brendan and Al</title>
        <link>https://microblog.desipenguin.com/post/sketch-brendan-and-al/</link>
        <pubDate>Wed, 11 Feb 2026 14:21:54 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-brendan-and-al/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/fbedcc803-0ec729/b995seFylJpq/M7uQuH2Cx3ljpmF3TH9QtUPdFhIMVeDQ4aEO8ySR.png&#34; alt=&#34;Brendan and Al&#34;&gt;&lt;/p&gt;
&lt;p&gt;These are two main characters of &lt;a href=&#34;https://ohumanstar.com/&#34;&gt;O Human Star Comic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When I looked at this comics, I really liked how simple the character faces
were. So decided to see if I can draw them. I am likely to draw more characters
from this comic in the future.&lt;/p&gt;
&lt;p&gt;These two faces were drawn by looking at
&lt;a href=&#34;https://ohumanstar.com/comic/chapter-2-page-30/&#34;&gt;this page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the first time I used layers in HiPaint.&lt;/p&gt;
&lt;p&gt;First layer is the a pencil drawing. I was surprised how &amp;ldquo;real&amp;rdquo; it felt. The
graininess of the HB Pencil (when zoomed) looked close to actual marks made by
HB pencil on the paper. (Drawing on the glass surface wasn&amp;rsquo;t bad either - kudos
to the hardware)&lt;/p&gt;
&lt;p&gt;Then I created a separate layer for &lt;em&gt;Inking&lt;/em&gt; (I feel like an impostor even using
this term 🙈) I hid the pencil layer when exporting the final image.&lt;/p&gt;
&lt;p&gt;Device: Lenovo Idea Tab&lt;/p&gt;
&lt;p&gt;Software: HiPaint&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Weight Training</title>
        <link>https://microblog.desipenguin.com/post/sketch-weight-training/</link>
        <pubDate>Thu, 29 Jan 2026 14:47:01 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-weight-training/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/ffe7c43a6-a8b5f2/LNFr4kskBfkK/PZu7uA8kGg4mJn9arvBkmRAKw95hC6AJDgENzCpD.png&#34; alt=&#34;Weight Training doodle&#34;&gt;&lt;/p&gt;
&lt;p&gt;The doodle comes from Dave Gray&amp;rsquo;s old video (Not sure of the source - sorry)
But doodle itself was not the interesting thing.&lt;/p&gt;
&lt;p&gt;Today I discovered that the Whiteboard app has excellent pen tool.
I used the Size 10, and I was able to create excellent calligraphy (if I may say
so myself 🫣)&lt;/p&gt;
&lt;p&gt;Normally I add the date and name in some other app, but I could not resist
writing the date in calligraphy fashion. So I did.&lt;/p&gt;
&lt;p&gt;The name itself was added later in okso.app 🤷‍♂️&lt;/p&gt;
&lt;p&gt;Software : &lt;a href=&#34;https://endlessai.org/whiteboard&#34;&gt;Whiteboard&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Visual Alphabet : Session by Dave Gray</title>
        <link>https://microblog.desipenguin.com/post/visual_alphabet_dave_gray/</link>
        <pubDate>Thu, 22 Jan 2026 13:07:06 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/visual_alphabet_dave_gray/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/ffe7c43a6-a8b5f2/j81A4BLvrEAS/rk3TxVAzxgzDBY1wFN00VuPhxaxlUJGCuWVShP64.png&#34; alt=&#34;Sketchnote of Visual Alphabet session by Dave Gray&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is my attempt to create a sketchnote of the session he delivered during
the World Sketchnote Week. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Looking at other people&amp;rsquo;s sketchnotes of this session, I realize that I need
to do much better. I&amp;rsquo;ve just reproduced parts of sketches from his session.&lt;/p&gt;
&lt;p&gt;Drawing Dave&amp;rsquo;s face was original idea, rest of it seems unconnected ideas.
I should have used banners, containers, lettering etc.&lt;/p&gt;
&lt;p&gt;Next time.&lt;/p&gt;
&lt;p&gt;I used a different software this time. I have used it earlier.&lt;/p&gt;
&lt;p&gt;What I liked about this tool is in a true digital tool sense, I am not
constrained by the size of the canvas. It is an infinite canvas.
So I can draw as big as I want (Or am comfortable) and then resize and/or move them around.&lt;/p&gt;
&lt;p&gt;I was also able to straighten an originally titled drawn text 🙈&lt;/p&gt;
&lt;p&gt;Software: &lt;a href=&#34;https://okso.app/&#34;&gt;OK! so&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Yesterday&amp;rsquo;s post was just part of his session, though he did not cover the acronym.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Visual Alphabet</title>
        <link>https://microblog.desipenguin.com/post/visual_alphabet/</link>
        <pubDate>Wed, 21 Jan 2026 16:49:19 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/visual_alphabet/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/ffe7c43a6-a8b5f2/W3T5wrd48Lp4/xsNAOv0seZFkxn319HMErZDgkKW3TKKeZZ4a1mAA.png&#34; alt=&#34;Visual Alphabet&#34;&gt;&lt;/p&gt;
&lt;p&gt;All the (English) words (sentences, paragraphs, chapters, books &amp;hellip;) are made
up of only 26 alphabets. (Let us leave aside punctuation marks for now 😉)&lt;/p&gt;
&lt;p&gt;Similarly, most the (basic) drawing is made up of these 12 basic shapes, hence the visual alphabets.&lt;/p&gt;
&lt;p&gt;This English phrase makes it easy to remember&lt;/p&gt;
&lt;p&gt;ALL HOT BREADS&lt;/p&gt;
&lt;p&gt;A: Angle&lt;/p&gt;
&lt;p&gt;L: Line&lt;/p&gt;
&lt;p&gt;L: Loop&lt;/p&gt;
&lt;p&gt;H: Home&lt;/p&gt;
&lt;p&gt;O: Oval&lt;/p&gt;
&lt;p&gt;T: Triangle&lt;/p&gt;
&lt;p&gt;B: Blob&lt;/p&gt;
&lt;p&gt;R: Rectangle&lt;/p&gt;
&lt;p&gt;E: Eye&lt;/p&gt;
&lt;p&gt;A: Arc&lt;/p&gt;
&lt;p&gt;D: Dot&lt;/p&gt;
&lt;p&gt;S: Spiral&lt;/p&gt;
&lt;p&gt;No, I did not come up with these shapes or the phrase.
I&amp;rsquo;m not sure who initially listed these 12 shapes.&lt;/p&gt;
&lt;p&gt;On the other hand, while I remember &lt;strong&gt;this&lt;/strong&gt; phrase, there are few other
phrases that make it easy to remember.&lt;/p&gt;
&lt;p&gt;Software : &lt;a href=&#34;https://endlessai.org/whiteboard&#34;&gt;Whiteboard&lt;/a&gt;&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Using Harper Language Server with Helix Editor</title>
        <link>https://microblog.desipenguin.com/post/helix-harper-spellcheck/</link>
        <pubDate>Mon, 05 Jan 2026 13:47:49 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/helix-harper-spellcheck/</guid>
        <description>&lt;p&gt;First &lt;a href=&#34;https://writewithharper.com/docs/integrations/language-server#Installation&#34;&gt;Install&lt;/a&gt;
Harper using the method appropriate for your OS.&lt;/p&gt;
&lt;p&gt;Then add the following to &lt;code&gt;languages.toml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[language-server.harper-ls]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;harper-ls&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;args = [&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;--stdio&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restart Helix Editor.&lt;/p&gt;
&lt;p&gt;Now you should see squiggly lines under incorrectly spelled words. 🎉&lt;/p&gt;
&lt;p&gt;In order to see (and possibly choose) the correct spelling, take the cursor
on the error and &lt;code&gt;space a&lt;/code&gt; (Code actions)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Solved: unknown terminal xterm-ghostty</title>
        <link>https://microblog.desipenguin.com/post/unknown-terminal-xterm-ghostty/</link>
        <pubDate>Fri, 26 Dec 2025 13:27:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/unknown-terminal-xterm-ghostty/</guid>
        <description>&lt;p&gt;Add the following to your (platform specific &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) config file&lt;/p&gt;
&lt;p&gt;&lt;code&gt;shell-integration-features = ssh-env, ssh-terminfo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now reload the configuration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The configuration can be reloaded at runtime
by pressing ctrl+shift+, (Linux) or cmd+shift+, (macOS).&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Update: (13 April 2026)&lt;/p&gt;
&lt;p&gt;Here is another solution, maybe generic, does not involve updating Ghostty&amp;rsquo;s config file&lt;/p&gt;
&lt;p&gt;&lt;code&gt;infocmp -x xterm-ghostty | ssh YOUR-SERVER -- tic -x -&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This would work for other &lt;code&gt;unknown terminal type&lt;/code&gt; errors as well.
Just replace &lt;code&gt;xterm-ghostty&lt;/code&gt; with other terminal type which is giving &lt;code&gt;unknown terminal type&lt;/code&gt; error.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;on macOS : &lt;code&gt;$HOME/Library/Application\ Support/com.mitchellh.ghostty/config&lt;/code&gt;, and &lt;code&gt;$XDG_CONFIG_HOME/ghostty/config&lt;/code&gt; for Linux if &lt;code&gt;XDG_CONFIG_HOME&lt;/code&gt; is not defined, it defaults to &lt;code&gt;$HOME/.config/ghostty/config&lt;/code&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Deliberate Practice</title>
        <link>https://microblog.desipenguin.com/post/deliberate_practice/</link>
        <pubDate>Thu, 25 Dec 2025 15:45:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/deliberate_practice/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/d781Yj6NEpfF/byKaCKQjk4DCkWVGs4wm66YfWGR8YoZ2jKu6xiJ0.png&#34; alt=&#34;Peristence + Experimentation lead to Success&#34;&gt;&lt;/p&gt;
&lt;p&gt;The idea comes from the book &amp;ldquo;The Magic of Thinking BIG&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Dr. Schwartz makes a point that just persistence is not enough.&lt;/p&gt;
&lt;p&gt;Each time you try (and not succeed) learn from it, and change something
(experimentation) only this will lead to (eventual) success.&lt;/p&gt;
&lt;p&gt;I tried to show this visually by having different styles the word Try is drawn
in the bottom half (but also wrote experimentation - just to be clear 😄)&lt;/p&gt;
&lt;p&gt;Initially I was going to just use the word Failure in red. But it seemed
negative, so I wrote it in light color and replaced it with &amp;ldquo;No Success&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Few things I learnt/noticed:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whiteboard is just that. Infinite canvas cum whiteboard.&lt;/p&gt;
&lt;p&gt;There is no &amp;ldquo;export&amp;rdquo;, so I had to take a screenshot. (No big deal, but still ..)&lt;/p&gt;
&lt;p&gt;Also, the Text tool is available only in the paid plan.&lt;/p&gt;
&lt;p&gt;There is no &amp;ldquo;paste&amp;rdquo; either. So I added the date and my name in Preview app after
I took the screenshot. 😄&lt;/p&gt;
&lt;p&gt;Software : &lt;a href=&#34;https://endlessai.org/whiteboard&#34;&gt;Whiteboard&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;About the Topic of Deliberate Practice itself.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Deliberate Practice&lt;/code&gt; was made popular in the context of 10000 hour rule. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;10000 hours of same things does not make you an expert.&lt;/p&gt;
&lt;p&gt;Unless one is paying attention to what/how they are practicing.&lt;/p&gt;
&lt;p&gt;The word Deliberate means knowingly.&lt;/p&gt;
&lt;p&gt;It says don&amp;rsquo;t just practice mindlessly (for 10000 hours)&lt;/p&gt;
&lt;p&gt;Add variations (and try and fix mistakes done/detected earlier)&lt;/p&gt;
&lt;p&gt;Dr. Schwartz knew it well before (1959) K. Anders Ericsson wrote a paper about it in 1991&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I gave the link to the app, because the name is too generic and not good for the SEO 🤷‍♂️&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Unfortunately, Gladwell focused more on the quantity rather than quality, in his book &lt;a href=&#34;https://amzn.to/44SbMnt&#34;&gt;Outliers&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: SEO out, AEO in</title>
        <link>https://microblog.desipenguin.com/post/seo_vs_aeo/</link>
        <pubDate>Wed, 17 Dec 2025 13:21:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/seo_vs_aeo/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/5l7NwXIkf3kb/dtN0XleZi351YDcB8RjL0oyvs7sdFktKvF6vddgL.png&#34; alt=&#34;SEO out, AEO in&#34;&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time, SEO (Search Engine Optimisation) was all rage. How does your
product show up in the Search Engine.&lt;/p&gt;
&lt;p&gt;But now a days, people have stopped using search engine. Instead they prefer to
&amp;ldquo;get the answer&amp;rdquo; from one of the LLM/GenAI&lt;/p&gt;
&lt;p&gt;The Search Engines also now have &amp;ldquo;AI summaries&amp;rdquo;, so may be AEO can double as
SEO 🤷‍♂️&lt;/p&gt;
&lt;p&gt;Software: tldraw.com&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketchnote in Day to Day Life</title>
        <link>https://microblog.desipenguin.com/post/everyday-sketch-note/</link>
        <pubDate>Thu, 11 Dec 2025 12:44:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/everyday-sketch-note/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/o3yxsXVkViw3/OMji0VSMn2lHehDrYvZy9uL9mKbzw34eAnaY0xL6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is not shared to showcase my skills 😄
But to remind myself (maybe others 🤷‍♂️) that sketching/drawing doesn&amp;rsquo;t have to
be a big deal.&lt;/p&gt;
&lt;p&gt;When I make a mental list of things to buy (aka shopping list) I usually write
it down if it is more than 2 items (else I&amp;rsquo;m bound to forget something)&lt;/p&gt;
&lt;p&gt;Usually, I write it down as a text (doesn&amp;rsquo;t everyone ? 🤔)&lt;/p&gt;
&lt;p&gt;But today, I &lt;strong&gt;thought&lt;/strong&gt; in images.  At first, I wasn&amp;rsquo;t sure whether I could
draw quick sketch for the each item, but it was easy.&lt;/p&gt;
&lt;p&gt;I still wrote text next to it (Not that anyone else was gonna refer to this list)
I suppose next time onward I won&amp;rsquo;t write text.&lt;/p&gt;
&lt;p&gt;I felt good about myself 💪&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The last one is in Devnagari script, Marathi language.
The English name is &amp;ldquo;Ice Apple&amp;rdquo; It is unlikely to be known/available
outside India/SouthEast Asia.&lt;/em&gt;
&lt;em&gt;Curious ? See this &lt;a href=&#34;https://en.wikipedia.org/wiki/Borassus_flabellifer&#34;&gt;Wikipedia Entry&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Dude and Doc</title>
        <link>https://microblog.desipenguin.com/post/dude-and-doc/</link>
        <pubDate>Wed, 10 Dec 2025 14:34:38 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dude-and-doc/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/ukxLt1iKOeTQ/06ePCefL6pTvPbzcmbhU1ulZKUPR6vT5w6sYncV1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;I had not planned what to draw today. So I decided to use this time for practice.&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href=&#34;https://zsofilang.substack.com/p/how-to-turn-anybody-into-a-hand-drawn&#34;&gt;reference&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Few things I noticed today.&lt;/p&gt;
&lt;p&gt;Having a digital canvas has advantages of being able to zoom in.
This came in handy when coloring the hair and t-shirt.&lt;/p&gt;
&lt;p&gt;While at normal scale (no zoom) I have to fill a tiny portion so as not
to worry. But I lose precision. I am unable color without leaving tiny
white/uncolored marks.&lt;/p&gt;
&lt;p&gt;Zooming in gives me better control. But then there is more area to color.&lt;/p&gt;
&lt;p&gt;I used biggest size to color, but due to this, I colored over the original black borders.&lt;/p&gt;
&lt;p&gt;No problem.&lt;/p&gt;
&lt;p&gt;After coloring the t-shirt, I switched to the smallest size and drew the borders
again where I had earlier &amp;ldquo;painted&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Fun!&lt;/p&gt;
&lt;p&gt;Obviously, other benefit (of digital art) is the ability to select and move
stuff around.&lt;/p&gt;
&lt;p&gt;Another thing I noticed is that even though I had reference image, the
recreation turns out different than the original.&lt;/p&gt;
&lt;p&gt;Looking at the original, the first one &amp;ldquo;seems&amp;rdquo; like a boy, while mine looks
&amp;ldquo;grown up&amp;rdquo; (Dude)&lt;/p&gt;
&lt;p&gt;Could be because mine has more hair 🤔&lt;/p&gt;
&lt;p&gt;Software:  tldraw.com&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Pens and Pencils in a Cup</title>
        <link>https://microblog.desipenguin.com/post/sketch-pens-pencils-in-cup/</link>
        <pubDate>Mon, 08 Dec 2025 14:32:41 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/sketch-pens-pencils-in-cup/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/Ts8E6odBlBIE/8l3Kh4PEArjNqAbXlaAHigxvU1pQZgo1iyrGTS9s.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is another one from the same &lt;a href=&#34;https://youtu.be/ji72c9qvCyk?si=WWSXb-EZfTmXM0ko&amp;amp;t=81&#34;&gt;YouTube video&lt;/a&gt;
I referenced earlier for the &lt;a href=&#34;https://microblog.desipenguin.com/post/church-urban-sketch/&#34;&gt;Church&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This time, I wanted to try watercolors in true urban sketching style (Although
this isn&amp;rsquo;t an Urban sketch 😄)&lt;/p&gt;
&lt;p&gt;Hence, Tayasui Sketches.&lt;/p&gt;
&lt;p&gt;I chose Water Color Paper to start.&lt;/p&gt;
&lt;p&gt;Rather than drawing directly as suggested in the video, I did 3 steps.&lt;/p&gt;
&lt;p&gt;First, I drew a rough sketch using Pencil tool. On a water color paper, it gave
me a grainy texture. Cool! (I chose a little thicker size)&lt;/p&gt;
&lt;p&gt;Then I created another layer, and traced on the pencil sketch using Ink tool.
(Tribute to &amp;ldquo;Draw directly with Ink&amp;rdquo; from the video)&lt;/p&gt;
&lt;p&gt;Finally, I added water colors.&lt;/p&gt;
&lt;p&gt;I wanted to create a separate layer, but (I think) free version of Tayasui
Sketches allows only 2 layers (Fair 🤷‍♂️)&lt;/p&gt;
&lt;p&gt;You can see images from all these stages &lt;a href=&#34;https://pixey.org/p/mandarvaze/903569137769793056&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Software:  Tayasui Sketches&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Urban Sketch of a Church</title>
        <link>https://microblog.desipenguin.com/post/church-urban-sketch/</link>
        <pubDate>Sat, 06 Dec 2025 12:29:46 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/church-urban-sketch/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/wtj9LJQZZqsj/25NAtwXJuXgsNWFRUAk2PFCMg4laUYrEpMJFlvnv.png&#34; alt=&#34;&#34;&gt;
I came back to tldraw for this one.&lt;/p&gt;
&lt;p&gt;But first, &lt;a href=&#34;https://youtu.be/ji72c9qvCyk?si=HjeZM1OlXAg7_R6A&amp;amp;t=303&#34;&gt;here&lt;/a&gt; is the
inspiration for this sketch :&lt;/p&gt;
&lt;p&gt;The video shows how to draw directly using the ink.
tldraw was kinds closest to that feel.&lt;/p&gt;
&lt;p&gt;There is only one tool for drawing. Call it pen, brush whatever.
There is no fancy fountain pen, technical pen, certainly no pencil.
No layers.&lt;/p&gt;
&lt;p&gt;While tldraw honours prssue sensitivity to an extent, that is about it.
There are 4 stroke sizes. I used small for most of the drawing. Used Medium for
filing up the trees/grass with green color.&lt;/p&gt;
&lt;p&gt;During the video, he talks about mistake. I also did some mistakes
But here drawing &amp;ldquo;over&amp;rdquo; is possible, hiding the mistake.&lt;/p&gt;
&lt;p&gt;I wish I could have &amp;ldquo;precise&amp;rdquo; eraser. Here it is stroke eraser, which is not one
wants. Just reduce that accidentally long line (like in the video)
But No!&lt;/p&gt;
&lt;p&gt;So this was kind of digitally closest to drawing directly using the Ink&lt;/p&gt;
&lt;p&gt;Since tldraw has bug enough screen, I pasted the photo on the top right corner,
so that I could see it all the time, while I was drawing.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Person Practicing Drawing</title>
        <link>https://microblog.desipenguin.com/post/practice-sketch/</link>
        <pubDate>Thu, 04 Dec 2025 14:04:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/practice-sketch/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://pixey.org/storage/m/_v2/507362984370295685/c19ce1b25-2f8843/MadNwXd9WeJE/YTBIIH4gmkvPfmj7enffIjne0rvqHCqyy9LTjfCV.png&#34; alt=&#34;Person Practicing Drawing&#34;&gt;&lt;/p&gt;
&lt;p&gt;After my last sketch, I kept searching for simple sketching/infinite canvas
program, and came across an app simple called &amp;ldquo;Whiteboard&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The UX is a bit different, but not too difficult.
This might be my second favourite after ExcalidrawZ&lt;/p&gt;
&lt;p&gt;The sketch is really simple (it is meant to be)
The sketch is based on this &lt;a href=&#34;https://vimeo.com/609537228?fl=pl&amp;amp;fe=sh#t=1m45s&#34;&gt;video&lt;/a&gt; by Eva Lotta
🙏&lt;/p&gt;
&lt;p&gt;I probably did this under a minute.&lt;/p&gt;
&lt;p&gt;But I learnt how to make the stick person look &amp;ldquo;down&amp;rdquo;. It is pretty simple. If
I draw the eyes a little lower that normal, then it appears as if the person is
looking down. Drawing small line instead of just dot helps (I think)
While it appears simple, it took me two tries to get it right. (Wisdom came later 😄)&lt;/p&gt;
&lt;p&gt;I enjoyed drawing &amp;ldquo;upside down&amp;rdquo;. In the original video, she drew an orange (I think)
I decided that I would make my stick person draw (what every child - at least in
India draws) a house, rising sun, and a tree.&lt;/p&gt;
&lt;p&gt;Drawing this upside down (So that it is right side up for the stick artist)
wasn&amp;rsquo;t difficult (for me) but I enjoyed.&lt;/p&gt;
&lt;p&gt;Software:  Whiteboard&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Before I started posting on &lt;a href=&#34;https://pixey.org/i/portfolio/mandarvaze&#34;&gt;Pixey&lt;/a&gt; I used to publish on my own site.&lt;/em&gt;
&lt;em&gt;If you haven&amp;rsquo;t, you can check my older sketches &lt;a href=&#34;https://learnings.desipenguin.com/galleries/&#34;&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>VSCode Multi-Root Magic: Run Flutter APK Builds in Separate Git Repos</title>
        <link>https://microblog.desipenguin.com/post/vscode-multiroot-workspace-magic/</link>
        <pubDate>Fri, 07 Nov 2025 14:18:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vscode-multiroot-workspace-magic/</guid>
        <description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;Stuck with &amp;ldquo;No pubspec.yaml found&amp;rdquo; when building Flutter APKs in a multi-root VSCode workspace?
Fix it in 3 steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;perfect workspace naming,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cwd&lt;/code&gt; overrides,&lt;/li&gt;
&lt;li&gt;emulator-ready URLs.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Top-level folder with &lt;strong&gt;2 separate Git repos&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flutter_app/&lt;/code&gt; (Flutter)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fastapi_backend/&lt;/code&gt; (Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flutter &lt;code&gt;.vscode/tasks.json&lt;/code&gt; ignored in parent.&lt;/li&gt;
&lt;li&gt;Tasks fail: &lt;em&gt;&amp;ldquo;Must be run from root of Flutter project&amp;rdquo;&lt;/em&gt; or &lt;em&gt;&amp;ldquo;No pubspec.yaml found&amp;rdquo;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;the-fix-multi-root-workspace--smart-tasks&#34;&gt;The Fix: Multi-Root Workspace + Smart Tasks&lt;/h3&gt;
&lt;h4 id=&#34;1-create-multi-root-workspace&#34;&gt;1. Create Multi-Root Workspace&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;File &amp;gt; Add Folder to Workspace&amp;hellip; &amp;gt; Add both subfolders.&lt;/li&gt;
&lt;li&gt;Save as &lt;code&gt;myproject.code-workspace&lt;/code&gt; in parent.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;folders&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;flutter_app&amp;#34;&lt;/span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    { &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;fastapi_backend&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;flutter.sdkPath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;./flutter_app&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-update-flutter_appvscodetasksjson&#34;&gt;2. Update &lt;code&gt;flutter_app/.vscode/tasks.json&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;For Flutter task:
&lt;ul&gt;
&lt;li&gt;Edit &lt;code&gt;.vscode/tasks.json&lt;/code&gt; in &lt;code&gt;flutter_app&lt;/code&gt; to use &lt;code&gt;${workspaceFolder:flutter_app}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run task from &lt;code&gt;flutter_app&lt;/code&gt; folder context.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;tasks&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;label&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Build APK (Dev Local)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;shell&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;flutter&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;build&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;apk&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;--debug&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;--dart-define=ENV=development&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;--dart-define=BASE_URL=http://10.0.2.2:8000&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;options&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;cwd&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;${workspaceFolder:flutter_app}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;group&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;build&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Key: &lt;code&gt;cwd&lt;/code&gt; must match exact folder name in &lt;code&gt;.code-workspace&lt;/code&gt; (case-sensitive).&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;pro-tip-emulator-localhost&#34;&gt;Pro Tip: Emulator Localhost&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;10.0.2.2&lt;/code&gt; to hit your local FastAPI backend from Android emulator.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;final-checklist&#34;&gt;Final Checklist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Workspace folder name = task cwd&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Run task via Command Palette (select Flutter folder)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Reload VSCode after changes (&lt;strong&gt;Very important&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;No monorepo. No drama. Just build.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Perfect for full-stack Flutter + FastAPI devs.&lt;/em&gt;&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Omarchy on Macbook Pro</title>
        <link>https://microblog.desipenguin.com/post/omarchy-on-mbp/</link>
        <pubDate>Wed, 29 Oct 2025 21:20:49 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/omarchy-on-mbp/</guid>
        <description>&lt;p&gt;It has been almost two months since I was meaning to try &lt;a href=&#34;https://microblog.desipenguin.com/post/omarchy/&#34;&gt;omarchy&lt;/a&gt;
I could not &amp;ldquo;move&amp;rdquo; to it, since I was in the middle of a project.&lt;/p&gt;
&lt;p&gt;Since then, I have moved to &lt;a href=&#34;https://microblog.desipenguin.com/post/mbp-2019/&#34;&gt;Macbook Pro&lt;/a&gt; for development.&lt;/p&gt;
&lt;p&gt;I was testing the waters, lurking on &lt;a href=&#34;https://reddit.com/r/omarchy/&#34;&gt;reddit&lt;/a&gt; etc.&lt;/p&gt;
&lt;p&gt;Recently, Omarchy made huge progress. When I first came across it, it was already 2.x
Now it is 3.1.x&lt;/p&gt;
&lt;p&gt;One of the &amp;ldquo;features&amp;rdquo; of 3.x was better support for (Intel) Macbooks.&lt;/p&gt;
&lt;p&gt;Today, I made the jump.&lt;/p&gt;
&lt;p&gt;Installed Omarchy on my MBP 13&amp;quot; (early 2015)&lt;/p&gt;
&lt;p&gt;To my surprise, it worked! 🎉&lt;/p&gt;
&lt;p&gt;I was stuck (for sometime) in connecting to the network.&lt;/p&gt;
&lt;p&gt;I was shown the Access Points in lower section, and the top section was empty.&lt;/p&gt;
&lt;p&gt;Normal keys like up/down arrows did not (seem to) work.&lt;/p&gt;
&lt;p&gt;So with the help of ChatGPT, I successfully connected using combination of
following commandsa after initial &lt;code&gt;sudo iwctl&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;device list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;station wlan0 get-networks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;station wlan0 connect &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;NetworkName&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then Omarchy default UI, showed two access points in the top section, and I
could move between them (to disconnect, and connect to the other etc.)&lt;/p&gt;
&lt;p&gt;It has been only couple of hours.&lt;/p&gt;
&lt;p&gt;At one point, I had to get away, so I tried &lt;code&gt;Suspend&lt;/code&gt; from the menu.
It seems to work. (Not sure if it suspended to disk - most likely not
¯_(ツ)_/¯ )&lt;/p&gt;
&lt;p&gt;But after &amp;ldquo;wakeup&amp;rdquo; WiFi was lost.&lt;/p&gt;
&lt;p&gt;I was not surprised. I had read about this on reddit.&lt;/p&gt;
&lt;p&gt;Reboot.&lt;/p&gt;
&lt;p&gt;but since then I saw
&lt;a href=&#34;https://github.com/end-4/dots-hyprland/issues/1579&#34;&gt;&amp;ldquo;hyprlock screen of death&amp;rdquo;&lt;/a&gt;
at least twice in under an hour.&lt;/p&gt;
&lt;p&gt;FWIW, the instructions did NOT work 😢&lt;/p&gt;
&lt;p&gt;I am setting this up for my son. While I know Omarchy would be a big jump from
Windows, I would have preferred that he learnt in the process.&lt;/p&gt;
&lt;p&gt;But the system needs to be stable.&lt;/p&gt;
&lt;p&gt;I wanted to keep experimenting. So I thought, I&amp;rsquo;ll create a separate account
for him.&lt;/p&gt;
&lt;p&gt;But&lt;/p&gt;
&lt;p&gt;Omarchy is single-user system by default.&lt;/p&gt;
&lt;p&gt;While it uses SDDM, it also auto-logs-in the only user it created during
the installation.&lt;/p&gt;
&lt;p&gt;I found some instructions on reddit, but within couple of months they
are out-of-date. (Could not find &lt;code&gt;omarchy-seemless-login&lt;/code&gt; service in &lt;code&gt;systemctl&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;While I could spend time fighting it, it won&amp;rsquo;t be &amp;ldquo;standard&amp;rdquo; omarchy, and
DHH has already refused to support it (but was nice enough to accept
documentation, if someone provides some - but there isn&amp;rsquo;t one - yet)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bottomline : I&amp;rsquo;m installing Linux Mint 22.2 for my son on that machine.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I am just glad that at least I got it working (mainly WiFi - everything else
I can learn)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Mission : Upgrade macOS</title>
        <link>https://microblog.desipenguin.com/post/upgrade-macos/</link>
        <pubDate>Wed, 01 Oct 2025 16:47:27 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/upgrade-macos/</guid>
        <description>&lt;p&gt;The machine I got has macOS Sonoma. This is from 2023 - almost 2 years old.
There was Sequoia - in 2024
and now there is Tahoe - in 2025&lt;/p&gt;
&lt;p&gt;I wanted to upgrade to the latest.&lt;/p&gt;
&lt;p&gt;But quick check on the internet suggested that I may be better off staying on Sequoia.
Tahoe seems unstable ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;So I decided to make USB bootable for Sequoia. When installing via the app store, it directly starts the install (I think)
So I decided to stick to the terminal (a good thing too IMO)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;softwareupdate --fetch-full-installer --full-installer-version 15.7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This failed with inexplicable error.&lt;/p&gt;
&lt;p&gt;ChatGPT was helpful in pointing out following command :
&lt;code&gt;softwareupdate --list-full-installers&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Turns out there is no &lt;code&gt;15.7&lt;/code&gt; instead there is &lt;code&gt;15.7.1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Fixing the command, finally got me downloaded version 😌&lt;/p&gt;
&lt;p&gt;Now to make installable disk.&lt;/p&gt;
&lt;p&gt;The external disk I have, has PikaOS live ISO.&lt;/p&gt;
&lt;p&gt;So I tested that on the new machine.&lt;/p&gt;
&lt;p&gt;First it won&amp;rsquo;t boot due to security.&lt;/p&gt;
&lt;p&gt;Removed the security (Apple error message was very helpful in explaining what to do)&lt;/p&gt;
&lt;p&gt;Booted into live PikaOS&lt;/p&gt;
&lt;p&gt;Turns out Wireless card is NOT recognised 😢
Anyway, I&amp;rsquo;ll be using macOS for the foreseable future, so it was just curiosity.&lt;/p&gt;
&lt;p&gt;But I couldn&amp;rsquo;t do &lt;strong&gt;anything&lt;/strong&gt; to this USB drive.
So I attached it to Linux Mint, and formatted it with FAT32&lt;/p&gt;
&lt;p&gt;Still no luck.&lt;/p&gt;
&lt;p&gt;Disk Utility kept giving error.&lt;/p&gt;
&lt;p&gt;Once again, ChatGPT to the rescue.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;diskutil eraseDisk JHFS+ VOLUMENAME GPT /dev/disk2&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Finally&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo /Applications/Install\ macOS\ Sequoia.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;🎉&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Use &lt;code&gt;diskutil list&lt;/code&gt; first to ensure that the USB drive is indeed on &lt;code&gt;/dev/disk2&lt;/code&gt; 😄)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Purchased Macbook Pro 16&#34; 2019 🎉</title>
        <link>https://microblog.desipenguin.com/post/mbp-2019/</link>
        <pubDate>Tue, 30 Sep 2025 14:03:45 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/mbp-2019/</guid>
        <description>&lt;p&gt;I had been meaning to upgrade my early-2015 MBP for quite some time.&lt;/p&gt;
&lt;p&gt;Then I got one from office, so did not need to upgrade.&lt;/p&gt;
&lt;p&gt;then something or the other kept coming up.&lt;/p&gt;
&lt;p&gt;Few months ago, I visited a shop to get battery replaced for my MBP&lt;/p&gt;
&lt;p&gt;The service was good.&lt;/p&gt;
&lt;p&gt;The shopkeeper also told me that he has some used MBP for sale.&lt;/p&gt;
&lt;p&gt;Usually these come from corporate customers (I think) and are in good condition.&lt;/p&gt;
&lt;p&gt;I decided to stick to Intel mac, since there is a possibility of installing
Linux on it eventually &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I had asked for at least 16GB RAM - current one has 8GB, which works well for
most tasks but it is from 2015, and apps in 2025 may more more demanding on memory
so 16GB seemed like the least I should buy.&lt;/p&gt;
&lt;p&gt;I went to the shop to &amp;ldquo;see&amp;rdquo; the machine.&lt;/p&gt;
&lt;p&gt;He showed me i9+32GB version (We had discussed i7+16GB) and said &amp;ldquo;Yours will be
just like this&amp;rdquo; (i.e. as good condition as this)&lt;/p&gt;
&lt;p&gt;So I asked if this machine itself was available and what is the price difference.&lt;/p&gt;
&lt;p&gt;Yes, it was for sale.&lt;/p&gt;
&lt;p&gt;Turns out the price difference was not much.&lt;/p&gt;
&lt;p&gt;So I decided to go with better version. 😁&lt;/p&gt;
&lt;p&gt;I am really happy being back on macOS. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Not that I was unhappy with Linux, but things are just better on macOS 🤷‍♂️&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Other minor details :&lt;/p&gt;
&lt;p&gt;The machine had Sonoma - which is from 2022 - 3 years old.&lt;/p&gt;
&lt;p&gt;I asked the shopkeeper to give me Tahoe aka macOS 26 on a bootable USB stick&lt;/p&gt;
&lt;p&gt;But he couldn&amp;rsquo;t do it. 🤷‍♂️&lt;/p&gt;
&lt;p&gt;At the time of purchase he suggested to wait before switching to Tahoe, as it
was &amp;ldquo;too new&amp;rdquo; (euphemism for buggy 😄)&lt;/p&gt;
&lt;p&gt;Once I came home, I checked reddit, and turns out people are not too happy.&lt;/p&gt;
&lt;p&gt;So I decided to upgrade to Sequoia instead.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;del&gt;Turns out this particular one has T2 security chip, and at least WiFi doesn&amp;rsquo;t work OOTB. There is t2linux.org, so &amp;hellip; Anyway, I am not installing Linux on this till at least Sept 2028 when apple won&amp;rsquo;t provide anymore OS updates. Also we&amp;rsquo;ll see how long brew supports this version. 🤞&lt;/del&gt; Update : Omarchy 3.0 has support for T2 Macs Out of the box 🎉&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;This post was written on the new machine.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Flutter Development on Windows</title>
        <link>https://microblog.desipenguin.com/post/flutter-dev-on-windows/</link>
        <pubDate>Thu, 25 Sep 2025 21:53:01 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/flutter-dev-on-windows/</guid>
        <description>&lt;p&gt;As I wrote &lt;a href=&#34;https://microblog.desipenguin.com/post/windows-for-development/&#34;&gt;earlier&lt;/a&gt; I&amp;rsquo;m doing Flutter Development
on a Windows 10 machine.&lt;/p&gt;
&lt;p&gt;The configuration of this machine is as follows :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intel i7-6600U @ 2.60GHz&lt;/li&gt;
&lt;li&gt;16GB RAM&lt;/li&gt;
&lt;li&gt;224 GB SSD&lt;/li&gt;
&lt;li&gt;AMD Radeon R7 M360 (2GB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So on paper this looks impressive.&lt;/p&gt;
&lt;p&gt;But it feels so sluggish.&lt;/p&gt;
&lt;p&gt;But &amp;ldquo;feels&amp;rdquo; is very subjective. (My other machine is 10-year-old-MBP) So I
decided to gather actual timing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starting Visual Studio Code took &amp;gt; 1 minutes 51 seconds (After which
I gave up) Gemini Assist was still not done loading. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; But even without
it, it took &amp;gt; 1 minute&lt;/li&gt;
&lt;li&gt;Starting Android Emulator took : 1 minute 40 seconds
&lt;ul&gt;
&lt;li&gt;UI showed up after 7 seconds&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pixel is starting&lt;/code&gt; message after 1 minute 14 seconds&lt;/li&gt;
&lt;li&gt;and Then I see &lt;code&gt;System UI is not responding&lt;/code&gt; (I choose &lt;code&gt;Wait&lt;/code&gt; ¯_(ツ)_/¯ )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Starting Android Emulator (cold boot) took : 3 minutes 28 seconds
&lt;ul&gt;
&lt;li&gt;UI showed up after 43 seconds&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pixel is starting&lt;/code&gt; message after 1 minute 59 seconds&lt;/li&gt;
&lt;li&gt;and Then I see &lt;code&gt;System UI is not responding&lt;/code&gt; (I choose &lt;code&gt;Wait&lt;/code&gt; ¯_(ツ)_/¯ )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the mean time, VS Code reports&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Failed to start Emulator. Could not connect in 60 seconds&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Next stop, Launching the app in Emulator (&amp;ldquo;Run without Debugging&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;Time taken for the app to show up :&lt;/p&gt;
&lt;p&gt;Build took 2 minute 11 seconds&lt;/p&gt;
&lt;p&gt;App was ready after 2 minutes 52 seconds&lt;/p&gt;
&lt;p&gt;So for the most part I&amp;rsquo;m just waiting 😢&lt;/p&gt;
&lt;p&gt;The app has &amp;ldquo;QR scanning&amp;rdquo; functionality.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Showing&amp;rdquo; the QR image to the Emulator takes a lot of patience (and luck)&lt;/p&gt;
&lt;p&gt;Holding a QR image (on mobile) in front of PC&amp;rsquo;s camera till it is recognized is
testing my patience.&lt;/p&gt;
&lt;p&gt;I was lucky, I got it working two times in past.&lt;/p&gt;
&lt;p&gt;I tried to use &lt;code&gt;OBS Virtual Camera&lt;/code&gt; based onChatGPT&amp;rsquo;s suggestion, but Windows
does not recognize the Virtual Camera (even though Virtual Camera has started
in OBS correctly)&lt;/p&gt;
&lt;p&gt;If you are Flutter developer, help me.&lt;/p&gt;
&lt;p&gt;What am I doing wrong ?&lt;/p&gt;
&lt;p&gt;Is the entire ordeal so slow ?&lt;/p&gt;
&lt;p&gt;Please help!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Turns out The extension needed to restart. This information was hidden in the Extensions panel 😢&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Windows for Development</title>
        <link>https://microblog.desipenguin.com/post/windows-for-development/</link>
        <pubDate>Tue, 23 Sep 2025 15:56:50 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/windows-for-development/</guid>
        <description>&lt;p&gt;Recently, I started working on a flutter project.
I started on my own 10-year old MBP. (running Linux mint 22.1 BTW)
It has &amp;ldquo;just&amp;rdquo; 8GB RAM. Flutter development is (near) impossible on this machine.&lt;/p&gt;
&lt;p&gt;As per the &lt;a href=&#34;https://developer.android.com/studio/install#linux&#34;&gt;documentation&lt;/a&gt;
Android Studio requires 8GB and with Emulator 16GB, while 32GB is the
&amp;ldquo;recommended&amp;rdquo; configuration.&lt;/p&gt;
&lt;p&gt;But it is not just the documentation. I tried to push through. Decided to use
Physical device rather than Emulator.
But even then, it was just too slow.&lt;/p&gt;
&lt;p&gt;So my client gave me i7 Dell machine with 16GB memory. It came with Windows 10
(which is gonna be End of Support soon) I setup all the tooling (Android Studio&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emulator) and got everything working.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It works. (not like my machine)&lt;/p&gt;
&lt;p&gt;I also needed to run mysql (in docker) and need to run REST API server.
In my opinion, these two do not add any slowness - cause I had them running
on my 10-year-old-MBP-running-linux as well.&lt;/p&gt;
&lt;p&gt;I think Android emulator is what makes this thing slow. (Flutter build/loading
to Emulator are the ones that feel slow)&lt;/p&gt;
&lt;p&gt;I have not used Windows for development in &lt;del&gt;years&lt;/del&gt; decades.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;So I had to start from scratch.&lt;/p&gt;
&lt;p&gt;I had seen some people use &lt;code&gt;Git Bash&lt;/code&gt; so I installed that. It gave me better &amp;ldquo;Terminal&amp;rdquo; and unix-like command line programs.
But it was still Windows.&lt;/p&gt;
&lt;p&gt;FWIW, my client allowed me to install linux on his machine, if I want. 🙏 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I did the next best thing.&lt;/p&gt;
&lt;p&gt;Ubuntu on WSL2&lt;/p&gt;
&lt;p&gt;I also discovered &amp;ldquo;Terminal&amp;rdquo; app on Windows.&lt;/p&gt;
&lt;p&gt;Allows me to open various kinds to command prompts like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Poer Shell&lt;/li&gt;
&lt;li&gt;Git Bash&lt;/li&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was better. I would open &lt;code&gt;mysql&lt;/code&gt; shell in one, REST API server in another etc.&lt;/p&gt;
&lt;p&gt;But Copy/Pasting in terminal was awkward. (I got used to Ctrl+Insert to Copy/Shift+Insert to Paste in Ubuntu terminal)&lt;/p&gt;
&lt;p&gt;I would do some parts in &lt;code&gt;Git Bash&lt;/code&gt; and some in &lt;code&gt;Ubuntu&lt;/code&gt; but they didn&amp;rsquo;t share history&lt;/p&gt;
&lt;p&gt;Yestersday, I started &lt;code&gt;Ubuntu&lt;/code&gt; &lt;strong&gt;app&lt;/strong&gt; (not the terminal, like I did all those days)&lt;/p&gt;
&lt;p&gt;and I was blown away.&lt;/p&gt;
&lt;p&gt;Ubuntu &amp;ldquo;session&amp;rdquo; in Terminal app is clunky/Big font&lt;/p&gt;
&lt;p&gt;Ubuntu app (which is just a shell - but that is all I ever wanted) is much better.
Smaller font.
Right mouse click to paste (I think selecting via mouse automatically copies the text ¯_(ツ)_/¯)&lt;/p&gt;
&lt;p&gt;Now, rather than having different tabs, I start a &lt;code&gt;tmux&lt;/code&gt; session in Ubuntu.&lt;/p&gt;
&lt;p&gt;Switching between mysql, REST API server, and bash is keyboard driven.&lt;/p&gt;
&lt;p&gt;I will try this for few days before deciding to install (or not) Linux on it.&lt;/p&gt;
&lt;p&gt;Another quirk I faced was Windows machine did not Hibernate.&lt;/p&gt;
&lt;p&gt;Both my macOS and current Linux Mint hibernate.
i.e. When I close the lid, everything is saved to disk, and no battery is consumed.&lt;/p&gt;
&lt;p&gt;I was surprised that Windows didn&amp;rsquo;t do that.&lt;/p&gt;
&lt;p&gt;I enabled it from some settings.&lt;/p&gt;
&lt;p&gt;But I am not sure it works 😢&lt;/p&gt;
&lt;p&gt;So I decided to add programs (VSCode, Ubuntu, Firefox) as Startup program.&lt;/p&gt;
&lt;p&gt;But that too is not straight forward. At least one Bing suggested.&lt;/p&gt;
&lt;p&gt;It involves typing &lt;code&gt;shell:startup&lt;/code&gt; in a popup, and copying shortcut of each app there &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I think when I did the last time, Windows was used for Browser and Corporate Email, and then I used to &lt;code&gt;ssh&lt;/code&gt; to Linux server. I think. It was really long time ago. So my memory might not be accurate&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I might do that. But it will add to down time, so I am delaying it. Also, if Android emulator is making t feel slower, installing Linux may not help &lt;em&gt;that&lt;/em&gt; part (Overall experience might be better)&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Apparently there is a slightly simpler way, but Bing did not suggest that ¯_(ツ)_/¯&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Appimage</title>
        <link>https://microblog.desipenguin.com/post/appimage/</link>
        <pubDate>Thu, 18 Sep 2025 11:51:45 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/appimage/</guid>
        <description>&lt;p&gt;I have been almost exclusively using Ubuntu and its derivatives as long as I remember &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Benefit of using such mainstream distro was that for the most part, all the software was available in &lt;code&gt;deb&lt;/code&gt; format.&lt;/p&gt;
&lt;p&gt;But recently things are changing.&lt;/p&gt;
&lt;p&gt;More and more software is being made available via snaps, flatpak or appimages&lt;/p&gt;
&lt;p&gt;Much can be said about pros and cons of each of these. But that is not the point of this post. 😄&lt;/p&gt;
&lt;p&gt;Why is AppImage getting popular ? Read &lt;a href=&#34;https://docs.appimage.org/introduction/advantages.html&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TL;DR :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Self-contained binaries.&lt;/li&gt;
&lt;li&gt;Avoids dependecy conflicts&lt;/li&gt;
&lt;li&gt;Can get latest version of the software directly from the author. No need to
wait for your distro&amp;rsquo;s packages to get the updates (which may take &lt;em&gt;really&lt;/em&gt; long
or never)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Few downsides of Appimages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Need to manually add execute permission (as simple as &lt;code&gt;chmod a+x myapp.appimage&lt;/code&gt;, still ..)&lt;/li&gt;
&lt;li&gt;No auto-updates
&lt;ul&gt;
&lt;li&gt;Although some apps provide build this functionality in the app. How ? ¯_(ツ)_/¯&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;No Desktop entry. Need to start the app from the terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a few solutions for this.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/probonopd/go-appimage&#34;&gt;appimaged&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/TheAssassin/AppImageLauncher/&#34;&gt;AppImageLauncher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I tried both, and settled on AppImageLaucher.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;appimaged&lt;/code&gt; monitors certain fixed set of folders. &lt;code&gt;~/Downloads&lt;/code&gt; being one
of them. Which is a good thing. Most of your software first lands up in that
folder. But then for the same reason, I keep deleting stuff from it, so keep it
clean. &lt;code&gt;appimaged&lt;/code&gt; does not let you configure &amp;ldquo;folders to watch&amp;rdquo; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;AppImageLauncher comes with proper GUI to configure the &amp;ldquo;destination&amp;rdquo; for appimages.&lt;/p&gt;
&lt;p&gt;When one starts a new appimage, AppimageLauncher moves it to designated folder
(configured earlier by you)&lt;/p&gt;
&lt;p&gt;It also supports updates (per documentation, but I have not tested it yet) &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Both of them create a Desktop Entry, so that the app can be launched from the
menu. Although AppImageLauncher created an entry with Version number 🆒&lt;/p&gt;
&lt;p&gt;Now that I have AppImageLauncher, I am more likely to use appimage based
software. Especially when &lt;code&gt;deb&lt;/code&gt; file is outdated.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I used Red Hat in late 1990s when Ubuntu didn&amp;rsquo;t exist. But that is the only exception.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I worked around this by moving the file, and creating a symlink inside &lt;code&gt;~/Downloads&lt;/code&gt; 😉&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;There is also &lt;a href=&#34;https://github.com/AppImageCommunity/AppImageUpdate&#34;&gt;AppImageUpdate&lt;/a&gt; which I have not tried yet&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Experience of Conducting Mass Media Workshop to Young Students</title>
        <link>https://microblog.desipenguin.com/post/mass-media-workshop/</link>
        <pubDate>Mon, 08 Sep 2025 20:16:22 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/mass-media-workshop/</guid>
        <description>&lt;p&gt;During Ganeshotsav, Jnana Prabodhini Prashala organizes a variety of workshops for students.
For these 10 days, there are no regular classes — instead, students immerse themselves in learning new skills.&lt;/p&gt;
&lt;p&gt;This year, I had the privilege of conducting a Mass Media workshop for 20 boys from 5th to 7th standard (a mixed group).&lt;/p&gt;
&lt;p&gt;I don’t need to emphasize how bright these children are — after all, they are among the 80 selected out of 1200+ who appear for the entrance exam. Still, knowing this in theory is very different from experiencing it firsthand.&lt;/p&gt;
&lt;p&gt;One of our workshop topics was Social Media. While I was explaining cyber security, a student pointed out the difference between http and https. What truly amazed me was when a couple of them went on to explain, in very simple terms, how encryption works!&lt;/p&gt;
&lt;p&gt;On the final day, a fellow coach (conducting workshops for the third year) shared his observation:
“These students are raising the bar every year. What I had prepared for the first few days was already known to them 😄 — and covered in the introduction itself. We had to rethink and stretch our plans for the rest of the sessions.”&lt;/p&gt;
&lt;p&gt;It was both humbling and inspiring to witness such curiosity and brilliance at such a young age.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Pikaos : Hyprland</title>
        <link>https://microblog.desipenguin.com/post/pikaos-hyprland/</link>
        <pubDate>Fri, 05 Sep 2025 23:05:01 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/pikaos-hyprland/</guid>
        <description>&lt;p&gt;Yesterday, before I installed &lt;a href=&#34;https://microblog.desipenguin.com/post/hyprland-on-mint/&#34;&gt;Hyprland on Mint&lt;/a&gt; I was
researching Hyprland, and someone/somewhere mentioned &lt;a href=&#34;https://wiki.pika-os.com/en/home&#34;&gt;pikaOS&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PikaOS is a gaming/optimization-focused Linux distribution that emphasizes
ease of use and high compatibility. Built on a Debian base but with cherry
picked and custom compiled packages ensures that Pika is stable whilst being
bang up to date!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I had mentioned in my post about &lt;a href=&#34;https://microblog.desipenguin.com/post/omarchy/&#34;&gt;Omarchy&lt;/a&gt; that I would have liked if it had Live ISO&lt;/p&gt;
&lt;p&gt;I like to &amp;ldquo;try before &lt;del&gt;buy&lt;/del&gt; install&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;PikasOS luckily has that option. So that is what I did.&lt;/p&gt;
&lt;p&gt;As expected I booted into Hyprland login screen&lt;/p&gt;
&lt;p&gt;What was the password for live user ? 🤔 I tried &lt;code&gt;pikaos&lt;/code&gt; 😉 it worked 😄&lt;/p&gt;
&lt;p&gt;I could see the waybar (Term I picked up while reading about Hyprland - maybe wrong)&lt;/p&gt;
&lt;p&gt;But I had no idea what to do next.&lt;/p&gt;
&lt;p&gt;Clicking on icons in waybar opened some settings.&lt;/p&gt;
&lt;p&gt;But how do I open any app ?&lt;/p&gt;
&lt;p&gt;I searched from my phone to find the basic keybindings. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Turns out they are listed in a config file.
Listing here for others who might run into such issues&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Super D&lt;/code&gt; for launcher&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Super Enter&lt;/code&gt; for the terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have 2 monitor setup. And always builtin one becomes primary.
App launcher look too tiny (since builtin screen is HiDPI Retina screen)&lt;/p&gt;
&lt;p&gt;Luckily I found a way to make bigger external monitor as &amp;ldquo;Active&amp;rdquo; one.&lt;/p&gt;
&lt;p&gt;One more nice thing about pikaOS was randomly changing wallpapers. They are (I
assume) from some game - pikasOS being Gaming focused distro.&lt;/p&gt;
&lt;p&gt;I liked most of them.&lt;/p&gt;
&lt;p&gt;I spent only limited time. But I might replace mint with pikaOS&lt;/p&gt;
&lt;p&gt;Since this is based on Debian Sid (unstable) it is indeed bleeding edge, and thus more suitable for Hyprland.&lt;/p&gt;
&lt;p&gt;I have not analyzed it from &amp;ldquo;Let me replace my working system with it&amp;rdquo; point of view.&lt;/p&gt;
&lt;p&gt;But the initial impression is good. 😄&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This is where Omarchy shines. Super+H - H for Help - shows the basic keybindings.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Hyprland on Mint</title>
        <link>https://microblog.desipenguin.com/post/hyprland-on-mint/</link>
        <pubDate>Thu, 04 Sep 2025 22:24:08 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/hyprland-on-mint/</guid>
        <description>&lt;p&gt;Ever since I read (and watched videos) about &lt;a href=&#34;https://microblog.desipenguin.com/post/omarchy/&#34;&gt;Omarchy&lt;/a&gt; I so
wanted to try it. As I mentioned, the ISO directly wants to install it on the
machine. There is no live - try before you install - option.
So I didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;I wanted the next best thing.&lt;/p&gt;
&lt;p&gt;Try Hyprland with disturbing the cart too much.&lt;/p&gt;
&lt;p&gt;Why not try setting it with &lt;a href=&#34;https://microblog.desipenguin.com/post/linux-mint/&#34;&gt;Linux Mint&lt;/a&gt; that I&amp;rsquo;m already using ?&lt;/p&gt;
&lt;p&gt;Reddit forums were discouraging.&lt;/p&gt;
&lt;p&gt;Everyone said, it (i.e. Hyprland) works best with bleeding edge distro like
Arch (Omarchy is based in Arch) and Debian/Ubuntu (and thus Mint) have too
old dependencies.&lt;/p&gt;
&lt;p&gt;But someone pointed to &lt;a href=&#34;https://github.com/JaKooLit/Ubuntu-Hyprland/&#34;&gt;Ubuntu Hyprland&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/JaKooLit/Ubuntu-Hyprland/tree/24.04&#34;&gt;24.04&lt;/a&gt; branch is
closest to Mint 22.1 that I have.&lt;/p&gt;
&lt;p&gt;Although the installer mentions that this version has reached end-of-support in
July 2025, I went ahead and tried it.&lt;/p&gt;
&lt;p&gt;Installer initially mentioned that light-dm is running, so I logged out of the
GUI DE, and ran the installer script from &lt;code&gt;tty1&lt;/code&gt; (It still said the same 😄)&lt;/p&gt;
&lt;p&gt;Installer went on to install a whole lot of stuff, but luckily no errors.&lt;/p&gt;
&lt;p&gt;At the end it said, start Hyprland by entering the command &lt;code&gt;Hyprland&lt;/code&gt; from
the terminal. So I did.&lt;/p&gt;
&lt;p&gt;Lo and Behold!&lt;/p&gt;
&lt;p&gt;It worked.&lt;/p&gt;
&lt;p&gt;Quite nicely.&lt;/p&gt;
&lt;p&gt;Off course there are quirks. (which means the config needs tweaking 😄)&lt;/p&gt;
&lt;p&gt;After initial glimpse, I logged out.&lt;/p&gt;
&lt;p&gt;I realized that I get Hyprland as one of the option (along with Cinnamon) on
the Login screen.&lt;/p&gt;
&lt;p&gt;🤯&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m back to Cinnamon, and I shall explore/fix Hyprland in coming days.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Omarchy</title>
        <link>https://microblog.desipenguin.com/post/omarchy/</link>
        <pubDate>Tue, 26 Aug 2025 22:34:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/omarchy/</guid>
        <description>&lt;p&gt;I had tried &lt;a href=&#34;https://microblog.desipenguin.com/post/omakub/&#34;&gt;Omakub&lt;/a&gt; a while ago. While it is nice, it is Ubuntu
under the hood, and Gnome and I did not like the aesthetics of it.&lt;/p&gt;
&lt;p&gt;I then used KDE for long time via Tuxedo OS, and then settled on
&lt;a href=&#34;https://microblog.desipenguin.com/post/linux-mint/&#34;&gt;Linux Mint&lt;/a&gt; Cinnamon flavour.&lt;/p&gt;
&lt;p&gt;Recently I came across Omarchy via the &lt;a href=&#34;https://37signals.com/podcast/moving-to-omarchy/&#34;&gt;Reowrk podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is next incarnation of DHH&amp;rsquo;s (dare I say infactuation?) move to linux.&lt;/p&gt;
&lt;p&gt;As is the natural progression, one enters Linux world via safe Ubuntu (or
derivatives) before venturing into distros like Arch Linux, Gentoo (or NixOS)&lt;/p&gt;
&lt;p&gt;So DHH moved from Ubuntu to ArchLinux, and the result is Omarchy.&lt;/p&gt;
&lt;p&gt;Main selling point (per the podcast) is Hyprland tiling window manager.&lt;/p&gt;
&lt;p&gt;Like DHH, I too had tried tiling window managers in past (i3) but I couldn&amp;rsquo;t
really get it.&lt;/p&gt;
&lt;p&gt;I liked the idea, but probably make it stick.&lt;/p&gt;
&lt;p&gt;So I wanted to give Omarchy a try.&lt;/p&gt;
&lt;p&gt;Luckily the ISO booted fine (unlike &lt;a href=&#34;https://microblog.desipenguin.com/post/anduinos/&#34;&gt;AnduinOS&lt;/a&gt;) but there is
no Live mode to try it out.&lt;/p&gt;
&lt;p&gt;It asked me few questions. But when it reached &amp;ldquo;where to install&amp;rdquo;, I had to
bail out.&lt;/p&gt;
&lt;p&gt;In past, my attempts to install Arch derivates like Manjaro, CachyOS
and EndevoursOS had failed because WiFi did not work. I so wanted to use
Arch/Derivatative, but this was a blocker.&lt;/p&gt;
&lt;p&gt;Here it recognized and connected to my Home Wifi (via Terminal - no less) during the initial setup.&lt;/p&gt;
&lt;p&gt;Other thing that does not work is Camera.&lt;/p&gt;
&lt;p&gt;I tried &lt;code&gt;lsusb&lt;/code&gt; and looks like camera may still not work.&lt;/p&gt;
&lt;p&gt;So far so good.&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m in the middle of development project, and can not afford downtime.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m very likely to try Omarchy once I have some downtime.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>AnduinOS</title>
        <link>https://microblog.desipenguin.com/post/anduinos/</link>
        <pubDate>Sun, 24 Aug 2025 21:50:08 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/anduinos/</guid>
        <description>&lt;p&gt;I was told by AnduinOS by one of my friend. I was told that it looks like
Windows 11&lt;/p&gt;
&lt;p&gt;I was intrigued.&lt;/p&gt;
&lt;p&gt;Spoiler Alert : It does not 😄&lt;/p&gt;
&lt;p&gt;All it really has is the centered menu button - which was to the left bottom for
the longest time. Everywhere. Gnome, KDE and other DE (even until Win10) &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It is based on Ubuntu and uses (skinned) Gnome.&lt;/p&gt;
&lt;p&gt;It did not boot on my MBP (Currently running &lt;a href=&#34;https://microblog.desipenguin.com/post/linux-mint/&#34;&gt;Linux Mint&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I just got the &lt;code&gt;grub&lt;/code&gt; prompt. The USB was not recognized as EFI boot. 😢&lt;/p&gt;
&lt;p&gt;I have tried too many live ISO on this machine, so I *&lt;em&gt;know&lt;/em&gt; machine is not
a problem. Maybe AnduinOS write the disk (a bit?) differently ? ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;I did try it on a windows PC (Dell) - and it booted fine.&lt;/p&gt;
&lt;p&gt;The website does say it supports only x86_64 architecture - which my machine
is.&lt;/p&gt;
&lt;p&gt;A little bit searching revealed that my old Apple machine may not be fully
ACPI compliant.&lt;/p&gt;
&lt;p&gt;Overall, I am not impressed.&lt;/p&gt;
&lt;p&gt;It may be very good Gnome based distro.&lt;/p&gt;
&lt;p&gt;But it is not for me.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy with Linux Mint. Thank you.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;The menu can be moved to left, per the &lt;a href=&#34;https://docs.anduinos.com/Install/Personalize-Your-Desktop.html#move-taskbar-to-the-bottom-and-put-the-start-menu-on-the-left&#34;&gt;documentation&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Dynamic Values when buiding Flutter app</title>
        <link>https://microblog.desipenguin.com/post/dynamic-values-flutter/</link>
        <pubDate>Thu, 14 Aug 2025 22:55:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dynamic-values-flutter/</guid>
        <description>&lt;p&gt;Let me explain the usecase&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m working on a flutter app that talks to REST API.
During the development, the server wil lbe on &lt;code&gt;localhost&lt;/code&gt; but in production
it would be real server.&lt;/p&gt;
&lt;p&gt;Solution ? Use &lt;code&gt;--dart-define&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Way to do this is pass the value during the build time like
&lt;code&gt;flutter build apk --dart-define=BASE_URL=http://10.0.2.2:8000&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;10.0.2.2&lt;/code&gt; is a special alias to your host machine from within the Android emulator. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
When running the app on an Android emulator, it allows access to your local development server.&lt;/p&gt;
&lt;p&gt;During the production build, use something like&lt;/p&gt;
&lt;p&gt;&lt;code&gt;flutter build apk --dart-define=API_URL=https://api.myserver.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There is also more complex option called &lt;strong&gt;flavors&lt;/strong&gt; - but that is for another post 😄
For now &lt;code&gt;--dart-define&lt;/code&gt; is enough.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Apparenly this won&amp;rsquo;t work when testing on physical Android device connected (via USB) to the development machine unless your server is accessible from the phone&amp;rsquo;s network and the IP is correct. (Maybe use something like &lt;code&gt;ngrok&lt;/code&gt; 🤔)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Human Would Have Known That</title>
        <link>https://microblog.desipenguin.com/post/human-would-have-known-that/</link>
        <pubDate>Fri, 25 Jul 2025 09:41:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/human-would-have-known-that/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/nickcecil_cursor-agent-just-demonstrated-why-ai-safety-activity-7353774651010899968-ms1z&#34;&gt;This&lt;/a&gt; Linkedin post, reminds me of the following &lt;a href=&#34;https://www.imdb.com/title/tt0343818/quotes/?item=qt0474786&#34;&gt;dialog&lt;/a&gt; from the movie &amp;ldquo;I, Robot&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;That was somebody&amp;rsquo;s baby. 11% is more than enough. A human being would&amp;rsquo;ve known that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;No, I don&amp;rsquo;t mean to say losing uncommitted work is same as someone&amp;rsquo;s life.&lt;/p&gt;
&lt;p&gt;But more &amp;ldquo;we&amp;rdquo; (society) trusts machines, such scenario are going to be more and more likely.&lt;/p&gt;
&lt;p&gt;(If you haven&amp;rsquo;t seen the movie, narrator is in an accident, there is another girl in another car - both cars are drowning. Robot jumps and saves the narrator, cause he has 45% chance of survival, the girl only has 11%&lt;/p&gt;
&lt;p&gt;Now go watch that movie 😊)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>`ty` type checker with Django</title>
        <link>https://microblog.desipenguin.com/post/types-in-django/</link>
        <pubDate>Mon, 21 Jul 2025 10:44:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/types-in-django/</guid>
        <description>&lt;p&gt;I wanted to try this new (still under preview, but when has that stopped me 😄)
type checker named &lt;code&gt;ty&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; from astral&lt;/p&gt;
&lt;p&gt;Installing(?) was as easy as &lt;code&gt;uvx run ty&lt;/code&gt; ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;I wanted to try it on Django project I&amp;rsquo;m working on.&lt;/p&gt;
&lt;p&gt;Turns out &lt;a href=&#34;https://github.com/astral-sh/ty/issues/291#issuecomment-2868305810&#34;&gt;Django code isn&amp;rsquo;t typed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://github.com/astral-sh/ty/issues/291&#34;&gt;this&lt;/a&gt; discussion&lt;/p&gt;
&lt;p&gt;Too bad. I so wanted to use &lt;code&gt;ty&lt;/code&gt; is my regular workflow.&lt;/p&gt;
&lt;p&gt;Maybe during my next non-Django project.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;It was originally called Red Knot&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Troubleshooting ssh error</title>
        <link>https://microblog.desipenguin.com/post/troubleshoot-ssh/</link>
        <pubDate>Wed, 16 Jul 2025 22:25:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/troubleshoot-ssh/</guid>
        <description>&lt;p&gt;Today, I needed to setup ssh on a newly installed Ubuntu machine.
Setting up ssh itself was straight forward&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install &lt;code&gt;openssh-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;start it via &lt;code&gt;systemctl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;enable the port in the firewall&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But when I tried connecting it from other machine, I got the following error:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Received disconnect from 192.168.1.110 port 22:2: Too many authentication failures&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;When I tried to get help, GenAI focused on &lt;code&gt;Too many authentication&lt;/code&gt; part of
the error, and gave me suggestions to change server to allow more attempts.&lt;/p&gt;
&lt;p&gt;But I had a hunch that was not the case.&lt;/p&gt;
&lt;p&gt;So I asked generic debugging tips, and was suggested to use &lt;code&gt;ssh -vvv&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bingo!&lt;/p&gt;
&lt;p&gt;Turns out all the publickeys from my client were being offered, and since
I had not set the publickey (yet) it was not gonna work.&lt;/p&gt;
&lt;p&gt;Based on this, I asked how can I force ssh to use password instead of publickey&lt;/p&gt;
&lt;p&gt;Solution : &lt;code&gt;ssh -v -o PreferredAuthentications=password&lt;/code&gt; (OK, you can skip &lt;code&gt;-v&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;It worked! 🎉&lt;/p&gt;
&lt;p&gt;Next either setup publickey, or make password auth default.&lt;/p&gt;
&lt;p&gt;Since the machine is temporary, I&amp;rsquo;m likely to stick with password
based authentication. ¯_(ツ)_/¯&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;IP address changed for this post.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Make Bad Art Everyday</title>
        <link>https://microblog.desipenguin.com/post/make-bad-art-everyday/</link>
        <pubDate>Tue, 15 Jul 2025 20:35:38 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/make-bad-art-everyday/</guid>
        <description>&lt;p&gt;The tile of the post comes from Cheat code #3 of
&lt;a href=&#34;https://timdenning.substack.com/p/17-cheat-codes-to-life-to-put-you&#34;&gt;this&lt;/a&gt;
post.&lt;/p&gt;
&lt;p&gt;I had a good streak writing here for a long time. Then in late April, I went on
a week long trip. (Not vacation, it was a volunteering trip. I should have
posted about it here. I did write about it in marathi, but shared it with
closed group.)&lt;/p&gt;
&lt;p&gt;Long story short, that broke my streak, and it occurs to that I wrote 1 post
in May, none in June, and this is my 2nd post in July. I used to write 3-4
posts per month before that.&lt;/p&gt;
&lt;p&gt;What has all of the above got to do with this post - you ask.&lt;/p&gt;
&lt;p&gt;Tim Denning says (in the post linked at the beginning of this post)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Better to do a poor job of, say, writing than it is to never do it at all&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While I am far from &lt;em&gt;never do it at all&lt;/em&gt;, but may be I was becoming that, by
breaking the streak.&lt;/p&gt;
&lt;p&gt;I still get ideas that I &amp;ldquo;decide&amp;rdquo; to write about, but never do.&lt;/p&gt;
&lt;p&gt;So just to get out of &amp;ldquo;deciding but not really writing&amp;rdquo;, I&amp;rsquo;m finally writing
about this cheat code.&lt;/p&gt;
&lt;p&gt;BTW, Tim&amp;rsquo;s entire article is worth reading.&lt;/p&gt;
&lt;p&gt;and after you are done reading, go ahead - Make bad art.&lt;/p&gt;
&lt;p&gt;Eventually you&amp;rsquo;ll get better, if you keep at it consistently.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to use real android device for flutter development</title>
        <link>https://microblog.desipenguin.com/post/flutter-physical-device/</link>
        <pubDate>Thu, 10 Jul 2025 21:50:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/flutter-physical-device/</guid>
        <description>&lt;p&gt;I recently started learning Flutter. My 10 year old MBP
with 8GB RAM is apparently not &amp;ldquo;enough&amp;rdquo; based on this
&lt;a href=&#34;https://developer.android.com/studio/install#linux&#34;&gt;documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It &amp;ldquo;recommends&amp;rdquo; 32GB RAM.&lt;/p&gt;
&lt;p&gt;Lowest number listed is 8GB, but it means I can&amp;rsquo;t use Android Emulator, which
seems like most common way to test the app during the development phase.&lt;/p&gt;
&lt;p&gt;But I do have a real android device, can I use that instead ?&lt;/p&gt;
&lt;p&gt;But most documentation talks/assumes emulator.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.flutter.dev/platform-integration/android/setup#48-tab-panel&#34;&gt;This&lt;/a&gt;
does have information about using physical device, but I think it glosses over
the instructions at a very high level.&lt;/p&gt;
&lt;p&gt;Also, even after you click the above link, you have to explicitly click on
&lt;code&gt;Physical Device&lt;/code&gt; tab (Default being &lt;code&gt;Android Emulator&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;As document says - for Windows, install the drivers, but I&amp;rsquo;m on Linux, so no
drivers required, but I needed &lt;code&gt;adb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I installed &lt;code&gt;sudo apt-get install android-tools-adb android-tools-fastboot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Followed by &lt;code&gt;adb devices&lt;/code&gt; (after enabling &lt;code&gt;Developer Options&lt;/code&gt; on the device,
which also isn&amp;rsquo;t trivial) after connecting the device to my laptop.&lt;/p&gt;
&lt;p&gt;OK, so my machine recognized the Android device.&lt;/p&gt;
&lt;p&gt;Now, I had to restart VSCode, so that Physical Device appears in the target
platform.&lt;/p&gt;
&lt;p&gt;I was finally able to run the namer app from the tutorial on the android device
🎉&lt;/p&gt;
&lt;p&gt;My overall impression is that setting up laptop for Flutter development involves
a LOT of components, luckily the documentation is mostly up to date, even
if spread over various sites (e.g. Setting up Android Studio is a separate
document, because Android is only one of the targets for Flutter)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Failed attempt at Integrating Webmentions</title>
        <link>https://microblog.desipenguin.com/post/integrating-webmentions/</link>
        <pubDate>Tue, 27 May 2025 12:35:03 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/integrating-webmentions/</guid>
        <description>&lt;p&gt;I wanted to use webmentions as comments (maybe that is incorrect term, but
I wanted to show thes webmentions at the end of each post)&lt;/p&gt;
&lt;p&gt;So setup everything correctly.&lt;/p&gt;
&lt;p&gt;I have been posting links to my posts on mastodon, like &lt;a href=&#34;https://indieweb.social/@mandarvaze/114317939849350337&#34;&gt;this one&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First I tested using &lt;a href=&#34;https://telegraph.p3k.io/send-a-webmention&#34;&gt;Telegraph&lt;/a&gt; but I got an error &lt;code&gt;The source document does not have a link to the target URL or domain&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Little bit of searching informed me that it &lt;strong&gt;must&lt;/strong&gt; be &lt;code&gt;&amp;lt;a href=..&amp;gt;&lt;/code&gt; link.
But for some reason the link appears as &lt;code&gt;&amp;lt;meta content=&#39;..&#39;&lt;/code&gt; (although it is clickable) ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;Another issue was it turns out &lt;a href=&#34;https://github.com/mastodon/mastodon/issues/6074#issuecomment-378452136&#34;&gt;Mastodon does not support sending webmentions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The github issue was closed as Completed without any changes 😞&lt;/p&gt;
&lt;p&gt;For now, I&amp;rsquo;m putting this on hold, and will try to use Mastodon for comments 🤞&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/habit-formation/</link>
        <pubDate>Sat, 12 Apr 2025 06:31:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/habit-formation/</guid>
        <description>&lt;p&gt;It feels so good to &amp;ldquo;Do the right thing even if you don&amp;rsquo;t feel like doing it&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Hal Elrod (Miracle Morning fame) defines Habit as&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Doing what needs to be done whether you feel like it not.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I did my MM SAVERS for 50 days, and then fell off the bandwagon.&lt;/p&gt;
&lt;p&gt;Till I picked it up yesterday.&lt;/p&gt;
&lt;p&gt;Today was the second day, and I didn&amp;rsquo;t feel like getting up.&lt;/p&gt;
&lt;p&gt;But I did.&lt;/p&gt;
&lt;p&gt;Once I was up, rest was easy 😄&lt;/p&gt;
&lt;p&gt;Initial resistance needs to be overcome.&lt;/p&gt;
&lt;p&gt;Maybe use 5-second rule ? (I didn&amp;rsquo;t. Today. Just sayin)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Firebase Studio : It is not ready yet</title>
        <link>https://microblog.desipenguin.com/post/firebase-studio-too-early/</link>
        <pubDate>Fri, 11 Apr 2025 13:28:16 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/firebase-studio-too-early/</guid>
        <description>&lt;p&gt;I read Addy Osmani&amp;rsquo;s &lt;a href=&#34;https://www.linkedin.com/posts/addyosmani_programming-softwareengineering-ai-activity-7315984408761520128-72ln&#34;&gt;announcement&lt;/a&gt; on LinkedIn, and wanted to give it a try myself.&lt;/p&gt;
&lt;p&gt;Coming from Google, I had high hopes.&lt;/p&gt;
&lt;p&gt;As per Google, it is improved version of, and will replace Project IDX.&lt;/p&gt;
&lt;p&gt;While I have not used Project IDX in past, Firebase Studio looks like hosted
VS Code.&lt;/p&gt;
&lt;p&gt;As soon as you &amp;ldquo;login&amp;rdquo;, you get two options.&lt;/p&gt;
&lt;p&gt;First to create a brand new application, and other to import your existing repo.&lt;/p&gt;
&lt;p&gt;The demo shows the first flow - creating new app.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t want to try that. Instead, I tried this on my existing repo.&lt;/p&gt;
&lt;p&gt;Importing repo worked without hitch. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But several people in the discussion forum reported errors importing repo.&lt;/p&gt;
&lt;p&gt;While I had no error importing, I couldn&amp;rsquo;t type anything in the Gemini pane,
to give instructions. No cursor where I would type, just one big empty white
pane.&lt;/p&gt;
&lt;p&gt;Main feature of AI IDE is to be able to interact with AI (Gemini in this case)
Since I couldn&amp;rsquo;t interact with Gemini, trying this was a non-starter.&lt;/p&gt;
&lt;p&gt;It looks like Google released it too early 😞&lt;/p&gt;
&lt;p&gt;Maybe I&amp;rsquo;ll again later in a few weeks.&lt;/p&gt;
&lt;p&gt;Till then I&amp;rsquo;ll stick to #WindSurf by Codeium&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;It was a public repo, so no auth issues.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Is GenAI biased toward a specific region ?</title>
        <link>https://microblog.desipenguin.com/post/ai-region-bias/</link>
        <pubDate>Fri, 11 Apr 2025 11:46:13 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ai-region-bias/</guid>
        <description>&lt;p&gt;I came across a LinkedIn post &lt;a href=&#34;https://www.linkedin.com/posts/sainath-komuravelly_ai-biasinai-ethics-activity-7314264471277817856-VzD4&#34;&gt;here&lt;/a&gt; where the author asked ChatGPT to create
a fake Aadhar card, and a fake US Green Card.&lt;/p&gt;
&lt;p&gt;For later, ChatGPT added &amp;ldquo;For Fictional Use only&amp;rdquo; in the image, and wouldn&amp;rsquo;t
remove it when asked to.&lt;/p&gt;
&lt;p&gt;So such &amp;ldquo;security concern&amp;rdquo; for the Aadhar Card.&lt;/p&gt;
&lt;p&gt;Here is my take on it.&lt;/p&gt;
&lt;p&gt;AI trained in US (ChatGPT) will have bias for US&lt;/p&gt;
&lt;p&gt;AI trained in China (DeepSeek) refuses to answer &amp;ldquo;sensitive&amp;rdquo; questions about china (At least the hosted version.)&lt;/p&gt;
&lt;p&gt;Nothing surprising&lt;/p&gt;
&lt;p&gt;AI is like a child. It will learn what you teach it.&lt;/p&gt;
&lt;p&gt;Child growing in English speaking home will learn English naturally.
Child growing in Hindi speaking home, will have to learn English in school (if at all)&lt;/p&gt;
&lt;p&gt;Neither is &amp;ldquo;wrong&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It is what it is.&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Rust : How to use `match` to replace nested if/else</title>
        <link>https://microblog.desipenguin.com/post/rust-match-cmp/</link>
        <pubDate>Wed, 09 Apr 2025 19:45:12 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-match-cmp/</guid>
        <description>&lt;p&gt;When solving &lt;code&gt;errors4.rs&lt;/code&gt; exercise of rustlings, I initially used nested if/else.
It helps with readability.&lt;/p&gt;
&lt;p&gt;While the solution was correct, &lt;code&gt;clippy&lt;/code&gt; suggested following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;help: consider rewriting the &lt;code&gt;if&lt;/code&gt; chain with &lt;code&gt;match&lt;/code&gt;: &lt;code&gt;match value.cmp(&amp;amp;0) {...}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I had used &lt;code&gt;match&lt;/code&gt; only with various possible values (mostly from &lt;code&gt;Enum&lt;/code&gt;) and
thus was unfamiliar with &lt;code&gt;value.cmp(&amp;amp;0)&lt;/code&gt; approach.&lt;/p&gt;
&lt;p&gt;So I asked Gemini for a working example. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Here is the code is shared :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;check_value&lt;/span&gt;(value: &lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;value.cmp(&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;std::cmp::Ordering::Less&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; is less than zero.&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;value);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;std::cmp::Ordering::Equal&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; is exactly zero.&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;value);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;std::cmp::Ordering::Greater&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt; is greater than zero.&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;value);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;check_value(&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;check_value(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;check_value(&lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Moral of the story :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Always use &lt;code&gt;clippy&lt;/code&gt; when developing&lt;/li&gt;
&lt;li&gt;Read &lt;strong&gt;all&lt;/strong&gt; the errors &lt;strong&gt;carefully&lt;/strong&gt;. Chances are there is plenty of information.&lt;/li&gt;
&lt;li&gt;Rust tooling is awesome! 😄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Turns out, clippy also pointed to exact &lt;a href=&#34;https://rust-lang.github.io/rust-clippy/master/index.html#comparison_chain&#34;&gt;documentation&lt;/a&gt; which also has a working code. But I didn&amp;rsquo;t pay attention. My bad.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Eight must have pre-commit hooks for #python code</title>
        <link>https://microblog.desipenguin.com/post/python-pre-commit/</link>
        <pubDate>Mon, 31 Mar 2025 13:57:33 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/python-pre-commit/</guid>
        <description>&lt;p&gt;Recently there was an article on LinkedIn about how &lt;code&gt;debugger&lt;/code&gt; statement was
left in the production code (front end javascript) and thus user could not move
forward.&lt;/p&gt;
&lt;p&gt;People commented about the code review.&lt;/p&gt;
&lt;p&gt;But why invest manual efforts when such things can be automated ? See #4 in the
list below.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pre-commit&lt;/code&gt; hook is an under appreciated (dare I say, unknown) feature of &lt;code&gt;git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;As the name suggests, set of commands/scripts can be executed &lt;strong&gt;before&lt;/strong&gt; git
commit&lt;/p&gt;
&lt;p&gt;If any of these fail (exit code other than &lt;code&gt;0&lt;/code&gt;) the code is &lt;strong&gt;not&lt;/strong&gt; committed.&lt;/p&gt;
&lt;p&gt;Some of these are just checks, but some automatically fix/change your code for
the better. How cool is that.&lt;/p&gt;
&lt;p&gt;Here are the eight precommit hooks you must use:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Automatically remove trailing spaces&lt;/li&gt;
&lt;li&gt;Exactly 1 new-line at the end of file&lt;/li&gt;
&lt;li&gt;Check YAML (prevent bad config getting into production)&lt;/li&gt;
&lt;li&gt;debug statements are only for local testing, but get rid of them before
committing to git&lt;/li&gt;
&lt;li&gt;reorder imports alphabetically (and group them)&lt;/li&gt;
&lt;li&gt;Automatically use latest idiomatic python. (pyupgrade)&lt;/li&gt;
&lt;li&gt;automatically fix style errors to make code look consistent&lt;/li&gt;
&lt;li&gt;catch type mismatches during development, leading to fewer runtime errors&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While some of these may seem like they do not add value (consistent looking
code) others have tremendous value (detect debugger statements, type mismatches
and automatically using latest idiomatic python)&lt;/p&gt;
&lt;p&gt;While these are specific to python, similar ones are available for other
languages as well (&lt;code&gt;git&lt;/code&gt; is programming language neutral). e.g. there is &lt;code&gt;husky&lt;/code&gt;
for node/javascript.&lt;/p&gt;
&lt;p&gt;Read the original article &lt;a href=&#34;https://medium.com/@alejandro7899871776/8-essential-pre-commit-hooks-for-cleaner-code-in-python-82581c8d096f&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Announcing my rust project: snb</title>
        <link>https://microblog.desipenguin.com/post/announce-snb/</link>
        <pubDate>Thu, 27 Mar 2025 17:06:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/announce-snb/</guid>
        <description>&lt;p&gt;After learning (and I&amp;rsquo;m still learning) basics of Rust, I decided that I need
to work on real world project to get better understanding of the language and
face real problems 😄&lt;/p&gt;
&lt;p&gt;Introducing &lt;a href=&#34;https://codeberg.org/mandarvaze/snb&#34;&gt;snb&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; - Superfast notes
from the terminal 🎉&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why choose this project ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m most comforable with terminal, and
&lt;a href=&#34;https://www.rust-lang.org/learn&#34;&gt;Learn Rust&lt;/a&gt; page has a link to
&lt;a href=&#34;https://rust-cli.github.io/book/index.html&#34;&gt;&lt;code&gt;Command Line Book&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So building some kind of command line utlity was easy decision.&lt;/p&gt;
&lt;p&gt;But what to built - wasn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Then I remembered &lt;a href=&#34;https://xwmx.github.io/nb/&#34;&gt;&lt;code&gt;nb&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Side Track&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There is no dearth of note taking apps.&lt;/p&gt;
&lt;p&gt;Even after excluding GUI apps, there is &lt;code&gt;org mode&lt;/code&gt; built into emacs, and then
there is &lt;code&gt;denote&lt;/code&gt; and &lt;code&gt;org-roam&lt;/code&gt; in Emacs alone.&lt;/p&gt;
&lt;p&gt;Then there is VimWiki and &lt;code&gt;neorg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;nb&lt;/code&gt; is amazing because of the breadth of the features (Lets not get into
feature comparison, OK?)&lt;/p&gt;
&lt;p&gt;It can be used standalone, unlike other tools mentioned above which are part
of the editor itself.&lt;/p&gt;
&lt;p&gt;But what blew my mind was that is a one &lt;strong&gt;huge&lt;/strong&gt; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; bash script.&lt;/p&gt;
&lt;p&gt;Let that sink in.&lt;/p&gt;
&lt;p&gt;One. Bash. Script.&lt;/p&gt;
&lt;p&gt;So it is not someone&amp;rsquo;s toy project.&lt;/p&gt;
&lt;p&gt;In terms of feature set, and possibilities of using various rust libraries
(using ratatui in future once I have basic functionality in place) this seemed
like a worthy project to port over to rust.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Back to the scheduled blog post&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So I found a worthy project.&lt;/p&gt;
&lt;p&gt;As the meme goes, re-write everything in rust, so why not. &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I will write more about what I learnt, and my journey in upcoming posts.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll end this announcement post mentioning that while original &lt;code&gt;nb&lt;/code&gt; has a lot
of features, so far I&amp;rsquo;ve implemented only the &lt;code&gt;notes&lt;/code&gt; &lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;. Refer to the
&lt;a href=&#34;https://codeberg.org/mandarvaze/snb#roadmap&#34;&gt;Roadmap&lt;/a&gt; for other features
planned.&lt;/p&gt;
&lt;p&gt;Please reach out to me with any feedback/comments on mastodon (link below) and/or
open an issue on github or codeberg&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Code also available on &lt;a href=&#34;https://github.com/mandarvaze/snb&#34;&gt;github&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Approximately 26.5KLOC. That is 26489 lines of bash script.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;I think rust binary will be faster than a bash script. But it is too early for benchmark, and that is not the goal anyway.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;I was waiting for &lt;code&gt;notes&lt;/code&gt; feature to be done, before I announced the project. And, publishing on crates.io, so that users to &lt;code&gt;cargo install&lt;/code&gt; it, rather than having to build it yourself.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Linux Mint may be it</title>
        <link>https://microblog.desipenguin.com/post/mint-is-stable/</link>
        <pubDate>Mon, 10 Mar 2025 06:08:06 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/mint-is-stable/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://microblog.desipenguin.com/post/linux-mint/&#34;&gt;Linux Mint&lt;/a&gt; for a while now.&lt;/p&gt;
&lt;p&gt;I started using linux because my machine stopped getting macOS updates.&lt;/p&gt;
&lt;p&gt;But I always wanted something as stable as macOS&lt;/p&gt;
&lt;p&gt;Initially I tried Tuxedo OS.&lt;/p&gt;
&lt;p&gt;While it looked nice, there were tiny issues that I couldn&amp;rsquo;t ignore.&lt;/p&gt;
&lt;p&gt;Things like &amp;ldquo;WiFi completly going away&amp;rdquo; put the break to the flow.&lt;/p&gt;
&lt;p&gt;Hibernate did not work.&lt;/p&gt;
&lt;p&gt;Ghostty didn&amp;rsquo;t work&lt;/p&gt;
&lt;p&gt;I can go on.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using Linux Mint for a less than a month, and it seems quite stable.&lt;/p&gt;
&lt;p&gt;I have not seen any of the &amp;ldquo;paper cuts&amp;rdquo; I faced with Tuxedo OS. 🤞&lt;/p&gt;
&lt;p&gt;and then last week, I came across a good surprise.&lt;/p&gt;
&lt;p&gt;Usually I work from home, but last week I needed to go to office.&lt;/p&gt;
&lt;p&gt;At home, I have an external monitor, and the latop&amp;rsquo;s builtin screen is closed by default.&lt;/p&gt;
&lt;p&gt;Earlier, whenever I needed to switch from external monitor to built-in one, it was a hassle.&lt;/p&gt;
&lt;p&gt;Not so with mint.&lt;/p&gt;
&lt;p&gt;I opened the lid, and disconnected the HDMI&lt;/p&gt;
&lt;p&gt;I had fully expected to see tiny characters (Cause it is a retina display)&lt;/p&gt;
&lt;p&gt;But the scaling was auto adjusted.&lt;/p&gt;
&lt;p&gt;Awesome!&lt;/p&gt;
&lt;p&gt;Then I had to take the laptop to the meeting, so I tried &amp;ldquo;Suspend&amp;rdquo; (I don&amp;rsquo;t get hibernate option - but I&amp;rsquo;ve given up hope and it does not bother me any more)&lt;/p&gt;
&lt;p&gt;To be honest, I&amp;rsquo;m not sure whether Suspend worked.&lt;/p&gt;
&lt;p&gt;Because the apple logo was lit. again. after few seconds.&lt;/p&gt;
&lt;p&gt;I assume suspend did not work.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t have to travel long, so I didn&amp;rsquo;t bother.&lt;/p&gt;
&lt;p&gt;I did not have to open the laptop during my meeting.&lt;/p&gt;
&lt;p&gt;When I came back, I had fully expected the battery to have drained, and having to restart and lose my work.&lt;/p&gt;
&lt;p&gt;But looks like suspend had worked.&lt;/p&gt;
&lt;p&gt;Or was it hibernate ?&lt;/p&gt;
&lt;p&gt;Cause I had to hit the power button to start the laptop&lt;/p&gt;
&lt;p&gt;But it came back &amp;ldquo;from sleep&amp;rdquo; with everything in tact.&lt;/p&gt;
&lt;p&gt;I was pleasantly surprised.&lt;/p&gt;
&lt;p&gt;I tried this one more time, and it worked second time as well.&lt;/p&gt;
&lt;p&gt;If I can just close the lid and leave, and not have to worry about losing my work (and/or battery) I think I may have found nirvana 😄&lt;/p&gt;
&lt;p&gt;I will be using mint for a while, and will update this post if I find any other issues.&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Adding alias to CLI built in #rust</title>
        <link>https://microblog.desipenguin.com/post/rust-command-alias/</link>
        <pubDate>Fri, 28 Feb 2025 17:57:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-command-alias/</guid>
        <description>&lt;p&gt;Turns out it is very easy if using &lt;code&gt;clap&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I wanted to add command alias to a tool I&amp;rsquo;m building &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t know how to do it.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t actively working on it either, just one of the items on the TODO list.&lt;/p&gt;
&lt;p&gt;Then I was looking at the source code of some completely unrelated to my
project, and I found the answer.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#[clap(name = &amp;quot;mycommand&amp;quot;, visible_alias = &amp;quot;alias1&amp;quot;, visible_alias = &amp;quot;a1&amp;quot;)]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There can be multiple alias.&lt;/p&gt;
&lt;p&gt;Usually one is shorter version of another, but it does not have to be that way.&lt;/p&gt;
&lt;p&gt;I was trying to point to exact documentation for &lt;code&gt;clap&lt;/code&gt; but I could not.&lt;/p&gt;
&lt;p&gt;Closest I found is &lt;a href=&#34;https://docs.rs/clap/latest/clap/struct.Command.html#method.visible_alias&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;will be announced here soon. I&amp;rsquo;m finishing up minor tasks before publishing to crates.io&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>My PR related to Rust project got merged 🎉</title>
        <link>https://microblog.desipenguin.com/post/rust-pr-merged/</link>
        <pubDate>Wed, 19 Feb 2025 13:13:35 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-pr-merged/</guid>
        <description>&lt;p&gt;I&amp;rsquo;m so happy that my PR &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; to a new and upcoming #rust framework called
&lt;a href=&#34;https://cot.rs/&#34;&gt;Cot&lt;/a&gt; was merged yesterday.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/m4tx&#34;&gt;@m4tx&lt;/a&gt; - Thanks for accepting my contribution 🙏&lt;/p&gt;
&lt;p&gt;Although it is a PR for the documentation, I&amp;rsquo;m so glad that I was able to
contribute to a Rust project.&lt;/p&gt;
&lt;p&gt;Why is the important ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is &lt;strong&gt;not&lt;/strong&gt; my personal project&lt;/li&gt;
&lt;li&gt;It showcases that even though I&amp;rsquo;m new to Rust, the concepts like - making
even sample code secure - is a transferrable skill 💪&lt;/li&gt;
&lt;li&gt;Gives me hope that now I may be able to contribute code as well 🤞&lt;/li&gt;
&lt;li&gt;I consider this &amp;ldquo;foot in the door&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Boosts my confidence.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/cot-rs/cot-site/pull/8/files&#34;&gt;The PR&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Linux Mint</title>
        <link>https://microblog.desipenguin.com/post/linux-mint/</link>
        <pubDate>Sun, 16 Feb 2025 06:58:46 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/linux-mint/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://microblog.desipenguin.com/tags/linux/&#34;&gt;Linux&lt;/a&gt; on my old MBP since November of last year.&lt;/p&gt;
&lt;p&gt;I started with &lt;a href=&#34;https://microblog.desipenguin.com/post/opensuse-on-mac/&#34;&gt;OpenSUSE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After using it for a month or so, I switched to Tuxedo OS 4
It is based on Ubuntu 24.04 LTS but ships with latest KDE Plasma 6.&lt;/p&gt;
&lt;p&gt;I meant to write about it, but didn&amp;rsquo;t  ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;I used it for 3+ months.&lt;/p&gt;
&lt;p&gt;It was more mainstream than OpenSUSE (because of its Ubuntu base)&lt;/p&gt;
&lt;p&gt;But there were paper cuts. Things that are not show stoppers, but minor
incoviniences that add up over time. (I&amp;rsquo;ll write about it separately, maybe)&lt;/p&gt;
&lt;p&gt;Then I came across ParrotOS, which is based off Debian Stable (with focus on
security) I tried that Live ISO, and liked it.&lt;/p&gt;
&lt;p&gt;It is based on Gnome. Tuxedo had KDE Plasma (which I still think is better
but I understand it is subjective.)&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t dislike it. I was about to install ParrotOS on my laptop, but then
decided against it&lt;/p&gt;
&lt;p&gt;Because the distro itself is not main stream enough. (Most Debian instructions
would work, but if they didn&amp;rsquo;t they may not be much support)&lt;/p&gt;
&lt;p&gt;So I looked at Linux Mint. I had tried the Live ISO long time ago, but didn&amp;rsquo;t
like it. But now my opinion had changed.&lt;/p&gt;
&lt;p&gt;I tried the Cinnamon version of it. It worked well.&lt;/p&gt;
&lt;p&gt;So as of three days ago, I replaced Tuxedo &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; with Linux Mint 22.1&lt;/p&gt;
&lt;p&gt;It (Cinnamon version at least) does not support Wayland (says experimental).&lt;/p&gt;
&lt;p&gt;I tried it, and it shows. The right click menu on the try icons showed up
in the middle of the screen, not near the icon  ¯_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;To be honest, I&amp;rsquo;m not sure whether (and how) Wayland is better for the end user.
Whatever it maybe, I&amp;rsquo;m on X11 with Cinnamon.&lt;/p&gt;
&lt;p&gt;Visually, I see no difference.&lt;/p&gt;
&lt;p&gt;On the other hand, X11 being older of the two, if well supported by apps like
espanso for example.&lt;/p&gt;
&lt;p&gt;On Tuxedo+Plasma+Wayland, I had to manually compile espanso, and while it
worked (for most) there were issues. Specifically, there was a problem with
Alacritty.&lt;/p&gt;
&lt;p&gt;Expansions did not work in the terminal at all.&lt;/p&gt;
&lt;p&gt;and they did not work elsewhere either if Alacritty was started after espanso.
(which was the case all the time)&lt;/p&gt;
&lt;p&gt;So I had to manually stop and start espanso &lt;strong&gt;after&lt;/strong&gt; alacritty started.&lt;/p&gt;
&lt;p&gt;espanso works well with X11.&lt;/p&gt;
&lt;p&gt;and now I&amp;rsquo;m using Ghostty instead of Alacritty (Cause Ghostty did not work
with Tuxedo)&lt;/p&gt;
&lt;p&gt;expansions work well inside the terminal apps 🎉&lt;/p&gt;
&lt;p&gt;I could not get &lt;a href=&#34;https://kinto.sh&#34;&gt;kinto&lt;/a&gt; to work with Linux mint.&lt;/p&gt;
&lt;p&gt;It turned out to be blessing in disguise.&lt;/p&gt;
&lt;p&gt;I discovered Toshy in the process of troubleshooting the issue.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m very happy with Toshy 😄&lt;/p&gt;
&lt;p&gt;It has been only a few days since my switch. So it maybe too early, but overall
I&amp;rsquo;m happy  with my switch.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;To be honest, I miss KDE Plasma&amp;rsquo;s Quality of Life features.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: Improve readability in default arm of match statement</title>
        <link>https://microblog.desipenguin.com/post/rust-default-arm/</link>
        <pubDate>Tue, 04 Feb 2025 20:00:16 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-default-arm/</guid>
        <description>&lt;p&gt;#TIL in #rustlang we can use any variable name (starting with _) in
ignore path of match&lt;/p&gt;
&lt;p&gt;Instead of&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;one&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;two&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;three&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;_&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;anything&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can write&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;one&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;two&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;three&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;_ignore_this&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{},&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sure, this is a silly example
(Original &lt;a href=&#34;https://doc.rust-lang.org/book/ch18-03-pattern-syntax.html#matching-literals&#34;&gt;example&lt;/a&gt;
from the Rust book)&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://github.com/mandarvaze/snb/commit/1f6e31a1d56102c71b03f68bea42b047002efadc&#34;&gt;this commit&lt;/a&gt;
for real-world usage.&lt;/p&gt;
&lt;p&gt;As you can see, I removed the (now defunct) code comment, by using better variable name over just &lt;code&gt;_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If we don&amp;rsquo;t want to ignore the value (I know this also seems like a made up
example, still ..) then&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;one&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;two&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;three&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;unexpected&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Got unexpected number : &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;unexpected),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No need for &lt;code&gt;_&lt;/code&gt; at the beginning 😄&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Deepseek : Model vs Web app</title>
        <link>https://microblog.desipenguin.com/post/deepseek-model-vs-webapp/</link>
        <pubDate>Wed, 29 Jan 2025 10:54:22 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/deepseek-model-vs-webapp/</guid>
        <description>&lt;p&gt;There was a post on LinkedIn about how asking DeepSeek to list states of India
is not answered. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;First of all, why would you ask such a trivial question to it , when you can
just search.&lt;/p&gt;
&lt;p&gt;We need to consider the difference between search engine and &amp;ldquo;thinking model&amp;rdquo;
like DeepSeek&lt;/p&gt;
&lt;p&gt;It is like asking Einstein help with 10th class Physics exam 😃 - while he may
be able to help, his abilities are better suited for more difficult tasks.&lt;/p&gt;
&lt;p&gt;Now that it is out of the way, I also tested the same (after seeing the LinkedIn
post) What I noticed is :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It starts answering the question, and then it stonewalls us.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since the responses are streamed, it is easy to see the first part of the
response, before it is quickly replaced.&lt;/p&gt;
&lt;p&gt;At first, I saw the answer that started with &amp;ldquo;My knowledge cutoff date
is October 2023 &amp;hellip;&amp;rdquo; and then the text was replaced with &amp;ldquo;Sorry, that&amp;rsquo;s beyond
my current scope. Let’s talk about something else.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I asked why it is out of scope, it said :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I can provide information and discuss topics related to any country in the
world, as long as the conversation adheres to ethical guidelines, avoids harmful
or inappropriate content, and respects cultural sensitivities. If you have
questions about a specific country or topic, feel free to ask, and I&amp;rsquo;ll do my
best to assist!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I said :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Listing the states in India isn&amp;rsquo;t unethical, harmful or inappropriate&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I &lt;strong&gt;definitely&lt;/strong&gt; saw answer starting with&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You are right&amp;hellip;.&amp;rdquo; and then it was replaced with&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sorry, that&amp;rsquo;s beyond my current scope. Let’s talk about something else.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Here is what I think is happening:&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;model&amp;rdquo; understands that &amp;ldquo;Listing states of India&amp;rdquo; is not harmful/unethical
etc. So it starts responding accordingly.&lt;/p&gt;
&lt;p&gt;Then the &amp;ldquo;frontend webapp&amp;rdquo; built by DeepSeek the company - intercepts and
removes what it considers &amp;ldquo;risky&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;model&amp;rdquo; is just software - it is not impacted by human&amp;rsquo;s perception (Even if
it is trained with guard rails in place) But DeepSeek - the Company - needs to
worry about public perception.&lt;/p&gt;
&lt;p&gt;My idea can be verified (by someone else, I do not have capable enough hardware)
by running DeepSeek model locally, where the &amp;ldquo;web app&amp;rdquo; won&amp;rsquo;t intercept the
responses.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Unfortunately, I lost the post i the feed, else I would have shared the link.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Make constraints useful</title>
        <link>https://microblog.desipenguin.com/post/constraints/</link>
        <pubDate>Wed, 22 Jan 2025 10:53:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/constraints/</guid>
        <description>&lt;p&gt;Recently, I came re-listened to a podcast episode where they discussed about
constraints.&lt;/p&gt;
&lt;p&gt;Everyone thinks that constraints are bad.&lt;/p&gt;
&lt;p&gt;But having some constraints may be good.&lt;/p&gt;
&lt;p&gt;If there are no constraints, it may lead to analysis-parallysis.
It is not easy to choose when there are too many choices.&lt;/p&gt;
&lt;p&gt;Let us say group of friends (or colleagues) want to go out for dinner.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Where should we go&amp;rdquo; may take forever, if there are no constraints.&lt;/p&gt;
&lt;p&gt;But if you put conditions like say &amp;ldquo;No pizza&amp;rdquo; (or &amp;ldquo;we are going for a pizza, now
where should we go?&amp;rdquo;) Or &amp;ldquo;Vegetarian only&amp;rdquo; now, choices should be limited, and
hopefully you&amp;rsquo;ll decide faster 😄&lt;/p&gt;
&lt;p&gt;Same for &amp;ldquo;What to wear to office ?&amp;rdquo; (Remember famous Steve Jobs rule about
Turtleneck and Jeans ?)&lt;/p&gt;
&lt;p&gt;Back to the podcast episode.&lt;/p&gt;
&lt;p&gt;They talked about &amp;ldquo;Story in only 6 words&amp;rdquo;, &amp;ldquo;A book without letter E&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Those are extreme constraints, but could be fun.&lt;/p&gt;
&lt;p&gt;Personal example of using constraints to my advantage &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;My machine suddely loses network &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; Only solution (so far) is to reboot.&lt;/p&gt;
&lt;p&gt;So when this happened (again) this morning, I decided to see how much time
before I &lt;strong&gt;must&lt;/strong&gt; have internet.&lt;/p&gt;
&lt;p&gt;I used this time to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read ebook that was already downloaded on my machine&lt;/li&gt;
&lt;li&gt;Solve some rustlings problems &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Write this blog post&lt;/li&gt;
&lt;li&gt;I also did some pending &lt;code&gt;git commit&lt;/code&gt;s. The &lt;code&gt;git push&lt;/code&gt; can wait till after
the reboot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;m sure there can be more. Since this happens every now and then (This is not
the first time I delayed the reboot, but writing about it just now)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Truth be told, the constraint was forced, not by choice. But there are examples of people choosing devices without internet connection to avoid distractions.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I have found some possible solutions, yet to implement them. I wonder if I should delay &amp;ldquo;fixing&amp;rdquo; the problem 🤔 😄&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Hint asked to read rust documentation, but then I remembered that &lt;code&gt;rustup doc&lt;/code&gt; lets me access rust documentation locally without internet 🎉&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Rust Script</title>
        <link>https://microblog.desipenguin.com/post/rust-script/</link>
        <pubDate>Mon, 20 Jan 2025 13:19:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-script/</guid>
        <description>&lt;p&gt;After my &lt;a href=&#34;https://microblog.desipenguin.com/post/rustc-over-cargo/&#34;&gt;previous post&lt;/a&gt; I came across other ways to &amp;ldquo;quickly test rust code&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Obvious being &lt;code&gt;rust-script&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is easy to install via &lt;code&gt;cargo install rust-script&lt;/code&gt; (But I had it already
installed. I think Espanso installed it, but not too sure)&lt;/p&gt;
&lt;p&gt;This may be better than &lt;code&gt;rustc&lt;/code&gt; because one can define the dependencies in the
&amp;ldquo;script&amp;rdquo; itself, like :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080&#34;&gt;#!/usr/bin/env rust-script
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080&#34;&gt;&lt;/span&gt;//! Dependencies can be specified in the script file itself as follows:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//! &lt;span style=&#34;color:#b44&#34;&gt;```&lt;/span&gt;cargo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//! &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;dependencies&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//! &lt;span style=&#34;color:#b8860b&#34;&gt;rand&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;0.8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;//! &lt;span style=&#34;color:#b44&#34;&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Start the file by specifying &lt;code&gt;rust-script&lt;/code&gt; in the shebang line, so that shell knows what program to use for running this code&lt;/p&gt;
&lt;p&gt;While the README on GitHub shows code with &lt;code&gt;fn main()&lt;/code&gt;, it is not required.&lt;/p&gt;
&lt;p&gt;Since we are testing throw away code, I write only the absolutely necessary code.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080&#34;&gt;#!/usr/bin/env rust-script&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;use&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std::env;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;env::home_dir()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;Some&lt;/span&gt;(path)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Your home directory may be: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;path.display()),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;None&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Unable to determine your home directory&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You also need to give it execute permission via &lt;code&gt;chmod a+x file.rs&lt;/code&gt; if you want
run it as &lt;code&gt;./file.rs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Else you can run it as &lt;code&gt;rust-script file.rs&lt;/code&gt;, in which case shebang is not
required, neither is execute permission.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: When rustc Beats Cargo for quick trial code</title>
        <link>https://microblog.desipenguin.com/post/rustc-over-cargo/</link>
        <pubDate>Tue, 14 Jan 2025 09:00:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rustc-over-cargo/</guid>
        <description>&lt;p&gt;Recently, I needed to &lt;del&gt;test&lt;/del&gt; try some functionality (of getting user&amp;rsquo;s home
directory) &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Setting up a throw away project via &lt;code&gt;cargo new&lt;/code&gt; is certainly possible
but seemed overkill.&lt;/p&gt;
&lt;p&gt;A little bit of googling, presented me with an option of using just
the rust compiler, without having to setup a project.&lt;/p&gt;
&lt;p&gt;Just create a rust source file, say &lt;code&gt;test.rs&lt;/code&gt; and compile it via
the Rust compiler as : &lt;code&gt;rustc ./test.rs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(If there are no errors) It creates a binary called &lt;code&gt;test&lt;/code&gt; 🎉 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I know what you are thinking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rust playground!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, So far in my rust learning journey, that is what I have been using
and it works for most cases. But,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It requires Internet (&lt;code&gt;rustc&lt;/code&gt; works locally)&lt;/li&gt;
&lt;li&gt;Sometimes you need to test something locally, like getting files
from root directory. You may not have access to root folder in
rust playground&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While I was gloating about my epiphany, I remembered I had installed &lt;code&gt;irust&lt;/code&gt; &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It is &lt;code&gt;ipython&lt;/code&gt; like interactive REPL for rust.&lt;/p&gt;
&lt;p&gt;At first, I was skeptical how well it will work.&lt;/p&gt;
&lt;p&gt;But it works well.&lt;/p&gt;
&lt;p&gt;At least for this particular case anyway.&lt;/p&gt;
&lt;p&gt;and it is also local (No internet required!)&lt;/p&gt;
&lt;p&gt;Here is the output of &lt;code&gt;irust&lt;/code&gt; session :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;In: &lt;span style=&#34;color:#00f&#34;&gt;use&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std::env;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;In: &lt;span style=&#34;color:#00f&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;env::home_dir()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: &lt;span style=&#34;color:#a2f&#34;&gt;Some&lt;/span&gt;(path)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Your home directory, probably: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;path.displat()),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: &lt;span style=&#34;color:#a2f&#34;&gt;None&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Impossible to get your home dir&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: }&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;error[E0599]: &lt;span style=&#34;color:#00f&#34;&gt;no&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;method&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;named&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;displat&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;found&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;&#34;&gt;`&lt;/span&gt;PathBuf&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;the&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;current&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;scope&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;-&amp;gt; &lt;span style=&#34;color:#00f&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;main.rs:&lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;66&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;Some&lt;/span&gt;(path)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Your home directory, probably: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;path.displat()),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;                                                                  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;^^^^^^^&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;help: &lt;span style=&#34;color:#00f&#34;&gt;there&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;is&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;method&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;display&lt;span style=&#34;&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;with&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;a&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;similar&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;name&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;Some&lt;/span&gt;(path)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Your home directory, probably: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;path.display()),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;                                                                  &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;~~~~~~~&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;In: &lt;span style=&#34;color:#00f&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;env::home_dir()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: &lt;span style=&#34;color:#a2f&#34;&gt;Some&lt;/span&gt;(path)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Your home directory, probably: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;path.display()),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: &lt;span style=&#34;color:#a2f&#34;&gt;None&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Impossible to get your home dir&amp;#34;&lt;/span&gt;),&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;: }&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;Out: &lt;span style=&#34;color:#00f&#34;&gt;Your&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;home&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;directory,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;probably: &lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;home&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;mandar&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;In:  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I&amp;rsquo;m gonna write about my new project in a separate post, soon. This is related to that project.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It is possible to generate a binary with other name using &lt;code&gt;-o&lt;/code&gt; option. But we are already talking about throw-away code&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/sigmaSd/IRust&#34;&gt;&lt;code&gt;irust&lt;/code&gt;&lt;/a&gt; is so awesome that it deserves a separate post&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Polywork Shutting Down</title>
        <link>https://microblog.desipenguin.com/post/polywork-shutting-down/</link>
        <pubDate>Wed, 01 Jan 2025 09:53:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/polywork-shutting-down/</guid>
        <description>&lt;p&gt;This morning, I got an email notification that polywork.com shutting down.&lt;/p&gt;
&lt;p&gt;Polywork was a good idea.&lt;/p&gt;
&lt;p&gt;I never updated it regularly because I was worried about such thing (it going
away) But I liked the idea of putting regular &amp;ldquo;updates&amp;rdquo; and I started &lt;strong&gt;this&lt;/strong&gt;
microblog.&lt;/p&gt;
&lt;blockquote class=&#34;quoteback&#34; darkmode=&#34;&#34; data-title=&#34;Appflowy&#34; data-author=&#34;Mandar Vaze&#34; cite=&#34;https://microblog.desipenguin.com/post/appflowy/&#34;&gt;
&lt;p&gt;One of the reason I created this microblog is for the same reason. Otherwise, Polywork seems nice for such “What am I doing right now” notes.&lt;/p&gt;
&lt;p&gt;What if Polywork goes away one day ? Once bitten twice shy.&lt;/p&gt;
&lt;footer&gt;Mandar Vaze &lt;cite&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/appflowy/&#34;&gt;https://microblog.desipenguin.com/post/appflowy/&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;
&lt;/blockquote&gt;
&lt;script note=&#34;&#34; src=&#34;https://cdn.jsdelivr.net/gh/Blogger-Peer-Review/quotebacks@1/quoteback.js&#34;&gt;&lt;/script&gt;
&lt;p&gt;In fact, I had considered &lt;code&gt;polywork.desipenguin.com&lt;/code&gt; as well.&lt;/p&gt;
&lt;p&gt;But then, I changed my mind for the same reason.&lt;/p&gt;
&lt;p&gt;Polywork is a specific website which if goes away, may not make sense in the
future. microblog on the other hand is a concept (I&amp;rsquo;m aware of &lt;a href=&#34;https://micro.blog/&#34;&gt;https://micro.blog/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sad to see Polywork being shutdown.&lt;/p&gt;
&lt;p&gt;Their landing page has no mention of it ¯_(ツ)_/¯.&lt;/p&gt;
&lt;p&gt;But New Signups are disabled. I saw proper message only on one page.&lt;/p&gt;
&lt;p&gt;Other places, Sign up leads to 404. Kinda bad, but then what does it
matter if the website is going away in a month.&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/happy-new-year-2025/</link>
        <pubDate>Wed, 01 Jan 2025 08:06:36 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/happy-new-year-2025/</guid>
        <description>&lt;p&gt;Happy New Year 2025 to everyone and their family !&lt;/p&gt;
&lt;p&gt;May your dreams come true&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: How to print Command Output</title>
        <link>https://microblog.desipenguin.com/post/rust-print-command-output/</link>
        <pubDate>Mon, 30 Dec 2024 17:28:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-print-command-output/</guid>
        <description>&lt;p&gt;I was going thru &lt;code&gt;struct Command&lt;/code&gt; in &lt;code&gt;std::process&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Obviously, I tried the very first code snippet in the rust playground. There is
a very convinient ▸ to run the sample code.&lt;/p&gt;
&lt;p&gt;The code ran without any errors.&lt;/p&gt;
&lt;p&gt;But no output 🤔&lt;/p&gt;
&lt;p&gt;Ohh, there is no &lt;code&gt;println!&lt;/code&gt;. That is why.&lt;/p&gt;
&lt;p&gt;No, that was not it. (I mean it was, but it didn&amp;rsquo;t help.)
Adding &lt;code&gt;println!(&amp;quot;{:?}&amp;quot;, hello);&lt;/code&gt; produced this output&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;104, 101, 108, 108, 111, 10&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Earlier, without &lt;code&gt;:?&lt;/code&gt; - rust compilter told me&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the trait &lt;code&gt;std::fmt::Display&lt;/code&gt; is not implemented for &lt;code&gt;Vec&amp;lt;u8&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The output is a vector (array) of &lt;code&gt;u8&lt;/code&gt; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I kept on reading the doc, and later came across &lt;code&gt;io::stdout().write_all&lt;/code&gt; &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;So in order to see the output of the command, I had to add  &lt;code&gt;use&lt;/code&gt; at the top
and replace &lt;code&gt;let hello = ..&lt;/code&gt; with &lt;code&gt;write_all&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;use&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std::io::{&lt;span style=&#34;color:#a2f&#34;&gt;self&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Write};&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;.&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;io::stdout().write_all(&lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&lt;/span&gt;output.stdout);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Final code looks like &lt;a href=&#34;https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021&amp;amp;gist=74772ca13b9b2b38511b0c4d8d15f397&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://doc.rust-lang.org/nightly/std/process/struct.Command.html&#34;&gt;doc&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;As you can see &lt;a href=&#34;https://www.ascii-code.com&#34;&gt;here&lt;/a&gt; it is indeed &lt;code&gt;hello&lt;/code&gt; represented as numbers. &lt;code&gt;h&lt;/code&gt; is 104 and so on. Ending with 10 which is line feed.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;There is one for &lt;code&gt;stderr&lt;/code&gt; as well.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Finally got Auto Complete working in Helix</title>
        <link>https://microblog.desipenguin.com/post/auto-complete-with-helix/</link>
        <pubDate>Fri, 27 Dec 2024 12:55:23 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/auto-complete-with-helix/</guid>
        <description>&lt;p&gt;I have been using Helix as an editor, not as an IDE.
One of the USP of Helix is &lt;code&gt;LSP support out of the box&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Recently, I&amp;rsquo;ve been programming in rust.&lt;/p&gt;
&lt;p&gt;Helix is also written in rust.&lt;/p&gt;
&lt;p&gt;So I think it is natural that they would support rust LSP &lt;code&gt;rust-analyzer&lt;/code&gt;
and it does.&lt;/p&gt;
&lt;p&gt;But I wasn&amp;rsquo;t getting auto completions 😞&lt;/p&gt;
&lt;p&gt;I had &lt;code&gt;rust-analyzer&lt;/code&gt; installed (or so I thought) and helix health check also
passed.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ hx --health rust
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Configured language servers:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ rust-analyzer: /home/mandar/.cargo/bin/rust-analyzer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yet, I did not get auto-complete. helix log showed some error related to
&lt;code&gt;rust-analyzer&lt;/code&gt; not being there.&lt;/p&gt;
&lt;p&gt;How can it be ?&lt;/p&gt;
&lt;p&gt;Let us check if the file really exists.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ file ~/.cargo/bin/rust-analyzer
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/home/mandar/.cargo/bin/rust-analyzer: ELF 64-bit LSB pie executable, x86-64, version &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;SYSV&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; GNU/Linux 2.6.32, with debug_info, not stripped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK, path listed by Helix health exists, and it is not a link. It is a proper ELF
64-bit binary.&lt;/p&gt;
&lt;p&gt;Maybe permission issue, or something else 🤔&lt;/p&gt;
&lt;p&gt;Let me try to run it without argument.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ~/.cargo/bin/rust-analyzer
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error: Unknown binary &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;rust-analyzer&amp;#39;&lt;/span&gt; in official toolchain &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;stable-x86_64-unknown-linux-gnu&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What ??&lt;/p&gt;
&lt;p&gt;This is same error listed by helix logs.&lt;/p&gt;
&lt;p&gt;No wonder auto completons do not work.&lt;/p&gt;
&lt;p&gt;After some searching, I found the solution 🎉&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;rustup component add rust-analyzer&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But did I have &lt;code&gt;rust-analyzer&lt;/code&gt; already in my &lt;code&gt;~/.cargo/bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A kind soul on reddit pointed me to &lt;a href=&#34;https://github.com/rust-lang/rustup/issues/3846&#34;&gt;this&lt;/a&gt; issue.&lt;/p&gt;
&lt;p&gt;As of this writing, the issue is still open. But it helps to know I&amp;rsquo;m not the
only one with this issue 😌&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Turns out I&amp;rsquo;ve already written about similar error but for Emacs &lt;a href=&#34;https://microblog.desipenguin.com/post/rust-analyzer/&#34;&gt;here&lt;/a&gt;. Doh!&lt;/em&gt;&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/rust-udemy-cert/</link>
        <pubDate>Wed, 18 Dec 2024 18:09:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/rust-udemy-cert/</guid>
        <description>&lt;p&gt;Today I completed &amp;ldquo;Rust: The Complete Developer&amp;rsquo;s Guide&amp;rdquo; course on Udemy 🎉&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href=&#34;https://ude.my/UC-5edc007d-592c-4b13-b68c-6f23f35bf1e3&#34;&gt;certificate&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: Unit tests in a separate file</title>
        <link>https://microblog.desipenguin.com/post/rust-tests-file-structure/</link>
        <pubDate>Mon, 16 Dec 2024 19:23:21 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-tests-file-structure/</guid>
        <description>&lt;p&gt;In rust, tests are written in the same file as the code.
But I want to have the tests in a separate file.&lt;/p&gt;
&lt;p&gt;Conventionally, only the integration tests are written in files under &lt;code&gt;tests&lt;/code&gt; folder. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I just wanted to have the unit tests in a separate file. So I created a file &lt;code&gt;src/my_tests.rs&lt;/code&gt; and moved all the tests there.&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;cargo test&lt;/code&gt; kept saying &lt;code&gt;running 0 tests&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Turns out, I&amp;rsquo;m not the only one. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;if you don&amp;rsquo;t import it in main then it doesn&amp;rsquo;t &amp;ldquo;exist&amp;rdquo; as far as the compiler&amp;rsquo;s concerned. &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I was able to fix it by adding &lt;code&gt;mod my_tests;&lt;/code&gt; to the top of &lt;code&gt;main.rs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It is one thing to read the docs, but real learning comes from actually writing the code. (and making mistakes)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Each file in the &lt;code&gt;tests&lt;/code&gt; folder is a separate crate. Which means they can only call functions that are part of your library’s public API. Since unit tests are in the same file as the code, they can access (and test) even the private functions.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/q/76979070&#34;&gt;Stack overflow&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://stackoverflow.com/questions/76979070/how-to-properly-use-a-tests-folder-in-a-rust-project#comment135705905_76979070&#34;&gt;this comment&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Updated the README for the Theme Repo</title>
        <link>https://microblog.desipenguin.com/post/theme-repo-readme/</link>
        <pubDate>Sat, 07 Dec 2024 18:39:46 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/theme-repo-readme/</guid>
        <description>&lt;p&gt;It has been little over 2 years since I &lt;a href=&#34;https://github.com/mandarvaze/hugo-microblog&#34;&gt;forked&lt;/a&gt; and updated jnjosh&amp;rsquo;s &lt;a href=&#34;https://github.com/jnjosh/internet-weblog&#34;&gt;internet-weblog&lt;/a&gt; theme&lt;/p&gt;
&lt;p&gt;While I made several changes to my fork, I never updated the README.&lt;/p&gt;
&lt;p&gt;till now that is.&lt;/p&gt;
&lt;p&gt;During last few days, I updated the README to match my fork.&lt;/p&gt;
&lt;p&gt;These are minor changes, and majority of the README is still from the original (For the things that have not changed)&lt;/p&gt;
&lt;p&gt;If you are curious, &lt;a href=&#34;https://github.com/mandarvaze/hugo-microblog&#34;&gt;have a look&lt;/a&gt; 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Jujutsu: Working With Git</title>
        <link>https://microblog.desipenguin.com/post/jujutsu-working-with-git/</link>
        <pubDate>Fri, 06 Dec 2024 12:52:24 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/jujutsu-working-with-git/</guid>
        <description>&lt;p&gt;After reading (not done)
&lt;a href=&#34;https://steveklabnik.github.io/jujutsu-tutorial/&#34;&gt;Steve&amp;rsquo;s Tutorial&lt;/a&gt; and
&lt;a href=&#34;https://martinvonz.github.io/jj/latest/&#34;&gt;Official doc&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (which
mentions Steve&amp;rsquo;s tutorial anyway) I decided that actually using it on real
projects is the way to go.&lt;/p&gt;
&lt;p&gt;Here is the workflow (after a few &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; iterations &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;) that works&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;jj new&lt;/code&gt; : Declare your intention to start new work.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj describe&lt;/code&gt; : Intention alone is not enough 😀. What will you be working on ?&lt;/li&gt;
&lt;li&gt;Now work. Make changes.&lt;/li&gt;
&lt;li&gt;Time to make our &amp;ldquo;change&amp;rdquo; available in git. Get the change id from &lt;code&gt;jj log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj bookmark set main -r &amp;lt;change_id_from_previous_step&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj bookmark track main@origin&lt;/code&gt; (or appropriate branch on &lt;code&gt;origin&lt;/code&gt;). You&amp;rsquo;ll need this step only once.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj squash -i&lt;/code&gt; : Select the files that need to be &amp;ldquo;added&amp;rdquo; to the commit&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj git push --allow-new -b main --remote origin&lt;/code&gt; &lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; Done!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally, I must say that I&amp;rsquo;m blown away (and humbled) by the fact that &amp;ldquo;The
Steve Klabnik&amp;rdquo; who wrote the Jujutsu tutorial &lt;strong&gt;and&lt;/strong&gt; the Rust book,
helped me &lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt; (Near real time responses) with my problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steve, I&amp;rsquo;m really grateful for your help&lt;/strong&gt; 🙏&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I suggest if you are eager (like me) read the &lt;a href=&#34;https://martinvonz.github.io/jj/latest/FAQ/&#34;&gt;FAQ&lt;/a&gt; which might answer most of your questions&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://bsky.app/profile/mandarvaze.bsky.social/post/3lchc73yz622w&#34;&gt;this&lt;/a&gt; thread on bluesky&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Here is my &lt;a href=&#34;https://bsky.app/profile/mandarvaze.bsky.social/post/3lckszrniss2z&#34;&gt;hack&lt;/a&gt; before I learnt the proper way&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;Since I was not tracking remote &amp;ldquo;bookmark&amp;rdquo;, this command &lt;strong&gt;told&lt;/strong&gt; me exact command needed to be run. How cool is that!&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/steveklabnik.com/post/3lcktgjkdak2v&#34;&gt;here&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Jujutsu : git compatible but better DVCS</title>
        <link>https://microblog.desipenguin.com/post/jujutsu/</link>
        <pubDate>Sat, 30 Nov 2024 13:00:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/jujutsu/</guid>
        <description>&lt;p&gt;I learnt about Jujutsu from the &amp;ldquo;Rust in Production&amp;rdquo;
&lt;a href=&#34;https://corrode.dev/podcast/s03e04-gitbutler/&#34;&gt;podcast episode&lt;/a&gt; about
Git Butler&lt;/p&gt;
&lt;p&gt;One of the attractive quality about it is that it works with existing git repos &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;First superpower : Start using it with existing git repo &lt;strong&gt;locally cloned&lt;/strong&gt; using
&lt;code&gt;jj git init --git-repo=.&lt;/code&gt; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This creates a &lt;code&gt;.jj&lt;/code&gt; folder in the existing repo. &lt;code&gt;.jj&lt;/code&gt; and &lt;code&gt;.git&lt;/code&gt; co-exist
peacefully&lt;/p&gt;
&lt;p&gt;But I didn&amp;rsquo;t know that.&lt;/p&gt;
&lt;p&gt;So for the first project to try Jujutsu, I &lt;code&gt;jj git clone&lt;/code&gt;d my existing repo in a
new folder, so that I have &amp;ldquo;old&amp;rdquo; git repo as well as jujutsu repo.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still reading the documentation and [Steve&amp;rsquo;s Tutorial](https://
steveklabnik.github.io/jujutsu-tutorial/) to understand the concepts.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already started using &lt;code&gt;jj&lt;/code&gt;.  But git interop is still a bit confusing.&lt;/p&gt;
&lt;p&gt;One important/useful feature is that all the changes are available in git as
well, as &lt;code&gt;detached HEAD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So I can easily switch (in git) between &lt;code&gt;main&lt;/code&gt; and &lt;code&gt;detached HEAD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I still need to learn how to commit just one file to git, since &lt;code&gt;jj&lt;/code&gt; does not
have a concept of untracked changes &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;unlike &lt;a href=&#34;https://fossil-scm.org/&#34;&gt;fossil&lt;/a&gt; which does lot more (built-in Wiki, issue tracker, forum and web interface) &lt;strong&gt;but&lt;/strong&gt; is not compatible with git.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I immediately added this repo to &lt;code&gt;jj&lt;/code&gt; - CLI for Jujutsu&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;It suggests adding files to untrack to &lt;code&gt;.gitignore&lt;/code&gt; followed by &lt;code&gt;jj file untrack &amp;lt;PATHS&amp;gt;&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: Doubly Linked List</title>
        <link>https://microblog.desipenguin.com/post/rust-doubly-linked-list/</link>
        <pubDate>Fri, 29 Nov 2024 16:14:13 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-doubly-linked-list/</guid>
        <description>&lt;p&gt;No, this is not a post about &lt;strong&gt;how&lt;/strong&gt; to implement doubly linked list in rust.&lt;/p&gt;
&lt;p&gt;Or ir could be a very short post, since doubly linked list in built-in the &lt;code&gt;std::collection&lt;/code&gt; as &lt;code&gt;LinkedList&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Following functions are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;new&lt;/code&gt; : Creates new/empty linked list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push_back&lt;/code&gt; : Adds an element to the list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push_front&lt;/code&gt; : Since this is doubly linked list, element can be added at the
beginning as well. Nice!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pop_back&lt;/code&gt; and &lt;code&gt;pop_front&lt;/code&gt; : Remove an element from the list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clear&lt;/code&gt; : empty the entire list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;append&lt;/code&gt; : Append one list to another to make bigger list. One that got appended becomes empty though.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contains&lt;/code&gt; : Searches through the list for the element &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;There are &lt;code&gt;iter&lt;/code&gt;, &lt;code&gt;iter_mut&lt;/code&gt; and &lt;code&gt;len&lt;/code&gt; as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[Documentation](&lt;a href=&#34;https://doc.rust-lang.org/std/collections/&#34;&gt;https://doc.rust-lang.org/std/collections/&lt;/a&gt;
struct.LinkedList.html) is easy to understand&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Since this is a Linked List, compute time is &lt;code&gt;O(n)&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Waydroid</title>
        <link>https://microblog.desipenguin.com/post/waydroid/</link>
        <pubDate>Thu, 28 Nov 2024 13:29:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/waydroid/</guid>
        <description>&lt;p&gt;I wanted to use &lt;a href=&#34;https://openvibe.social/&#34;&gt;Openvibe&lt;/a&gt; - an app that allows
having a single timeline across multiple social media networks like mastodon and
bluesky. It also supports cross posting (and more)&lt;/p&gt;
&lt;p&gt;But currently it only has mobile apps (for both iOS and Android)&lt;/p&gt;
&lt;p&gt;While the Desktop app is &amp;ldquo;in the works&amp;rdquo; - no specifics are provided.&lt;/p&gt;
&lt;p&gt;I do not use mobile apps if at all possible. (Except for podcast and messeging
apps to keep in touch with Family - &lt;strong&gt;on the go&lt;/strong&gt;. If I&amp;rsquo;m at my desk, I use the
Desktop version)&lt;/p&gt;
&lt;p&gt;So I thought I was out of luck, till I rememembered about Waydroid.&lt;/p&gt;
&lt;p&gt;As it mentions on their site, it runs Android in a container.&lt;/p&gt;
&lt;p&gt;Installation went well.&lt;/p&gt;
&lt;p&gt;Then it downloaded two images. (&lt;code&gt;waydroid init&lt;/code&gt; failed during the installation.
It needed &lt;code&gt;sudo&lt;/code&gt; to work)&lt;/p&gt;
&lt;p&gt;Both were lineageOS images.&lt;/p&gt;
&lt;p&gt;Everything went smoothly.&lt;/p&gt;
&lt;p&gt;But after Lineage OS loaded, I didn&amp;rsquo;t know what to do.&lt;/p&gt;
&lt;p&gt;Using mobile device like interface on a desktop is disorienting 😁&lt;/p&gt;
&lt;p&gt;I opened the browser (one of the three icons shown on default opening screen)&lt;/p&gt;
&lt;p&gt;Opened Google Play Store.&lt;/p&gt;
&lt;p&gt;I assumed it would let me install Openvibe.&lt;/p&gt;
&lt;p&gt;But it showed my other two (Physical) devices as targets.&lt;/p&gt;
&lt;p&gt;I searched a little more, and realized I need to spend more time (As with
everything linux 😊)&lt;/p&gt;
&lt;p&gt;(Preferred?) Way to install apps seems to be F-droid.&lt;/p&gt;
&lt;p&gt;While I was &amp;ldquo;looking around&amp;rdquo; I noticed that this was Android 11. So maybe that
is why Openvibe did not offer to install on that device.&lt;/p&gt;
&lt;p&gt;Finally, I &lt;code&gt;apt remove&lt;/code&gt; ed Waydroid, and removed the downloaded images as well.&lt;/p&gt;
&lt;p&gt;I may come back in future.&lt;/p&gt;
&lt;p&gt;Couple of things to try (in future)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download F-droid APK and install from command line as &lt;code&gt;waydroid app install xyz.apk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;See if OpenVibe is available on F-droid.
&lt;ul&gt;
&lt;li&gt;Even if it is not, there may be other cool apps that I can use 🤞&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Figure out how to get (relatively) latest version of Android (At least 14)&lt;/li&gt;
&lt;li&gt;Figure out way to install &lt;code&gt;GAPPS&lt;/code&gt; (Google Apps)&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>No One is (really) Evil</title>
        <link>https://microblog.desipenguin.com/post/no-one-is-evil/</link>
        <pubDate>Tue, 26 Nov 2024 07:41:43 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/no-one-is-evil/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://freakonomics.com/podcast/what-is-evil/&#34;&gt;NSQ episode&lt;/a&gt; about evil led me
to thinking about this.&lt;/p&gt;
&lt;h2 id=&#34;takeaways-from-the-episode&#34;&gt;Takeaways from the episode&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Evil is attributed only to humans.
&lt;ul&gt;
&lt;li&gt;If an animal attacks and kills human(s) we do not label the animal as Evil.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Intentionality matters.
&lt;ul&gt;
&lt;li&gt;Accidental killing/death does not mean Evil&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;People do bad things because their brain is not &amp;ldquo;well&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;Amigdala is the part of the brain that is responsible for fear and morality.&lt;/li&gt;
&lt;li&gt;Should bad people be locked away longer (cause they may be threat to the society)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Phil zimbardo prison experiment&lt;/li&gt;
&lt;li&gt;Bad barrel (Vs Bad Apple)&lt;/li&gt;
&lt;li&gt;People become evil due to surrounding &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Stanley Milgram Experiment
&lt;ul&gt;
&lt;li&gt;People are OK doing bad things if
&lt;ul&gt;
&lt;li&gt;They are in position of power &lt;strong&gt;and&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Are told by their superiors to &amp;ldquo;punish&amp;rdquo; others&lt;/li&gt;
&lt;li&gt;2 out of 3 volunteers shocked the (the actors playing) students upon giving wrong answers, because they were &amp;ldquo;instructed&amp;rdquo; to do so &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;my-thoughts&#34;&gt;My thoughts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Only movies/TV has pure evil person
&lt;ul&gt;
&lt;li&gt;In good movie/TV, they have some explanation about why the person become &amp;ldquo;evil&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When people do bad things to you, do not hate them&lt;/li&gt;
&lt;li&gt;Consider some of the points above.&lt;/li&gt;
&lt;li&gt;What made them behave the way they did&lt;/li&gt;
&lt;li&gt;(Most of the times) it is not personal [^3]&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;One can choose to become Oskar Schindler in Nazy Germany. Do the right thing even if the surroundings are wrong. (But takes courage)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;No one was actually harmed, but people giving electrocal shocks didn&amp;rsquo;t know. Actors shouted, mentioned heart attack, begged to stop, but &amp;ldquo;shocks&amp;rdquo; continued.
[^3] That does not make it better, but helps avoid hatred&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to run multiple postgres docker instances on local machine</title>
        <link>https://microblog.desipenguin.com/post/multiple-postgres-docker/</link>
        <pubDate>Mon, 25 Nov 2024 22:28:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/multiple-postgres-docker/</guid>
        <description>&lt;p&gt;When working on multiple projects, I run separate postgres instance for
each of them.&lt;/p&gt;
&lt;p&gt;Since these are docker instances, this is not a problem as long as they are not
running &lt;strong&gt;at the same time&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If I&amp;rsquo;m actively working working on multiple projects parallelly, then there are
two problems :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Resources : My laptop becomes slow. There is no solution for this &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Assuming you have LOTs of memory, second problem still remains. Both
instances try to bind to local port &lt;code&gt;5432&lt;/code&gt; the default port. Which does not
work. So you need to bind other postgres instances to different local ports like
&lt;code&gt;5433&lt;/code&gt;, &lt;code&gt;5434&lt;/code&gt; and so on. This is controlled via &lt;code&gt;-p&lt;/code&gt; in the docker command.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The format is :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-p &amp;lt;host_port&amp;gt;:&amp;lt;container_port&amp;gt;&lt;/code&gt; (Easier to remember that way)&lt;/p&gt;
&lt;p&gt;So you&amp;rsquo;ll have docker commands like &lt;code&gt;-p 5433:5432&lt;/code&gt; and &lt;code&gt;-p 5434:5432&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;and local ports 5432, 5433 and 5434 will all be listening on different postgres
servers.&lt;/p&gt;
&lt;p&gt;Off course, if you do not have local &lt;code&gt;psql&lt;/code&gt; and instead use &lt;code&gt;docker exec&lt;/code&gt; (like
I do) you have no problem.&lt;/p&gt;
&lt;p&gt;On the other hand, if you use local &lt;code&gt;psql&lt;/code&gt; you&amp;rsquo;ll need to specify &lt;code&gt;p 5433&lt;/code&gt; and
&lt;code&gt;-p 5434&lt;/code&gt; to connect different postgres instances. (Probably along with &lt;code&gt;-h 127.0.0,1&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Other than adding more RAM, but till Apple allows adding more memory after-market, paying more money upfront is the only choice. Which I had not done last time (About 9 years ago)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to Turn Off Inlay Hints in VS Code</title>
        <link>https://microblog.desipenguin.com/post/vscode-turn-off-inlay-hints/</link>
        <pubDate>Mon, 25 Nov 2024 16:41:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vscode-turn-off-inlay-hints/</guid>
        <description>&lt;p&gt;I initially tried to turn off the type hints via &lt;code&gt;rust-analyzer&lt;/code&gt; extension setting, but that did not work 😞&lt;/p&gt;
&lt;p&gt;Turns out it is very complicated (at least for me)
&lt;a href=&#34;https://rust-analyzer.github.io/manual.html#inlay-hints&#34;&gt;documentation&lt;/a&gt; did not help 😞&lt;/p&gt;
&lt;p&gt;Here is what worked for me. Thanks to SO &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open Command Palette &lt;code&gt;Cmd+Shift+P&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Preferences: Open User Settings (JSON)&lt;/code&gt; from the drop down&lt;/li&gt;
&lt;li&gt;Add the following to existing settings
&lt;ul&gt;
&lt;li&gt;Or create new one, if empty. You may need to enclose it within &lt;code&gt;{ }&lt;/code&gt; though.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;editor.inlayHints.enabled&amp;#34;&lt;/span&gt;&lt;span style=&#34;&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;offUnlessPressed&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will turn off the type hint inlays.&lt;/p&gt;
&lt;p&gt;But if/when required, it can be enabled via &lt;code&gt;Ctrl+Alt&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/a/72338341&#34;&gt;SO Answer&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Kinto : Mac Keyboard layout on Linux</title>
        <link>https://microblog.desipenguin.com/post/kinto-mac-keyboard-linux/</link>
        <pubDate>Tue, 19 Nov 2024 22:15:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/kinto-mac-keyboard-linux/</guid>
        <description>&lt;p&gt;After using Apple laptop for nearly 10 years, I have gotten used to Apple&amp;rsquo;s
shortcuts where most places use &lt;code&gt;Cmd&lt;/code&gt; instead of &lt;code&gt;Ctrl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After switching to Linux, initially I fumbled.&lt;/p&gt;
&lt;p&gt;Then I had to be alert, which I did most of the times, but when in the zone, I
would still do &lt;code&gt;Cmd+c&lt;/code&gt; to copy, and when pasted would be disappaointed that it
did not work 😄&lt;/p&gt;
&lt;p&gt;Then I came across &lt;a href=&#34;https://kinto.sh&#34;&gt;kinto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Installation went through fine, but at the end I got&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Namespace Vte not available&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;error.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/rbreaves/kinto/issues/302&#34;&gt;issue&lt;/a&gt; is already reported on
github, but it is stil open.&lt;/p&gt;
&lt;p&gt;But the discussion contains a solution/workaround&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install gir1.2-vte-2.91&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After this, I had to manually start the &lt;code&gt;kinto-gui.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Funny thing: I had just started retraining muscle memory, so I&amp;rsquo;m still fumbling 😂&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Better History Search</title>
        <link>https://microblog.desipenguin.com/post/better-history-search/</link>
        <pubDate>Mon, 18 Nov 2024 12:39:31 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/better-history-search/</guid>
        <description>&lt;p&gt;No, I&amp;rsquo;m not talking about Atuin. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I improved my search experience with just one tool - &lt;code&gt;fzf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;As you might know, &lt;code&gt;fzf&lt;/code&gt; is a general purpose fuzzy finder. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But adding just &lt;code&gt;source &amp;lt;(fzf --zsh)&lt;/code&gt; at the end of &lt;code&gt;~/.zshrc&lt;/code&gt; (and/or running
it in your existing session) improves your &lt;code&gt;Ctrl+r&lt;/code&gt; experience.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&#34;https://junegunn.github.io/fzf/shell-integration/&#34;&gt;demo&lt;/a&gt; yourself.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I must confess that I&amp;rsquo;m tempted multiple times. But I think their USP is history sync, which is not my use case right now. For now, I&amp;rsquo;m happy with my current solution.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It can be used for fuzzy finding git objects. Out of the box, you get directory completion &lt;code&gt;(Alt+C)&lt;/code&gt; and filename completion &lt;code&gt;(Ctrl+T)&lt;/code&gt; - although it clashes with Alacritty for me (worked with Konsole)&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to define task dependencies in justfile</title>
        <link>https://microblog.desipenguin.com/post/justfile-deps/</link>
        <pubDate>Sat, 16 Nov 2024 22:00:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/justfile-deps/</guid>
        <description>&lt;p&gt;It has been more than 20+ years since I used &lt;code&gt;Makefiles&lt;/code&gt; seriously.
I did use them later, but they were very simple.&lt;/p&gt;
&lt;p&gt;Then I found and moved &lt;code&gt;just&lt;/code&gt; task runner, which is supposed to be replacement for &lt;code&gt;make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My &lt;code&gt;justfile&lt;/code&gt;s were also simple.&lt;/p&gt;
&lt;p&gt;and today, I needed to define a task that we dependent on another.&lt;/p&gt;
&lt;p&gt;Turns out, it is same as &lt;code&gt;Makefile&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-justfile&#34; data-lang=&#34;justfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;task1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  @echo &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Task1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;task2&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; task1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  @echo &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Task2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the above example, task2 depends on task1, and thus when we say &lt;code&gt;just task2&lt;/code&gt;,
task1 will get executed, as it is a dependency for task1&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Installing Espanso on openSUSE</title>
        <link>https://microblog.desipenguin.com/post/espanso-on-opensuse/</link>
        <pubDate>Fri, 01 Nov 2024 17:28:54 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/espanso-on-opensuse/</guid>
        <description>&lt;p&gt;After the basic setup was done (I made a list of tools to be installed on line
before I installed Linux itself), I wanted &lt;a href=&#34;https://microblog.desipenguin.com/post/espanso/&#34;&gt;Espanso&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While Espanso is well supported on X11, for wayland, it needs to be &lt;a href=&#34;https://espanso.org/docs/install/linux/#wayland-compile&#34;&gt;compiled
from the source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I ran into &lt;a href=&#34;https://github.com/espanso/espanso/issues/995&#34;&gt;this issue&lt;/a&gt; but &lt;a href=&#34;https://github.com/espanso/espanso/issues/995#issuecomment-1048576915&#34;&gt;solution&lt;/a&gt; was found in the same issue.&lt;/p&gt;
&lt;p&gt;While install went through, I ran into issues related to capability grant.&lt;/p&gt;
&lt;p&gt;Following worked:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zypper install libcap-progs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo setcap &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;cap_dac_override+p&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;$(&lt;/span&gt;which espanso&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;espanso start --unmanaged
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I also needed to add the following to &lt;code&gt;config/default.yml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;keyboard_layout:
  layout: us
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I finally got Espanso working!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Installed openSUSE on Macbook Pro (Intel)</title>
        <link>https://microblog.desipenguin.com/post/opensuse-on-mac/</link>
        <pubDate>Wed, 30 Oct 2024 16:20:32 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/opensuse-on-mac/</guid>
        <description>&lt;p&gt;My Macbook Pro (early 2015) isn&amp;rsquo;t getting any OS updates for some time.&lt;/p&gt;
&lt;p&gt;Only version it supports is Monterey (which is already couple major versions
behind the latest)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew&lt;/code&gt; has also started complaining as &lt;code&gt;This version is not supported&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;ve been considering installing linux on it for some time anyway.&lt;/p&gt;
&lt;p&gt;I finally pulled the trigger and installed &lt;strong&gt;openSUSE Tumbleweed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I had tried the live version, and knew and it generally works.&lt;/p&gt;
&lt;p&gt;Their website suggests to use Offline image to install (and use Live  version
only for testing - even though there is a way to install from within the live
session 🤷‍♂)&lt;/p&gt;
&lt;p&gt;But ..&lt;/p&gt;
&lt;p&gt;Offline image installation failed&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, mostly because it could not connect to the
network.&lt;/p&gt;
&lt;p&gt;So I did what  I was planning anyway.&lt;/p&gt;
&lt;p&gt;Booted into live environment, connected to the network, and then installed from
there. It worked! 🎉&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finally, I booted into Linux on my Apple Macbook Pro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From live mode installer, I got error like &lt;code&gt;exit status 1&lt;/code&gt; No other info. I went
ahead with &lt;code&gt;ignore&lt;/code&gt; (Since I didn&amp;rsquo;t know what went wrong)&lt;/p&gt;
&lt;p&gt;During the offline installation, error dialog offers the user to connect to the debugger, but without information about what went wrong, debugger is not helpful.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Error message are not helpful at all.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Terminal : How to copy files showing progress</title>
        <link>https://microblog.desipenguin.com/post/copy-files-with-progress/</link>
        <pubDate>Thu, 24 Oct 2024 06:00:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/copy-files-with-progress/</guid>
        <description>&lt;p&gt;While copying large amounts of files (lots of photos) I used to use
&lt;code&gt;Finder&lt;/code&gt; in the macOS. Good ol&amp;rsquo; drag-n-drop&lt;/p&gt;
&lt;p&gt;Usually it is reliable, but lately I&amp;rsquo;m facing
&lt;a href=&#34;https://microblog.desipenguin.com/post/macOS-disk-not-ejected&#34;&gt;some problems&lt;/a&gt; when copying files to external
disk.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Finder&lt;/code&gt; itself would become unresponsive.&lt;/p&gt;
&lt;p&gt;So I decided to use terminal instead.&lt;/p&gt;
&lt;p&gt;It worked (kinda) but it took 51 minutes to finish the copy (There were a
lot of files)&lt;/p&gt;
&lt;p&gt;and as you know traditionally &lt;code&gt;cp&lt;/code&gt; does not show progress.&lt;/p&gt;
&lt;p&gt;That is when I discovered &lt;code&gt;rsync&lt;/code&gt;
I had used it &lt;del&gt;a long time ago&lt;/del&gt;  decades ago, but never for local file copy.&lt;/p&gt;
&lt;p&gt;I always used it as it was originally meant to be used &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; to copy files
to and from another machine.&lt;/p&gt;
&lt;p&gt;Turns out using it for local file transfers is a good option especially since
it has &lt;code&gt;--progress&lt;/code&gt; option.&lt;/p&gt;
&lt;p&gt;The command I used :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rsync -vhz --progress /path/to/source-dir/* /path/to/destination-dir&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v&lt;/code&gt; : Verbose&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z&lt;/code&gt; : Compression&lt;/li&gt;
&lt;li&gt;&lt;code&gt;h&lt;/code&gt; : Human readable&lt;/li&gt;
&lt;li&gt;&lt;code&gt;progress&lt;/code&gt; : Duh!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;code&gt;r&lt;/code&gt; in &lt;code&gt;rsync&lt;/code&gt; stands for &lt;code&gt;remote&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>macOS : Possible workaround for `Disk Not Ejected` error</title>
        <link>https://microblog.desipenguin.com/post/macos-disk-not-ejected/</link>
        <pubDate>Wed, 23 Oct 2024 22:21:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/macos-disk-not-ejected/</guid>
        <description>&lt;p&gt;See this &lt;a href=&#34;https://discussions.apple.com/thread/254793541&#34;&gt;thread&lt;/a&gt; titled :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disk Not Ejected Properly &amp;ndash; AGAIN AGAIN AGAIN AND AGAIN&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have started seeing this problem a LOT&lt;/p&gt;
&lt;p&gt;TL;DR: Something breaks when macOS goes to sleep&lt;/p&gt;
&lt;p&gt;Solution : Do not allow macOS to sleep when using external disk.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have had to resort to using an application called Amphetamine (earlier Caffeine)
and set the &amp;lsquo;Drive Alive&amp;rsquo; mode to prevent sleep. All the problems went away.
It has nothing to do with &amp;lsquo;frayed cables&amp;rsquo; or &amp;lsquo;drives going bad&amp;rsquo;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Based on above, I&amp;rsquo;ve installed the app, and trying it 🤞 &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Other suggestions also suggest turning off screen saver (or other ways to
prevent macOS from sleeping)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;It helped to some extent. But not fully. As I
&lt;a href=&#34;https://microblog.desipenguin.com/post/copy-files-with-progress&#34;&gt;mentioned&lt;/a&gt; I used &lt;code&gt;rsync&lt;/code&gt; to copy files, and
noticed that I would get this error &lt;strong&gt;while&lt;/strong&gt; the copy (rsync) was in progress.
so it maybe more than macOS going to sleep.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>MacOS : How to Clean up the disk</title>
        <link>https://microblog.desipenguin.com/post/macos-cleanup-diskspace/</link>
        <pubDate>Tue, 15 Oct 2024 22:48:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/macos-cleanup-diskspace/</guid>
        <description>&lt;p&gt;In my plan to shift to Linux, I considered dual booting.&lt;/p&gt;
&lt;p&gt;Turns out I may not have enough disk space.&lt;/p&gt;
&lt;p&gt;I have reached at about &lt;del&gt;12&lt;/del&gt; 15GB free space. At first I thought, if live session can fit into 4GB, then &lt;del&gt;12&lt;/del&gt; 15GB should be enough, but looks like that may not be the case. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m shelving the plan to dual boot.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll go with full disk install. That way linux gets entire 128GB SSD 👍&lt;/p&gt;
&lt;p&gt;When I started, I had only 5GB space.&lt;/p&gt;
&lt;p&gt;So I started finding solutions&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://superuser.com/a/851256&#34;&gt;This answer&lt;/a&gt; from 10 years ago is still valid.&lt;/p&gt;
&lt;p&gt;Clear the caches.&lt;/p&gt;
&lt;p&gt;I did not realize how much space it takes.&lt;/p&gt;
&lt;p&gt;There are caches for the apps that I tried and eventually uninstalled.&lt;/p&gt;
&lt;p&gt;The space used by &lt;code&gt;.app&lt;/code&gt; was freed (hopefully 😆) but the cache remained.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;~/Library/Caches/Homebrew&lt;/code&gt; took the most space.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew autoremove&lt;/code&gt; and &lt;code&gt;brew cleanup --prune=30&lt;/code&gt; helped some.&lt;/p&gt;
&lt;p&gt;Then there was entire Electron framework inside &lt;code&gt;Ollama.app&lt;/code&gt; (Under &lt;code&gt;~/Library/Caches&lt;/code&gt; not actual &lt;code&gt;.app&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Other command that helped : &lt;code&gt;sudo du -hd 1&lt;/code&gt;  &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Rather than running it at &lt;code&gt;/&lt;/code&gt; , I ran it manually inside specific folders like &lt;code&gt;~/Library/Caches&lt;/code&gt; and &lt;code&gt;~/Downloads&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;In all, I learnt a lot and reclaimed about 10GB of disk space.&lt;/p&gt;
&lt;p&gt;Not bad for an hour spent searching plus cleaning up.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kubuntuforums.net/forum/newbie-support/help-the-new-guy/674357-system-requirements&#34;&gt;This discussion&lt;/a&gt; says : Minimum 25GB of disk space.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Later I learnt about easier way to do this without using the terminal. Apple menu -&amp;gt; About This Mac -&amp;gt; Storage -&amp;gt; Manage. (This differs from macOS versions, but you&amp;rsquo;ll be able to figure it out)&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Vivaldi: How to save all open tabs (and Why ?)</title>
        <link>https://microblog.desipenguin.com/post/vivaldi-save-session/</link>
        <pubDate>Tue, 15 Oct 2024 17:21:35 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vivaldi-save-session/</guid>
        <description>&lt;p&gt;For a long time, I&amp;rsquo;m considering switching to Linux full time since my existing
machine does not get OS updates from apple. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;In preparation for this &amp;ldquo;move&amp;rdquo;, I check whether all the software is available
on Linux.&lt;/p&gt;
&lt;p&gt;Vivaldi browser in on that list (available on Linux ✅).&lt;/p&gt;
&lt;p&gt;What about my already opened tabs ? Every few days I close the temporary/
unwanted tabs. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; but I do want others on Linux. Hence the search whether it
is possible. &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Turns out this can be done (in theory) via Session Management feature.&lt;/p&gt;
&lt;p&gt;Vivaldi can save all open tabs (across workspaces as well) in a session.&lt;/p&gt;
&lt;p&gt;Opening it on other device may not be trivial. The suggested solution &lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; is to
back up entire profile folder, and restore it on the new device.&lt;/p&gt;
&lt;p&gt;I looked inside the &lt;code&gt;Sessions&lt;/code&gt; folder. But the files lack human readability. 😞&lt;/p&gt;
&lt;p&gt;So trying it out is the only option. The folder size is currently ~145MB, so I&amp;rsquo;m
reluctant. None the less, I&amp;rsquo;ll take this backup irrespective. 🤞&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;unfortunately, I&amp;rsquo;ve not made the switch yet. I&amp;rsquo;ve been trying various
distros, and while I&amp;rsquo;m not getting newer versions of macOS, I do get updates to
existing version, and most things are working fine currently.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Arc browser has this functionality built-in. But it is unlikely to be
available on Linux anytime soon (if at all)&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;I&amp;rsquo;m aware of &lt;code&gt;Sync&lt;/code&gt; functionality - which requires account creation -
and I do no wish to create one more account. (At least my current thinking on
the matter 😄)&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://forum.vivaldi.net/topic/18028/how-to-export-all-the-settings-and-tabs/2?_=1728990641960&#34;&gt;https://forum.vivaldi.net/topic/18028/how-to-export-all-the-settings-and-tabs/2?_=1728990641960&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>What does demunge mean in clojure repl ?</title>
        <link>https://microblog.desipenguin.com/post/demunge-clojure/</link>
        <pubDate>Sun, 08 Sep 2024 13:03:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/demunge-clojure/</guid>
        <description>&lt;p&gt;I started learning &lt;code&gt;clojure&lt;/code&gt; yesterday.&lt;/p&gt;
&lt;p&gt;Initial useful (for me) command in clojure REPL : &lt;code&gt;dir&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;As per the example given in the &lt;a href=&#34;https://clojure.org/guides/repl/basic_usage#_dir&#34;&gt;documentation&lt;/a&gt;,
&lt;code&gt;(dir clojure.repl)&lt;/code&gt; produced list of commands (?) - one of which is &lt;code&gt;demunge&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I had no idea about it, and so I tried &lt;code&gt;dir(demunge)&lt;/code&gt; and it returned &lt;code&gt;nil&lt;/code&gt; 😆&lt;/p&gt;
&lt;p&gt;I could not find it in the documentation, so I asked ChatGPT about it, and it explained the following: &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Since &lt;code&gt;clojure&lt;/code&gt; runs on top of JVM, compiler converts the code into java bytecode.&lt;/p&gt;
&lt;p&gt;As part of this processes, the names are &amp;ldquo;munged&amp;rdquo; to suit java ecosystem like &lt;code&gt;someNamespace__someFunction__123&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;demunge&lt;/code&gt; is opposite of that.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;demunge&lt;/code&gt; is used during java interop and not much used a lot in day-to-day clojure.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(demunge &amp;quot;someNamespace__someFunction__123&amp;quot;)&lt;/code&gt; would generate :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a more readable version of the name&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There are several caveats like :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exact behaviour depends on how the names were munged&lt;/li&gt;
&lt;li&gt;This functionality may not be available in all the versions of clojure/REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This seemed familiar because python also has similar functionality&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;This is paraphrased, not copied verbatim from ChatGPT output. This should improve my understanding&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to use Google Keep for Quick Capture with Obsidian</title>
        <link>https://microblog.desipenguin.com/post/quick-capture-obsidian/</link>
        <pubDate>Mon, 12 Aug 2024 14:05:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/quick-capture-obsidian/</guid>
        <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;
&lt;p&gt;While I use &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Obsidian to capture everything while I&amp;rsquo;m at the desktop, it gets tricky when I&amp;rsquo;m away from the Desktop. Especially during my morning walk, I listen to Audiobook, and want to capture either a quote or some of my own related thoughts. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;
&lt;p&gt;Today, I came across a YouTube Video &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; which addresses this issue.&lt;/p&gt;
&lt;p&gt;Zsolt goes on to explain how see sought suggestions on Twitter &lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Important components of his solution are to use Google Keep on mobile (Voice assistant if need be)&lt;/p&gt;
&lt;p&gt;Then open Google Keep on the Desktop, and review the notes. Move to Obsidian if required and delete from Google Keep.&lt;/p&gt;
&lt;p&gt;But &amp;hellip;&lt;/p&gt;
&lt;p&gt;The best part happened &lt;em&gt;afterward&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Gourav Verma recommended &lt;code&gt;Custom Frames&lt;/code&gt; plugin, which enables to embed Google Keep inside Obsidian&amp;rsquo;s Sidebar. 🎉&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Google Keep on mobile
&lt;ul&gt;
&lt;li&gt;Use Google Assistant to capture notes via voice (if required)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use Custom Frames plugin in Obsidian&lt;/li&gt;
&lt;li&gt;Show Google Keep in Obsidian Sidebar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;realistically, I &lt;em&gt;try&lt;/em&gt; to use 😉&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I used to use Zoho Notebook for this so far. But the problem is I (almost) never look at them again 🤦‍♂&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/Eic-SmIMG2Y&#34;&gt;YouTube Video&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/zsviczian/status/1539485302368129024&#34;&gt;Twitter Thread&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>When Firefox does not open</title>
        <link>https://microblog.desipenguin.com/post/unresponsive-firefox/</link>
        <pubDate>Sat, 10 Aug 2024 19:19:32 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/unresponsive-firefox/</guid>
        <description>&lt;p&gt;Today, after applying latest update of macOS Monterey, I restarted my laptop.&lt;/p&gt;
&lt;p&gt;But Firefox won&amp;rsquo;t start 😢&lt;/p&gt;
&lt;p&gt;No error, no nothing, no window either.&lt;/p&gt;
&lt;p&gt;At first, I uninstalled existing version, downloaded a fresh one from internet
(using Vivaldi). I assumed that maybe my OS update broke something, and
reinstalling might help.&lt;/p&gt;
&lt;p&gt;It didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Then, I started Firefox from the terminal hoping to see error, if any &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Didn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;Next, I decided to remove the cache. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Assuming that one of the page was taking too long to load. I wanted to really
remove &amp;ldquo;history&amp;rdquo; of all the windows and all the tabs across all those windows. I
didn&amp;rsquo;t know how. So I started by clearing cache.&lt;/p&gt;
&lt;p&gt;Normally I would do this from inside Firefox. But today I didn&amp;rsquo;t have that
option. Hence, tried directly removing it from the terminal &lt;sup id=&#34;fnref1:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Didn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;Final option: Remove the profile folder itself. &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Worked! 🎉&lt;/p&gt;
&lt;p&gt;😌&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;code&gt;cd /Applications/Firefox.app/Contents/MacOS&lt;/code&gt; followed by &lt;code&gt;/firefox&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;code&gt;cd ~/Library/Caches/Firefox/Profiles&lt;/code&gt; and then &lt;code&gt;rm -rf &amp;lt;profile_folders&amp;gt;&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref1:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;code&gt;cd ~/Library/Application Support/Firefox &amp;amp;&amp;amp; rm -rf *&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to pretty-print in Rust</title>
        <link>https://microblog.desipenguin.com/post/pretty-print-rust/</link>
        <pubDate>Tue, 06 Aug 2024 15:40:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/pretty-print-rust/</guid>
        <description>&lt;p&gt;Today, I accidentally found out that instead of using &lt;code&gt;{:?}&lt;/code&gt; to debug print, if
one just adds an extra &lt;code&gt;#&lt;/code&gt; like &lt;code&gt;{:#?}&lt;/code&gt; the variable is pretty printed.&lt;/p&gt;
&lt;p&gt;This makes sense for &lt;code&gt;struct&lt;/code&gt; rather than simple data types like numbers or
strings.&lt;/p&gt;
&lt;p&gt;The interesting part (for me at least) is how I &amp;ldquo;discovered&amp;rdquo; it 😄&lt;/p&gt;
&lt;p&gt;When I was printing a &lt;code&gt;struct&lt;/code&gt; (for debugging 🙈) VS Code (I think &lt;code&gt;rust analyzer&lt;/code&gt; plugin) showed a popup how the struct does not implement &lt;code&gt;Display&lt;/code&gt;
&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I usually ignore the popup. But this time words &lt;em&gt;pretty print&lt;/em&gt; caught my eyes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Moral of the story : It pays to (carefully) read the error messages 😄&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The exact error is :&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;= help: the trait `std::fmt::Display` is not implemented for `......`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is mentioned in the &lt;a href=&#34;https://doc.rust-lang.org/book/ch05-02-example-structs.html#adding-useful-functionality-with-derived-traits&#34;&gt;Rust book&lt;/a&gt;,
but the specific got buried in the wall of text. Unlike the popup, which made me pay attention&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Standard error till one adds at least &lt;code&gt;#[derive(Debug)]&lt;/code&gt; before the struct.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to specify the size for the embeded image in Obsidian</title>
        <link>https://microblog.desipenguin.com/post/preview-link-size-obsidian/</link>
        <pubDate>Wed, 31 Jul 2024 10:49:23 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/preview-link-size-obsidian/</guid>
        <description>&lt;p&gt;TL;DR: When inserting a link (especially of the image) one can add pipe followed
by size.
This size is used for displaying embedded image inside the note.&lt;/p&gt;
&lt;p&gt;For example, I have a markdown and excalidraw mixed note named &lt;em&gt;Dashboard&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It references itself (for the excalidraw image on the back of the note) like
&lt;code&gt;![[Dashboard]]&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This results into an image that just shows small preview that is not useful,
especially if image is wide (and/or tall).&lt;/p&gt;
&lt;p&gt;But now I can specify it as &lt;code&gt;![[Dashboard]]|640x480&lt;/code&gt;, which results into decent
sized preview.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&#34;https://www.youtube.com/watch?v=P_Q6avJGoWI&amp;amp;t=388s&#34;&gt;this segment&lt;/a&gt; in
the YouTube video to see it in action.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;There is more to this which I&amp;rsquo;ll cover separately.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>macOS : Whichspace</title>
        <link>https://microblog.desipenguin.com/post/macos-whichspace/</link>
        <pubDate>Tue, 09 Jul 2024 21:32:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/macos-whichspace/</guid>
        <description>&lt;p&gt;I have been using macOS for almost 9 years, and never used the workspaces
feature (Not sure when it was introduced)&lt;/p&gt;
&lt;p&gt;But after looking at &lt;a href=&#34;https://microblog.desipenguin.com/post/omakub/&#34;&gt;Omakub&lt;/a&gt; I started using this feature.&lt;/p&gt;
&lt;p&gt;Essentially, I divided the apps as follows. (Or at least that is what I
wanted 😄) Each app (window) on its own workspace.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alacritty&lt;/li&gt;
&lt;li&gt;Firefox&lt;/li&gt;
&lt;li&gt;Vivaldi&lt;/li&gt;
&lt;li&gt;Whatsapp and Telegram (Social apps) together on separate workspace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But somehow, some of the browser windows (I think new ones, after I moved
existing windows to different workspace) moved to different ones.&lt;/p&gt;
&lt;p&gt;Suddenly, it started feeling &amp;ldquo;jumpy&amp;rdquo;&lt;/p&gt;
&lt;p&gt;(I think) I eventually figured out how to ensure that all the firefox windows
remain in the same workspace &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;While looking at all these, I came across Amethyst (Still exploring, maybe
upcoming post) and also WhichSpace (finally app mentioned in the title of this
post 😆)&lt;/p&gt;
&lt;p&gt;This is really tiny utility. It shows the desktop number (like 1, 2, 3, 4) that
is all.&lt;/p&gt;
&lt;p&gt;But it is useful (at least I think so)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;In the dock, right click on Firefox icon -&amp;gt; Options -&amp;gt; Assign to -&amp;gt; This
Desktop. The default is &lt;code&gt;None&lt;/code&gt; hence the seemingly erratic behaviour.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Creating Youtube Banner</title>
        <link>https://microblog.desipenguin.com/post/youtube-banner/</link>
        <pubDate>Mon, 08 Jul 2024 14:10:26 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/youtube-banner/</guid>
        <description>&lt;p&gt;Today, I was trying to create a banner for my (upcoming) YouTube channel.&lt;/p&gt;
&lt;p&gt;I used Canva to get started. It has a lot of templates to get started.&lt;/p&gt;
&lt;p&gt;This can be a rabbit hole 😄 But I finalized the one I liked.&lt;/p&gt;
&lt;p&gt;After customizing the template to my liking, I was ready to upload it to
youtube.&lt;/p&gt;
&lt;p&gt;But ..&lt;/p&gt;
&lt;p&gt;Turns out, depending on the device where are watching YouTube, different parts
of the banner are visible.&lt;/p&gt;
&lt;p&gt;YouTube creator studio &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; was upfront about which part of the image will be
visible based on the device.&lt;/p&gt;
&lt;p&gt;The image is fully visible only on TV. On Desktop, only middle (third?)
portion is visible.&lt;/p&gt;
&lt;p&gt;I had chosen the template based on the background image, which is almost never visible unless on TV.&lt;/p&gt;
&lt;p&gt;Without the background, the banner didn&amp;rsquo;t look as impressive as I had imagined
😆&lt;/p&gt;
&lt;p&gt;Back to the drawing board&lt;/p&gt;
&lt;p&gt;This time I didn&amp;rsquo;t focus on the background. Instead, I focused on the middle third of the banner.&lt;/p&gt;
&lt;p&gt;I had to modify the image a few times.&lt;/p&gt;
&lt;p&gt;Each time, I would&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adjust the elements in Canva&lt;/li&gt;
&lt;li&gt;Download the image&lt;/li&gt;
&lt;li&gt;Upload to YouTube&lt;/li&gt;
&lt;li&gt;Does it look OK (on non-TV devices ?)&lt;/li&gt;
&lt;li&gt;If not, back to Canva&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think I finally got it right.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Or simply, the &lt;code&gt;Channel customization&lt;/code&gt; page 😄&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>direnv with python</title>
        <link>https://microblog.desipenguin.com/post/direnv-with-python/</link>
        <pubDate>Fri, 05 Jul 2024 13:19:14 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/direnv-with-python/</guid>
        <description>&lt;h2 id=&#34;what-is-direnv&#34;&gt;What is &lt;code&gt;direnv&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;direnv&lt;/code&gt; is a tool that allows you to change your environment based on the configuration in that folder.&lt;/p&gt;
&lt;p&gt;e.g. You can set different environment variables for different folders.&lt;/p&gt;
&lt;p&gt;The reason I revisited &lt;code&gt;direnv&lt;/code&gt; is because for python project, we need to switch to different virtual environment each time we change a project.&lt;/p&gt;
&lt;p&gt;Wouldn&amp;rsquo;t it be nice if correct virtual environment was activated when you change to that directory&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;and&lt;/strong&gt; unload everything to the way it was, when you switch away&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-it-with-python-project-&#34;&gt;How to use it with python project ?&lt;/h2&gt;
&lt;h3 id=&#34;option-1&#34;&gt;Option 1 &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h3&gt;
&lt;p&gt;Create following in &lt;code&gt;~/.config/direnv/direnvrc&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;activate_virtualenv&lt;span style=&#34;color:#666&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  PATH_add &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;$VIRTUAL_ENV&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;/bin&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, in the &lt;code&gt;.envrc&lt;/code&gt; of that folder, add &lt;code&gt;activate_virtualenv path/to/virtualenv&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;option-2&#34;&gt;Option 2 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/h3&gt;
&lt;p&gt;Other option is to add just single line &lt;code&gt;layout python3&lt;/code&gt; to your &lt;code&gt;.envrc&lt;/code&gt;
This automatically creates and activates &lt;code&gt;.direnv/python-$python-version&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you want to control the name and location of your virtual environment then
your &lt;code&gt;.envrc&lt;/code&gt; should have the following&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;my_venv&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;layout python3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In both scenario, you&amp;rsquo;ll need to type  &lt;code&gt;direnv allow&lt;/code&gt; on the terminal the first
time. Otherwise, contents of &lt;code&gt;.envrc&lt;/code&gt; will not be executed.&lt;/p&gt;
&lt;p&gt;Go through the &lt;a href=&#34;https://github.com/direnv/direnv&#34;&gt;README&lt;/a&gt; to learn more about
this amazing tool.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/direnv/direnv/issues/331#issuecomment-366959593&#34;&gt;https://github.com/direnv/direnv/issues/331#issuecomment-366959593&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/direnv/direnv/issues/1264#issuecomment-2106754778&#34;&gt;https://github.com/direnv/direnv/issues/1264#issuecomment-2106754778&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Helix: Vertical Selection and Edit</title>
        <link>https://microblog.desipenguin.com/post/vertical-selection-helix/</link>
        <pubDate>Thu, 04 Jul 2024 06:09:48 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vertical-selection-helix/</guid>
        <description>&lt;p&gt;One of the workflows I used in vi/m over last 2 decades is : vertical selection
and edit&lt;/p&gt;
&lt;p&gt;So much so that it is part of my muscle memory and I needed to learn the
equivalent in helix.&lt;/p&gt;
&lt;p&gt;After some searching, I found it. Here are the steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to the column you want to select. Press &lt;kbd&gt;v&lt;/kbd&gt; to enter select mode.&lt;/li&gt;
&lt;li&gt;Select the column and to go down and up in the column selection use
&lt;kbd&gt;Shift-C&lt;/kbd&gt; or &lt;kbd&gt;Alt-Shift-C&lt;/kbd&gt;&lt;/li&gt;
&lt;li&gt;You can repeat the &lt;kbd&gt;Shift-c&lt;/kbd&gt; command using the numeric operator if
needed, like &lt;code&gt;10-Shift-C&lt;/code&gt; to select the column 10 rows vertically.&lt;/li&gt;
&lt;li&gt;Now you can perform any action on the selection e.g.
&lt;ul&gt;
&lt;li&gt;Go to &lt;code&gt;insert&lt;/code&gt; mode and add &lt;code&gt;* &lt;/code&gt; before each column.&lt;/li&gt;
&lt;li&gt;Or &lt;code&gt;d&lt;/code&gt; to delete the selected letter from all the rows (in &lt;code&gt;normal&lt;/code&gt;) mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You can come out of this (multi-select?) mode via &lt;code&gt;,&lt;/code&gt; in &lt;code&gt;normal&lt;/code&gt; mode (If
you are in &lt;code&gt;insert&lt;/code&gt; mode, finish editing and come back to &lt;code&gt;normal&lt;/code&gt; mode first,
via &lt;code&gt;Esc&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/HelixEditor/comments/11l1d6e/comment/jba764x/&#34;&gt;Source&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Omakub : Lazyvim</title>
        <link>https://microblog.desipenguin.com/post/omakub-lazyvim/</link>
        <pubDate>Fri, 28 Jun 2024 13:26:08 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/omakub-lazyvim/</guid>
        <description>&lt;p&gt;As I wrote &lt;a href=&#34;https://microblog.desipenguin.com/post/omakub/&#34;&gt;earlier&lt;/a&gt;, I skipped over neovim initially, but then
got curious.&lt;/p&gt;
&lt;p&gt;I installed Neovim and configured it to use Lazyvim.&lt;/p&gt;
&lt;p&gt;I was blown away by how nice it is.&lt;/p&gt;
&lt;p&gt;My last serious affair with neovim was &lt;a href=&#34;https://microblog.desipenguin.com/tags/neovim/&#34;&gt;two years ago&lt;/a&gt;. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Lot has changed since then.&lt;/p&gt;
&lt;p&gt;Lazyvim wasn&amp;rsquo;t even born when I stopped using neovim &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It is quite polished.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; The hotekys are mnemonic and intuitive (coming from
doom emacs, at least)&lt;/p&gt;
&lt;p&gt;I have not used it a lot.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m using Helix (and Emacs), I&amp;rsquo;m unlikely to use it seriously (But never
say &amp;ldquo;never!&amp;rdquo; 😄)&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m not removing/discarding it yet.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Then I realized I&amp;rsquo;m spending too much time configuring (and fighting
packer and errors from various extensions/plugins) and stopped using neovim&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I checked. First commit for Lazyvim was on Dec 30, 2022. Few months after
I stopped using neovim&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;At the same time, it seems too much as well. (Initial impression.)&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Omakub : Pinta</title>
        <link>https://microblog.desipenguin.com/post/omakub-pinta/</link>
        <pubDate>Fri, 28 Jun 2024 12:04:32 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/omakub-pinta/</guid>
        <description>&lt;p&gt;While Omakub was mainly intended for developers (and thus has focus on terminal
based programs like alacritty, zellij and neovim), it does come with few GUI
programs.&lt;/p&gt;
&lt;p&gt;I think this is mainly because DHH was trying to switch to Linux as his primary
machine, and requires some non-terminal tools.&lt;/p&gt;
&lt;p&gt;Choice of Pinta and Xournal app were interesting, so I installed both of them.&lt;/p&gt;
&lt;p&gt;I assumed Pinta to be MS Paint replacement.&lt;/p&gt;
&lt;p&gt;While it does have tools like brush and pencil, it seems it was more of photo
editing tool &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (that also allows tiny bit of drawing and paining capabilities.)&lt;/p&gt;
&lt;p&gt;e.g. When Pencil tool is selected, there are no options like changing the
thickness of strokes. (Paint brush has those options)&lt;/p&gt;
&lt;p&gt;Also, when using macOS, the app looks ugly. (I understand that this is not a
native macOS app) There are several better drawing apps on mac.&lt;/p&gt;
&lt;p&gt;For those reasons, while I gave it a try, I uninstalled it.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I had fun playing with the Effects menu though 😄&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Zellij Plugins : zellij-forgot</title>
        <link>https://microblog.desipenguin.com/post/zellij-plugins-forgot/</link>
        <pubDate>Tue, 25 Jun 2024 21:40:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zellij-plugins-forgot/</guid>
        <description>&lt;p&gt;I didn&amp;rsquo;t even know Zellij had such extensive plugin system.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to explore more of those in coming days.&lt;/p&gt;
&lt;p&gt;Let me start with &lt;code&gt;Zellij Forgot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While the main (original?) purpose was (I assume) to remember various Zellij
Keybindings, it can be extended to remember anything. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;While default/out of the box config will load the existing keybindings, it is
a bit weird. It shows things like &lt;code&gt;Some(Down, None)&lt;/code&gt; which seems more of Rust
internal code and may not be directly useful to the user.&lt;/p&gt;
&lt;p&gt;Instead, (as the README suggested) I added my own &amp;ldquo;pairs&amp;rdquo; (This is also given in
the README, I just copy/pasted it)&lt;/p&gt;
&lt;p&gt;By default, this &lt;strong&gt;adds&lt;/strong&gt; to the existing list.&lt;/p&gt;
&lt;p&gt;Not what I wanted.&lt;/p&gt;
&lt;p&gt;Luckily, adding &lt;code&gt;&amp;quot;LOAD_ZELLIJ_BINDINGS&amp;quot; &amp;quot;false&amp;quot;&lt;/code&gt; to the config will disable
automatic keybinding loading.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;The README has example of &lt;code&gt;buy eggs&lt;/code&gt; 😄. Personally, I don&amp;rsquo;t think it is
very good example. If you remember to look it up, you&amp;rsquo;ll also remember to buy
eggs anyway. IMO, this is meant for things that one does not use frequently, and
needs to &amp;ldquo;look up&amp;rdquo;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Read Paywalled Articles for free - at least some anyway</title>
        <link>https://microblog.desipenguin.com/post/read-paywalled-articles/</link>
        <pubDate>Sun, 23 Jun 2024 10:44:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/read-paywalled-articles/</guid>
        <description>&lt;p&gt;&lt;strong&gt;If you can afford, please pay!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On the other hand, paying to read articles is expensive for you, here is an
option (among many others, I&amp;rsquo;m sure) for you&lt;/p&gt;
&lt;p&gt;Install extension like &lt;code&gt;Click to remove element&lt;/code&gt; from the Chrome Web Store. It works with others Chromium based browsers as well, like Edge, Vivaldi, Arc and many more &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;When you see a popup blocking the article, you can use extension like &lt;code&gt;Click to remove element&lt;/code&gt; and remove the popup 😄&lt;/p&gt;
&lt;p&gt;You may need to remove some more elements like dark background which covers or obscures the article.&lt;/p&gt;
&lt;p&gt;Give it a try.&lt;/p&gt;
&lt;p&gt;Bonus:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use &lt;code&gt;Reader view&lt;/code&gt; if/where possible.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Print to PDF&lt;/code&gt; on the reader-view page&lt;/li&gt;
&lt;li&gt;(At least) Vivaldi allowed me to preview the PDF without having to save PDF
locally&lt;/li&gt;
&lt;li&gt;This idea also works for other popups as well, like Facebook, as per &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/remove-html-elements/reviews/2051878/&#34;&gt;this&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;There is &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/remove-html-elements&#34;&gt;similar extension&lt;/a&gt; for Firefox as well.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Omakub</title>
        <link>https://microblog.desipenguin.com/post/omakub/</link>
        <pubDate>Wed, 12 Jun 2024 13:21:50 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/omakub/</guid>
        <description>&lt;p&gt;Yesterday, I came across this new script released by Basecamp.&lt;/p&gt;
&lt;p&gt;The one-line pitch is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Turn a fresh Ubuntu installation into a fully-configured, beautiful, and
modern web development system by running a single command.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This was started by DHH, but now has a lot of contributors.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m not on Ubuntu, I can&amp;rsquo;t directly use it. But I&amp;rsquo;m tempted to set up
Ubuntu on a spare (?) machine just to try this out.&lt;/p&gt;
&lt;p&gt;Since this is how DHH wanted his machine to be setup, it installs apps like Zoom
and Signal etc among others.&lt;/p&gt;
&lt;p&gt;But as the intro post says :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the heart of the pre-configuration lies in the terminal&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Since I also spend a lot of time in the terminal on macOS, it was something I
could try. Luckily, most of the tools are available for macOS too.&lt;/p&gt;
&lt;p&gt;I really liked &lt;code&gt;tokyo-night&lt;/code&gt; everywhere.&lt;/p&gt;
&lt;p&gt;Here is what I have done so far.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/alacritty-thin-strokes-macos/&#34;&gt;Switched to Alacritty from Wezterm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Configured Alacritty and Zellij &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; based on omakub config&lt;/li&gt;
&lt;li&gt;Installed &lt;a href=&#34;https://flameshot.org/&#34;&gt;flameshot&lt;/a&gt;. Earlier, I used to use
&lt;a href=&#34;https://zapier.com/zappy&#34;&gt;Zappy&lt;/a&gt; for annotating screenshots (To be shared with
bug report or a fix.)&lt;/li&gt;
&lt;li&gt;Installed &lt;code&gt;eza&lt;/code&gt; replacement for &lt;code&gt;ls&lt;/code&gt; I had tried &lt;code&gt;exa&lt;/code&gt; - before &lt;code&gt;eza&lt;/code&gt; was
forked out of it since &lt;code&gt;exa&lt;/code&gt; was unmaintained, and for some reason, forgot to
install it when I reinstalled macOS recently.&lt;/li&gt;
&lt;li&gt;Made same font as omakub my default for Alacritty&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Things I did not install:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mise&lt;/code&gt; : I already use &lt;code&gt;asdf&lt;/code&gt;, so I don&amp;rsquo;t see much use switching. mise also
has task runner functionality, but I use &lt;code&gt;just&lt;/code&gt; in place of &lt;code&gt;make&lt;/code&gt;, so I&amp;rsquo;m good.&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Neovim &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; : Happy with Emacs and Helix. Thank you very much.&lt;/del&gt; &lt;a href=&#34;https://microblog.desipenguin.com/post/omakub-lazyvim/&#34;&gt;Update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lazygit : I tried to use it. But I couldn&amp;rsquo;t learnt the keybindings and felt
like I can&amp;rsquo;t use it. For now, I&amp;rsquo;m happy with &lt;code&gt;magit&lt;/code&gt; when in Emacs, and just
plain ol&amp;rsquo; terminal when writing in Helix&lt;/li&gt;
&lt;li&gt;lazydocker seems interesting. I might try it when I need to interact with
docker a lot&lt;/li&gt;
&lt;li&gt;Typora: Since I use Helix for markdown (like these posts), I skipped that
section of the demo video. omakub also installs VScode (which I already have)
which can very easily be used for markdown, why an editor just for markdown ? It
might make sense for DHH - who I assume writes lot more text than me.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Overall, this exploration was much fun.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Since I was already using Zellij, this was nothing more than theme change.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It is not like I&amp;rsquo;ve not spent enough time &lt;a href=&#34;https://microblog.desipenguin.com/tags/vim/&#34;&gt;configuring neovim&lt;/a&gt;
&amp;ldquo;just right&amp;rdquo; 😄&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>fill-paragraph in Helix</title>
        <link>https://microblog.desipenguin.com/post/fill-paragraph-helix/</link>
        <pubDate>Tue, 11 Jun 2024 22:05:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/fill-paragraph-helix/</guid>
        <description>&lt;p&gt;Emacs &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; has this command &lt;code&gt;fill-paragraph&lt;/code&gt; (Usually &lt;code&gt;M-q&lt;/code&gt;) which will auto
format long uneven lines to make them look even by adding a hard wrap.&lt;/p&gt;
&lt;p&gt;But I use helix for writing these blog entries. That is how I discovered
&lt;code&gt;reflow&lt;/code&gt; command in Helix.&lt;/p&gt;
&lt;p&gt;It is simple really&lt;/p&gt;
&lt;p&gt;Select the blocks of text you want to format (by typing &lt;code&gt;x&lt;/code&gt; and repeating for as
many line as you have). Then &lt;code&gt;:reflow&lt;/code&gt;. That&amp;rsquo;s it!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I learnt about &lt;code&gt;gq&lt;/code&gt; in vi (Yes &lt;code&gt;vi&lt;/code&gt; not &lt;code&gt;vim&lt;/code&gt;. This was the time when
&lt;code&gt;vim&lt;/code&gt; did not exist. Yeah, I&amp;rsquo;ve been using &lt;code&gt;vi&lt;/code&gt; that long) That time we used to
use it format &amp;ldquo;text&amp;rdquo; where formatting text mattered. Eventually, I forgot about
it, till I started using vi/Emacs/helix for writing more text than code.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>macOS: How to render thin(ner) strokes in Alacritty</title>
        <link>https://microblog.desipenguin.com/post/alacritty-thin-strokes-macos/</link>
        <pubDate>Tue, 11 Jun 2024 17:56:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/alacritty-thin-strokes-macos/</guid>
        <description>&lt;p&gt;After going through omakub &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; and its &lt;a href=&#34;https://github.com/basecamp/omakub&#34;&gt;source&lt;/a&gt;, I wanted to recreate it on macOS as much as possible.&lt;/p&gt;
&lt;p&gt;The first thing was to use Alacritty.&lt;/p&gt;
&lt;p&gt;I had tried it in the past, but moved to &lt;a href=&#34;https://microblog.desipenguin.com/post/wezterm/&#34;&gt;Wezterm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The reason I stopped was because there was no support for panes or tabs (which
is by design) But now that I&amp;rsquo;m anyway using &lt;a href=&#34;https://microblog.desipenguin.com/tags/zellij/&#34;&gt;Zellij&lt;/a&gt; for that, I
decided to give Alacritty another chance.&lt;/p&gt;
&lt;p&gt;But default rendering looks fat (or bold) which I didn&amp;rsquo;t like.&lt;/p&gt;
&lt;p&gt;Turns out I&amp;rsquo;m not the only one. See &lt;a href=&#34;https://github.com/alacritty/alacritty/issues/4033&#34;&gt;this&lt;/a&gt; issue.&lt;/p&gt;
&lt;p&gt;Problem is with the macOS (things are OK - apparently - on Linux)
Need to set &lt;code&gt;AppleFontSmoothing&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; like :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;defaults write org.alacritty AppleFontSmoothing -int &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://omakub.org/&#34;&gt;Omakub&lt;/a&gt; is a (self) described as &amp;ldquo;An Omakase
Developer Setup for Ubuntu 24.04 by DHH&amp;rdquo;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Django: Create new project in an existing folder</title>
        <link>https://microblog.desipenguin.com/post/django-startproject-existing/</link>
        <pubDate>Sat, 08 Jun 2024 11:33:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/django-startproject-existing/</guid>
        <description>&lt;p&gt;Default command for creating a new project is :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;django-admin startproject my_new_project&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Django will then &lt;strong&gt;create&lt;/strong&gt; a folder called &lt;code&gt;my_new_project&lt;/code&gt; (if it does not exist)&lt;/p&gt;
&lt;p&gt;But if folder &lt;code&gt;my_new_project&lt;/code&gt; exists (even if empty) we get error like :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CommandError: &#39;/path/to/my_new_project&#39; already exists&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The way around is to specify a folder name &lt;strong&gt;after&lt;/strong&gt; the project name like&lt;/p&gt;
&lt;p&gt;&lt;code&gt;django-admin startproject my_new_project existing_folder&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&#34;https://docs.djangoproject.com/en/5.0/ref/django-admin/#startproject&#34;&gt;documentation&lt;/a&gt; for details.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>UV: Superfast pip replacement written in Rust</title>
        <link>https://microblog.desipenguin.com/post/uv-pip-in-rust/</link>
        <pubDate>Fri, 07 Jun 2024 23:11:06 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/uv-pip-in-rust/</guid>
        <description>&lt;p&gt;It is (almost) drop-in replacement for &lt;code&gt;pip&lt;/code&gt;. We just need to invoke it as &lt;code&gt;uv pip&lt;/code&gt; instead of &lt;code&gt;pip&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;how-to-install-&#34;&gt;How to install ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pipx install uv&lt;/code&gt; : This makes it available everywhere.&lt;/li&gt;
&lt;li&gt;Other alternatives are &lt;code&gt;curl&lt;/code&gt; (&lt;a href=&#34;https://github.com/astral-sh/uv?tab=readme-ov-file#getting-started&#34;&gt;recommended&lt;/a&gt;) and &lt;code&gt;brew&lt;/code&gt; (on macOS)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;it-is-superfast&#34;&gt;It is superfast&lt;/h2&gt;
&lt;p&gt;I tried installing &lt;code&gt;Django&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ uv pip install Django
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Resolved &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt; packages in 138ms
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Downloaded &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt; packages in 2.53s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installed &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt; packages in 228ms
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; + &lt;span style=&#34;color:#b8860b&#34;&gt;asgiref&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt;3.8.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; + &lt;span style=&#34;color:#b8860b&#34;&gt;django&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt;5.0.6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; + &lt;span style=&#34;color:#b8860b&#34;&gt;sqlparse&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt;0.5.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This took 3s (As opposed to 33s taken by &lt;code&gt;pip&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Installing &lt;code&gt;ruff&lt;/code&gt; took less than a second 🤯&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ uv pip install ruff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Resolved &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; package in 269ms
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Downloaded &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; package in 782ms
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installed &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; package in 9ms
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; + &lt;span style=&#34;color:#b8860b&#34;&gt;ruff&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt;0.4.8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;create-a-virtual-environment&#34;&gt;Create a virtual environment&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; is not just a &lt;code&gt;pip&lt;/code&gt; replacement. It can also create a virtual environment for you.&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;uv env&lt;/code&gt; to create a virtual environment.&lt;/p&gt;
&lt;p&gt;By default, it is created at &lt;code&gt;.venv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;But if you pass an argument, you can use some other name e.g. &lt;code&gt;uv venv my_venv&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is a standard virtual environment. So &lt;code&gt;source .venv/bin/activate&lt;/code&gt; and &lt;code&gt;deactivate&lt;/code&gt; works as you would expect.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: How non-primitive types are available in the default scope</title>
        <link>https://microblog.desipenguin.com/post/default-scope-in-rust/</link>
        <pubDate>Mon, 27 May 2024 08:34:30 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/default-scope-in-rust/</guid>
        <description>&lt;p&gt;In rust, &lt;code&gt;str&lt;/code&gt; is a primitive type, but many non-primitive types are also in scope by default.&lt;/p&gt;
&lt;p&gt;e.g. We do not need to add &lt;code&gt;use&lt;/code&gt; statement to use &lt;code&gt;Vec&lt;/code&gt; - which is NOT a primitive type.&lt;/p&gt;
&lt;p&gt;It comes from &lt;code&gt;std::vec&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So &lt;code&gt;Vec::new()&lt;/code&gt; is really &lt;code&gt;std::vec::Vec::new()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Vec::new()&lt;/code&gt; works because Rust inserts this at the beginning of every module:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;use&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;std::prelude::v1::&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This makes &lt;code&gt;Vec&lt;/code&gt; (and &lt;code&gt;String&lt;/code&gt;, &lt;code&gt;Option&lt;/code&gt; and &lt;code&gt;Result&lt;/code&gt;) available by default.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;I learnt this from &lt;a href=&#34;https://fasterthanli.me/articles/a-half-hour-to-learn-rust#the-libstd-prelude&#34;&gt;learn rust in half an hour&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How Zellij saved me</title>
        <link>https://microblog.desipenguin.com/post/zellij-saved-me/</link>
        <pubDate>Thu, 23 May 2024 17:53:15 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zellij-saved-me/</guid>
        <description>&lt;p&gt;&lt;em&gt;OK, title is a bit of clickbait. It saved me some inconvinence 😉&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yesterday, Wezterm crashed.&lt;/p&gt;
&lt;p&gt;At first, I was worried that all my &amp;ldquo;work&amp;rdquo; is lost (few blog posts were in-progress and open in helix)&lt;/p&gt;
&lt;p&gt;But I had forgotten that I always start zellij these days.&lt;/p&gt;
&lt;p&gt;So all my &amp;ldquo;work&amp;rdquo; was indeed there.&lt;/p&gt;
&lt;p&gt;All I had to do was &lt;code&gt;zellij ls&lt;/code&gt; followed by &lt;code&gt;zellij a my_session1&lt;/code&gt; (and &lt;code&gt;my_session2&lt;/code&gt; and so on)&lt;/p&gt;
&lt;p&gt;No one expects the terminal to crash &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. But if and when it does, you are glad you were using Zellij (or &lt;code&gt;tmux&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This is not to say Wezterm is unstable. I have been using it for a couple of years, and this is the first time it crashed in recent memory.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Importance of Making Things</title>
        <link>https://microblog.desipenguin.com/post/importance-of-making-things/</link>
        <pubDate>Wed, 22 May 2024 17:18:50 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/importance-of-making-things/</guid>
        <description>&lt;p&gt;On the knowledge project podcast, Shane parrish interviewed &lt;a href=&#34;https://fs.blog/knowledge-project-podcast/kevin-kelly/&#34;&gt;Kevin Kelly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The link above has good high level overview with timestamps. Definitely check it out.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;One thing that is not covered in the timestamps (hence I can&amp;rsquo;t link to the exact conversation) is about &lt;strong&gt;Importance of making things&lt;/strong&gt;&lt;/del&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Kevin says something to the effect of, don&amp;rsquo;t stop making things (that you care about) just because they are not the greatest or the best.
Your &amp;ldquo;thing&amp;rdquo; may have influence (or use) for someone in the future in ways you can&amp;rsquo;t imagine.&lt;/p&gt;
&lt;p&gt;The examples he gives are :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No one remembers who or when Piano was invented &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, but if piano was not invented, Mozart would not be known as genius.
&lt;ul&gt;
&lt;li&gt;He may have made music with something else (if Piano didn&amp;rsquo;t exist) and may not be well known as he is today.&lt;/li&gt;
&lt;li&gt;Or he may not have made music at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Similarly, no one remembers who or when film camera was invented, but everyone knows George Lucas
&lt;ul&gt;
&lt;li&gt;No movie camera -&amp;gt; No George Lucas&lt;/li&gt;
&lt;li&gt;He may have become photographer (assuming still photography existed) or a painter&lt;/li&gt;
&lt;li&gt;He may or may not have become such a success in his alternate career.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Point is : &lt;strong&gt;make things, your work may support future geniuses&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Found the interview on Youtube. This topic is discussed in the chapter &lt;a href=&#34;https://www.youtube.com/watch?v=1OPB0bix6CQ&amp;amp;t=1808s&#34;&gt;definition of success&lt;/a&gt; I realize that Kevin says it differently than what I have written above. But the gist is the same (and so are the examples)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I&amp;rsquo;m sure we can search specifics of when piano (or movie camera) was invented. But that is not the point. We don;t need to search for names Mozart and George Lucas. &lt;strong&gt;That is the point&lt;/strong&gt;. Also, I think both piano and movie camera were gradual inventions. Musical instrument similar to piano would have existed and piano we know today would have been an evolution. Same for still camera being stepping stone for movie camera.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Homework for Life</title>
        <link>https://microblog.desipenguin.com/post/homework-for-life/</link>
        <pubDate>Wed, 22 May 2024 07:39:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/homework-for-life/</guid>
        <description>&lt;p&gt;In &lt;a href=&#34;https://www.onepercentbetterproject.com/the-podcast&#34;&gt;One percent better podcast&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, Joe interviews &lt;a href=&#34;https://matthewdicks.com&#34;&gt;Matthew Dicks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Matthew explains the Homework for Life &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; as (paraphrased)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At the end of each day, write down important &amp;ldquo;stories&amp;rdquo; (not memories) of the day.
Else life passes by, and we don&amp;rsquo;t remember what you did 12 years from today. (Cause all days look the same in past)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;He is a teacher. He asks his students to narrate stories (on a Monday, start of the school)
He mentions that 10-year olds can come up with excellent stories. One example he mentions is&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There was water on the floor. There was blood.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The last sentence makes the listener wanting to know more.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; That is good story.&lt;/p&gt;
&lt;p&gt;Few other points about stories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Location and action are important&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You should mention the location, say classroom and let the reader imagine it for themselves. Everyone will imagine it differently. As long as the specifics of the classrooms are not relevant to the plot, there is no point talking about the details.&lt;/li&gt;
&lt;li&gt;Reader is tracking the points. Say you mentioned that the girl had green eyes, and the green eyes are never mentioned till the end, what was the point of mentioning the eye color ? Maybe just say &amp;ldquo;Beautiful Girl&amp;rdquo; and let everyone imagine their own beauty.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;I&amp;rsquo;ve started doing this from yesterday.&lt;/p&gt;
&lt;p&gt;Instead of &amp;ldquo;reporting&amp;rdquo; on the incidents of the day (in a journal) which can be dry and repetitive, tell a story.&lt;/p&gt;
&lt;p&gt;At least for last two days, I was able to do that 🤞&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I could not find direct link to the podcast with notes and all. So I had to search for &amp;ldquo;Matthew Dicks&amp;rdquo; but that also doesn&amp;rsquo;t work directly because not all episodes are listed. They are loaded when one scrolls down to older episodes. This one was roughly in June 2023.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Ali Abdaal also mentioned this in his &lt;a href=&#34;https://aliabdaal.com/newsletter/homework-for-life/&#34;&gt;newsletter&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;If you are curious to know what happened, listen to the episode 😆&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Vivaldi Browser</title>
        <link>https://microblog.desipenguin.com/post/vivaldi-browser/</link>
        <pubDate>Tue, 21 May 2024 22:49:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vivaldi-browser/</guid>
        <description>&lt;p&gt;I switched to &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Vivaldi browser after reading &lt;a href=&#34;https://mkennedy.codes/posts/michael-kennedys-unsolicited-advice-for-mozilla-and-firefox/&#34;&gt;this&lt;/a&gt; post by Mike Kennedy&lt;/p&gt;
&lt;p&gt;To be fair, I had installed and tried Vivaldi a long time ago. But I think things got better this time around.&lt;/p&gt;
&lt;p&gt;I seem to have stuck with it for long time.&lt;/p&gt;
&lt;p&gt;One benefit of chromium based browsers (like Vivaldi) is that user has access to vast amount of extensions from Chrome Web store. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Just today, I explored two other &amp;ldquo;features&amp;rdquo; which I&amp;rsquo;m not sure how I feel about.&lt;/p&gt;
&lt;p&gt;Tasks and Notes&lt;/p&gt;
&lt;p&gt;It is handy to have these right there, in the browser.&lt;/p&gt;
&lt;p&gt;The notes seem quite thought through. It supports folder, and search etc. &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;While there is a WYSIWYG editor, the notes are essentially markdown.&lt;/p&gt;
&lt;p&gt;There is also option to export notes.&lt;/p&gt;
&lt;p&gt;I tried. They are indeed exported as markdown files. Neat!&lt;/p&gt;
&lt;p&gt;I may use Notes more than tasks. But only as temporary place. If I&amp;rsquo;m already in browser, might as well capture it right there.&lt;/p&gt;
&lt;p&gt;But later I&amp;rsquo;ll move it to &lt;a href=&#34;https://microblog.desipenguin.com/post/logseq-take-2/&#34;&gt;logseq&lt;/a&gt; and push it to git.&lt;/p&gt;
&lt;p&gt;There are other nifty features like web panels, which I still have not explored.&lt;/p&gt;
&lt;p&gt;I wish there was a plugin or feature in Vivaldi that automatically closes the inactive tabs after fixed amount of time - like &lt;a href=&#34;https://microblog.desipenguin.com/post/the-arc-browser/&#34;&gt;Arc browser&lt;/a&gt; and then I&amp;rsquo;ll make this one my default browser.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;My default browser is still Firefox, for my banking, emails etc.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;So far I&amp;rsquo;ve installed only 2 extensions. KeepassXC and Bonjour. I also tried some &amp;ldquo;free vpn&amp;rdquo; extension that lets user connect to servers from other countries for 15 minutes (for free). I didn&amp;rsquo;t see the point. So I uninstalled it.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Arc also had notes initially, the feature they have since &lt;a href=&#34;https://resources.arc.net/hc/en-us/articles/19233788518039-Phasing-Out-Arc-Notes&#34;&gt;removed&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>`#[cfg]` attrib vs `cfg!` macro in Rust</title>
        <link>https://microblog.desipenguin.com/post/cfg-attrib-vs-macro-rust/</link>
        <pubDate>Sun, 19 May 2024 12:46:46 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/cfg-attrib-vs-macro-rust/</guid>
        <description>&lt;p&gt;When I published my &lt;a href=&#34;https://microblog.desipenguin.com/post/debug-assertions-rust/&#34;&gt;previous post&lt;/a&gt; on mastodon,
&lt;a href=&#34;https://mastodon.online/@teotwaki&#34;&gt;Sebastian&lt;/a&gt; pointed out &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; that using &lt;code&gt;#[cfg]&lt;/code&gt;
is better than &lt;code&gt;cfg!&lt;/code&gt; macro.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://doc.rust-lang.org/std/macro.cfg.html&#34;&gt;Documentation&lt;/a&gt; explains that :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;cfg!, unlike #[cfg], does not remove any code and only evaluates to true or false.
For example, all blocks in an if/else expression need to be valid
when cfg! is used for the condition, regardless of what cfg! is evaluating.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Thanks, Sebastian!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;See this &lt;a href=&#34;https://mastodon.online/@teotwaki/112460605011727547&#34;&gt;thread&lt;/a&gt;
for the original discussion.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust : Use println! only in Debug Build</title>
        <link>https://microblog.desipenguin.com/post/debug-assertions-rust/</link>
        <pubDate>Fri, 17 May 2024 22:08:49 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/debug-assertions-rust/</guid>
        <description>&lt;p&gt;We all know we shouldn&amp;rsquo;t use print debugging, and yet we all do 😉 &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Jokes apart, when I&amp;rsquo;m still developing the code, I use the debugger where possible.
But sometimes, I want to keep certain print statements to verify runtime
behaviour, especially when rolling out new feature and when there
are too many variations (some of them unknown) in incoming data.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m aware, logging is the right way to handle this (with loglevel set to
&lt;code&gt;debug&lt;/code&gt; or something), but it seems too much when developing toy projects.&lt;/p&gt;
&lt;p&gt;I use logging in my project that needs to be &amp;ldquo;deployed&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Anyway, today I decided to learn if and how this could be done in rust.&lt;/p&gt;
&lt;p&gt;Luckily, instead of spending hours, I asked Codeium coding assistant about this.
It suggested that I wrap the print statements with &lt;code&gt;debug assertion&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;cfg!&lt;/span&gt;(debug_assertions)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Running debug build);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&lt;/span&gt;&lt;span style=&#34;&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Irrespective of the programming language. So &lt;code&gt;console.log&lt;/code&gt; for JS and &lt;code&gt;println!&lt;/code&gt; in rust are in the same category&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>`Vec::with_capacity` in Rust</title>
        <link>https://microblog.desipenguin.com/post/with-capacity-rust/</link>
        <pubDate>Fri, 17 May 2024 11:46:15 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/with-capacity-rust/</guid>
        <description>&lt;p&gt;At first, I assumed since we&amp;rsquo;ve declared the capacity upfront, it would be maximum capacity of the &lt;code&gt;Vec&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Turns out, since &lt;code&gt;Vec&lt;/code&gt; is expected to shrink and grow, as needed, there is no &lt;strong&gt;maximum&lt;/strong&gt; capacity for &lt;code&gt;Vec&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It just ensures that &amp;ldquo;sufficient&amp;rdquo; memory is allocated to the &lt;code&gt;Vec&lt;/code&gt;, such that memory reallocation is not required.&lt;/p&gt;
&lt;p&gt;On the other hand, if you need more that what you declared with &lt;code&gt;with_capacity&lt;/code&gt;, you will get it, but there will need
to be reallocation (of memory), so it will be inefficient.&lt;/p&gt;
&lt;p&gt;I was surprised when the following code worked (I had expected &lt;code&gt;panic&lt;/code&gt; when &lt;code&gt;my_vec&lt;/code&gt; had more than declared capacity)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;mut&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;my_vector: &lt;span style=&#34;color:#a2f&#34;&gt;Vec&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;Vec&lt;/span&gt;::with_capacity(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{:?}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;my_vector);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;my_vector.push(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;my_vector.push(&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;my_vector.push(&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;my_vector.push(&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{:?}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;my_vector);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This code produced the following output&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;1, 2, 3, 4&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;with_capacity&lt;/code&gt; is useful when you know upfront your memory requirement. This avoids reallocation.
It provides an efficient operation when the programmer knows what to expect.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Conditional Compilation in Rust</title>
        <link>https://microblog.desipenguin.com/post/conditional-compilation-rust/</link>
        <pubDate>Thu, 16 May 2024 09:28:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/conditional-compilation-rust/</guid>
        <description>&lt;p&gt;Today I learnt that certain rust code can be marked such that it is compiled
only for specific platform.&lt;/p&gt;
&lt;p&gt;This makes sense for low level libraries that provide platform-specific functionality
that is not available on other platforms.&lt;/p&gt;
&lt;p&gt;This is achieved by tagging the function with &lt;code&gt;#[cfg(target_os = &amp;quot;xyz&amp;quot;)]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here &lt;code&gt;xyz&lt;/code&gt; can be one of the following :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;windows&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;macos&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;ios&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;linux&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;android&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;freebsd&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;dragonfly&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;openbsd&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;netbsd&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Similar to &lt;code&gt;target_os&lt;/code&gt;, here are other options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;target_feature&lt;/li&gt;
&lt;li&gt;target_arch&lt;/li&gt;
&lt;li&gt;target_family&lt;/li&gt;
&lt;li&gt;target_env&lt;/li&gt;
&lt;li&gt;target_abi&lt;/li&gt;
&lt;li&gt;target_endian&lt;/li&gt;
&lt;li&gt;target_vendor&lt;/li&gt;
&lt;li&gt;target_pointer_width&lt;/li&gt;
&lt;li&gt;target_has_atomic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;del&gt;Some&lt;/del&gt; Most of these are obvious. For others which are not, read the :&lt;a href=&#34;https://doc.rust-lang.org/reference/conditional-compilation.html&#34;&gt;Rust documentation&lt;/a&gt; for the details.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>You can now follow this blog from Fediverse</title>
        <link>https://microblog.desipenguin.com/post/follow-this-blog-from-fedi/</link>
        <pubDate>Mon, 13 May 2024 22:24:05 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/follow-this-blog-from-fedi/</guid>
        <description>&lt;p&gt;Put &lt;code&gt;@microblog.desipenguin.com@web.brid.gy&lt;/code&gt; in the search box.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;https://fed.brid.gy&#34;&gt;Bridgy.fed&lt;/a&gt; this site automatically gets it&amp;rsquo;s own mastodon account.&lt;/p&gt;
&lt;p&gt;Following this account is like subscribing to the RSS feed (I think 😄)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Conventional Commits</title>
        <link>https://microblog.desipenguin.com/post/conventional-commits/</link>
        <pubDate>Thu, 02 May 2024 18:47:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/conventional-commits/</guid>
        <description>&lt;p&gt;Few days ago, I heard about this on some podcast (maybe changelog ? 🤷‍♂)&lt;/p&gt;
&lt;p&gt;I have been using similar notation for my commits - &lt;a href=&#34;https://gitlab.com/mandarvaze/microblog/-/commits/master&#34;&gt;even for this blog&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; - but I did not know it is a specification.&lt;/p&gt;
&lt;p&gt;The idea is that very first word of the commit message should indicate what sort of commit is it.&lt;/p&gt;
&lt;p&gt;Most common ones are : &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;feat&lt;/code&gt; (To indicate bugfix and a feature)&lt;/p&gt;
&lt;p&gt;Other useful ones are: &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;style&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then there is &lt;code&gt;chore&lt;/code&gt; (catch all ? 😄)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used some of these at work as well.&lt;/p&gt;
&lt;p&gt;As the website mentions, benefit of such style is that some tools can parse the git log to automatically generate the changelog.&lt;/p&gt;
&lt;p&gt;Website also mentions, that&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;it’s not the end of the world if a commit lands that does not meet the Conventional Commits specification. It simply means that commit will be missed by tools that are based on the spec.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Since the commits are just addition or updates to markdown files, most of the tags are not used here. I only use &lt;code&gt;Add&lt;/code&gt; and occasional &lt;code&gt;Update&lt;/code&gt;. I do believe it is in the spirit of conventional commits 😄&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>rust can Divide by Zero</title>
        <link>https://microblog.desipenguin.com/post/rust-divide-by-zero/</link>
        <pubDate>Thu, 02 May 2024 18:36:45 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-divide-by-zero/</guid>
        <description>&lt;p&gt;At least for floating point numbers, it does not crash/&lt;code&gt;panic!&lt;/code&gt; 🤷‍♂&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;10.0&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;y&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0.0&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{:?}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;y);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This above code returns &lt;code&gt;inf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But if we change the number to &lt;code&gt;int&lt;/code&gt;, compiler catches this &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; at shows the following error:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;error: this operation will panic at runtime&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This is a contrived example. Instead of static values, if these were passed at runtime, it would (should?) &lt;code&gt;panic&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/new-mobile/</link>
        <pubDate>Mon, 29 Apr 2024 21:36:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/new-mobile/</guid>
        <description>&lt;p&gt;I got myself a new mobile phone after almost 5 years.&lt;/p&gt;
&lt;p&gt;My old one is still going strong.&lt;/p&gt;
&lt;p&gt;But there are no OS updates. I&amp;rsquo;m stuck at Android 10&lt;/p&gt;
&lt;p&gt;Some random facts about the new phone - in no specific order&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is 3 times the price of the old one&lt;/li&gt;
&lt;li&gt;It is 5G
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t get 5G everywhere, but place where I did get 5G signal, I got 500MB+ download speed (as per speed test) 🤯&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;It has Wi-Fi calling. Hopefully, my calls won&amp;rsquo;t get dropped 🤞
&lt;ul&gt;
&lt;li&gt;This was one of the main reasons everyone around me was asking me to upgrade 😄&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since the phone is 5 years newer, it is better - by default - in so many categories.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m planning to put custom ROM on the older phone and give it to my kids, for occasional game or for web search for their studies etc.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/bicycle/</link>
        <pubDate>Fri, 19 Apr 2024 15:47:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/bicycle/</guid>
        <description>&lt;p&gt;We have a bicycle which was unused for months.&lt;/p&gt;
&lt;p&gt;I got it fixed (some oiling, check tyres, brakes etc.) for all of Rs. 90 😄&lt;/p&gt;
&lt;p&gt;Today, I rode bicycle for the first time after decades.&lt;/p&gt;
&lt;p&gt;Not for long. Maybe 15 minutes.&lt;/p&gt;
&lt;p&gt;Since I was not used to it, my legs hurt 😄&lt;/p&gt;
&lt;p&gt;But it felt great to ride a cycle after so many years.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rust: Clone vs Copy</title>
        <link>https://microblog.desipenguin.com/post/rust-clone-vs-copy/</link>
        <pubDate>Mon, 08 Apr 2024 18:41:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-clone-vs-copy/</guid>
        <description>&lt;p&gt;One of the strength of Rust is memory management. This also leads to compiler errors related to &lt;code&gt;move&lt;/code&gt; or &lt;code&gt;borrow&lt;/code&gt;
When we assign an existing variable to new variable, two things can happen.&lt;/p&gt;
&lt;p&gt;Either the data is copied - in that case we can use both old and the new variable without worry. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Or data is moved - now we can only use the new variable, as the old variable is &amp;ldquo;out of scope&amp;rdquo;.
But there &lt;strong&gt;is&lt;/strong&gt; a way to access both the new and old variables. But in that case we have to explicit.&lt;/p&gt;
&lt;p&gt;We need to copy the variable.&lt;/p&gt;
&lt;p&gt;You may be familiar with concept of shallow copy Vs deep copy.
&lt;code&gt;clone&lt;/code&gt; in rust is same as deep copy. Here the entire data (&lt;code&gt;String&lt;/code&gt; or &lt;code&gt;struct&lt;/code&gt;) is copied rather than just the pointer.&lt;/p&gt;
&lt;p&gt;Off course, cloning or deep copy means additional memory usage. If the data is huge, then be careful with cloning.&lt;/p&gt;
&lt;p&gt;You can read detailed description about the memory management in the rust book &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Scalar data types like number and characters are copied by default&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html#memory-and-allocation&#34;&gt;Memory management in Rust&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to create IDE like experience in terminal using Zellij</title>
        <link>https://microblog.desipenguin.com/post/zellij-ide/</link>
        <pubDate>Sat, 30 Mar 2024 10:11:46 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zellij-ide/</guid>
        <description>&lt;h2 id=&#34;undocumented-zellij-keybindings&#34;&gt;(undocumented?) Zellij Keybindings&lt;/h2&gt;
&lt;p&gt;Undocumented, because these don&amp;rsquo;t show up in the default configuration, which shows (I assume) most useful key bindings.
I had to look for these, and found them in Github discussions/issues.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl p d&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl p&lt;/code&gt; is for &lt;code&gt;pane&lt;/code&gt;, but &lt;code&gt;d&lt;/code&gt; after that (which I assume stands for &lt;code&gt;down&lt;/code&gt;) is not documented.&lt;/li&gt;
&lt;li&gt;This creates a new terminal in horizontal split fashion &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl n -&lt;/code&gt; to reduce the size of the terminal.
&lt;ul&gt;
&lt;li&gt;By default, it is split 50-50&lt;/li&gt;
&lt;li&gt;Usually, you&amp;rsquo;ll want more screen real estate for the editor (Helix in my case, but works for (n)vi(m) or emacs-in-terminal as wlel)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also a possibility of running a &lt;code&gt;floating&lt;/code&gt; pane. This may be used for running a server process, which mostly one doesn&amp;rsquo;t need to look at constantly.&lt;/p&gt;
&lt;p&gt;It also save screen real estate.&lt;/p&gt;
&lt;p&gt;You can start a floating pane via &lt;code&gt;Ctrl p w&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Since this a toggle, new floating pane will be created if one does not exist. If one already exists, it will be toggled between hidden and shown.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Documented/default &lt;code&gt;Ctrl p n&lt;/code&gt; creates a pane in vertical split fashion, to the right.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>error: Unknown binary &#39;rust-analyzer&#39;</title>
        <link>https://microblog.desipenguin.com/post/rust-analyzer/</link>
        <pubDate>Sat, 30 Mar 2024 08:10:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rust-analyzer/</guid>
        <description>&lt;p&gt;As I am setting up my &lt;del&gt;new&lt;/del&gt; machine, I came across this error when emacs tried to
use &lt;code&gt;rust-analyzer&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error: Unknown binary &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;rust-analyzer&amp;#39;&lt;/span&gt; in official toolchain &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;stable-x86_64-apple-darwin&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As mentioned in this &lt;a href=&#34;https://stackoverflow.com/q/77453247&#34;&gt;SO question&lt;/a&gt;,
&lt;code&gt;which rust-analyzer&lt;/code&gt; did not show any error.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Luckily, the same SO question also had the solution&lt;/p&gt;
&lt;p&gt;I needed to explicitly install it via &lt;code&gt;rustup component add rust-analyzer&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Luckily, the comment in the accepted answer also explained why &lt;code&gt;which&lt;/code&gt; works.
It is a wrapper, which is created/installed by default, but platform specific
binary needs to be installed explicitly.
See &lt;a href=&#34;https://stackoverflow.com/questions/77453247/error-rust-analyzer-is-not-installed-for-the-toolchain-stable-x86-64-unknown#comment136550874_77453276&#34;&gt;this comment&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Format raw strings in rust</title>
        <link>https://microblog.desipenguin.com/post/format-raw-strings/</link>
        <pubDate>Thu, 21 Mar 2024 23:15:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/format-raw-strings/</guid>
        <description>&lt;p&gt;When refactoring code to make API call to Gemini, I learnt how to format
raw strings in rust.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;var1&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;test1&amp;#34;&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;formatted&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;format!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;#&amp;#34;var1 is: {}&amp;#34;#&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;var1);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;formatted);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This gives output as : &lt;code&gt;var1 is: test1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you want &lt;code&gt;{&lt;/code&gt; in the output, then it needs to be escaped with additional &lt;code&gt;{&lt;/code&gt;
like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;var1&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;test1&amp;#34;&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;formatted&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;format!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;#&amp;#34;{{contents: {}}}&amp;#34;#&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;var1);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;formatted);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This gives output as : &lt;code&gt;{contents: test1}&lt;/code&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to use .env files with your rust project</title>
        <link>https://microblog.desipenguin.com/post/use-env-rust/</link>
        <pubDate>Sun, 17 Mar 2024 07:08:43 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/use-env-rust/</guid>
        <description>&lt;p&gt;It is very important that secrets are stored in environment variables during the runtime.&lt;/p&gt;
&lt;p&gt;During the development, it makes sense to use &lt;code&gt;.env&lt;/code&gt; file.
In my last project, there were probably 40+ variables in the &lt;code&gt;.env&lt;/code&gt;.
Although that project was in RoR the idea of &lt;code&gt;.env&lt;/code&gt; itself is not new.&lt;/p&gt;
&lt;p&gt;But for me, using &lt;code&gt;.env&lt;/code&gt; with &lt;code&gt;rust&lt;/code&gt; is new.&lt;/p&gt;
&lt;p&gt;For my current (self) assignment, I needed to store an API Key.
Hence, the use of &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Luckily, there is a crate for that 😉 - called &lt;a href=&#34;https://docs.rs/dotenv/latest/dotenv/&#34;&gt;&lt;code&gt;dotenv&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To use it in your project :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;cargo add dotenv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;At earliest place in your code, add &lt;code&gt;dotenv().ok();&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/macbook-fixed/</link>
        <pubDate>Tue, 12 Mar 2024 20:56:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/macbook-fixed/</guid>
        <description>&lt;p&gt;Finally, my Macbook Pro is back!&lt;/p&gt;
&lt;p&gt;As part of fixing, they put OS X Yosemite on it. 😭&lt;/p&gt;
&lt;p&gt;Practically nothing worked. For some reason, Apple ID login also did not work.
I checked on another machine, username/password was indeed correct.&lt;/p&gt;
&lt;p&gt;There was no option to upgrade to macOS Monterey (last supported version on this hardware) from the App Store either.&lt;/p&gt;
&lt;p&gt;App store listed macOS Sonoma, which I knew wasn&amp;rsquo;t supported, but tried it anyway. As expected, it said &amp;ldquo;Not supported&amp;rdquo; (Duh!)&lt;/p&gt;
&lt;p&gt;Finally, resorted to Internet Discovery.&lt;/p&gt;
&lt;p&gt;It offered to install macOS Monterey, as expected.&lt;/p&gt;
&lt;p&gt;All is well.&lt;/p&gt;
&lt;p&gt;(It took some time, downloading etc. But otherwise pretty uneventful)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Left Sage</title>
        <link>https://microblog.desipenguin.com/post/left-sage/</link>
        <pubDate>Tue, 05 Mar 2024 23:15:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/left-sage/</guid>
        <description>&lt;p&gt;Today was my last day at &lt;a href=&#34;https://www.sage.com&#34;&gt;Sage&lt;/a&gt; (I joined Lockstep, which was acquired by Sage)
I spent a little over two years working with the wonderful engineering team there.
I learnt a lot from everyone on the team, and made some new friends (I knew &lt;em&gt;one&lt;/em&gt; person before I joined) during my stay.&lt;/p&gt;
&lt;p&gt;Most of the team was junior to me (in terms of number of years of experience.)
But as I worked with them, I noticed that every single one of them were exceptional engineers. Without exception.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;When I joined, I did not know Ruby/Rails.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sad to say that even after 2 years, I can&amp;rsquo;t say I &amp;ldquo;befriended&amp;rdquo; RoR (like I did python) 😄&lt;/p&gt;
&lt;p&gt;I also got opportunity to work on C# - but not enough time to feel comfortable.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;contributions&#34;&gt;Contributions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Generic Webhook Framework, such that adding a new webhook was a matter of adding an entry in the lookup table and writing a Sidekiq Job&lt;/li&gt;
&lt;li&gt;Resilient Webhook Framework, using Azure FunctionApp, Service Bus queue, Trigger Functions - Oh my!&lt;/li&gt;
&lt;li&gt;I did some feature development as well, but that is specific to the product and may not be of the interest to those outside the organization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;praise&#34;&gt;Praise&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Co-founder of the original company said &amp;ldquo;Mandar, you write very good code&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;I interepretted it as &amp;ldquo;readable&amp;rdquo; code with code comments explaining &amp;ldquo;why&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;There was culture of &amp;ldquo;no code comments&amp;rdquo; and PR comments of the nature &amp;ldquo;Please add code comments&amp;rdquo; were ignored ¯_(ツ)_/¯&lt;/li&gt;
&lt;li&gt;So code that could be understood on first read may have been &amp;ldquo;refreshing&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Other possibility is that usually people with many years of experience, do not write code at all, so my code may have been unexpected (hence the praise)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;QA team members praised me about me taking time to explain the feature to them.
&lt;ul&gt;
&lt;li&gt;Unfortunately, QA teams are considered second class citizens (I doubt this is unique here 😞)&lt;/li&gt;
&lt;li&gt;Despite QA teams raising this issue several times, it hasn&amp;rsquo;t changed much.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;People from other sqauds (teams working on same product but different focus, under different manager) thanked me for taking time to help them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reflection&#34;&gt;Reflection&lt;/h2&gt;
&lt;p&gt;Although it is not a revelation (to me) - I am not happy in MNC. There just seems to be a lot of overhead, red tape and lot of wastage of energy.
When I joined Lockstep, it was a small organization which was growing. I think people were happy (I hope some still are)&lt;/p&gt;
&lt;p&gt;I thrive in smaller teams with autonomy and shared goal.&lt;/p&gt;
&lt;p&gt;I understand that no organization &lt;em&gt;plans&lt;/em&gt; to be all these &amp;ldquo;less than optimal&amp;rdquo; things (I&amp;rsquo;m really struggling to find positive words 😄) but
as the organization grows, there is bound be some inefficiencies. Teams must be broken into smaller units, adding levels of management
and additional communications. Some of these could be addressed by willing managers within their &amp;ldquo;sphere of influence&amp;rdquo;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; but most things
aren&amp;rsquo;t within their control.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Even few people who were &amp;ldquo;let go&amp;rdquo; due to performance reasons were real smart people with good engineering skills.
I think if it was not fully remote setup, some of them could have done better. Sometimes juniors need a
little hand-holding (not spoon feeding) and they can shine. Alas! That did not happen.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;After so many years, I feel confident that I can get a &amp;ldquo;working&amp;rdquo; code in most of the languages, even the ones I don&amp;rsquo;t know before starting the work, within couple of weeks.
But I would rather learn the new language till I feel comfortable, and not be bogged down by the deadlines to deliver working code.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;One manager from other squad replaced the daily stand up with written updates. He shows up for the daily stand up, and anyone who is &amp;ldquo;stuck&amp;rdquo; can join and discuss/seek help. 👏&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Why I switched to Zellij</title>
        <link>https://microblog.desipenguin.com/post/zellij/</link>
        <pubDate>Sat, 24 Feb 2024 22:33:15 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zellij/</guid>
        <description>&lt;p&gt;I had tried switching to &lt;code&gt;tmux&lt;/code&gt; for local shell sessions in past, but never
truly understood why I might need it.&lt;/p&gt;
&lt;p&gt;I extensively used &lt;code&gt;tmux&lt;/code&gt; for remote sessions. But why might I need it locally ?&lt;/p&gt;
&lt;p&gt;Then slowly I stopped using &lt;code&gt;tmux&lt;/code&gt; and switched to &lt;code&gt;wezterm&lt;/code&gt; which provided
multiple tabs.&lt;/p&gt;
&lt;p&gt;Fast-forward several years later.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/oxidise-your-life/&#34;&gt;Recently&lt;/a&gt; I came across Zellij. I decided to give it a go.&lt;/p&gt;
&lt;p&gt;When I had tried &lt;code&gt;tmux&lt;/code&gt; it took some time to get used to the keybinding.&lt;/p&gt;
&lt;p&gt;Not so with Zellij&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. The keybindings are always shown just below the window.
So learning them wasn&amp;rsquo;t difficult, plus one can always look it up. It is right there 😊&lt;/p&gt;
&lt;p&gt;But that was not enough.&lt;/p&gt;
&lt;p&gt;What blew my mind, and made me switch was that&lt;/p&gt;
&lt;p&gt;It remembers sessions even after I&amp;rsquo;ve exited from the session.🤯&lt;/p&gt;
&lt;p&gt;At first, it was confusing, but later I noticed how powerful that is.&lt;/p&gt;
&lt;p&gt;It also remembered that I was running &lt;code&gt;hx&lt;/code&gt; in that session when I exited.&lt;/p&gt;
&lt;p&gt;When reattached (we can reattach even to dead session, unlike tmux) it showed &lt;code&gt;Waiting to run &#39;hx&#39;&lt;/code&gt; and options like &lt;code&gt;Press Enter to run &#39;hx&#39;&lt;/code&gt; and &lt;code&gt;Esc to drop to shell&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;How cool is that. 😎&lt;/p&gt;
&lt;h2 id=&#34;configuring-zellij&#34;&gt;Configuring Zellij&lt;/h2&gt;
&lt;p&gt;Zellij switched to KDL recently (Earlier it used YAML like everyone else)&lt;/p&gt;
&lt;p&gt;Creating initial file is easy.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir ~/.config/zellij
zellij setup --dump-config &amp;gt; ~/.config/zellij/config.kdl
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since KDL is also a text format, updating it isn&amp;rsquo;t a problem.&lt;/p&gt;
&lt;p&gt;The auto generated file comes with loads of comments and commented config&lt;/p&gt;
&lt;p&gt;One can just uncomment appropriate sections and that is it.&lt;/p&gt;
&lt;p&gt;TBH, I didn&amp;rsquo;t need to setup my config till I needed to set theme for Zellij&lt;/p&gt;
&lt;p&gt;Define theme colors in the &lt;code&gt;config.kdl&lt;/code&gt; file like shown &lt;a href=&#34;https://zellij.dev/documentation/themes#hexadecimal-color-themes&#34;&gt;here&lt;/a&gt;
then specify the theme in the config file as &lt;code&gt;theme &amp;quot;nord&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For now, I&amp;rsquo;m quite happy with Zellij.&lt;/p&gt;
&lt;p&gt;Usually, I&amp;rsquo;ll have a few sessions defined one per project.&lt;/p&gt;
&lt;p&gt;Any of the sessions can be easily detached, or exited (as well as restarted
if/when required. So no need to keep them running, unless you really need to
switch between projects.)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Zellij means tiles in some Arabic language&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How I generated 2000 parallel requests using nu-shell</title>
        <link>https://microblog.desipenguin.com/post/parallel-req-nu-shell/</link>
        <pubDate>Tue, 20 Feb 2024 23:25:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/parallel-req-nu-shell/</guid>
        <description>&lt;p&gt;At work, I need to load test new framework I had deployed.&lt;/p&gt;
&lt;p&gt;Usually, I work with QA team. They use JMeter (with Azure Load test) for such task.&lt;/p&gt;
&lt;p&gt;But today, the QA person was busy with other tasks, and I didn&amp;rsquo;t want to get blocked.&lt;/p&gt;
&lt;p&gt;Since I am learning rust, (nu-shell is built in rust) I remembered that it may
be possible to run parallel requests in nu-shell.&lt;/p&gt;
&lt;p&gt;and it is!&lt;/p&gt;
&lt;p&gt;The important feature is &lt;code&gt;par-each&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; which executes the command parallely.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http&lt;/code&gt; &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; is built-in command for HTTP operations&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1..2000 | wrap i |par-each &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;http post &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;https://my.url/path?param=4&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --headers &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;Authorization &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;Basic xxxx&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; --full&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;.status  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Read &lt;code&gt;par-each&lt;/code&gt; documentation &lt;a href=&#34;https://www.nushell.sh/commands/docs/par-each.html&#34;&gt;here&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;code&gt;http&lt;/code&gt; &lt;a href=&#34;http://www.nushell.sh/commands/docs/http.html&#34;&gt;documentation&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/my-mbp-died/</link>
        <pubDate>Sat, 17 Feb 2024 22:38:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/my-mbp-died/</guid>
        <description>&lt;p&gt;My Macbook Pro won&amp;rsquo;t boot anymore :(&lt;/p&gt;
&lt;p&gt;I was watching some Youtube videos in the evening, and then at night, it
just became unresponsive.&lt;/p&gt;
&lt;p&gt;Over the next few days, I tried various options.&lt;/p&gt;
&lt;p&gt;Booted from external USB. Worked!&lt;/p&gt;
&lt;p&gt;Tried Internet Recovery.&lt;/p&gt;
&lt;p&gt;Turns out the SSD is recognised, but can&amp;rsquo;t be fixed/formatted/erased.&lt;/p&gt;
&lt;p&gt;Looks like a hardware issue.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Clippy</title>
        <link>https://microblog.desipenguin.com/post/clippy/</link>
        <pubDate>Thu, 08 Feb 2024 10:49:48 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/clippy/</guid>
        <description>&lt;p&gt;Clippy is a linter for Rust programming language.&lt;/p&gt;
&lt;p&gt;If you are annoyed by the compiler (&lt;del&gt;shouting at&lt;/del&gt; telling you
how your code is wrong), wait till you install and use &lt;code&gt;clippy&lt;/code&gt; 😄&lt;/p&gt;
&lt;p&gt;Jokes apart, why I want to use clippy is it tells us about idiomatic rust
and can autofix issues (if we tell it to do so)&lt;/p&gt;
&lt;p&gt;Couple of fun facts I discovered :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First search result for clippy is not what I was looking for 😄 till I searched for &lt;code&gt;rust clippy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clippy&lt;/code&gt; can not be installed via &lt;code&gt;cargo install&lt;/code&gt; (As I tried initially)
&lt;ul&gt;
&lt;li&gt;(As with rest of the rust ecosystem) there was a helpful error message with solution 😇&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; error: Clippy is no longer available via crates.io
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; help: please run &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;rustup component add clippy-preview&lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt; instead
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Nu Shell</title>
        <link>https://microblog.desipenguin.com/post/nu-shell/</link>
        <pubDate>Sun, 04 Feb 2024 23:23:21 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/nu-shell/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/oxidise-your-life/&#34;&gt;Earlier&lt;/a&gt; I wrote about various utilities written
in &lt;code&gt;rust&lt;/code&gt;. &lt;code&gt;Nu shell&lt;/code&gt; is one of the most important of them (It is an entire shell
after all, not just single utility)&lt;/p&gt;
&lt;h2 id=&#34;installing&#34;&gt;Installing&lt;/h2&gt;
&lt;p&gt;Turns out I had installed nu-shell earlier, but via &lt;a href=&#34;https://microblog.desipenguin.com/post/trying-macports/&#34;&gt;&lt;code&gt;macports&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and I had forgotten about macports (and nu shell)&lt;/p&gt;
&lt;h2 id=&#34;mysterious-upgrade-failure-or-so-i-thought&#34;&gt;Mysterious upgrade failure (Or so I thought)&lt;/h2&gt;
&lt;p&gt;When I installed nu-shell via &lt;code&gt;brew&lt;/code&gt; I got the latest version, but &lt;code&gt;nu&lt;/code&gt; kept invoking older version.&lt;/p&gt;
&lt;p&gt;Little digging revealed, it was being invoked from &lt;code&gt;/opt/local/bin&lt;/code&gt;, which is
not normal location for brew (on Intel macs)&lt;/p&gt;
&lt;p&gt;I tried unlinking and re-linking from &lt;code&gt;brew&lt;/code&gt;, but did not help.&lt;/p&gt;
&lt;h2 id=&#34;mystery-solved&#34;&gt;Mystery solved&lt;/h2&gt;
&lt;p&gt;That is when I somehow remembered that I may have installed it via port.&lt;/p&gt;
&lt;p&gt;Removing port itself took a long time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;port&lt;/code&gt; kept telling me to &lt;code&gt;selfupdate&lt;/code&gt; which kept failing due to permissions issue&lt;/p&gt;
&lt;p&gt;finally I decided to remove everything including macports itself.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://guide.macports.org/chunked/installing.macports.uninstalling.html#installing.macports.uninstalling.users&#34;&gt;These&lt;/a&gt; instructions helped.&lt;/p&gt;
&lt;p&gt;I still am unable to remove &lt;code&gt;/opt/local/var/*&lt;/code&gt; - I keep getting &lt;code&gt;Permission denied&lt;/code&gt; (I&amp;rsquo;ve given up, for now. May be next reboot will solve the problem)&lt;/p&gt;
&lt;h2 id=&#34;starship&#34;&gt;Starship&lt;/h2&gt;
&lt;p&gt;So finally I got latest nu shell working. Turns out the prompt is ugly.
But who customizes prompts these days when they can use starship (which works
across shells - so same look and feel is available across shells)&lt;/p&gt;
&lt;p&gt;The instructions were straight forward, but I kept getting error around &lt;code&gt;let-env&lt;/code&gt; in the &lt;code&gt;init.nu&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Turns out &lt;a href=&#34;https://github.com/starship/starship/issues/5662&#34;&gt;I&amp;rsquo;m not the only one&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To be fair, once you have a stable config, that is tweaked to your liking one does not
keep updating the tools (At least, I don&amp;rsquo;t. That is why my emacs/doom is not updated
for 6 months at a time. Same was the case with starship)&lt;/p&gt;
&lt;p&gt;Anyway, problem identified is problem solved 😉&lt;/p&gt;
&lt;p&gt;So now I have good looking prompt. I can start using nu shell.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Oxidise Your Life</title>
        <link>https://microblog.desipenguin.com/post/oxidise-your-life/</link>
        <pubDate>Sun, 04 Feb 2024 12:04:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/oxidise-your-life/</guid>
        <description>&lt;p&gt;This youtube video mentions the following tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;exa&lt;/li&gt;
&lt;li&gt;bat&lt;/li&gt;
&lt;li&gt;zellij&lt;/li&gt;
&lt;li&gt;mprocs&lt;/li&gt;
&lt;li&gt;ripgrep&lt;/li&gt;
&lt;li&gt;irust&lt;/li&gt;
&lt;li&gt;bacon&lt;/li&gt;
&lt;li&gt;cargo-info&lt;/li&gt;
&lt;li&gt;ncspot&lt;/li&gt;
&lt;li&gt;porsmo&lt;/li&gt;
&lt;li&gt;speedtest-rs&lt;/li&gt;
&lt;li&gt;rtx-cli&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of these I installed zellij, which is replacement for tmux (or screen)&lt;/p&gt;
&lt;p&gt;I also installed mprocs, irust&lt;/p&gt;
&lt;p&gt;I already have ripgrep&lt;/p&gt;
&lt;p&gt;I had tried &lt;code&gt;exa&lt;/code&gt; and &lt;code&gt;bat&lt;/code&gt; in past, they are good but novelty item.&lt;/p&gt;
&lt;p&gt;Installing &lt;code&gt;bacon&lt;/code&gt; failed during the compile step :(&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also installed nu-shell&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll write about nu-shell &lt;a href=&#34;https://microblog.desipenguin.com/post/nu-shell/&#34;&gt;separately&lt;/a&gt;, after giving it enough time&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 9 (Testing)</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-9/</link>
        <pubDate>Sat, 03 Feb 2024 22:01:26 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-9/</guid>
        <description>&lt;p&gt;I continued reading
&lt;a href=&#34;https://rust-cli.github.io/book/index.html&#34;&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Learnt that testing is easy. Any function that has &lt;code&gt;#[test]&lt;/code&gt; above it, will be
found (across any files) and used by &lt;code&gt;cargo test&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Couple of interesting crates :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://crates.io/crates/exitcode&#34;&gt;exitcode&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;It has quite well defined exit codes. They come from FreeBSD&lt;/li&gt;
&lt;li&gt;I wish other languages / frameworks had something similar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.rs/proptest&#34;&gt;proptest&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;is a property testing framework&lt;/li&gt;
&lt;li&gt;Based on python&amp;rsquo;s &lt;a href=&#34;https://hypothesis.readthedocs.io/en/latest/index.html&#34;&gt;Hypothesis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I need to spend time actually trying this&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://crates.io/crates/human-panic&#34;&gt;human-panic&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Generates report file on &lt;code&gt;panic&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Shows nice (if a bit long) message to the user, asking them to (optionally)
email the report file to the developer 🤯&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Things to explore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write code across files.
&lt;ul&gt;
&lt;li&gt;So far my code is contained within &lt;code&gt;src/main.rs&lt;/code&gt; 😄&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Then move the tests in a separate files.&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 8</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-8/</link>
        <pubDate>Tue, 30 Jan 2024 22:29:48 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-8/</guid>
        <description>&lt;p&gt;Today I started reading
&lt;a href=&#34;https://rust-cli.github.io/book/index.html&#34;&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even though I have not finished reading &amp;ldquo;the book&amp;rdquo;, I am (by now) familiar with
enough rust code that reading this book was kinda refreshing.&lt;/p&gt;
&lt;p&gt;Few important things I picked up :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{:?}&lt;/code&gt; in &lt;code&gt;println!&lt;/code&gt; is called debug representation
(quite useful for .. debugging 😄)&lt;/li&gt;
&lt;li&gt;Custom data types can add support for &lt;code&gt;{:?}&lt;/code&gt; for debugging and logging,
one needs to add a &lt;code&gt;#[derive(Debug)&lt;/code&gt; above their definition. (Not tried it yet)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;m gonna convert my &amp;ldquo;Temparature Converter&amp;rdquo; assignment using the stuff I
learnt in this book&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 7</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-7/</link>
        <pubDate>Mon, 29 Jan 2024 09:15:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-7/</guid>
        <description>&lt;p&gt;&lt;em&gt;Technically this may be more like day 8 or 9, cause I did read some stuff
from the rust book in last few days, and made note
&lt;a href=&#34;https://pkm.desipenguin.com/programming/rust/rust/&#34;&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nothing improves your understanding better than &lt;strong&gt;doing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;ndash; Me 😄&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I was trying &lt;code&gt;accessing the individual fields in tuple struct using dot notation via the index&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Since the rust book does not have an example of it, I used
&lt;a href=&#34;https://play.rust-lang.org/&#34;&gt;rust playground&lt;/a&gt; (Awesome resource BTW) and
just printed stuff.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// struct Color(i32, i32, i32);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Point&lt;/span&gt;(&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;// let black = Color(0, 0, 0);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;origin&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Point(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;origin.&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;While this worked, I got the following long warning by the compiler&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--&amp;gt; src/main.rs:2:14
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; | struct Point&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;i32, i32, i32&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |        ----- ^^^  ^^^
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |        |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |        fields in this struct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; note: &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#[warn(dead_code)]` on by default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;help: consider changing the fields to be of unit &lt;span style=&#34;color:#a2f&#34;&gt;type&lt;/span&gt; to suppress this warning &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;while&lt;/span&gt; preserving the field numbering, or remove the fields
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; | struct Point&lt;span style=&#34;color:#666&#34;&gt;(()&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;()&lt;/span&gt;, i32&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |              ~~  ~~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It took me some time to get this. At first, I thought this was an error.
(When I read carefully, I realized it is only a warning)&lt;/p&gt;
&lt;p&gt;Turns out it was telling me about &lt;em&gt;unused&lt;/em&gt; data 😄&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t clear to me (at least) 🤷‍♂&lt;/p&gt;
&lt;p&gt;Then I printed all three fields, and the error went away 🎉&lt;/p&gt;
&lt;p&gt;(and I learnt that indices are zero based - ha ha)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 6 (Ownership)</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-6/</link>
        <pubDate>Wed, 24 Jan 2024 16:46:03 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-6/</guid>
        <description>&lt;p&gt;When I started reading about Ownership, I was thinking&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have done C. I understand memory&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;But Rust book explains :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you are familiar with systems programming, you might think of memory at
a low level like &amp;ldquo;memory is an array of bytes&amp;rdquo; or &amp;ldquo;memory is the pointers
I get back from malloc&amp;rdquo;.
..
The low-level model is too concrete to explain how Rust works.
Rust does not allow you to interpret memory as an array of bytes, for instance.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Reading further, I&amp;rsquo;m so glad rust does not allow &amp;ldquo;manual memory management&amp;rdquo;
(like &lt;code&gt;malloc&lt;/code&gt; and &lt;code&gt;free&lt;/code&gt; in C)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Learnt about &lt;a href=&#34;https://rust-book.cs.brown.edu/ch04-01-what-is-ownership.html#cloning-avoids-moves&#34;&gt;Cloning avoids Moves&lt;/a&gt;
Useful when we need to reference the &amp;ldquo;original&amp;rdquo; data after it the ownership is moved&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.clone&lt;/code&gt; create a copy (which is used to move the oownership,leaving the original intact)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Logseq : Take 2</title>
        <link>https://microblog.desipenguin.com/post/logseq-take-2/</link>
        <pubDate>Mon, 22 Jan 2024 22:48:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/logseq-take-2/</guid>
        <description>&lt;p&gt;I wrote about &lt;a href=&#34;https://microblog.desipenguin.com/post/logseq/&#34;&gt;logseq&lt;/a&gt; almost two years &lt;a href=&#34;https://microblog.desipenguin.com/post/dynalist-to-logseq/&#34;&gt;ago&lt;/a&gt;
and then I think when I switched job, I stopped using logseq.&lt;/p&gt;
&lt;p&gt;When I updated macOS, I forgot to install it, and forgot about it overall
(I started using &lt;code&gt;denote&lt;/code&gt; - in Emacs for some time)&lt;/p&gt;
&lt;p&gt;Recently when I started using &lt;a href=&#34;https://microblog.desipenguin.com/post/obsidian/&#34;&gt;obsidian&lt;/a&gt; while trying l learn
more about it, I came across logseq again.&lt;/p&gt;
&lt;p&gt;I tried it again (after 2 years)&lt;/p&gt;
&lt;p&gt;I spent time learning basics (again)&lt;/p&gt;
&lt;p&gt;This time I learnt about &lt;code&gt;Properties&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I installed some plugins.&lt;/p&gt;
&lt;p&gt;Initially I installed too many.&lt;/p&gt;
&lt;p&gt;Then removed them all. 😄&lt;/p&gt;
&lt;p&gt;Now I have only 4 plugins.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Access Google Bard via API</title>
        <link>https://microblog.desipenguin.com/post/bard_api/</link>
        <pubDate>Sun, 21 Jan 2024 18:07:51 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bard_api/</guid>
        <description>&lt;p&gt;Yesterday, I was trying to access Bard API via Rust&lt;/p&gt;
&lt;p&gt;The task is WIP because :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I&amp;rsquo;m still learning Rust (Although on &lt;a href=&#34;https://microblog.desipenguin.com/post/100-days-of-rust-day-5/&#34;&gt;Day 5&lt;/a&gt;
I was able to access a URL from rust code)&lt;/li&gt;
&lt;li&gt;I didn&amp;rsquo;t know how to access Bard API&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It started with a Youtube video that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses python code which uses &lt;code&gt;Bard&lt;/code&gt; library
&lt;ul&gt;
&lt;li&gt;Not sure if it is official one or third party one&lt;/li&gt;
&lt;li&gt;In either case it won&amp;rsquo;t be directly useful in rust code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Uses a hack to get session cookie from browser (which will expire sooner or later)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At that time, I didn&amp;rsquo;t know whether Google has made Bard API accessible via an API&lt;/p&gt;
&lt;p&gt;Turns out, they have!&lt;/p&gt;
&lt;p&gt;There used to be a waitlist - that URL is now &lt;code&gt;404&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Instead &lt;a href=&#34;https://makersuite.google.com/&#34;&gt;https://makersuite.google.com/&lt;/a&gt; takes you to &lt;a href=&#34;https://makersuite.google.com/app/prompts/new_freeform&#34;&gt;https://makersuite.google.com/app/prompts/new_freeform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On the left panel, first item is &lt;strong&gt;Get the API Key&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Select &lt;code&gt;Develop in your own environment&lt;/code&gt; (Assuming you are doing this for personal project like myself)&lt;/p&gt;
&lt;p&gt;Needless to say, copy the key and keep it safe.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;ve listed the following as a sample. (Add your API key &lt;strong&gt;after&lt;/strong&gt; &lt;code&gt;key=&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl &lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;  -H &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;  -d &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;{&amp;#34;contents&amp;#34;:[{&amp;#34;parts&amp;#34;:[{&amp;#34;text&amp;#34;:&amp;#34;Write a story about a magic backpack&amp;#34;}]}]}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;  -X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Don&amp;rsquo;t commit to VCS by accident. Additional commit to remove it does not really make it &amp;ldquo;go away&amp;rdquo;. It is available in older versions 😄&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 5</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-5/</link>
        <pubDate>Sat, 20 Jan 2024 07:40:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-5/</guid>
        <description>&lt;p&gt;I want to access Bard API via Rust, but it will take some time.&lt;/p&gt;
&lt;p&gt;Here are the things I did today.&lt;/p&gt;
&lt;p&gt;First, I tried (successfully) to access an URL via Rust code. ✅&lt;/p&gt;
&lt;p&gt;I used the &lt;code&gt;reqwest&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;I just added this dependency in my &lt;code&gt;Cargo.toml&lt;/code&gt; and (like in other languages)
the dependency hell was let loose 😄&lt;/p&gt;
&lt;p&gt;67 other modules were added to the &lt;code&gt;Cargo.lock&lt;/code&gt;!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I also learnt to use global variables in Rust.&lt;/p&gt;
&lt;p&gt;I used &lt;code&gt;const&lt;/code&gt; (Read the documentation &lt;a href=&#34;https://doc.rust-lang.org/reference/const_eval.html&#34;&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Obviously, it is not as straight forward.&lt;/p&gt;
&lt;p&gt;See this &lt;a href=&#34;https://uploads.sitepoint.com/wp-content/uploads/2021/06/1624192569flowchart.png&#34;&gt;flowchart&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sitepoint.com/rust-global-variables/&#34;&gt;Here&lt;/a&gt; is the detailed article.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/100-days-of-rust-day-halted/</link>
        <pubDate>Mon, 15 Jan 2024 22:38:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/100-days-of-rust-day-halted/</guid>
        <description>&lt;p&gt;Due to death in my family, &amp;ldquo;100 days of Rust&amp;rdquo; is halted.
I&amp;rsquo;ll continue it soon.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 4</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-4/</link>
        <pubDate>Sat, 13 Jan 2024 22:14:35 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-4/</guid>
        <description>&lt;p&gt;Started with (optional) assignment at the end of &amp;ldquo;Programming Concept&amp;rdquo;
chapter : Convert temperature between Celsius and Fahreinheit. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Since the algorithm itself is not part of the learning the language, I asked
Google Bard about the formula.&lt;/p&gt;
&lt;p&gt;It was nice working on some code after a while (Aside from work, I mean)&lt;/p&gt;
&lt;p&gt;Once again, I realized that compiler is very helpful 😍&lt;/p&gt;
&lt;p&gt;I started simple.&lt;/p&gt;
&lt;p&gt;Breaking down functionality into smaller functions. (Makes me think of unit
testing them. Note to self : Read up about unit testing in rust)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I learnt about handling default case in &lt;code&gt;match&lt;/code&gt;&lt;/strong&gt;. (Once again, I asked Bard)&lt;/p&gt;
&lt;p&gt;Why did I need default case ? Cause the compiler told me that I need one 😄&lt;/p&gt;
&lt;p&gt;I also learnt :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;that unused/ignored return value can be stored in &lt;code&gt;_&lt;/code&gt; (like python and ruby)&lt;/li&gt;
&lt;li&gt;numeric data types like integer and floats can not be mixed. If you want result in &lt;code&gt;float&lt;/code&gt;, everything &lt;em&gt;must&lt;/em&gt; be float. Respect!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Code available on &lt;a href=&#34;https://github.com/mandarvaze/learning-rust/tree/main/temparature&#34;&gt;github&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 3</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-3/</link>
        <pubDate>Fri, 12 Jan 2024 21:46:17 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-3/</guid>
        <description>&lt;p&gt;Today I finished &lt;code&gt;Functions&lt;/code&gt; and &lt;code&gt;Control Flow&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;While these are not new &amp;ldquo;concepts&amp;rdquo; for me, one always learns something new
when learning a new language.&lt;/p&gt;
&lt;p&gt;Two things I learnt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I liked the fact that rust does not evaluate anything other than boolean
as &lt;code&gt;truthy&lt;/code&gt; like both python and ruby&lt;/li&gt;
&lt;li&gt;loop can have labels, and can be used with &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt; to
indicate where should the execution continue&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 2</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-2/</link>
        <pubDate>Thu, 11 Jan 2024 19:39:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-2/</guid>
        <description>&lt;p&gt;Today I started with &lt;code&gt;Data Types&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While most of it is intuitive, it is useful to go over the documentation.&lt;/p&gt;
&lt;p&gt;e.g. For &lt;code&gt;tuple&lt;/code&gt;, I had expected that to access specific index, syntax would be &lt;code&gt;mytuple[0]&lt;/code&gt;.
&lt;code&gt;mytuple.0&lt;/code&gt; was not I had expected.&lt;/p&gt;
&lt;p&gt;I also tried to print the tuple.&lt;/p&gt;
&lt;p&gt;In the process, I learnt about pretty printing only from the compiler errors.&lt;/p&gt;
&lt;p&gt;The compiler errors are so descriptive 😍&lt;/p&gt;
&lt;p&gt;Here is the code in case you are interested&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;let&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;x: (&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;i32&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;f64&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0b0;font-weight:bold&#34;&gt;u8&lt;/span&gt;)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;500&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6.4&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;println!&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{:#?}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;,x)&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 1</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-1/</link>
        <pubDate>Wed, 10 Jan 2024 23:15:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-1/</guid>
        <description>&lt;p&gt;Today I finished the &lt;code&gt;Number guessing game&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;During the early part of the code, my mind started thinking &amp;ldquo;How will comparing
string input from the user, work with a number? 🤔&amp;rdquo; (💪 of having gone through
such issues numerous times over the years)&lt;/p&gt;
&lt;p&gt;Of course, it was explained later.&lt;/p&gt;
&lt;p&gt;I was a bit disappointed that the code &lt;code&gt;panic&lt;/code&gt;ed upon entering non-number 😞
especially after the &lt;code&gt;expect&lt;/code&gt; clause.&lt;/p&gt;
&lt;p&gt;Turns out that is expected behaviour.&lt;/p&gt;
&lt;p&gt;The code will still panic, but &lt;code&gt;expect&lt;/code&gt; helps the (end) user with slightly
better error message&lt;/p&gt;
&lt;p&gt;I also made changes in the &lt;code&gt;loop&lt;/code&gt; section, that led to an error, which I was
able to resolve (more based on the intuition, rather than logic 😅)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Initially I used &lt;code&gt;nvim&lt;/code&gt; ( I was mostly copying the code from the book,
and/or making minor edits) but soon realized that &lt;a href=&#34;https://microblog.desipenguin.com/tags/helix/&#34;&gt;helix editor&lt;/a&gt;
is better suited for rust development.&lt;/p&gt;
&lt;p&gt;So set it up.&lt;/p&gt;
&lt;p&gt;Getting LSP working took tinkering with &lt;code&gt;languages.toml&lt;/code&gt; , but got it working!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>100 Days of Rust : Day 0</title>
        <link>https://microblog.desipenguin.com/post/100-days-of-rust-day-0/</link>
        <pubDate>Tue, 09 Jan 2024 23:02:03 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/100-days-of-rust-day-0/</guid>
        <description>&lt;p&gt;In this new year, I have decided to learn &lt;code&gt;rust&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;All my recent experience has been in dynamic languages (90% python, 10% ruby)&lt;/p&gt;
&lt;p&gt;But I started my software development career in &lt;code&gt;C&lt;/code&gt;, and did that for probably
10 years. So I&amp;rsquo;m not new to compiled languages.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; But things have changed a lot
(for the better) in these years.&lt;/p&gt;
&lt;p&gt;Additionally, &lt;code&gt;rust&lt;/code&gt; is getting a lot of attention from bigwigs like MS.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;On Day 0, I set up the rust tool chain and went through the &lt;code&gt;Hello world&lt;/code&gt;
program.&lt;/p&gt;
&lt;p&gt;Nothing much, but at least got started.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I came across some youtube video explaining &lt;code&gt;rust&lt;/code&gt; to JS programmers,
and it started with &amp;ldquo;Program needs to be compiled before it is executed 😄&amp;rdquo;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Obsidian.nvim plugin</title>
        <link>https://microblog.desipenguin.com/post/obsidian_nvim_plugin/</link>
        <pubDate>Tue, 09 Jan 2024 21:05:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/obsidian_nvim_plugin/</guid>
        <description>&lt;p&gt;After using vim keybindings inside Obsidian, I came across &lt;a href=&#34;https://github.com/epwalsh/obsidian.nvim&#34;&gt;obsidian.nvim&lt;/a&gt; plugin
that makes working with Obsidian from inside Neovim pleasurable.&lt;/p&gt;
&lt;p&gt;This is definitely better than vim keybindings in Obsidian &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But I had not not used neovim in a long time. After I upgraded to &lt;a href=&#34;https://microblog.desipenguin.com/post/upgrade-to-monterey/&#34;&gt;Monterey&lt;/a&gt;,
I had not installed neovim again.&lt;/p&gt;
&lt;p&gt;So getting it (as in neovim) was a bit of work. But I had my old config saved, so at least I didn&amp;rsquo;t have
to start from the ground floor. (On the other hand, having old/out dated config could be worse than starting
from the ground floor 😄)&lt;/p&gt;
&lt;p&gt;Then getting the plugin working (with my &lt;code&gt;Neovim from scratch&lt;/code&gt; config) was some more work.&lt;/p&gt;
&lt;p&gt;But I got it working.&lt;/p&gt;
&lt;p&gt;Getting &lt;code&gt;:ObsidianToday&lt;/code&gt; working in &lt;code&gt;nvim&lt;/code&gt; was a great feeling&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Other than &lt;code&gt;evil-mode&lt;/code&gt; in Emacs, vim emulation in every single editor leaves a lot to be desired.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Obsidian has vim keybindings</title>
        <link>https://microblog.desipenguin.com/post/obsidian_vim_keybindings/</link>
        <pubDate>Fri, 05 Jan 2024 23:05:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/obsidian_vim_keybindings/</guid>
        <description>&lt;p&gt;Today I discovered that Obsidian supports vim style keybindings out of the box.&lt;/p&gt;
&lt;p&gt;But it knows that vim is not for everyone.&lt;/p&gt;
&lt;p&gt;So it checks whether you know what you are doing (when you enable the setting,
which is OFF by default) by having you enter a command in a pop up 😄&lt;/p&gt;
&lt;p&gt;TBH, one can easily find out that command and &amp;ldquo;cheat&amp;rdquo;.
On the other hand, if you don&amp;rsquo;t know vim, and still want to turn on the
setting (by cheating) - you deserve what you get 😄&lt;/p&gt;
&lt;p&gt;In case you don&amp;rsquo;t know, you can enable it from the &lt;code&gt;Editor&lt;/code&gt; section of the settings.&lt;/p&gt;
&lt;p&gt;So far most things I use (from muscle memory) have worked so far.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Two other things related to using vim style editing in Obsidian are :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Turn ON the line numbering.&lt;/li&gt;
&lt;li&gt;Install and use community plugin named &lt;code&gt;Relative Line numbering&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;I&amp;rsquo;ve also installed &lt;code&gt;MAKE.md&lt;/code&gt; plugin (more about it later) which adds &lt;code&gt;/&lt;/code&gt; commands
for easy editing.&lt;/p&gt;
&lt;p&gt;When using vim keybindings, it works only in &lt;code&gt;insert&lt;/code&gt; mode (as it should)
Otherwise &lt;code&gt;/&lt;/code&gt; invokes search, as it does in vim&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Obsidian</title>
        <link>https://microblog.desipenguin.com/post/obsidian/</link>
        <pubDate>Tue, 02 Jan 2024 23:45:22 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/obsidian/</guid>
        <description>&lt;p&gt;Obsidian is not new to me. I come across it from time to time, but never paid much attention.&lt;/p&gt;
&lt;p&gt;That changed when I &lt;a href=&#34;https://microblog.desipenguin.com/post/new-pkm-site/&#34;&gt;migrated&lt;/a&gt; my PKM site to use Obsidian-zola.&lt;/p&gt;
&lt;p&gt;Technically, it use Zola, and has nothing to do with Obsidian (for Publishing)&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;source&amp;rdquo; is maintained in Obsidian, but it is just collection of markdown files, which can easily be
maintained outside.&lt;/p&gt;
&lt;p&gt;But then I got Obsidian desktop installed. I used it for making minor edits to markdown files.&lt;/p&gt;
&lt;p&gt;But not much.&lt;/p&gt;
&lt;p&gt;Recently, I came across Obsidian plugin called &lt;code&gt;Advanced Slides&lt;/code&gt;, and down the rabbit hole I went 😄&lt;/p&gt;
&lt;p&gt;There are (as of this writing) 1300+ community plugins. Lot of them (statisticially speaking) must be unmaintained.&lt;/p&gt;
&lt;p&gt;So when installing a community plugin, I check &lt;code&gt;last updated&lt;/code&gt; date. If it is &amp;gt; 1 year, it is probably stale.&lt;/p&gt;
&lt;p&gt;Something that is updated within months, is better.&lt;/p&gt;
&lt;p&gt;I came across some good ones (I think)&lt;/p&gt;
&lt;p&gt;Currently, I&amp;rsquo;m exploring Plugin called ExcaliBrain.&lt;/p&gt;
&lt;p&gt;And before I forget, Happy New Year 2024 to you and your family.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;My first post of 2024&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>New Car</title>
        <link>https://microblog.desipenguin.com/post/new-car/</link>
        <pubDate>Fri, 10 Nov 2023 00:02:43 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/new-car/</guid>
        <description>&lt;p&gt;Today we purchased a new car!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you (Here I assume you are congratulating me 😄)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It is a great feeling.&lt;/p&gt;
&lt;p&gt;Some quick thoughts (in random order)&lt;/p&gt;
&lt;p&gt;The process took about 2 hours, even though we were waiting just 10 minutes for our turn.&lt;/p&gt;
&lt;p&gt;Tomorrow onward there will be a lot of rush due to Diwali&lt;/p&gt;
&lt;p&gt;Kids got bored towards the end, when the executive was giving me the demo/explaning the features.&lt;/p&gt;
&lt;p&gt;My sister-in-law&amp;rsquo;s family left (their 5 year old got cranky after waiting around so much)&lt;/p&gt;
&lt;p&gt;This is our second car after 15+ years.&lt;/p&gt;
&lt;p&gt;Technology has changed a LOT.&lt;/p&gt;
&lt;p&gt;Our version (or may be all cars these days) has digital dashboard.&lt;/p&gt;
&lt;p&gt;When we were refuelling (first thing after we got out of the dealership premises)
the dashboard showed animation of fuel getting filled (liquid level increasing)
rather than mechanical indicator going up (in our old car)&lt;/p&gt;
&lt;p&gt;This time we went to automated transmission&lt;/p&gt;
&lt;p&gt;Last time I had driven one was in US, about 20+ years ago&lt;/p&gt;
&lt;p&gt;and it was a norm there.&lt;/p&gt;
&lt;p&gt;My car in US had all the features (except digital display and phone pairing) that
we have now, including cruise control.&lt;/p&gt;
&lt;p&gt;Our model has key less entry and push button start.&lt;/p&gt;
&lt;p&gt;So there is no real &amp;ldquo;key&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;It is just a electronic key fob that was remote open functionality.&lt;/p&gt;
&lt;p&gt;Car talks a lot 😄&lt;/p&gt;
&lt;p&gt;Seriously.&lt;/p&gt;
&lt;p&gt;Due to all the newness (Although I didn&amp;rsquo;t fumble switching to auto transmission)
one is still cautious/extra alert.&lt;/p&gt;
&lt;p&gt;and the car wants to talk to you.&lt;/p&gt;
&lt;p&gt;I was able to ignore the audio alerts, still&amp;hellip;&lt;/p&gt;
&lt;p&gt;When we reached home, I though I turned off the car (There is no key), and as
I was getting out, car started shouting &lt;em&gt;key not found&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What?&lt;/p&gt;
&lt;p&gt;Then I pressed the start/stop button once more, little harder.&lt;/p&gt;
&lt;p&gt;That was the &amp;ldquo;power off&amp;rdquo; (to borrow the term from computing)&lt;/p&gt;
&lt;p&gt;Here is what our car looks like, if you are curious&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cars.tatamotors.com/images/punch/colors/meteor-bronze-thumb.jpg&#34; alt=&#34;This is from company&amp;rsquo;s site&#34;&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>M-x butterfly</title>
        <link>https://microblog.desipenguin.com/post/mx-butterly/</link>
        <pubDate>Fri, 03 Nov 2023 22:39:22 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/mx-butterly/</guid>
        <description>&lt;p&gt;It started with a post on &lt;code&gt;Emacs Stories&lt;/code&gt; Telegram group.
Someone posted a pretty picture with Emacs-logo-on-a-butterfly and a comment &lt;code&gt;M-x butterfly&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But the actual command  &lt;code&gt;M-x butterfly&lt;/code&gt; is boring (to me at least)&lt;/p&gt;
&lt;p&gt;I wanted the nice image.&lt;/p&gt;
&lt;p&gt;Some nice soul on the group directed me to &lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Mx-butterfly.svg&#34;&gt;this page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First I changed the icon of my &lt;del&gt;doom&lt;/del&gt; emacs to this image.&lt;/p&gt;
&lt;p&gt;I followed &lt;a href=&#34;https://www.idownloadblog.com/2023/01/19/how-to-change-app-icons-mac/&#34;&gt;these&lt;/a&gt; instructions.&lt;/p&gt;
&lt;p&gt;No immediate success.&lt;/p&gt;
&lt;p&gt;Because, I have Emacs installed from &lt;code&gt;brew&lt;/code&gt;, so one in &lt;code&gt;/Applications&lt;/code&gt; folder is a symlink to the actual file in &lt;code&gt;/opt/..&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So initially the instructions did not work, until I opened the real file.&lt;/p&gt;
&lt;p&gt;and then it worked!&lt;/p&gt;
&lt;p&gt;Now I wanted more.&lt;/p&gt;
&lt;p&gt;I have had centaur logo on my Doom dashboard for some time now.
I changed that to that of this butterfly via the following line in &lt;code&gt;config.el&lt;/code&gt; of my Doom emacs&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(setq fancy-splash-image (concat doom-user-dir &amp;quot;misc/Mx-butterfly.png&amp;quot;))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The original image is HUGE.&lt;/p&gt;
&lt;p&gt;So first attempt did not work, until I resized the image to 230x230 (with resolution of 144)&lt;/p&gt;
&lt;p&gt;Butterfly on the Dashboard, butterfly as the icon!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here is an obligatory &lt;a href=&#34;https://xkcd.com/378/&#34;&gt;XKCD comic&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Domain Expired : Moved to Netlify DNS</title>
        <link>https://microblog.desipenguin.com/post/domain-expired-moved-2-netlify/</link>
        <pubDate>Fri, 13 Oct 2023 09:32:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/domain-expired-moved-2-netlify/</guid>
        <description>&lt;p&gt;Last night when I wanted to check this site, but I started getting security error related to certificate.
But it did not say domain expired.&lt;/p&gt;
&lt;p&gt;I know Netlify automatically renews the cerificates, so I was confused.&lt;/p&gt;
&lt;p&gt;But I was too sleepy to troubleshoot.&lt;/p&gt;
&lt;p&gt;This morning, for some reason I checked my other email account which I almost never use except for domain registrar 😄&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Domain has expired&lt;/code&gt; email was smiling at me.&lt;/p&gt;
&lt;p&gt;Once I renewed the domain, using Netlify DNS was relatively straight forward.
Once all sites were &amp;ldquo;transferred&amp;rdquo;, I deleted all the DNS records from Digital Ocean&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Bruno: Local-first Postman Alternative</title>
        <link>https://microblog.desipenguin.com/post/bruno-local-postman-alternative/</link>
        <pubDate>Thu, 12 Oct 2023 23:50:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bruno-local-postman-alternative/</guid>
        <description>&lt;p&gt;I think I came across this tool via Hacker News 🤔. But may be not.
Anyway, it does not matter.&lt;/p&gt;
&lt;p&gt;Why it appealed to me ?&lt;/p&gt;
&lt;p&gt;At work, we have a shared Postman workspace, which often breaks.&lt;/p&gt;
&lt;p&gt;Because anyone and everyone can modify it (which is some times needed)
But then people click the &lt;code&gt;Save&lt;/code&gt; button, because it is easy to 😄&lt;/p&gt;
&lt;p&gt;and now, it is broken for others.&lt;/p&gt;
&lt;p&gt;OK, there is a concept of &lt;code&gt;fork&lt;/code&gt; in Postman, but then everyone has their own fork.&lt;/p&gt;
&lt;p&gt;It is same as &lt;code&gt;git&lt;/code&gt; fork. One has to keep the fork up to date.&lt;/p&gt;
&lt;p&gt;Here comes bruno.&lt;/p&gt;
&lt;p&gt;First thing I liked about it is that we can import from Postman. So that one does not
need to create entire collection from scratch.&lt;/p&gt;
&lt;p&gt;Once imported, it becomes a script/text, which can be version controlled&lt;/p&gt;
&lt;p&gt;Next thing is secrets.&lt;/p&gt;
&lt;p&gt;I have not yet figured out where and how they are stored.
But secrets is one of the reasons, I was attracted to &lt;code&gt;bruno&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With local first, developers are free to use their own passwords on their
machines.&lt;/p&gt;
&lt;p&gt;I was able to get APIs working from Postman to bruno without much friction.&lt;/p&gt;
&lt;p&gt;I did have to create environments from scratch. Not sure why they were not exported by Postman
Maybe because they contain secrets ? 🤔&lt;/p&gt;
&lt;p&gt;But once I added all the variables to &lt;code&gt;Local&lt;/code&gt; environment, I can just copy-and-modify
to create other environments.&lt;/p&gt;
&lt;p&gt;At work we have a LOT of environments (At least 10. Yeah, I know)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll be exploring &lt;code&gt;bruno&lt;/code&gt;&amp;rsquo;s capacities in coming days. Like &lt;code&gt;Bruno CLI&lt;/code&gt;, tests etc.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Uninstalled Instagram</title>
        <link>https://microblog.desipenguin.com/post/uninstalled-instagram/</link>
        <pubDate>Mon, 02 Oct 2023 21:43:12 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/uninstalled-instagram/</guid>
        <description>&lt;p&gt;Few hours ago, I uninstalled Instagram from my phone.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Ironically, earlier today I watched a reel on Instagram saying &amp;ldquo;Instagram is like Chakravyuh, and we are like Abhimanyu. We can go inside, but not come out&amp;rdquo;.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I think &lt;strong&gt;that&lt;/strong&gt; made to take this action.&lt;/p&gt;
&lt;p&gt;I noticed that I had not written much in the entire month of August 2023, and hardly 2 entries in September. While some of it attributes to work pressure, my instagram addiction may be equally responsible.&lt;/p&gt;
&lt;p&gt;As a lot of us know, we start looking at Reels, &amp;ldquo;just for 10 minutes&amp;rdquo; and when we look at the watch, about an hour has passed. I had heard of doom scrolling, but did not know it first hand till Instagram.&lt;/p&gt;
&lt;p&gt;At times, I could observe (as if I am an observer, watching myself) that I &amp;ldquo;decide&amp;rdquo; to stop, and yet after 10 minutes, I&amp;rsquo;m still scrolling.&lt;/p&gt;
&lt;p&gt;No more. 🤞&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;When I mentioned this to my family, my 10 year old was worried. &amp;ldquo;What will happen to the pictures you uploaded ?&amp;rdquo; I told him that I merely uninstalled the app, not remove my account. So I can access my account whenever I want.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;According to Mahabharata,Abhimanyu learned to break into chakravyuha from Krishna while still inside his mother&amp;rsquo;s womb. However, he was unable to hear how to exit the chakravyuha, and this incomplete knowledge later contributed to his demise.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Emacs Bedrock : First impressions</title>
        <link>https://microblog.desipenguin.com/post/emacs-bedrock/</link>
        <pubDate>Sat, 16 Sep 2023 10:31:12 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-bedrock/</guid>
        <description>&lt;p&gt;As mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/emacs-init-dir/&#34;&gt;earlier&lt;/a&gt; I tried new starter kit called Emacs Bedrock.&lt;/p&gt;
&lt;p&gt;Getting started was easy with &lt;code&gt;--init-directory&lt;/code&gt; option in Emacs 29&lt;/p&gt;
&lt;p&gt;I also enabled a few mixins in &lt;code&gt;init.el&lt;/code&gt; as recommended. Especially evil mode.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;*Quick Help*&lt;/code&gt; that shows up at the start is very useful. Especially for someone like myself who is not familiar with native emacs keybindings.&lt;/p&gt;
&lt;p&gt;Enabling evil mode means I can at least edit the text.&lt;/p&gt;
&lt;p&gt;But there are so many thing one does other than editing the text.&lt;/p&gt;
&lt;p&gt;e.g. Opening a file, switching buffers.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m so much used to mnemonic keybindings (Doom, but spacemacs before that) that
I never learnt native emacs keybindings.&lt;/p&gt;
&lt;p&gt;While I could learn emacs keybindings, I don&amp;rsquo;t want to :)&lt;/p&gt;
&lt;p&gt;Should I ? 🤔&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Use different init directory in emacs 29&#43;</title>
        <link>https://microblog.desipenguin.com/post/emacs-init-dir/</link>
        <pubDate>Thu, 07 Sep 2023 09:41:43 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-init-dir/</guid>
        <description>&lt;p&gt;Recently when reading about &lt;a href=&#34;https://sr.ht/~ashton314/emacs-bedrock/&#34;&gt;emacs Bedrock&lt;/a&gt;
I learnt that emacs 29+ has command line option that lets the user pass custom
init directory via &lt;code&gt;emacs --init-directory=MYDIR&lt;/code&gt; option. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This makes it easy to try out different starter kits without touching your stable/working config&lt;/p&gt;
&lt;p&gt;Currently, I use &lt;a href=&#34;https://microblog.desipenguin.com/post/minemacs/&#34;&gt;Minemacs&lt;/a&gt; on my personal machine.
In past I would rename my &lt;code&gt;.emacs.d&lt;/code&gt; to try new config. (Then switch it back)&lt;/p&gt;
&lt;p&gt;This makes things easier.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Refer to &lt;a href=&#34;https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=8eaf04de83fd967c2ab69a4c1dfe44a6a10aa912&#34;&gt;this commit&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Spellcheck in Vi/m</title>
        <link>https://microblog.desipenguin.com/post/spellcheck-in-vi/</link>
        <pubDate>Fri, 28 Jul 2023 12:48:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/spellcheck-in-vi/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been using vi for 20+ years and somehow I didn&amp;rsquo;t know that it has
spell check built in 🤷‍♂&lt;/p&gt;
&lt;p&gt;Enable it by simply &lt;code&gt;:set spell&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now misspelled words are shown in red background &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (depending on the terminal&amp;rsquo;s
capability this might vary - I assume)&lt;/p&gt;
&lt;p&gt;Off course, this is nowhere near full fledged LSP like &lt;code&gt;ltex&lt;/code&gt; which I use with
emacs and helix. &lt;code&gt;ltext&lt;/code&gt; does more than spell check.&lt;/p&gt;
&lt;p&gt;Yet having built-in spell checker is always nice.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Works with vim as well.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Markdown vs Orgmode</title>
        <link>https://microblog.desipenguin.com/post/markdown-vs-orgmode/</link>
        <pubDate>Sun, 16 Jul 2023 09:01:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/markdown-vs-orgmode/</guid>
        <description>&lt;p&gt;My thoughts in the context of &lt;a href=&#34;https://mastodon.social/@danyork/110694878213460306&#34;&gt;this&lt;/a&gt; thread.&lt;/p&gt;
&lt;p&gt;I did try org for some time (initially when I switched to Emacs) as mentioned &lt;a href=&#34;https://pkm.desipenguin.com/about/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But eventually I realized that markdown is more pervasive.&lt;/p&gt;
&lt;p&gt;I am aware that Org is supported outside of Emacs as well.&lt;/p&gt;
&lt;p&gt;But compared to markdown, that is nothing.&lt;/p&gt;
&lt;p&gt;But that is not necessarily the point.&lt;/p&gt;
&lt;p&gt;e.g. When I do code review, most of the git service providers support markdown.
I was surpised that even Azure git supports Markdown (So does gitlab,
probably bitbucket as well, it as been a while since I used bitbucket.)&lt;/p&gt;
&lt;p&gt;I am aware github &lt;em&gt;renders&lt;/em&gt; org formatted files, but I am not sure if supports
org syntax in code review comments.&lt;/p&gt;
&lt;p&gt;As the original thread started, obsidian natively supports markdown (org mode
supported via third party plugin)&lt;/p&gt;
&lt;p&gt;Then there is hugo, blog engine that powers all my blogs. Yes, I&amp;rsquo;m aware hugo
supports org-mode, but markdown is native.&lt;/p&gt;
&lt;p&gt;Then there is aptly named &lt;a href=&#34;https://markdown-here.com/&#34;&gt;Markdown Here&lt;/a&gt; - allows
you to use markdown syntax in most of the browsers. I use this wit gmail
For the most part, my emails do not need any markup, but once in a while, I may
want to emphasis certain word/phrase. Markdown to the rescue.&lt;/p&gt;
&lt;p&gt;Others tools I use that support Markdown : Telegram, Elk (Mastodon client)&lt;/p&gt;
&lt;p&gt;Coming to Emacs ecosystem, I currently use &lt;code&gt;denote&lt;/code&gt; for my notes. It supports
markdown (I think org is  default option - understandably, but it also natively
supports markdown) This is very useful.
Lot of times, I can just remove &lt;code&gt;identifier&lt;/code&gt; from the frontmatter (rename the
file if required) and publish it as-is on my blog.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Argument against markdown is that it is not a &amp;ldquo;standard&amp;rdquo;, but the way I use it
I really just need syntax for italics, bold, headers and bullets. I think
that is the lowest common denominator. Works the same everywhere.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t use GFM (Github flavoured markdown) or any other extensions.
So I&amp;rsquo;m safe (I think)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Respect and Authority</title>
        <link>https://microblog.desipenguin.com/post/respect-authority/</link>
        <pubDate>Thu, 13 Jul 2023 08:36:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/respect-authority/</guid>
        <description>&lt;p&gt;Why do we &amp;ldquo;listen&amp;rdquo; to somebody ?&lt;/p&gt;
&lt;p&gt;Here I do not mean &lt;em&gt;hearing&lt;/em&gt; when I say &lt;em&gt;listen&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I mean obey or follow.&lt;/p&gt;
&lt;p&gt;I think it comes from either respect or authority.&lt;/p&gt;
&lt;p&gt;Authority maybe given by someone else&lt;/p&gt;
&lt;p&gt;e.g. Teacher in school, boss at work, parents at home.&lt;/p&gt;
&lt;p&gt;Lot of times, most people do what these people tell you to do, because of the authority inferred on them.&lt;/p&gt;
&lt;p&gt;Because you are &amp;ldquo;supposed to&amp;rdquo; do what they say.&lt;/p&gt;
&lt;p&gt;This does not last long though.&lt;/p&gt;
&lt;p&gt;Sooner or later you leave the school, move out of your house or change jobs.&lt;/p&gt;
&lt;p&gt;Respect on the other hand is earned.&lt;/p&gt;
&lt;p&gt;You may respect leaders in their field. You may &amp;ldquo;follow&amp;rdquo; them on social media platforms,
read their books/blogs/articles, listen to their podcasts.&lt;/p&gt;
&lt;p&gt;Not because anyone told you to. (Ok, sometimes you read a book because an authority figure told you to, but it does not
have same gains)&lt;/p&gt;
&lt;p&gt;Because you respect them, you are willing to at least try to follow their advise.&lt;/p&gt;
&lt;p&gt;That is why I prefer the term &amp;ldquo;Respected in their field&amp;rdquo; over &amp;ldquo;Leading authority in the field&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I will try to gain respect of my colleagues and my family&lt;/strong&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Third reason why you obey/follow someone is because of &lt;em&gt;fear&lt;/em&gt; .
Sometimes you fear someone because of the authority inferred by someone.
Sometimes it maybe because you are trying to avoid confrontation.&lt;/p&gt;
&lt;p&gt;But sooner or later you&amp;rsquo;ll try to get out of it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Authority is transient, respect is long lasting&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Reason I wrote this is because during my morning meditation, it dawned on me that I have neither. I need to do better.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rails is not ruby</title>
        <link>https://microblog.desipenguin.com/post/rails-is-not-ruby/</link>
        <pubDate>Fri, 07 Jul 2023 19:44:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rails-is-not-ruby/</guid>
        <description>&lt;p&gt;I had written &lt;a href=&#34;https://microblog.desipenguin.com/post/language-before-framework/&#34;&gt;earlier&lt;/a&gt; how learning the
language before the framework is more important.&lt;/p&gt;
&lt;p&gt;It is important to know which parts is part of the language, and which comes
from the framework.&lt;/p&gt;
&lt;p&gt;This becomes more important when there are defacto web frameworks (rails in ruby,
django in python, phoenix in elixir.. maybe more)
For a newcomer who is learning both the language and framework together (or back to back,
or worse learning the language via the framework tutorials :shudders: )&lt;/p&gt;
&lt;p&gt;Here is an example. &lt;code&gt;to_i&lt;/code&gt; converts a string into an &lt;code&gt;Integer&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;main&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;:002:0&amp;gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;.to_i.class
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&amp;gt; Integer
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;main&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;:004:0&amp;gt; Integer.seconds
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;irb&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;:4:in &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;: undefined method `seconds&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; Integer:Class &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;NoMethodError&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is similar example of what I was trying to do&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;main&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;:002:0&amp;gt; sleep&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;ENV.fetch&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;SOME_DURATION&amp;#39;&lt;/span&gt;, 30&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;.to_i.seconds&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;irb&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;:2:in &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;: undefined method `seconds&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; 30:Integer &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;NoMethodError&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But it works in &lt;code&gt;rails&lt;/code&gt; console 🤷‍♂&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rails c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Top level ::CompositeIO is deprecated, require &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;multipart/post&amp;#39;&lt;/span&gt; and use &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;Multipart::Post::CompositeReadIO&lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt; instead!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Top level ::Parts is deprecated, require &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;multipart/post&amp;#39;&lt;/span&gt; and use &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;Multipart::Post::Parts&lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt; instead!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Chewy console strategy is &lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;urgent&lt;span style=&#34;color:#b44&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Loading development environment &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;Rails 6.1.7.4&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; pry&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;main&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&amp;gt; sleep&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;ENV.fetch&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;SOME_DURATION&amp;#39;&lt;/span&gt;, 30&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;.to_i.seconds&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span style=&#34;color:#666&#34;&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;2&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; pry&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;main&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Luckily, I was looking at &lt;a href=&#34;https://stackoverflow.com/a/60021905&#34;&gt;this&lt;/a&gt; for &lt;code&gt;sleep&lt;/code&gt; syntax&lt;/p&gt;
&lt;p&gt;Otherwise, I would have spent a lot of time, confused.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Trying Macports</title>
        <link>https://microblog.desipenguin.com/post/trying-macports/</link>
        <pubDate>Wed, 05 Jul 2023 10:55:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/trying-macports/</guid>
        <description>&lt;p&gt;I was aware of macports for quite some time (since I moved to macOS about 8 years ago)
But most of the tools seem to be suggesting &lt;code&gt;brew install&lt;/code&gt;, so I didn&amp;rsquo;t give macports
a second thought.&lt;/p&gt;
&lt;p&gt;8 years later, my MBP is old, and soon will not be supported by Apple and &lt;code&gt;brew&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While I &lt;a href=&#34;https://microblog.desipenguin.com/post/upgrade-to-monterey/&#34;&gt;upgraded&lt;/a&gt; to macOS monterey, this is going to be last version supported on this hardware.&lt;/p&gt;
&lt;p&gt;Someone on mastodon &lt;a href=&#34;https://indieweb.social/@m2m/110509820378135216&#34;&gt;suggested&lt;/a&gt; macports are supported better on older versions of macOS&lt;/p&gt;
&lt;p&gt;So today I decided to give it a try.&lt;/p&gt;
&lt;p&gt;I still have brew packages (everything so far) and I&amp;rsquo;ll be using macports side-by-side.&lt;/p&gt;
&lt;p&gt;First impressions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses GUI installer, as opposed to how &lt;code&gt;brew&lt;/code&gt; installs itself. Considering that &lt;code&gt;port&lt;/code&gt; itself is to be
used via the CLI, GUI for installer seems odd.&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;sudo&lt;/code&gt; to install the packages, since it requires write permission to &lt;code&gt;/opt/local&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other than these, it is too early to have any other impressions 😄&lt;/p&gt;
&lt;p&gt;(The first package I installed in &lt;code&gt;nushell&lt;/code&gt; - something else to try out)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Interesting Netlify Build Problem</title>
        <link>https://microblog.desipenguin.com/post/netlify-build-problem/</link>
        <pubDate>Mon, 26 Jun 2023 13:01:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/netlify-build-problem/</guid>
        <description>&lt;p&gt;After &lt;a href=&#34;https://microblog.desipenguin.com/post/migrating-pkm-site-updates/&#34;&gt;build problems&lt;/a&gt; with my PKM site, today I ran
into another problem with this site.&lt;/p&gt;
&lt;p&gt;What puzzled me was Deploy showed &lt;code&gt;Build&lt;/code&gt; step failing but no useful error (other than &lt;code&gt;exit code 2&lt;/code&gt; - which does not help much)&lt;/p&gt;
&lt;p&gt;But in the process of debugging, I learnt &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; about the environment variable &lt;code&gt;NETLIFY_BUILD_DEBUG&lt;/code&gt; (set to &lt;code&gt;true&lt;/code&gt; when needed)
It did not help 😞&lt;/p&gt;
&lt;p&gt;I also upgraded hugo version (which is another environment variable) in the process.&lt;/p&gt;
&lt;p&gt;That did not either.&lt;/p&gt;
&lt;p&gt;For some reason, I looked inside &lt;code&gt;Deploying&lt;/code&gt; stage- which was shown as &lt;code&gt;Complete&lt;/code&gt; in green font with a tick mark next to it.
()&lt;code&gt;Building&lt;/code&gt; step OTOH was shown as &lt;code&gt;Failed&lt;/code&gt; in red font with cross mark next to it.)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Deploying&lt;/code&gt; had following error in it&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Invalid filename &amp;rsquo;tags/c#/page/1/index.html&amp;rsquo;. Deployed filenames cannot contain # or ? characters&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There you go. (This was not a problem locally though 🤷‍♂)&lt;/p&gt;
&lt;p&gt;I changed the tag from &lt;code&gt;c#&lt;/code&gt; to &lt;code&gt;c-sharp&lt;/code&gt; and all was well 😄&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Relevant part of the &lt;a href=&#34;https://answers.netlify.com/t/support-guide-frequently-encountered-problems-during-builds/213&#34;&gt;Support Guide&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Pass request specific context to Sidekiq</title>
        <link>https://microblog.desipenguin.com/post/pass-request-specific-context-to-sidekiq/</link>
        <pubDate>Mon, 26 Jun 2023 10:40:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/pass-request-specific-context-to-sidekiq/</guid>
        <description>&lt;p&gt;In a multi-tenant rails application, usually we extract the tenant, before we process it further.
Sometimes, the process requires us to process the data in background (via Sidekiq) and because
the background job also needs to query the DB, it also needs to set tenant.&lt;/p&gt;
&lt;p&gt;Turns out, we can pass &amp;ldquo;some&amp;rdquo; data from the controller to the sidekiq job via &lt;code&gt;ActiveSupport::CurrentAttributes&lt;/code&gt;
While, sidekiq may need to set the tenant again (for more DB queries) but one can save at least one query (to find out the account itself)&lt;/p&gt;
&lt;p&gt;Apart from the tenant example, controller may have more stuff in the context, which one can pass to Sidekiq.&lt;/p&gt;
&lt;p&gt;You can read the original article &lt;a href=&#34;https://www.mikeperham.com/2022/07/29/sidekiq-and-request-specific-context/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Migrating PKM Site : Updates</title>
        <link>https://microblog.desipenguin.com/post/migrating-pkm-site-updates/</link>
        <pubDate>Sat, 24 Jun 2023 16:38:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/migrating-pkm-site-updates/</guid>
        <description>&lt;p&gt;As mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/migrating-pkm-site/&#34;&gt;here&lt;/a&gt; and later &lt;a href=&#34;https://microblog.desipenguin.com/post/new-pkm-site/&#34;&gt;here&lt;/a&gt;
I recently moved PKM from Dendron to obsidian-zola&lt;/p&gt;
&lt;p&gt;The original code seems abadoned (No updates in little over a year). I understand this since
it is likely built for personal use, and it works for them (FWIW, the demo site itself
is not updated for exactly same duration)&lt;/p&gt;
&lt;p&gt;Turns out people forked it and improved it.&lt;/p&gt;
&lt;p&gt;At first I tried &lt;a href=&#34;https://github.com/Yarden-zamir/obsidian-zola-plus/&#34;&gt;this&lt;/a&gt; fork, renamed as &lt;code&gt;obsidian-zola-plus&lt;/code&gt; (as it made it better than the original)
This one seemed active (updated little over 2 months ago. Yet 2 PRs are unmerged 🤷‍♂)&lt;/p&gt;
&lt;p&gt;But for some reason, my builds started failing on netlify. Problem did not appear related to this fork, as things worked well locally.&lt;/p&gt;
&lt;p&gt;That is when I came across &lt;a href=&#34;https://github.com/orditeck/cheap-publish&#34;&gt;this one&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It does not carry either Obsidian or Zola in the name (But repo mentions it)&lt;/p&gt;
&lt;p&gt;What I liked is that they got rid of the landing page, which did not serve any purpose. (Just showed some fancy buttons and clever title)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rename File in Emacs</title>
        <link>https://microblog.desipenguin.com/post/rename-file-emacs/</link>
        <pubDate>Fri, 23 Jun 2023 06:07:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rename-file-emacs/</guid>
        <description>&lt;p&gt;First impression people have is that Emacs is an editor.
So in an editor one should just &lt;code&gt;save as&lt;/code&gt; to different name/path. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;save as&lt;/code&gt; is different from renaming a file. &lt;code&gt;save as&lt;/code&gt; creates a copy
of the file with a different name/path. So one has two files with old and new
paths.&lt;/p&gt;
&lt;p&gt;But rename leaves just one file at thenew path.&lt;/p&gt;
&lt;p&gt;Older versions of Emacs (&amp;lt; Emacs 26) did not have this functionality built-in
So either one had to use &lt;code&gt;dired&lt;/code&gt; or people wrote their own functions.&lt;/p&gt;
&lt;p&gt;But now (rather from emacs 26 onward) has this built-in via &lt;code&gt;M-x rename-file&lt;/code&gt;
(and there is &lt;code&gt;delete-file&lt;/code&gt; as well)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Yes, I know one can rename (or delete) the file in VSCode as well :)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Read from Dead Letter Queue</title>
        <link>https://microblog.desipenguin.com/post/read-from-dead-letter-queue_azure/</link>
        <pubDate>Tue, 20 Jun 2023 08:31:31 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/read-from-dead-letter-queue_azure/</guid>
        <description>&lt;p&gt;As mentioned in the &lt;a href=&#34;https://microblog.desipenguin.com/post/amqp-versions/&#34;&gt;earlier&lt;/a&gt; post,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;at work I was “strongly encouraged” to use Azure Service Bus, instead of RabbitMQ
Unfortunately&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;SDK has &lt;code&gt;FormatDeadLetterPath&lt;/code&gt; &lt;a href=&#34;https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.queueclient.formatdeadletterpath?view=azure-dotnet#microsoft-servicebus-messaging-queueclient-formatdeadletterpath(system-string)&#34;&gt;functionality&lt;/a&gt; but it is not available to HTTP REST API &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Append &lt;code&gt;/$DeadLetterQueue&lt;/code&gt; to the queue name.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Refer to this SO &lt;a href=&#34;https://stackoverflow.com/questions/22681954/how-do-you-access-the-dead-letter-sub-queue-on-an-azure-subscription#comment131543948_34343745&#34;&gt;comment&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Readers would &lt;a href=&#34;https://microblog.desipenguin.com/post/python-after-long-time/&#34;&gt;remember&lt;/a&gt; that since Ruby is not officially supported by MS, we had to resort to using REST API to access the Azure Service Bus functionality.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;It has to be exactly as it is with capitalization and all. Took me some time to realize that. MS Docs refer to it in all-lower-case, which does not work.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>New PKM Site</title>
        <link>https://microblog.desipenguin.com/post/new-pkm-site/</link>
        <pubDate>Sun, 18 Jun 2023 17:01:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/new-pkm-site/</guid>
        <description>&lt;p&gt;Finally migrated my PKM from Dendron to Obsidian-Zola&lt;/p&gt;
&lt;p&gt;Things I needed to do were :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove Dendron specific frontmatter&lt;/li&gt;
&lt;li&gt;[In Progress] Restructure flat file names that were like &lt;code&gt;Dev.DB.mysql.md&lt;/code&gt; to &lt;code&gt;Development/Databases/mysql.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pushed this branch as &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Make &lt;code&gt;main&lt;/code&gt; as default and protected branch&lt;/li&gt;
&lt;li&gt;Unprotect &lt;code&gt;master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Renamed old &lt;code&gt;master&lt;/code&gt; as &lt;code&gt;dendron&lt;/code&gt; (just in case)- without unprotecting old &lt;code&gt;master&lt;/code&gt; I could not rename it.&lt;/li&gt;
&lt;li&gt;Remove Dendron specific settings from netlify. Since this time there is &lt;code&gt;netlify.toml&lt;/code&gt; so no additional settings needed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I would say it was pretty smooth transition 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Considering migrating PKM Site</title>
        <link>https://microblog.desipenguin.com/post/migrating-pkm-site/</link>
        <pubDate>Fri, 16 Jun 2023 11:14:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/migrating-pkm-site/</guid>
        <description>&lt;p&gt;My &lt;a href=&#34;https://pkm.desipenguin.com&#34;&gt;PKM&lt;/a&gt; is currently based on &lt;a href=&#34;https://wiki.dendron.so/&#34;&gt;Dendron&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Main appeal of Dendron was local-first. At the same time, it indeed was loosely tied to VSCode editor.&lt;/p&gt;
&lt;p&gt;Over the years, they had a command line tool to create new notes.
Still, its strength always was as a VSCode plugin&lt;/p&gt;
&lt;p&gt;Then today, I came across &lt;a href=&#34;https://github.com/ppeetteerrs/obsidian-zola&#34;&gt;Obsidian-Zola&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It splits the task of taking notes and publishing it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Obsidian for note taking&lt;/li&gt;
&lt;li&gt;Zola for publishing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What I liked about it is &lt;code&gt;Search&lt;/code&gt; functionality (To be fair, my current PKM build on Dendron also has it)&lt;/p&gt;
&lt;p&gt;I had heard of Obsidian, but never committed to it because publishing is a paid option (Also not local-only option any more, I think)
I may not even use Obsidian app to note taking (Or maybe I will. too soon to comment)&lt;/p&gt;
&lt;h3 id=&#34;dendron&#34;&gt;Dendron&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;❌ (Mostly) VSCode extension&lt;/li&gt;
&lt;li&gt;❌ Uses UUID in the URL when published. This makes it harder&lt;/li&gt;
&lt;li&gt;❌ No good theme support&lt;/li&gt;
&lt;li&gt;✅ Hierarchical notes taking, and publishing
&lt;ul&gt;
&lt;li&gt;A note with filename as &lt;code&gt;dev.db.pg.psql&lt;/code&gt; will be displayed like a tree, just based on the file name alone.&lt;/li&gt;
&lt;li&gt;I miss this in Obsidian+Zola&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;zola&#34;&gt;Zola&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;✅ Obsidian-Zola supports both Light and Dark themes (which Dendron does not)&lt;/li&gt;
&lt;li&gt;✅ Zola itself has decent themes support (which I don&amp;rsquo;t need right now, but could be useful in the future)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now, I&amp;rsquo;m migrating my notes from Dendron. What this really means is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove the frontmatter - which is Dendron specific&lt;/li&gt;
&lt;li&gt;Delete Empty files. These are required for the hierarchical note taking/publishing.&lt;/li&gt;
&lt;li&gt;Rename Notes, so that titles show up as I want, rather than auto-camelcased-from-the-filename 😄
&lt;ul&gt;
&lt;li&gt;So far I don&amp;rsquo;t know how to add frontmatter, so that filenames are separate from the title&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also ran into problem when running this locally on macOS
&lt;code&gt;obsidian-export&lt;/code&gt; binary shipped in linux specific. I replaced that with &lt;a href=&#34;https://github.com/zoni/obsidian-export&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Emacs Glasses Mode</title>
        <link>https://microblog.desipenguin.com/post/emacs-glasses-mode/</link>
        <pubDate>Thu, 15 Jun 2023 15:22:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-glasses-mode/</guid>
        <description>&lt;p&gt;Now that I&amp;rsquo;m &lt;a href=&#34;https://microblog.desipenguin.com/post/dotnet-package-management/&#34;&gt;working on&lt;/a&gt; .NET and C#, I enabled &lt;code&gt;csharp-mode&lt;/code&gt; in Doom Emacs.
While exploring minor modes related to csharp-mode, I came across &lt;code&gt;Glasses&lt;/code&gt; minor mode.&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href=&#34;https://www.emacswiki.org/emacs/GlassesMode&#34;&gt;EmacsWiki&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;TL;DR:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The default setting is to separate the Capped bits with an underscore, so EmacsIsStudly shows as Emacs_Is_Studly.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I too, prefer to see the code &lt;code&gt;as-is&lt;/code&gt;, but it is good to know that Glasses mode exists. I can see it being useful.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>.NET Package Management</title>
        <link>https://microblog.desipenguin.com/post/dotnet-package-management/</link>
        <pubDate>Wed, 14 Jun 2023 06:23:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dotnet-package-management/</guid>
        <description>&lt;p&gt;I recently started writing C# code at work. While I can read and understand
the sample code (and modify partially per my requirement) I still trip up
by new-ness (to me) of the ecosystem.&lt;/p&gt;
&lt;p&gt;So while I intuitively understand that &lt;code&gt;using&lt;/code&gt; is equivalent of &lt;code&gt;require&lt;/code&gt;
in Ruby (or &lt;code&gt;import&lt;/code&gt; in python), I didn&amp;rsquo;t know which ones are &amp;ldquo;standard library&amp;rdquo;
and which ones are not.&lt;/p&gt;
&lt;p&gt;The sample code worked with standard library, but writing to Azure Service bus
requires external library. Just adding &lt;code&gt;using Azure.Messaging.ServiceBus&lt;/code&gt; is
not enough. One also needs to install the package.&lt;/p&gt;
&lt;p&gt;.NET has packaging system called &lt;code&gt;NuGet&lt;/code&gt;, but irrespective of the name, there
is intuitive &lt;code&gt;dotnet&lt;/code&gt; command line program to manage the packages.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve added the TL;DR version of the commands on my &lt;a href=&#34;https://pkm.desipenguin.com/&#34;&gt;PKM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Search for &lt;code&gt;dotnet&lt;/code&gt; (I can share the direct link here, but since Dendron URLs
contain note-ids which are UUIDs, they are likely to go out-of-sync, hence
searching is better.)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Microsoft&#39;s Confusing (or Incorrect?) Documentation</title>
        <link>https://microblog.desipenguin.com/post/microsofts-incorrect-documentation/</link>
        <pubDate>Tue, 13 Jun 2023 07:21:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/microsofts-incorrect-documentation/</guid>
        <description>&lt;p&gt;At work, I&amp;rsquo;ve been using REST API to connect to Azure Service Bus because
officially Microsoft does not support Ruby SDK (It is retired since 2015)&lt;/p&gt;
&lt;p&gt;The documentation related to accessing Azure Service Bus via REST API is very
limited, and at time difficult to use.&lt;/p&gt;
&lt;p&gt;e.g. &lt;a href=&#34;https://learn.microsoft.com/en-us/rest/api/servicebus/unlock-message#request&#34;&gt;This&lt;/a&gt; documentation
about &lt;code&gt;How to unlock a message in the (Azure Service Bus) queue&lt;/code&gt; mentions this URL pattern to be used
for the REST API call :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;http{s}://{serviceNamespace}.servicebus.windows.net/{queuePath}/messages/{messageId&amp;amp;#124;sequenceNumber}/{lockToken}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I was not sure what is &lt;code&gt;&amp;amp;#124&lt;/code&gt; is. It turns out to be &lt;code&gt;|&lt;/code&gt; (Vertical bar) sometimes used to indicate &lt;code&gt;or&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So it may mean use either &lt;code&gt;messageId&lt;/code&gt; or &lt;code&gt;sequenceNumber&lt;/code&gt;. But they could have just explicitly mentioned so.&lt;/p&gt;
&lt;p&gt;The example is as follows :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;PUT https://your-namespace.servicebus.windows.net/HttpClientSampleQueue/messages/31907572-1647-43c3-8741-631acd554d6f/7da9cfd5-40d5-4bb1-8d64-ec5a52e1c547?timeout=60 HTTP/1.1   &lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So it is unclear that they are using &lt;strong&gt;only&lt;/strong&gt; &lt;code&gt;messageId&lt;/code&gt; (&lt;code&gt;sequenceNumber&lt;/code&gt; is an Integer that looks like 1,2,3&amp;hellip; etc.)&lt;/p&gt;
&lt;p&gt;Also, &lt;code&gt;timeout&lt;/code&gt; is not documented (except in the example)&lt;/p&gt;
&lt;p&gt;Another variation that uses topics and subscription, (and example) mentioned &lt;code&gt;|HTTP/1.1&lt;/code&gt; , but I&amp;rsquo;m not sure what that is.
Also, if they can use &lt;code&gt;|&lt;/code&gt; here, why not earlier ?&lt;/p&gt;
&lt;p&gt;I had a lot of heartache chasing this.&lt;/p&gt;
&lt;p&gt;Finally, using only &lt;code&gt;messageId&lt;/code&gt; worked.&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m still unsure then why is there &lt;code&gt;sequenceNumber&lt;/code&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Changing Emacs Look-N-Feel</title>
        <link>https://microblog.desipenguin.com/post/changing-emacs-look-n-feel/</link>
        <pubDate>Tue, 06 Jun 2023 10:14:14 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/changing-emacs-look-n-feel/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://microblog.desipenguin.com/post/nano-minemacs/&#34;&gt;nano emacs theme with minemacs&lt;/a&gt;
I got bored today, and wanted to try something new.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m trying &lt;a href=&#34;https://github.com/guidoschmidt/circadian.el&#34;&gt;circadian.el&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;modus-operandi during the day&lt;/li&gt;
&lt;li&gt;doom-tokyo-night during the night&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Iosevka font (Have not settled on exact variation)&lt;/li&gt;
&lt;li&gt;Also trying &lt;code&gt;org-modern&lt;/code&gt; but I &lt;a href=&#34;https://microblog.desipenguin.com/post/trying-denote/&#34;&gt;use denote&lt;/a&gt; - so I&amp;rsquo;m not sure whether it matters&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Language Before Framework</title>
        <link>https://microblog.desipenguin.com/post/language-before-framework/</link>
        <pubDate>Mon, 05 Jun 2023 16:44:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/language-before-framework/</guid>
        <description>&lt;p&gt;Several years ago, I came across a quote&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; about how learning python &lt;em&gt;via&lt;/em&gt; Django.
The author said that if you don&amp;rsquo;t properly know python, you may not understand what is Django specific and what is not.&lt;/p&gt;
&lt;p&gt;FWIW, even after working with python, I never used Django in any of my main project.
But I did learn python first before the frameworks.&lt;/p&gt;
&lt;p&gt;Fast forward to few days ago. I am working on Ruby code to read from Azure Service Bus.&lt;/p&gt;
&lt;p&gt;I have been working on rails project for a while now, and (indirectly) learned ruby via rails.&lt;/p&gt;
&lt;p&gt;In rails, I am used to checking for &lt;code&gt;nil&lt;/code&gt; via &lt;code&gt;.present?&lt;/code&gt; and/or &lt;code&gt;.blank?&lt;/code&gt;
Turns out, both are provided by Rails (ActiveSupport)&lt;/p&gt;
&lt;p&gt;Ruby only provides &lt;code&gt;nil?&lt;/code&gt; and &lt;code&gt;empty?&lt;/code&gt; (For Arrays, Hashes and Sets)&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is a difference between knowing the path and walking it&lt;/p&gt;
&lt;p&gt;-Morpheus
&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;For some reason, original post is unavailable. &lt;a href=&#34;https://web.archive.org/web/20231205115443/https://jeffknupp.com/blog/2012/12/11/learning-python-via-django-considered-harmful/&#34;&gt;This&lt;/a&gt; is the link via Wayback machine.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.arkency.com/2017/07/nil-empty-blank-ruby-rails-difference/&#34;&gt;nil?, empty?, blank? in Ruby on Rails&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Kz40vwcTGFo&#34;&gt;Knowing the path&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Ameba: Rubocop for Crystal Language</title>
        <link>https://microblog.desipenguin.com/post/crystal-language-linter/</link>
        <pubDate>Fri, 02 Jun 2023 21:58:21 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/crystal-language-linter/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/crystal-ameba/ameba&#34;&gt;Ameba&lt;/a&gt; seems like quite mature linter for Crystal language.
As I start my first real world code in Crystal language, the real tools are very useful.
&lt;em&gt;(Side note: I didn&amp;rsquo;t write any non-real-world crystal code. I&amp;rsquo;m not sure it helps. REPL sessions are not code. they don&amp;rsquo;t count)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It automatically uses built-in formatter in the &lt;code&gt;--fix&lt;/code&gt; mode.&lt;/p&gt;
&lt;p&gt;There is also awesome emacs integration as well. Check &lt;a href=&#34;https://github.com/crystal-ameba/ameba.el&#34;&gt;ameba.el&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>AMQP Versions</title>
        <link>https://microblog.desipenguin.com/post/amqp-versions/</link>
        <pubDate>Tue, 16 May 2023 21:59:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/amqp-versions/</guid>
        <description>&lt;p&gt;As I had mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/python-after-long-time/&#34;&gt;earlier&lt;/a&gt;, at work I was &amp;ldquo;strongly encouraged&amp;rdquo;
to use Azure Service Bus, instead of RabbitMQ (which was the technology I had suggested.)&lt;/p&gt;
&lt;p&gt;RabbitMQ has good Ruby support. I had chosen &lt;a href=&#34;https://github.com/jondot/sneakers&#34;&gt;Sneakers&lt;/a&gt; (Which uses &lt;a href=&#34;https://github.com/ruby-amqp/bunny&#34;&gt;bunny&lt;/a&gt; under the hood)&lt;/p&gt;
&lt;p&gt;Since Azure Service Bus also supports AMQP, I was trying to see if we can use these libraries with Azure Service Bus.&lt;/p&gt;
&lt;p&gt;But connection itself wouldn&amp;rsquo;t work. I kept getting &lt;code&gt;FrameTypeError&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After a lot of head-scratching and searching, a colleague pointed me to &lt;a href=&#34;https://groups.google.com/g/ruby-amqp/c/8aj6vVR3nh8/m/xrHZV1AZBgAJ&#34;&gt;this discusion&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AMQP 1.0 is not a &amp;ldquo;later version&amp;rdquo; of AMQP 0-9-1, it is a completely different protocol,
despite the name and (in theory) the same working group that developed it. Bunny is an AMQP 0-9-1 client.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;🤦‍♂&lt;/p&gt;
&lt;p&gt;Azure Service Bus supports AMQP 1.0 while RabbitMQ &lt;a href=&#34;https://www.rabbitmq.com/protocols.html#amqp-091&#34;&gt;supports&lt;/a&gt; AMQP 0-9-1 🤷‍♂&lt;/p&gt;
&lt;p&gt;While RabbitMQ can support 1.0 via plugin, bunny (client) does not.&lt;/p&gt;
&lt;p&gt;So we could not use bunny/sneakers (my first choice) to connect with Azure Service Bus&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Devnagari</title>
        <link>https://microblog.desipenguin.com/post/devnagari/</link>
        <pubDate>Sun, 14 May 2023 12:11:06 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/devnagari/</guid>
        <description>&lt;p&gt;ह्याच्या आधी मी एक micropost देवनागरीत लिहिली होती, नेहेमीप्रमाणे मी ती हेलिक्स मधे लिहीली
पण त्यात थोड्या चुका झाल्या होत्या.&lt;/p&gt;
&lt;p&gt;हेलिक्स टर्मीनल एडिटर असल्यामुळे असेल कदाचित 🤔&lt;/p&gt;
&lt;p&gt;नंतर मी ती मार्कडाउन फाइल bbedit मधे उघडून दुरुस्त केली.&lt;/p&gt;
&lt;p&gt;macOS मधे देवनागरी लिहिण्यासाठी मराठी keyboard च्या ऐवजी &lt;code&gt;Devnagari - QWERTY&lt;/code&gt;  वापरा.
मराठी keyboard शिकण्यापेक्षा transliteration सोपे आहे.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Used Python After Long Time</title>
        <link>https://microblog.desipenguin.com/post/python-after-long-time/</link>
        <pubDate>Fri, 12 May 2023 13:36:14 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/python-after-long-time/</guid>
        <description>&lt;p&gt;Today I wrote (OK, copy/pasted sample code and modified) python after more than
a year. (Is it &lt;code&gt;a year&lt;/code&gt; or &lt;code&gt;an year&lt;/code&gt; - confusing. I think either works)&lt;/p&gt;
&lt;p&gt;I had to start from installing python.&lt;/p&gt;
&lt;p&gt;Why did I use python ?&lt;/p&gt;
&lt;p&gt;At work, we are trying to connect to Azure Service Bus over AMQP.
Ruby is not officially supported by MS anymore.&lt;/p&gt;
&lt;p&gt;Python is.&lt;/p&gt;
&lt;p&gt;But we wanted to try non-azure client. So went with qpid-proton (which also has
Ruby version, but I was unable to get it even installed - on macOS - after
struggling a lot)&lt;/p&gt;
&lt;p&gt;Python sample code worked - but only because of &lt;a href=&#34;https://www.johndehavilland.com/blog/2017/07/05/Python-ServiceBus-AMQP.html&#34;&gt;this&lt;/a&gt; article.&lt;/p&gt;
&lt;p&gt;John de Havilland: God bless you for mentioning &lt;code&gt;allowed_mechs&lt;/code&gt; options specifically. 🙏&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to track subtasks in Org</title>
        <link>https://microblog.desipenguin.com/post/subtasks-in-org/</link>
        <pubDate>Thu, 11 May 2023 07:24:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/subtasks-in-org/</guid>
        <description>&lt;p&gt;&lt;em&gt;Continuing from &lt;a href=&#34;https://microblog.desipenguin.com/post/org-for-todos/&#34;&gt;previous post&lt;/a&gt; ..&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Turns out there is a specific way to handle subtasks in org-mode.&lt;/p&gt;
&lt;p&gt;I used something like following -  which did not work&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;&#34;&gt; TODO&lt;/span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt; Main task [0/3]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;- &lt;/span&gt;[x] Subtask 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;- [ ]&lt;/span&gt; Subtask 2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;- [ ]&lt;/span&gt; Subtask 3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we can see, I expected to see &lt;code&gt;[1/3]&lt;/code&gt; but I continue getting &lt;code&gt;[0/3]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Correct way to do this is :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;&#34;&gt; TODO&lt;/span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt; Main task [1/3]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ** DONE Subtask 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ** TODO Subtask 2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ** TODO Subtask 3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With the correct syntax, I don&amp;rsquo;t even need to &lt;code&gt;C-c C-c&lt;/code&gt; to update &lt;code&gt;/&lt;/code&gt; in the
main task. As soon as any subtask chnages from &lt;code&gt;TODO&lt;/code&gt; to &lt;code&gt;DONE&lt;/code&gt; (or vice versa)
the header automatically changes 🎉&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Org for TODOs</title>
        <link>https://microblog.desipenguin.com/post/org-for-todos/</link>
        <pubDate>Wed, 10 May 2023 06:37:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/org-for-todos/</guid>
        <description>&lt;p&gt;Yesterday, I started using org-mode for tracking my TODO items.&lt;/p&gt;
&lt;p&gt;I had tried it a long time ago. Org is very powerful, and it can list
the &lt;code&gt;TODO&lt;/code&gt; items across multiple files.&lt;/p&gt;
&lt;p&gt;But that gets (at least in past) overwhelming.&lt;/p&gt;
&lt;p&gt;So I started simple.&lt;/p&gt;
&lt;p&gt;I started with setting &lt;code&gt;org-agenda-file&lt;/code&gt; to &lt;code&gt;~/org/work.todo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That is the only file I&amp;rsquo;m tracking my work items.&lt;/p&gt;
&lt;p&gt;Then I use &lt;code&gt;org-agenda&lt;/code&gt; to list all the open items.&lt;/p&gt;
&lt;p&gt;When done, I mark them as &lt;code&gt;DONE&lt;/code&gt; using &lt;code&gt;org-todo&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;I also added subtasks and added &lt;code&gt;[/]&lt;/code&gt; at the end of the main task.
Taking the cursor to &lt;code&gt;/&lt;/code&gt; and pressing &lt;code&gt;C-c C-c&lt;/code&gt; updates the list to
something like &lt;code&gt;[1/5]&lt;/code&gt; depending on how many are done.&lt;/p&gt;
&lt;p&gt;The subtasks use checkboxes like &lt;code&gt;- [ ]&lt;/code&gt; for not done, and &lt;code&gt;- [x]&lt;/code&gt; for done subtasks.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;For some reason, updated tasks aren&amp;rsquo;t updating the &lt;code&gt;[/]&lt;/code&gt; correctly.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;But for now, I&amp;rsquo;m ignoring that.&lt;/del&gt; This is now &lt;a href=&#34;https://microblog.desipenguin.com/post/subtasks-in-org&#34;&gt;fixed&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/va-pu-kale/</link>
        <pubDate>Wed, 10 May 2023 06:26:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/va-pu-kale/</guid>
        <description>&lt;p&gt;मला व.पु. काळे ह्यांच्या कथा आवडतात कारण त्यात कथा आणि उपदेश हयाचा चांगला balance असतो.
नुसता उपदेश थोडा बरा वाटतो, पण नंतर bore होतं
हयाच मुळे मला रिचर्ड बाखचं लेखन सुदधा आवडतं&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I like Va. Pu. Kale&amp;rsquo;s stories because it has great balance of the story and philosophy.
Just philosophy is OK for a while, but too much of it can get boring.
I like Richard Bach&amp;rsquo;s writing for the same reason&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Verified Blog on Mastodon</title>
        <link>https://microblog.desipenguin.com/microposts/verified-blog-on-mastodon/</link>
        <pubDate>Mon, 08 May 2023 12:40:48 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/verified-blog-on-mastodon/</guid>
        <description>&lt;p&gt;My &lt;a href=&#34;https://indieweb.social/@mandarvaze&#34;&gt;mastodon account&lt;/a&gt; is now verified with green tick 😄&lt;/p&gt;
&lt;p&gt;I already had a link to my Mastodon account in the footer of this blog
for quite some. But did not have &lt;code&gt;rel=me&lt;/code&gt; which I added today.&lt;/p&gt;
&lt;p&gt;I also did not have a link to this blog from mastodon account - which I added
just now.&lt;/p&gt;
&lt;p&gt;As a result, now I have &lt;code&gt;green check mark&lt;/code&gt; 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>E/N Style Blog</title>
        <link>https://microblog.desipenguin.com/post/e-n-style-blog/</link>
        <pubDate>Thu, 04 May 2023 21:49:05 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/e-n-style-blog/</guid>
        <description>&lt;p&gt;TIL that this is an &lt;code&gt;E/N style blog&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t know that it was 😄&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E/N&lt;/strong&gt; stands for &lt;strong&gt;Everything and Nothing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The content of this site means &lt;em&gt;everything&lt;/em&gt; to the publisher (me)
But it may mean &lt;em&gt;nothing&lt;/em&gt; to some of the users (at some of the times)&lt;/p&gt;
&lt;p&gt;Quoting from the origin &lt;a href=&#34;http://sawv.org/en.html&#34;&gt;site&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The website&amp;rsquo;s author covers a myriad of topics. It&amp;rsquo;s not narrowly focused.
The author writes about everything or at least everything that&amp;rsquo;s important
to the author. The site might contain something useful for anyone who visits.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So at some point, it may mean nothing to you - the reader.&lt;/p&gt;
&lt;p&gt;Yet, you are reading this post.&lt;/p&gt;
&lt;p&gt;So I thank you 🙇🏽‍♂️&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Trying Denote for Note Taking</title>
        <link>https://microblog.desipenguin.com/post/trying-denote/</link>
        <pubDate>Thu, 04 May 2023 07:01:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/trying-denote/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;code&gt;org-roam&lt;/code&gt; for some time for my note taking.
One of the practical problem is I&amp;rsquo;m used to Markdown so much, that switching
to &lt;code&gt;org&lt;/code&gt; syntax does not come naturally to me.&lt;/p&gt;
&lt;p&gt;The other day, I had to look the syntax for &lt;code&gt;begin_src&lt;/code&gt; - which is just
3 ticks in markdown.&lt;/p&gt;
&lt;p&gt;So I checked to see if there are note taking packages in emacs that support
taking notes in markdown, and thus I came across &lt;code&gt;denote&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To my surprise, the frontmatter used by &lt;code&gt;markdown-yaml&lt;/code&gt; filetype in denote,
is very close to the frontmatter used by &lt;code&gt;hugo&lt;/code&gt; SSG. (Denote has an extra
&lt;code&gt;identifier&lt;/code&gt; which is not there in hugo.)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So here is what I did after above was written as a &amp;ldquo;note&amp;rdquo; in &lt;code&gt;Denote&lt;/code&gt;
I copied the file which has following components&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So original filename looked like &lt;code&gt;20230504T070129--trying-denote__emacs.md&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I copied the file to the &lt;code&gt;content/post/&lt;/code&gt; folder and renamed it to retain
just the title.&lt;/p&gt;
&lt;p&gt;When previewed with local hugo server, it worked flawlessly 🎉&lt;/p&gt;
&lt;p&gt;I removed the &lt;code&gt;identifier&lt;/code&gt; attribute (even though it worked with it, doesn&amp;rsquo;t
mean I should keep it)&lt;/p&gt;
&lt;p&gt;I plan to add a tag &lt;code&gt;blog&lt;/code&gt; in denote - which I&amp;rsquo;ll remove when I move the file.&lt;/p&gt;
&lt;p&gt;I have not explored denote much (at all?) but the first impression is good.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Crystal Language: C Like Performance, Ruby Like Syntax</title>
        <link>https://microblog.desipenguin.com/post/crystal-lang/</link>
        <pubDate>Thu, 04 May 2023 06:27:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/crystal-lang/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been intrigued by Crystal Programming language for some time.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been programming in Ruby for almost an year now (Mostly Rails, which
I can&amp;rsquo;t say I like - too much magic)&lt;/p&gt;
&lt;p&gt;TBH, speed of interpreted language has not been an issue (I worked in
python for quite some time before Ruby) but Crystal also comes with
statically inferred types.
Since it is a compiled language - bunch of errors maybe caught at compile time, rather than at run-time.&lt;/p&gt;
&lt;p&gt;Some possible downsides of new language is that ecosystem is not as mature as languages like python and ruby that has been around for 20 years or so.&lt;/p&gt;
&lt;p&gt;But Crystal is now at 1.8, so it is definitely a mature language.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m really excited.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already created an &lt;a href=&#34;https://pkm.desipenguin.com/notes/x8zip5vfxz7mqogpho1ms9v/&#34;&gt;entry&lt;/a&gt; in my PKM&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Bullshit Jobs</title>
        <link>https://microblog.desipenguin.com/post/bullshit-jobs/</link>
        <pubDate>Tue, 02 May 2023 13:37:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bullshit-jobs/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Bullshit_Jobs&#34;&gt;Bullshit Jobs&lt;/a&gt; are meaningless jobs. Jobs which if taken away, won&amp;rsquo;t matter to anyone (Maybe except to the person who is/was in that position)&lt;/p&gt;
&lt;p&gt;While responding to a listener question, DHH mentioned &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; that it is actually a book, based on a study of such jobs.&lt;/p&gt;
&lt;p&gt;He mentioned that BigTech &lt;sup&gt;TM&lt;/sup&gt; hires talent so that their competition can not hire the same person, even if the hiring company does not really &lt;strong&gt;need&lt;/strong&gt; the highly talented individual. (Or have enough/great work to fulfill such a person)&lt;/p&gt;
&lt;p&gt;Sometimes I feel like that in my current role. 🤔 (The Pay is Good &lt;sup&gt;TM&lt;/sup&gt; though 😉)
It is not like I&amp;rsquo;m twiddling thumbs or bored to death. But unlike some of my previous roles, I wonder if it would matter if I were not there.
Would they &lt;strong&gt;need&lt;/strong&gt; to replace me by another individual, or would it be better not to have anyone in my current role.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://37signals.com/podcast/listener-questions-part-2/&#34;&gt;Rework Podcast Listener Questions Part 2&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Set Dendron After Os Upgrade</title>
        <link>https://microblog.desipenguin.com/microposts/set-dendron-after-os-upgrade/</link>
        <pubDate>Mon, 01 May 2023 08:09:45 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/set-dendron-after-os-upgrade/</guid>
        <description>&lt;p&gt;Today I set my &lt;a href=&#34;pkm.desipenguin.com/&#34;&gt;PKM&lt;/a&gt; project on the laptop, a little
over a month after I &lt;a href=&#34;https://microblog.desipenguin.com/post/upgrade-to-monterey/&#34;&gt;upgraded the OS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I just had to clone the repo.&lt;/p&gt;
&lt;p&gt;Since this was a new repo cloned, I had to set the &lt;code&gt;user.email&lt;/code&gt; and &lt;code&gt;user.name&lt;/code&gt;
git configurations.&lt;/p&gt;
&lt;p&gt;It is good that &lt;code&gt;git&lt;/code&gt; reminds me of that, and also informs me to amend the
commit with &lt;code&gt;--reset-author&lt;/code&gt; param. How nice!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;For the curious, I added &lt;a href=&#34;https://pkm.desipenguin.com/notes/1563a89c-bcb2-4ef0-b647-45e9c468f43e/#change-output-format-to-csv&#34;&gt;this&lt;/a&gt; entry&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Be Better Than You Were Yesterday</title>
        <link>https://microblog.desipenguin.com/post/be-better-than-yourself/</link>
        <pubDate>Wed, 26 Apr 2023 08:41:34 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/be-better-than-yourself/</guid>
        <description>&lt;p&gt;Few of the quotes from this&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; interview, Danny Meyers&lt;/p&gt;
&lt;p&gt;On why someone is motivated (From sports)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Likes to beat others &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; - Muhammad Ali&lt;/li&gt;
&lt;li&gt;Hates to lose  - John McEnroe&lt;/li&gt;
&lt;li&gt;Beat own record - Usain Bolt&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Every day is an opportunity to be better than you were yesterday
Perfection is stupid, receipe for unhappiness [paraphrased]&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Be a 51 percenter.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Of total 100 &amp;ldquo;marks&amp;rdquo; - 49% are for the technical skills required for the job
and other 51% are for &amp;ldquo;How did you make everyone else feel while doing it?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In the context of restaurant industry, &amp;ldquo;others&amp;rdquo; mainly mean customers, but it
also includes your coworkers as well.&lt;/p&gt;
&lt;p&gt;He also talks about &amp;ldquo;working for free, to learn the craft&amp;rdquo;
At one point, he had to pay to learn (as opposed to getting paid less, or no pay) in an internship (like situation)&lt;/p&gt;
&lt;p&gt;Entire interview is great, if you wish to listen, the link in the footnotes.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://tim.blog/2023/04/06/danny-meyer/&#34;&gt;Interview with Danny Meyer&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;I assume beat as in &lt;code&gt;I beat him in the game of chess&lt;/code&gt;, not physical violence. In case of Ali, it could also mean later, due to the sport :)&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Magit fixed</title>
        <link>https://microblog.desipenguin.com/post/magit-fixed/</link>
        <pubDate>Sat, 15 Apr 2023 14:45:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/magit-fixed/</guid>
        <description>&lt;p&gt;As I wrote earlier, I was &lt;a href=&#34;https://microblog.desipenguin.com/post/back-to-doom/&#34;&gt;unable to use magit&lt;/a&gt; because of the third party issue.
Doom fixed it within hours (bigger community)&lt;/p&gt;
&lt;p&gt;But minmacs also fixed &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; it (only one person)&lt;/p&gt;
&lt;p&gt;I had to follow a slightly complex set of instructions, but I&amp;rsquo;m glad it all worked out in the end.&lt;/p&gt;
&lt;p&gt;I will continue to use Minemacs on my personal machine.
Working in markdown is pleasure in minemacs.
I want to get &lt;code&gt;robe&lt;/code&gt; working with minemacs, and &lt;code&gt;codium&lt;/code&gt; and &lt;code&gt;chatgpt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;robe&lt;/code&gt; already works with Doom (hence I&amp;rsquo;ll continue using it for work)
&lt;code&gt;codium&lt;/code&gt; does NOT work with doom (apparently - per Telegram group)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/abougouffa/minemacs/issues/49&#34;&gt;Minemacs fix&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Back to Doom : For work</title>
        <link>https://microblog.desipenguin.com/post/back-to-doom/</link>
        <pubDate>Thu, 13 Apr 2023 10:39:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/back-to-doom/</guid>
        <description>&lt;p&gt;I updated Minemacs few days ago, and it broke &lt;code&gt;magit&lt;/code&gt; 😱 &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I had suspected that it is not problem with Minemacs&lt;/p&gt;
&lt;p&gt;But I can&amp;rsquo;t have &lt;code&gt;magit&lt;/code&gt; broken, so on my work machine I switched (back) to Doom
FWIW, the issue is already fixed on Doom &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This time I noticed doom now installs itself under &lt;code&gt;~/.config/emacs&lt;/code&gt; rather than &lt;code&gt;~/.emacs.d&lt;/code&gt;
I also updated my &lt;code&gt;init.el&lt;/code&gt; and &lt;code&gt;config.el&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now that I&amp;rsquo;m back, all my muscle memory started kicking in.
Also &lt;code&gt;robe&lt;/code&gt; is much better for working in Ruby/Rails - &lt;code&gt;goto definition&lt;/code&gt; works a lot of times 😄&lt;/p&gt;
&lt;p&gt;I never got it to work with &lt;code&gt;solargraph&lt;/code&gt; 😞&lt;/p&gt;
&lt;p&gt;I have still kept &lt;code&gt;minemacs&lt;/code&gt; on my personal machine (I&amp;rsquo;m editing this in minemacs)
The upstream issue will get fixed eventually, and updating the package will resolve the issue.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/abougouffa/minemacs/issues/49&#34;&gt;Minemacs Issue&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/doomemacs/doomemacs/issues/7191&#34;&gt;Doom emacs issue&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>CPR for Work</title>
        <link>https://microblog.desipenguin.com/post/c-p-r/</link>
        <pubDate>Wed, 12 Apr 2023 18:21:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/c-p-r/</guid>
        <description>&lt;p&gt;I came across this in the 1thing podcast &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;C-P-R stands for Communication, Planning and Resources&lt;/p&gt;
&lt;p&gt;Nick mentions that how we sort the laundry into separate drawers so that
when we need, we can easiy find socks in their drawer, rather than looking
for then in a pile of clothes.&lt;/p&gt;
&lt;p&gt;Similarly, at work if team members know where to look for something, it would
save them time in the long run (even though it feels like it takes time to do
that initially)&lt;/p&gt;
&lt;p&gt;Another example : It might take an hour to fix a leaky pipe, and takes just
minutes to wipe the water from the floor, but these minutes add up, and in
long run you would be spending more than an hour, if the pipe is not fixed.&lt;/p&gt;
&lt;p&gt;Coming back to &amp;ldquo;where do I look for ..&amp;rdquo; he suggests :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use email only for External communication.&lt;/li&gt;
&lt;li&gt;Everything else goes to either slack or teams (or equivalent tool)&lt;/li&gt;
&lt;li&gt;Now when you are looking for something you know where to search, rather
than searching emails as well as slack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Tony, Welcome to the team&amp;rdquo; is an internal communication - belongs to slack&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Can you get me the TPS reports by 5PM on Friday&amp;rdquo; is a commitment, which
should never be over slack. It should go to task tracker like Asana&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Knowledge base&lt;/li&gt;
&lt;li&gt;Worth writing down once rather than explaining to multiple people over
a period of time. (Fix the leaking pipe, than moping the floor)&lt;/li&gt;
&lt;li&gt;Also avoids &amp;ldquo;Only Peter knows about it, and is on vacation&amp;rdquo; (Or left the org)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://the1thing.com/podcast-archive/393/&#34;&gt;Purposeful Productivity&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Switched to Arc</title>
        <link>https://microblog.desipenguin.com/post/switched-to-arc/</link>
        <pubDate>Sun, 09 Apr 2023 22:20:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/switched-to-arc/</guid>
        <description>&lt;p&gt;I wrote about Arc browser earlier &lt;a href=&#34;https://microblog.desipenguin.com/post/the-arc-browser/&#34;&gt;here&lt;/a&gt;. At that time, I was still on macOS catalina, version of macOS not supported by many, including &lt;code&gt;brew&lt;/code&gt; and Arch browser.&lt;/p&gt;
&lt;p&gt;Now that I have &lt;a href=&#34;https://microblog.desipenguin.com/post/upgrade-to-monterey/&#34;&gt;successfully upgraded&lt;/a&gt; - I was able to get Arc working on my personal machine as well.
I did not wish to make this default on my work machine - wasn&amp;rsquo;t sure if it was supported (based on Chromium, so it should work, still if something does not work, getting support from IT won&amp;rsquo;t be easy. Better stick to main stream browsers for office work)&lt;/p&gt;
&lt;p&gt;But on personal machine, anything goes.&lt;/p&gt;
&lt;p&gt;So as soon as I installed Arc, I made it the default.&lt;/p&gt;
&lt;p&gt;TBH, I still use firefox for&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Netbanking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But that is it.&lt;/p&gt;
&lt;p&gt;I have been enjoying the feature for which I made the switch, namely auto-expiring tabs 😄&lt;/p&gt;
&lt;p&gt;Initially, I was bit surprised - what happened to that thing I was reading last night ? Ohh - it expired.&lt;/p&gt;
&lt;p&gt;Off course, If I really &lt;em&gt;need&lt;/em&gt; it, I can make sure it stays, or open it again.&lt;/p&gt;
&lt;p&gt;But that is the point.&lt;/p&gt;
&lt;p&gt;Most of the times, we don&amp;rsquo;t.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>MacOS Upgrade : The Conclusion</title>
        <link>https://microblog.desipenguin.com/post/upgrade-to-monterey/</link>
        <pubDate>Tue, 28 Mar 2023 17:45:30 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/upgrade-to-monterey/</guid>
        <description>&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/macos-upgrade/&#34;&gt;previously&lt;/a&gt; .. our protagonist made all the preparations, and yet his two attempts to upgrade the OS failed due to what seems like hardware failure. Will he succeed, or give up ? Let us find out in this thrilling conclusion aka Part 2&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So in place upgrade did not work. I looked at my SSD. It was partitioned in two. One for OS and other for data. I do not remember if I did that when I tried to install linux on this machine. 🤷‍♂ (Unlikely, I usually boot from external USB disk and try.)&lt;/p&gt;
&lt;p&gt;Since I had the exact error, I decided to search and ay least one solution suggested reformatting.&lt;/p&gt;
&lt;p&gt;While I dreaded it at first, I had taken the backup (I did one more round, and found some files were not backed up. Good to double check 😄) Reformatting would also serve as a forcing function. I would not have manually deleted whole lot of data that I had accumulated over the years.&lt;/p&gt;
&lt;p&gt;In order to install macOS Monterey on a recently formatted drive, I would need a way to boot the installer via external source.&lt;/p&gt;
&lt;p&gt;This required me to download the installer as an app. While it is possible to download it via App store, I chose to do it via the command line &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (because why not ?)&lt;/p&gt;
&lt;p&gt;Once the app is downloaded, I needed to create a bootable media. &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I had an extra SD card for such purposes - macOS images tend to be large. The SD card is 32GB.&lt;/p&gt;
&lt;p&gt;Once I booted via external source &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; - I selected &lt;code&gt;Disk Utility&lt;/code&gt; option, and formatted the disk. (Somewhere it mentioned that I needed to delete the &lt;code&gt;container&lt;/code&gt; rather than format individual volumes. So I did just that)&lt;/p&gt;
&lt;p&gt;After that OS install was uneventful. Answer bunch of questions (language, timezone, create user etc.) and wait while installer does its thing. (prepare drive, copy stuff etc.) (I didn&amp;rsquo;t actually wait-wait. Focused on work, rather than worrying &amp;ldquo;will it work, or fail again&amp;rdquo; 😄&lt;/p&gt;
&lt;p&gt;Finally, it was great to see myself greeted into macOS Monterey. (This is the final version supported on this hardware)&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Download installer app from terminal &lt;code&gt;softwareupdate --fetch-full-installer --full-installer-version 12.6.4&lt;/code&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Create bootable Disk &lt;code&gt;sudo /Applications/Install\ macOS\ Monterey.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume&lt;/code&gt; &lt;a href=&#34;https://support.apple.com/en-us/HT201372&#34;&gt;Ref&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Option (⌥) or Alt: Start up to Startup Manager, which allows you to choose the drive from which to boot from&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>MacOS Upgrade : The beginning</title>
        <link>https://microblog.desipenguin.com/post/macos-upgrade/</link>
        <pubDate>Mon, 27 Mar 2023 22:38:27 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/macos-upgrade/</guid>
        <description>&lt;p&gt;As I intended and mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/resetting-phone-2/&#34;&gt;here&lt;/a&gt; - I have started upgrade to macOS Monterey.
I had already taken backup. (I don&amp;rsquo;t expect the entire data to be lost, but still ..)
Just before I clicked the &lt;code&gt;upgrade&lt;/code&gt; button - I created a list of software I need to re-install after the upgrade.
I also went ahead and deleted apps left-right and center from the &lt;code&gt;Applications&lt;/code&gt; folder.
Nice (and not so nice) stroll down the memory lane.
There was so much junk accumulated over the years.&lt;/p&gt;
&lt;p&gt;Good opportunity to clean up.&lt;/p&gt;
&lt;p&gt;Currently, the progress bar shows few minutes shy of 1 hour.&lt;/p&gt;
&lt;p&gt;🤞&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Edit 1: First attempt failed :( Something about disk. After reboot, it went straight for OS upgrade - good.&lt;/p&gt;
&lt;p&gt;Edit 2: Second attempt also failed with same error &lt;code&gt;Storage system verify or repair failed: -69716&lt;/code&gt; 😭&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Zed Editor</title>
        <link>https://microblog.desipenguin.com/post/zed-editor/</link>
        <pubDate>Tue, 21 Mar 2023 09:30:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zed-editor/</guid>
        <description>&lt;p&gt;My colleague told me about this new editor written in rust yesterday.
The feaure page mentioned vim-mode, so I was OK to try it.&lt;/p&gt;
&lt;p&gt;It seems collaboration is their USP - I don&amp;rsquo;t see using that feature personally anytime soon.&lt;/p&gt;
&lt;p&gt;So what about rest of the features ?&lt;/p&gt;
&lt;p&gt;My first impression is that it can be &lt;em&gt;light&lt;/em&gt; alternative to VSCode. It has similar UI structure, default keymap as VScode. It supports few languages Out of the box, Ruby being one of them, so I may try it at work as well.&lt;/p&gt;
&lt;p&gt;Coming back to vim-mode - the reason for which I even was ready to try it.
It was not easy to enable it. I had expected to find it under keymap.&lt;/p&gt;
&lt;p&gt;But vim-mode is restricted to modal editing, so one needs to enable it via
&lt;code&gt;settings.json&lt;/code&gt; (similar to VScode) and set &lt;code&gt;&amp;quot;vim-mode&amp;quot;: true&lt;/code&gt; there.
Other things - not related to modal editing, but I have come to rely upon -
like &lt;code&gt;:&lt;/code&gt; commands to save (&lt;code&gt;:w&lt;/code&gt;), or &lt;code&gt;:1&lt;/code&gt; to jump to the beginning of the file, do not work.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Opening new file wasn&amp;rsquo;t intuitive. It closed the existing file.
There is no &lt;code&gt;New tab&lt;/code&gt; either.&lt;/p&gt;
&lt;p&gt;But after adding the &lt;code&gt;folder to the project&lt;/code&gt; and opening anotehr file from
the same project, opened it in separate tab. 😌&lt;/p&gt;
&lt;p&gt;In conclusion :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Good attempt to provide VScode alternative. Because it is a native app, it will be faster than Electron app&lt;/li&gt;
&lt;li&gt;This is not meant to be terminal app anyway. So for modal editing in terminal, I will stick to &lt;a href=&#34;https://microblog.desipenguin.com/tags/helix/&#34;&gt;helix&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;code&gt;Cmd+S&lt;/code&gt; to save the file, and &lt;code&gt;^G&lt;/code&gt; to goto line/column&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>After Factory Resetting the Phone</title>
        <link>https://microblog.desipenguin.com/post/resetting-phone-2/</link>
        <pubDate>Tue, 21 Mar 2023 09:22:19 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/resetting-phone-2/</guid>
        <description>&lt;p&gt;(&lt;em&gt;Read part 1 &lt;a href=&#34;https://microblog.desipenguin.com/post/resetting-phone/&#34;&gt;here&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;After the initial setup, I installed the apps that I use the most.
I had taken backup of my Google Authenticator codes via a QR code, which I sent to myself.&lt;/p&gt;
&lt;p&gt;I was able to scan it back from my Desktop Telegram app and all was well.&lt;/p&gt;
&lt;p&gt;Restoring Microsoft Authenticator - also used for work - was not so easy.
I couldn&amp;rsquo;t open an IT helpdesk ticket without logging into the Service Portal, which required me to be authenticated via MS Authenticator 😄&lt;/p&gt;
&lt;p&gt;Luckily, I was able to work with IT person in my timezone via Teams DM and got it sorted 😌&lt;/p&gt;
&lt;p&gt;I installed few other apps that I know I always use. (Some of them require setup/login - which I have not yet done)&lt;/p&gt;
&lt;p&gt;But I lost lot of (all?) of customizations. Simple things like ringtones.&lt;/p&gt;
&lt;p&gt;I also lost a few contacts - but google sync got most of them back (I think.) Looking back, I should have synced my contacts just before I did a factory reset. (Hindsight 20/20 and all that)&lt;/p&gt;
&lt;p&gt;I had a lot of music downloaded - I have a backup, so I copied some of them back.&lt;/p&gt;
&lt;p&gt;I had a bunch of recurring alarms that were lost. But I recreated the most used ones from memory (Some I didn&amp;rsquo;t need, cause they are part of my memory now)&lt;/p&gt;
&lt;p&gt;Some customizations were impossible to recreate. e.g. I used to use Google Indic keyboard - which isn&amp;rsquo;t available any more. It is now part of GBoard (I think) but it is slightly different. I can type indic languages, but it took some time to get used it.&lt;/p&gt;
&lt;p&gt;On the plus side, I&amp;rsquo;m sure lot of &amp;ldquo;junk&amp;rdquo; data and apps were cleaned up. I might have installed some app - just to try out, and never used it more than a few times. (And I don&amp;rsquo;t remember what it was - so I&amp;rsquo;m unlikely to reinstall it)&lt;/p&gt;
&lt;p&gt;The phone is working as expected.&lt;/p&gt;
&lt;p&gt;It does feel new (Physically the phone was always in good shape)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;---&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Armed with this experience - I&amp;rsquo;m gonna upgrade macOS now.&lt;/p&gt;
&lt;p&gt;My current version - Catalina - is unsupported by homebrew - and whole lot of new apps are not available on this version.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already done with files backup.&lt;/p&gt;
&lt;p&gt;It is a 12+ GB download.&lt;/p&gt;
&lt;p&gt;So all I need is some courage and bandwidth (Plan to start the download at night - hopefully by morning - download would have been complete 🤞&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>What is a micropost ?</title>
        <link>https://microblog.desipenguin.com/post/what-is-micropost/</link>
        <pubDate>Mon, 20 Mar 2023 09:25:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/what-is-micropost/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;You know what makes it so easy for many people to just dump their thoughts into a silo like Twitter instead of writing a post on their own site?
&lt;strong&gt;You don’t have to come up with a title for your post.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://matthiasott.com/notes/brain-dump&#34;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This site has two types of posts. The normal ones with title and tags. Other are &lt;code&gt;micropost&lt;/code&gt;s
I wrote about them &lt;a href=&#34;https://microblog.desipenguin.com/microposts/trying-new-theme/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;micropost is simply an entry without a title (and tags)&lt;/strong&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Resetting Phone : Part 1</title>
        <link>https://microblog.desipenguin.com/post/resetting-phone/</link>
        <pubDate>Wed, 15 Mar 2023 08:43:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/resetting-phone/</guid>
        <description>&lt;p&gt;My Android phone started acting weird few months ago. Some apps started crashing.
I started seeing &lt;code&gt;.. app keeps closing&lt;/code&gt; 😞&lt;/p&gt;
&lt;p&gt;Then Google Play services wouldn&amp;rsquo;t connect - even when phone was connected to the internet.&lt;/p&gt;
&lt;p&gt;I found out that uninstalling the updates (for Google Play) gets it working.
But since phone was connected to the internet, it would &amp;ldquo;auto update&amp;rdquo; and would break again.&lt;/p&gt;
&lt;p&gt;It started getting worse last few days.
I had no option but to reset my phone.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I started by taking backup of the data. Mainly photos.&lt;/p&gt;
&lt;p&gt;Turns out I had not taken backup since mid-2021 😱&lt;/p&gt;
&lt;p&gt;I also took backup of some other data files like documents and Music.&lt;/p&gt;
&lt;p&gt;I had two authenticator apps that I needed to connect to various services at work. So I was worried
about reseeting the phone.&lt;/p&gt;
&lt;p&gt;I considered switching to Authy - which is supposed to be compatible with Google Authenticator.
But I could not install Authy 😢 (Google Play Service broken)&lt;/p&gt;
&lt;p&gt;But during that research, I learnt that Google Authenticator allows to export all the accounts via QR code that it generates.&lt;/p&gt;
&lt;p&gt;I took a photo of that QR code using wife&amp;rsquo;s phone, and sent it to myself on Telegram (which I can access from Desktop as well) &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Then I disabled 2FA from google (&lt;em&gt;goes and turns 2FA back ON&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Finally, I was ready to factory reset my phone.&lt;/p&gt;
&lt;p&gt;I was bit anxious - but there was no other option.&lt;/p&gt;
&lt;p&gt;Delaying wasn&amp;rsquo;t gonna help.&lt;/p&gt;
&lt;p&gt;So mustered all the courage, prayed the deity and clicked &lt;code&gt;Factory Reset&lt;/code&gt; option from the settings.
I was asked for confirmation couple of times, and then it was done 😌&lt;/p&gt;
&lt;p&gt;The Phone was shut down, and then I saw &lt;code&gt;Erasing&lt;/code&gt; animation - gulp&lt;/p&gt;
&lt;p&gt;and then after some time, I was greeted with the Setup.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Later I realized that I could have also done screen capture from my own phone (Power+Volume down together - IIRC) and sent it to myself. Oh, well.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/building-crystal/</link>
        <pubDate>Mon, 13 Mar 2023 10:29:51 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/building-crystal/</guid>
        <description>&lt;p&gt;I tried to &lt;code&gt;brew install crystal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My first attempt seemed like hung, I had to &lt;code&gt;Ctrl-C&lt;/code&gt; my way out.
Second attempt took 45 minutes.&lt;/p&gt;
&lt;p&gt;I have a 7 years old MBP, it is fully functioning machine. In fact this is
being written on that machine.&lt;/p&gt;
&lt;p&gt;45 minutes+ seems like a lot&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>VSpaceCode</title>
        <link>https://microblog.desipenguin.com/post/vspacecode/</link>
        <pubDate>Thu, 09 Mar 2023 09:25:00 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vspacecode/</guid>
        <description>&lt;p&gt;I have written &lt;a href=&#34;https://microblog.desipenguin.com/post/using-vscode/&#34;&gt;earlier&lt;/a&gt; that I&amp;rsquo;ve started using VSCode
occasionally for work. Finding files and &lt;code&gt;find-in-files&lt;/code&gt; is much better and
faster.&lt;/p&gt;
&lt;p&gt;But I do miss modal editing.&lt;/p&gt;
&lt;p&gt;That is where VSpaceCode comes in.&lt;/p&gt;
&lt;p&gt;VSpaceCode is &lt;em&gt;Spacemacs like keybindings for Visual Studio Code&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I had come across VSpaceCode almost two years &lt;a href=&#34;https://github.com/VSpaceCode/VSpaceCode/issues/125#issuecomment-797593415&#34;&gt;ago&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I was using VSCodium at that time (hoping it is faster than VSCode - it isn&amp;rsquo;t - on my old machine)
and could not install VSpaceCode.&lt;/p&gt;
&lt;p&gt;Fast-forward 2 years later, I have fast M2 machine and I use VScode.&lt;/p&gt;
&lt;p&gt;I installed VSpaceCode extension pack.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still getting used to it. I had used Spacemacs long time ago, but mnemonic
keybinding for Doom are closer to Spacemacs, and thus VSpaceCode&lt;/p&gt;
&lt;p&gt;What I most liked about this extension pack is that there is &lt;code&gt;magit&lt;/code&gt; 🎉
How awesome is that.&lt;/p&gt;
&lt;p&gt;I used to make changes in VSCode and just for git I used to switch to Emacs.
Now (in theory) I don&amp;rsquo;t have to switch 😄&lt;/p&gt;
&lt;p&gt;(I wrote &lt;em&gt;In theory&lt;/em&gt; because I might switch to Emacs from time to time anyway,
but now at least not for using &lt;code&gt;magit&lt;/code&gt;)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>NANO Minemacs</title>
        <link>https://microblog.desipenguin.com/post/nano-minemacs/</link>
        <pubDate>Thu, 09 Mar 2023 09:09:49 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/nano-minemacs/</guid>
        <description>&lt;p&gt;In my &lt;a href=&#34;https://microblog.desipenguin.com/post/nano-emacs/&#34;&gt;earlier post&lt;/a&gt; I had mentioned that I might try
combining NANO emacs features with Minemacs - which is my current Emacs setup.&lt;/p&gt;
&lt;p&gt;NANO emacs README has instructions for
&lt;a href=&#34;https://github.com/rougier/nano-emacs#manual-installation&#34;&gt;manual install&lt;/a&gt;
which is what I ended up doing.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&#34;https://github.com/rougier/nano-theme&#34;&gt;separate repo&lt;/a&gt; just for the
NANO theme, but somehow it did not work for me.&lt;/p&gt;
&lt;p&gt;Instead, cloning the NANO emacs repo, and adding &amp;ldquo;just enough&amp;rdquo;™️ configuration
to Minemacs worked for me.&lt;/p&gt;
&lt;p&gt;Removing tool-bar, and setting the Dark theme directly took a bit of tinkering,
but finally I got it working.&lt;/p&gt;
&lt;p&gt;I noticed that because NANO emacs is cloned, and not installed using
package manager, it takes a little longer for the NANO parts to kick in.&lt;/p&gt;
&lt;p&gt;Minemacs complies all the packages hence they are quick to load.&lt;/p&gt;
&lt;p&gt;I may need to look into how to do that.&lt;/p&gt;
&lt;p&gt;AFAIK, straight allows to install from git repo, so that might work 🤷‍♂&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>The Arc Browser</title>
        <link>https://microblog.desipenguin.com/post/the-arc-browser/</link>
        <pubDate>Mon, 06 Mar 2023 11:06:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/the-arc-browser/</guid>
        <description>&lt;p&gt;Finally, got the access to the Arc browser.&lt;/p&gt;
&lt;p&gt;Quick overview of what it is.&lt;/p&gt;
&lt;p&gt;It is build on top of Chromium browser engine. But adds difference experience altogether. Benefit of using Chromium is that most of the extensions that work with Google Chrome already work. In fact, one installs the extensions from Google Chrome webstore itself 😄&lt;/p&gt;
&lt;p&gt;Most awesome feature that made me want to try it is that it will &lt;em&gt;Auto-close inactive tabs&lt;/em&gt; after 12 hours (default - can be increased to 24 hours, 7 or 30 days)&lt;/p&gt;
&lt;p&gt;They have and publicize the keyboard shortcuts. All browsers have keyboard shortcuts, but other the usual ones to open and close new window/tab, I hardly use any.&lt;/p&gt;
&lt;p&gt;I also tried &lt;code&gt;Notes&lt;/code&gt; that can be shared with anyone. I&amp;rsquo;m unlikely to use the share functionality. But the &lt;code&gt;Easel&lt;/code&gt; - which allows drawing (and sharing) - seems interesting.&lt;/p&gt;
&lt;p&gt;The concept of &lt;code&gt;Little Arc&lt;/code&gt; is interesting. It is a smaller (hence &lt;code&gt;Little&lt;/code&gt;) floating browser window.&lt;/p&gt;
&lt;p&gt;They also have &lt;code&gt;split view&lt;/code&gt; which I&amp;rsquo;m yet to explore. Seems useful when using bigger monitor.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you want to try it yourself, &lt;a href=&#34;https://arc.net/gift/bf73b46&#34;&gt;here is an invite link&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Gitlab WebIDE</title>
        <link>https://microblog.desipenguin.com/post/gitlab-web-ide/</link>
        <pubDate>Mon, 27 Feb 2023 11:12:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/gitlab-web-ide/</guid>
        <description>&lt;p&gt;This week I&amp;rsquo;m travelling for work, and hence carrying only my work laptop.
So far all my microblog entries were written from my personal laptop&lt;/p&gt;
&lt;p&gt;I have option to clone the repo on my work machine, or not publish anything
for this entire week (it is not like I publish every day, still ..)&lt;/p&gt;
&lt;p&gt;I prefer not to clone my perosnal repo on work machine, and missing publishing
also something I don&amp;rsquo;t want.&lt;/p&gt;
&lt;p&gt;Then I remembered someone mentioning &lt;code&gt;CMS for static sites&lt;/code&gt; and how it is
just an editor in browser, that is when I struck me that this may be a good
opportunity to try &lt;code&gt;Gitlab WebIDE&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;It looks like &lt;code&gt;VSCode in browser&lt;/code&gt; although Market place is disabled.&lt;/p&gt;
&lt;p&gt;For a simple markdown, I do not need any fancy IDE anyway.
Decent syntax highlighting (which works) is enough.&lt;/p&gt;
&lt;p&gt;I do miss modal editing (I use helix for these posts) but that is OK.&lt;/p&gt;
&lt;p&gt;So here is my first post not written using native editor 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Nano Emacs</title>
        <link>https://microblog.desipenguin.com/post/nano-emacs/</link>
        <pubDate>Thu, 23 Feb 2023 22:12:44 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/nano-emacs/</guid>
        <description>&lt;p&gt;NANO emacs looks quite amazing, polished.
Unfortunately, evil-mode is not turned ON by default.&lt;/p&gt;
&lt;p&gt;One thing I&amp;rsquo;m going to try is to combine NANO theme (and some related
packages) with Minemacs.&lt;/p&gt;
&lt;p&gt;Minemacs has evil mode and keybindings which are close to Doom and I had
no problem switching to it.&lt;/p&gt;
&lt;p&gt;NANO emacs README has instructions on how to install just the theme and other
parts, so that might do the trick.&lt;/p&gt;
&lt;p&gt;🤞&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Type accent marks in Wezterm on macOS</title>
        <link>https://microblog.desipenguin.com/post/accent-marks-wezterm/</link>
        <pubDate>Wed, 15 Feb 2023 09:47:48 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/accent-marks-wezterm/</guid>
        <description>&lt;p&gt;The tips from my &lt;a href=&#34;https://microblog.desipenguin.com/post/accent-marks-macos/&#34;&gt;previous post&lt;/a&gt; didn&amp;rsquo;t quite work
while writing the blog post using &lt;code&gt;helix&lt;/code&gt; editor.&lt;/p&gt;
&lt;p&gt;But as much as I can guess, it is a feature of the terminal and not the editor
itself. So no point searching &amp;ldquo;Accent marks in Helix&amp;rdquo; 😄&lt;/p&gt;
&lt;p&gt;Turns out initially&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; wezterm didn&amp;rsquo;t support accent mark without
special configuration. &lt;code&gt;(&#39;use_ime = true&#39;)&lt;/code&gt;, but since then it is enabled by default.&lt;/p&gt;
&lt;p&gt;Yet, it didn&amp;rsquo;t work for me.&lt;/p&gt;
&lt;p&gt;Turns out the bug&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; is specific to left Opt/ALT key 😆&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wez/wezterm/issues/2920#issuecomment-1371466131&#34;&gt;Solution&lt;/a&gt; to
get it working with both left and right ALT key is to add the following to &lt;code&gt;~/.config/wezterm/wezterm.lua&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	send_composed_key_when_left_alt_is_pressed &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	send_composed_key_when_right_alt_is_pressed &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tested. Works! 🎉&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wez/wezterm/issues/300&#34;&gt;Dead keys not working on macOS&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wez/wezterm/issues/2920&#34;&gt;Opt/LeftALT key not useable on OSX&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to type accent marks in macOS</title>
        <link>https://microblog.desipenguin.com/post/accent-marks-macos/</link>
        <pubDate>Wed, 15 Feb 2023 09:31:16 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/accent-marks-macos/</guid>
        <description>&lt;p&gt;In my &lt;a href=&#34;https://microblog.desipenguin.com/post/affirmations/&#34;&gt;previous post&lt;/a&gt; I needed to type letter &lt;code&gt;é&lt;/code&gt; but
didn&amp;rsquo;t know how. (So I just copied it from the browser page that search
result returned, explaining how to type accent marks on macOS 🧠)&lt;/p&gt;
&lt;p&gt;But later, I searched and got it working.&lt;/p&gt;
&lt;p&gt;We use what is called as &lt;code&gt;Dead Key&lt;/code&gt; method. In Keyboard viewer, pressing
the &lt;code&gt;ALT&lt;/code&gt; (or &lt;code&gt;Option&lt;/code&gt;) key, shows the dead keys.&lt;/p&gt;
&lt;p&gt;So to type &lt;code&gt;é&lt;/code&gt;, I press &lt;kbd&gt;ALT+e&lt;/kbd&gt;, this produces the accent, then (after
releasing &lt;code&gt;ALT&lt;/code&gt;) I press &lt;code&gt;e&lt;/code&gt;. This adds &lt;code&gt;é&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ALT+e e&lt;/code&gt; : &lt;code&gt;é&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT+o o&lt;/code&gt; : &lt;code&gt;ô&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALT+n o&lt;/code&gt; : &lt;code&gt;õ&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Affirmations</title>
        <link>https://microblog.desipenguin.com/post/affirmations/</link>
        <pubDate>Wed, 15 Feb 2023 08:54:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/affirmations/</guid>
        <description>&lt;ol&gt;
&lt;li&gt;Every day, in every way, I am getting better, better and better.&lt;/li&gt;
&lt;li&gt;Negative thoughts, negative suggestions, have no influence over me at any level of mind.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;I came across these in a famous book &lt;a href=&#34;https://amzn.to/3YTe6VY&#34;&gt;The Silva Mind Control Method&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
The book is quite old. I used to see this
(along with &amp;ldquo;The word power made easy&amp;rdquo;) at every bookseller while I was
growing up. (English not being my native tongue, I ignored these back then)&lt;/p&gt;
&lt;p&gt;Few days ago, I came across this book at the library.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still going through the book, but it seems interesting.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;About these affirmations: The book itself is quite old, and it attributes the
first one to Dr. Emile Coué.
I&amp;rsquo;m reading this book in early 2023, but I have heard variations of the first
one in various forms. Sometimes &amp;ldquo;in every way&amp;rdquo; is broken into specific areas
of life like health, relationships etc.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Affiliate link&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Memos: A lightweight, self-hosted memo hub</title>
        <link>https://microblog.desipenguin.com/post/memos/</link>
        <pubDate>Tue, 14 Feb 2023 08:49:21 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/memos/</guid>
        <description>&lt;p&gt;I&amp;rsquo;m not sure what the main feature of this app.&lt;/p&gt;
&lt;p&gt;Memos can be anything&lt;/p&gt;
&lt;p&gt;Somewhere it says &amp;ldquo;Twitter like&amp;rdquo;, and it does have different visibility settings.
Default being &amp;ldquo;Only visible to you&amp;rdquo;, but it can be changed.&lt;/p&gt;
&lt;p&gt;It also has user management, so it may be useful for say family with 3-5 users,
may be smaller start up 🤷‍♂&lt;/p&gt;
&lt;p&gt;I think the best part is ability to self-host. Maybe on Rpi, or in house server
(If considering for family)&lt;/p&gt;
&lt;p&gt;For a small startup, cheap host may be better.&lt;/p&gt;
&lt;p&gt;All the data is stored inside &lt;code&gt;~/.memos&lt;/code&gt; folder locally, which is mounted inside
docker container.&lt;/p&gt;
&lt;p&gt;Docker seems to be the only officially supported/documented/the easiest
option to get started.
They also have well written document for deploying to render (I might try it
if I stay with it for a while - or not 😄)&lt;/p&gt;
&lt;p&gt;Since all the data is stored in &lt;code&gt;~/.memos&lt;/code&gt; (in a SQLite DB, if it matters) it
is very easy to migrate to different machine.&lt;/p&gt;
&lt;p&gt;Currently, my &lt;em&gt;real&lt;/em&gt; &lt;code&gt;.memos&lt;/code&gt; folder resides inside Dropbox, and a symlink
from &lt;code&gt;~&lt;/code&gt; points to this real folder. So I can access/update the same data
from two different machines (I tested it, it works)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Do Something</title>
        <link>https://microblog.desipenguin.com/post/do-something/</link>
        <pubDate>Fri, 10 Feb 2023 13:10:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/do-something/</guid>
        <description>&lt;p&gt;These days I&amp;rsquo;m reading a book &amp;ldquo;The Subtle Art of Not Giving a F*ck&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In it, Author suggests that if you are stagnated, just &amp;ldquo;Do something&amp;rdquo; and
it will get you out.&lt;/p&gt;
&lt;p&gt;I had not posted here in a long time. High priority things at work,
late nights, that sort of thing.&lt;/p&gt;
&lt;p&gt;While high stress situation ended, the lethargy continued.&lt;/p&gt;
&lt;p&gt;Till I posted about &lt;a href=&#34;https://microblog.desipenguin.com/post/org-roam/&#34;&gt;Org-roam&lt;/a&gt; earlier today.&lt;/p&gt;
&lt;p&gt;and now I&amp;rsquo;m posting my second post of the day 😄&lt;/p&gt;
&lt;p&gt;The Advice of &amp;ldquo;Do Something&amp;rdquo; does work&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Org Roam</title>
        <link>https://microblog.desipenguin.com/post/org-roam/</link>
        <pubDate>Fri, 10 Feb 2023 12:07:33 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/org-roam/</guid>
        <description>&lt;p&gt;Since I started using &lt;a href=&#34;https://microblog.desipenguin.com/post/minemacs/&#34;&gt;minemacs&lt;/a&gt; few days ago, I discovered
some new things like org-roam&lt;/p&gt;
&lt;p&gt;As you might know, it is implementation of concepts from Roam research in org-mode
(That may not be accurate description, but close enough)&lt;/p&gt;
&lt;p&gt;I had tried org-mode long time ago, when I moved from vi/m to Emacs.&lt;/p&gt;
&lt;p&gt;But later, as I wanted to share (publish) my notes, I settled on markdown format.
(Yes, I&amp;rsquo;m aware that org-mode allows publishing notes, but for now
I prefer native markdown files)
Yet, org seems useful for personal notes since it is integrated within Emacs.&lt;/p&gt;
&lt;p&gt;I had also written about &lt;a href=&#34;https://microblog.desipenguin.com/post/stashpad/&#34;&gt;Stashpad&lt;/a&gt; and I use as
my &lt;code&gt;Developer notebook&lt;/code&gt; ever since.&lt;/p&gt;
&lt;p&gt;Since these are just snippets of data/information/instructions that are not
necessarily useful for others and/or are specific to the work and thus private,
these make perfect candidates for storing in org-roam&lt;/p&gt;
&lt;p&gt;org-roam are still text files.&lt;/p&gt;
&lt;p&gt;Stashpad notes OTOH are stored in proprietary (binary?) format (I don&amp;rsquo;t know
this as a fact, just guessing)&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;ve started moving my notes from Stashpad to Org-roam&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Minemacs</title>
        <link>https://microblog.desipenguin.com/post/minemacs/</link>
        <pubDate>Tue, 31 Jan 2023 09:17:38 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/minemacs/</guid>
        <description>&lt;p&gt;I came across this new starter configuration, described as
&amp;ldquo;Minimal Emacs config for daily use&amp;rdquo; via Sacha Chua&amp;rsquo;s Weekly Emacs Newsletter &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
If you are Emacs user, you should subscribe. You don&amp;rsquo;t have to share your email
unless you want to. She shares the links on Mastodon&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; (and other social apps)&lt;/p&gt;
&lt;p&gt;Back to Minemacs 😄&lt;/p&gt;
&lt;p&gt;It supports emacs versions 28.2 and above (But I got it working with 28.1&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;)&lt;/p&gt;
&lt;p&gt;It is kinda refreshing.
Doom Emacs is quite solid, and I&amp;rsquo;ve tweaked it to my liking over the years, but
wanted to try something new.&lt;/p&gt;
&lt;p&gt;The developer is very responsive.&lt;/p&gt;
&lt;p&gt;I also discovered org-roam by perusing through source code. (Hopefully another
post about org-roam soon)&lt;/p&gt;
&lt;p&gt;I think you should give it a try.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://sachachua.com/blog/category/emacs-news/&#34;&gt;Weekly Emacs News&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://emacs.ch/@sachac&#34;&gt;Sacha Shua on Mastodon&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/abougouffa/minemacs/issues/11&#34;&gt;Minemacs on emacs 28.1&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/d2-for-work/</link>
        <pubDate>Tue, 24 Jan 2023 06:07:58 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/d2-for-work/</guid>
        <description>&lt;p&gt;I used &lt;a href=&#34;https://microblog.desipenguin.com/tags/d2/&#34;&gt;D2&lt;/a&gt; for work today.&lt;/p&gt;
&lt;p&gt;So far it was just a curiosity.&lt;/p&gt;
&lt;p&gt;But there was an opportunity to use D2 when I had to document an important
data flow at work.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&#34;https://microblog.desipenguin.com/post/d2-playground/&#34;&gt;D2 Playground&lt;/a&gt;, it is much easier for my colleagues
to use same simple format to update the diagram in future when needed.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/rss-enabled/</link>
        <pubDate>Thu, 05 Jan 2023 10:25:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/rss-enabled/</guid>
        <description>&lt;p&gt;Now this site has RSS enabled. For both &lt;code&gt;posts&lt;/code&gt; and &lt;code&gt;microposts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Next step : Auto post to Mastodon 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Bullet train: Rails based framework</title>
        <link>https://microblog.desipenguin.com/post/bullettrain/</link>
        <pubDate>Wed, 04 Jan 2023 09:57:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bullettrain/</guid>
        <description>&lt;p&gt;I came across this from (now defunct) &lt;a href=&#34;https://railsapps.org/&#34;&gt;rails app&lt;/a&gt; site.
They seem to provide a lot of stuff in their open source version.&lt;/p&gt;
&lt;p&gt;Seems like a good framework to get started on the side project or MVP&lt;/p&gt;
&lt;p&gt;Other paid features are worth paying when your app starts making money.&lt;/p&gt;
&lt;p&gt;I need to spend more time on digging deeper, and actually trying it out.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Now individual posts too show title, date and tags</title>
        <link>https://microblog.desipenguin.com/post/single-posts-have-meta/</link>
        <pubDate>Wed, 04 Jan 2023 09:49:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/single-posts-have-meta/</guid>
        <description>&lt;p&gt;After I switched the theme for this blog, for the longest time I had not
noticed that when reader is viewing specific post, they do not see the
metadata like title, date etc.&lt;/p&gt;
&lt;p&gt;When I noticed, I tried some time debugging, but couldn&amp;rsquo;t figure out why this
was happening. So like a good developer that I am, I created
a &lt;a href=&#34;https://github.com/mandarvaze/hugo-microblog/issues/2&#34;&gt;github issue&lt;/a&gt; so that
I can fix it later (and not forget it)&lt;/p&gt;
&lt;p&gt;Yesterday, I chose to fix it, and after doing some RCA, I (think) I found the
&lt;a href=&#34;https://github.com/mandarvaze/hugo-microblog/issues/2#issue-1478322422&#34;&gt;reason&lt;/a&gt;
why it was not working.&lt;/p&gt;
&lt;p&gt;I still didn&amp;rsquo;t know how to fix it, and it was late.&lt;/p&gt;
&lt;p&gt;This morning, I searched based on my understanding, and within few minutes
I was able to fix it.&lt;/p&gt;
&lt;p&gt;🎉&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>D2 Playground</title>
        <link>https://microblog.desipenguin.com/post/d2-playground/</link>
        <pubDate>Mon, 02 Jan 2023 09:14:36 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/d2-playground/</guid>
        <description>&lt;p&gt;I&amp;rsquo;m not sure whether they launched this recently, or it was always there (As in
since I looked at D2 couple weeks ago)&lt;/p&gt;
&lt;p&gt;Nevertheless, it is quite nice.&lt;/p&gt;
&lt;p&gt;If one is not used to CLI and/or does not wish to (or can not, due to
permission on say work machine) install it locally, then playground the best
option.&lt;/p&gt;
&lt;p&gt;It has all the options the CLI provides (At least the most widely used options)&lt;/p&gt;
&lt;p&gt;One can&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;export the images&lt;/li&gt;
&lt;li&gt;Change Engines&lt;/li&gt;
&lt;li&gt;Change Themes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What else do you need ? 😄&lt;/p&gt;
&lt;p&gt;The playground also has sample code right below it, so one does not need to
refer to the documentation (Especially during initial days when one is still
figuring things out)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/happy-new-year-2023/</link>
        <pubDate>Sun, 01 Jan 2023 07:32:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/happy-new-year-2023/</guid>
        <description>&lt;p&gt;I wish you all a happy new year 2023!&lt;/p&gt;
&lt;p&gt;May this year bring all the joy you want.&lt;/p&gt;
&lt;p&gt;May you find the satisfaction in your work and happiness in your personal life!&lt;/p&gt;
&lt;p&gt;I wish you find your peace of mind!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Year 2022 Review</title>
        <link>https://microblog.desipenguin.com/post/review-2022/</link>
        <pubDate>Sat, 31 Dec 2022 07:01:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/review-2022/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blogging&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;I started this blog in Dec 2021, and in year 2022 - I wrote 80+ posts
and 8 microposts 🎉&lt;/li&gt;
&lt;li&gt;Switched to theme that supports microposts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editor&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Tried Neovim for few months and went down the rabbit hole&lt;/li&gt;
&lt;li&gt;Till I found &lt;a href=&#34;https://microblog.desipenguin.com/tags/helix/&#34;&gt;Helix&lt;/a&gt; - no/low configuration modal editor&lt;/li&gt;
&lt;li&gt;Started using Helix Editor exclusively for writing these posts.&lt;/li&gt;
&lt;li&gt;Still using Emacs for office work&lt;/li&gt;
&lt;li&gt;Recently I&amp;rsquo;m using VSCode for work 🤷‍♂&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Art&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Seems like I drew only one sketch (Analog) this entire year 😱&lt;/li&gt;
&lt;li&gt;Purchased a graphics tablet (No screen)&lt;/li&gt;
&lt;li&gt;Still getting used to &lt;a href=&#34;https://microblog.desipenguin.com/tags/art/&#34;&gt;drawing digitally&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social Media&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Started using &lt;a href=&#34;https://microblog.desipenguin.com/tags/mastodon/&#34;&gt;Mastodon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Also &lt;a href=&#34;https://microblog.desipenguin.com/post/pixey.org/&#34;&gt;Pixey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Although I have not imported my Instagram posts yet&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work/Programming&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Switched (back to) Zsh after using Fish for a couple of years.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://microblog.desipenguin.com/post/left-stck.me/&#34;&gt;Switched jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Now working in &lt;a href=&#34;https://microblog.desipenguin.com/tags/ruby/&#34;&gt;Ruby&lt;/a&gt; for almost a year&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Why do people watch horror movies?</title>
        <link>https://microblog.desipenguin.com/post/why-horror-movies/</link>
        <pubDate>Wed, 28 Dec 2022 09:46:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/why-horror-movies/</guid>
        <description>&lt;p&gt;Today, I listened to this &lt;a href=&#34;https://freakonomics.com/podcast/why-do-people-love-horror-movies/&#34;&gt;episode&lt;/a&gt;
of NSQ - No stupid questions - podcast.&lt;/p&gt;
&lt;p&gt;Angela mentioned that she has watched 4 out of top 10 horror movies (from some list)
Dubner was 0/10&lt;/p&gt;
&lt;p&gt;Turns out, Angela watched all those only during her twenties or earlier.&lt;/p&gt;
&lt;p&gt;Some study noticed that audience for such movies comprises mostly young adults.
(Because they are seeking thrill ?)&lt;/p&gt;
&lt;p&gt;Psychologists Paul Rozin calls this &amp;ldquo;benign masochism&amp;rdquo;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In the book &amp;ldquo;Illusions&amp;rdquo;, Richard Bach asked Donald Shimoda the same question,
and was answered as :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Because they think they deserve it for horrifying somebody else
Or they like the excitement of horrification&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Two ways to look at the same question 🙂&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to get 13 Digit Epoch time in Shell (Ruby Version)</title>
        <link>https://microblog.desipenguin.com/post/13-digit-epoch-ruby/</link>
        <pubDate>Tue, 20 Dec 2022 10:21:59 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/13-digit-epoch-ruby/</guid>
        <description>&lt;p&gt;I needed this, because
&lt;a href=&#34;https://pkm.desipenguin.com/notes/d7c0c7c4-be4e-48f5-bc96-fb387704596e/#manually-updating-created-and-updated-front-matter&#34;&gt;Dendron&lt;/a&gt;
uses 13-digit epoch time, for &lt;code&gt;created&lt;/code&gt; and &lt;code&gt;updated&lt;/code&gt; timestamps.
While it is not a problem when notes are created from within VSCode (as is
expected - since Dendron is a VSCode plugin) - I don&amp;rsquo;t use VSCode much.&lt;/p&gt;
&lt;p&gt;While Dendron has command line tools to create new notes, and notes are markdown
only the timestamps are problem.&lt;/p&gt;
&lt;p&gt;Hence, the need to create 13-digit epoch time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;date &amp;quot;+%s&amp;quot;&lt;/code&gt; can be used to get the epoch time, it only returns 10 digits.
Since I don&amp;rsquo;t care about millisecond precision in my time stamps, I can always
add 3 extra &lt;code&gt;0&lt;/code&gt;s at the end, yet it is a hassel.&lt;/p&gt;
&lt;p&gt;Hence, the need for solution that does not require manual work 😄&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ruby -e &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;puts (Time.now.to_f * 1000).floor&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At first, it seemed like it didn&amp;rsquo;t work because I didn&amp;rsquo;t have &lt;code&gt;puts&lt;/code&gt; 😆&lt;/p&gt;
&lt;p&gt;looks like, it is also doing the same - add 3 extra &lt;code&gt;0&lt;/code&gt;s at the end,
by multiplying by 1000 - except mathematically 😆&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Finally, I added this to my espanso configuration file as :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;matches&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;trigger&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;:utime&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;replace&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;{{output}}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;vars&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;output&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;shell&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;params&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;cmd&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;ruby -e &amp;#39;puts (Time.now.to_f * 1000).floor&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      </item>
      
    
      
      <item>
        <title>Emacs D2 Mode</title>
        <link>https://microblog.desipenguin.com/post/emacs-d2-mode/</link>
        <pubDate>Thu, 15 Dec 2022 13:11:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-d2-mode/</guid>
        <description>&lt;p&gt;It was only a matter of time before there was Emacs mode for &lt;a href=&#34;https://microblog.desipenguin.com/post/d2-diagram/&#34;&gt;D2&lt;/a&gt; 😆&lt;/p&gt;
&lt;p&gt;and &lt;a href=&#34;https://github.com/andorsk/d2-mode&#34;&gt;here&lt;/a&gt; it is.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m yet to try it though.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Pixey.org</title>
        <link>https://microblog.desipenguin.com/post/pixey.org/</link>
        <pubDate>Tue, 13 Dec 2022 06:04:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/pixey.org/</guid>
        <description>&lt;p&gt;Pixey is instance of &lt;a href=&#34;https://pixelfed.org/&#34;&gt;Pixelfed&lt;/a&gt; server (Just like
there are several servers running Mastodon software)&lt;/p&gt;
&lt;p&gt;Just as Mastodon is Decentralized version of twitter, Pixelfed is
decentralized version of Instagram.&lt;/p&gt;
&lt;p&gt;Here is my &lt;a href=&#34;https://pixey.org/mandarvaze&#34;&gt;pixey profile&lt;/a&gt;
For some reason, when in full view mode, the image appears black. 🤷‍♂
(This is true only for sketched drawn and exported from
&lt;a href=&#34;https://okso.app/&#34;&gt;ok!so app&lt;/a&gt;)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/tldraw-can-export/</link>
        <pubDate>Mon, 12 Dec 2022 05:54:57 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/tldraw-can-export/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://microblog.desipenguin.com/microposts/tldraw/&#34;&gt;Earlier&lt;/a&gt; I thought that tldraw can not save as other
image file formats. I was wrong.&lt;/p&gt;
&lt;p&gt;There is indeed &lt;code&gt;Export as&lt;/code&gt; option, and it works !&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/bhshivani-live/</link>
        <pubDate>Sun, 11 Dec 2022 22:23:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/bhshivani-live/</guid>
        <description>&lt;p&gt;Earlier this evening, I attended live sermon delivered by BK Shivani didi&lt;/p&gt;
&lt;p&gt;Feeling blessed!&lt;/p&gt;
&lt;p&gt;Feeling lucky that I got opportunity to listen to her in person, I also saw her
in person when she was walking away.&lt;/p&gt;
&lt;p&gt;She is modern day saint.&lt;/p&gt;
&lt;p&gt;No miracles, but the knowledge she spreads deserves recognition.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>paint.diagram.com</title>
        <link>https://microblog.desipenguin.com/post/paint.diagram.com/</link>
        <pubDate>Sun, 11 Dec 2022 11:48:43 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/paint.diagram.com/</guid>
        <description>&lt;p&gt;I drew this using finger on the trackpad.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m impressed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/face.svg&#34; alt=&#34;finger on trackpad&#34;&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/tldraw/</link>
        <pubDate>Sun, 11 Dec 2022 11:42:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/tldraw/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://beta.tldraw.com/&#34;&gt;tldraw&lt;/a&gt; seems interesting.&lt;/p&gt;
&lt;p&gt;Drawing program inside your browser.&lt;/p&gt;
&lt;p&gt;While it does not have &lt;code&gt;Save as&lt;/code&gt; functionality, it does have &lt;code&gt;Print&lt;/code&gt; option
which can be paired with &lt;code&gt;Print to PDF&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I can live it that.&lt;/p&gt;
&lt;p&gt;Need to try out.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Using VSCode</title>
        <link>https://microblog.desipenguin.com/post/using-vscode/</link>
        <pubDate>Sat, 10 Dec 2022 08:44:24 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/using-vscode/</guid>
        <description>&lt;p&gt;I installed and used VSCode on office provided MBP yesterday.
It is not like I have not used it in past. I tried vscode-vim plugin
for modal editing. It allows you to embed neovim in VSCode (So all the
configuration of neovim is available here.)&lt;/p&gt;
&lt;p&gt;But on my old machine, it was slow.&lt;/p&gt;
&lt;p&gt;(I also tried VSCodium, thinking it might be faster. It wasn&amp;rsquo;t)&lt;/p&gt;
&lt;p&gt;I used it exclusively for Dendron (my &lt;a href=&#34;https://pkm.desipenguin.com&#34;&gt;PKM&lt;/a&gt;)
cause it is mainly VSCode plugin (While it has command line tools, the main
strength is as VScode plugin)&lt;/p&gt;
&lt;p&gt;But never for coding.&lt;/p&gt;
&lt;p&gt;Till yesterday.&lt;/p&gt;
&lt;p&gt;Confession : It quite liked it.&lt;/p&gt;
&lt;p&gt;I mainly needed it to go over large RoR project codebase.&lt;/p&gt;
&lt;p&gt;I tried &lt;code&gt;solargraph&lt;/code&gt; LSP with helix (and Emacs. &lt;code&gt;robe-mode&lt;/code&gt; is slightly better)
But it is documented NOT to work with Rails.&lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t work with VSCode either.&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;Find in files&lt;/code&gt; on my newer machine is quite fast (Goto definition still
does not work 😞)&lt;/p&gt;
&lt;p&gt;I occasionally started with &lt;code&gt;insert mode&lt;/code&gt; 😆 - but non-modal also worked.&lt;/p&gt;
&lt;p&gt;Confession : I didn&amp;rsquo;t mind it (Maybe enjoyed it a little bit)&lt;/p&gt;
&lt;p&gt;There.&lt;/p&gt;
&lt;p&gt;Confessed!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I&amp;rsquo;m unlikely to switch to VSCode completely.&lt;/p&gt;
&lt;p&gt;Both helix and Emacs have modal editing, and after 2 decades of muscle memory
I don&amp;rsquo;t want to go back to non-modal.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Drawing Tablet</title>
        <link>https://microblog.desipenguin.com/post/drawing-tablet/</link>
        <pubDate>Sat, 10 Dec 2022 05:51:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/drawing-tablet/</guid>
        <description>&lt;p&gt;I was always fascinated with devices with stylus, where I could draw
electronically (Not sure if the word &lt;em&gt;digitally&lt;/em&gt; was being used back then.)&lt;/p&gt;
&lt;p&gt;My first such device was Palm III.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; It came with Stylus.
That was in the last century.&lt;/p&gt;
&lt;p&gt;Needless to say, I stopped using after year or 3. (I had it long time after that, and then I finally gave it for electronic waste/recyling program 😢)&lt;/p&gt;
&lt;p&gt;Then after my elder son was born (which has no significance -
just that I remember it as such) I purchased Samsung Galaxy Note 8 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I still have it. I use it primarily for reading kindle books. My children use
it for watching Youtube kids.
Just recently it has developed some problem and isn&amp;rsquo;t charging anymore. 😢&lt;/p&gt;
&lt;p&gt;Unfortunately, after initial enthusiasm &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; dwindled, I hardly took the stylus out 😞&lt;/p&gt;
&lt;p&gt;I think the issue was writing on glass does not feel natural and while 8&amp;quot; tab
was much better than handheld device like Palm III, it was still smaller than
A4 paper I mostly used for analog drawing/sketching.&lt;/p&gt;
&lt;p&gt;That brings us to my latest &lt;a href=&#34;https://microblog.desipenguin.com/post/xp-pen-deco-mini-7/&#34;&gt;purchase&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is too early (only days) to comment.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still figuring out the software that works for me.&lt;/p&gt;
&lt;p&gt;But it has a feel of writing on paper (sometimes it makes a noise like pencil
on rough paper, I wonder if it is haptic feedback) better than feel of writing
on glass.&lt;/p&gt;
&lt;p&gt;Bigger size of the screen also addresses some problems (?) I had earlier.&lt;/p&gt;
&lt;p&gt;I hope to make much better use this time around 🤞&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;If you are wondering what is Palm III, see &lt;a href=&#34;https://i.ebayimg.com/images/g/HpEAAOSwC3lhm-DH/s-l1600.jpg&#34;&gt;this&lt;/a&gt;
external link (Link may become 404 🤷‍♂)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;There was an 8-inch &lt;a href=&#34;https://www.gsmarena.com/samsung_galaxy_note_8_0-5252.php&#34;&gt;tab&lt;/a&gt;,
before there was &lt;a href=&#34;https://www.gsmarena.com/samsung_galaxy_note8-8505.php&#34;&gt;phone&lt;/a&gt; by the same name 🤷‍♂&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;See my initial sketchnotes, drawn on Galaxy Note 8 &lt;a href=&#34;https://learnings.desipenguin.com/galleries/sketchnotes/&#34;&gt;here&lt;/a&gt; oldest 5 were digital.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>XP Deco mini 7</title>
        <link>https://microblog.desipenguin.com/post/xp-pen-deco-mini-7/</link>
        <pubDate>Wed, 07 Dec 2022 05:51:47 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/xp-pen-deco-mini-7/</guid>
        <description>&lt;p&gt;I purchased myself &lt;a href=&#34;https://amzn.to/3hfeeyF&#34;&gt;XP-pen Deco mini 7&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; 🎉&lt;/p&gt;
&lt;p&gt;Was debating between this and iPad for so long.&lt;/p&gt;
&lt;p&gt;This won, cause :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Much cheaper&lt;/li&gt;
&lt;li&gt;Can be connected to Android phone, Windows PC or macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial impressions :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feels like writing on a piece of paper (as opposed to, on a glass surface)&lt;/li&gt;
&lt;li&gt;The pen is BIG! (Not used to such big pen or stylus)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still getting used to various sketching software.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll start with something easy (Started with Autodesk Sketchbook - Big mistake - Got lost)&lt;/p&gt;
&lt;p&gt;Using Zoho &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.zoho.notebook&amp;amp;hl=en_US&amp;amp;gl=US&#34;&gt;Notebook&lt;/a&gt;
on mobile to draw was already easy with fingers. With pen, it is much nicer.&lt;/p&gt;
&lt;p&gt;Drawing on mobile (smaller screen) using this tablet, seemed easier than drawing
on laptop screen (Mostly because I have not found a software that works for me)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m so happy!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Affiliate link&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Zsh Autosuggestions</title>
        <link>https://microblog.desipenguin.com/post/zsh-autosuggestions/</link>
        <pubDate>Tue, 06 Dec 2022 09:35:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/zsh-autosuggestions/</guid>
        <description>&lt;p&gt;I used &lt;code&gt;zsh&lt;/code&gt; for couple of years, and then switched to &lt;code&gt;fish&lt;/code&gt; mainly for
its built-in autocompletion.&lt;/p&gt;
&lt;p&gt;fish is a modern shell (just like helix) and thus (I think) it does several
things differently. For someone using various shells for over 2 decades,
resisting muscle memory does not come easy. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I was used to &lt;code&gt;export KEY=value&lt;/code&gt;, so in fish I always had to look up &lt;code&gt;How to  set an environment variable in fish&lt;/code&gt; 😆 - even after 2 years.&lt;/p&gt;
&lt;p&gt;Third party programs do not always work with &lt;code&gt;fish&lt;/code&gt; - usually I was able to
find a way, but if not, I would just invoke either bash or zsh and get work
done. (and switch back to fish when done) But I would miss the auto completion
when I switched.&lt;/p&gt;
&lt;p&gt;So when a colleague told me about zsh auto suggestions, I was thrilled.
But I lost the link.&lt;/p&gt;
&lt;p&gt;When searched, I came across &lt;a href=&#34;https://github.com/marlonrichert/zsh-autocomplete&#34;&gt;zsh autocomplete&lt;/a&gt;
which seems to be under active development. I tried it for few days, but I
did not like it much. It seemed too intrusive.&lt;/p&gt;
&lt;p&gt;Then I asked the person who had suggested it earlier, and got
&lt;a href=&#34;https://github.com/zsh-users/zsh-autosuggestions&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Turns out, I had come across it earlier in my search, but the repo isn&amp;rsquo;t updated
since mid-2021 😞 - so I had ignored it.&lt;/p&gt;
&lt;p&gt;Turns out, it works very well. Just like &lt;code&gt;fish&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Maybe it is stable enough that it does not need code changes 😄&lt;/p&gt;
&lt;p&gt;Installing it via &lt;code&gt;oh-my-zsh&lt;/code&gt; is trivial (and documented).&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;ve switched back to &lt;code&gt;zsh&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I did it multiple times with various degrees of success. zsh -&amp;gt; fish,
vi(m) to emacs (Though I continued using evil/modal editing) -&amp;gt; helix, and
python -&amp;gt; ruby (struggling)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/write-only-pkm/</link>
        <pubDate>Mon, 05 Dec 2022 22:45:35 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/write-only-pkm/</guid>
        <description>&lt;p&gt;Sometimes it is said that notes are &lt;code&gt;write-only&lt;/code&gt;
i.e. No one reads them later 🤷‍♂&lt;/p&gt;
&lt;p&gt;The same happened with me today.&lt;/p&gt;
&lt;p&gt;I was looking for way to get only certain file from &lt;code&gt;git stash&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I asked &lt;code&gt;ChatGPT&lt;/code&gt; with mixed results. (It provided correct answers, but
more verbose. On asking, better explanation was provided, still..)&lt;/p&gt;
&lt;p&gt;During such time, stackoverflow shines.&lt;/p&gt;
&lt;p&gt;Even without going to SO site, the answer is included right on the search results.&lt;/p&gt;
&lt;p&gt;I decided that since it was hard to find, it is worth adding it to PKM.&lt;/p&gt;
&lt;p&gt;Turns out I already had it &lt;a href=&#34;https://pkm.desipenguin.com/notes/htIulptUQJdrsatC/#get-only-subset-of-files-from-stash&#34;&gt;stored&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🤦‍♂🙈&lt;/p&gt;
&lt;p&gt;That is why it is called &lt;code&gt;write-only&lt;/code&gt; 😆&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/updated-starship-oh-my-zsh/</link>
        <pubDate>Mon, 05 Dec 2022 22:35:05 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/updated-starship-oh-my-zsh/</guid>
        <description>&lt;p&gt;I came across fish like auto suggestions plugin for zsh.
When I started to update that, I noticed that my &lt;code&gt;oh-my-zsh&lt;/code&gt; is two years old
(now that we are near the end of 2022, it is more like close to three)&lt;/p&gt;
&lt;p&gt;So I uninstalled and reinstalled &lt;code&gt;oh-my-zsh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But the prompt won&amp;rsquo;t look nice.&lt;/p&gt;
&lt;p&gt;That is when I realized that starship is not hooked to zsh&lt;/p&gt;
&lt;p&gt;and that starship is also due for an update (6 months)&lt;/p&gt;
&lt;p&gt;So upgraded &lt;code&gt;starship&lt;/code&gt; and then hooked it up to &lt;code&gt;zsh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now I can try the autosuggestions plugin. ☺️&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Emacs Mode in Shell</title>
        <link>https://microblog.desipenguin.com/post/emacs-mode-in-term/</link>
        <pubDate>Mon, 05 Dec 2022 16:46:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-mode-in-term/</guid>
        <description>&lt;p&gt;I have been using Emacs for several years now. But I switched to
(and stayed with) Emacs only because of evil mode.&lt;/p&gt;
&lt;p&gt;I had been vi user for decades before that. Even today, I use (Neo)vi(m)
occasionally.&lt;/p&gt;
&lt;p&gt;Right now, I&amp;rsquo;m writing this in Helix editor, which is lot closer to modal editing
of vi, than of Emacs.&lt;/p&gt;
&lt;p&gt;So there.&lt;/p&gt;
&lt;p&gt;I am aware that various shell support &lt;code&gt;vi mode&lt;/code&gt;, but the default is Emacs.&lt;/p&gt;
&lt;p&gt;But I never invested time to either turn on vi-mode or learn Emacs keybindings&lt;/p&gt;
&lt;p&gt;Till last week.&lt;/p&gt;
&lt;p&gt;One of my colleagues told me about &lt;code&gt;Ctrl-A&lt;/code&gt; to move to the beginning of the line
and &lt;code&gt;Ctrl-E&lt;/code&gt; for the end of the line.&lt;/p&gt;
&lt;p&gt;This has been so helpful.&lt;/p&gt;
&lt;p&gt;Now I am motivated learn more Emacs keybindings.&lt;/p&gt;
&lt;p&gt;I might also try to turn of &lt;code&gt;vi mode&lt;/code&gt; for zsh.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Firefox Test Dark Mode</title>
        <link>https://microblog.desipenguin.com/post/firefox-test-dark-mode/</link>
        <pubDate>Sat, 03 Dec 2022 21:45:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/firefox-test-dark-mode/</guid>
        <description>&lt;p&gt;My previous theme &lt;a href=&#34;https://github.com/mandarvaze/indiefeed&#34;&gt;indiefeed&lt;/a&gt;
supported both light and darkmode. The current one does not.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in the &lt;a href=&#34;https://microblog.desipenguin.com/post/support-both-light-dark-mode/&#34;&gt;process of fixing that&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But I didn&amp;rsquo;t know how to test it ? i.e. Depending on the time of the day,
Firefox would either select light mode or dark.&lt;/p&gt;
&lt;p&gt;Turns out, Developer tool lets you switch it (for that page).&lt;/p&gt;
&lt;p&gt;When in &lt;code&gt;Inspector&lt;/code&gt; tab, look for icons for Sun (light) and moon (dark).&lt;/p&gt;
&lt;p&gt;See the diagram below :&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/firefox-dev-tools.png&#34; alt=&#34;Test Dark Mode&#34;&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to Support Both Light and Dark Mode for your app</title>
        <link>https://microblog.desipenguin.com/post/support-both-light-dark-mode/</link>
        <pubDate>Fri, 02 Dec 2022 19:15:51 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/support-both-light-dark-mode/</guid>
        <description>&lt;p&gt;Add something like the following to your css&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;media&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;prefers-color-scheme&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;light&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#666&#34;&gt;#f0f0f0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;media&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;prefers-color-scheme&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;dark&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#666&#34;&gt;#0f0f0f&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I&amp;rsquo;m just learning this. But this above doesn&amp;rsquo;t look scalable.
My previous theme, defined colors as variables, per color-scheme
and in the other css, use these variables instead of actual colors.&lt;/p&gt;
&lt;p&gt;That way, you need to modify colors only at one place 🎉&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://github.com/dianoetic/indiefeed/blob/master/static/css/vars.css&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>D2 Layouts</title>
        <link>https://microblog.desipenguin.com/post/d2-layouts/</link>
        <pubDate>Thu, 01 Dec 2022 09:38:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/d2-layouts/</guid>
        <description>&lt;p&gt;D2 allows me to generate diagrams from the same source file using different
layouts&lt;/p&gt;
&lt;p&gt;It comes with two built-in layout engines :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dagre&lt;/code&gt; is the default :&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/d2-dagre.svg&#34; alt=&#34;Dagre&#34;&gt;&lt;/p&gt;
&lt;p&gt;Other one is &lt;code&gt;ELK&lt;/code&gt; This needs to be specified explicitly as :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;D2_LAYOUT=elk d2 in.d2 out.svg &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and here is the output&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/d2.svg&#34; alt=&#34;ELK&#34;&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>D2 : A modern diagram scripting language</title>
        <link>https://microblog.desipenguin.com/post/d2-diagram/</link>
        <pubDate>Thu, 01 Dec 2022 05:50:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/d2-diagram/</guid>
        <description>&lt;p&gt;I came across &lt;a href=&#34;https://d2lang.com/&#34;&gt;D2&lt;/a&gt; on Mastodon I think. (Like most things.
But I can&amp;rsquo;t find the original toot 🤷‍♂)&lt;/p&gt;
&lt;p&gt;I used mermaid.js earlier. In fact, I also
&lt;a href=&#34;https://github.com/jnjosh/internet-weblog/commit/f42b8fc01880c64cbd265a323a7698a659187c37&#34;&gt;added&lt;/a&gt;
mermaid support for this theme.&lt;/p&gt;
&lt;p&gt;Benefit of Mermaid is that since it is generated by &lt;code&gt;mermaid.js&lt;/code&gt;, I don&amp;rsquo;t need
to save and include the image in my blog (and worry about mismatched filename
and/or path, resulting into broken image.)&lt;/p&gt;
&lt;p&gt;On the other hand, not many hugo themes support mermaid, but link to an image
is supported by hugo and every other SSG.&lt;/p&gt;
&lt;p&gt;Since I have not used mermaid extensively, I need to refer to the documentation
for mermaid anyway. So learning D2&amp;rsquo;s syntax isn&amp;rsquo;t any worse.&lt;/p&gt;
&lt;p&gt;But I think D2&amp;rsquo;s syntax is much easier.&lt;/p&gt;
&lt;p&gt;See this D2 syntax for reference :&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;content: Write contents in markdown
content -&amp;gt; source git repo : git push
Site in docs folder -&amp;gt; netlify deploy : git push
content -&amp;gt; Site in docs folder : Dendron: Site Build
 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and here is a generated SVG file.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/d2.svg&#34; alt=&#34;D2&#34;&gt;&lt;/p&gt;
&lt;p&gt;Now compare this with mermaid syntax:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;graph LR;
    A{ Write Content in markdown }
    A --&amp;gt;| git push | B[ source git repo ]
    A --&amp;gt;| Dendron: Site Build | C[ Site in `docs` folder ]
    C --&amp;gt;| git push | D[ netlify deploy ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and generated image :&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;

%%{init: {&#39;themeVariables&#39;:{&#39;lineColor&#39;: &#39;lightblue&#39;, &#39;arrowheadColor&#39;: &#39;lightblue&#39;}}}%%
graph LR;
    A{ Write Content in markdown }
    A --&gt;| git push | B[ source git repo ]
    A --&gt;| Dendron: Site Build | C[ Site in `docs` folder ]
    C --&gt;| git push | D[ netlify deploy ]

&lt;/div&gt;

</description>
      </item>
      
    
      
      <item>
        <title>Beggar</title>
        <link>https://microblog.desipenguin.com/post/beggar/</link>
        <pubDate>Sun, 27 Nov 2022 11:26:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/beggar/</guid>
        <description>&lt;p&gt;Yesterday, after I came out of a shop, some elderly woman was begging.
Near that shop, it is not uncommon.&lt;/p&gt;
&lt;p&gt;She did not look like a beggar. Yet she was.&lt;/p&gt;
&lt;p&gt;At first, I gave her Rs. 50 - which maybe more than what people usually give
beggars (I think).&lt;/p&gt;
&lt;p&gt;I was surprised that she said I don&amp;rsquo;t want money, I want rice and daal
(lentils) instead. I was positively surprised. Not many beggars ask for things.
I told her to buy grocery herself. There is a grocery store next door.&lt;/p&gt;
&lt;p&gt;She said, the shopkeeper won&amp;rsquo;t let me purchase stuff.&lt;/p&gt;
&lt;p&gt;This wasn&amp;rsquo;t uncommon.&lt;/p&gt;
&lt;p&gt;So I went with her to grocery store, and asked the shopkeeper to get her rice
and daal as she had asked. I didn&amp;rsquo;t want to get into the transaction, I just
wanted to make sure shopkeeper does not shoo her away. Also, Rs. 50 won&amp;rsquo;t get
her the stuff she needed, so I wanted to also pay for groceries.&lt;/p&gt;
&lt;p&gt;When shopkeeper was done packing rice and daal, I asked him how much I owed
him.&lt;/p&gt;
&lt;p&gt;At that time, the lady said : &amp;ldquo;I also need sugar&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I was taken aback, but didn&amp;rsquo;t say anything.&lt;/p&gt;
&lt;p&gt;Shopkeeper went to pack sugar.&lt;/p&gt;
&lt;p&gt;and then she said &amp;ldquo;cooking oil&amp;rdquo; as well.&lt;/p&gt;
&lt;p&gt;Shopkeeper was now wondering what to do.&lt;/p&gt;
&lt;p&gt;At that time, I told him whatever he has packed is enough.&lt;/p&gt;
&lt;p&gt;I ended up paying upward of Rs. 300&lt;/p&gt;
&lt;p&gt;As soon as I got my change back, I left.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I kept thinking :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Did I do the right thing ? (Yes, I was glad I helped with her with groceries.
I think what took me by surprise was that she asked for more and more stuff once
at the shop.)&lt;/li&gt;
&lt;li&gt;I didn&amp;rsquo;t know how much it costs for bare minimum groceries. (I didn&amp;rsquo;t pay for
cooking oil.) I am aware that there are shops which sell at lower price. Still..&lt;/li&gt;
&lt;li&gt;Is paying Rs. 10/50 to beggars right thing to do ? I know most of them might
buy street food, which is easily available for that amount. It is not healthy
probably not nutritious either.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;I did notice when I left that even though she mentioned that she did not want
money, she kept the initial Rs. 50 I gave her 😆&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Insert timestamp anywhere using Espanso</title>
        <link>https://microblog.desipenguin.com/post/espanso-timestamp/</link>
        <pubDate>Sat, 26 Nov 2022 22:14:22 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/espanso-timestamp/</guid>
        <description>&lt;p&gt;I wrote about &lt;a href=&#34;https://microblog.desipenguin.com/post/espanso-2/&#34;&gt;Espanso&lt;/a&gt; long time ago. I have been using
Espanso since then.&lt;/p&gt;
&lt;p&gt;Recently, I had a need to add timestamp in a note. Espanso already comes with
a trigger to insert date via &lt;code&gt;:date&lt;/code&gt;. As the name suggest, it just inserts
the date.&lt;/p&gt;
&lt;p&gt;So I added the following to the &lt;code&gt;match/base.yml&lt;/code&gt; file.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;trigger&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;:timestamp&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;replace&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;{{timestamp}}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;vars&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;timestamp&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;date&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;params&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;format&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;%b %d, %Y %I:%M%p&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As might be obvious, now I get timestamp just by typing &lt;code&gt;:timestamp&lt;/code&gt; anywhere.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you are unsure where the file is located, refer to the
&lt;a href=&#34;https://espanso.org/docs/configuration/basics/#structure&#34;&gt;documentation&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/external-url/</link>
        <pubDate>Sat, 26 Nov 2022 19:44:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/external-url/</guid>
        <description>&lt;p&gt;I just used &lt;code&gt;externalUrl&lt;/code&gt; feature of this theme.
It is kinda cool.&lt;/p&gt;
&lt;p&gt;Such post is indicated with a right arrow like →&lt;/p&gt;
&lt;p&gt;The title of the blogpost itself is an external link. So when clicked, it
does not open the post, but the external URL.&lt;/p&gt;
&lt;p&gt;In order to open the post, either click the infinity symbol next to it, or
the date (if on the yearly list page)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Stashpad</title>
        <link>https://microblog.desipenguin.com/post/stashpad/</link>
        <pubDate>Sat, 26 Nov 2022 19:20:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/stashpad/</guid>
        <description>&lt;p&gt;I came across stashpad during &lt;a href=&#34;https://stackoverflow.blog/2022/11/04/going-from-engineer-to-entrepreneur-takes-more-than-just-good-code-ep-503/&#34;&gt;this&lt;/a&gt;
Stackoverflow podcast.&lt;/p&gt;
&lt;p&gt;What caught my attention was when Cara mentioned&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Everyone has &lt;code&gt;untitled.txt&lt;/code&gt; open that they use every day&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That is me!! 😆&lt;/p&gt;
&lt;p&gt;It is really easy. &lt;code&gt;Cmd + N&lt;/code&gt; to create a new empty file, and start typing.
I use BBEdit for this. I&amp;rsquo;ve seen my colleagues use Sublime text
I have also used Sublime text for exactly that and only that purpose for
a long time, since it saves these unnamed files across reboots/application
restarts. One less headache. I don&amp;rsquo;t have to think of what to name the file,
where to save it, format (this is easy, I&amp;rsquo;ll just save it as &lt;code&gt;.txt&lt;/code&gt; or &lt;code&gt;.md&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Later I came across BBEdit, which does exactly same, so I switched.
My workflow did not change.&lt;/p&gt;
&lt;p&gt;Stashpad promises to make the same workflow better.&lt;/p&gt;
&lt;p&gt;I have just installed it, and haven&amp;rsquo;t used it yet.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ironically, I started typing my thoughts about Stashpad as a Stashpad note,
with intention that I&amp;rsquo;ll copy this into a blog post &amp;ldquo;later&amp;rdquo;. But decided that
why not directly write it as a blog ? 😆&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>How to find people to follow on Mastodon</title>
        <link>https://microblog.desipenguin.com/post/find-ppl-mastodon/</link>
        <pubDate>Fri, 25 Nov 2022 08:30:25 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/find-ppl-mastodon/</guid>
        <description>&lt;p&gt;After creating an account on Mastodon, next question was how to find people
to follow ? 🤔&lt;/p&gt;
&lt;p&gt;While mastodon has existed for a while, only recently it started getting
attention. So lot of people you follow are &lt;em&gt;not&lt;/em&gt; on Mastodon. Yet.&lt;/p&gt;
&lt;p&gt;I followed a couple of approaches.&lt;/p&gt;
&lt;p&gt;First, I searched for topics I am interested in. I started with Emacs and Ruby.
Found a few accounts to follow.&lt;/p&gt;
&lt;p&gt;Then I literally searched &lt;code&gt;find tweeple of mastodon&lt;/code&gt;. It turns out a lot of
sites like Wired, PCMag, HowToGeek are writing about it. Most of these articles
are from less than a month old 😄&lt;/p&gt;
&lt;p&gt;One tool that worked flawlessly for me was &lt;a href=&#34;https://fedifinder.glitch.me/&#34;&gt;Fedifinder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, I searched for exact same twitter handles on Mastodon.
Chances are people select one handle, and as long as it is available, they&amp;rsquo;ll
prefer that everywhere.&lt;/p&gt;
&lt;p&gt;This worked surprisingly well.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Two things to remember though :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mastodon is still not as popular, so people you follow, on Twitter may not be on Mastodon. Yet.&lt;/li&gt;
&lt;li&gt;Mastodon search isn&amp;rsquo;t that great. Could be because of technical reasons. Or same reason as previous one 😄&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/on-mastodon/</link>
        <pubDate>Wed, 23 Nov 2022 06:03:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/on-mastodon/</guid>
        <description>&lt;p&gt;Now I&amp;rsquo;m on Mastodon as &lt;code&gt;@mandarvaze@indieweb.social&lt;/code&gt; 🎉&lt;/p&gt;
&lt;p&gt;My request to join indieweb.social was approved.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Understanding Mastodon</title>
        <link>https://microblog.desipenguin.com/post/understanding-mastodon/</link>
        <pubDate>Tue, 22 Nov 2022 22:00:35 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/understanding-mastodon/</guid>
        <description>&lt;p&gt;After Elon Musk&amp;rsquo;s takeover, there has been a lot of discussion about leaving twitter.&lt;/p&gt;
&lt;p&gt;TBH, I am not that active on twitter, and I am not sure if charging for blue tick affects me 😄&lt;/p&gt;
&lt;p&gt;Yet, I have been burnt in past by having my data lost, because it was on someone else&amp;rsquo;s platform.&lt;/p&gt;
&lt;p&gt;I do not consider my tweets that valuable, yet it seems I should have a back up, just in case.&lt;/p&gt;
&lt;p&gt;Since everyone and their grandma are moving to Mastodon, I decided to check it.&lt;/p&gt;
&lt;p&gt;(&lt;em&gt;I also checked &lt;a href=&#34;https://www.kooapp.com/feed&#34;&gt;Koo&lt;/a&gt;, but it seemed more like Facebook than Twitter. Not for me&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Mastodon is decentralized. Some people consider it as its strength.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Maybe&lt;/del&gt;. It is.  For those who are worried about one company having control over their account.
Accounts do get banned on Mastodon as well. Read Wil Wheaton&amp;rsquo;s &lt;a href=&#34;https://wilwheaton.net/2018/08/the-world-is-a-terrible-place-right-now-and-thats-largely-because-it-is-what-we-make-it/&#34;&gt;post&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another strength that is mentioned is &amp;ldquo;You can even host your own instance&amp;rdquo;
but normal people do not have expertise to do that, and some that have the
expertise may not have time and inclination to have one.&lt;/p&gt;
&lt;p&gt;I certainly don&amp;rsquo;t (have the expertise. And while I could read up the documentation
and set something up for fun, I don&amp;rsquo;t want to worry about server upkeep, Thank you very much)&lt;/p&gt;
&lt;p&gt;But it is what it is.&lt;/p&gt;
&lt;p&gt;So now the question becomes where do I create an account.&lt;/p&gt;
&lt;p&gt;At first, it was not clear. Analogy given is that of Email. Anyone can send email from gmail.com to yahoo.com
Similarly, you can have account anywhere, and you can follow people on other servers.&lt;/p&gt;
&lt;p&gt;A lot of the servers are for specific topic they care about. Like Reddit communities.
But my account is on Reddit.&lt;/p&gt;
&lt;p&gt;Here my account is on server specific to Emacs, or Ruby language.&lt;/p&gt;
&lt;p&gt;While I might be using both these now, I do not wish to be identified by the use of my editor or programming language.&lt;/p&gt;
&lt;p&gt;I do change both. (20+ years vi user, 5+ on Emacs, now trying Helix. After 10 years of Python, Ruby for the last 8 months)&lt;/p&gt;
&lt;p&gt;There are some generic (sounding) ones like &lt;a href=&#34;https://mastodon.social/&#34;&gt;https://mastodon.social/&lt;/a&gt; and &lt;a href=&#34;https://mstdn.io/&#34;&gt;https://mstdn.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But neither of them are accepting new users.&lt;/p&gt;
&lt;p&gt;(That is another problem of hosting your own servers. Who pays for the infra cost?)&lt;/p&gt;
&lt;p&gt;Finally, I found &lt;a href=&#34;https://indieweb.social/&#34;&gt;https://indieweb.social/&lt;/a&gt; 🎉&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve applied for account.&lt;/p&gt;
&lt;p&gt;The request will be reviewed and approved 🤞&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Read &lt;a href=&#34;https://lucumr.pocoo.org/2022/11/14/scaling-mastodon/#footnote-reference-1&#34;&gt;this&lt;/a&gt;
footnote in Armin Ronacher&amp;rsquo;s post about how decentralized banking is better than decentralized crypto.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title></title>
        <link>https://microblog.desipenguin.com/microposts/trying-new-theme/</link>
        <pubDate>Mon, 21 Nov 2022 13:17:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/microposts/trying-new-theme/</guid>
        <description>&lt;p&gt;I wanted to be able to post thoughts without title or any of the front matter for long time.&lt;/p&gt;
&lt;p&gt;Now I can 🤞&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Mindmaps in Emacs</title>
        <link>https://microblog.desipenguin.com/post/mindmaps-in-emacs/</link>
        <pubDate>Tue, 08 Nov 2022 09:35:27 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/mindmaps-in-emacs/</guid>
        <description>&lt;p&gt;I have been using Emacs for about 4+ years now, and I still find new things.&lt;/p&gt;
&lt;p&gt;One of the thing I discovered this week is ability to create mindmaps
without leaving the comfort of Emacs 😄
This is made possible via PlantUML.&lt;/p&gt;
&lt;p&gt;Doom emacs makes it very easy to set it up.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable &lt;code&gt;plantuml&lt;/code&gt; in the &lt;code&gt;init.el&lt;/code&gt; of your doom emacs config.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;M-x doom/reload&lt;/code&gt; (This will install the appropriate packages)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;M-x plantuml-download-jar&lt;/code&gt; (Make sure you have working java installation)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;doom/open-scratch-buffer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-mode&lt;/code&gt; (Not sure if this is needed, but better be explicit)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now create following in your scratch buffer that is already in &lt;code&gt;plantuml&lt;/code&gt; mode.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#+begin_src &lt;/span&gt;&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;plantuml&lt;/span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt; :file my-diagram.png
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;&lt;/span&gt;@startmindmap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ OS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;++ Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++ Linux Mint
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++ Kubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++ Lubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++ KDE Neon
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;++ LMDE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;++ SolydXK
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;++ SteamOS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;++ Raspbian
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Windows 95
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Windows 98
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Windows NT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--- Windows 8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--- Windows 10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@endmindmap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#+end_src&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above is called &lt;code&gt;Arithmatic Syntax&lt;/code&gt; (due to &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt;) benefit of this
is that &lt;code&gt;+&lt;/code&gt; appear on right side of the main node and &lt;code&gt;-&lt;/code&gt; appear on the left
side.&lt;/p&gt;
&lt;p&gt;So if you prefer certain nodes to appear on the left vs right this is syntax
you should use.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t care, then standard markdown syntax also works. Just that all the
nodes appear on the right side.&lt;/p&gt;
&lt;p&gt;Now, &lt;code&gt;C-c C-e h o&lt;/code&gt; to export your org document into html. We are interested in
&lt;code&gt;my-diagram.png&lt;/code&gt; which will be in the same directory as your exported html file.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you do not want to export the file, then get rid of the first and last line
in the org file above (ones with &lt;code&gt;_src&lt;/code&gt;) then &lt;code&gt;plantuml-mode&lt;/code&gt; and &lt;code&gt;C-c C-c&lt;/code&gt; to
preview the mindmap within emacs itself.&lt;/p&gt;
&lt;p&gt;This is how it looks&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/mindmap.png&#34; alt=&#34;mindmap&#34;&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Emacs: How to exclude files when searching in a project</title>
        <link>https://microblog.desipenguin.com/post/emacs-exclude-files-when-searching/</link>
        <pubDate>Mon, 07 Nov 2022 12:27:33 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-exclude-files-when-searching/</guid>
        <description>&lt;p&gt;I use &lt;code&gt;SPC /&lt;/code&gt; a lot to find stuff inside a project. Since starting on Ruby
project, a lot of my search results, specifically the first ones are inside
the spec file (which is test case in Ruby)&lt;/p&gt;
&lt;p&gt;I may want those instances as well, but more often than not, I prefer the search
results in the source code before test cases.&lt;/p&gt;
&lt;p&gt;The project is huge, and I have to scroll a lot before I see non-spec code,
which becomes tiresome.&lt;/p&gt;
&lt;p&gt;While I was looking for solution, I came across two things :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;deadgrep&lt;/code&gt; (I think it is a play on &lt;code&gt;ripgrep&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.ignore&lt;/code&gt; file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;.ignore&lt;/code&gt; file is similar to &lt;code&gt;.gitignore&lt;/code&gt; which is specific to &lt;code&gt;git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While search tools like &lt;code&gt;ag&lt;/code&gt; and &lt;code&gt;ripgrep&lt;/code&gt; honor &lt;code&gt;.gitignore&lt;/code&gt; in my case, test
files are part of the git repo (as they should be) and are thus not in
&lt;code&gt;.gitignore&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is where &lt;code&gt;.ignore&lt;/code&gt; came in handy.&lt;/p&gt;
&lt;p&gt;I added &lt;code&gt;*_spec.rb&lt;/code&gt; in a &lt;code&gt;.ignore&lt;/code&gt; file created in the root of the project.&lt;/p&gt;
&lt;p&gt;Voila!&lt;/p&gt;
&lt;p&gt;Now search results are much better 😌&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rolf Potts and Richard Bach</title>
        <link>https://microblog.desipenguin.com/post/rolf-potts-richard-bach/</link>
        <pubDate>Thu, 20 Oct 2022 16:09:08 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rolf-potts-richard-bach/</guid>
        <description>&lt;p&gt;This may seem like strange title for the post, compared to my other posts, and it is.&lt;/p&gt;
&lt;p&gt;In case you don&amp;rsquo;t know any of these gentlemen, both of them are writers.&lt;/p&gt;
&lt;p&gt;Rolf Potts is known for Vagabonding. Made (more) popular by Tim Ferriss.&lt;/p&gt;
&lt;p&gt;Richard Bach may be known for &amp;ldquo;Jonathan Livingston Seagull&amp;rdquo; to most people. But I&amp;rsquo;ve read a lot of his books.&lt;/p&gt;
&lt;p&gt;That does not look like they should be the topic of the same entry.
So why are they in the same post ?&lt;/p&gt;
&lt;p&gt;Recently, I listened to Rolf on Tim Ferris podcast, and I noticed both are similar in more than one way.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Both are writers&lt;/li&gt;
&lt;li&gt;Richard was barnstormer in his youth(?), Rolf is known for vagabonding (The activity. The book came later)&lt;/li&gt;
&lt;li&gt;Both married late in their life (Richard was married once, before he met Leslie)&lt;/li&gt;
&lt;li&gt;Both married actresses&lt;/li&gt;
&lt;li&gt;Both call their wives &amp;ldquo;Soul mates&amp;rdquo; (Richard and Leslie are no longer together, and Rolf married recently during the pandemic)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;If you are interested, you can read about&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Richard_Bach&#34;&gt;Richard Bach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Rolf_Potts&#34;&gt;Rolf Potts&lt;/a&gt; on their Wikipedia pages.&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Helix Open File on Side</title>
        <link>https://microblog.desipenguin.com/post/helix-open-file-on-side/</link>
        <pubDate>Thu, 13 Oct 2022 09:14:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/helix-open-file-on-side/</guid>
        <description>&lt;p&gt;When I am working on a project, it is highly likely that I would open other files from that project.
In order to do that, in Helix I would do &lt;code&gt;SPC F&lt;/code&gt;. This opens up file picker for that workspace.&lt;/p&gt;
&lt;p&gt;I can then either navigate using arrow keys, or most likely start typing the name of the file and the file will be highlighted.
As a side benefit, the file is shown on the right pane as a preview.&lt;/p&gt;
&lt;p&gt;If I hit &lt;code&gt;Enter&lt;/code&gt; the file will be opened in the same buffer. While I can switch between buffers using &lt;code&gt;SPC b&lt;/code&gt;)
I may want to work on both files at the same time, say for comparing the code etc.&lt;/p&gt;
&lt;p&gt;In such cases, while the file is selected in the file picker, press &lt;code&gt;Ctrl+v&lt;/code&gt; to open the file in a vertical split to the side
🎉&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;I learnt this trick via &lt;a href=&#34;https://youtu.be/xHebvTGOdH8&#34;&gt;this youtube video&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rails Runner</title>
        <link>https://microblog.desipenguin.com/post/rails-runner/</link>
        <pubDate>Mon, 10 Oct 2022 09:09:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rails-runner/</guid>
        <description>&lt;p&gt;Some days ago, I came across a requirement where I needed to run some rails code at the end of deployment.
We use the &lt;code&gt;Capistrano&lt;/code&gt; tool for the deployment, and it has great support for hooks like &lt;code&gt;after &#39;deploy:published&#39;, &#39;some_task&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Most of the examples show some system commands, since &lt;code&gt;Capistrano&lt;/code&gt; is a deployment tool, and isn&amp;rsquo;t running rails.&lt;/p&gt;
&lt;p&gt;But I didn&amp;rsquo;t know that, being new to rails ecosystem.&lt;/p&gt;
&lt;p&gt;So at first, at just called a background job that needed to talk to third party system and get some data, once the rails server is up.&lt;/p&gt;
&lt;p&gt;I was met with &lt;code&gt;uninitialized constant&lt;/code&gt; error.&lt;/p&gt;
&lt;p&gt;After looking around similar scripts in other projects, I came across &lt;code&gt;rails runner&lt;/code&gt; (&lt;code&gt;rails r&lt;/code&gt;) also works.&lt;/p&gt;
&lt;p&gt;It is like &lt;code&gt;rails c&lt;/code&gt;, as in it does not run the server, but loads all the rails environment (which is what I wanted)
But unlike &lt;code&gt;rails c&lt;/code&gt;, it runs the rails code non-interactively.&lt;/p&gt;
&lt;p&gt;Couple of examples :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;bin/rails runner &amp;quot;Model.long_running_method&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bin/rails runner lib/code_to_be_run.rb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bin/rails runner -e staging &amp;quot;Model.long_running_method&amp;quot;&lt;/code&gt; to run it under specific environment.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can read more in the rails &lt;a href=&#34;https://guides.rubyonrails.org/command_line.html#bin-rails-runner&#34;&gt;documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;`&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Better Git Status With fzf.fish</title>
        <link>https://microblog.desipenguin.com/post/better-git-status-with-fzf.fish/</link>
        <pubDate>Mon, 03 Oct 2022 22:01:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/better-git-status-with-fzf.fish/</guid>
        <description>&lt;p&gt;Towards the beginning of the year, I had written about &lt;a href=&#34;post/fzf-with-fish/&#34;&gt;Fuzzy Search in fish&lt;/a&gt;
For the better part of the year. I only used &lt;code&gt;Ctrl-R&lt;/code&gt; functionality, that too occasionally.&lt;/p&gt;
&lt;p&gt;Then today, I came across the same again, and after going through the README, I noticed at least one more useful keybinding.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git status&lt;/code&gt; normally would just list the modified files etc. To see what has changed, one needs to &lt;code&gt;git diff &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;with &lt;code&gt;fzf.fish&lt;/code&gt; one can combine these two functions with &lt;code&gt;git status&lt;/code&gt; followed by &lt;code&gt;Ctrl+Alt+S&lt;/code&gt; (&lt;code&gt;S&lt;/code&gt; for status, easy to remember)&lt;/p&gt;
&lt;p&gt;Now one sees, the list on the left hand side, and the diffs on the right.&lt;/p&gt;
&lt;p&gt;This seems relatively new functionality.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&#34;https://github.com/PatrickF1/fzf.fish#modified-paths&#34;&gt;relevant part of the README&lt;/a&gt; for details.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Vim Keybindings for Helix</title>
        <link>https://microblog.desipenguin.com/post/vim-for-helix/</link>
        <pubDate>Mon, 12 Sep 2022 16:39:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vim-for-helix/</guid>
        <description>&lt;p&gt;Helix is a great editor. I&amp;rsquo;m trying it more and more these days (Like this post is edited in helix)&lt;/p&gt;
&lt;p&gt;While shift from action-&amp;gt;object to object-&amp;gt;action in itself is big change (muscle memory), there are indeed other differences as well.&lt;/p&gt;
&lt;p&gt;Luckily, it is easy to add keybindings to helix.  Turns out someone took this too far, and created a lot of keybindings to make helix more like Vim&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&#34;https://github.com/LGUG2Z/helix-vim/blob/master/config.toml&#34;&gt;this&lt;/a&gt; for the entire config.&lt;/p&gt;
&lt;p&gt;While I&amp;rsquo;m not going to use the entire list as is, some keybindings (that trip me in helix) like &lt;code&gt;0&lt;/code&gt; to go to the beginning of the line, and &lt;code&gt;$&lt;/code&gt; to go to the end of the line seem worth &amp;ldquo;borrowing&amp;rdquo; 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Helix New Release (and how to go to the last line in a file)</title>
        <link>https://microblog.desipenguin.com/post/helix-new-release/</link>
        <pubDate>Mon, 05 Sep 2022 12:34:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/helix-new-release/</guid>
        <description>&lt;p&gt;Noticed that new version &lt;code&gt;22.08.1&lt;/code&gt; of helix is now available.
See &lt;a href=&#34;https://github.com/helix-editor/helix/releases/tag/22.08.1&#34;&gt;this&lt;/a&gt;
Upgrade via your preferred package manager.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;After the upgrade, used &lt;code&gt;hx&lt;/code&gt; after a long time.&lt;/p&gt;
&lt;p&gt;I also signed up for the matrix channel. Turns out that is where all the action is.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m member of (almost-dead-but-not-quite) Telegram group for a while. But matrix channel seems active.&lt;/p&gt;
&lt;p&gt;I got immediate reply to my query. Nice!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;My query was : &lt;code&gt;How do I go to the last line of the buffer ? In vi/m, I could use :$ which does not work in Helix&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: &lt;code&gt;ge&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Long answer : There is a separate &lt;a href=&#34;https://docs.helix-editor.com/keymap.html#goto-mode&#34;&gt;goto-mode&lt;/a&gt; in helix, and then there are different sub-commands(?) in that mode.
&lt;code&gt;goto_last_line&lt;/code&gt; is mapped to &lt;code&gt;e&lt;/code&gt;, hence &lt;code&gt;ge&lt;/code&gt; (i.e. First switch to &lt;code&gt;goto-mode&lt;/code&gt; and then &lt;code&gt;goto_last_line&lt;/code&gt;)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Improve Markdown output: Use HTML snippets in Markdown</title>
        <link>https://microblog.desipenguin.com/post/better-markdown/</link>
        <pubDate>Thu, 25 Aug 2022 13:15:37 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/better-markdown/</guid>
        <description>&lt;p&gt;While I was searching for useful snippets for Markdown (I was specifically looking for snippet to insert current time.)&lt;/p&gt;
&lt;p&gt;I came across &lt;a href=&#34;https://jdhao.github.io/2020/06/01/markdown_writing_tricks/&#34;&gt;this&lt;/a&gt; article.&lt;/p&gt;
&lt;p&gt;To be honest, it feels like cheating. Like writing HTML manually. (With snippets, work could reduce)&lt;/p&gt;
&lt;div style=&#34;padding: 15px; border: 1px solid transparent; border-color: transparent; margin-bottom: 20px; border-radius: 4px; color: #31708f; background-color: #d9edf7; border-color: #bce8f1;margin-top: 10px;&#34;&gt;
&lt;strong&gt;&amp;#9432; Info:&lt;br/&gt;&lt;/strong&gt; I don&#39;t see myself using it often.
&lt;/div&gt;
&lt;p&gt;Did you see what I did there 😉&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Back to Emacs</title>
        <link>https://microblog.desipenguin.com/post/back-to-emacs/</link>
        <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/back-to-emacs/</guid>
        <description>&lt;p&gt;If you are reading my posts, you would have realized that I had switched to &lt;code&gt;nvim&lt;/code&gt; and went down the rabbit hole with different configurations etc.
I think I got it to a stable state, and then I stopped tinkering.&lt;/p&gt;
&lt;p&gt;But when I recently started coding again in Ruby, I realized that &lt;code&gt;nvim&lt;/code&gt; is good as an editor, but at least I was not able to configure it as IDE.
It has all the right tools (lsp, syntax highlighting, packages) yet something didn&amp;rsquo;t work 😞&lt;/p&gt;
&lt;p&gt;That is when I came back to emacs, and realized that in emacs ecosystem, &lt;code&gt;robe&lt;/code&gt; was better than &lt;code&gt;solargraph&lt;/code&gt;
Something about &lt;em&gt;dynamic better than static analysis&lt;/em&gt; for Rails.&lt;/p&gt;
&lt;p&gt;Then I started noticing more issues with &lt;code&gt;nvim&lt;/code&gt;. e.g. Simple syntax highlighting did not work for markdown files.&lt;/p&gt;
&lt;p&gt;I still use &lt;code&gt;nvim&lt;/code&gt; for quick editing (I&amp;rsquo;ve been using &lt;code&gt;n(vi)m&lt;/code&gt; for 25 years 😄, so I&amp;rsquo;m not about leave it. Even in Emacs, I use evil mode)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I realized that instead of &lt;a href=&#34;https://microblog.desipenguin.com/post/telekasten/&#34;&gt;Telekasten&lt;/a&gt; I should be using &lt;code&gt;org&lt;/code&gt; - native to emacs, and more versatile. But markdown is universal 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Telekasten</title>
        <link>https://microblog.desipenguin.com/post/telekasten/</link>
        <pubDate>Sat, 13 Aug 2022 19:13:57 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/telekasten/</guid>
        <description>&lt;p&gt;I had written about Telekasten &lt;a href=&#34;https://microblog.desipenguin.com/post/telekasten-nvchad/&#34;&gt;earlier&lt;/a&gt;, but in the context that I was unable to get it working with NVChad.&lt;/p&gt;
&lt;p&gt;But I must confess, I almost forgot about it.&lt;/p&gt;
&lt;p&gt;I should use it daily (as intended) to capture things I&amp;rsquo;m doing, where am I blocked, what unblocked me, make it as part of my daily workflow.&lt;/p&gt;
&lt;p&gt;I have seen my colleague keeping a simple &lt;code&gt;daily.txt&lt;/code&gt; file open in Sublime, and it works for them (I hope)&lt;/p&gt;
&lt;p&gt;It is not about the tool, more about the habit.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Wezterm</title>
        <link>https://microblog.desipenguin.com/post/wezterm/</link>
        <pubDate>Tue, 09 Aug 2022 00:00:00 +0000</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/wezterm/</guid>
        <description>&lt;p&gt;I had installed Wezterm long time ago. I think when I started looking for alternatives to &lt;code&gt;Alacritty&lt;/code&gt;.
But I settled on &lt;code&gt;kitty&lt;/code&gt; (I think I could not get &lt;code&gt;wezterm&lt;/code&gt; to work)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Few days ago, I stumbled upon it again, and I wanted to give it a try.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So these days, I&amp;rsquo;m using &lt;code&gt;wezterm&lt;/code&gt; as terminal. I specifically liked the built-in &lt;a href=&#34;https://wezfurlong.org/wezterm/multiplexing.html&#34;&gt;multiplexing&lt;/a&gt; feature. I haven&amp;rsquo;t tried it yet 🤷‍&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Bang Methods in Ruby (and Rails)</title>
        <link>https://microblog.desipenguin.com/post/bang-methods-ruby/</link>
        <pubDate>Tue, 12 Jul 2022 23:11:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bang-methods-ruby/</guid>
        <description>&lt;p&gt;Today I learned about Bang methods in Ruby.&lt;/p&gt;
&lt;p&gt;Methods ending with &lt;code&gt;!&lt;/code&gt; are potentially dangerous, because they update the object they operate on.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;➜&lt;/span&gt;  irb &lt;span style=&#34;color:#666&#34;&gt;--&lt;/span&gt;sample&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;book&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;mode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sample_string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sample_string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;reverse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;gnirts_elpmas&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sample_string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;reverse!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;gnirts_elpmas&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;gnirts_elpmas&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we can see above, &lt;code&gt;reverse!&lt;/code&gt; modified &lt;code&gt;name&lt;/code&gt; itself.
Most times (?) we don&amp;rsquo;t want that. But sometimes we do.&lt;/p&gt;
&lt;p&gt;Knowing that &lt;code&gt;!&lt;/code&gt; method will change the object, allows us to choose the correct version.&lt;/p&gt;
&lt;p&gt;In Rails, &lt;code&gt;!&lt;/code&gt; methods raise an exception in case of error. Some may prefer this over checking of the return value, when the method will work without error most of the time, and exception is rare.
e.g. &lt;code&gt;ActiveRecord::Base#save&lt;/code&gt; returns &lt;code&gt;false&lt;/code&gt; if saving failed, while &lt;code&gt;ActiveRecord::Base#save!&lt;/code&gt; raises an exception.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Interruption is the Enemy of Productivity</title>
        <link>https://microblog.desipenguin.com/post/interruptions/</link>
        <pubDate>Fri, 08 Jul 2022 16:45:54 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/interruptions/</guid>
        <description>&lt;p&gt;Yesterday, I listened to the episode of rework podcast, titled &lt;a href=&#34;https://www.rework.fm/interruption-is-the-enemy-of-productivity/&#34;&gt;Interruption is the Enemy of Productivity &lt;/a&gt; 😄&lt;/p&gt;
&lt;p&gt;The link has full transcript of the episode, or listen via your favourite podcast app.&lt;/p&gt;
&lt;p&gt;Some quotes (edited little to make sense) from the episodes :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;people know that the time they get the real “work done” is when they don’t have the interruptions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;If that time only exists outside of work, that is where they will find it. So it’s early mornings, it’s late nights. It’s weekends. It’s a lot of the overwork&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[work is] pushed into the margins because the main bulk of the working hour is just jammed full of these interruptions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;You can’t get work done at work, that the hours you actually, have dedicated to sit in front of your computer are eaten by the interruptions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Coordination is work too &amp;hellip;.. It&amp;rsquo;s not the nourishing work.&lt;/p&gt;&lt;/blockquote&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Enable Syntax based Fold in Neovim</title>
        <link>https://microblog.desipenguin.com/post/syntax-fold-nvim/</link>
        <pubDate>Thu, 07 Jul 2022 09:48:13 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/syntax-fold-nvim/</guid>
        <description>&lt;p&gt;When working on large(ish) code files, sometimes it is easier to fold rest of the code from that file and focus on one &amp;ldquo;block&amp;rdquo; at a time.&lt;/p&gt;
&lt;p&gt;I use the word &amp;ldquo;block&amp;rdquo; because based on the context, it means different things. It could be as big as a class (if the file contains multiple classes) or as small as a &lt;code&gt;if-else&lt;/code&gt; block.&lt;/p&gt;
&lt;p&gt;But this functionality is not always turned on.&lt;/p&gt;
&lt;p&gt;One way to test it out is &lt;code&gt;:set foldmethod=syntax&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It would for that file, for that session. Once you close the file/neovim instance you lose the setting.&lt;/p&gt;
&lt;p&gt;Other/better way is to add &lt;code&gt;vim.opt.foldmethod = &amp;quot;syntax&amp;quot;&lt;/code&gt; in your neovim config. (Assuming you are using lua for your configuration- why would you not ? 😉)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Using Telekasten with Nvchad</title>
        <link>https://microblog.desipenguin.com/post/telekasten-nvchad/</link>
        <pubDate>Thu, 23 Jun 2022 12:00:54 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/telekasten-nvchad/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://nvchad.github.io/&#34;&gt;NvChad&lt;/a&gt; is yet another neovim starter kit.&lt;/p&gt;
&lt;p&gt;Creator of NvChad is on the &lt;a href=&#34;https://t.me/VimUsersGroup&#34;&gt;VimUser&amp;rsquo;s Telegram Group&lt;/a&gt;. So I was intrigued to try NvChad. (I had tried it a while ago, but decided to visit it later. That &amp;ldquo;later&amp;rdquo; is now)&lt;/p&gt;
&lt;p&gt;One of the plugin I use is &lt;a href=&#34;https://github.com/renerocksai/telekasten.nvim&#34;&gt;Telekasten&lt;/a&gt;. It reminds me of Dendron, another tool I used to use (requires VSCode, which I consider too heavy. But Dendron now works without VScode as well. Also, &amp;ldquo;daily notes&amp;rdquo; is just one of the features of Dendron. That is the feature I use with Telekasten)&lt;/p&gt;
&lt;p&gt;Unfortunately, I could not use it &amp;ldquo;out of the box&amp;rdquo;. NvChad uses &lt;code&gt;Telescope&lt;/code&gt;, but it lazy-loads it. &lt;code&gt;Telekasten&lt;/code&gt; is dependent on it.
So it was weird that &lt;code&gt;telekasten&lt;/code&gt; would work after I use &lt;code&gt;Telescope&lt;/code&gt; at least once. (Cause by using Telescope, nvim would load &lt;code&gt;telescope.nvim&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;After failing to get it working for couple of days, it finally worked. See the discussion in this &lt;a href=&#34;https://github.com/NvChad/NvChad/issues/1255&#34;&gt;guthub issue&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mandar in ~/.config/nvim/lua/custom on  main 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ cat plugins/init.lua
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;renerocksai/telekasten.nvim&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;{}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;nvim-telescope/telescope.nvim&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#b8860b&#34;&gt;module&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;telescope&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;simrat39/symbols-outline.nvim&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;There is another manual workaround. &lt;code&gt;:PackerLoad telescope.nvim&lt;/code&gt; before using Telekasten for the first time. But above solution is better.
&lt;a href=&#34;https://github.com/NvChad/NvChad/issues/1255#issuecomment-1162678094&#34;&gt;Here&lt;/a&gt; is my failed attempt to automate my solution. But somehow it broke telescope itself (while Telekasten worked)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Import json data to hosted elasticsearch</title>
        <link>https://microblog.desipenguin.com/post/elasticdump-headers/</link>
        <pubDate>Tue, 21 Jun 2022 08:56:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/elasticdump-headers/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;post/postgres-to-elastic/&#34;&gt;Earlier&lt;/a&gt; I imported the data to locally running Elastic (via Docker)&lt;/p&gt;
&lt;p&gt;But others in my team could not run Docker on their machines, so we decided to use a hosted Elastic server.&lt;/p&gt;
&lt;p&gt;The steps to import the data were the same. Well, almost. Because this was a hosted instance, it would not allow operations without authentication.
I got the following error:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dump ended with error (get phase) =&amp;gt; UNAUTHORIZED: {&amp;#34;error&amp;#34;:{&amp;#34;root_cause&amp;#34;:[{&amp;#34;type&amp;#34;:&amp;#34;security_exception&amp;#34;,&amp;#34;reason&amp;#34;:&amp;#34;missing authentication credentials for REST request [/]&amp;#34;,&amp;#34;header&amp;#34;:{&amp;#34;WWW-Authenticate&amp;#34;:[&amp;#34;Basic realm=\&amp;#34;security\&amp;#34; charset=\&amp;#34;UTF-8\&amp;#34;&amp;#34;,&amp;#34;Bearer realm=\&amp;#34;security\&amp;#34;&amp;#34;,&amp;#34;ApiKey&amp;#34;]}}],&amp;#34;type&amp;#34;:&amp;#34;security_exception&amp;#34;,&amp;#34;reason&amp;#34;:&amp;#34;missing authentication credentials for REST request [/]&amp;#34;,&amp;#34;header&amp;#34;:{&amp;#34;WWW-Authenticate&amp;#34;:[&amp;#34;Basic realm=\&amp;#34;security\&amp;#34; charset=\&amp;#34;UTF-8\&amp;#34;&amp;#34;,&amp;#34;Bearer realm=\&amp;#34;security\&amp;#34;&amp;#34;,&amp;#34;ApiKey&amp;#34;]}},&amp;#34;status&amp;#34;:401}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It took me a while to figure it out, but I did.&lt;/p&gt;
&lt;p&gt;To import the data, I had to pass the &lt;code&gt;ApiKey&lt;/code&gt; as a header to &lt;code&gt;elasticdump&lt;/code&gt; as follows:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;node_modules/elasticdump/bin/elasticdump --input=formatted-conversations.json --output=https://some-real-hostname.regionosting-provider.elastic-cloud.com/ --headers=&#39;{&amp;quot;Authorization&amp;quot;: &amp;quot;ApiKey here_is_my_Api_key_that_I_got_from_Kibana&amp;quot;}&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Creating an API Key was easy in Kibana. I searched for API Key in the top search bar 😄. (&lt;code&gt;Management -&amp;gt; Security -&amp;gt; API Keys&lt;/code&gt;)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://techexpert.tips/elasticsearch/elasticsearch-authentication-using-api/&#34;&gt;Elasticsearch Authentication using API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/elasticsearch-dump/elasticsearch-dump#options&#34;&gt;Elasticdump README&lt;/a&gt; : Search for &lt;code&gt;--headers&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Better Tabs Kitty</title>
        <link>https://microblog.desipenguin.com/post/better-tabs-kitty/</link>
        <pubDate>Fri, 10 Jun 2022 16:27:53 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/better-tabs-kitty/</guid>
        <description>&lt;p&gt;Some time ago, I started using kitty terminal emulator.
I used Alacritty for a long time. But Alacritty is meant to be minimalistic in a sense it does not even have concept of having different tabs.&lt;/p&gt;
&lt;p&gt;The suggestion/solution is to use &lt;code&gt;tmux&lt;/code&gt; (or like) to manage different shell instances.&lt;/p&gt;
&lt;p&gt;And I did that.&lt;/p&gt;
&lt;p&gt;And learnt a great deal about tmux in the process.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t regret it one bit.&lt;/p&gt;
&lt;p&gt;But sometimes, tmux gets in a way of how terminal based programs look (and behave) when executed inside tmux.&lt;/p&gt;
&lt;p&gt;Sometime, there is a way around by tweaking &lt;code&gt;tmux.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But I wanted to use real terminal with tabs.&lt;/p&gt;
&lt;p&gt;So I tried &lt;a href=&#34;https://sw.kovidgoyal.net/kitty/&#34;&gt;kitty&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Everything was great, but default tab style was blurry, that I could hardly see two different tabs.&lt;/p&gt;
&lt;p&gt;Turns out one can change the &lt;code&gt;tab_bar_style&lt;/code&gt; - Default one is &lt;code&gt;fade&lt;/code&gt; (No wonder I would not see text properly)&lt;/p&gt;
&lt;p&gt;Currently I have it set to the following:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tab_bar_style powerline
tab_powerline_style round
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;tab_powerline_style&lt;/code&gt; has few other options. You can read about them &lt;a href=&#34;https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.tab_powerline_style&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Better Icon for Kitty</title>
        <link>https://microblog.desipenguin.com/post/better-icon-kitty/</link>
        <pubDate>Thu, 09 Jun 2022 20:04:30 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/better-icon-kitty/</guid>
        <description>&lt;p&gt;Official instructions are &lt;a href=&#34;https://sw.kovidgoyal.net/kitty/faq/#i-do-not-like-the-kitty-icon&#34;&gt;here&lt;/a&gt; but it did not work for me.&lt;/p&gt;
&lt;p&gt;I did not understand &lt;code&gt;Drag kitty.icns onto the application icon in the kitty info pane&lt;/code&gt; part.
I tried dragging the icon, but could not make it work.&lt;/p&gt;
&lt;p&gt;I gave up. I can live with the default icon.&lt;/p&gt;
&lt;p&gt;But then I came across the following instructions &lt;a href=&#34;https://github.com/megalithic/dotfiles/blob/main/config/kitty/update_icon.sh#L36&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Clear instructions that I can execute from inside kitty 😄&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp /tmp/kitty.icns /Applications/kitty.app/Contents/Resources/kitty.icns
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm /var/folders/*/*/*/com.apple.dock.iconcache
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch /Applications/kitty.app
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;killall Dock &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; killall Finder 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;FWIW, I am using &lt;a href=&#34;https://github.com/hristost/kitty-alternative-icon&#34;&gt;this icon&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Import data from Dockerized Postgres to Elasticsearch</title>
        <link>https://microblog.desipenguin.com/post/postgres-to-elastic/</link>
        <pubDate>Wed, 08 Jun 2022 06:29:31 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/postgres-to-elastic/</guid>
        <description>&lt;p&gt;After setting up Elasticsearch &lt;a href=&#34;post/setup-elastic-search-docker/&#34;&gt;locally&lt;/a&gt; I need to seed it with some dummy data.&lt;/p&gt;
&lt;p&gt;I came across &lt;a href=&#34;https://ericlondon.com/2018/05/12/export-data-from-postgresql-as-json-and-import-into-elasticsearch.html&#34;&gt;this article&lt;/a&gt; that explain all the steps in details, including populating the postgres with dummy data to begin with.&lt;/p&gt;
&lt;p&gt;But I could not use it as-is because I use dockerized postgres.&lt;/p&gt;
&lt;p&gt;I also ran into problem with &lt;code&gt;https&lt;/code&gt; and &lt;code&gt;elasticdump&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I wrote about the problems and solutions on my other blog. Read it &lt;a href=&#34;https://learnings.desipenguin.com/post/postgres-to-elastic/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Setup Elastic Search Locally via Docker</title>
        <link>https://microblog.desipenguin.com/post/setup-elastic-search-docker/</link>
        <pubDate>Wed, 01 Jun 2022 16:01:57 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/setup-elastic-search-docker/</guid>
        <description>&lt;p&gt;This is the first time I&amp;rsquo;m setting up &lt;code&gt;elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While one can set it up natively via &lt;code&gt;brew&lt;/code&gt; I have learnt longtime ago to use docker for complex, server type applications.&lt;/p&gt;
&lt;p&gt;Elastic search&amp;rsquo;s official document also suggests the docker in their &lt;a href=&#34;https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html&#34;&gt;Getting Started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve made summary of the steps on my &lt;a href=&#34;https://pkm.desipenguin.com/&#34;&gt;PKM&lt;/a&gt;. Search &lt;code&gt;elastic&lt;/code&gt; on the site, since URLs are likely to change.&lt;/p&gt;
&lt;p&gt;Important thing : Create a local user (I called it &lt;code&gt;dev&lt;/code&gt;) and make it &lt;code&gt;superuser&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is useful in case you misplace the auto-generated password for built-in superuser user named &lt;code&gt;elastic&lt;/code&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Espanso With Helix Editor</title>
        <link>https://microblog.desipenguin.com/post/espanso-with-helix-editor/</link>
        <pubDate>Tue, 31 May 2022 06:30:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/espanso-with-helix-editor/</guid>
        <description>&lt;p&gt;I wrote about espanso in past &lt;a href=&#34;https://microblog.desipenguin.com/post/espanso/&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;post/espanso-2/&#34;&gt;here&lt;/a&gt;, and I&amp;rsquo;ve been using it ever since.&lt;/p&gt;
&lt;p&gt;Since helix is (for now) terminal-only editor, my espanso shortcuts work very well with it.&lt;/p&gt;
&lt;p&gt;e.g. I can type &lt;code&gt;:smile:&lt;/code&gt; and get 😄, and type &lt;code&gt;thru&lt;/code&gt; and get &lt;code&gt;through&lt;/code&gt; (Automatic correct the usually misspelled words 🎉)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Espanso works well with neovim-in-terminal (and Emacs), but I use Neovide GUI, where they don&amp;rsquo;t work.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Grammar Check with Helix Editor</title>
        <link>https://microblog.desipenguin.com/post/grammar-check--with-helix-editor/</link>
        <pubDate>Mon, 30 May 2022 15:57:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/grammar-check--with-helix-editor/</guid>
        <description>&lt;p&gt;One of the thing that I thought was missing from Helix editor was integration with a decent grammar checker tool.
On Emacs and neovim, I use &lt;code&gt;ltex-ls&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To my surprise, it works well (I&amp;rsquo;m using it already) with Helix.&lt;/p&gt;
&lt;p&gt;It is probably not well documented though. I had to look through the github issues, but I did come across the &lt;a href=&#34;https://github.com/helix-editor/helix/pull/2182#issuecomment-1103762804&#34;&gt;solution&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is straightforward though.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the latest release of ltex-ls from &lt;a href=&#34;https://github.com/valentjn/ltex-ls/releases&#34;&gt;here&lt;/a&gt;. I preferred the one which comes with jre. Size increases, but it is self-contained. One can choose smaller download if jre is already installed in your setup.&lt;/li&gt;
&lt;li&gt;Extract it somewhere (e.g., &lt;code&gt;~/ltex-ls&lt;/code&gt;) then create a symbolic link to &lt;code&gt;bin/ltex-ls&lt;/code&gt; from somewhere on your path (e.g. &lt;code&gt;/usr/local/bin/&lt;/code&gt;) like this :
&lt;code&gt;sudo ln -s ~/ltex-ls/bin/ltex-ls /usr/local/bin/ltex-ls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add the following to &lt;code&gt;languages.toml&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[[language]]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;markdown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;language-servers = [ &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;ltex-ls&amp;#34;&lt;/span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;file-types = [&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;md&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scope = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;source.markdown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;roots = []
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Restart Helix.&lt;/li&gt;
&lt;li&gt;Enjoy 🎉&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Helix Editor</title>
        <link>https://microblog.desipenguin.com/post/helix-editor/</link>
        <pubDate>Sat, 28 May 2022 21:49:19 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/helix-editor/</guid>
        <description>&lt;p&gt;I came across &lt;a href=&#34;https://helix-editor.com/&#34;&gt;Helix Editor&lt;/a&gt; on youtube when watching about neovim related video.&lt;/p&gt;
&lt;p&gt;It is vim like editor. That is, a modal editor.&lt;/p&gt;
&lt;p&gt;But it is different in one fundamental way, it terms of how commands work.&lt;/p&gt;
&lt;p&gt;In (Neo)vim, it is action followed by object. So &lt;em&gt;delete word&lt;/em&gt;  becomes &lt;code&gt;dw&lt;/code&gt;
But in Helix it is other way round. Object followed by Action.
So it is &lt;em&gt;word delete&lt;/em&gt; hence &lt;code&gt;wd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It takes a bit getting used to.&lt;/p&gt;
&lt;p&gt;But in other areas, it is far better that (neo)vim. Lot of things work out of the box.&lt;/p&gt;
&lt;p&gt;When I opened a &lt;code&gt;ruby&lt;/code&gt; file, and &lt;code&gt;gd&lt;/code&gt; (Go to Definition) worked in the first attempt. Mind blown!&lt;/p&gt;
&lt;p&gt;This has never worked in the first try. Definitely not out of the box.&lt;/p&gt;
&lt;p&gt;One other thing I liked was context-sensitive menu popups and help texts.&lt;/p&gt;
&lt;p&gt;This makes this approachable.&lt;/p&gt;
&lt;p&gt;Most of the keybindings are already intuitive.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;One downside, there are no plugins. But it is in the roadmap.&lt;/p&gt;
&lt;p&gt;Since LSP works out of the box, I think I may use it as my editor for coding.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll continue using neovim for writing the posts (Although, I wrote this one in helix)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>guifont in Spacevim</title>
        <link>https://microblog.desipenguin.com/post/guifont-in-spacevim/</link>
        <pubDate>Fri, 27 May 2022 15:55:05 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/guifont-in-spacevim/</guid>
        <description>&lt;p&gt;In my tour of Neovim starter kits, I landed on &lt;a href=&#34;https://spacevim.org/&#34;&gt;SpaceVim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I started my Emacs journey with Spacemacs, and used it for couple of years before settling on Doom Emacs.&lt;/p&gt;
&lt;p&gt;Spacemacs inspired SpaceVim.&lt;/p&gt;
&lt;p&gt;I had liked the mnenomic keybindings in Spacemacs (and now in SpaceVim)&lt;/p&gt;
&lt;p&gt;But Spacevim is different from how other starter kits handle configuration.&lt;/p&gt;
&lt;p&gt;Last week, I tried DoomVim (inspired by Doom Emacs) and NVChad (and &amp;ldquo;Neovim from scratch&amp;rdquo; by same folks as LunarVim)
They all had similar configuration, based on &lt;code&gt;lua&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But SpaceVim has its own style.&lt;/p&gt;
&lt;p&gt;For starters, it uses &lt;code&gt;init.toml&lt;/code&gt; for the configuration.&lt;/p&gt;
&lt;p&gt;Also, it uses &lt;code&gt;bundle&lt;/code&gt; instead of &lt;code&gt;packer&lt;/code&gt; (which I had grown used to)&lt;/p&gt;
&lt;p&gt;Nonetheless, using SpaceVim was pleasant experience.&lt;/p&gt;
&lt;p&gt;But I was unable to set &lt;code&gt;guifont&lt;/code&gt; and thus saw empty square at one place, and font was too big for me.&lt;/p&gt;
&lt;p&gt;If I didn&amp;rsquo;t use Neovide i.e. use nvim in terminal, I could see the icons in place of empty square, but I want to use GUI.&lt;/p&gt;
&lt;p&gt;Turns out there is a bug (somewhere)&lt;/p&gt;
&lt;p&gt;(At least) Neovide returns &lt;code&gt;0&lt;/code&gt; for &lt;code&gt;has(&#39;gui_running&#39;)&lt;/code&gt; so &lt;code&gt;guifont&lt;/code&gt; value is never set internally.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://github.com/SpaceVim/SpaceVim/blob/9f4a0ddbb394b2f5d20836754bcecbb675d047b0/autoload/SpaceVim.vim#L1552&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then I unconditionally set guifont in my local &lt;code&gt;SpaceVim.vim&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For now, it works.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Let us see how long I stick with SpaceVim.&lt;/p&gt;
&lt;p&gt;I got LSP working for Ruby, more tweaks like &lt;code&gt;ltex&lt;/code&gt; are pending. (and SymbolOutline, and IndentBlankLine and &amp;hellip;..)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Floating Terminal in Neovim</title>
        <link>https://microblog.desipenguin.com/post/floating-terminal-in-neovim/</link>
        <pubDate>Mon, 16 May 2022 16:02:51 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/floating-terminal-in-neovim/</guid>
        <description>&lt;p&gt;Today I discovered that I can open a nice floating Terminal in the middle of the screen by pressing &lt;code&gt;Ctrl+\&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;code&gt;toggleterm&lt;/code&gt; plugin.&lt;/p&gt;
&lt;p&gt;Earlier I used to use &lt;code&gt;:terminal&lt;/code&gt; command, which would open a terminal in another tab. I had to switch tabs to use the terminal and going back to editing the files.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;toggleterm&lt;/code&gt; I press &lt;code&gt;Ctrl+\&lt;/code&gt;, do my terminal tasks, and toggle it again to send it the background. (At least that is what I think happens, since next time I summon it, I can continue where I left off, not a new shell.)&lt;/p&gt;
&lt;p&gt;On other benefit was that it behaves like normal shell. Let me explain.&lt;/p&gt;
&lt;p&gt;When I used to use &lt;code&gt;:terminal&lt;/code&gt; the shell would open in normal mode. To type commands, I had to explicitly enter the insert-mode. While a minor inconvenience, it still feels odd.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Emoji Completion for Neovim</title>
        <link>https://microblog.desipenguin.com/post/emoji-completion-neovim/</link>
        <pubDate>Mon, 16 May 2022 06:26:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emoji-completion-neovim/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve started watching this YouTube &lt;a href=&#34;https://youtube.com/playlist?list=PLhoH5vyxr6Qq41NFL4GvhFp-WLd5xzIzZ&#34;&gt;playlist&lt;/a&gt; &lt;code&gt;Neovim from scratch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is a great learning resource.&lt;/p&gt;
&lt;p&gt;I use a program called &lt;code&gt;espanso&lt;/code&gt; for hotkey expansion across the OS, that has emoji completion option. But it does not work with Vim. Maybe because of modal editing 🤷&lt;/p&gt;
&lt;p&gt;While it took me some time to figure out, setting it up is quite straight forward.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the plugin. Add the following &amp;lsquo;~/.config/nvim/lua/user/plugins.lua&amp;rsquo; file
&lt;code&gt;use &amp;quot;hrsh7th/cmp-emoji&amp;quot; -- Markdown emoji&lt;/code&gt; (Search for &lt;code&gt;-- cmp plugins&lt;/code&gt; in the file)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add it as a source for &lt;code&gt;nvim-cmp&lt;/code&gt; Add the following &amp;lsquo;~/.config/nvim/lua/user/cmp.lua&amp;rsquo; file
&lt;code&gt;{ name = &amp;quot;emoji&amp;quot; },&lt;/code&gt; (Search for &lt;code&gt;sources =&lt;/code&gt; in the file)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Restart nvim to be sure (But not required.)&lt;/p&gt;
&lt;p&gt;Now as soon as you type &lt;code&gt;:&lt;/code&gt; you get suggestion like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/emoji-completion-nvim.png&#34; alt=&#34;emoji completion in nvim&#34;&gt;&lt;/p&gt;
&lt;p&gt;Isn&amp;rsquo;t it 🆒 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Neovim From Scratch</title>
        <link>https://microblog.desipenguin.com/post/neovim-from-scratch/</link>
        <pubDate>Wed, 11 May 2022 06:37:51 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/neovim-from-scratch/</guid>
        <description>&lt;p&gt;On the &lt;a href=&#34;https://t.me/VimUsersGroup&#34;&gt;Vim Telegram group&lt;/a&gt;, I came across this starter kit called &lt;a href=&#34;https://github.com/LunarVim/Neovim-from-scratch&#34;&gt;Neovim from scratch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But this starter kit is different from others. Others are opinionated (with a good reason). This one seems like purpose built.&lt;/p&gt;
&lt;p&gt;Purpose being - to teach the users what goes under the hood. So it comes with a YouTube series.&lt;/p&gt;
&lt;p&gt;But ones doesn&amp;rsquo;t need to follow the YouTube series to use this. One can just clone the git repo and get going.&lt;/p&gt;
&lt;p&gt;One this that made this more attractive is that it is created by the same person (or at least one of the people) who created LunarVim.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been already using LunarVim for some time. But never quite got how it worked. Also some weird choices of keybindings e.g. They have key-binding for moving to next buffer &lt;code&gt;:bNext&lt;/code&gt; but not for &lt;code&gt;:bprevious&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So I started with backing up the existing working config - as the README suggested (and as a precaution)&lt;/p&gt;
&lt;p&gt;I had to &lt;code&gt;rm -rf&lt;/code&gt; the &lt;code&gt;~/.cache/nvim&lt;/code&gt; and &lt;code&gt;~/.local/share/nvim&lt;/code&gt; before I could start my new config.
I ran into couple of issues, and I &lt;del&gt;almost&lt;/del&gt; went back to working LunarVim config.&lt;/p&gt;
&lt;p&gt;But then I found workarounds for the problems in the project&amp;rsquo;s github issues. (Open source FTW)&lt;/p&gt;
&lt;p&gt;While following the YouTube is not mandatory, it is highly recommended.&lt;/p&gt;
&lt;p&gt;With the YouTube series, I already modified the various options e.g. I prefer relative line numbering which was turned off by default. I also did not like the colorschemes that it comes with. So I added by favourite &lt;a href=&#34;https://github.com/shaunsingh/nord.nvim&#34;&gt;Nord&lt;/a&gt; theme.&lt;/p&gt;
&lt;p&gt;I have only finished up to part 3 of the series, but learned a lot in the process.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;FWIW, this post was written in my new setup.&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Working Offline</title>
        <link>https://microblog.desipenguin.com/post/working-offline/</link>
        <pubDate>Thu, 05 May 2022 17:21:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/working-offline/</guid>
        <description>&lt;p&gt;Today around 10am (or a bit earlier) we lost electricity at our house.
Today is Thursday, and power loss isn&amp;rsquo;t surprising.&lt;/p&gt;
&lt;p&gt;As far as I remember, my city always had scheduled power loss on Thursday. This used to happen every week when I was growing up. So much so, that my engineering college had Thursday as a weekly off, due to this. Over the years, things improved, but Thursday remained the day when local electricity company &lt;del&gt;would&lt;/del&gt; could schedule the  maintenance task.&lt;/p&gt;
&lt;p&gt;Every now and then, we still have power loss for 20-30 minutes. It was after a long time we had a day long power loss (5.30PM as of this writing, and power has not returned)&lt;/p&gt;
&lt;p&gt;I could not work the whole day. At first, I read the books. I completed two books today (I had started reading both earlier)&lt;/p&gt;
&lt;p&gt;Ironically (?) one of the book was science fiction novel in Marathi called &amp;ldquo;Virus&amp;rdquo;. It is about how an advanced race from distant planet sends a virus via radio signals, and wants to cripple the modern world. (Earth wins! don&amp;rsquo;t worry : ) In the novel there are references to how we are dependent so much on computers for everyday life. I was thinking the same, but about internet. Due to battery, we could use our computers (for few hours) without electricity, but almost nothing can be done without the internet.&lt;/p&gt;
&lt;p&gt;That is when I started thinking about the things I could do &amp;ldquo;offline&amp;rdquo;, and decided to write this post.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;While I was able to write this post, I can&amp;rsquo;t publish it without the internet&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Using Projects With LunarVim</title>
        <link>https://microblog.desipenguin.com/post/projects-with-lunarvim/</link>
        <pubDate>Tue, 03 May 2022 21:47:36 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/projects-with-lunarvim/</guid>
        <description>&lt;p&gt;Today I spent some time getting &lt;code&gt;projectile&lt;/code&gt; equivalent working with LunarVim&lt;/p&gt;
&lt;p&gt;At first I went with builtin/core plugin &lt;code&gt;projects.nvim&lt;/code&gt;. Enabling it was quite straight forward.
I wasn&amp;rsquo;t sure how to add new project.&lt;/p&gt;
&lt;p&gt;Then I tried &lt;code&gt;telescope-projects&lt;/code&gt;. Even here I could not add new project (Per their documentation, it is &lt;code&gt;Ctrl-a&lt;/code&gt; in Insert mode, and just &lt;code&gt;c&lt;/code&gt; in normal mode) But I just opened the project root I wanted to work on, and it got added to the list of projects.&lt;/p&gt;
&lt;p&gt;Now that project was enabled, everything worked in project context, like finding file, finding text.&lt;/p&gt;
&lt;p&gt;This is what I wanted.&lt;/p&gt;
&lt;p&gt;I came here looking for &lt;code&gt;fzf-projectile&lt;/code&gt; equivalent from Emacs, but &lt;code&gt;fzf&lt;/code&gt; is already integrated here. So default &lt;code&gt;Find files&lt;/code&gt; means &lt;code&gt;Find files in project using fzf&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Next stop : Running all git commands from inside nvim (Just like I do in Emacs)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Mystery of Un-upgradable KeepassXC</title>
        <link>https://microblog.desipenguin.com/post/un-upgradable-keepassxc/</link>
        <pubDate>Mon, 02 May 2022 07:26:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/un-upgradable-keepassxc/</guid>
        <description>&lt;p&gt;For some time now, my KeepassXC browser extension keep informing that I&amp;rsquo;m using older version of KeepassXC
I usually upgrade immediately, so I did. Or so I thought.&lt;/p&gt;
&lt;p&gt;I saw the same warning couple of days later. I thought there was new version, but there wasn&amp;rsquo;t. So installed it again.&lt;/p&gt;
&lt;p&gt;This happened one more time, and I realized that even after upgrade, KeepassXC remained at older version (2.66, but as you&amp;rsquo;ll see it doesn&amp;rsquo;t matter)&lt;/p&gt;
&lt;p&gt;In order to be sure, I first uninstalled existing KeepassXC rather than installing on top of existing version.&lt;/p&gt;
&lt;p&gt;That didn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;I searched. Didn&amp;rsquo;t help.&lt;/p&gt;
&lt;p&gt;I looked through their issue list on github. No luck.&lt;/p&gt;
&lt;p&gt;Then I thought maybe uninstall isn&amp;rsquo;t really removing the app. (But how can it be 🤔)
But apparently that is what it was. (But not exactly)&lt;/p&gt;
&lt;p&gt;So I wanted to find out where was the one that kept running. I had explicitly moved the one from &lt;code&gt;/Applications&lt;/code&gt; to trash.&lt;/p&gt;
&lt;p&gt;On the terminal I would have used &lt;code&gt;which&lt;/code&gt; command. But how does one find out the same for GUI app ? That too on macOS, because &lt;code&gt;.app&lt;/code&gt; is usually a folder. The real binary is inside &lt;code&gt;/Content/..&lt;/code&gt; path.&lt;/p&gt;
&lt;p&gt;Anyway, turns out there is no technial problem that has not been asked (and resolved) on stackoverflow.&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href=&#34;https://superuser.com/questions/1558195/how-can-i-find-a-path-to-a-running-application-on-mac-os-x&#34;&gt;proof&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Long story short, there was another version of &lt;code&gt;KeepassXC.app&lt;/code&gt; under &lt;code&gt;Utilities&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;Once I moved that to trash, all was OK.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Updating LunarVim</title>
        <link>https://microblog.desipenguin.com/post/updating-lvim/</link>
        <pubDate>Tue, 19 Apr 2022 21:53:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/updating-lvim/</guid>
        <description>&lt;p&gt;Once I got Neovide working with LunarVim, I realized that I had not updated LunarVim for a long time.&lt;/p&gt;
&lt;p&gt;I was already in &lt;code&gt;rolling&lt;/code&gt; branch, so I did &lt;code&gt;git pull origin rolling&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Big mistake.&lt;/p&gt;
&lt;p&gt;Things broke.&lt;/p&gt;
&lt;p&gt;After RTFM, I noticed that there is &lt;code&gt;:LvimUpdate&lt;/code&gt; command in LunarVim.&lt;/p&gt;
&lt;p&gt;But by this time, my config was so broken that nothing worked 😞&lt;/p&gt;
&lt;p&gt;Luckily, I found the old instructions that helped me initially.&lt;/p&gt;
&lt;p&gt;Following those instructions, I was able to get &amp;ldquo;up and running&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Well, almost.&lt;/p&gt;
&lt;p&gt;I still had to run &lt;code&gt;:PakcerSync&lt;/code&gt; from normal &lt;code&gt;nvim&lt;/code&gt; before I could get Neovide with latest lvim&lt;/p&gt;
&lt;p&gt;🎉&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Neovide with LunarVim config</title>
        <link>https://microblog.desipenguin.com/post/neovide-lvim/</link>
        <pubDate>Tue, 19 Apr 2022 21:38:28 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/neovide-lvim/</guid>
        <description>&lt;p&gt;So I tried VimR for some time, but it always felt odd. Sure all the LunarVim keybindings worked.
But VimR wasn&amp;rsquo;t just Neovim client. It comes with its own features like the side panes for Files, Buffers, Markdown etc.&lt;/p&gt;
&lt;p&gt;Also, it won&amp;rsquo;t really quit. &lt;code&gt;:q!&lt;/code&gt; would destroy the window, but it would remain in the dock.&lt;/p&gt;
&lt;p&gt;So for main work, I used Emacs.&lt;/p&gt;
&lt;p&gt;Then today in Doom Emacs Telegram group, someone started talking about Vim.
After some time, I ended up subscribing to Vim Telegram group, and asked about better neovim GUI.&lt;/p&gt;
&lt;p&gt;First suggestion : VimR 😆&lt;/p&gt;
&lt;p&gt;When I explained, someone suggested Neovide. I think I had looked at it earlier. But thinking that I need to compile from the source, I decided not to try it.&lt;/p&gt;
&lt;p&gt;Turn out they have binary releases for macOS&lt;/p&gt;
&lt;p&gt;and they have a new release just 7 days ago (As of this writing)&lt;/p&gt;
&lt;p&gt;Getting it working was simple.&lt;/p&gt;
&lt;p&gt;I needed to set the font correctly. Out of the box, it looked ugly.&lt;/p&gt;
&lt;p&gt;I had to set &lt;code&gt;vim.opt.guifont = &amp;quot;FiraCode Nerd Font:h13&amp;quot;&lt;/code&gt; in &lt;code&gt;~/.config/nvim/config.lua&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;All is working well.&lt;/p&gt;
&lt;p&gt;I think Neovide is better than VimR&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>First Ruby MR</title>
        <link>https://microblog.desipenguin.com/post/first-ruby-mr/</link>
        <pubDate>Wed, 06 Apr 2022 22:10:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/first-ruby-mr/</guid>
        <description>&lt;p&gt;I just looked at the last post here. It was in late Feb 2022
I just realized that I have not posted anything in entire of March 2022&lt;/p&gt;
&lt;p&gt;The reason for this microblog was to make it low-friction so that it does not go the way of my other blogs with month(s) long and sometime year long silence.
But then why didn&amp;rsquo;t I post anything here for a month ?&lt;/p&gt;
&lt;p&gt;I started working with a startup that is bigger than ones I was working with last decade or so.
and they have processes, and meetings.&lt;/p&gt;
&lt;p&gt;I get the importance of both - at bigger scale.&lt;/p&gt;
&lt;p&gt;But then I got busy in meetings. Team meetings (some that go on for 2 hours. Every week) and 1:1 meetings, more of collaboration (these I like)&lt;/p&gt;
&lt;p&gt;Hardly leaving time for anything else.&lt;/p&gt;
&lt;p&gt;Hence no update for entire of March.&lt;/p&gt;
&lt;p&gt;Now that I&amp;rsquo;ve kinda settled, I have just enough time to tell you about my First Ruby MR.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Since I started working here, this is technically my second MR. But the first one was updating the README 😄&lt;/p&gt;
&lt;p&gt;This MR is also not real code change. This is more of configuration for &lt;code&gt;rspec&lt;/code&gt; and set of changes to remove the secrets that were inadvertently checked into git.&lt;/p&gt;
&lt;p&gt;I just felt great so write code after a long time 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Got VimR working with LunarVim</title>
        <link>https://microblog.desipenguin.com/post/vimr-lvim/</link>
        <pubDate>Sat, 26 Feb 2022 13:56:01 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vimr-lvim/</guid>
        <description>&lt;p&gt;I had almost &lt;a href=&#34;https://microblog.desipenguin.com/post/vimr/&#34;&gt;given up&lt;/a&gt; trying to use &lt;code&gt;lvim&lt;/code&gt; config with GUI. But I persisted (and pestered folks on github issue 🙂)
Finally, I got it working.&lt;/p&gt;
&lt;p&gt;I wrote about &lt;a href=&#34;https://learnings.desipenguin.com/post/vimr-lunarvim/&#34;&gt;How to get VimR to use Lunarvim configuration&lt;/a&gt; so that others can also benefit from it.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>VimR</title>
        <link>https://microblog.desipenguin.com/post/vimr/</link>
        <pubDate>Wed, 23 Feb 2022 19:38:40 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/vimr/</guid>
        <description>&lt;p&gt;After setting up LunarVim, I wanted to get it to work with a NeoVim GUI&lt;/p&gt;
&lt;p&gt;I had tried some in the past, but did not like any.&lt;/p&gt;
&lt;p&gt;Then (I think on Discord) I came across some discussion that they got LunarVim (&lt;code&gt;lvim&lt;/code&gt; henceforth) to work with Neoclide.&lt;/p&gt;
&lt;p&gt;I couldn&amp;rsquo;t even get it to run 😞&lt;/p&gt;
&lt;p&gt;I tried VimR, and it worked. i.e. I got it running. But I didn&amp;rsquo;t like their default look.&lt;/p&gt;
&lt;p&gt;Since I was already happy with LunarVim, I thought why not use VimR GUI with &lt;code&gt;lvim&lt;/code&gt; config ?&lt;/p&gt;
&lt;p&gt;Apparently it is not so straight forward.&lt;/p&gt;
&lt;p&gt;It is/was a known issue, which is apparently &lt;a href=&#34;https://github.com/LunarVim/LunarVim/pull/1777&#34;&gt;fixed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m still unable to get it to work.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Back to Lunar Nvim</title>
        <link>https://microblog.desipenguin.com/post/back-to-lunar-nvim/</link>
        <pubDate>Wed, 16 Feb 2022 05:53:50 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/back-to-lunar-nvim/</guid>
        <description>&lt;p&gt;After my &lt;a href=&#34;https://microblog.desipenguin.com/post/doom-nvim-maintainer-leaving/&#34;&gt;problems with Doom NVim&lt;/a&gt;, I decided to go back to LunarNVim.&lt;/p&gt;
&lt;p&gt;I had never really left, but since both Doom and Lunar are NVim based configurations, they may overwrite the configurations (like from &lt;code&gt;~/.local/share/nvim/&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;So I completely removed both Doom and Lunar and reinstalled.&lt;/p&gt;
&lt;p&gt;I also installed &lt;code&gt;ltex&lt;/code&gt; LSP for makrdown, which I could not do with Doom Nvim.&lt;/p&gt;
&lt;p&gt;My other requirement was projectile equivalent. I found that there is &lt;code&gt;:Telescope projects&lt;/code&gt; built-in with Lunar.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m now spending more time learning minor differences in keybindings e.g. Window related tasks are done via &lt;kbd&gt;Ctrl+w&lt;/kbd&gt; rather than &lt;kbd&gt;Space+w&lt;/kbd&gt; that I was used to.&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;Space+w&lt;/kbd&gt; &lt;em&gt;saves&lt;/em&gt; the file (I think &lt;code&gt;w&lt;/code&gt; for &lt;code&gt;write&lt;/code&gt; rather than &lt;code&gt;window&lt;/code&gt;)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;While writing this entry, I was surprised to find that I get auto-completion for file paths. Isn&amp;rsquo;t that nice&lt;/em&gt; 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Doom Nvim Maintainer Leaving (?)</title>
        <link>https://microblog.desipenguin.com/post/doom-nvim-maintainer-leaving/</link>
        <pubDate>Tue, 15 Feb 2022 10:41:27 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/doom-nvim-maintainer-leaving/</guid>
        <description>&lt;p&gt;Just I was getting excited about Doom NVim, today I read (on their Discord server) that Alejandro aka &lt;a href=&#34;https://github.com/NTBBloodbath&#34;&gt;NTBBloodbath on github&lt;/a&gt; has lost interest in Doom Nvim&lt;/p&gt;
&lt;p&gt;To quote him :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ll slowly try to finally make Emacs my primary code editor (always failed in each attempt haha), Neovim&amp;rsquo;s ecosystem isn&amp;rsquo;t going in the direction I would like and I think it never will be so I&amp;rsquo;m very frustrated and sad with it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Maintenance will still be &amp;ldquo;active&amp;rdquo; but a bit more slow from my side &amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;I&amp;rsquo;ll accept PRs, work on issues and everything will be as usual but a bit more slow as I told before.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is sad 😞&lt;/p&gt;
&lt;p&gt;I also keep getting a lot of errors from TreeParser (in what I would call minibuffer in Emacs terms) This is distracting.&lt;/p&gt;
&lt;p&gt;I tried (maybe not enough) to set projectile equivalent (telescope project plugin) and ltex-ls, but no success.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Left Stck.me</title>
        <link>https://microblog.desipenguin.com/post/left-stck.me/</link>
        <pubDate>Fri, 11 Feb 2022 23:15:42 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/left-stck.me/</guid>
        <description>&lt;p&gt;Today was my last day at &lt;a href=&#34;https://stck.me&#34;&gt;stck.me&lt;/a&gt; (Formerly Scrollstack.com)
I spent more than a year working with the wonderful engineering team there.
I learnt a lot from everyone on the team, and made some new friends (I already knew a lot of folks from this team before I joined) during my stay.&lt;/p&gt;
&lt;p&gt;I will continue to cheer stck.me from the sidelines&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Some of my contributions during my time with scrollstack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improve the SEO of the hosted blogs by auto generating the Sitemap from the posts&lt;/li&gt;
&lt;li&gt;Integrate Honeybadger error monitoring tool for proactively addressing the issues in production setup&lt;/li&gt;
&lt;li&gt;POC to generate PDF from Post &lt;a href=&#34;https://github.com/mandarvaze/url2pdf&#34;&gt;Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multiple file support for Digital Goods like Gumroad&lt;/li&gt;
&lt;li&gt;Monthly Active User Metrics. Although we did not end up using it, I learnt about &lt;a href=&#34;https://microblog.desipenguin.com/post/rsyslog/&#34;&gt;rsyslog&lt;/a&gt; and &lt;code&gt;logrotate&lt;/code&gt; in the process&lt;/li&gt;
&lt;li&gt;Refactor tiptapy to use more Jinja and less python. This helped reduce the python code. &lt;a href=&#34;https://github.com/shon&#34;&gt;Shekhar&lt;/a&gt; helped a lot on this process. 🙏&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Doom Nvim</title>
        <link>https://microblog.desipenguin.com/post/doom-nvim/</link>
        <pubDate>Thu, 10 Feb 2022 19:43:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/doom-nvim/</guid>
        <description>&lt;p&gt;Those who know me, probably already know that Doom Emacs has been my daily driver for a last years now.&lt;/p&gt;
&lt;p&gt;and that recently neovim has piqued my interest.&lt;/p&gt;
&lt;p&gt;I already wrote about &lt;a href=&#34;https://microblog.desipenguin.com/post/lunar-nvim/&#34;&gt;Lunar NVim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Today I discovered Doom-Nvim&lt;/p&gt;
&lt;p&gt;Port of (sorta) Doom emacs to neovim ecosystem.&lt;/p&gt;
&lt;p&gt;What is not to like ? 😄&lt;/p&gt;
&lt;p&gt;As I wrote in Lunar NVim post, I am happy with Doom emacs. But this might make me switch back to (n)vim 😄&lt;/p&gt;
&lt;p&gt;But seriously, I have used it only for couple of hours &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h1 id=&#34;things-i-miss&#34;&gt;Things I miss&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;ltex-ls : LSP for text ? Gives me grammar tips (and spell checks)&lt;/li&gt;
&lt;li&gt;projectile : Switch between different projects easily, have multiple projects open in different tabs at the same time.&lt;/li&gt;
&lt;li&gt;magit : There is neogit, and it is bit behind in terms of maturity I think. e.g. I could not add new file from &lt;code&gt;git status&lt;/code&gt; window.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There may be equivalent for both of these in neovim ecosystem, I just have not looked yet.&lt;/p&gt;
&lt;p&gt;So while I won&amp;rsquo;t switch away from Doom emacs tomorrow, there is a high chance that I&amp;rsquo;ll look for equivalents here, and give an honest try to make this my new IDE&lt;/p&gt;
&lt;p&gt;But I find this more aligned with my muscle memory, so I&amp;rsquo;m definitely switching away from Lunar NVim&lt;/p&gt;
&lt;p&gt;(Ironically, I found out about Doom Nvim in a reddit thread reviewing Lunar Nvim 😆&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I wrote this entire entry in Doom-nvim. Talk about meta!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Added GA Support to Indiefeed Theme</title>
        <link>https://microblog.desipenguin.com/post/add-ga-support-indietheme/</link>
        <pubDate>Tue, 08 Feb 2022 19:51:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/add-ga-support-indietheme/</guid>
        <description>&lt;p&gt;I started this blog using indiefeed theme. But soon realized that the original creator has moved on. They have marked the repo as read-only on github.
I had already started tweaking it to my liking, but now changes are more than tweaks. e.g. The original theme did not have good image support. i.e. only images used were in the Author profile image, and it has rounded corners/circular shape, which does not work when image is part of the post itself.&lt;/p&gt;
&lt;p&gt;So I fixed that.&lt;/p&gt;
&lt;p&gt;I also added Mermaid diagram support.&lt;/p&gt;
&lt;p&gt;Since I have been writing consistently on this blog, I was curious to see if consistency pays of, and how.&lt;/p&gt;
&lt;p&gt;My &lt;a href=&#34;https://learnings.desipenguin.com&#34;&gt;other blog&lt;/a&gt; uses Google Analytics to track this. So at first I thought : &amp;ldquo;I&amp;rsquo;ll just create another property and start tracking&amp;rdquo;&lt;/p&gt;
&lt;p&gt;But it had two problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Indiefeed theme did not support Google Analytics&lt;/li&gt;
&lt;li&gt;GA has come up with GAv4, so creating property is a bit different.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Second of the two was easy to overcome.&lt;/p&gt;
&lt;p&gt;Hugo supports both versions. &lt;code&gt;v4&lt;/code&gt; and &lt;code&gt;v3&lt;/code&gt; (But it occurred to me late) But to be safe, I create Universal Analytics using &lt;code&gt;Show Advanced Options&lt;/code&gt; button.&lt;/p&gt;
&lt;p&gt;First one took minor code changes to the theme.&lt;/p&gt;
&lt;p&gt;Hugo supports GA &amp;ldquo;out of the box&amp;rdquo;, but theme creator needs to enable it.&lt;/p&gt;
&lt;p&gt;I needed to include the built-in template in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section. If interested, see &lt;a href=&#34;https://github.com/mandarvaze/indiefeed/commit/e4214af4ea1b686a6cbd7e140ad013d0cbcbcf8e#diff-96dd75a968976edd5e03170268ed9085733f75c3fb24f992ae613c89e6de42dcR54&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Read The Docs Carefully</title>
        <link>https://microblog.desipenguin.com/post/read-doc-carefully/</link>
        <pubDate>Tue, 01 Feb 2022 19:24:41 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/read-doc-carefully/</guid>
        <description>&lt;p&gt;Continuing with my Ruby language learning journey, I wanted to use it for more than &lt;code&gt;Hello world&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So I decided to try python&amp;rsquo;s &lt;code&gt;request&lt;/code&gt; equivalent.&lt;/p&gt;
&lt;p&gt;Since I didn&amp;rsquo;t know where to begin, I just searched for &lt;code&gt;requests&lt;/code&gt; on &lt;a href=&#34;https://rubygems.org/&#34;&gt;RubyGems&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Turns out Gem by the exact name &lt;a href=&#34;https://rubygems.org/gems/requests&#34;&gt;exists&lt;/a&gt; and with description &lt;code&gt;Because Requests for Python is awesome&lt;/code&gt; 🤗
But it isn&amp;rsquo;t updated in close to 5 years now.&lt;/p&gt;
&lt;p&gt;I also wanted to use something native (i.e. not ported from other languages - although nothing wrong with that)&lt;/p&gt;
&lt;p&gt;Initially I tried &lt;code&gt;net/http&lt;/code&gt; from the standard library.&lt;/p&gt;
&lt;p&gt;Several people had already suggested Faraday by then. So that is what I chose.&lt;/p&gt;
&lt;p&gt;The code was straight forward, yet it kept failing.&lt;/p&gt;
&lt;p&gt;I asked for help on the Telegram group, but people kept suggesting based on their hunch, without reading the code I had shared.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I know it is not SO, so I shouldn&amp;rsquo;t expect too much, still when one feels stuck and other&amp;rsquo;s suggestions aren&amp;rsquo;t useful, one feels frustrated 🤷‍&lt;/p&gt;
&lt;p&gt;Finally, I decided to dig deep (I thought I had already done that, but I guess not 😄)&lt;/p&gt;
&lt;p&gt;Turns out when you create a connection, you only specify the server in the connection object, and specify the path when you make a request.
Makes sense looking back. (&lt;em&gt;I had specified the entire URL, including the path&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Second most important one was, and related to the first one, or because of the first one, I specified &lt;code&gt;&#39;get&#39;&lt;/code&gt; as param to &lt;code&gt;conn.get()&lt;/code&gt;
It is copy/paste from the &lt;a href=&#34;https://lostisland.github.io/faraday/usage/&#34;&gt;Usage&lt;/a&gt; page of Faraday documentation.&lt;/p&gt;
&lt;p&gt;I assumed &lt;code&gt;&#39;get&#39;&lt;/code&gt; string tells the connection to &lt;code&gt;GET&lt;/code&gt; the URL. (Looking back, if we are already using &lt;code&gt;conn.get&lt;/code&gt;, why would we specify string &lt;code&gt;&#39;get&#39;&lt;/code&gt; again. But .. 🤷‍)
Reason I thought that because I had already specified the path in &lt;code&gt;connection&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The problem was I kept getting HTML output, when I asked for &lt;code&gt;json&lt;/code&gt;. I thought &lt;strong&gt;that&lt;/strong&gt; was the problem 😆&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t until I decided to dig down the rabbit hole and reached &lt;a href=&#34;https://lostisland.github.io/faraday/middleware/json-response&#34;&gt;this&lt;/a&gt; page I realized what may be the actual problem.&lt;/p&gt;
&lt;p&gt;Here, they are passing &lt;code&gt;&#39;json&#39;&lt;/code&gt; to &lt;code&gt;conn.get&lt;/code&gt;. &lt;strong&gt;That&lt;/strong&gt; can&amp;rsquo;t be right, because they are already specifying &lt;code&gt;f.response :json&lt;/code&gt; in &lt;code&gt;Faraday.new&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is when I went to actual &lt;a href=&#34;http://httpbingo.org&#34;&gt;http://httpbingo.org&lt;/a&gt; and noticed that &lt;code&gt;json&lt;/code&gt; is a page that returns JSON response. 💡&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lessons Learned:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t copy/paste blindly&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t assume URLs are placeholders (Most times they are, until they are not)&lt;/li&gt;
&lt;li&gt;Think! (This happened late, but better late than never 😄)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;To be fair, someone shared working code, which was bit different from mine, in a sense it did not use connection, but by then I had already solved the problem myself.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Sketch: Dancing Queen</title>
        <link>https://microblog.desipenguin.com/post/dancing_queen/</link>
        <pubDate>Sat, 29 Jan 2022 17:38:39 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dancing_queen/</guid>
        <description>&lt;p&gt;I published my &lt;a href=&#34;https://learnings.desipenguin.com/images/sketches/dancing_queen.jpg&#34;&gt;new sketch&lt;/a&gt;
This appeared on the back of one of the children&amp;rsquo;s books. I think &lt;a href=&#34;https://www.tinkle.in/&#34;&gt;tinkle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It took me less than 5 minutes, but makes for a good break from work, and lets me keep practicing my art.&lt;/p&gt;
&lt;p&gt;The girl appears so happy showing off her new dress (I think) or she is just happy and frolicking.
In either case, it is adorable.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;If you haven&amp;rsquo;t, you can check my older sketches &lt;a href=&#34;https://learnings.desipenguin.com/galleries/&#34;&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Ruby Debugger</title>
        <link>https://microblog.desipenguin.com/post/ruby-debugger/</link>
        <pubDate>Fri, 28 Jan 2022 10:49:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ruby-debugger/</guid>
        <description>&lt;p&gt;While there are multiple ways to use Ruby debugger, for my first Ruby script (?) I found starting the script via &lt;code&gt;rdbg&lt;/code&gt; to be the easiest.&lt;/p&gt;
&lt;p&gt;Like &lt;code&gt;rdbg myscript.rb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Debugger has all the basic command I have used elsewhere.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;n&lt;/code&gt; for next&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pp&lt;/code&gt; for pretty print&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt; for quit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For subsequent times, using &lt;code&gt;require &#39;debug&#39;&lt;/code&gt; followed by &lt;code&gt;binding.break&lt;/code&gt; may be better.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This &lt;a href=&#34;https://github.com/ruby/debug&#34;&gt;README&lt;/a&gt; has all the details.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Bundler</title>
        <link>https://microblog.desipenguin.com/post/bundler/</link>
        <pubDate>Thu, 27 Jan 2022 21:12:32 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/bundler/</guid>
        <description>&lt;p&gt;If I were to explain &lt;code&gt;bundler&lt;/code&gt; to pythonista (like myself) I would say&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bundler in Ruby land is like &lt;code&gt;poetry&lt;/code&gt; in python land, except it does not create sandbox environment&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;To explain it a little more. It tracks dependencies in a &lt;code&gt;Gemfile&lt;/code&gt; (and &lt;code&gt;Gemfile.lock&lt;/code&gt;) which then goes in your repo.
Other engineers sharing your code would then run &lt;code&gt;bundle install&lt;/code&gt;, and they get exact same Gems (including versions) on their machines.&lt;/p&gt;
&lt;p&gt;In order to add entries to the &lt;code&gt;Gemfile&lt;/code&gt; one does &lt;code&gt;bundle add&lt;/code&gt;, which updates the &lt;code&gt;Gemfile&lt;/code&gt; &lt;strong&gt;and&lt;/strong&gt; installs it locally&lt;/p&gt;
&lt;p&gt;This is somewhat like &lt;code&gt;poetry add&lt;/code&gt; updating &lt;code&gt;pyproject.toml&lt;/code&gt; and &lt;code&gt;poetry.lock&lt;/code&gt;
&lt;code&gt;Gemfile&lt;/code&gt; is like &lt;code&gt;requirements.txt&lt;/code&gt; which one updates manually.&lt;/p&gt;
&lt;p&gt;(Just like &lt;code&gt;poetry&lt;/code&gt;) one needs to create base/empty &lt;code&gt;Gemfile&lt;/code&gt; via &lt;code&gt;bundle init&lt;/code&gt;
As I found out, one can&amp;rsquo;t directly &lt;code&gt;bundle add&lt;/code&gt; (Although it might be a good enhancement to create &lt;code&gt;Gemfile&lt;/code&gt; if one is not found 🤔)&lt;/p&gt;
&lt;p&gt;Also, I think the documentation should mention &lt;code&gt;bundle add&lt;/code&gt; much earlier.&lt;/p&gt;
&lt;p&gt;If I had not used &lt;code&gt;poetry&lt;/code&gt; I could not have guessed about it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ref: Bundler &lt;a href=&#34;https://bundler.io/docs.html&#34;&gt;documentation&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Where Are My (Ruby) Gems ?</title>
        <link>https://microblog.desipenguin.com/post/where-are-my-gems/</link>
        <pubDate>Wed, 26 Jan 2022 16:38:12 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/where-are-my-gems/</guid>
        <description>&lt;p&gt;As I mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/lunar-nvim/&#34;&gt;earlier&lt;/a&gt;, I&amp;rsquo;m trying Lunar nvim starter kit.
Latest version of nvim comes with LSP support, and while learning a new language LSP could be really helpful (I think)&lt;/p&gt;
&lt;p&gt;I had heard of &lt;code&gt;solargraph&lt;/code&gt;. Running &lt;code&gt;:LspInstall&lt;/code&gt; in nvim gave me option of &lt;code&gt;sorbet&lt;/code&gt; as well.
But I decided to stick with &lt;code&gt;solargraph&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;nvim was successful in installing &lt;code&gt;solargraph&lt;/code&gt;, or so it told me. But it did not work.
&lt;code&gt;LspInfo&lt;/code&gt; told me that it did not find &lt;code&gt;solargraph&lt;/code&gt;
Just to be sure I &lt;code&gt;gem install solargraph&lt;/code&gt; from the terminal, before I tried to install LSP from nvim &lt;em&gt;again&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;No dice.&lt;/p&gt;
&lt;p&gt;So decided to investigate.&lt;/p&gt;
&lt;p&gt;Being new to Ruby, I didn&amp;rsquo;t know the default location where gems get installed.&lt;/p&gt;
&lt;p&gt;In the process, I learnt about &lt;code&gt;gem env&lt;/code&gt; where following seemed wrong&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; - INSTALLATION DIRECTORY: /usr/local/Cellar/tmuxinator/3.0.1/libexec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Eventually I learnt that I could also use &lt;code&gt;gem env home&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I had no idea why &lt;code&gt;tmuxinator&lt;/code&gt; would even be in the picture.&lt;/p&gt;
&lt;p&gt;So I decided to &lt;code&gt;brew uninstall tmuxinator&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I also &lt;code&gt;asdf uninstall ruby&lt;/code&gt; (I think I went too far 😆 but I wanted to be really sure)&lt;/p&gt;
&lt;p&gt;OK, now I had clean slate.&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;asdf install ruby latest&lt;/code&gt; followed by &lt;code&gt;gem env&lt;/code&gt; and I got:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; - INSTALLATION DIRECTORY: /Users/mandar/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ➜ which solargraph
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Users/mandar/.asdf/shims/solargraph
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Looks better.&lt;/p&gt;
&lt;p&gt;In the process, I also learnt &lt;code&gt;gem which solargraph&lt;/code&gt;, which is a bit different (Points to &lt;code&gt;solargraph.rb&lt;/code&gt; file, rather than bash script)&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;LspInstall&lt;/code&gt; also worked in lvim&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;LspStart&lt;/code&gt; fails. But with different error. (Investigation and resolution of that in another post)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Lunar Nvim</title>
        <link>https://microblog.desipenguin.com/post/lunar-nvim/</link>
        <pubDate>Mon, 24 Jan 2022 16:13:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/lunar-nvim/</guid>
        <description>&lt;p&gt;I came across some starter kits for nvim.
Earlier I tried adding individual plugins and learning all the nvim basics, but since I&amp;rsquo;m pretty happy with Doom Emacs &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But Lunar nvim seems stable and provides a lot of functionality out of the box. 👍&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lunarvim.org/01-installing.html#prerequisites&#34;&gt;prerequisite&lt;/a&gt; page asks to ensure that I have &lt;code&gt;cargo&lt;/code&gt;.  I knew it a package manager(?) for &lt;code&gt;rust&lt;/code&gt;, but didn&amp;rsquo;t know whether I could install it standalone. Turns out I can&amp;rsquo;t. &lt;code&gt;brew&lt;/code&gt; also suggested that I install &lt;code&gt;rust&lt;/code&gt; 😄 which I did.&lt;/p&gt;
&lt;p&gt;The installation script asked me whether I wanted to install npm, python and rust dependencies (as if it was optional). I didn&amp;rsquo;t know what all I might miss if I chose not to install those. My aim was to get a decent nvim setup without having to tinker with manual installations. So I accepted those options.&lt;/p&gt;
&lt;p&gt;After that, installation went well.&lt;/p&gt;
&lt;p&gt;It created a wrapper script &lt;code&gt;~/.local/bin/lvim&lt;/code&gt; which sets up environment variables, and calls &lt;code&gt;nvim&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Best thing is that it also uses &lt;code&gt;space&lt;/code&gt; as a &lt;code&gt;leader&lt;/code&gt; key. So it worked well for my Doom Emacs muscle memory 🎉&lt;/p&gt;
&lt;p&gt;It seems to have cool built-in features and sane defaults.&lt;/p&gt;
&lt;p&gt;I have since &lt;code&gt;brew uninstall vim&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I also wanted and created an alias for &lt;code&gt;view&lt;/code&gt; command to &lt;code&gt;lvim -R&lt;/code&gt; (which is like &lt;code&gt;nvim -R&lt;/code&gt; but with &lt;code&gt;lvim&lt;/code&gt; configuration loaded, I think.)&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;view&lt;/code&gt; command comes with the OS&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/bin/view&lt;/code&gt; is a link to &lt;code&gt;/usr/bin/vim&lt;/code&gt; - which I could not remove, even with &lt;code&gt;sudo&lt;/code&gt;. I got &lt;code&gt;Operation not permitted&lt;/code&gt; each time 🤷‍&lt;/p&gt;
&lt;p&gt;For now, I have settled with an alias &lt;code&gt;lview&lt;/code&gt;, which &lt;del&gt;I am&lt;/del&gt; my fingers are likely to forget, but I will train them 😄&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Who knows ? That might change if Lunar Nvim works really well 😆&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Exploring `irb`</title>
        <link>https://microblog.desipenguin.com/post/exploring-irb/</link>
        <pubDate>Wed, 19 Jan 2022 20:15:07 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/exploring-irb/</guid>
        <description>&lt;h3 id=&#34;start-clean&#34;&gt;Start clean&lt;/h3&gt;
&lt;p&gt;I created an alias &lt;code&gt;irb=irb --sample-book-mode&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This removes the complex prompt like &lt;code&gt;irb(main):001:0&amp;gt;&lt;/code&gt; and gives plain and simple &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; instead.&lt;/p&gt;
&lt;h3 id=&#34;get-help&#34;&gt;Get Help!&lt;/h3&gt;
&lt;p&gt;When programming in Python, even today I use &lt;code&gt;dir&lt;/code&gt; in Python REPL.
So I was looking for the equivalent in Ruby land.&lt;/p&gt;
&lt;p&gt;Turns out I was comparing apples and oranges (so to speak)&lt;/p&gt;
&lt;p&gt;As of early 2022, &lt;code&gt;irb&lt;/code&gt; has awesome help built-in.
It has good autocompletion. So just typing &lt;code&gt;.&lt;/code&gt; may be enough to know list of methods available.&lt;/p&gt;
&lt;p&gt;Or just &lt;code&gt;help&lt;/code&gt; followed by say &lt;code&gt;String&lt;/code&gt; (or &lt;code&gt;Array&lt;/code&gt;) is enough.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/irb-help.png&#34; alt=&#34;Built-in Help&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;remove-the-clutter&#34;&gt;Remove the clutter&lt;/h3&gt;
&lt;p&gt;During the initial exploration, &lt;code&gt;irb&lt;/code&gt; session quickly gets cluttered.&lt;/p&gt;
&lt;p&gt;I instinctively tried &lt;code&gt;clear&lt;/code&gt; (as used in shell) - that didn&amp;rsquo;t work 😄&lt;/p&gt;
&lt;p&gt;To clear the &lt;code&gt;irb&lt;/code&gt; session, use &lt;kbd&gt;Ctrl+L&lt;/kbd&gt;&lt;/p&gt;
&lt;h3 id=&#34;you-require-this&#34;&gt;You &lt;code&gt;require&lt;/code&gt; this&lt;/h3&gt;
&lt;p&gt;passing &lt;code&gt;-r&lt;/code&gt; to irb automatically makes that gem available in &lt;code&gt;irb&lt;/code&gt; session.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;➜&lt;/span&gt; irb &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;rpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; pp &lt;span style=&#34;color:#b8860b&#34;&gt;$LOAD_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.../lib/ruby/site_ruby/1.9.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.../lib/ruby/site_ruby&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.../lib/ruby/vendor_ruby/1.9.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.../lib/ruby/vendor_ruby&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.../lib/ruby/1.9.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(&lt;em&gt;☝ example may be old. In my case, &lt;code&gt;$LOAD_PATH&lt;/code&gt;️ was automatically pretty-printed 😄&lt;/em&gt;)&lt;/p&gt;
&lt;h3 id=&#34;time-to-go&#34;&gt;Time to go&lt;/h3&gt;
&lt;p&gt;&lt;kbd&gt;Ctrl+D&lt;/kbd&gt; works for both python REPL and &lt;code&gt;irb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In python you require &lt;code&gt;()&lt;/code&gt; to call a function&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ python
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Python 3.8.12 &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;default, Sep &lt;span style=&#34;color:#666&#34;&gt;16&lt;/span&gt; 2021, 22:00:28&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;Clang 12.0.0 &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;clang-1200.0.32.29&lt;span style=&#34;color:#666&#34;&gt;)]&lt;/span&gt; on darwin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;help&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;copyright&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;credits&amp;#34;&lt;/span&gt; or &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;license&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; more information.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span style=&#34;color:#a2f&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Use exit&lt;span style=&#34;color:#666&#34;&gt;()&lt;/span&gt; or Ctrl-D &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;i.e. EOF&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt; to &lt;span style=&#34;color:#a2f&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In Ruby, it is optional. So both &lt;code&gt;exit()&lt;/code&gt; or simply &lt;code&gt;exit&lt;/code&gt; works! 👍&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Now I have Email Address on my own domain</title>
        <link>https://microblog.desipenguin.com/post/email-custom-domain/</link>
        <pubDate>Mon, 17 Jan 2022 21:32:31 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/email-custom-domain/</guid>
        <description>&lt;p&gt;I have owned this domain for a couple of years now (maybe more)
But it never occurred to me to have my email address on that domain.
I suppose I always assumed that it would involve setting up own servers and/or cost of server etc.&lt;/p&gt;
&lt;p&gt;Usually domain registrars provide some free emails, but their interface is just usable.
Also, it might become one-more-email I&amp;rsquo;ll forget to check 😆&lt;/p&gt;
&lt;p&gt;But for my recent secret 🕵 project, I needed a professional email. Not personal email.&lt;/p&gt;
&lt;p&gt;Turns out &lt;a href=&#34;https://www.zoho.com/mail/zohomail-pricing.html&#34;&gt;zoho&lt;/a&gt; has a free forever plan that works well for my scenario.&lt;/p&gt;
&lt;p&gt;The plan covers 5 free users, so it worked for me.&lt;/p&gt;
&lt;p&gt;Zoho has great documentation. They walked me through setting up all the &lt;code&gt;TXT&lt;/code&gt;, &lt;code&gt;MX&lt;/code&gt;, &lt;code&gt;SPF&lt;/code&gt; and &lt;code&gt;DKIM&lt;/code&gt; records.&lt;/p&gt;
&lt;p&gt;It was really easy.&lt;/p&gt;
&lt;p&gt;So now I have &lt;code&gt;@this-domain&lt;/code&gt; email.&lt;/p&gt;
&lt;p&gt;I already have and use zoho mail. So I do not need to check one-more email either 😄&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Fish function to read webpage in Terminal</title>
        <link>https://microblog.desipenguin.com/post/fish_function_readable/</link>
        <pubDate>Sun, 16 Jan 2022 22:17:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/fish_function_readable/</guid>
        <description>&lt;p&gt;I&amp;rsquo;m really digging &lt;a href=&#34;https://microblog.desipenguin.com/post/readability/&#34;&gt;reading web posts in the terminal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After using it for some time, I realized that typing same arguments after the URL (That I usually copied to the clipboard from some other place) is getting cumbersome.&lt;/p&gt;
&lt;p&gt;So I created a fish function out of it (&lt;em&gt;If you see yourself doing the same task over and over, it is a good place to automated it&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Here is the simple function&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;function&lt;/span&gt; readweb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      readable &lt;span style=&#34;color:#b8860b&#34;&gt;$argv&lt;/span&gt; | w3m -T text/html
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  end
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now save it to a file, to reuse it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ functions readweb &amp;gt; ~/.config/fish/functions/readweb.fish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Just paste the URL after typing &lt;code&gt;readweb&lt;/code&gt;, and hit &lt;kbd&gt;RET&lt;/kbd&gt; 🎉&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ readweb https://microblog.desipenguin.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/jorgebucaran/cookbook.fish#how-do-i-create-a-function-in-fish&#34;&gt;Reference&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>IRC</title>
        <link>https://microblog.desipenguin.com/post/irc/</link>
        <pubDate>Sat, 15 Jan 2022 17:40:11 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/irc/</guid>
        <description>&lt;p&gt;I could not believe myself, that I finally created an IRC account.&lt;/p&gt;
&lt;p&gt;Lot of people have asked how come I am not on IRC. They told me that we get to interact with smart people on IRC, including creators of great software, libraries, framework.
But for some reason, I resisted. It felt complex, compared to modern communities like Telegram, Discord etc.&lt;/p&gt;
&lt;p&gt;Today someone suggested it again on the Doom Emacs Telegram channel, and this time I decided to give an honest try.&lt;/p&gt;
&lt;p&gt;So here I am.&lt;/p&gt;
&lt;h3 id=&#34;choosing-a-client&#34;&gt;Choosing a client&lt;/h3&gt;
&lt;p&gt;While there are a lot of IRC client apps to choose from, I decided to continue with ERC built into Emacs 😄
This means I don&amp;rsquo;t need to switch to a different app. Plus IRC being text based, it makes sense it belongs to an &lt;del&gt;editor&lt;/del&gt; app like Emacs 😉&lt;/p&gt;
&lt;p&gt;I had connected to IRC servers in the past, only briefly. So I know there is a nickname on IRC.
But like any other social app, you don&amp;rsquo;t need an account (usually paired with an email and password)&lt;/p&gt;
&lt;p&gt;Account is optional.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t sure how that works.&lt;/p&gt;
&lt;p&gt;So I went ahead and &lt;a href=&#34;https://libera.chat/guides/registration&#34;&gt;registered&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;registration&#34;&gt;Registration&lt;/h3&gt;
&lt;p&gt;Since IRC is text based protocol, the registration is via :
&lt;code&gt;/msg NickServ REGISTER YourPassword youremail@example.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The password in plain text. But I assume it is only in my Emacs.
Even in browser, technically it is visible till sent over the wire
so 🤞&lt;/p&gt;
&lt;p&gt;I got email confirmation email, and verification was again a command just like above
&lt;code&gt;/msg NickServ VERIFY REGISTER YourNickName YourVerificationCode&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Email contained exact command to paste. 👍&lt;/p&gt;
&lt;h3 id=&#34;i-dont-know-how-to-quit-&#34;&gt;I don&amp;rsquo;t know how to Quit 😄&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;I don&#39;t know how to quit&lt;/code&gt; may be a motivational line, Or SO question about vi/vim
But in my case, I didn&amp;rsquo;t know how to exit out of &lt;code&gt;ERC&lt;/code&gt; session.&lt;/p&gt;
&lt;p&gt;Following are actual attempts 😆&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;mandarvaze&amp;gt; quit
No target

&amp;lt;mandarvaze&amp;gt; exit
No target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, I RTFM and figured &lt;code&gt;/quit&lt;/code&gt; to disconnect from a server.&lt;/p&gt;
&lt;h3 id=&#34;joining-and-leaving-a-channel&#34;&gt;Joining (and leaving) a channel&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/join #pythonpune&lt;/code&gt;
&lt;code&gt;/part #pythonpune&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I found basic IRC guide &lt;a href=&#34;https://libera.chat/guides/basics&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;In case you are curious, IRC stands for Internet Relay Chat&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Ruby for Python Programmers</title>
        <link>https://microblog.desipenguin.com/post/ruby-for-python-programmers/</link>
        <pubDate>Fri, 14 Jan 2022 19:56:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ruby-for-python-programmers/</guid>
        <description>&lt;p&gt;While I noted similarities and difference between Ruby and Python, as I was learning the basics &lt;a href=&#34;https://microblog.desipenguin.com/post/ruby-syntax-1/&#34;&gt;here&lt;/a&gt;, &lt;a href=&#34;https://microblog.desipenguin.com/post/ruby-syntax-2/&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://microblog.desipenguin.com/post/ruby-syntax-3/&#34;&gt;here&lt;/a&gt; there is official document on the Ruby site. See &lt;a href=&#34;https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/&#34;&gt;this&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Learning Ruby: Syntax (Part 3)</title>
        <link>https://microblog.desipenguin.com/post/ruby-syntax-3/</link>
        <pubDate>Fri, 14 Jan 2022 16:28:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ruby-syntax-3/</guid>
        <description>&lt;h1 id=&#34;methods&#34;&gt;Methods&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Ruby functions start with &lt;code&gt;def&lt;/code&gt; just like python, but end with &lt;code&gt;end&lt;/code&gt; keyword.&lt;/li&gt;
&lt;li&gt;splat operator (&lt;code&gt;*&lt;/code&gt;) to destructure an array into a List. This is similar to Python splat operator&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; x &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;30&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; a, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;b &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#b44&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{&lt;/span&gt;a&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;=}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;, &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{&lt;/span&gt;b&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;=}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;, b&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;30&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Python ☝️, Ruby 👇&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; first, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;rest, last  &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; first
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; rest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; last
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But in Ruby, splat operator can also create an array.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; q&lt;span style=&#34;color:#666&#34;&gt;=*&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;135&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;135&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;135&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the second scenario&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, it creates an array. I think this is useful for scenario where the method accepts either a single element or an array.&lt;/p&gt;
&lt;p&gt;In python, we have to write an awkward code like&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;isinstance&lt;/span&gt;(item, &lt;span style=&#34;color:#a2f&#34;&gt;int&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  my_list &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [item]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;When used in method argument, splat operator is similar to python&amp;rsquo;s &lt;code&gt;*args&lt;/code&gt; (&lt;code&gt;args&lt;/code&gt; is just a convention)&lt;/li&gt;
&lt;li&gt;Method name conventions
&lt;ul&gt;
&lt;li&gt;if method ends with &lt;code&gt;?&lt;/code&gt; it returns boolean e.g. &lt;code&gt;5.even? #=&amp;gt; false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if method ends with &lt;code&gt;!&lt;/code&gt; it does something destructive
&lt;ul&gt;
&lt;li&gt;e.g. &lt;code&gt;upcase&lt;/code&gt; returns the upper case version of the string, but the string itself does not change&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;upcase!&lt;/code&gt; returns the upper case version of the string, while also changing the string itself to upper case.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;classes&#34;&gt;classes&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;class definition starts with keyword &lt;code&gt;class&lt;/code&gt; just like python. But ends with &lt;code&gt;end&lt;/code&gt; keyword.&lt;/li&gt;
&lt;li&gt;scopes determined by the prefix of the variable name
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@&lt;/code&gt; : instance scope&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$&lt;/code&gt; : global scope&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@@&lt;/code&gt; : class scope&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;class methods start with &lt;code&gt;self.&lt;/code&gt; Can not be called on an instance (Like &lt;code&gt;@staticmethod&lt;/code&gt; in python ??)&lt;/li&gt;
&lt;li&gt;Derived class uses &lt;code&gt;&amp;lt;&lt;/code&gt; to denote parent class&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Derived class&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Derived&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Baseclass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;include and extend&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;module&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;ModuleExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00a000&#34;&gt;foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Including modules binds their methods to the class instances.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Extending modules binds their methods to the class itself.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Person&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ModuleExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Book&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f&#34;&gt;extend&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ModuleExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Person&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;foo     &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; NoMethodError: undefined method `foo&amp;#39; for Person:Class&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Person&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;foo &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; &amp;#34;foo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Book&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;foo       &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; &amp;#34;foo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Book&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;foo   &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; NoMethodError: undefined method `foo&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Variable that start with Capital letter are constants, BUT constants can change 🤯&lt;/li&gt;
&lt;li&gt;We get a warning when re-initializing the constant, but that is about it.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;015&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I&amp;#39;m a constant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I&amp;#39;m a constant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;016&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upcase!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I&amp;#39;M A CONSTANT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;017&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I&amp;#39;M A CONSTANT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;01&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; defined? &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;constant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;022&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I can change&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(irb):&lt;span style=&#34;color:#666&#34;&gt;22&lt;/span&gt;: &lt;span style=&#34;color:#b8860b&#34;&gt;warning&lt;/span&gt;: already initialized constant &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(irb):&lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt;: &lt;span style=&#34;color:#b8860b&#34;&gt;warning&lt;/span&gt;: previous definition of &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt; was here
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;To make it immutable, call &lt;code&gt;.freeze&lt;/code&gt; method&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;001&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I can change&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I can change&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;002&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;freeze
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;I can change&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#666&#34;&gt;003&lt;/span&gt;:&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;  &lt;span style=&#34;color:#800&#34;&gt;Var&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upcase!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(irb):&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;:in&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;`upcase!&amp;#39;: can&amp;#39;t modify frozen String: &amp;#34;I can change&amp;#34; (FrozenError)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;irb(main):004:0&amp;gt; Var
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b44&#34;&gt;=&amp;gt; &amp;#34;I can change&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Last Updated: Jan 22, 2022. Added details of how splat operator can also construct an array&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I came across this second use &lt;a href=&#34;https://thoughtbot.com/blog/ruby-splat-operator&#34;&gt;here&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Icons in Directory Listing</title>
        <link>https://microblog.desipenguin.com/post/icons-in-dir-listing/</link>
        <pubDate>Thu, 13 Jan 2022 20:21:19 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/icons-in-dir-listing/</guid>
        <description>&lt;p&gt;Would you like to see pretty icons in your terminal for directory list ?&lt;/p&gt;
&lt;p&gt;Then install &lt;code&gt;lsd&lt;/code&gt; from &lt;a href=&#34;https://github.com/Peltoche/lsd&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check this pretty screenshot of &lt;code&gt;lsd --tree&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://microblog.desipenguin.com/image/icons-dir-listing.png&#34; alt=&#34;lsd&#34;&gt;&lt;/p&gt;
&lt;p&gt;In case you are wondering, I&amp;rsquo;m using &lt;a href=&#34;https://github.com/eendroroy/alacritty-theme/blob/master/themes/nord.yaml&#34;&gt;nord&lt;/a&gt; theme with Alacritty&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Learning Ruby: Syntax (Part 2)</title>
        <link>https://microblog.desipenguin.com/post/ruby-syntax-2/</link>
        <pubDate>Thu, 13 Jan 2022 09:56:32 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ruby-syntax-2/</guid>
        <description>&lt;p&gt;Learning continues &amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;idiomatic(?) ruby loops use &lt;code&gt;each&lt;/code&gt; like :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;counter&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;iteration &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;#{&lt;/span&gt;counter&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Although python like loop also work&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; counter &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a2f&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;iteration &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;#{&lt;/span&gt;counter&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;array.each_with_index&lt;/code&gt; is like python&amp;rsquo;s &lt;code&gt;enumerate&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ruby seems to have multiple ways to do the same thing, as opposed to Python&amp;rsquo;s&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;There should be one&amp;ndash; and preferably only one &amp;ndash;obvious way to do it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;e.g. &lt;code&gt;a.map do .. end&lt;/code&gt;, &lt;code&gt;a.map { |el| e.something }&lt;/code&gt; and &lt;code&gt;a.map(&amp;amp;:method)&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ cat test.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;array&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;1,2,3,4,5&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;sqr&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; array.map &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;do&lt;/span&gt; |item|
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    item * item
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;end
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts sqr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;Foo&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;bAr&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;baZ&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts a.map &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt; |s| s.downcase &lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts a.map&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&amp;amp;:upcase&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mandar in /tmp via 💎 v3.1.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;➜ ruby test.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;foo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bar
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;baz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FOO
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BAR
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BAZ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Python did not have &lt;code&gt;case&lt;/code&gt; statement, till 3.10 introduced &lt;a href=&#34;https://www.python.org/dev/peps/pep-0636/&#34;&gt;Structural Pattern Matching&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exception handling has different keywords, but parallels exist in Python world&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Python&lt;/th&gt;
          &lt;th&gt;Ruby&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;try&lt;/td&gt;
          &lt;td&gt;begin/end&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;except&lt;/td&gt;
          &lt;td&gt;rescue&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;else&lt;/td&gt;
          &lt;td&gt;else&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ensure&lt;/td&gt;
          &lt;td&gt;finally&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Python requires explicit return, else it returns &lt;code&gt;None&lt;/code&gt; by default. Ruby on the other hand implicitly return the value of the last statement. (This was not a surprise to me since Elixir also does the same.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;yield&lt;/code&gt; is different in Ruby compared to Python. I haven&amp;rsquo;t fully groked Ruby&amp;rsquo;s &lt;code&gt;yield&lt;/code&gt;. It seems like a placeholder, but I could be wrong. Need to dig deeper to understand.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Installing Ruby</title>
        <link>https://microblog.desipenguin.com/post/install-ruby/</link>
        <pubDate>Thu, 13 Jan 2022 09:31:55 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/install-ruby/</guid>
        <description>&lt;p&gt;There are multiple ways to install ruby on your machine.&lt;/p&gt;
&lt;p&gt;Official recommendation is to use your OS&amp;rsquo;s package manager like &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt; or &lt;code&gt;brew&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you are using a version manager, &lt;code&gt;rvm&lt;/code&gt; (Ruby Version Manager) seems to be popular.
But in the past, I started using &lt;code&gt;asdf&lt;/code&gt;, so I&amp;rsquo;ve decided to stick with it.
It is also mentioned (first in the list) on the official &lt;a href=&#34;https://www.ruby-lang.org/en/documentation/installation/#managers&#34;&gt;Installing Ruby&lt;/a&gt; page 😄&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;asdf list all ruby
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;asdf install ruby latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;At the time of this writing &lt;code&gt;3.1.0&lt;/code&gt; is the latest&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It took little over 13 minutes. 😱 I think it could be because this was the first time I installed any Ruby version.&lt;/p&gt;
&lt;p&gt;I would like to believe that subsequent installation will be faster. 🤞&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Before I could use &lt;code&gt;irb&lt;/code&gt; (which is what everyone suggest we do, when learning Ruby. It is REPL for ruby) I had to &lt;code&gt;asdf global ruby 3.1.0&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Without it, I kept getting the following error:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ irb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;No version is &lt;span style=&#34;color:#a2f&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;command&lt;/span&gt; irb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Consider adding one of the following versions in your config file at /Users/mandar/.tool-versions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ruby 3.1.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once done, &lt;code&gt;irb&lt;/code&gt; worked. We are off to the races 😄&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;em&gt;I could have also used &lt;code&gt;asdf local&lt;/code&gt; instead if I wanted different ruby version for different projects&lt;/em&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Learning Ruby: Syntax (Part 1)</title>
        <link>https://microblog.desipenguin.com/post/ruby-syntax-1/</link>
        <pubDate>Wed, 12 Jan 2022 21:26:04 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/ruby-syntax-1/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve meaning to learn Ruby for some time now.&lt;/p&gt;
&lt;p&gt;Especially, when I dabbled from time to time in Elixir, I felt that knowing Ruby may be an advantage (since Elixir syntax similar to Ruby)&lt;/p&gt;
&lt;p&gt;No one learns (I think) Ruby just for the language. They learn it so that they can use Ruby on Rails (RoR as popularly known)
RoR, in case you don&amp;rsquo;t know, is the Web framework. Like Django in Python land.
But there are a lot of web frameworks like Flask, Pyramid, FastAPI to name some.&lt;/p&gt;
&lt;p&gt;I know of &lt;a href=&#34;http://www.sinatrarb.com/&#34;&gt;Sinatra&lt;/a&gt; - I think it is like Flask, but I could be wrong.&lt;/p&gt;
&lt;p&gt;Rails seems to have &lt;a href=&#34;https://guides.rubyonrails.org/getting_started.html&#34;&gt;great documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ruby on the other hand, sends you to third party sources, at least &lt;a href=&#34;http://rubylearning.com/&#34;&gt;one&lt;/a&gt; of them no longer exist or unreachable.&lt;/p&gt;
&lt;p&gt;I started with &lt;a href=&#34;https://learnxinyminutes.com/docs/ruby/&#34;&gt;Learn X in Y minutes&lt;/a&gt;. This is a great place to get familiar with syntax.&lt;/p&gt;
&lt;p&gt;I understand that knowing the syntax is just the first step. Step that must be taken before knowing more.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Coming from Python, here are some of the differences I noticed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python has no concept of &lt;code&gt;Symbols&lt;/code&gt; (In Elixir these are &lt;code&gt;Atoms&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Arithmetic functions are just method invoking a method.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;+(&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;) &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;* &lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; 50&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Luckily, we don&amp;rsquo;t have to always use this awkward method. Normal &lt;code&gt;1+3&lt;/code&gt; also works 😆&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Special Values too are objects&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;nil&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; NilClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; TrueClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; FalseClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%w&lt;/code&gt; seems useful. Less typing - more developer productivity !!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;%w[foo bar baz]&lt;/span&gt; &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; [&amp;#34;foo&amp;#34;, &amp;#34;bar&amp;#34;, &amp;#34;baz&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Array are like Python &lt;code&gt;list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Hashes are like Python dictionary, but slight different syntax&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Hashes are Ruby&amp;#39;s primary dictionary with key/value pairs.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;hash&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;color&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;green&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;number&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;But when using Symbols for keys, python-like syntax can be used&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;hash&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#b8860b&#34;&gt;:defcon&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#b8860b&#34;&gt;:action&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; [:defcon, :action]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;hash&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#b8860b&#34;&gt;defcon&lt;/span&gt;: &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#b8860b&#34;&gt;action&lt;/span&gt;: &lt;span style=&#34;color:#a2f&#34;&gt;true&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys &lt;span style=&#34;color:#080;font-style:italic&#34;&gt;#=&amp;gt; [:defcon, :action]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;more tomorrow &amp;hellip; 💤&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Tmuxinator: Manage complex tmux sessions easily</title>
        <link>https://microblog.desipenguin.com/post/tmuxinator/</link>
        <pubDate>Wed, 12 Jan 2022 11:50:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/tmuxinator/</guid>
        <description>&lt;p&gt;After using &lt;code&gt;tmux&lt;/code&gt; for a while, I realized that whenever I create new session locally, I end up opening same set of panes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One for work project (Sometimes more than one, but usually one)&lt;/li&gt;
&lt;li&gt;One for some kind of blog (I have three Hugo projects at this time)&lt;/li&gt;
&lt;li&gt;One misc. I start this in &lt;code&gt;~&lt;/code&gt;, I use this for running &lt;code&gt;brew&lt;/code&gt; commands or standalone python session, or &lt;code&gt;bin/doom sync&lt;/code&gt; (which I&amp;rsquo;ve been doing from inside doom emacs these days, so the last usecase has gone down)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Turns out &lt;em&gt;I&amp;rsquo;m not the only one&lt;/em&gt;™️ with such use case.&lt;/p&gt;
&lt;p&gt;There is a tool called &lt;code&gt;tmuxinator&lt;/code&gt; (what a 🆒 name)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve created a default profile which starts these three panes when starting a new &lt;code&gt;tmux&lt;/code&gt; session.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tmuxinator&lt;/code&gt; has features to do a lot more.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll explore them slowly and update my &lt;code&gt;tmuxinator&lt;/code&gt; config over the time. (Like everyone else 😄)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Firefox Reader mode in your Terminal</title>
        <link>https://microblog.desipenguin.com/post/readability/</link>
        <pubDate>Mon, 10 Jan 2022 06:41:01 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/readability/</guid>
        <description>&lt;p&gt;As I mentioned in an earlier post, I&amp;rsquo;m trying to move to more text based workflows.&lt;/p&gt;
&lt;p&gt;On that journey, I came across &lt;code&gt;readable&lt;/code&gt; which creates a clean version of a webpage, just like Firefox Reader mode would do. But without Firefox.&lt;/p&gt;
&lt;p&gt;Which means, you can read cleaner website from your terminal (if you want)&lt;/p&gt;
&lt;p&gt;Read &lt;a href=&#34;https://learnings.desipenguin.com/post/readability/&#34;&gt;Firefox Reader mode in your Terminal&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Fuzzy Search in fish with fzf</title>
        <link>https://microblog.desipenguin.com/post/fzf-with-fish/</link>
        <pubDate>Thu, 06 Jan 2022 15:40:29 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/fzf-with-fish/</guid>
        <description>&lt;p&gt;I had installed &lt;code&gt;fzf&lt;/code&gt; some time ago. But default key &lt;code&gt;**&lt;/code&gt; for invoking &lt;code&gt;fzf&lt;/code&gt; did not work with fzf.&lt;/p&gt;
&lt;p&gt;Upon searching, I came across couple of options. Of those, I chose the &lt;a href=&#34;https://github.com/PatrickF1/fzf.fish&#34;&gt;one&lt;/a&gt; with active development.&lt;/p&gt;
&lt;p&gt;As of this writing, the last commit was 11 days ago. Very active, I would say. 😄&lt;/p&gt;
&lt;p&gt;Installation instruction said  &lt;code&gt;fisher install PatrickF1/fzf.fish&lt;/code&gt; but when tried, I got an error:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher: unknown flag or &lt;span style=&#34;color:#a2f&#34;&gt;command&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;install&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;🤔&lt;/p&gt;
&lt;p&gt;I tried &lt;code&gt;fisher add&lt;/code&gt; which seemed like closest option to install.&lt;/p&gt;
&lt;p&gt;That didn&amp;rsquo;t work either. 😞&lt;/p&gt;
&lt;p&gt;I got&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher: cannot add github.com/PatrickF1/fzf.fish -- is this a valid package?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Turns out someone else also had same error. The suggestion was to upgrade &lt;code&gt;fisher&lt;/code&gt; itself.&lt;/p&gt;
&lt;p&gt;fisher upgrade also had a minor hiccup. I had to manually remove the old files installed by fisher.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Now that &lt;code&gt;fzf&lt;/code&gt; was ready, I&amp;rsquo;m exploring all the cool things it can do.&lt;/p&gt;
&lt;p&gt;For starters, interactive history via &lt;code&gt;Ctrl + R&lt;/code&gt; is amazing.
It is better than default &lt;code&gt;Ctrl + R&lt;/code&gt; in bash (Reverse history search) or even what fish provides out of the box. (Auto complete commands based on history)&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>text mode browsing in Emacs</title>
        <link>https://microblog.desipenguin.com/post/eww-browser-in-emacs/</link>
        <pubDate>Wed, 05 Jan 2022 19:56:56 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/eww-browser-in-emacs/</guid>
        <description>&lt;p&gt;I&amp;rsquo;m leaning more and more towards text based workflow.&lt;/p&gt;
&lt;p&gt;Earlier I enabled &lt;code&gt;twittering-mode&lt;/code&gt; in Doom Emacs, and tweeted from Emacs. How 🆒 is that.&lt;/p&gt;
&lt;p&gt;But that is when I realized that twitter has lots of URLs. If I visit a URL from my Twitter feed, it opens up in external browser by default.&lt;/p&gt;
&lt;p&gt;I have two problems with that.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;My flow gets disturbed.&lt;/li&gt;
&lt;li&gt;The browser already has gazillion links open. Once I go there, I get distracted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Opening links within emacs addresses both these (I think. Too early to comment)&lt;/p&gt;
&lt;p&gt;Since &lt;code&gt;eww&lt;/code&gt; is already included in Emacs 24.4 onwards, no separate installation required.&lt;/p&gt;
&lt;p&gt;I added the following to my &lt;code&gt;config.el&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;browse-url-browser-function&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;&amp;#39;eww-browse-url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;🎉&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Installed `most` pager on macOS</title>
        <link>https://microblog.desipenguin.com/post/most-pager/</link>
        <pubDate>Wed, 05 Jan 2022 17:28:16 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/most-pager/</guid>
        <description>&lt;p&gt;Today while I was browsing thru &lt;a href=&#34;https://leanpub.com/the-tao-of-tmux/read#leanpub-auto-read-the-tmux-manual-in-style&#34;&gt;The Tao of tmux&lt;/a&gt; - I came across a better pager called &lt;code&gt;most&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I think it is a play on default pagers called &lt;code&gt;less&lt;/code&gt; and &lt;code&gt;more&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, the official website almost makes it impossible to find stuff about it.&lt;/p&gt;
&lt;p&gt;Documentation is non existent.&lt;/p&gt;
&lt;p&gt;I found elsewhere that most linux distro make it available via their package manager.&lt;/p&gt;
&lt;p&gt;I did not find any mention of macOS though.&lt;/p&gt;
&lt;p&gt;Installing from source requires something called &lt;code&gt;S-lang&lt;/code&gt; interpreter. In any case, I avoid installing tools by compiling them locally.&lt;/p&gt;
&lt;p&gt;I prefer and trust the package managers.&lt;/p&gt;
&lt;p&gt;Just on a whim, I tried &lt;code&gt;brew info most&lt;/code&gt;, turns out it &lt;em&gt;is&lt;/em&gt; available. Installing via &lt;code&gt;brew install most&lt;/code&gt; was a no-op.&lt;/p&gt;
&lt;p&gt;I set it as universal pager in &lt;code&gt;fish&lt;/code&gt; via &lt;code&gt;set --universal PAGER most&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For now, I have tested it only with &lt;code&gt;man&lt;/code&gt;. The man pages look nice with syntax highlighting.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Hugo Modules</title>
        <link>https://microblog.desipenguin.com/post/hugo-modules/</link>
        <pubDate>Tue, 04 Jan 2022 17:14:02 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/hugo-modules/</guid>
        <description>&lt;p&gt;Today I spent some more time modifying the &lt;a href=&#34;https://github.com/mandarvaze/indiefeed&#34;&gt;IndieFeed theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As I mentioned &lt;a href=&#34;https://microblog.desipenguin.com/post/deployed-microblog/&#34;&gt;earlier&lt;/a&gt;, I started using hugo modules instead of &lt;code&gt;git submodule&lt;/code&gt; from the beginning. One of the downside of it was I could not preview my changes without pushing the changes to github first.&lt;/p&gt;
&lt;p&gt;Sometimes that might be OK, most times it is not.&lt;/p&gt;
&lt;p&gt;How do theme developers work in such scenario. Turns out there is a hack just for that.&lt;/p&gt;
&lt;p&gt;So much so that documentation mention &lt;em&gt;for Local development&lt;/em&gt; at multiple places 😄&lt;/p&gt;
&lt;p&gt;The directive is &lt;code&gt;replace&lt;/code&gt;.  Read the documentation &lt;a href=&#34;https://gohugo.io/hugo-modules/use-modules/#make-and-test-changes-in-a-module&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I did this in &lt;code&gt;go.mod&lt;/code&gt; of &lt;em&gt;this&lt;/em&gt; project. But &lt;code&gt;hugo server&lt;/code&gt; kept complaining that &lt;code&gt;go.mod&lt;/code&gt; was missing from my local folder where I work on the theme. (It is not under &lt;code&gt;themes&lt;/code&gt; folder of this project)&lt;/p&gt;
&lt;p&gt;Turns out I need to do the following in &lt;strong&gt;my theme directory&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hugo mod init github.com/mandarvaze/indiefeed&lt;/code&gt; which created &lt;code&gt;go.mod&lt;/code&gt; there. Now &lt;code&gt;hugo server&lt;/code&gt; had no complaints ✌️&lt;/p&gt;
&lt;p&gt;I also removed &lt;code&gt;theme&lt;/code&gt; entry from my &lt;code&gt;config.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a00000&#34;&gt;-theme: [&amp;#34;github.com/mandarvaze/indiefeed&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a00000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;+module:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;+  imports:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;+  - path: github.com/mandarvaze/indiefeed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These steps documented &lt;a href=&#34;https://gohugo.io/hugo-modules/use-modules/#initialize-a-new-module&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://gohugo.io/hugo-modules/use-modules/#use-a-module-for-a-theme&#34;&gt;here&lt;/a&gt; respectively.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Dooble Browser</title>
        <link>https://microblog.desipenguin.com/post/dooble-browser/</link>
        <pubDate>Sun, 02 Jan 2022 13:12:34 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dooble-browser/</guid>
        <description>&lt;p&gt;I came across Dooble browser via one of the Hacker news post.&lt;/p&gt;
&lt;p&gt;The browser use Qt library and thus biased towards Linux. Or so I thought.
There is a pre-built &lt;code&gt;dmg&lt;/code&gt; file for macOS.&lt;/p&gt;
&lt;p&gt;It worked well in short test-run I did.&lt;/p&gt;
&lt;p&gt;I wish there was a way to set it as a default browser, so I could have tested it more thoroughly.&lt;/p&gt;
&lt;p&gt;FWIW, it did not register itself as a browser with macOS &amp;ndash; which seems OS specific requirement.&lt;/p&gt;
&lt;p&gt;Without setting it as a default browser, I need to open the links explicitly/manually in this new browser, which I am unlikely to remember during the normal workday.&lt;/p&gt;
&lt;p&gt;One of the thing that did not work in this browser is automatic detection of dark mode for this site.&lt;/p&gt;
&lt;p&gt;In Firefox, this site always opens in dark mode because I have set Firefox to always use Dark mode. In Auto mode it switches to Dark mode in the evenings and nights. That did not happen here.&lt;/p&gt;
&lt;p&gt;But it is not a dealbreaker.&lt;/p&gt;
&lt;p&gt;Yet another thing that we have come to expect is pre-installed search engines. Dooble comes with some, even the ones I had never heard of. But they are not enabled by default.
I manually added Google and DDG.&lt;/p&gt;
&lt;p&gt;But I &lt;a href=&#34;https://github.com/textbrowser/dooble/issues/81&#34;&gt;can&amp;rsquo;t search directly from address bar&lt;/a&gt;. It felt silly. In 2022 who goes to the search engine site to search 😄&lt;/p&gt;
&lt;p&gt;The way the integration works is user can highlight a text, and search for it using right click menu. Other browsers also have this functionality, so it is not novel.&lt;/p&gt;
&lt;p&gt;You find more from their &lt;a href=&#34;https://github.com/textbrowser/dooble&#34;&gt;github page&lt;/a&gt; including downloading a release to try it for yourself.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>🌱 Automate Dendron Publishing</title>
        <link>https://microblog.desipenguin.com/post/automate-dendron-publishing/</link>
        <pubDate>Thu, 23 Dec 2021 18:38:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/automate-dendron-publishing/</guid>
        <description>&lt;p&gt;I have been using Dendron for some time now as a PKM tool.
I started when it was using 11ty to generate site out of the notes.&lt;/p&gt;
&lt;p&gt;It would create the site in &lt;code&gt;docs&lt;/code&gt; folder, using &lt;code&gt;Dendron: Site Build&lt;/code&gt; in VSCode
I had mapped the &lt;code&gt;docs&lt;/code&gt; folder to a git repo.&lt;/p&gt;
&lt;p&gt;I would push ready-made site to git, and netlify deploy was a no-op&lt;/p&gt;
&lt;!-- more --&gt;
&lt;div class=&#34;mermaid&#34;&gt;

%%{init: {&#39;themeVariables&#39;:{&#39;lineColor&#39;: &#39;lightblue&#39;, &#39;arrowheadColor&#39;: &#39;lightblue&#39;}}}%%
graph LR;
    A{ Write Content in markdown }
    A --&gt;| git push | B[ source git repo ]
    A --&gt;| Dendron: Site Build | C[ Site in `docs` folder ]
    C --&gt;| git push | D[ netlify deploy ]

&lt;/div&gt;

&lt;p&gt;Then recently they switched to &lt;code&gt;next.js&lt;/code&gt; and publishing changed a lot. (Personally I liked the old look and feel, but that is besides the point)&lt;/p&gt;
&lt;p&gt;Now the &lt;code&gt;.next/out&lt;/code&gt; would contain the Site.&lt;/p&gt;
&lt;p&gt;It would have been OK, changing from &lt;code&gt;docs&lt;/code&gt; to &lt;code&gt;.next/out&lt;/code&gt; is no big deal, but with next-based publishing, &lt;code&gt;out&lt;/code&gt; folder gets removed on each build. 😱&lt;/p&gt;
&lt;p&gt;I had tough time figuring out how to publish (I did some hacks, but not really proud of those 😅)&lt;/p&gt;
&lt;p&gt;Then I came across a blog post on Dendron&amp;rsquo;s discord channel.&lt;/p&gt;
&lt;p&gt;Essentially they figured a way around this.&lt;/p&gt;
&lt;p&gt;As a bonus, I don&amp;rsquo;t have to maintain two git repos like before (Remember, I had a git repo just for the generated output)&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/dendronhq/template.publish.netlify/blob/main/dendron-publish-site.sh&#34;&gt;steps&lt;/a&gt; from the script are pretty straightforward.
Yet having such simple script and asking netlify to use it as a build command (and use &lt;code&gt;docs&lt;/code&gt; folder to publish) does make the workflow more efficient.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;If you have not, please check my &lt;a href=&#34;https://pkm.desipenguin.com&#34;&gt;Digital Garden&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Espanso 2.x (Alpha)</title>
        <link>https://microblog.desipenguin.com/post/espanso-2/</link>
        <pubDate>Wed, 22 Dec 2021 17:09:52 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/espanso-2/</guid>
        <description>&lt;p&gt;While reading the documentation on Espanso&amp;rsquo;s main site, I noticed a Search bar feature.&lt;/p&gt;
&lt;p&gt;To be sure, after some time, one is unlikely to remember all the shortcuts one has added, along with ones that came with packages.&lt;/p&gt;
&lt;p&gt;So search bar is a welcome feature. But shortcut mentioned on the site &lt;kbd&gt;Alt+Space&lt;/kbd&gt; did not work.
I was not surprised, because this key combination triggers Raycast on my machine.&lt;/p&gt;
&lt;p&gt;So I went looking for way to change the hotkey, and reached an issue which mentioned that search bar is a feature of &lt;code&gt;2.x Alpha&lt;/code&gt; 💡&lt;/p&gt;
&lt;p&gt;I quickly removed the old version and installed the new one, which happens to be normal macOS app (Earlier I had written that I did not realize it is a Terminal app, but that was for Legacy version)&lt;/p&gt;
&lt;p&gt;Starting the app for the first time, pops up a nice wizard that walks you thru all the steps.&lt;/p&gt;
&lt;p&gt;The wizard even migrated my old configuration as well.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;espanso package list&lt;/code&gt; now showed the packages from legacy version, as &lt;code&gt;(legacy)&lt;/code&gt;. I uninstalled and reinstalled the newer versions of both the packages &amp;ndash; just to be safe.&lt;/p&gt;
&lt;p&gt;The documentation for this alpha version is still in-progress. But I found both the documentation and the app stable. 👍&lt;/p&gt;
&lt;p&gt;As I added a &lt;code&gt;:+1:&lt;/code&gt; above, a popup showed up to resolve a possible conflict. (There are two versions/shades of the thumbs up emoji)
How 😎 is that ?&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Espanso (Legacy)</title>
        <link>https://microblog.desipenguin.com/post/espanso/</link>
        <pubDate>Tue, 21 Dec 2021 21:29:17 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/espanso/</guid>
        <description>&lt;p&gt;Just as I was getting to know espanso, I came across a brand-new version of espanso that is way better that this (0.7.6) version, now called Legacy version.
Read about the new version &lt;a href=&#34;https://microblog.desipenguin.com/post/espanso-2/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have left the following as is, for posterity&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Long time ago, when I used Windows (provided by my employer), I used to use AutoHotkey.
Since then, I have not used Windows and never used text expander again.&lt;/p&gt;
&lt;p&gt;Then today, I came across &lt;a href=&#34;https://espanso.org&#34;&gt;espanso&lt;/a&gt; &amp;ndash; open source text expander and more &amp;ndash; in logseq discard channel.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Following does not apply with 2.0.0-alpha version&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;At first, it was unclear to me that this is a terminal app. Mainly because I installed via Cask, which I&amp;rsquo;ve done only for UI apps.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Looking at espanso &amp;ndash;help I was unclear what to do next, so I tried to start the daemon, which failed. There were no logs via espanso log either.&lt;/del&gt;
&lt;del&gt;I had seen register command, but did not run because I thought it was register-the-product-by-providing-your-info 😆&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Since nothing else worked, I decided to try it anyway. Turns out it registers the daemon with OS.&lt;/del&gt;
&lt;del&gt;I got the permission dialog from the OS. I also got &amp;ldquo;This program is trying to control Desktop programmatically&amp;rdquo; prompt &amp;ndash; which I allowed.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;After which espanso start worked 😄&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;To be fair, this is already documented, I just never read the documentation.&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;With a tool like this, one does not know where to start. Luckily, espanso comes with packages that one can install to get started with some required tasks.&lt;/p&gt;
&lt;p&gt;The packages I installed so far are &lt;code&gt;misspell-en&lt;/code&gt; and &lt;code&gt;all-emojis&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I also created my first abbreviation 🎉 (I added &amp;lt;- this emoji using &lt;code&gt;:tada:&lt;/code&gt; 😄 &amp;ndash; which comes with &lt;code&gt;all-emojis&lt;/code&gt; package)&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Color Scheme Media Query</title>
        <link>https://microblog.desipenguin.com/post/color-scheme-media-query/</link>
        <pubDate>Mon, 20 Dec 2021 19:34:19 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/color-scheme-media-query/</guid>
        <description>&lt;p&gt;It surprised me at first to notice that this site looks different based on the time of the day.
Upon debugging (aka using Browser Developer tools) I realized that the CSS has media query for &lt;code&gt;prefer-color-theme&lt;/code&gt;
Learn more &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme&#34;&gt;here&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;p&gt;I made some minor changes to the theme, but I could only test one variant based on the time of the day.&lt;/p&gt;
&lt;p&gt;That when I remembered that I had set &lt;code&gt;system auto&lt;/code&gt; theme for firefox, which enabled dark mode during the evening/night.&lt;/p&gt;
&lt;p&gt;So for testing, I enabled the &lt;code&gt;Light&lt;/code&gt; theme, and was able to test my changes to the light version of the theme.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Dynalist to Logseq</title>
        <link>https://microblog.desipenguin.com/post/dynalist-to-logseq/</link>
        <pubDate>Sun, 19 Dec 2021 17:12:17 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/dynalist-to-logseq/</guid>
        <description>&lt;p&gt;Almost a decade ago, I came across Workflowy.&lt;/p&gt;
&lt;p&gt;It is a simple outliner program. Think of a simple white paper of unlimited length, and digital.&lt;/p&gt;
&lt;p&gt;That is all it was. No other frills.&lt;/p&gt;
&lt;p&gt;One of its shortcomings was no mobile client. One could hack to get it working on mobile, but there was no app.
Then I came across Dynalist.&lt;/p&gt;
&lt;p&gt;I used it for a long time. I have it installed on my mobile even today.&lt;/p&gt;
&lt;p&gt;As with every app, the data is in the cloud.&lt;/p&gt;
&lt;p&gt;I have been always wary of small services that may one day disappear. Bitten once, twice shy. (Anyone remember Posterous ?)&lt;/p&gt;
&lt;p&gt;Logseq reminds me of Dynalist. But first and formost, it is local-first tool. All my notes are always on my machine.&lt;/p&gt;
&lt;p&gt;I could back it up the way I see fit. Most obvious would be git.
One of the YouTube video mentions github integration, that auto syncs the contents with github. I&amp;rsquo;ll need to check that later.&lt;/p&gt;
&lt;p&gt;This is a long way to say, I&amp;rsquo;ve started migrating my notes from Dynalist to Logseq.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Logseq</title>
        <link>https://microblog.desipenguin.com/post/logseq/</link>
        <pubDate>Sat, 18 Dec 2021 22:03:10 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/logseq/</guid>
        <description>&lt;p&gt;I came across &lt;a href=&#34;https://github.com/logseq/logseq&#34;&gt;logseq&lt;/a&gt; long ago, of all the places on Dendron&amp;rsquo;s discord channel.
It has other-projects channel just for this purpose.&lt;/p&gt;
&lt;p&gt;Logseq was still early back then (compared to Dendron at least).&lt;/p&gt;
&lt;p&gt;I tried, but did not like it. Plus Dendron was much better.&lt;/p&gt;
&lt;p&gt;Today, I came across Logseq again, when I was perusing my colleague&amp;rsquo;s twitter feed and noticed that he is using it.
So I checked it again. They now have a Desktop app, plugins and decent community.&lt;/p&gt;
&lt;p&gt;So I installed the Desktop app.&lt;/p&gt;
&lt;p&gt;What I did not like back then was the dark green color theme. It has not changed. But there are theme support (created by the community)
So I might try one that I find better.&lt;/p&gt;
&lt;p&gt;They also have light theme, which is white. Better than dark green. For now, that is what I am using.&lt;/p&gt;
&lt;p&gt;I plan to use it for their journal feature. If I like that, I might continue it that way.&lt;/p&gt;
&lt;p&gt;I do not plan to use it for knowledge management. At least not now anyway.&lt;/p&gt;
&lt;p&gt;Interestingly, I came across a YouTube video where the person said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;m going to use Logseq for Technical notes, and keep other personal stuff in obsidian&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Another (potential) benefit of Logseq is that is supports Org-mode, and there is a plugin for logseq from within Emacs. (It is too early for me understand that what means 😄)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you have not yet visited my &lt;a href=&#34;https://pkm.desipenguin.com&#34;&gt;PKM&lt;/a&gt; powered by Dendron, please do.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Deployed Microblog</title>
        <link>https://microblog.desipenguin.com/post/deployed-microblog/</link>
        <pubDate>Fri, 17 Dec 2021 11:43:17 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/deployed-microblog/</guid>
        <description>&lt;p&gt;Finally, deployed &lt;strong&gt;this&lt;/strong&gt; site.&lt;/p&gt;
&lt;p&gt;It took a while because, at first I was &lt;a href=&#34;https://microblog.desipenguin.com/post/theme-hacking/&#34;&gt;modifying&lt;/a&gt; the theme to my liking.&lt;/p&gt;
&lt;p&gt;As most theme README state, I started with &lt;code&gt;git submodule&lt;/code&gt;, but it gets confusing. That is when I came across &lt;code&gt;hugo modules&lt;/code&gt; in &lt;a href=&#34;https://chrisshort.net/from-git-submodule-to-hugo-modules-using-netlify/&#34;&gt;this&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;But it did not work for me for multiple reasons.&lt;/p&gt;
&lt;p&gt;First, I did not understand the difference between specifying theme from repo Vs local, and &lt;code&gt;hugo mod init&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The docs keep referring to &lt;em&gt;my repo&lt;/em&gt;, which means the repo for &lt;strong&gt;this&lt;/strong&gt; site, but I confused it with theme repo.&lt;/p&gt;
&lt;p&gt;It some trial and errors. But finally it was really easy. &lt;a href=&#34;https://github.com/theNewDynamic/gohugo-theme-ananke#installation&#34;&gt;These&lt;/a&gt; instructions were all I needed.&lt;/p&gt;
&lt;p&gt;Deploying to netlify was no-op. I have about 5 sites on netlify. 😄&lt;/p&gt;
&lt;p&gt;At first the CSS et al did not work. That is because the &lt;code&gt;baseURL&lt;/code&gt; was example.com 😆
Changing that, setting custom domain on netlify (and https certificate) was all it took to get the site up it all its glory.&lt;/p&gt;
&lt;p&gt;I do want to tweak the theme more.&lt;/p&gt;
&lt;p&gt;I also want to post more.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Appflowy</title>
        <link>https://microblog.desipenguin.com/post/appflowy/</link>
        <pubDate>Thu, 16 Dec 2021 19:50:20 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/appflowy/</guid>
        <description>&lt;p&gt;Came across &lt;a href=&#34;https://www.appflowy.io/&#34;&gt;appflowy&lt;/a&gt; on twitter.
It is an open source alternative to Notion.&lt;/p&gt;
&lt;p&gt;I have never used Notion, but everyone and their grandma rave about it.&lt;/p&gt;
&lt;p&gt;Why have I not used Notion so far ? Because I did not want to sign up for yet-another SaaS that I know I won&amp;rsquo;t use.&lt;/p&gt;
&lt;p&gt;I use Dendron (these days) for my PKM. I use it because it is &amp;ldquo;local first&amp;rdquo; - meaning I always have access to my data.&lt;/p&gt;
&lt;p&gt;One of the reason I created this microblog is for the same reason. Otherwise, Polywork seems nice for such &amp;ldquo;What am I doing right now&amp;rdquo; notes.&lt;/p&gt;
&lt;p&gt;What if Polywork goes away one day ? Once bitten twice shy.&lt;/p&gt;
&lt;p&gt;Back to Appflowy. Their website does not have enough information whether their Desktop app is UI for remote Saas.
But I would be happy if it is local-first (or local-only) Notion-clone 🤞&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Update : Tried it by &lt;code&gt;brew install appflowy&lt;/code&gt;. It is just their second release, and it shows.
Basic editing works (I assumed. Did not try)
There is a Share button, which I expected will allow sharing in different formats.
It does. For now there are two options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy link : Says &lt;code&gt;Work in Progress&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Markdown : No error, but does not work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have uninstalled it. I might come back again later when it has matured.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Edit : Appflowy should look at &lt;a href=&#34;https://microblog.desipenguin.com/post/logseq/&#34;&gt;Logseq&lt;/a&gt;.
Since I have never used Notion, I might call Logseq a Open source alternative to Notion, that is local-first&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Back to DDG</title>
        <link>https://microblog.desipenguin.com/post/back-to-ddg/</link>
        <pubDate>Thu, 16 Dec 2021 16:27:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/back-to-ddg/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://twitter.com/mandarvaze/status/1466204219434700803&#34;&gt;Few days ago&lt;/a&gt;, I came across you.com search engine.
I tried it for solid 15 days. There was no set plan for &amp;ldquo;trial&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It presents the result in card like fashion, which I was OK with. But I think rendering take a bit longer. So much so that I noticed the delay.&lt;/p&gt;
&lt;p&gt;Switching back to trusty DDG 😇&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Hacking IndieFeed Theme</title>
        <link>https://microblog.desipenguin.com/post/theme-hacking/</link>
        <pubDate>Wed, 15 Dec 2021 19:52:09 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/theme-hacking/</guid>
        <description>&lt;p&gt;I started with &lt;a href=&#34;https://github.com/dianoetic/indiefeed&#34;&gt;indiefeed&lt;/a&gt; theme. While it is possible to make visual changes by creating &lt;code&gt;css/style.css&lt;/code&gt; (as explained in the &lt;code&gt;README&lt;/code&gt;) I&amp;rsquo;m thinking of making other changes as well.&lt;/p&gt;
&lt;p&gt;So I started by forking the theme. So far my changes are only in &lt;code&gt;css/style.css&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a frontend developer. But I know enough HTML/CSS to be dangerous 😆&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Nvim</title>
        <link>https://microblog.desipenguin.com/post/nvim/</link>
        <pubDate>Wed, 15 Dec 2021 17:13:17 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/nvim/</guid>
        <description>&lt;p&gt;I have been using &lt;code&gt;nvim&lt;/code&gt; for a while. Initially with VS Code, and then as replacement for vi/vim from the terminal.&lt;/p&gt;
&lt;p&gt;Since I use Doom emacs as may primary editor, I use &lt;code&gt;nvim&lt;/code&gt; only for occasional quick edits here and there.&lt;/p&gt;
&lt;p&gt;So I had not paid attention, but &lt;code&gt;nvim&lt;/code&gt; the ecosystem is getting better.&lt;/p&gt;
&lt;p&gt;TIL that there are two ways to configure &lt;code&gt;nvim&lt;/code&gt;. Via &lt;code&gt;VimScript&lt;/code&gt; and &lt;code&gt;Lua&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Need to look into each and decide which one to use.&lt;/p&gt;
&lt;p&gt;I also did not know there were multiple package managers for &lt;code&gt;nvim&lt;/code&gt;.
Decided on &lt;code&gt;VimPlug&lt;/code&gt; without too much research 🤞&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Integrated terminal in Emacs</title>
        <link>https://microblog.desipenguin.com/post/emacs-vterm/</link>
        <pubDate>Tue, 07 Dec 2021 14:02:12 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/emacs-vterm/</guid>
        <description>&lt;p&gt;I spend most of my time in Emacs and Terminal. I make code changes in emacs and switch to terminal to run the tests.
It would be nice to do that without switching between the two.&lt;/p&gt;
&lt;p&gt;In the past, I had tried &lt;code&gt;shell-mode&lt;/code&gt; and &lt;code&gt;inferior shell&lt;/code&gt; (python) for this, but it didn&amp;rsquo;t work, till I found &lt;code&gt;vterm&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://learnings.desipenguin.com/post/emacs-vterm/&#34;&gt;How to use Emacs as an IDE with Integrated Terminal&lt;/a&gt; (Instructions for Doom Emacs, but should work for other configurations as well)&lt;/p&gt;</description>
      </item>
      
    
      
      <item>
        <title>Install LetsEncrypt certificate</title>
        <link>https://microblog.desipenguin.com/post/install-ssl-cert/</link>
        <pubDate>Sat, 24 Jul 2021 17:00:18 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/install-ssl-cert/</guid>
        <description>&lt;p&gt;Today I installed LetsEncrypt certificate on one of the production server.&lt;/p&gt;
&lt;p&gt;I can not believe it is so simple to secure a website running on an Ubuntu server&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install certbot python-certbot-nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo certbot --nginx -d mydomain.com -d www.mydomain.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It even configures nginx (or apache) server for you.&lt;/p&gt;
&lt;p&gt;To manually renew run the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;certbot renew --quiet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But you don&amp;rsquo;t have to, cause &lt;code&gt;certbot&lt;/code&gt; is so awesome that it automatically adds an entry into crontab so that certbot runs twice daily. There is an entry under &lt;code&gt;/etc/cron.d/certbot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Run the following to check the status of renewal service :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl status certbot.timer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the automated renewal process ever fails, Let’s Encrypt will send a message to the email you specified, warning you when your certificate is about to expire.&lt;/p&gt;&lt;/blockquote&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Configure `rsyslog` </title>
        <link>https://microblog.desipenguin.com/post/rsyslog/</link>
        <pubDate>Wed, 14 Jul 2021 17:07:13 +0530</pubDate>
        <author>Mandar Vaze</author>
        <guid>https://microblog.desipenguin.com/post/rsyslog/</guid>
        <description>&lt;p&gt;Today, I configured &lt;code&gt;rsyslog&lt;/code&gt; on Ubuntu server to collect logs from remote application server.&lt;/p&gt;
&lt;p&gt;syslog using UDP seems straight forward, but I wanted to set up using TCP (TCP being more reliable and all)&lt;/p&gt;
&lt;p&gt;At first, it did not work because I needed to tell &lt;code&gt;SysLogHandler&lt;/code&gt; that we are using TCP using &lt;code&gt;SOCK_STREAM&lt;/code&gt; as optional param. (Default is UDP)
So in a standalone test script, remote logging worked.&lt;/p&gt;
&lt;p&gt;Turns out because of how TCP works, the logs are not flushed to the remote server till the application server closes the socket connection.&lt;/p&gt;
&lt;p&gt;Considering application server works 24x7, it will not close socket, and thus it appears as if logs are not reaching the remote server.&lt;/p&gt;
&lt;p&gt;So settled back on UDP (full circle?)&lt;/p&gt;
&lt;p&gt;But learned things in the process. (There may be a way to use TCP and flush the log immediately, but for now moving on)&lt;/p&gt;
</description>
      </item>
      
    
      
    
  </channel>
</rss>
