<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Blog</title><link>https://dhancodes.github.io/</link><description>Blog</description><item><title>A update on my markdown workflow</title><link>https://dhancodes.github.io/blog/a-update-on-my-markdown-workflow/</link><guid>https://dhancodes.github.io/blog/a-update-on-my-markdown-workflow/</guid><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;Markdown as a presentation tool, with minor changes in your workflow.&lt;/p&gt;
&lt;p&gt;I write almost everything in Markdown now , notes, slides, this blog. Not
because it&amp;rsquo;s fashionable, but because it gets out of the way. Plain text,
version-controllable, editable in any editor, and it outlives whatever app was
trendy when you wrote it. The one thing that used to send me back to LaTeX or
PowerPoint was producing a nicely typeset PDF or a slide deck at the end. Turns
out you don&amp;rsquo;t need to leave Markdown for that either ,
&lt;a href="https://pandoc.org"&gt;Pandoc&lt;/a&gt; handles both.&lt;/p&gt;
&lt;h2 id="markdown-to-pdf"&gt;Markdown to PDF&lt;/h2&gt;
&lt;p&gt;Pandoc converts a Markdown file straight into a properly typeset PDF, using
LaTeX as the engine under the hood without you having to write any LaTeX
yourself:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pandoc notes.md --pdf-engine&lt;span class="o"&gt;=&lt;/span&gt;xelatex &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -V geometry:&lt;span class="s2"&gt;&amp;#34;a4paper,margin=25mm&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -V &lt;span class="nv"&gt;mainfont&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TeX Gyre Heros&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o notes.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A few flags worth knowing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pdf-engine=xelatex&lt;/code&gt;: lets you use system fonts (&lt;code&gt;mainfont&lt;/code&gt;, &lt;code&gt;monofont&lt;/code&gt;)
instead of being stuck with Computer Modern.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-V geometry:...&lt;/code&gt;: page size and margins, same syntax as LaTeX&amp;rsquo;s
&lt;code&gt;geometry&lt;/code&gt; package.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--highlight-style=kate&lt;/code&gt;: nicer syntax highlighting for code blocks than
the default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-V linkcolor:blue&lt;/code&gt;: makes links visibly blue instead of the default
boxed/black links in the PDF.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result reads like a proper typeset document , headers, tables, code
blocks, footnotes, citations if you use them , from a file you could just as
easily read as plain text.&lt;/p&gt;
&lt;h2 id="markdown-to-slides"&gt;Markdown to slides&lt;/h2&gt;
&lt;p&gt;The same file (or a slightly restructured one, split by &lt;code&gt;#&lt;/code&gt;/&lt;code&gt;##&lt;/code&gt; headers
into slides) can become a Beamer presentation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pandoc slides.md -t beamer -V &lt;span class="nv"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;metropolis -o slides.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Metropolis is a clean, modern Beamer theme , no clip art, no gradients, just
readable slides. This has mostly replaced Keynote/PowerPoint for me for
technical talks: I outline the talk as headers and bullet points, and Pandoc
does the layout.&lt;/p&gt;
&lt;p&gt;Beamer-specific options (theme, progress bar, slide numbering) go in the
YAML frontmatter of &lt;code&gt;slides.md&lt;/code&gt; itself, so &lt;code&gt;slides.md&lt;/code&gt; is fully
self-contained and doesn&amp;rsquo;t need any flags beyond &lt;code&gt;-t beamer&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;author:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;date: \today
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;colortheme: dove
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;themeoptions:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; block=fill
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; numbering=fraction
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; progressbar=frametitle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# This is a sample heading for slides
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each top-level (or second-level, depending on &lt;code&gt;--slide-level&lt;/code&gt;) header
becomes a new slide, so the rest of the file is just headers and bullets
under them.&lt;/p&gt;
&lt;h2 id="the-vim-bindings-extra"&gt;The vim bindings (extra)&lt;/h2&gt;
&lt;p&gt;Since I&amp;rsquo;m always inside vim/neovim when writing Markdown, I wired both of
these up as leader-key shortcuts so I never have to leave the editor or
retype the command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;FileType&lt;/span&gt; &lt;span class="nx"&gt;markdown&lt;/span&gt; &lt;span class="nx"&gt;nnoremap&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;leader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; :&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pandoc&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;%&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;xelatex&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;linkcolor&lt;/span&gt;:&lt;span class="nx"&gt;blue&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;a4paper,margin=25mm&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;fontsize&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;pt &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;mainfont&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TeX Gyre Heros&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;monofont&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Latin Modern Mono&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;&lt;span class="k"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;kate&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;%:r.pdf&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="sr"&gt;/tmp/&lt;/span&gt;&lt;span class="nx"&gt;pandoc&lt;/span&gt;.&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span class="m"&gt;1&lt;/span&gt; &amp;amp;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;FileType&lt;/span&gt; &lt;span class="nx"&gt;markdown&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Leader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt; :&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pandoc&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;%:p&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="nx"&gt;beamer&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;metropolis&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;%:p:r.pdf&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="sr"&gt;/tmp/&lt;/span&gt;&lt;span class="nx"&gt;pandoc&lt;/span&gt;.&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span class="m"&gt;1&lt;/span&gt; &amp;amp;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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;&amp;lt;leader&amp;gt;p&lt;/code&gt; builds a PDF from the current file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;leader&amp;gt;b&lt;/code&gt; builds Beamer slides from the current file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both run Pandoc in the background (trailing &lt;code&gt;&amp;amp;&lt;/code&gt;), redirect output to
&lt;code&gt;/tmp/pandoc.log&lt;/code&gt; so a failed build doesn&amp;rsquo;t clutter vim, and use &lt;code&gt;%:r&lt;/code&gt;/&lt;code&gt;%:p:r&lt;/code&gt;
to name the output PDF after the source file automatically. Only active for
&lt;code&gt;filetype=markdown&lt;/code&gt;, so it doesn&amp;rsquo;t stomp on leader mappings in other file
types.&lt;/p&gt;</description></item><item><title>RSS Over Algorithms</title><link>https://dhancodes.github.io/blog/rss-over-algorithms/</link><guid>https://dhancodes.github.io/blog/rss-over-algorithms/</guid><pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;TL;DR having an existential crisis because of social media feeds (again) and
solving it by using &lt;a href="https://en.wikipedia.org/wiki/RSS"&gt;RSS&lt;/a&gt; (not the Indian one).&lt;/p&gt;
&lt;p&gt;I caught myself opening Instagram, closing it, and opening it again within the
same minute , not looking for anything, just reaching for it out of habit. That
was enough. Shorts, Reels, and the Instagram feed are overwhelming not because of
the content but because of the quantity and the fact that someone else is choosing
it for you. I decided to fix that. The goal is not to read everything. It is to
have a feed that respects your time and attention rather than competing for it.
This post is the things/tricks/tips I have figured out.&lt;/p&gt;
&lt;h2 id="why-rss"&gt;Why RSS?&lt;/h2&gt;
&lt;p&gt;I have &lt;a href="https://dhancodes.github.io/posts/2022/04/rss-readers/"&gt;written about RSS before&lt;/a&gt; and I am still a
proponent of it. It is a piece of the old internet I cherish. In plain terms, it
is an application that queries websites you choose to see whether they have new
content. But the real reason to use it is control , no algorithm ranks your feed,
no engagement metric decides what you see first, no middleman between you and the
source. You subscribe to what is relevant to you, and that is it.&lt;/p&gt;
&lt;p&gt;I use &lt;a href="https://capy.lol"&gt;Capy Reader&lt;/a&gt; on mobile.
It&amp;rsquo;s free, open source, and have no accounts or cloud sync &amp;ndash; your
feeds stay on your device. Capy Reader has a clean reading experience and handles
YouTube feeds well.&lt;/p&gt;
&lt;h2 id="some-feeds-worth-subscribing-to"&gt;Some feeds worth subscribing to&lt;/h2&gt;
&lt;p&gt;A few from my list that I would recommend regardless of your interests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.quantamagazine.org/feed/"&gt;Quanta Magazine&lt;/a&gt;: long-form science
journalism on math, physics, and biology. One of the few places that covers
research accessibly without dumbing it down.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://finshots.in/archive/rss/"&gt;Finshots&lt;/a&gt;: Indian finance and business
news in plain language. One of the better daily reads if you want to follow
markets without the noise.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projectzero.google/feed.xml"&gt;Project Zero&lt;/a&gt;: Google&amp;rsquo;s security
research team publishing vulnerability deep-dives. Technical but fascinating.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="things-i-use-rss-for"&gt;Things I use RSS for.&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube:&lt;/strong&gt; Every channel and playlist has an RSS feed. I follow channels like
Computerphile, ColdFusion, and Two Minute Papers without ever opening YouTube.
YouTube podcasts are just playlists under the hood, so they work the same way ,
new episodes show up in your reader like any other post. No algorithm, no
autoplay, no recommendations pulling you in.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; Track releases and commits of projects you depend on. I follow
SageMath commits directly , new releases land in my reader without me having to
check GitHub manually.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google Alerts:&lt;/strong&gt; I set up alerts for specific searches , institutions,
researchers, job boards like TCS Jobs. Everything lands in one place alongside
my other subscriptions, filed under its own folder.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;News:&lt;/strong&gt; BBC World, The Hindu (Chennai, Kerala, Frontline), Mint, The Print,
The Verge , different angles, all chosen by me. No algorithm deciding what is
&amp;ldquo;relevant&amp;rdquo; today.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Blogs:&lt;/strong&gt; Hand-picked writers I trust. Schneier on Security, Krebs on Security,
Quanta Magazine, and others. The signal-to-noise ratio here is the best of all
my feeds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reddit &amp;amp; Hacker News:&lt;/strong&gt; Every subreddit has an RSS feed, and you can subscribe
to just the weekly top posts (&lt;code&gt;/top/.rss?t=week&lt;/code&gt;) instead of the live firehose.
I follow r/MachineLearning, r/LocalLLaMA, r/Kerala, and a few others this way.
For Hacker News, I use &lt;a href="https://hnrss.org"&gt;hnrss.org/best&lt;/a&gt; instead of the
default feed , it filters for only the highest-voted posts, which dramatically
improves quality. The official Reddit app is deliberately addictive , RSS gives
you the content without the dark patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-i-categorize-my-feeds"&gt;How I categorize my feeds&lt;/h2&gt;
&lt;p&gt;Having a lot of feeds without structure is just recreating the problem. Here is
how I organize mine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Essential:&lt;/strong&gt; The feeds I read every day without fail , high signal, low volume.
Security blogs, math blogs, a few YouTube channels, long-form writing I genuinely
look forward to. If I had to cut everything else, I would keep this folder.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discovery:&lt;/strong&gt; Feeds I browse when I have time. arXiv papers, ePrint cryptography
papers, a few Reddit communities. For finding new ideas and rabbit holes , not
daily reading, but worth checking a few times a week.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;News:&lt;/strong&gt; Global, local (Chennai, Kerala), and topic-specific sources. Kept in a
separate folder so news does not bleed into everything else. I check this once a
day, not constantly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alerts:&lt;/strong&gt; Google Alerts for specific searches and status pages. More reactive
than intentional , I glance at them when something might have happened, not as
regular reading.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other-things-that-helped"&gt;Other things that helped&lt;/h2&gt;
&lt;p&gt;RSS is the core, but a few smaller changes compounded it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Podcasts over Shorts:&lt;/strong&gt; I switched passive video time (Reels, Shorts) to
podcasts. Same dead time - commute, chores, walks - but you actually finish an
idea instead of half-watching fifty of them. Wrote a blog on this too see&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube default to Subscriptions:&lt;/strong&gt; In YouTube settings, set the homepage to
your Subscriptions feed instead of Home. Home is algorithmically curated to keep
you watching. Subscriptions shows only channels you chose. One setting, massive
difference.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kudos. Hope I saved you some time.&lt;/p&gt;</description></item><item><title>Relationship with LaTeX Ended - Welcoming Typst</title><link>https://dhancodes.github.io/blog/typst/</link><guid>https://dhancodes.github.io/blog/typst/</guid><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><description>&lt;p&gt;It’s been a while since my last blog, but today I bring exciting news: I’ve
discovered &lt;strong&gt;Typst&lt;/strong&gt;, a modern typesetting system that feels like the
long-awaited alternative to LaTeX.&lt;/p&gt;
&lt;p&gt;For years, I relied on LaTeX for academic writing, but it always felt bloated
and unnecessarily complicated. Typst changes that. It solves many of LaTeX’s
pain points while keeping the power and flexibility we need. In many ways, it
feels like Typst could finally challenge LaTeX’s dominance in academia.&lt;/p&gt;
&lt;p&gt;I’ve always loved the simplicity of Markdown, but when it came to equations,
LaTeX was the only real option. Typst merges the best of both worlds Markdown’s
ease with LaTeX’s mathematical power.&lt;/p&gt;
&lt;p&gt;I won’t cover installation here (Google or ChatGPT will do the trick), but let
me share the highlights that made me fall in love with Typst:&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-section-headings-without-the-noise"&gt;1. Section Headings Without the Noise&lt;/h2&gt;
&lt;p&gt;In LaTeX, defining a section is clunky:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\section&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;Section name&lt;span class="nb"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In Typst, it’s as clean as Markdown:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;= Section name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Simple and elegant.&lt;/p&gt;
&lt;h2 id="2-painless-equations"&gt;2. Painless Equations&lt;/h2&gt;
&lt;p&gt;Typst equations look and feel familiar, but with fewer backslashes and more
readability. Fractions, in particular, are much cleaner to write.&lt;/p&gt;
&lt;p&gt;Inline equation example:&lt;/p&gt;
&lt;p&gt;Let &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;a^2 + b^2 = c^2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:0.8141em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;c&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; be the Pythagorean theorem.&lt;/p&gt;
&lt;p&gt;Display equation example:
&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo stretchy="false"&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mo stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt; c = sqrt(a^2 + b^2) &lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:0.4306em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;c&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:1.0641em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.03588em;"&gt;q&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.02778em;"&gt;r&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:1.0641em;vertical-align:-0.25em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.8141em;"&gt;&lt;span style="top:-3.063em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It just works.&lt;/p&gt;
&lt;h2 id="3-functions-that-make-sense"&gt;3. Functions That Make Sense&lt;/h2&gt;
&lt;p&gt;Typst introduces functions with a syntax that is both powerful and intuitive.
Unlike LaTeX, where custom commands often feel cryptic, Typst functions are
straightforward, reusable, and easy to read.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#let centered-image(path, width: 60%) = {
 align(center)[
 image(path, width: width)
 ]
}

#centered-image(&amp;#34;figures/example.png&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="4-bibliography"&gt;4. Bibliography&lt;/h2&gt;
&lt;p&gt;Citing in Typst is natural, just use &lt;code&gt;@cite&lt;/code&gt;. References, tags, and bibliographies are built in.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;This method was described in @einstein1905.

#let bib = bibliography(&amp;#34;references.bib&amp;#34;)
#bibliography-slide(bib)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;No more BibTeX nightmares.&lt;/p&gt;
&lt;h2 id="5-more-power-for-power-users"&gt;5. More Power for Power Users&lt;/h2&gt;
&lt;p&gt;For those who want more control, Typst provides variables, functions, and
advanced layouts directly in its core. No endless packages required, everything
is extendable in a clean, predictable way.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#let thesis-title = &amp;#34;My Awesome Thesis&amp;#34;
= #thesis-title
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="bonus-typstslides"&gt;Bonus: Typstslides&lt;/h2&gt;
&lt;p&gt;If you’ve ever struggled with LaTeX Beamer, you’ll love this:
&lt;a href="https://typst.app/universe/package/typslides/"&gt;Typstslides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="final-thoughts"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;LaTeX has served us well, but the relationship was always complicated. With
Typst, things feel refreshingly simple. For those starting their theses, writing
papers, or preparing slides, I wholeheartedly recommend giving Typst a try.&lt;/p&gt;
&lt;p&gt;Happy Typsting! 🎉&lt;/p&gt;</description></item><item><title>AI and Future of Art</title><link>https://dhancodes.github.io/blog/ai-art/</link><guid>https://dhancodes.github.io/blog/ai-art/</guid><pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate><description>&lt;p&gt;Artificial Intelligence is rapidly transforming the art world. From AI-generated
portraits to entire concept artworks, the debate over AI’s role in art is
growing. The question still remains wheather AI is simply a tool that empowers
artists or a distruptive force that threatens their livelihood.&lt;/p&gt;
&lt;p&gt;One recent example is the AI replication of Studio Ghibli’s iconic art style,
allowing fans to generate “Ghiblified” versions of their photos. While some fans
celebrate this as a way to experience the magic of Ghibli personally, others
question whether AI imitating such a unique and handcrafted style undermines the
human touch that makes Ghibli special.&lt;ins&gt;Even Studio Ghibli’s co-founder, &lt;strong&gt;Hayao
Miyazaki&lt;/strong&gt;, has publicly reprimanded the use of AI in art, expressing concerns
that it lacks the soul and intention that human artists bring to their
work.&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;At the same time, it is important to recognize that AI itself is a remarkable
achievement—born from human creativity, effort, and innovation.
To understand the impact of AI in art, let’s compare it with past technological
advancements and explore how it differs from previous innovations.&lt;/p&gt;
&lt;h2 id="how-past-inventions-shaped-art"&gt;How Past Inventions Shaped Art&lt;/h2&gt;
&lt;p&gt;Throughout history, new technologies have always challenged the traditional ways
of creating art. Here are some key examples:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Photography vs. Painting (19th Century):&lt;/strong&gt;
When photography emerged, many painters feared it would make their craft
obsolete. Instead, it pushed painters toward new styles like Impressionism
and Abstract Art, emphasizing emotion and creativity over realism.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Digital Art vs. Traditional Hand-Drawn Art (20th Century):&lt;/strong&gt;
Early digital tools like Photoshop and graphic tablets faced criticism for
“devaluing” traditional art. However, they became essential in fields like
animation, game design, and illustration. Today, digital art is widely
respected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Printing Press &amp;amp; Handmade Books (15th Century):&lt;/strong&gt;
The printing press threatened scribes who manually copied books, but it made
literature more accessible. Similarly, AI-generated art could make artistic
tools available to more people, democratizing creativity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Industrial Revolution &amp;amp; Craftsmanship:&lt;/strong&gt;
Machines replaced many hand-crafted processes, but handcrafted art and goods
remained valuable for their uniqueness. AI-generated art may push human-made
works to be seen as more exclusive and valuable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="how-ai-art-differs-from-past-inventions"&gt;How AI Art differs from past inventions&lt;/h2&gt;
&lt;p&gt;All the inventions listed above required direct human input in one way or ather,
but, AI is completely autonomus. When Photography was indroduced it created the
need for photographers. Furthermore even when the invention of camera further got
democratized to the point mostly everyone have them in their pockets, we still
need talented photographers. But, this might not be the case for AI art. This
scale in which AI can be used can disrupt the current economics of the art
industry.&lt;/p&gt;
&lt;p&gt;One of the major limitations of AI-generated art is its lack of originality. AI
can only learn from past patterns and lacks the personal touch and lived
experience that human artists bring to their work. While AI can generate
stunning visuals, it cannot convey deep emotions or unique artistic visions in
the same way a human can. However, AI can function as a tool for
artists and enrich the way they create art. Picture a single person creating a
movie entirely on their own, fully expressing themselves without the constraints
of money. This new world of creative empowerment is also something we should
strive for.&lt;/p&gt;
&lt;p&gt;At the same time, AI tools can reduce the workload for illustrators. Tasks that
once took hours can now be completed in minutes, allowing artists to focus on
refining their creative vision rather than getting bogged down in repetitive
processes. Features like an “undo” button, which would have been unthinkable in
traditional painting, are now standard in digital art software. AI represents
yet another leap forward in creative technology, making artistic tools more
powerful than ever before.&lt;/p&gt;
&lt;h2 id="the-hard-work-behind-ai-art"&gt;The Hard Work Behind AI Art&lt;/h2&gt;
&lt;p&gt;AI-generated art may seem like an effortless process, but in reality, developing
these systems requires immense labor and innovation. Training AI to create art
is not simple—it involves complex algorithms, vast datasets, and meticulous
refinement. One of the biggest hurdles AI developers have faced is teaching AI
to replicate intricate artistic styles. Early AI models struggled with
fundamental details such as generating human hands correctly, often producing
extra fingers or distorted anatomy. Likewise, text rendering within AI-generated
images was notoriously difficult, frequently resulting in unreadable or
misspelled words.&lt;/p&gt;
&lt;p&gt;Recent advancements, however, have made AI significantly more precise. The
latest ChatGPT model, for example, excels at maintaining coherence, handling
intricate details, and preserving logical consistency across long-form text.
This level of accuracy, which once seemed impossible, showcases just how much
work goes into refining AI models. The same effort applies to AI art—achieving
smooth brush strokes, dynamic lighting, and stylistic nuances is no trivial
task. What we see today is the product of years of research and iteration,
making AI-generated art an impressive technological achievement.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;While AI has the potential to revolutionize art, it also raises important
ethical and creative questions. History shows that technology does not erase
art—it transforms it. However, AI is unique in that it can create without human
experience or emotion.
Perhaps the best path forward is responsible AI use—where AI is seen as a
creative assistant rather than a creative replacement. Ethical guidelines, fair
compensation for artists whose work is used in AI training, and the continued
celebration of human-made art will be crucial in shaping the future of AI in the
art world.&lt;/p&gt;
&lt;p&gt;As for beloved styles like Studio Ghibli’s, AI may allow fans to engage with
them in new ways, but it can never replicate the magic that comes from the
skilled hands and artistic vision of its original creators. Hayao Miyazaki
himself has criticized AI-generated art, emphasizing that true art is about
human emotion, effort, and storytelling rather than mere replication of style.&lt;/p&gt;
&lt;p&gt;At the same time, we should not forget that the AI technology itself is a
product of human creativity, research, and dedication. It is a symbol of our
capacity for invention and problem-solving, much like the artistic masterpieces
it now seeks to emulate.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.livemint.com/technology/tech-news/chatgpt-finally-allows-free-users-to-create-ghibli-style-ai-images-check-our-step-by-step-guide-gpt-4-o-grok-11743225493681.html"&gt;Livemint: ChatGPT finally allows free users to create Ghibli-style AI images: Check our step-by-step guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pcmag.com/news/studio-ghibli-founder-utterly-disgusted-by-ai-animation"&gt;Studio Ghibli Founder &amp;lsquo;Utterly Disgusted&amp;rsquo; By AI Animation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Managing Multiple Email Addresses: A Solution</title><link>https://dhancodes.github.io/blog/solution-to-having-multiple-emails/</link><guid>https://dhancodes.github.io/blog/solution-to-having-multiple-emails/</guid><pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate><description>&lt;q&gt;
The tribulations of academia lie in our continued reliance on emails. An
unencrypted multitude of email addresses abounds, yet the challenge remains in
managing them all. &amp;#8230;&lt;/q&gt; &amp;#8211; anon
&lt;p&gt;Worry no more, here&amp;rsquo;s how to use one email to rule them all.&lt;/p&gt;
&lt;h2 id="level-1-email-forwarding"&gt;Level 1: Email Forwarding&lt;/h2&gt;
&lt;p&gt;Every email service has an email forwarding option, though some are not free. I
assume that either your university or you are smart enough to use a service that
provides this feature. As gmail offers this service I will explain it in terms
of gmail.&lt;/p&gt;
&lt;p&gt;Disclaimer: Even though I use Gmail, I am not endorsing it. Unfortunately, Gmail
uses an unencrypted protocol for communication.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Step 1&lt;/strong&gt; : Go to settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step 2&lt;/strong&gt; : Click on Forwarding and POP/IMAP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step 3&lt;/strong&gt; : Add a forwarding address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step 4&lt;/strong&gt; : Verfiy your account and do the other things&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step n&lt;/strong&gt; : You have successfully added an email address to forward all your mails to.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="level-2-send-emails-without-logging-into-your-secondary-account"&gt;Level 2: Send Emails Without Logging into Your Secondary Account&lt;/h2&gt;
&lt;p&gt;In Gmail you find this option under Settings &amp;gt; Accounts and Import &amp;gt; Send mail
as.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;</description></item><item><title>Some of my favorite xkcd comics.</title><link>https://dhancodes.github.io/blog/favorite-xkcd-comics/</link><guid>https://dhancodes.github.io/blog/favorite-xkcd-comics/</guid><pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate><description>&lt;p&gt;Everyone requires a stress release to avoid mental and physical breakdowns.
Enter &lt;a href="https://xkcd.com/"&gt;xkcd&lt;/a&gt;, Randall Munroe&amp;rsquo;s webcomic. If science, math,
or programming tickle your funny bone, the stick-figure comics are a must-read.
Indulge in &lt;a href="https://xkcd.com/"&gt;xkcd&lt;/a&gt; at your leisure and utilize &lt;a href="https://www.explainxkcd.com/"&gt;explainxkcd&lt;/a&gt; for clarifications
and don&amp;rsquo;t overlook the captions. Here are a few of my all-time favorites.&lt;/p&gt;
&lt;p&gt;Estimation: &lt;a href="https://xkcd.com/612/"&gt;https://xkcd.com/612/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/estimation.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Compiling: &lt;a href="https://xkcd.com/303/"&gt;https://xkcd.com/303/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/compiling.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Zealous autoconfig: &lt;a href="https://xkcd.com/416/"&gt;https://xkcd.com/416/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/zealous_autoconfig.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Permanence: &lt;a href="https://xkcd.com/910/"&gt;https://xkcd.com/910/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/permanence.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Opensource: &lt;a href="https://xkcd.com/225/"&gt;https://xkcd.com/225/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/open_source.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Surgery: &lt;a href="https://xkcd.com/644/"&gt;https://xkcd.com/644/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://imgs.xkcd.com/comics/surgery.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;And you have to see &lt;a href="https://xkcd.com/1110/"&gt;this&lt;/a&gt; for yourself.&lt;/p&gt;
&lt;h2 id="see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://phdcomics.com/"&gt;PhD comics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.smbc-comics.com/"&gt;SMBC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Navigating Misinformation: A Digital Survival Guide</title><link>https://dhancodes.github.io/blog/navigating-misinformation/</link><guid>https://dhancodes.github.io/blog/navigating-misinformation/</guid><pubDate>Fri, 03 Nov 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In today&amp;rsquo;s digital age, we find ourselves in a constant battle against the
relentless waves of misinformation. The information landscape has evolved
significantly over the years, and with the advent of social media and advanced
technologies, the challenges have grown exponentially. To stay afloat and make
informed decisions, we need a digital survival guide. The story of news media
and propaganda has a long history, but it has reached new heights in the
digital era. Misinformation, or false and misleading information, is
disseminated at an unprecedented scale, thanks to social media. The
information landscape is in a constant state of flux, and this discussion has
never been more pertinent than in today&amp;rsquo;s global context.&lt;/p&gt;
&lt;p&gt;In this blog, we&amp;rsquo;ll
explore the world of misinformation, its prevalence on social media,
personalized searches, and the role of AI models like GPTs.&lt;/p&gt;
&lt;h2 id="misinformation-in-social-media"&gt;Misinformation in Social Media&lt;/h2&gt;
&lt;p&gt;Social media platforms have become breeding grounds for misinformation. The
degree of misinformation varies from platform to platform, and the emergence of
AI tools like deepfakes has made the situation even worse. False information is
often spread using manipulated images, videos, and even content from video
games or movies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to counter:&lt;/strong&gt; To combat this issue, it&amp;rsquo;s essential to be selective about the platforms you use. Choose platforms that have measures in place to counter misinformation, and always verify information from multiple sources before accepting it as truth.&lt;/p&gt;
&lt;h2 id="personalized-searches"&gt;Personalized Searches&lt;/h2&gt;
&lt;p&gt;Search engines like Google have revolutionized the way we access information.
They cater search results based on your location and preferences. However, the
drawback is that these results can sometimes create a filter bubble, limiting
your exposure to diverse viewpoints and information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to counter:&lt;/strong&gt; To break free from this filter bubble, consider using alternative search engines like DuckDuckGo. These platforms prioritize user privacy and neutrality, providing a broader spectrum of search results.&lt;/p&gt;
&lt;h2 id="gpts-the-new-search-engine"&gt;GPTs: The New Search Engine&lt;/h2&gt;
&lt;p&gt;We can envision a future where traditional search engines like Google might be
replaced by AI models like GPT. These models offer the convenience of
conversational interaction, but they come with their own set of challenges.
GPTs are trained on vast amounts of existing text data, which can perpetuate
biases in their responses.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to counter:&lt;/strong&gt; While AI models like GPT are valuable for factual information, exercise caution when seeking opinions and viewpoints. Always cross-check with multiple sources to ensure a well-rounded perspective.&lt;/p&gt;
&lt;h2 id="key-takeaways"&gt;Key Takeaways&lt;/h2&gt;
&lt;p&gt;In a world deep with misinformation, it&amp;rsquo;s crucial to equip yourself with the
right tools and strategies to navigate the digital sea. Here are some key
takeaways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Diversify your information sources and don&amp;rsquo;t rely solely on social media for news.&lt;/li&gt;
&lt;li&gt;Verify information from multiple reputable sources.&lt;/li&gt;
&lt;li&gt;Consider using alternative search engines like DuckDuckGo to escape filter bubbles.&lt;/li&gt;
&lt;li&gt;Use AI models like GPT for factual information but be cautious when seeking opinions.&lt;/li&gt;
&lt;li&gt;Consider using RSS readers for getting news derectly from the source.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By following these guidelines, you can navigate the digital landscape more
effectively, making informed decisions in an age of misinformation.&lt;/p&gt;</description></item><item><title>The Intersection of Atheism, Science, and Belief: Reflections Inspired by `Kushi`</title><link>https://dhancodes.github.io/blog/atheism/</link><guid>https://dhancodes.github.io/blog/atheism/</guid><pubDate>Mon, 02 Oct 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;I recently watched the Telugu romantic comedy film &amp;ldquo;Kushi&amp;rdquo; (2023), and its
portrayal of atheists sparked some intriguing thoughts that I felt compelled to
share. In the movie, the character representing an atheist is depicted as a
&amp;ldquo;science believer,&amp;rdquo; which, from my perspective, falls short of capturing the
essence of atheism. Allow me to elaborate on this matter further.
There&amp;rsquo;s a distinction between what we can call a
&amp;ldquo;strong atheist&amp;rdquo; and a &amp;ldquo;science supporter.&amp;rdquo; A strong atheist, based on the
classification by renowned evolutionary biologist Richard Dawkins, is a person
who asserts with 100% certainty that there is no God. However, even in this
extreme case of atheism, one should not automatically assume a strong
inclination toward science.
The reason I emphasize the distinction between a &amp;ldquo;supporter of science&amp;rdquo; and a
&amp;ldquo;believer&amp;rdquo; is rooted in the core tenets of scientific thinking. Science is
fundamentally about inquiry, skepticism, and the pursuit of knowledge based on
empirical evidence. It is not a system of belief but a conceptual tool for
understanding the world. In science, one cannot merely believe; one must
question in order to comprehend.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s essential to recognize that science is not a religion; it is a
methodological approach to gaining insights into the natural world. I can
understand why some may associate atheism with science, as atheists often use
scientific principles to understand or teach about how things work. However,
it&amp;rsquo;s crucial to differentiate between the two concepts.
The assumption of the existence of God is, in a way, a scientific statement. It
posits the existence of a supernatural being within the framework of the
natural world. However, the reason many theists shy away from using science to
prove the existence of God is that such endeavors have historically proven
futile. Science, by its very nature, requires testable hypotheses and empirical
evidence, and these have been elusive when it comes to matters of faith.&lt;/p&gt;
&lt;p&gt;My own stance in this ongoing discourse aligns with what can be termed a &amp;ldquo;De
facto atheist.&amp;rdquo; Based on the current evidence available to me, I find the
existence of God to be highly improbable, and I live my life on the assumption
that there is no God. However, what keeps me from adopting the position of a
strong atheist is the recognition that doing so would involve assuming the
conclusion before conducting the experiment, an approach that goes against the
principles of scientific inquiry.
Moreover, it&amp;rsquo;s crucial to emphasize that being a science supporter means being
open to various opinions and respecting the diversity of thought. Healthy
debates should be encouraged, and differing perspectives should be acknowledged
and examined. This brings me to a critical point: I strongly disagree with the
approach taken by the &amp;ldquo;atheist&amp;rdquo; husband in the movie &amp;ldquo;Kushi,&amp;rdquo; where he attempts
to impose his beliefs on his family. In societies where culture and religion
intersect significantly, it&amp;rsquo;s essential to strike a balance. While we can&amp;rsquo;t
ignore the cultural context, we should always encourage critical thinking and
skepticism.&lt;/p&gt;
&lt;p&gt;In conclusion, &amp;ldquo;Kushi&amp;rdquo; may have prompted me to reflect on the portrayal of
atheists, but it has also reminded me of the intricate interplay between
atheism, science, and belief. It&amp;rsquo;s fascinating how a mediocre film can serve as
a catalyst for discussions on profound topics, encouraging us to ponder the
complexities of our own beliefs and the role of science in our understanding of
the world. The key takeaway is that, regardless of our beliefs, we should
always remain open to new ideas, respect diverse opinions, and promote
constructive dialogue within our communities.&lt;/p&gt;
&lt;h2 id="reference"&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Spectrum_of_theistic_probability"&gt;Dawkins scale&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Exploring GIFs: An Animated Journey</title><link>https://dhancodes.github.io/blog/gifs/</link><guid>https://dhancodes.github.io/blog/gifs/</guid><pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;If you&amp;rsquo;re a regular visitor to the digital landscape, you&amp;rsquo;ve likely stumbled
upon a timeless question: Is it pronounced &amp;ldquo;JIFF&amp;rdquo; or &amp;ldquo;GHIF&amp;rdquo;? Interestingly,
both pronunciations are deemed acceptable, despite the official stance of the
GIF format&amp;rsquo;s creator, Steve Wilhite, who advocated for the soft &amp;ldquo;G.&amp;rdquo; But beyond
this linguistic debate lies a rich world of GIFs that has captivated internet
users since their inception.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gif" alt="GIF" title="A GIF of Newtons cradle."&gt;&lt;/p&gt;
&lt;h2 id="what-is-a-gif"&gt;What is a GIF?&lt;/h2&gt;
&lt;p&gt;The Graphics Interchange Format, better known as GIF, is a bitmap image format
developed by a team at the online services provider CompuServe, under the
leadership of American computer scientist Steve Wilhite. It made its debut on
June 15, 1987. The widespread usage of GIFs on the World Wide Web can be
attributed to their broad support and compatibility across various applications
and operating systems.&lt;/p&gt;
&lt;p&gt;One of the standout features of GIFs is their ability to support up to 8 bits
per pixel for each image, enabling a single image to reference its own palette
of up to 256 different colors selected from the 24-bit RGB color space. GIFs
gained popularity due to their use of the Lempel–Ziv–Welch data compression
method, which proved more efficient than previously employed techniques. In
September 1995, Netscape Navigator 2.0 introduced the ability for animated GIFs
to loop, adding a new dimension to their appeal.&lt;/p&gt;
&lt;p&gt;Despite being developed by CompuServe, GIFs used the Lempel–Ziv–Welch (LZW)
lossless data compression algorithm, which had been patented by Unisys in 1985.
This led to controversy over licensing agreements between Unisys and CompuServe
in 1994, ultimately prompting the development of the Portable Network Graphics
(PNG) standard. However, by 2004, all patents related to the proprietary
compression used in GIFs had expired.&lt;/p&gt;
&lt;h2 id="the-meme-the-legend"&gt;The Meme, The Legend&lt;/h2&gt;
&lt;p&gt;In May 2015, Facebook embraced the GIF trend by adding support for these
animated images. In January 2018, Instagram followed suit, introducing GIF
stickers to its story mode. GIFs have become an integral part of pop culture,
finding their way into virtually every chat service. They offer a unique form
of expression that goes beyond words and even emoticons.&lt;/p&gt;
&lt;p&gt;GIFs let you showcase your pop culture knowledge with quirky references, and
they allow you to be a bit of a show-off in the best possible way. They can
convey humor, reactions, and emotions like no other medium, making them a
staple in internet communication.&lt;/p&gt;
&lt;h2 id="burn-all-gifs"&gt;Burn All GIFs?&lt;/h2&gt;
&lt;p&gt;While GIFs have undoubtedly left their mark on the digital landscape, they are
not without their drawbacks. As an older format, they are less optimized
compared to current standards. Storing and managing a plethora of GIFs can be a
logistical nightmare due to their large file sizes and limited color palettes.&lt;/p&gt;
&lt;p&gt;The rise of more efficient and versatile formats has led some to question the
long-term viability of GIFs in the digital ecosystem. Nevertheless, their
enduring popularity and unique charm ensure that they won&amp;rsquo;t disappear from the
internet anytime soon.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In the world of GIFs, the debate over pronunciation is just the tip of the
iceberg. These animated images, born in the late &amp;rsquo;80s, have evolved into a
dynamic form of expression, a cornerstone of internet culture, and a source of
endless entertainment. Whether you&amp;rsquo;re a &amp;ldquo;JIFF&amp;rdquo; or &amp;ldquo;GHIF&amp;rdquo; advocate, there&amp;rsquo;s no
denying the enduring and enchanting allure of GIFs in our digital playground.
So, as you stroll through the vast expanse of the internet, don&amp;rsquo;t be surprised
if you encounter a GIF that makes you smile, laugh, or even ponder the
intricacies of pronunciation.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch"&gt;Lempel–Ziv–Welch Algorithm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.smithsonianmag.com/history/brief-history-gif-early-internet-innovation-ubiquitous-relic-180963543/"&gt;A Brief History of the GIF, From Early Internet Innovation to Ubiquitous Relic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>When Mistakes Make Masterpieces: The Unintended Innovations in Technology</title><link>https://dhancodes.github.io/blog/bugs/</link><guid>https://dhancodes.github.io/blog/bugs/</guid><pubDate>Sat, 23 Sep 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the ever-evolving landscape of technology and innovation, the unexpected
often leads to the extraordinary. Some of the most cherished features we enjoy
today were born not from meticulous planning but rather from bugs, glitches,
and unintended twists of fate. In this blog post, I will delve into the realms
of technology, gaming, and creative design to uncover instances where mistakes
turned into masterpieces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. UNIX Hidden Files&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dennis Ritchie and Ken Thompson&amp;rsquo;s decision to exclude &amp;lsquo;.&amp;rsquo; and &amp;lsquo;..&amp;rsquo; in the &amp;rsquo;ls&amp;rsquo;
command in Unix was an accidental creation. By looking at just the first
character of filenames, they unintentionally ushered in the era of hidden files
in the Unix system. This is feature is still adorned by many as they are quite
uselful in storing configuration files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Gmail&amp;rsquo;s Second Chance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From the linux world, let&amp;rsquo;s pivot to emails, where Gmail&amp;rsquo;s &amp;ldquo;Undo
Send&amp;rdquo; feature was accidentally discovered. Initially an experiment, it emerged
from a bug report and now saves countless inboxes from premature email
dispatch. I cannot simply count the number of times this has saved me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Vi&amp;rsquo;s Quirky &amp;lsquo;c&amp;rsquo; and &amp;lsquo;w&amp;rsquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In text editing, Vi introduced us to the curious behavior of &amp;lsquo;c&amp;rsquo;
and &amp;lsquo;w.&amp;rsquo; Despite being different from what the creator Bram Moolenaar initially
intended, this behavior has persisted, captivating users and becoming part of
Vi&amp;rsquo;s unique charm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. &amp;ldquo;Ctrl+Alt+Delete&amp;rdquo; for Windows Login&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The famous &amp;ldquo;Ctrl+Alt+Delete&amp;rdquo; combination to access the Windows Task Manager was
originally a debugging feature in early versions of Windows meant for the
developers. It was never intented for the three-finger salute to become so
familiar to end users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Deep Blue vs. Kasparov&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In chess, where the infamous
match between &lt;a href="https://en.wikipedia.org/wiki/Deep_Blue_versus_Garry_Kasparov"&gt;Deep Blue and Garry Kasparov&lt;/a&gt; unfolded. A bug in Deep Blue&amp;rsquo;s
programming led to a surprising move, adding intrigue and legend to the world
of chess.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Grand Theft Auto&amp;rsquo;s Criminal Evolution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From chess, we shift gears to gaming with Grand Theft Auto (GTA).
Initially conceived as a cops and robbers game, a bug turned the tables, making
the cops relentless pursuers. This twist became the core feature of GTA&amp;rsquo;s
thrilling gameplay.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Super Mario 64&amp;rsquo;s Backwards Long Jump&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Super Mario 64 players discovered a glitch called the &amp;ldquo;&lt;a href="https://mario.fandom.com/wiki/Backwards_Long_Jump"&gt;Backwards Long Jump&lt;/a&gt;,&amp;rdquo;
allowing them to bypass obstacles. Speedrunners embraced this bug, turning it
into a celebrated technique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. The Accidental Creeper&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our quest leads us to the realm of video games, where Minecraft&amp;rsquo;s &amp;ldquo;Creeper&amp;rdquo;
enemy type emerged from a mistake. Markus Persson, or Notch, accidentally
reversed dimensions while creating a Pig creature, resulting in the iconic
green menace known for explosions and charm.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;These instances of mistakes turning into masterpieces highlight the creative
and adaptive nature of human ingenuity. They serve as a reminder that
innovation often arises from adaptation and a willingness to embrace unexpected
outcomes. So, the next time you encounter a bug or a glitch, remember that it
might just be the birth of something extraordinary.&lt;/p&gt;</description></item><item><title>Ode to the terminal</title><link>https://dhancodes.github.io/blog/ode-to-the-terminal/</link><guid>https://dhancodes.github.io/blog/ode-to-the-terminal/</guid><pubDate>Mon, 11 Sep 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;To my usual readers, if there are any out there, I&amp;rsquo;d like to ask for a bit of
space because I&amp;rsquo;m about to go on a poetic rant.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In tech&amp;rsquo;s vast world, I&amp;rsquo;ll take some space,&lt;br&gt;
To share my thoughts and make my case.&lt;br&gt;
In praise of something pure and true,&lt;br&gt;
The terminal&amp;rsquo;s charm, I&amp;rsquo;ll give my due.&lt;/p&gt;
&lt;p&gt;In the world of tech, simplicity we find,&lt;br&gt;
Within the terminal, a connection so fine.&lt;br&gt;
Why seek mediators, distant they stand,&lt;br&gt;
When we can speak closely, hand in hand.&lt;/p&gt;
&lt;p&gt;Why carry the weight of unnecessary freight,&lt;br&gt;
When we can travel light, appreciate?&lt;br&gt;
I&amp;rsquo;d choose you, my love, again and again,&lt;br&gt;
Even if it meant joining the cult of 6, my friend.&lt;/p&gt;
&lt;p&gt;In this digital sea, vast and true,&lt;br&gt;
The only seashell I desire is you.&lt;br&gt;
In this ocean of options so grand,&lt;br&gt;
The one I desire, you understand.&lt;/p&gt;
&lt;p&gt;🎤🎤🎤&lt;/p&gt;</description></item><item><title>Growing Code: Lessons from the Garden and 'The Pragmatic Programmer'</title><link>https://dhancodes.github.io/blog/growing-code/</link><guid>https://dhancodes.github.io/blog/growing-code/</guid><pubDate>Sat, 02 Sep 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the digital world, we often hear about programming being compared to
craftsmanship or engineering. While these comparisons are certainly valid,
there&amp;rsquo;s another analogy that beautifully captures the essence of coding: coding
as gardening. The idea was inspired by the timeless wisdom found in &lt;a href="https://www.amazon.in/Pragmatic-Programmer-Journeyman-Master-Old/dp/020161622X"&gt;&amp;ldquo;The
Pragmatic Programmer&amp;rdquo;&lt;/a&gt;
book written by Andrew Hunt and David Thomas, which highlights the parallels
between nurturing a garden and nurturing your codebase.&lt;/p&gt;
&lt;h2 id="planting-seeds"&gt;Planting Seeds&lt;/h2&gt;
&lt;p&gt;Every software project begins with a single line of code, just as a garden
starts with planting seeds or seedlings. These initial lines of code are like
the seeds that will eventually sprout into a full-fledged program. Just as a
gardener carefully selects the right soil, location, and conditions for their
plants, a developer must make decisions about programming languages,
frameworks, and architecture to ensure a solid foundation.&lt;/p&gt;
&lt;h2 id="nurturing-growth"&gt;Nurturing Growth&lt;/h2&gt;
&lt;p&gt;A garden requires ongoing care to flourish, and so does your code. Regular
updates, bug fixes, and improvements are essential for maintaining a healthy
software project. Think of these updates as the equivalent of providing water,
sunlight, and nutrients to your plants. Neglecting your codebase can lead to
stagnation and eventual decay called &lt;a href="https://en.wikipedia.org/wiki/Software_rot"&gt;software
rot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Much like a gardener who prunes overgrown branches to encourage healthy growth,
a programmer may refactor code to remove redundancies and improve readability.
This pruning process ensures that your code remains manageable and continues to
thrive.&lt;/p&gt;
&lt;h2 id="rearranging-the-plants"&gt;Rearranging the Plants&lt;/h2&gt;
&lt;p&gt;Just as a gardener might rearrange plants to create a visually appealing
landscape, programmer often need to refactor and reorganize code to improve its
overall aesthetics and maintainability. This involves tasks like renaming
variables for clarity, reordering functions for better readability, and
restructuring code for a more logical flow.&lt;/p&gt;
&lt;h2 id="embracing-seasons"&gt;Embracing Seasons&lt;/h2&gt;
&lt;p&gt;Gardens go through seasons, each with its unique challenges and opportunities.
Similarly, software projects evolve. New requirements, technologies, and user
feedback shape the direction of your code. Embrace these changes, just as a
gardener adapts to the changing weather and seasons, to keep your project
relevant and aligned with its goals.&lt;/p&gt;
&lt;h2 id="harvesting-the-fruits"&gt;Harvesting the Fruits&lt;/h2&gt;
&lt;p&gt;The ultimate goal of a garden is to harvest the fruits of your labor. In the
world of programming, this is akin to your code working as you have envisioned it.
Just as a gardener takes pride in the bountiful harvest, a programmer feel a
sense of accomplishment when their program serves its purpose effectively.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So, the next time you sit down to code, consider yourself not just a programmer
but a gardener of digital landscapes, nurturing your codebase and watching it
flourish over time.&lt;/p&gt;
&lt;p&gt;Happy programming, and happy gardening! 🌱👩‍💻🌻&lt;/p&gt;</description></item><item><title>Dive into Podcasts: Some examples</title><link>https://dhancodes.github.io/blog/podcasts/</link><guid>https://dhancodes.github.io/blog/podcasts/</guid><pubDate>Sat, 26 Aug 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In today&amp;rsquo;s fast-paced world, finding moments of solace and entertainment amidst
our daily routines can be a challenge. However, over the past two years, I&amp;rsquo;ve
discovered a delightful escape that fits seamlessly into even the busiest of
schedules - podcasts. Whether it&amp;rsquo;s during my daily commute, household chores,
or even while whipping up a quick meal, podcasts have become my trusted
companions.&lt;/p&gt;
&lt;h2 id="command-line-heroes-unveiling-techs-untold-stories"&gt;Command Line Heroes: Unveiling Tech&amp;rsquo;s Untold Stories&lt;/h2&gt;
&lt;p&gt;The very first podcast that etched itself into my memory is &amp;ldquo;Command Line
Heroes.&amp;rdquo; As someone with an insatiable appetite for all things tech, this
podcast was a revelation. What sets it apart is its deep dive into the
historical aspects of technology. It unravels the untold stories behind the
innovations we often take for granted. If you share my fascination for the lore
behind the technologies that shape our lives, this podcast is a must-listen.
&lt;a href="https://www.redhat.com/en/command-line-heroes"&gt;Listen here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="hackable-bridging-the-gap-between-fiction-and-reality"&gt;Hackable?: Bridging the Gap Between Fiction and Reality&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;Hackable?&amp;rdquo; is another gem I stumbled upon during my podcast journey. This show
provides a stark contrast between the hacking portrayed in movies or TV shows
and the gritty realities of hacking in the real world. It&amp;rsquo;s a captivating
exploration of cybersecurity that challenges the misconceptions perpetuated by
popular media. Prepare to have your eyes opened wide. &lt;a href="https://www.mcafee.com/blogs/hackable/"&gt;Listen here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="darknet-diaries-unveiling-the-shadows-of-cybercrime"&gt;Darknet Diaries: Unveiling the Shadows of Cybercrime&lt;/h2&gt;
&lt;p&gt;Currently topping my list of favorites is &amp;ldquo;Darknet Diaries.&amp;rdquo; This podcast
delves into the chilling world of hacking, data breaches, and cybercrime. Its
well-crafted episodes transport listeners into the shadows of the digital
realm, revealing the often-unknown aspects of this clandestine world. If you&amp;rsquo;re
intrigued by the darker side of technology, this podcast is a captivating
exploration. &lt;a href="https://darknetdiaries.com/"&gt;Listen here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="a-note-to-fellow-explorers"&gt;A Note to Fellow Explorers&lt;/h2&gt;
&lt;p&gt;The world of podcasts is boundlessly diverse, offering something for every
taste and interest. While I have my personal favorites, the beauty of this
medium lies in its ability to cater to niche interests. Whether you&amp;rsquo;re
passionate about tech history, cybersecurity, or enjoy serialized content akin
to TV series, like &lt;a href="https://abcaudio.com/podcasts/the-dropout/"&gt;&amp;ldquo;Dropout&amp;rdquo;&lt;/a&gt; and &lt;a href="https://www.bbc.co.uk/programmes/w13xtvg9/episodes/downloads"&gt;&amp;ldquo;Lazarus Heist,&amp;rdquo;&lt;/a&gt; there&amp;rsquo;s a podcast out there
waiting for you.&lt;/p&gt;
&lt;p&gt;In conclusion, podcasts have become an integral part of my daily life. They&amp;rsquo;ve turned mundane tasks into opportunities for learning, entertainment, and reflection. If you&amp;rsquo;re yet to explore the world of podcasts, I highly recommend giving it a try. It might just become your go-to source of inspiration, knowledge, and enjoyment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://time.com/6287208/best-podcasts-2023-so-far/"&gt;Time - Best Podcasts of 2023 (So Far)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wired.com/story/best-podcasts/"&gt;Wired - The Best Podcasts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dhancodes.github.io/posts/2023/06/22/dive_into_podcasts/"&gt;My blog on getting started with podcasts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, what are you waiting for? Grab your headphones and embark on your own podcast adventure today!&lt;/p&gt;</description></item><item><title>Hopper and the Moth: How a Tiny Insect Taught Computers to Behave</title><link>https://dhancodes.github.io/blog/hopper-and-the-moth/</link><guid>https://dhancodes.github.io/blog/hopper-and-the-moth/</guid><pubDate>Sat, 19 Aug 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the world of software development, the term &amp;ldquo;bug&amp;rdquo; has become synonymous with
defects or issues in code. But did you know that this term&amp;rsquo;s history dates back
to engineering jargon long before the advent of computers? In this blog post,
we&amp;rsquo;ll delve into the fascinating history behind the term &amp;ldquo;bug,&amp;rdquo; its evolution,
and how a literal insect led to the birth of a now-common phrase.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://images.nationalgeographic.org/image/upload/t_edhub_resource_key_image/v1638888858/EducationHub/photos/computer-bug.jpg" alt="bug" title="First actual case of bug being found, according to the brainiacs at Harvard, 1945."&gt;&lt;/p&gt;
&lt;h2 id="the-origin-of-bug"&gt;The Origin of &amp;ldquo;Bug&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;The term &amp;ldquo;bug&amp;rdquo; to describe defects has a rich history that predates electronic
computers. The word can be traced back to the 1870s and was originally used in
engineering to describe mechanical malfunctions. Thomas Edison himself
mentioned &amp;ldquo;bugs&amp;rdquo; in a letter in 1878, referring to the faults and difficulties
that arise during the invention process. Over the years, this term became a
part of engineering jargon, hinting at unforeseen obstacles that engineers
encountered.&lt;/p&gt;
&lt;h2 id="bugs-in-the-mechanical-realm"&gt;Bugs in the Mechanical Realm&lt;/h2&gt;
&lt;p&gt;The term &amp;ldquo;bug&amp;rdquo; found its way into various industries long before the computer
age. A 1924 comic strip in a telephone industry journal humorously depicted a
&amp;ldquo;bug hunter&amp;rdquo; who turned out to be a repairman. Even the first mechanical
pinball game, Baffle Ball, boasted of being &amp;ldquo;free of bugs&amp;rdquo; in a 1931
advertisement. During World War II, glitches in military equipment were
referred to as bugs, emphasizing unexpected issues in technology.&lt;/p&gt;
&lt;h2 id="the-first-computer-bug"&gt;The First Computer Bug&lt;/h2&gt;
&lt;p&gt;On September 9, 1947, a significant moment occurred at Harvard University. A
team of computer scientists and engineers working on the Mark II computer
encountered consistent errors. When they investigated, they discovered the
cause: a moth had become trapped within the computer&amp;rsquo;s hardware, disrupting its
electronics. This incident marked the first-ever computer bug, a literal one,
and it set the stage for the term&amp;rsquo;s adoption in the digital realm.&lt;/p&gt;
&lt;p&gt;Among the team investigating the first computer bug was &lt;a href="https://en.wikipedia.org/wiki/Grace_Hopper"&gt;Grace Hopper&lt;/a&gt;, a
pioneering computer scientist. While she is often credited with reporting the
bug, it was her efforts that made the incident widely known. Hopper&amp;rsquo;s
contributions to the field of computing were immense, and her involvement in
this historical moment added to her legacy.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;The term &amp;ldquo;bug&amp;rdquo; has come a long way, evolving from its origins in mechanical
engineering to becoming an integral part of software development culture. The
story of the first computer bug, a moth disrupting the Mark II computer, adds a
touch of intrigue to the computing world&amp;rsquo;s history. Grace Hopper&amp;rsquo;s role in
popularizing this incident further emphasizes the importance of pioneers in
shaping our technological landscape.&lt;/p&gt;
&lt;p&gt;As we navigate the ever-evolving world of technology, let&amp;rsquo;s not forget the
humble moth that inadvertently taught us valuable lessons about the behavior of
computers.&lt;/p&gt;
&lt;h1 id="reference"&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://education.nationalgeographic.org/resource/worlds-first-computer-bug/#undefined"&gt;World&amp;rsquo;s first computer bug&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Falling in Love with Vim: A Journey of Workflow Optimization</title><link>https://dhancodes.github.io/blog/falling-in-love/</link><guid>https://dhancodes.github.io/blog/falling-in-love/</guid><pubDate>Fri, 11 Aug 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the world of text editing, where the choices are abundant, one software has
stood the test of time and captured the hearts of its users. Vim, a powerful
and versatile text editor, has not only optimized workflows but also ignited a
love affair with its unique approach to editing. Join me as I share my journey
with Vim, from the initial motivation to the profound appreciation for its
intricacies.&lt;/p&gt;
&lt;p&gt;As we embark on this exploration, it&amp;rsquo;s with a heavy heart that we acknowledge
the passing of Vim&amp;rsquo;s creator, &lt;a href="https://en.wikipedia.org/wiki/Bram_Moolenaar"&gt;Bram Moolenaar&lt;/a&gt;, on August 3rd, 2023.
His legacy lives on, not just in the lines of code that make up Vim, but also
in the countless lives he touched through his creation.&lt;/p&gt;
&lt;h2 id="the-beginnings-a-quest-for-workflow-optimization"&gt;The Beginnings: A Quest for Workflow Optimization&lt;/h2&gt;
&lt;p&gt;Four years ago, I embarked on a journey to streamline my workflow. As a coder,
writer, and general text manipulator, I was seeking a tool that could handle
all these tasks seamlessly. That&amp;rsquo;s when I stumbled upon Vim. Initially, it was
the promise of optimized workflow that drew me in, but little did I know that
Vim would become more than just a tool, it would become an integral part of my
digital existence.&lt;/p&gt;
&lt;h2 id="embracing-vim-more-than-just-an-editor"&gt;Embracing Vim: More Than Just an Editor&lt;/h2&gt;
&lt;p&gt;Vim&amp;rsquo;s learning curve was steeper than I had anticipated. The modal editing,
where different modes serve different functions, seemed counterintuitive at
first. But as I invested time in learning its intricacies, I began to see the
genius behind Vim&amp;rsquo;s design. The efficiency of navigation through the HJKL keys
and the power of extending its capabilities through plugins were revelations
that changed how I approached text manipulation.&lt;/p&gt;
&lt;p&gt;What amazed me even more was how Vim challenged my preconceived notions about
intuitive interfaces. While some interfaces are immediately graspable, Vim
showed me that spending time with software can transform it into an extension
of oneself. Vim ceased to be just a text editor, it became a part of my digital
identity, a testament to the idea that complexity can lead to mastery.&lt;/p&gt;
&lt;h2 id="a-personal-conclusion"&gt;A Personal Conclusion&lt;/h2&gt;
&lt;p&gt;In conclusion, Vim isn&amp;rsquo;t just a text editor; it&amp;rsquo;s a philosophy of interaction.
It&amp;rsquo;s a reminder that embracing complexity can lead to empowerment. My journey
with Vim has transformed how I perceive interfaces, software, and the act of
creation itself. Vim isn&amp;rsquo;t for everyone, but for those who dare to dive into
its depths, it offers a world of possibilities and a newfound perspective on
what software can be.&lt;/p&gt;
&lt;p&gt;As you consider your own tools and workflows, take a moment to ponder: could
Vim&amp;rsquo;s approach enhance your productivity and reshape your relationship with
your digital creations?&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.vim.org/"&gt;Vim - The official website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/1220118"&gt;Your problem with Vim is that you don&amp;rsquo;t grok vi.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ayc_qpB-93o"&gt;Vim 25 presentation by Bram Moolenaar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.blog/2017/05/23/stack-overflow-helping-one-million-developers-exit-vim/"&gt;Stack Overflow: Helping One Million Developers Exit Vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twobithistory.org/2018/08/05/where-vim-came-from.html"&gt;History of Vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscodevim.vim"&gt;VSCode Vim Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vimium.github.io/"&gt;Vimium - Vim-like Browser Extension for Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/learn-linux-vim-basic-features-19134461ab85/"&gt;Learning Vim in a Week&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vim-adventures.com/"&gt;The Vim Adventure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Mastering Gmail: Unveiling the Infinite Gmail Glitch</title><link>https://dhancodes.github.io/blog/email-glitch/</link><guid>https://dhancodes.github.io/blog/email-glitch/</guid><pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In today&amp;rsquo;s digital age, email has become an indispensable part of our lives.
Among the various email service providers, Gmail stands out as one of the most
popular platforms. Many users are unaware of a powerful set of
features that Gmail offers, which can be collectively referred to as the
&amp;ldquo;Infinite Gmail Glitch.&amp;rdquo; In this blog, we will delve into the two main methods
that unlock a world of possibilities with your Gmail account. Let&amp;rsquo;s explore how
you can create an infinite number of Gmail addresses and make email management
a breeze!&lt;/p&gt;
&lt;h2 id="method-1-the-plus-sign-trick"&gt;Method 1: The Plus Sign Trick&lt;/h2&gt;
&lt;p&gt;The first trick involves using the plus sign in your Gmail address. Most people
are not aware that Gmail ignores anything after the plus sign, considering the
email address to be the part before it. For instance, if your Gmail ID is
&lt;code&gt;yourname@gmail.com&lt;/code&gt;, then all the following addresses will also belong to you:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;yourname+facebook@gmail.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yourname+amazon@gmail.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yourname+RANDOM@gmail.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yourname+maths101@gmail.com&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This method offers an array of benefits. One of the most useful applications is
&lt;strong&gt;automatic filtering and labeling&lt;/strong&gt; of emails. By using these variations when
signing up on different websites or services, you can easily create filters and
labels to organize your incoming emails systematically.&lt;/p&gt;
&lt;h2 id="method-2-the-dot-and-case-ignorance"&gt;Method 2: The Dot and Case Ignorance&lt;/h2&gt;
&lt;p&gt;Gmail is particularly lenient when it comes to dots (periods) and case
variations in your email address. Essentially, Gmail disregards any dots and
treats upper and lower case letters as the same. For example, if your email
address is &lt;code&gt;yourname@gmail.com&lt;/code&gt;, then &lt;code&gt;YoUr.NaMe@gmail.com&lt;/code&gt; is also your email
address.&lt;/p&gt;
&lt;p&gt;With this method, you can effortlessly generate &lt;strong&gt;email aliases&lt;/strong&gt; without
creating new accounts. It&amp;rsquo;s an ideal way to keep track of which websites or
services are sharing your email address and can be a useful tool in managing
your online presence.&lt;/p&gt;
&lt;h2 id="use-cases"&gt;Use Cases:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Streamlined Email Organization&lt;/strong&gt;: By using the plus sign trick, you can have specific variations for each website or service you sign up for. Then, set up filters and labels to automatically categorize incoming emails, making it easier to identify their source and purpose. You can learn more about creating advanced filters &lt;a href="https://support.google.com/a/users/answer/9300019?hl=en"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sign-ups&lt;/strong&gt;: You can use different aliases to sign up for newsletters, subscriptions, or online forms without disclosing your primary email address. This helps in reducing spam and clutter in your primary inbox.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Quick Identification of Email Sources&lt;/strong&gt;: By creating aliases based on the context, you can immediately recognize which websites or contacts are sending you emails. This can be particularly helpful in professional and personal settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Dump Address&lt;/strong&gt;: Create a specific Gmail alias like &lt;code&gt;yourname+spam@gmail.com&lt;/code&gt; and use it when you&amp;rsquo;re unsure whether the service you are signing up for will send you spam.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;With the Infinite Gmail Glitch, you can take full advantage of Gmail&amp;rsquo;s powerful
features to manage your emails with ease and efficiency. The plus sign trick
and dot/case insensitivity are valuable tools for creating aliases, automating
email organization, and maintaining a clean inbox. So, embrace these hacks and
unlock the true potential of your Gmail account! Happy emailing!&lt;/p&gt;</description></item><item><title>Mastering LaTeX: Three Tips for Efficient Typesetting</title><link>https://dhancodes.github.io/blog/mastering-latex/</link><guid>https://dhancodes.github.io/blog/mastering-latex/</guid><pubDate>Mon, 31 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;LaTeX is a powerful typesetting tool widely used in academic and scientific
fields for creating professional documents. If you&amp;rsquo;re new to LaTeX, don&amp;rsquo;t
worry! In this blog, we&amp;rsquo;ll explore three essential tips to help you make the
most of LaTeX and elevate your document preparation skills. Let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id="uno-create-a-preamble-template"&gt;Uno: Create a Preamble Template&lt;/h2&gt;
&lt;p&gt;The preamble in a LaTeX document is the section before &lt;code&gt;\begin{document}&lt;/code&gt; that
contains important settings and customizations. A smart way to streamline your
work is by creating a preamble template tailored to different types of
documents, such as slides, articles, and books. By doing so, you save time and
ensure consistency across your LaTeX projects. To utilize these templates, you
can simply call them using the &lt;code&gt;\input{preamble}&lt;/code&gt; command in your main
document.&lt;/p&gt;
&lt;p&gt;For example, you can create preamble.tex, and then in your main document file
(e.g., article.tex), you would use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\documentclass&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;article&lt;span class="nb"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;% Load the preamble from the separate file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\input&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;preamble&lt;span class="nb"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\begin&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;document&lt;span class="nb"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;% Your content goes here
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\end&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;document&lt;span class="nb"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="dos-define-custom-commands"&gt;Dos: Define Custom Commands&lt;/h2&gt;
&lt;p&gt;LaTeX allows you to define custom commands, making it a breeze to create
shortcuts for frequently used symbols or complex expressions. Instead of
writing lengthy equations repeatedly, you can use the &lt;code&gt;\newcommand&lt;/code&gt; and
&lt;code&gt;\renewcommand&lt;/code&gt; macros to create your own custom shortcuts. It&amp;rsquo;s a good
practice to use &lt;code&gt;\ensuremath&lt;/code&gt; within the command definitions to allow seamless
usage both in and outside of math mode. With this technique, you can skip
wrapping symbols with &lt;code&gt;$...$&lt;/code&gt; or &lt;code&gt;\(...\)&lt;/code&gt; each time you need them.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re uncertain whether a command already exists, you can use
&lt;code&gt;\providecommand&lt;/code&gt;, which creates the command only if it doesn&amp;rsquo;t already exist.
Also, consider using semantic names for your custom commands. For example,
instead of &lt;code&gt;\x&lt;/code&gt;, consider a more descriptive name like &lt;code&gt;\variableX&lt;/code&gt; , so it&amp;rsquo;s easier
to understand the purpose of the command when reviewing your document later.&lt;/p&gt;
&lt;p&gt;Here are some examples of custom commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand\varx&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathpzc&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;x&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand\NN&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;N&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\renewcommand\O&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\emptyset&lt;/span&gt;&lt;span class="nb"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand\QQ&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;Q&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand\CC&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;C&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand\FF&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;F&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\newcommand&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\m&lt;/span&gt;&lt;span class="nb"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathfrak&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;m&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;\renewcommand&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\S&lt;/span&gt;&lt;span class="nb"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\ensuremath&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathcal&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;S&lt;span class="nb"&gt;}}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tres-find-your-favorite-editor"&gt;Tres: Find Your Favorite Editor&lt;/h2&gt;
&lt;p&gt;One of the great things about LaTeX is its compatibility with various text
editors. Finding an editor that suits your preferences and workflow can
significantly enhance your LaTeX experience. Some popular LaTeX editors
include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TeXstudio&lt;/strong&gt;: An open-source cross-platform LaTeX editor with an integrated PDF viewer and advanced editing features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Visual Studio Code with LaTeX Workshop&lt;/strong&gt;: If you prefer a versatile code editor, VS Code with the LaTeX Workshop extension is a popular choice with its extensive features and customizable options.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Emacs with AUCTeX&lt;/strong&gt;: Emacs is a powerful text editor with AUCTeX, providing a comprehensive LaTeX editing environment for seasoned Emacs users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vim with Vimtex&lt;/strong&gt;: For users who love the efficiency of Vim, Vimtex is a fantastic plugin that brings powerful LaTeX editing capabilities to Vim. With features like automatic compilation, integrated PDF viewing, and advanced syntax highlighting, Vimtex offers a seamless LaTeX editing experience within the Vim text editor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TeXShop (macOS)&lt;/strong&gt;: A user-friendly LaTeX editor for macOS users with built-in tools for typesetting and previewing documents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Overleaf&lt;/strong&gt;: A web-based collaborative LaTeX editor that allows real-time collaboration and access to a vast library of templates.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Experiment with different editors to find the one that suits your needs best.
Each editor offers unique features, plugins, and customization options that can
make your LaTeX workflow more efficient and enjoyable.&lt;/p&gt;
&lt;h2 id="bonus"&gt;Bonus:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://detexify.kirelabs.org/classify.html"&gt;Detexify&lt;/a&gt; is a valuable online
tool that comes to the rescue when you can&amp;rsquo;t
remember the exact LaTeX command for a particular symbol. It allows you to draw
the symbol on its website, and in return, Detexify provides you with the
corresponding LaTeX command. This comes in handy when you encounter uncommon
symbols or need a quick reference for the LaTeX notation. Embrace Detexify as
your LaTeX symbol-finding companion!&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;Mastering LaTeX is all about optimizing your workflow and leveraging the
capabilities it offers. Embrace these tips, practice regularly, and soon you&amp;rsquo;ll be a
LaTeX pro! Happy typesetting!&lt;/p&gt;
&lt;h2 id="some-references"&gt;Some References:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://en.wikibooks.org/wiki/LaTeX"&gt;LaTeX Wikibook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For a detailed Introduction to LaTeX see &lt;a href="http://tobi.oetiker.ch/lshort/lshort.pdf"&gt;The Not So Short Introduction to LATEX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;See some templates on &lt;a href="https://www.latextemplates.com/"&gt;https://www.latextemplates.com/&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Typography Tales: The Curious case of lorem ipsum!</title><link>https://dhancodes.github.io/blog/lorem-ipsum/</link><guid>https://dhancodes.github.io/blog/lorem-ipsum/</guid><pubDate>Thu, 20 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;Have you ever wondered about the cryptic text that designers and publishers use
as a placeholder in their work? This mysterious text, known as &amp;ldquo;Lorem ipsum,&amp;rdquo;
has a fascinating history that dates back centuries. Join me on a journey as we
delve into the world of Lorem ipsum, uncovering its true origins and
understanding why it continues to be an essential part of the design process.
Additionally, we&amp;rsquo;ll explore some compelling alternatives to Lorem ipsum that
designers can consider for their projects.&lt;/p&gt;
&lt;h2 id="lorem-ipsum-the-meaning-and-origins"&gt;Lorem ipsum: The Meaning and Origins:&lt;/h2&gt;
&lt;p&gt;As we explore the enigmatic roots of Lorem ipsum, we find that it is derived
from the Latin philosophical work &amp;ldquo;&lt;a href="https://en.wikipedia.org/wiki/De_finibus_bonorum_et_malorum"&gt;De finibus bonorum et
malorum&lt;/a&gt;&amp;rdquo; written
by Cicero, a renowned Roman philosopher from ancient times. However, the Lorem
ipsum we know today is a corrupted version, with some words omitted and
nonsensical additions. Ironically, the first two words, &amp;ldquo;Lorem ipsum,&amp;rdquo; can be
traced back to the phrase &amp;ldquo;dolorem ipsum,&amp;rdquo; meaning &amp;ldquo;pain itself&amp;rdquo; in Latin.&lt;/p&gt;
&lt;h2 id="the-purpose-behind-its-usage"&gt;The Purpose Behind its Usage:&lt;/h2&gt;
&lt;p&gt;The use of Lorem ipsum as a placeholder text is not merely a random choice. In
the world of publishing and graphic design, creating layouts before the actual
content is available is a common practice. However, using random text would
fail to mimic the natural flow of language and might misrepresent the design&amp;rsquo;s
final appearance. The familiarity and structure of Lorem ipsum enable designers
to maintain the intended aesthetics and readability during the design phase.&lt;/p&gt;
&lt;h2 id="a-digital-revolution-lorem-ipsum-in-the-modern-age"&gt;A Digital Revolution: Lorem Ipsum in the Modern Age:&lt;/h2&gt;
&lt;p&gt;Although Lorem ipsum has been employed in typesetting since the 1960s, its
digital journey began in the mid-1980s. Aldus, the pioneering company behind
the popular desktop publishing program
&lt;a href="https://en.wikipedia.org/wiki/Adobe_PageMaker"&gt;PageMaker&lt;/a&gt;, introduced Lorem
ipsum to the digital world. Over time, many other word processors, including
Pages and Microsoft Word, have embraced this quirky placeholder text, making it
a ubiquitous part of the design process.&lt;/p&gt;
&lt;h2 id="the-unique-properties-of-lorem-ipsum"&gt;The Unique Properties of Lorem Ipsum:&lt;/h2&gt;
&lt;p&gt;While Lorem ipsum has become a standard choice for designers, it is not the
only placeholder text option available. Its properties are not entirely unique,
allowing for alternative replacements. In this section, we&amp;rsquo;ll explore some
compelling alternatives to Lorem ipsum, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://baconipsum.com/"&gt;Bacon Ipsum&lt;/a&gt;: A mouthwatering alternative that generates text with a focus on various types of bacon.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cupcakeipsum.com/"&gt;Cupcake Ipsum&lt;/a&gt;: A sweet and delightful option that fills your layout with cupcake-themed text.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hipsum.co/"&gt;Hipster Ipsum&lt;/a&gt;: For a touch of hipster flair, this alternative generates text with a trendy and artistic vibe.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pirateipsum.me/"&gt;Pirate Ipsum&lt;/a&gt;: Arrr! This fun alternative injects your design with some swashbuckling pirate-themed text.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zombieipsum.com/"&gt;Zombie Ipsum&lt;/a&gt;: A spooktacular option that fills your layout with zombie-inspired gibberish.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While Lorem ipsum continues to be a popular choice, designers now have exciting
alternatives to explore, allowing them to inject creativity and uniqueness into
their projects.&lt;/p&gt;</description></item><item><title>Mastering SSH: Tips and Tricks for Efficient Remote Connections</title><link>https://dhancodes.github.io/blog/ssh-tips/</link><guid>https://dhancodes.github.io/blog/ssh-tips/</guid><pubDate>Sat, 15 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH&lt;/a&gt; (Secure Shell) is a powerful tool for establishing secure remote
connections and executing commands on remote computers. In this blog post, we
will explore some essential tips and tricks to enhance your SSH experience and
make your remote connections more efficient and secure.&lt;/p&gt;
&lt;h2 id="tip-1-use-ssh-keys-not-passwords"&gt;Tip 1: Use SSH Keys! Not Passwords!&lt;/h2&gt;
&lt;p&gt;One of the best practices in SSH is to use SSH keys instead of passwords for
authentication. SSH keys provide stronger security and eliminate the need to
remember and enter passwords each time you connect to a remote server.
Additionally, you can further enhance security by disabling password
authentication altogether.&lt;/p&gt;
&lt;p&gt;To generate an SSH key pair, open a terminal and run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -f ~/.ssh/&amp;lt;filename&amp;gt; -t ed25519 -a &lt;span class="m"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt; with the desired name for your key pair. This command
generates an Ed25519 key with a key derivation function (KDF) cost factor of
100.&lt;/p&gt;
&lt;p&gt;Instead of Ed25519 we can use &lt;code&gt;-t rsa -b 2048&lt;/code&gt;, it uses RSA (Rivest-Shamir-Adleman) is
an older algorithm that has been widely used for decades and is considered
secure when using a sufficiently large key size, such as 2048 bits or higher.
Ed25519, on the other hand, is a relatively new algorithm based on elliptic
curve cryptography (ECC) and is designed to be more efficient and secure with a
shorter key lengths.&lt;/p&gt;
&lt;h2 id="tip-2-copy-ssh-public-key-to-remote-server"&gt;Tip 2: Copy SSH Public Key to Remote Server&lt;/h2&gt;
&lt;p&gt;After generating your SSH key pair, you need to copy the public key to the
remote server to enable passwordless authentication. Use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-copy-id -i ~/.ssh/&amp;lt;filename&amp;gt;.pub user@domain
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt; with the actual name of your key pair and provide the
appropriate username and domain for the remote server. This command securely
transfers the public key and adds it to the &lt;code&gt;authorized_keys&lt;/code&gt; file on the
remote server.&lt;/p&gt;
&lt;h2 id="tip-3-utilize-ssh-agent-for-key-management"&gt;Tip 3: Utilize ssh-agent for Key Management&lt;/h2&gt;
&lt;p&gt;If you encounter issues while connecting to the remote server even after
setting up SSH keys, it might be due to the key not being added to the
ssh-agent. The ssh-agent is a program that holds private keys in memory,
allowing you to use them without entering a passphrase repeatedly.&lt;/p&gt;
&lt;p&gt;To add your private key to the ssh-agent, use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-add ~/.ssh/&amp;lt;filename&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt; with the actual name of your private key. This command
adds the private key to the ssh-agent, and you can use the &lt;code&gt;-A&lt;/code&gt; option to
forward the same keys to the remote host upon login.&lt;/p&gt;
&lt;h2 id="tip-4-simplify-ssh-connections-with-the-config-file"&gt;Tip 4: Simplify SSH Connections with the Config File&lt;/h2&gt;
&lt;p&gt;Manually specifying connection details for each SSH session can become
cumbersome. To simplify the process, you can use the SSH config file to define
host-specific configurations.&lt;/p&gt;
&lt;p&gt;Open the SSH config file located at &lt;code&gt;~/.ssh/config&lt;/code&gt; and add the following
configuration:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Host RemoteHost
	HostName &amp;lt;ip-address&amp;gt;
	IdentityFile ~/.ssh/&amp;lt;filename&amp;gt;
	User &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;ip-address&amp;gt;&lt;/code&gt; with the IP address or domain name of the remote host, &lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt; with the actual name of your private key, and &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; with the username on the remote server.&lt;/p&gt;
&lt;p&gt;By defining these configurations, you can establish an SSH connection to the remote host simply by running &lt;code&gt;ssh RemoteHost&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="tip-5-disable-password-authentication"&gt;Tip 5: Disable Password Authentication&lt;/h2&gt;
&lt;p&gt;After setting up your SSH key pair, it&amp;rsquo;s essential to disable password
authentication to enforce key-based authentication. Follow these steps to
disable password authentication:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the SSH server configuration file on the remote server. The file is usually located at &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Look for the line that specifies &lt;code&gt;PasswordAuthentication&lt;/code&gt; and change its value to &lt;code&gt;no&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save the changes and exit the editor.&lt;/li&gt;
&lt;li&gt;Restart the SSH service on the remote server for the changes to take effect.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With password authentication disabled, you can now connect to the remote server
using only your SSH key, providing an extra layer of security for your SSH
connections.&lt;/p&gt;
&lt;p&gt;Remember to keep your private key secure and use a strong passphrase when
generating the key pair. Additionally, ensure that you have a backup of your
private key to avoid any potential data loss.&lt;/p&gt;
&lt;h2 id="bonus-tip-boost-productivity-with-tmux"&gt;Bonus Tip: Boost Productivity with Tmux&lt;/h2&gt;
&lt;p&gt;Tmux is a terminal multiplexer that allows you to manage multiple terminal
sessions within a single SSH connection. It enables you to split the terminal
window, create multiple panes, and switch between them effortlessly.&lt;/p&gt;
&lt;p&gt;To install Tmux, use the appropriate package manager for your operating system.
Once installed, you can start a new Tmux session by running &lt;code&gt;tmux&lt;/code&gt; in your SSH
terminal. Refer to the earlier section in this blog for essential Tmux
commands.&lt;/p&gt;</description></item><item><title>Embracing Freedom: Git vs GitHub in the Microsoft Era</title><link>https://dhancodes.github.io/blog/git-vs-github/</link><guid>https://dhancodes.github.io/blog/git-vs-github/</guid><pubDate>Fri, 07 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the world of software development, Git and GitHub are two popular tools that
often go hand in hand. However, it&amp;rsquo;s essential to understand their distinctions
and how they serve different purposes in the development workflow. This blog
post aims to clarify the differences between Git and GitHub, their unique
functionalities, and the scenarios in which each tool shines.&lt;/p&gt;
&lt;h2 id="git-the-stupid-content-tracker"&gt;Git: The stupid content tracker&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt;, a distributed version control system, has
revolutionized the way software development teams collaborate and manage source
code.&lt;/p&gt;
&lt;p&gt;Git development commenced in April 2005 when Linus Torvalds, known for creating
Linux, decided to create a new source-control management (SCM) system.
Interestingly, Torvalds playfully explained that he named it &amp;ldquo;git&amp;rdquo; after
himself, as he tends to name his projects in such a manner. The term &amp;ldquo;git&amp;rdquo; has
multiple meanings depending on one&amp;rsquo;s interpretation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A random, pronounceable three-letter combination that does not conflict with any existing UNIX command. It could be considered a mispronunciation of &amp;ldquo;get,&amp;rdquo; although the relevance of this is debatable.&lt;/li&gt;
&lt;li&gt;Descriptive adjectives like &amp;ldquo;stupid,&amp;rdquo; &amp;ldquo;contemptible,&amp;rdquo; &amp;ldquo;despicable,&amp;rdquo; and &amp;ldquo;simple&amp;rdquo; from the dictionary of slang. One can choose the interpretation that suits their mood.&lt;/li&gt;
&lt;li&gt;In a positive light, &amp;ldquo;git&amp;rdquo; stands for &amp;ldquo;Global Information Tracker.&amp;rdquo; This definition implies that everything is working smoothly, bringing joy and illumination to the user.&lt;/li&gt;
&lt;li&gt;On the other hand, in moments of frustration, &amp;ldquo;git&amp;rdquo; may stand for &amp;ldquo;Goddamn Idiotic Truckload of Sh*t&amp;rdquo; when encountering issues or failures.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The source code itself humorously refers to Git as &amp;ldquo;the information manager
from hell.&amp;rdquo; The motivation behind creating Git arose when the free license for
the proprietary SCM, BitKeeper, was revoked for Linux kernel development in 2002. This incident prompted Torvalds to develop a new, efficient, and
open-source SCM system, which eventually became Git.&lt;/p&gt;
&lt;h2 id="github-join-the-microsoft-empire-one-commit-at-a-time"&gt;Github: Join the Microsoft Empire, One Commit at a Time.&lt;/h2&gt;
&lt;p&gt;GitHub is a web-based hosting service for Git repositories. It provides a
platform for collaboration, version control, and code management.&lt;/p&gt;
&lt;p&gt;Although GitHub is a widely used platform for hosting Git repositories, it&amp;rsquo;s
important to remember that GitHub is not Git itself. Git is a distributed
version control system that can be hosted independently. If you prefer to have
complete control over your repositories, you have the option to host your own
Git service. You can find guidance on setting up your own server by referring
to the link
&lt;a href="https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Furthermore, there are alternative hosting platforms available, such as
&lt;a href="https://bitbucket.org"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://gitlab.com"&gt;GitLab&lt;/a&gt;, which
offer similar functionalities to GitHub. These alternatives provide additional
choices for hosting and collaborating on Git repositories.&lt;/p&gt;
&lt;p&gt;Another option to explore is &lt;a href="https://en.wikibooks.org/wiki/Git/Repository_on_a_USB_stick"&gt;USB-based hosting&lt;/a&gt;,
providing a portable solution for managing your Git repositories. This approach
is particularly useful for carrying code changes between different computers.
However, it&amp;rsquo;s important to be aware of a significant drawback: relying solely
on a USB drive for hosting repositories puts your code and data at risk. If the
USB drive is lost or misplaced, you could potentially lose your valuable work.
While USB-based hosting may not be ideal for collaborative work, it serves as a
convenient method for transferring code changes across machines.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Ultimately, the decision between Git, GitHub, or alternative hosting solutions
depends on factors like collaboration requirements, customization needs, and
individual preferences.&lt;/p&gt;
&lt;p&gt;Remember, in the vast world of version control and code collaboration, the
power lies in your hands. Choose the solution that best aligns with your
values, goals, and vision for your projects, regardless of the corporate forces
at play. Stay independent, stay innovative, and keep pushing the boundaries with
your code.&lt;/p&gt;</description></item><item><title>Exploring Fediverse: An Alternative to Centralized Social Media</title><link>https://dhancodes.github.io/blog/fediverse/</link><guid>https://dhancodes.github.io/blog/fediverse/</guid><pubDate>Thu, 06 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;The Fediverse is an innovative approach to web publishing that challenges the
traditional model of centralized social media platforms. Instead of relying on
a single organization to govern the entire network, the Fediverse consists of a
collection of interconnected servers called instances. These instances enable
users to create identities and communicate across instance boundaries,
promoting decentralization, freedom of expression, and resistance to
censorship.&lt;/p&gt;
&lt;h2 id="key-features-of-the-fediverse"&gt;Key Features of the Fediverse:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decentralization:&lt;/strong&gt; The absence of a central authority in the Fediverse ensures that no single entity has complete control over the network. This decentralized structure prevents censorship and regulation from being imposed uniformly across all instances.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Freedom of Choice:&lt;/strong&gt; Users in the Fediverse have the freedom to choose the content they wish to engage with. By selectively linking with instances that align with their values and regulations, users can curate their online experience based on their preferences.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="ostatus-protocol-and-mastodon"&gt;Ostatus Protocol and &lt;a href="https://mastodon.social/explore"&gt;Mastodon&lt;/a&gt;:&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/OStatus"&gt;Ostatus protocol&lt;/a&gt;, introduced in 2008, is a notable example of a federated
microblogging protocol used within the Fediverse. Platforms like &lt;a href="https://mastodon.social/explore"&gt;Mastodon&lt;/a&gt; and
GNU Social have adopted this protocol to create decentralized social media
experiences. &lt;a href="https://mastodon.social/explore"&gt;Mastodon&lt;/a&gt;, in particular, has gained popularity due to its
similarities to Twitter, attracting users seeking an alternative to centralized
platforms.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/explore"&gt;Mastodon&lt;/a&gt; offers the ability to host self-owned instances, ensuring that no
single individual or organization can monopolize the narrative on the platform.
This feature empowers users and promotes a diverse range of voices and
perspectives.&lt;/p&gt;
&lt;h2 id="the-ambiguous-thread-narrative"&gt;The Ambiguous Thread Narrative:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=threadmeta"&gt;Thread&lt;/a&gt;, a new product from Meta (formerly Facebook), claims to be a part of the
Fediverse but lacks transparency regarding instance creation and overall
policies. Without clarity on these crucial aspects, it is uncertain how Thread
will employ regulations and ensure user freedoms. While this development may
introduce more people to the concept of the Fediverse and open-source social
networks, there are concerns about potential mismanagement or a departure from
the core principles of openness and decentralization.&lt;/p&gt;
&lt;h2 id="additional-alternatives-to-social-medias-in-the-fediverse"&gt;Additional Alternatives to Social medias in the Fediverse:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=Pixelfed"&gt;Pixelfed:&lt;/a&gt; Pixelfed is a federated image-sharing platform inspired by Instagram. It focuses on privacy and decentralization, allowing users to self-host their instances and share photos with others in the Fediverse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=PeerTube"&gt;PeerTube:&lt;/a&gt; PeerTube is a decentralized video hosting platform that enables users to host and share videos in a federated manner. It offers an alternative to centralized video platforms like YouTube, allowing users to control their content and participate in a broader network of instances.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=WriteFreely"&gt;WriteFreely:&lt;/a&gt; WriteFreely is a federated blogging platform that promotes decentralized publishing and individual ownership of content. It allows users to create self-hosted blogs and interact with other bloggers across instances.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=Funkwhale"&gt;Funkwhale:&lt;/a&gt; Funkwhale is a federated music sharing platform that focuses on promoting independent artists and decentralized music streaming. It allows users to create their music libraries, playlists, and share music with others in the Fediverse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.google.com/search?q=Misskey"&gt;Misskey:&lt;/a&gt; Misskey is a decentralized social media platform that emphasizes user privacy and control. It offers features such as customizable timelines, self-hosting options, and robust moderation tools.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These alternatives within the Fediverse offer diverse social media experiences while upholding principles of decentralization, user autonomy, and resistance to censorship. Exploring these platforms can help individuals find the one that aligns with their values and preferences.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;The Fediverse presents a compelling alternative to centralized social media
platforms. By leveraging interconnected instances and prioritizing user
autonomy, the Fediverse encourages freedom of expression, resists censorship,
and allows individuals to shape their online experiences. Platforms like
&lt;a href="https://mastodon.social/explore"&gt;Mastodon&lt;/a&gt; have demonstrated the feasibility and appeal of decentralized social
networking, while the emergence of Thread raises questions about how a
centralized entity will navigate the principles and benefits of the Fediverse.
As the landscape of online social interaction continues to evolve, exploring
decentralized alternatives can empower users and foster a more open and
inclusive digital ecosystem.&lt;/p&gt;</description></item><item><title>Google Alerts: Your Personalized Information Radar</title><link>https://dhancodes.github.io/blog/google-alerts/</link><guid>https://dhancodes.github.io/blog/google-alerts/</guid><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the vast realm of the internet, it&amp;rsquo;s easy to feel overwhelmed and miss out
on important updates. But fear not! Google Alerts is here to be your trusty
information radar. This powerful service provided by Google allows you to
effortlessly track specific keywords and receive timely notifications whenever
new content related to those keywords appears online.&lt;/p&gt;
&lt;p&gt;With Google Alerts, you can effortlessly track specific keywords and receive
email notifications or set up an RSS feed whenever new articles or content
related to those keywords appear online.&lt;/p&gt;
&lt;h2 id="how-to-set-up-a-google-alert"&gt;How to Set Up a Google Alert:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Visit the &lt;a href="https://www.google.com/alerts"&gt;Google Alerts&lt;/a&gt; website.&lt;/li&gt;
&lt;li&gt;Enter the keyword or phrase you want to monitor in the search box.&lt;/li&gt;
&lt;li&gt;Customize your alert settings, including language, region, sources, frequency, and result types.&lt;/li&gt;
&lt;li&gt;Choose your preferred delivery method: email or RSS feed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Setting up Google Alerts requires a Google account&lt;/p&gt;</description></item><item><title>Dive into Podcasts: Your Audio Escape from Algorithms</title><link>https://dhancodes.github.io/blog/dive-into-podcasts/</link><guid>https://dhancodes.github.io/blog/dive-into-podcasts/</guid><pubDate>Thu, 22 Jun 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In today&amp;rsquo;s digital age, where algorithms dominate our online experiences,
breaking free from the monotony and discovering meaningful content can be a
challenge. Welcome to the world of podcasts, where audio-driven programs offer
an escape from the algorithmic mold. Whether you&amp;rsquo;re on a boring bus journey or
stuck in a long queue, podcasts have the power to transform these moments into
valuable opportunities for learning and entertainment. In this blog, we&amp;rsquo;ll
explore what podcasts are, how to get started, and why they have become such a
popular medium for engaging with diverse topics.&lt;/p&gt;
&lt;h2 id="what-is-a-podcast"&gt;What is a Podcast?&lt;/h2&gt;
&lt;p&gt;At its core, a podcast is an audio-oriented program that you can subscribe to
and listen to at your convenience. It&amp;rsquo;s like having your own personalized radio
station, offering a vast array of content on a wide range of subjects. Unlike
traditional radio shows, podcasts are not bound by specific time slots and can
be enjoyed anytime, anywhere.&lt;/p&gt;
&lt;h2 id="how-to-get-started"&gt;How to Get Started:&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 0:&lt;/strong&gt; Choose a Podcast App
To embark on your podcasting journey, you&amp;rsquo;ll need to select a podcast app.
While popular options like Spotify, Google Podcasts, and Amazon Music are
available, I recommend considering AnthenaPod, an open-source alternative that
provides a customizable and user-friendly experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Find Podcasts You Like
Discovering podcasts aligned with your interests can be an exciting yet
challenging endeavor. You can begin by searching online platforms or seeking
recommendations from friends who share similar tastes. There are podcasts
available on almost every subject imaginable, from true crime and history to
comedy, education, and self-improvement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Add Podcasts to Your App
Once you&amp;rsquo;ve found podcasts that resonate with you, it&amp;rsquo;s time to add them to
your chosen podcast app. This process may vary slightly depending on the app
you&amp;rsquo;re using, but the general steps remain similar across platforms. Look for
an &amp;ldquo;Add&amp;rdquo; or &amp;ldquo;Subscribe&amp;rdquo; button within the app, and enter the podcast&amp;rsquo;s name or
its associated RSS feed to add it to your library.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;Podcasts have revolutionized the way we consume audio content, offering a
refreshing departure from algorithmic recommendations. By exploring diverse
topics, discovering engaging hosts, and subscribing to thought-provoking
podcasts, you can transform mundane moments into meaningful experiences. So,
embrace the world of podcasting and embark on a journey of knowledge,
entertainment, and connection, one episode at a time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS: If you want me to make a list of podcasts I like let me know.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Exploring the World of Torrents: Why Choose Torrenting?</title><link>https://dhancodes.github.io/blog/world-of-torrents/</link><guid>https://dhancodes.github.io/blog/world-of-torrents/</guid><pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In a world dominated by centralized servers, torrents stand as a unique and
alternative method of file sharing. Unlike traditional server-based downloads,
torrents rely on distributed sharing, allowing users to simultaneously download
and host (seed) content. This decentralized approach offers numerous
advantages, particularly in terms of scalability and resilience. In this blog
post, we&amp;rsquo;ll delve into the world of torrents, explore their benefits, and learn
how to utilize this technology for efficient and seamless file sharing.&lt;/p&gt;
&lt;h2 id="how-to-get-started-with-torrenting"&gt;How to Get Started with Torrenting:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Choosing the Right Torrent Client: To begin your torrenting journey, you&amp;rsquo;ll need a reliable torrent client. There are several options available, but one popular choice is qBittorrent. It provides a user-friendly interface and robust features for managing your torrent downloads.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Acquiring the Magnet Link: To initiate a torrent download, you&amp;rsquo;ll need the magnet link associated with the desired file. Magnet links are often provided by software applications and can typically be found in their Downloads section or on dedicated websites for torrents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Embrace the Power of Seeding: Once you&amp;rsquo;ve downloaded a file using a torrent, you have the opportunity to contribute to the torrenting ecosystem by seeding. Seeding involves keeping the downloaded content available for other users to download, thus reducing the reliance on centralized servers and ensuring the availability of the file in the torrent network.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="why-choose-torrenting"&gt;Why Choose Torrenting?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Decentralization and Resilience: Torrenting eliminates the dependence on centralized servers, making it more resilient to server failures and bandwidth limitations. With a torrent, as the number of users increases, the overall download speed improves, ensuring efficient distribution of files even in high-demand scenarios.&lt;/li&gt;
&lt;li&gt;P2P Efficiency: Peer-to-peer (P2P) technology lies at the core of torrenting, enabling users to share files directly with one another. This eliminates the need for a single server to handle all download requests, resulting in faster downloads and optimized bandwidth usage.&lt;/li&gt;
&lt;li&gt;Freedom and Anonymity: Torrenting offers a level of privacy and anonymity, as your IP address is not directly exposed to the server. While it&amp;rsquo;s important to exercise caution and ensure legal usage of torrents, the decentralized nature of torrenting provides a certain level of privacy and protection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;
As you explore the world of torrents, embrace the benefits and enjoy the
seamless sharing experience it offers. Happy torrenting!&lt;/p&gt;</description></item><item><title>3 Ways to Be Better at Shell Scripting</title><link>https://dhancodes.github.io/blog/being-better-at-scripting/</link><guid>https://dhancodes.github.io/blog/being-better-at-scripting/</guid><pubDate>Sun, 04 Jun 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the journey of Homo sapiens, we have constantly sought to simplify our daily
lives. Automation has become the epitome of intelligence, and scripting plays a
crucial role in achieving that automation. In this blog post, we will delve
into the art of scripting and explore three ways to enhance your skills as a
command-line Jedi.&lt;/p&gt;
&lt;h2 id="more-macho-man-is-here-tldr-and-cheatsh"&gt;More Macho Man is Here: TLDR and Cheat.sh&lt;/h2&gt;
&lt;p&gt;If you find yourself frustrated with lengthy and complex man pages, fear not!
TLDR (Too Long; Didn&amp;rsquo;t Read) and &lt;a href="https://cheat.sh"&gt;cheat.sh&lt;/a&gt; come to your rescue. TLDR provides
concise and practical help pages, while Cheat.sh is a website
packed with numerous examples. You can even integrate Cheat.sh into your
terminal by adding a simple function to your bashrc/zshrc file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wtis&lt;span class="o"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	curl -s &lt;span class="s2"&gt;&amp;#34;cheat.sh/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; less -R
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now you can
search and clarify your command-line doubts right from the terminal itself.&lt;/p&gt;
&lt;h2 id="how-to-understand-scripts-better-explainshell"&gt;How to Understand Scripts Better: Explainshell&lt;/h2&gt;
&lt;p&gt;When encountering unfamiliar scripts, it&amp;rsquo;s natural to feel bewildered. But fret
no more! &lt;a href="https://explainshell.com/"&gt;Explain shell&lt;/a&gt; comes to your aid. This
website helps you unravel the hidden intentions behind shell scripts. Simply
paste a command or script, and Explainshell breaks it down into understandable
components, explaining each element&amp;rsquo;s purpose and functionality. Understanding
scripts has never been easier!&lt;/p&gt;
&lt;h2 id="how-to-make-your-scripts-better-shellcheck"&gt;How to Make Your Scripts Better: Shellcheck&lt;/h2&gt;
&lt;p&gt;Improving your scripts is a constant endeavor. Fortunately, &lt;code&gt;Shellcheck&lt;/code&gt; is here
to assist you. This powerful tool analyzes your script and provides warnings
and suggestions to help you identify and rectify potential issues. By
incorporating Shellcheck into your workflow, you can remove edge cases, enhance
code quality, and make your scripts more robust.&lt;/p&gt;
&lt;p&gt;For Vim users, consider
adding Shellcheck to a Vim key binding.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;Mastering shell scripting opens up a world of automation and efficiency in your
daily tasks. By leveraging TLDR, Cheat.sh, Explainshell, and Shellcheck
, you can enhance your scripting skills, understand complex scripts,
and write more robust and error-free code. Embrace these tools, and embark on
your journey to becoming a command-line Jedi.&lt;/p&gt;
&lt;p&gt;May the scripts be with you!&lt;/p&gt;</description></item><item><title>Unleashing the Power of VisiData: The Ultimate CSV Toolkit</title><link>https://dhancodes.github.io/blog/visidata/</link><guid>https://dhancodes.github.io/blog/visidata/</guid><pubDate>Sat, 03 Jun 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;CSV (Comma-Separated Values) files are a common
and widely used format for storing and exchanging tabular data. While tools
like Excel are often used for working with CSV files, they can be cumbersome
and limited when it comes to handling large datasets. Enter VisiData, a
versatile and powerful command-line tool that revolutionizes the way we
interact with CSV files. Let&amp;rsquo;s explore the capabilities of
VisiData and discover why it become why of my favorites.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://d33wubrfki0l68.cloudfront.net/a2039fda848c76b90ee0270854cd417a82bbd60e/0b350/img/woq9dm5llq-590.webp" alt="Visidata" title="visidata"&gt;&lt;/p&gt;
&lt;h2 id="what-is-visidata"&gt;What is VisiData?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.visidata.org/"&gt;Visidata&lt;/a&gt;
is a free and open-source tool that provides a spreadsheet-like
interface for exploring and analyzing CSV files. It offers a rich set of
features that make data manipulation and analysis a breeze. Whether you&amp;rsquo;re
dealing with small or massive datasets, VisiData&amp;rsquo;s optimized design ensures
fast and efficient operations.&lt;/p&gt;
&lt;p&gt;VisiData offers powerful data exploration capabilities.
With VisiData&amp;rsquo;s intuitive commands and
keyboard shortcuts, you&amp;rsquo;ll quickly become a data wrangling pro.&lt;/p&gt;
&lt;p&gt;VisiData goes beyond simple data exploration.
operations like sorting, grouping, and merging datasets. You&amp;rsquo;ll learn how to
calculate statistics, create pivot tables, and even perform complex
transformations using Python expressions. VisiData seamlessly integrates with
Python, allowing you to leverage its extensive libraries for advanced analysis.&lt;/p&gt;
&lt;h2 id="working-with-gigabytes-of-data"&gt;Working with Gigabytes of Data:&lt;/h2&gt;
&lt;p&gt;Handling large CSV files can be challenging, but VisiData excels in this area.
We&amp;rsquo;ll explore VisiData&amp;rsquo;s memory-mapping feature, which enables you to work with
files that are several gigabytes in size without running into memory
limitations. Say goodbye to sluggish performance and hello to lightning-fast
data manipulation.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;VisiData is a game-changer when it comes to working with CSV files. Its speed,
versatility, and command-line interface provide a refreshing alternative to
traditional spreadsheet programs like Excel. Whether you&amp;rsquo;re a data analyst,
scientist, or enthusiast, VisiData empowers you to explore and analyze data&lt;/p&gt;
&lt;h2 id="see-also"&gt;See Also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=N1CBDTgGtOU"&gt;VisiData Lightning Demo at PyCascades 2018&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jsvine.github.io/intro-to-visidata/index.html"&gt;An Introduction to VisiData&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Embracing a Lifelong Reminder: I Inked a Tattoo on My Hand</title><link>https://dhancodes.github.io/blog/first-tattoo/</link><guid>https://dhancodes.github.io/blog/first-tattoo/</guid><pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;Tattoos serve as personal expressions, etching permanent reminders on our
bodies. Recently, I made the bold decision to ink a tattoo on my hand—a
symbolic journey encapsulating the essence of &amp;ldquo;一期一会&amp;rdquo; (ichigo ichi-e),
treasuring each moment as a unique encounter.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dhancodes.github.io/images/posts/tattoo.jpg" alt="Tattoo" title="My first tattoo"&gt;&lt;/p&gt;
&lt;h2 id="the-meaning-behind-一期一会"&gt;The Meaning Behind &amp;ldquo;一期一会&amp;rdquo;:&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;一期一会&amp;rdquo; embodies treasuring life&amp;rsquo;s fleeting moments. It reminds me to
appreciate every encounter, relationship, and experience as a
once-in-a-lifetime opportunity. This philosophy inspires mindful living and
cherishing the present.&lt;/p&gt;
&lt;p&gt;This tattoo acts as a constant companion, guiding me on my path, reminding me
to embrace the beauty of impermanence and to savor each passing moment with a
full heart.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Disclaimer: The decision to get a tattoo is deeply personal. Before getting a
tattoo, it is important to carefully consider the design, placement, and
long-term implications. Additionally, ensure you choose a reputable tattoo
artist who understands your vision and executes it safely and professionally.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Streamlining Research Workflow: Organizing Papers and eBooks</title><link>https://dhancodes.github.io/blog/organizing-research/</link><guid>https://dhancodes.github.io/blog/organizing-research/</guid><pubDate>Mon, 29 May 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;When dealing with large collections of
files, such as research papers or ebooks,
finding and opening the right file can be
a time-consuming task. In this blog post,
we&amp;rsquo;ll explore a Bash script that
streamlines this process by providing a
convenient menu for selecting and opening
PDF or DJVU files. With just a few
modifications, you can adapt the script
to suit your specific needs.&lt;/p&gt;
&lt;h2 id="setting-up-the-script"&gt;Setting Up the Script:&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start by
setting up the Bash script. Create a new
file called &amp;ldquo;open_files.sh&amp;rdquo; and open it
in a text editor. Copy and paste the
following code into the file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Set the directories where your files are located&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;papers_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/PhD/PDFs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ebooks_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/Dropbox/eBooks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Save find result to arrays&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mapfile -t paper_array &amp;lt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$papers_dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -type f &lt;span class="se"&gt;\(&lt;/span&gt; -iname &lt;span class="s2"&gt;&amp;#34;*.pdf&amp;#34;&lt;/span&gt; -o -iname &lt;span class="s2"&gt;&amp;#34;*.djvu&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\)&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mapfile -t ebook_array &amp;lt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ebooks_dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -type f &lt;span class="se"&gt;\(&lt;/span&gt; -iname &lt;span class="s2"&gt;&amp;#34;*.pdf&amp;#34;&lt;/span&gt; -o -iname &lt;span class="s2"&gt;&amp;#34;*.djvu&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\)&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Combine the arrays into a single array&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;combined_array&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;paper_array&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ebook_array&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check if the combined array is empty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="si"&gt;${#&lt;/span&gt;&lt;span class="nv"&gt;combined_array&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; -eq &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;No files found in the specified directories.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Declare an associative array to store filenames and paths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;declare&lt;/span&gt; -A files
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Populate the files array&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; file_path in &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;combined_array&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;basename &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file_path&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; files&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$filename&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="nv"&gt;$file_path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Generate a list of filenames for the selection menu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gen_list&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; file_name in &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="p"&gt;!files[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file_name&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Prompt the user to select a file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;selected_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;gen_list &lt;span class="p"&gt;|&lt;/span&gt; rofi -dmenu -i -sorting-method fzf -sort -no-custom -location &lt;span class="m"&gt;0&lt;/span&gt; -p &lt;span class="s2"&gt;&amp;#34;Select File&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Open the selected file using xdg-open&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$selected_file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; xdg-open &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$selected_file&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="customization"&gt;Customization:&lt;/h2&gt;
&lt;p&gt;Now that the script is set up, you can customize it to fit your workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adjust the directory paths:&lt;/strong&gt; Modify the&lt;code&gt;papers_dir&lt;/code&gt; and &lt;code&gt;ebooks_dir&lt;/code&gt; variables to match the directories where your files are located. For example, you might have research papers in one directory and ebooks in another. Update these paths accordingly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add more file types:&lt;/strong&gt; By default, the script searches for PDF and DJVU files. If you have files of different formats, such as EPUB or MOBI, you can modify the find commands to include those extensions as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Customize the selection menu:&lt;/strong&gt; The script uses the rofi utility to display a selection menu. You can modify the options passed to the rofi command to change the appearance or behavior of the menu. Refer to the rofi documentation for more information on available options.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;With this Bash script, selecting and opening PDF or DJVU files
becomes a breeze. By customizing the directories, file types, and selection
menu, you can adapt the script to your specific needs. This simple yet powerful
tool can significantly enhance your productivity when dealing with large
collections of files. Give it a try and streamline your file access workflow!&lt;/p&gt;</description></item><item><title>3 Life-Changing Software That Transformed My Productivity and Organization</title><link>https://dhancodes.github.io/blog/three-softwares/</link><guid>https://dhancodes.github.io/blog/three-softwares/</guid><pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;In the vast realm of software, there are a few gems that have had a profound
impact on my life. Let me share with you the three software applications that
have significantly transformed the way I work and boosted my productivity.&lt;/p&gt;
&lt;h2 id="vim"&gt;Vim&lt;/h2&gt;
&lt;p&gt;Vim, an incredibly powerful and efficient text editor, has revolutionized my
workflow. Vim follows the philosophy of modal editing, allowing you to
navigate, edit, and manipulate text swiftly. The learning curve may be steep,
but once you grasp the basics, you&amp;rsquo;ll witness a significant boost in your
editing capabilities. Vim offers countless features, including macros, plugins,
and extensive customization options, making it a versatile tool for any text
editing task.&lt;/p&gt;
&lt;h2 id="git---the-stupid-tracker"&gt;Git - The Stupid Tracker&lt;/h2&gt;
&lt;p&gt;Git, the renowned version control system, has become an integral part of my
development workflow. Initially, I started using Git to track changes in my
programs, but it has evolved into much more than that. Git&amp;rsquo;s ability to create
branches, merge code changes, and collaborate
streamlined my work and provided a safety net for my projects.
With Git, I can experiment fearlessly, revert to previous versions, and
collaborate seamlessly. Its impact on my productivity and code
management cannot be overstated.&lt;/p&gt;
&lt;p&gt;Protip: You can use your USB as a remote repository by following this &lt;a href="https://www.url.com"&gt;guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="parallel"&gt;Parallel&lt;/h2&gt;
&lt;p&gt;Parallel computing has become essential for handling large-scale data
processing and computations. The command-line tool &lt;code&gt;parallel&lt;/code&gt; has been a
game-changer for me in this regard. With &lt;code&gt;parallel&lt;/code&gt;, I can distribute tasks
across multiple CPUs or cores, unlocking the full potential of my system&amp;rsquo;s
resources. By executing commands or scripts in parallel, &lt;code&gt;parallel&lt;/code&gt;
significantly reduces the overall execution time and improves efficiency. It
has empowered me to tackle data-intensive tasks more effectively and expedite
complex computations.&lt;/p&gt;
&lt;h2 id="bonus---tmux"&gt;Bonus - tmux&lt;/h2&gt;
&lt;p&gt;While not directly a software application, &lt;code&gt;tmux&lt;/code&gt; has been a critical tool in
my workflow. &lt;code&gt;tmux&lt;/code&gt; is a terminal multiplexer that allows me to manage multiple
terminal sessions within a single window. With &lt;code&gt;tmux&lt;/code&gt;, I can create and switch
between different terminal panes and windows, detach and reattach sessions, and
run commands in the background. This enables me to organize my work environment
effectively, run long-running tasks without interruption, and maintain multiple
work contexts simultaneously.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;These three software applications, Vim, Git, and &lt;code&gt;parallel&lt;/code&gt;, along with the bonus
tool &lt;code&gt;tmux&lt;/code&gt;, have had a profound impact on my productivity and efficiency.
Whether it&amp;rsquo;s text editing, code management, parallel computing, or terminal
session management, these tools have transformed the way I work and have become
indispensable parts of my daily workflow. I encourage you to explore these
applications and see how they can enhance your productivity and streamline your
work processes.&lt;/p&gt;
&lt;p&gt;So, why not give them a try? Discover the power of Vim, embrace the efficiency
of Git, harness the capabilities of &lt;code&gt;parallel&lt;/code&gt;, and supercharge your workflow
with &lt;code&gt;tmux&lt;/code&gt;. Embrace these transformative tools and unlock your full potential
as a productive and efficient programmer.&lt;/p&gt;</description></item><item><title>Taking Care of Your Mental Health During Your PhD Journey</title><link>https://dhancodes.github.io/blog/phd-guide-mental-health/</link><guid>https://dhancodes.github.io/blog/phd-guide-mental-health/</guid><pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate><description>&lt;p&gt;Welcome to my new blog series, where I&amp;rsquo;ll be sharing helpful information that has made a significant difference in my own PhD journey. In this first installment, I want to emphasize the often neglected aspect of mental health among PhD students. Please note that the following tips are based on my personal experience and should not be considered as medical advice. If you&amp;rsquo;re facing any problems, seek expert help.&lt;/p&gt;
&lt;h2 id="dont-take-yourself-for-granted"&gt;Don&amp;rsquo;t Take Yourself for Granted:&lt;/h2&gt;
&lt;p&gt;PhD students often find themselves working tirelessly, blurring the boundaries between personal and professional life. It&amp;rsquo;s crucial to dedicate time to your hobbies and leisure activities, even in the midst of a busy schedule. Consider creating a daily schedule that allows for ample leisure time, ensuring a healthy work-life balance.&lt;/p&gt;
&lt;h2 id="financial-freedom"&gt;Financial Freedom:&lt;/h2&gt;
&lt;p&gt;Strategic management of your income or scholarship is essential. Plan ahead and invest wisely for your future while also preparing for unexpected emergencies. As a rule of thumb, aim to have at least three months&amp;rsquo; worth of expenses in your savings account. While saving is necessary, remember to give yourself permission for occasional exceptions.&lt;/p&gt;
&lt;h2 id="imposter-syndrome"&gt;Imposter Syndrome:&lt;/h2&gt;
&lt;p&gt;Imposter syndrome often accompanies the pursuit of a PhD. Remember that everyone has their bad days and it&amp;rsquo;s okay to make mistakes. Troubleshooting is an integral part of the research process, so learn from your missteps and avoid repeating them. Embrace the fact that you are unique, strong, and capable.&lt;/p&gt;
&lt;h2 id="communicate-with-friends-and-family"&gt;Communicate with Friends and Family:&lt;/h2&gt;
&lt;p&gt;During challenging times, reach out to your friends and family for support. Talking to someone who has chosen a similar career path can be particularly helpful as they can relate to your experiences. Transitioning from a classroom setting to full-time research can sometimes make you feel isolated, so find ways to stay connected and in sync with yourself.&lt;/p&gt;
&lt;h2 id="limit-social-media-usage"&gt;Limit Social Media Usage:&lt;/h2&gt;
&lt;p&gt;While communication is essential, be mindful of the impact of social media on your mental well-being. Social networks often present an idealized version of others&amp;rsquo; lives, fueling imposter syndrome and negative self-comparisons. Instead, prioritize open conversations with your real friends, as they offer more authentic connections and support.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;I hope these tips resonate with you and serve as a reminder of the common worries we all experience during our PhD journeys. While technical aspects of research are important, it is vital to prioritize your well-being. Remember, taking care of yourself should always come first. Stay tuned for future posts where I&amp;rsquo;ll delve into more specific topics related to the PhD experience.&lt;/p&gt;</description></item><item><title>My Digital Detox Journey: The Beginning</title><link>https://dhancodes.github.io/blog/digital-detox/</link><guid>https://dhancodes.github.io/blog/digital-detox/</guid><pubDate>Mon, 03 Oct 2022 00:00:00 +0000</pubDate><description>&lt;p&gt;Let&amp;rsquo;s talk about the forever scroll! The endless stream of data that algorithms
present to us on a platter. The happiness we derive from reaching a certain
like count. The sadness of feeling alone amidst a crowd of friends.&lt;/p&gt;
&lt;p&gt;These are the challenges that modern sapiens face today. Hence, I have decided
to embark on my digital detox journey. My goal is not to completely disconnect
from the internet but to find my own way of doing so, with minimal compromises.&lt;/p&gt;
&lt;p&gt;This blog will serve as a record of my journey. I plan to start from the
beginning of the internet and explore the tools available to prepare myself for
this upcoming battle.&lt;/p&gt;
&lt;p&gt;First and foremost, I am beginning my journey by distancing myself from social
media, one platform at a time. I have decided to start with Instagram. Its
addictive nature and time-consuming qualities make it a perfect starting point
for my detox.&lt;/p&gt;
&lt;p&gt;To replace the void left by Instagram, I have chosen to use RSS feeds. RSS
(Really Simple Syndication) allows me to curate content from various sources
and have it delivered to a single platform. It enables me to stay updated with
the topics I&amp;rsquo;m interested in without being bombarded by distractions and
algorithms.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re unfamiliar with RSS feeds and want to learn more about them, you can
check out my previous blog post
&lt;a href="https://dhancodes.github.io/posts/2022/04/rss-readers/"&gt;here&lt;/a&gt;. It provides a
comprehensive guide to understanding and setting up RSS readers.&lt;/p&gt;
&lt;p&gt;I am fully aware that this journey will not be a smooth sailing experience. It
will require me to invest my precious time in setting up these mechanisms and
adjusting to a new way of consuming information. But I believe the benefits of
a digital detox outweigh the temporary inconveniences.&lt;/p&gt;
&lt;p&gt;Adieus to the mindless scrolling, and long live the revolution of reclaiming
our time and attention!&lt;/p&gt;</description></item><item><title>Rediscovering the Internet: Navigating with RSS</title><link>https://dhancodes.github.io/blog/rss-readers/</link><guid>https://dhancodes.github.io/blog/rss-readers/</guid><pubDate>Thu, 07 Apr 2022 00:00:00 +0000</pubDate><description>&lt;p&gt;In our modern world, the Internet has become an overwhelming sea of information. But have we truly mastered the art of navigating it? While the Internet presents itself differently to each individual, we often find ourselves at the mercy of bloated interfaces and algorithms that dictate what we see. However, there is a time-tested solution that empowers us to take control of our information consumption: Rich Site Summary (RSS), also known as Really Simple Syndication. Let&amp;rsquo;s take a step back in time and explore the power of RSS.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dhancodes.github.io/images/posts/rsslogo.png" alt="RSS Logo" title="RSS logo"&gt;&lt;/p&gt;
&lt;h2 id="the-savior-from-the-past-rss"&gt;The Savior from the Past: RSS&lt;/h2&gt;
&lt;p&gt;You may have noticed the distinctive orange RSS logo on various blogs. This logo represents a button that carries a link, allowing you to copy and save it to an RSS reader. An RSS reader is an application specifically designed to consume these feeds. By setting up an RSS reader, you can stay updated whenever a new post is published on a blog, a newspaper site, a YouTube channel, Reddit, or even your favorite Twitter accounts (although the process for Twitter can be a bit cumbersome). The initial setup may take some time, but the key benefit is that you regain control over the information you receive.&lt;/p&gt;
&lt;h2 id="embrace-freedom"&gt;Embrace Freedom&lt;/h2&gt;
&lt;p&gt;By utilizing RSS, you liberate yourself from the clutches of algorithmic recommendations and personalized feeds. Instead, you become the curator of your own information sources. You decide which blogs, news sites, or channels to subscribe to, and you receive updates from them directly. This empowers you to break free from the echo chambers and filter bubbles that dominate the modern Internet landscape.&lt;/p&gt;
&lt;h2 id="choosing-an-rss-reader"&gt;Choosing an RSS Reader&lt;/h2&gt;
&lt;p&gt;There are numerous RSS readers available, catering to different platforms and preferences. Personally, I use newsboat, which is available in the apt repository for my laptop, and the Feed Reader app, available on F-Droid, for my Android device. However, a simple search will reveal a wide array of choices, allowing you to find the reader that best suits your needs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Shameless Plug:&lt;/strong&gt;
If you&amp;rsquo;ve found this blog post helpful and would like to stay updated, you can find my RSS link below. Simply copy it and add it to your preferred RSS reader. Stay connected and informed!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="conclusion"&gt;Conclusion:&lt;/h2&gt;
&lt;p&gt;Navigating the Internet doesn&amp;rsquo;t have to be a passive experience dictated by algorithms. With RSS, we can reclaim control over our information consumption. By using an RSS reader and subscribing to the sources we trust and enjoy, we break free from the limitations imposed upon us. Embrace the power of RSS and explore the wealth of information available on your terms. Happy browsing!&lt;/p&gt;
&lt;h3 id="links"&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://newsboat.org"&gt;Newsboat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/RSS"&gt;More on RSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Organize Your Files Automatically: A Bash Script Based on Creation Date</title><link>https://dhancodes.github.io/blog/classifydate/</link><guid>https://dhancodes.github.io/blog/classifydate/</guid><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><description>&lt;p&gt;In today&amp;rsquo;s digital age, managing and organizing files can quickly become overwhelming. Locating specific files can be a time-consuming task, especially when dealing with a large number of documents, photos, or other digital assets. To streamline your file organization process, I&amp;rsquo;ve developed a bash script that automatically classifies files into respective year and month folders based on their creation date. This script simplifies file management and ensures a well-organized file structure. Let&amp;rsquo;s dive into the details of this handy script!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a folder structure to classify files by YEAR and MONTH.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Aliased as &amp;#39;sortdate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; file in *&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date -r &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; +%Y&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date -r &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; +&lt;span class="s1"&gt;&amp;#39;%m %B&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;destination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$year&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$month&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$destination&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$filename&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$destination&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="explanation"&gt;Explanation:&lt;/h2&gt;
&lt;p&gt;The script revolves around a for loop that iterates through each item in the current directory. It performs the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;File Validation:
The script verifies if the item is a regular file using the [ -f &amp;ldquo;$file&amp;rdquo; ] condition. This ensures that only files are considered for classification, excluding directories and other special files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Extraction of Date Information:
The date command is utilized to extract the creation date of the file.
The date -r option retrieves the creation date of the file specified by $file.
Two variables, year and month, are assigned the extracted year (+%Y) and month (+%m %B) respectively. The latter format includes both the month number and the full month name for better folder naming.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Destination Folder Creation:
The destination folder path is constructed by concatenating the year and month variables.
The mkdir -p command is used to create the destination folder if it doesn&amp;rsquo;t already exist. The -p flag ensures that parent directories are created as needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;File Movement:
The mv command moves the file &lt;code&gt;($filename)&lt;/code&gt; to the destination folder &lt;code&gt;($destination)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Conclusion:
By utilizing this script, you can automate the process of organizing files
based on their creation date. This simplifies file management and allows for
easier access to specific files within a well-structured directory hierarchy.
Whether you want to organize documents, photos, or any other files, this script
will save you time and effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: When running scripts, exercise caution and ensure you have a backup of your files before making any changes to their locations.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>An All-in-One Bash Script for PDF Conversion</title><link>https://dhancodes.github.io/blog/makepdf/</link><guid>https://dhancodes.github.io/blog/makepdf/</guid><pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate><description>&lt;p&gt;Do you often find yourself needing to convert various file types to PDF format? If so, this versatile bash script can be a valuable tool in your arsenal. With this script, you can easily convert files to PDF using appropriate command-line utilities based on their file types. Whether you have text documents, markdown files, presentations, or even obscure file formats, this script has got you covered.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Making pdf from anything.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# This script is mapped to a key in my ranger config.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;readlink -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;basename &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; .&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ext&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ext&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;##*.&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;textype&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pdflatex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; head -n5 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;xelatex&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xelatex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; head -n1 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;handout&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --jobname&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_handout&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;\PassOptionsToClass{handout}{beamer} \input{&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;}&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bibtex &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_handout.aux&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bibtex &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;.aux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mdtype&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;md1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; head -n5 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;beamer&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;beamer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; head -n5 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;twoside&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;md2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ~/scripts/pandoc.sh &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$command&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# It&amp;#39;s a bash script made using pandoc with some predefined settings.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ext&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; djvu&lt;span class="o"&gt;)&lt;/span&gt; ddjvu -format&lt;span class="o"&gt;=&lt;/span&gt;pdf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; md&lt;span class="o"&gt;)&lt;/span&gt; mdtype &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ps&lt;span class="o"&gt;)&lt;/span&gt; ps2pdf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; odt&lt;span class="p"&gt;|&lt;/span&gt;ods&lt;span class="p"&gt;|&lt;/span&gt;doc&lt;span class="p"&gt;|&lt;/span&gt;ppt&lt;span class="p"&gt;|&lt;/span&gt;pptx&lt;span class="p"&gt;|&lt;/span&gt;docx&lt;span class="o"&gt;)&lt;/span&gt; unoconv -f pdf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; txt&lt;span class="o"&gt;)&lt;/span&gt; enscript -j -p -B --margins&lt;span class="o"&gt;=&lt;/span&gt;10:10: -X dos -o &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.ps&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ps2pdf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.ps&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.ps&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; chm&lt;span class="o"&gt;)&lt;/span&gt; chm2pdf --book &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; epub&lt;span class="o"&gt;)&lt;/span&gt; pandoc -s -t latex &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -o &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tex&lt;span class="o"&gt;)&lt;/span&gt; textype &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bib&lt;span class="o"&gt;)&lt;/span&gt; pandoc &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --csl ieee.csl -s -o &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.pdf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; *&lt;span class="o"&gt;)&lt;/span&gt; head -n1 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s2"&gt;&amp;#34;^#!/&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sed &lt;span class="s2"&gt;&amp;#34;s/^#!//&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -r -I % &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="script-overview"&gt;Script Overview&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s take a closer look at the key features and functionality of this script:**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; This script is designed to handle a wide range of file types,
making it a convenient tool for various conversion needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ease of Use:&lt;/strong&gt; The script can be easily executed by binding it to a key in a file
manager like &lt;code&gt;Ranger&lt;/code&gt;, simplifying the conversion process.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automatic Detection:&lt;/strong&gt; The script automatically detects the file type based on
its extension and applies the appropriate conversion command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customizable Conversions:&lt;/strong&gt; The script includes two functions, textype and
mdtype, which scan the first 5 lines of the file for predefined parameters and
apply corresponding conversion commands. This allows you to customize the
conversion process based on specific requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multiple Utilities:&lt;/strong&gt; The script utilizes various command-line utilities such as
&lt;code&gt;pdflatex&lt;/code&gt;, &lt;code&gt;xelatex&lt;/code&gt;, &lt;code&gt;bibtex&lt;/code&gt;, &lt;code&gt;pandoc&lt;/code&gt;, &lt;code&gt;unoconv&lt;/code&gt;, &lt;code&gt;ddjvu&lt;/code&gt;,&lt;code&gt; ps2pdf&lt;/code&gt;, &lt;code&gt;enscript&lt;/code&gt;, and
&lt;code&gt;chm2pdf&lt;/code&gt; to handle different file types and perform the conversions.&lt;/p&gt;
&lt;p&gt;Usage Instructions&lt;/p&gt;
&lt;p&gt;To use this script effectively, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Save the script to a file, e.g., &lt;code&gt;makepdf.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make the script executable by running the command: &lt;code&gt;chmod +x makepdf.sh.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Bind the script to a key or shortcut in your file manager (e.g., Ranger,vifm,thunar) for easy access.&lt;/li&gt;
&lt;li&gt;Select the file you want to convert and trigger the script using the bound key or shortcut.&lt;/li&gt;
&lt;li&gt;The script will automatically detect the file type, apply the corresponding conversion command, and generate a PDF file with the same name in the same directory as the original file.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Enhancing Your Vim Workflow: Tips and Configurations</title><link>https://dhancodes.github.io/blog/vimlife/</link><guid>https://dhancodes.github.io/blog/vimlife/</guid><pubDate>Mon, 21 Jun 2021 00:00:00 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Vim_(text_editor)"&gt;Vim&lt;/a&gt; is a powerful text editor that can revolutionize your workflow with its extensive customization options. In this blog post, we&amp;rsquo;ll explore some useful tips and configurations to enhance your Vim experience.&lt;/p&gt;
&lt;h3 id="searching-in-vim"&gt;Searching in Vim&lt;/h3&gt;
&lt;p&gt;Efficient searching is crucial in any text editor. To optimize your search experience in Vim, consider making the following changes to your configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;nohlsearch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;incsearch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;ignorecase&lt;/span&gt; &lt;span class="c"&gt;&amp;#34; case insensitive searching&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;smartcase&lt;/span&gt; &lt;span class="c"&gt;&amp;#34; case-sensitive if expresson contains a capital letter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nnoremap&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="nx"&gt;nzzzv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nnoremap&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="nx"&gt;Nzzzv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;#34; Adding Fuzzy search for files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;+=&lt;/span&gt;**
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;#34; For creating a tag file using ctags. Works with tex and programfiles.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;#34; For more details see man page of ctags.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; &lt;span class="nx"&gt;MakeTags&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ctags&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt; . 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These settings ensure that search highlights are not persistent, enable incremental searching, and set case-insensitive searching as the default behavior. The smartcase option allows Vim to perform case-sensitive searches if the search pattern contains at least one capital letter. Additionally, the provided nnoremap commands center the screen after jumping to the next/previous match, improving visibility.&lt;/p&gt;
&lt;h2 id="making-pdfs-using-latex"&gt;Making pdf&amp;rsquo;s using Latex&lt;/h2&gt;
&lt;p&gt;If you work with LaTeX, you can streamline the process of compiling LaTeX files and generating PDFs using Vim. Here&amp;rsquo;s how:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a shell script named &lt;code&gt;makepdf.sh&lt;/code&gt; with the following content:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Making pdf from anything.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;readlink -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;%/*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pdflatex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt; head -n5 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;xelatex&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xelatex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt; head -n1 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;handout&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --jobname&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;_handout&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;\PassOptionsToClass{handout}{beamer} \input{&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;}&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bibtex &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;_handout.aux&amp;#34;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bibtex &lt;span class="nv"&gt;$base&lt;/span&gt;.aux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt; head -n1 &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -qi &lt;span class="s1"&gt;&amp;#39;handout&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$command&lt;/span&gt; --output-directory&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --jobname&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;_handout&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;\PassOptionsToClass{handout}{beamer} \input{&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This script checks if the file can be converted to PDF using LaTeX or XeLaTeX, depending on whether xelatex is mentioned in the first 5 lines of the document. It also handles the creation of separate PDFs for beamer handouts if specified.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Add the following lines to your .vimrc file to create mappings for triggering the script:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;FileType&lt;/span&gt; &lt;span class="nx"&gt;tex&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Leader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; :&lt;span class="p"&gt;!~&lt;/span&gt;&lt;span class="sr"&gt;/scripts/&lt;/span&gt;&lt;span class="nx"&gt;makepdf&lt;/span&gt;.&lt;span class="nx"&gt;sh&lt;/span&gt; % &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;FileType&lt;/span&gt; &lt;span class="nx"&gt;tex&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Leader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; :&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;zathura&lt;/span&gt; %:&lt;span class="nx"&gt;r&lt;/span&gt;.&lt;span class="nx"&gt;pdf&lt;/span&gt; &amp;amp; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CR&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These mappings assign the &lt;code&gt;&amp;lt;Leader&amp;gt;c&lt;/code&gt; and &lt;code&gt;&amp;lt;Leader&amp;gt;o&lt;/code&gt; keys to compile the current LaTeX file and open the resulting PDF in the Zathura PDF viewer, respectively.&lt;/p&gt;
&lt;p&gt;With these configurations, you can quickly compile your LaTeX files and preview the generated PDF without leaving Vim.&lt;/p&gt;
&lt;h2 id="utilizing-helpful-plugins"&gt;Utilizing Helpful Plugins&lt;/h2&gt;
&lt;p&gt;Vim plugins extend its functionality and allow you to tailor the editor to your specific needs. While it&amp;rsquo;s essential to be selective with the plugins you use, a few can significantly enhance your editing experience. Here&amp;rsquo;s an example setup using the popular plugin manager vim-plug and some recommended plugins:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;#34;Plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;call&lt;/span&gt; &lt;span class="nx"&gt;plug&lt;/span&gt;#&lt;span class="nx"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;~/.vim/plugged&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;VundleVim/Vundle.vim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sirver/ultisnips&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;honza/vim-snippets&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tpope/vim-surround&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tpope/vim-commentary&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;Plug&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;junegunn/vim-easy-align&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;call&lt;/span&gt; &lt;span class="nx"&gt;plug&lt;/span&gt;#&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above configuration sets up vim-plug as your plugin manager and includes some useful plugins:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;UltiSnips and vim-snippets provide powerful snippet capabilities, allowing you to assign keystrokes for commands and custom text snippets. They come with predefined snippets for various languages, saving you time and effort.&lt;/li&gt;
&lt;li&gt;vim-surround simplifies working with surroundings (such as parentheses, quotes, HTML tags) by providing intuitive mappings to add, change, and delete them.&lt;/li&gt;
&lt;li&gt;vim-commentary allows you to comment out lines or visually selected blocks of code with ease, enhancing code readability and simplifying commenting tasks.&lt;/li&gt;
&lt;li&gt;vim-easy-align provides a straightforward way to align text and symbols within a line or across multiple lines, making your code more organized and visually appealing.&lt;/li&gt;
&lt;li&gt;Remember to choose plugins that align with your specific needs and avoid overloading Vim with unnecessary extensions.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="automating-workflow-with-helpful-automatic-commands"&gt;Automating Workflow with Helpful Automatic Commands&lt;/h2&gt;
&lt;p&gt;In addition to the previously mentioned tips and configurations, there are some additional automatic commands that can further enhance your Vim workflow. These commands automate certain actions based on specific events. Let&amp;rsquo;s explore two examples:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remembering Folds:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;augroup&lt;/span&gt; &lt;span class="nx"&gt;remember_fold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;BufWinLeave&lt;/span&gt; * &lt;span class="nx"&gt;mkview&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;BufWinEnter&lt;/span&gt; * &lt;span class="nx"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; &lt;span class="nx"&gt;loadview&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;augroup&lt;/span&gt; &lt;span class="nx"&gt;END&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above commands define an autocmd group named &amp;ldquo;remember_fold.&amp;rdquo; This group ensures that the state of your file&amp;rsquo;s folds (collapsed or expanded) is saved when you switch away from the buffer and restored when you return to it. This feature is especially useful when working with large files or projects where you frequently navigate between different buffers.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Automatic Execution of Shell Script on Quit for Texfiles:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vim" data-lang="vim"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;augroup&lt;/span&gt; &lt;span class="nx"&gt;autocom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;autocmd&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;VimLeave&lt;/span&gt; *.&lt;span class="nx"&gt;tex&lt;/span&gt; &lt;span class="p"&gt;!~&lt;/span&gt;&lt;span class="sr"&gt;/scripts/&lt;/span&gt;&lt;span class="nx"&gt;texclear&lt;/span&gt;.&lt;span class="nx"&gt;sh&lt;/span&gt; %
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;autocmd&lt;/span&gt; &lt;span class="nx"&gt;VimLeave&lt;/span&gt; *.&lt;span class="nx"&gt;tex&lt;/span&gt; &lt;span class="p"&gt;!~&lt;/span&gt;&lt;span class="sr"&gt;/scripts/&lt;/span&gt;&lt;span class="nx"&gt;texclear&lt;/span&gt;.&lt;span class="nx"&gt;sh&lt;/span&gt; %:&lt;span class="nx"&gt;r_handout&lt;/span&gt;.&lt;span class="nx"&gt;tex&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;augroup&lt;/span&gt; &lt;span class="nx"&gt;END&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These commands define an autocmd group named &amp;ldquo;autocom.&amp;rdquo; It specifies that when you quit Vim while editing a &lt;code&gt;.tex&lt;/code&gt; file, the shell script &lt;code&gt;texclear.sh&lt;/code&gt; will be executed automatically to clear the build files associated with the LaTeX/XeLaTeX build. This cleanup ensures that unnecessary files generated during compilation are removed, keeping your project directory clean.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;texclear.sh&lt;/code&gt; script is as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clears the build files of a LaTeX/XeLaTeX build.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# I have Vim run this file whenever I exit a .tex file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; *.tex&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;readlink -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;%.*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; find &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -maxdepth &lt;span class="m"&gt;1&lt;/span&gt; -type f -regextype gnu-awk -regex &lt;span class="s2"&gt;&amp;#34;^&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)&amp;#34;&lt;/span&gt; -delete &lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; *&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Give .tex file as an argument.\\n&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This script clears the unnecessary build files associated with a LaTeX/XeLaTeX compilation. When you exit Vim after editing a &lt;code&gt;.tex&lt;/code&gt; file, the script identifies the relevant build files based on the file&amp;rsquo;s name, removes them, and ensures a clean workspace for your next LaTeX project.&lt;/p&gt;
&lt;p&gt;By incorporating these automatic commands, you can streamline your workflow and focus more on your content creation rather than manual housekeeping tasks.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Vim is a versatile text editor that can greatly improve your productivity when properly configured. By optimizing searching, automating LaTeX PDF generation, and utilizing helpful plugins, you can customize Vim to suit your workflow and make editing tasks more efficient.&lt;/p&gt;
&lt;p&gt;Remember, these configurations are based on personal preferences and may require further adjustments to fit your exact needs. Feel free to experiment and adapt them to create your own unique .vimrc setup.&lt;/p&gt;
&lt;p&gt;We hope these tips and configurations inspire you to explore Vim further and uncover its full potential for your text editing endeavors.&lt;/p&gt;
&lt;h3 id="references"&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://castel.dev/post/lecture-notes-3/"&gt;How I manage my LaTeX lecture notes - Gilles Castel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dotfiles.github.io/"&gt;Dotfiles Github Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dhancodes/tex-templates"&gt;My LaTeX Templates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>