<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Dhruva Sagar</title>
		<link>https://dhruvasagar.dev/</link>
		<description>Recent content on Dhruva Sagar</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sun, 02 Aug 2026 08:00:00 +0530</lastBuildDate>
		
			<atom:link href="https://dhruvasagar.dev/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>The Knowledge Operating System</title>
				<link>https://dhruvasagar.dev/posts/the-knowledge-operating-system/</link>
				<pubDate>Sun, 02 Aug 2026 08:00:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/the-knowledge-operating-system/</guid>
				<description>A graph of five hundred interlinked notes taught me that capture and linking are not enough — knowledge needs structure to be documented, referenced, and discovered. This is the layer I added on top: atomic concept notes, one index node per book, graded evidence, and reviews that turn knowledge into behaviour.</description>
			</item>
			<item>
				<title>How the Water Holds</title>
				<link>https://dhruvasagar.dev/posts/how-the-water-holds/</link>
				<pubDate>Sat, 18 Jul 2026 06:00:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/how-the-water-holds/</guid>
				<description>The water holds your body. It holds your attention. It holds what you carry. Notes on healing, disruption, and what a 4k swim through salt and tide taught me about being held.</description>
			</item>
			<item>
				<title>The Poverty of Language and the Search for Emotional Precision</title>
				<link>https://dhruvasagar.dev/posts/poverty-of-language-search-for-emotional-precision/</link>
				<pubDate>Fri, 17 Jul 2026 10:54:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/poverty-of-language-search-for-emotional-precision/</guid>
				<description>Language compresses rich subjective experiences into symbols that others must reconstruct, making misunderstanding inevitable. Storytelling addresses this limitation by providing context, causality, and emotional structure, creating simulated experiences that allow people to understand one another more deeply. While perfect transmission of experience may be impossible, stories may be one of humanity&amp;rsquo;s most powerful tools for narrowing the distance between minds</description>
			</item>
			<item>
				<title>The Fear Tax</title>
				<link>https://dhruvasagar.dev/posts/the-fear-tax/</link>
				<pubDate>Fri, 05 Jun 2026 10:00:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/the-fear-tax/</guid>
				<description>Fear in the workplace is not a motivator. It is a tax. Leaders who let it persist — or quietly benefit from it — are paying that tax with their team&amp;rsquo;s initiative, creativity, and willingness to care. Here is what honest leadership looks like when the future is genuinely uncertain.</description>
			</item>
			<item>
				<title>Keep the Friction</title>
				<link>https://dhruvasagar.dev/posts/keep-the-friction/</link>
				<pubDate>Thu, 04 Jun 2026 10:30:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/keep-the-friction/</guid>
				<description>AI is best at removing exactly the friction where craft, focus, and satisfaction used to live. Refusing it is a pose; there is no exit. The real move is to choose, deliberately, where you keep doing the hard part by hand; because doing it is the point.</description>
			</item>
			<item>
				<title>What I Got Wrong About Discipline, And You Might Too</title>
				<link>https://dhruvasagar.dev/posts/what-i-got-wrong-about-discipline/</link>
				<pubDate>Wed, 06 May 2026 16:42:09 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/what-i-got-wrong-about-discipline/</guid>
				<description>For years, I thought discipline was simply working hard and striving to improve. Only recently did I realize that true discipline is the resilience to show up and do the work even when you least want to. Here’s what I got wrong, and what you might too.</description>
			</item>
			<item>
				<title>Introducing ruby-upgrade-toolkit</title>
				<link>https://dhruvasagar.dev/posts/introducing-ruby-upgrade-toolkit/</link>
				<pubDate>Fri, 01 May 2026 19:58:30 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/introducing-ruby-upgrade-toolkit/</guid>
				<description>A Claude Code plugin for Ruby and Rails upgrades. Phased commits, real estimates, project-specific rules. Audit, plan, fix, verify, commit.</description>
			</item>
			<item>
				<title>Slow Down to Speed Up</title>
				<link>https://dhruvasagar.dev/posts/slow-down-to-speed-up/</link>
				<pubDate>Wed, 29 Apr 2026 11:00:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/slow-down-to-speed-up/</guid>
				<description>Why getting faster has always required slowing down first — and why the cycle never really ends. Lessons from the cube, the pool, and the codebase, learned and re-learned.</description>
			</item>
			<item>
				<title>The Matrix Has No Exit</title>
				<link>https://dhruvasagar.dev/posts/the-matrix-has-no-exit/</link>
				<pubDate>Mon, 27 Apr 2026 11:00:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/the-matrix-has-no-exit/</guid>
				<description>The Matrix got the diagnosis right and the cure wrong — there is no Morpheus, no red pill, no city beneath the city, only the simulation we already inhabit and the seeing of it.</description>
			</item>
			<item>
				<title>Embrace the Wobble</title>
				<link>https://dhruvasagar.dev/posts/embrace-the-wobble/</link>
				<pubDate>Wed, 14 Jan 2026 20:45:12 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/embrace-the-wobble/</guid>
				<description>&lt;p&gt;Watching my daughter grip her bike&amp;rsquo;s handlebars for the first time, I&#xA;saw the familiar flicker of fear in her eyes, the apprehension of the&#xA;unknown, the hesitation to stumble, the dread of failure. It reminded&#xA;me of a feeling I know too well, one that lingers in moments of&#xA;uncertainty throughout our lives.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“What if I fall?” she asked.&lt;/p&gt;&#xA;&lt;p&gt;I met her gaze and smiled. “Don’t be afraid of falling; instead be&#xA;afraid of never falling,” I said.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building a Scalable Ingestion Pipeline With Rust</title>
				<link>https://dhruvasagar.dev/posts/building-a-scalable-ingestion-pipeline-with-rust/</link>
				<pubDate>Mon, 05 May 2025 16:58:25 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/building-a-scalable-ingestion-pipeline-with-rust/</guid>
				<description>How to build a scalable ingestion pipeline with Rust</description>
			</item>
			<item>
				<title>Positive Effects of Exercise on Mental Health</title>
				<link>https://dhruvasagar.dev/posts/positive-effects-of-exercise-on-mental-health/</link>
				<pubDate>Mon, 18 Nov 2024 10:51:28 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/positive-effects-of-exercise-on-mental-health/</guid>
				<description>Exercise is also a form of meditation, has tremendous positive impact on mental health</description>
			</item>
			<item>
				<title>Neovim as a Java IDE</title>
				<link>https://dhruvasagar.dev/posts/neovim-java-ide/</link>
				<pubDate>Sun, 01 Sep 2024 04:16:00 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/neovim-java-ide/</guid>
				<description>&lt;p&gt;Neovim has come a long way today from it&amp;rsquo;s original goal of being able to&#xA;support asynchronous jobs. Today it comes packed with a ton of useful and high&#xA;performance libraries and plugins. To add to that it also has a highly&#xA;enthusiastic and vibrant community of lua developers who are working&#xA;tirelessly to make neovim better.&lt;/p&gt;&#xA;&lt;p&gt;Today we&amp;rsquo;ll look at how one can easily configure neovim to work similar to&#xA;a modern Java IDE.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Speak</title>
				<link>https://dhruvasagar.dev/posts/how-to-speak/</link>
				<pubDate>Sun, 17 Mar 2024 19:54:06 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/how-to-speak/</guid>
				<description>Collection of my notes from the lecture titled &amp;lsquo;How to Speak&amp;rsquo; by Patrick Winston</description>
			</item>
			<item>
				<title>Generic Callbacks in Rust</title>
				<link>https://dhruvasagar.dev/posts/generic-callbacks-in-rust/</link>
				<pubDate>Mon, 11 Mar 2024 10:45:06 +0530</pubDate>
				<guid>https://dhruvasagar.dev/posts/generic-callbacks-in-rust/</guid>
				<description>&lt;p&gt;In a recent project, we developed an ingestion pipeline in Rust. We wanted to&#xA;execute asynchronous tasks in response to messages received from SQS, as&#xA;a &lt;strong&gt;subscriber&lt;/strong&gt;. Our goal was to leverage Rust generics to allow the&#xA;subscriber to take ownership of the payload schema and the pipeline&#xA;implementation details. This approach enables the separation of the SQS&#xA;subscription logic from the subscriber’s responsibilities, promoting of&#xA;cleaner separation of concerns. It also facilitates independent testing of&#xA;both components, ensuring they can be assessed in isolation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>DIY remote controlled pan &amp; tilt CCTV using Raspberry Pi</title>
				<link>https://dhruvasagar.dev/2018/07/06/diy-remote-controlled-pan-tilt-cctv-using-raspberry-pi/</link>
				<pubDate>Fri, 06 Jul 2018 16:59:10 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2018/07/06/diy-remote-controlled-pan-tilt-cctv-using-raspberry-pi/</guid>
				<description>&lt;p&gt;&lt;strong&gt;RPi CCTV in Action&lt;/strong&gt; :&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;video-container&#34;&gt;&#xA;&lt;iframe&#xA;class=&#34;video video--16x9&#34;&#xA;src=&#34;https://www.youtube-nocookie.com/embed/5gEBrlaixCk?cc_load_policy=1&amp;cc=1&#34; allowfullscreen title=&#34;RPi CCTV in Action&#34; frameborder=&#34;0&#34; sandbox=&#34;allow-same-origin allow-scripts&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A simple web interface to control the RPi CCTV&lt;/strong&gt; :&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;video-container&#34;&gt;&#xA;&lt;iframe&#xA;class=&#34;video video--16x9&#34;&#xA;src=&#34;https://www.youtube-nocookie.com/embed/1G8wricwkds?cc_load_policy=1&amp;cc=1&#34; allowfullscreen title=&#34;A simple web interface to control the RPi CCTV&#34; frameborder=&#34;0&#34; sandbox=&#34;allow-same-origin allow-scripts&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What you need to build this (hardware)&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Raspberry Pi&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;Preferably Raspberry Pi-3, for on-board wireless, or&#xA;Raspberry Pi Zero W, although you can achieve similar result without much&#xA;effort using other boards&#xA;&lt;/span&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Pan &amp;amp; Tilt frame, I used one available here on amazon :&#xA;&lt;a href=&#34;https://www.amazon.in/gp/product/B010M25JVU/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://www.amazon.in/gp/product/B010M25JVU/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;2 servo motors. I used sg90 micro servo motors since I had them handy,&#xA;however you can also use other similar ones available&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I have recently started learning GoLang, and I decided to try to make use of&#xA;it for a small IOT project that I&amp;rsquo;ve been meaning to do for a long time. In my&#xA;research I came across &lt;a href=&#34;https://gobot.io&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Gobot&lt;/a&gt;, which is a framework for&#xA;building robots written in golang. It comes with support for a lot of&#xA;development boards available in the market such as Raspberry Pi, Beaglebone,&#xA;Arduino, and several more. Not only that it also has drivers available for&#xA;a wide variety of devices which can be used to create all sorts of nifty&#xA;robots.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SSH Config Trick</title>
				<link>https://dhruvasagar.dev/2017/10/07/ssh-config-trick/</link>
				<pubDate>Fri, 06 Oct 2017 19:21:20 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2017/10/07/ssh-config-trick/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;Update2 : As I have been informed now, there has recently been support added&#xA;for including external files in the ssh config. Refer&#xA;&lt;a href=&#34;https://man.openbsd.org/ssh_config#Include&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://man.openbsd.org/ssh_config#Include&lt;/a&gt;&#xA;for details.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Update : Modified the script for more flexibility to allow easy modifications&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I use SSH nearly every day to securely connect to remote servers. For&#xA;simplifying managing remote server configurations &amp;amp; not having to remember IP&#xA;addresses and other server specific details, I use ssh config. For those who&#xA;aren’t familiar with this should read – &lt;a href=&#34;http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Text Editor Choice &amp; Peer Pressure</title>
				<link>https://dhruvasagar.dev/2017/03/01/text-editor-choice-peer-pressure/</link>
				<pubDate>Wed, 01 Mar 2017 10:37:42 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2017/03/01/text-editor-choice-peer-pressure/</guid>
				<description>&lt;p&gt;I am a &lt;a href=&#34;https://www.vim.org&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;VIM&lt;/a&gt; user and have been for quite a long&#xA;time&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;~7 years&#xA;&lt;/span&gt;&#xA;. I am both a vim plugin author and&#xA;also like to believe I have helped a lot of people switch / grok the core&#xA;philosophy that I believe distinguishes it from all other editors and gives it&#xA;an edge (IMO).&lt;/p&gt;&#xA;&lt;p&gt;However, in this article I am not here to convince you to choose VIM as your&#xA;choice of text editor, on the contrary, I am going to suggest you to do the&#xA;opposite, especially if the only motivation to do so is driven by some form of&#xA;peer pressure.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Template with Context using ERB</title>
				<link>https://dhruvasagar.dev/2017/02/01/template-context-using-erb/</link>
				<pubDate>Wed, 01 Feb 2017 12:15:49 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2017/02/01/template-context-using-erb/</guid>
				<description>&lt;p&gt;Recently, I was required to build a template rendering component that should&#xA;render within a dynamic context, i.e. it would have methods / variables&#xA;defined within a predefined context available during rendering, apart from&#xA;what was provided directly.&lt;/p&gt;&#xA;&lt;p&gt;For simplicity we chose &lt;a href=&#34;http://www.stuartellis.name/articles/erb/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ERB&lt;/a&gt;,&#xA;since we can place them within locale files for internationalisation and&#xA;designers could edit them with ease if need arises.&lt;/p&gt;&#xA;&lt;p&gt;Following is a very simple implementation. Since we extend &lt;code&gt;OpenStruct&lt;/code&gt; we&#xA;can simply pass a hash to it during instantiation and all the keys will be&#xA;accessible as methods and will be exposed directly during rendering.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Slack old school style</title>
				<link>https://dhruvasagar.dev/2016/11/13/slack-old-school-style/</link>
				<pubDate>Sun, 13 Nov 2016 12:27:39 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2016/11/13/slack-old-school-style/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://slack.com&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Slack&lt;/a&gt; has gained a lot of popularity in recent times as&#xA;a tool for inter-team communication and for the right reasons. It offers a lot&#xA;of features such as 3rd party software integrations, rich content&#xA;communication, collaboration, bots etc. which when put together help create&#xA;a rich collaborative user experience for teams to work together, especially&#xA;when they are not co-located, which is fairly common these days.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re anything like me and have been around long enough to know what&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Internet_Relay_Chat&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;IRC&lt;/a&gt; is and when you look&#xA;at various elements that slack provides like channels, accounts (servers),&#xA;private messaging, etc. you know that it draws a lot of parallels and&#xA;inspiration from that old school communication tool.&lt;/p&gt;</description>
			</item>
			<item>
				<title>WebRTC Broadcast</title>
				<link>https://dhruvasagar.dev/2016/11/02/webrtc-broadcast/</link>
				<pubDate>Wed, 02 Nov 2016 12:52:30 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2016/11/02/webrtc-broadcast/</guid>
				<description>&lt;p&gt;WebRTC is fun! I recently gave a quick session on WebRTC at Bangalore Ruby&#xA;User Group (BRUG). Following are the slides of my presentation.&lt;/p&gt;&#xA;&lt;iframe&#xA;  style=&#34;width: 100%; height: 500px;&#34;&#xA;  frameborder=&#34;0&#34;&#xA;  marginwidth=&#34;0&#34;&#xA;  marginheight=&#34;0&#34;&#xA;  scrolling=&#34;no&#34;&#xA;  src=&#34;https://www.slideshare.net/slideshow/embed_code/key/3n2wUUKX2yV3EJ?startSlide=1&#34;&#xA;  allowfullscreen&#xA;  webkitallowfullscreen&#xA;  mozallowfullscreen&gt;&#xA;&lt;/iframe&gt;&#xA;&lt;div style=&#34;margin-bottom: 5px;text-align: center;&#34;&gt;&#xA;  &lt;strong&gt;&#xA;    &lt;a&#xA;        href=&#34;https://www.slideshare.net/dhruvasagar/webrtc-67392562&#34;&#xA;        title=&#34;WebRTC&#34;&#xA;        target=&#34;_blank&#34;&gt;&#xA;      WebRTC&#xA;    &lt;/a&gt;&#xA;  &lt;/strong&gt; from &lt;strong&gt;&#xA;    &lt;a href=&#34;https://www.slideshare.net/dhruvasagar&#34; target=&#34;_blank&#34;&gt;&#xA;      Dhruva Sagar&#xA;    &lt;/a&gt;&#xA;  &lt;/strong&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;For demo I had recently created a demo application in elixir using the phoenix&#xA;framework because it makes dealing with websockets really easy. That is used&#xA;for creating the custom signaling service that is required to facilitate such&#xA;a broadcast. The source code is available at &lt;a href=&#34;https://github.com/dhruvasagar/webrtc-broadcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dhruvasagar/webrtc-broadcast&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Pristine – ZSH Theme</title>
				<link>https://dhruvasagar.dev/2015/11/28/pristine-zsh-theme/</link>
				<pubDate>Sat, 28 Nov 2015 06:24:13 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2015/11/28/pristine-zsh-theme/</guid>
				<description>&lt;p&gt;A while back I posted about &lt;a href=&#34;https://dhruvasagar.dev/2013/03/13/amuse-zsh-theme&#34;&gt;Amuse&lt;/a&gt; my prompt theme for ZSH targeting&#xA;&lt;code&gt;oh-my-zsh&lt;/code&gt;. Since this was a much appreciated theme, I would like to share&#xA;another theme, Pristine, that I have created.&lt;/p&gt;&#xA;&lt;p&gt;However, I recently switched to using&#xA;&lt;a href=&#34;https://github.com/sorin-ionescu/prezto&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Prezto&lt;/a&gt;. This is because it felt&#xA;like a more minimalistic configuration framework for ZSH. I also wanted to get&#xA;faster load times. I must say my experience has been quite good and I really&#xA;like it. Obviously there are pros and cons but I digress.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Google open sources it’s machine learning system</title>
				<link>https://dhruvasagar.dev/2015/11/10/google-open-sources-its-machine-learning-system/</link>
				<pubDate>Mon, 09 Nov 2015 19:46:28 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2015/11/10/google-open-sources-its-machine-learning-system/</guid>
				<description>&lt;p&gt;I am a huge proponent of open source technologies and having worked&#xA;predominantly in various web technologies in the course of my career, I mostly&#xA;work exclusively with open source stacks.&lt;/p&gt;&#xA;&lt;p&gt;In the recent past I have been very keen to try and wrap my head around&#xA;Artificial Intelligence and more specifically Machine Learning, although I am&#xA;still barely even scratching the surface of the nitty-gritty’s of the&#xA;field, especially the mathematical underpinnings, this is still a huge deal!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grow your brain!</title>
				<link>https://dhruvasagar.dev/2015/11/09/grow-your-brain/</link>
				<pubDate>Mon, 09 Nov 2015 14:27:20 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2015/11/09/grow-your-brain/</guid>
				<description>&lt;p&gt;Learning is key in brain development. Of course what aspects and how much of&#xA;brain function improve as a result depends on the mode / type / content&#xA;&amp;amp; method of learning. But I am not here to talk about that. Now, this&#xA;knowledge isn&amp;rsquo;t new information, we all know this already, and have seen&#xA;it in good effect in children and hence we all know and understand the&#xA;importance of education &amp;amp; sport for children.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Find huge files in linux</title>
				<link>https://dhruvasagar.dev/2015/05/08/find-huge-files-in-linux/</link>
				<pubDate>Fri, 08 May 2015 04:17:01 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2015/05/08/find-huge-files-in-linux/</guid>
				<description>&lt;p&gt;Switching to SSD&amp;rsquo;s for better performance and compromising on disk space can&#xA;be a tough decision to make. Though nowadays with the prices of SSD&amp;rsquo;s going&#xA;down, it is something that a lot of people are consciously doing.&lt;/p&gt;&#xA;&lt;p&gt;However &lt;label for=&#34;marginnote-1&#34; class=&#34;margin-toggle marginnote-ind&#34;&gt;&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;marginnote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;marginnote&#34;&gt;&#xA;having spoilt by past experiences of having ample disk&#xA;space&#xA;&lt;/span&gt;&#xA; when you switch from a 500GB (or 1TB) hard disk to an,&#xA;albeit super fast, 128GB SSD, you will inevitably run into situations where&#xA;you need to clean out large files taking space on your disk. Something I had&#xA;run into myself about a year back when I made the switch myself on my macbook.&#xA;Oddly enough this problem turned out to be significant enough that I had to&#xA;seek out a way to quickly find out which were the top biggest files on my file&#xA;system so I could get rid of them / move to an external hard disk.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Google Code Jam 2014 Qualifiers</title>
				<link>https://dhruvasagar.dev/2014/04/14/google-code-jam-2014-qualifiers/</link>
				<pubDate>Mon, 14 Apr 2014 08:55:35 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2014/04/14/google-code-jam-2014-qualifiers/</guid>
				<description>&lt;p&gt;Google Code Jam has always been a competition I have cherished, simply because&#xA;the problems they post are brilliant and the closest to reality as compared to&#xA;problems of other competitions. They&amp;rsquo;re always fun to read, disect &amp;amp; solve,&#xA;more often than not, the solutions are reasonably&#xA;trivial&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;Especially for the qualifiers&#xA;&lt;/span&gt;&#xA; yet&#xA;extremely subtle &amp;amp; deceptive.&lt;/p&gt;&#xA;&lt;p&gt;Today I want to share the solutions of 3 problems I was able to solve, the&#xA;code should pretty much speak for itself because none of it is very complex.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM Custom TabLine</title>
				<link>https://dhruvasagar.dev/2014/04/06/vim-custom-tabline/</link>
				<pubDate>Sat, 05 Apr 2014 18:40:01 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2014/04/06/vim-custom-tabline/</guid>
				<description>&lt;p&gt;Hi guys,&lt;/p&gt;&#xA;&lt;p&gt;VIM has an option &lt;code&gt;tabline&lt;/code&gt; that one can use to configure how the tab line&#xA;would look like. Back when I used to use gvim, I could very easily manipulate&#xA;how the text on the tab looked like by setting the &lt;code&gt;guitablabel&lt;/code&gt; setting,&#xA;however &lt;code&gt;tabline&lt;/code&gt; is not all that easy to configure.&lt;/p&gt;&#xA;&lt;p&gt;Here is what I use now :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;MyTabLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabpagenr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;&amp;#34; range() starts at 0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;winnr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabpagewinnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;buflist&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabpagebuflist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufnr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;buflist&lt;/span&gt;[&lt;span class=&#34;nx&#34;&gt;winnr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fnamemodify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bufnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:t&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt; . &lt;span class=&#34;s1&#34;&gt;&amp;#39;T&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabpagenr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; ? &lt;span class=&#34;s1&#34;&gt;&amp;#39;%#TabLineSel#&amp;#39;&lt;/span&gt; : &lt;span class=&#34;s1&#34;&gt;&amp;#39;%#TabLine#&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabpagewinnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; ? &lt;span class=&#34;s1&#34;&gt;&amp;#39; [No Name] &amp;#39;&lt;/span&gt; : &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt; . &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufmodified&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getbufvar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bufnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;amp;mod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufmodified&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;+ &amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;endfor&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; .&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;%#TabLineFill#&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;%&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MyTabLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is what it looks like :&lt;/p&gt;</description>
			</item>
			<item>
				<title>Creating Custom Scratch Buffers in VIM</title>
				<link>https://dhruvasagar.dev/2014/03/11/creating-custom-scratch-buffers-in-vim/</link>
				<pubDate>Tue, 11 Mar 2014 09:07:22 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2014/03/11/creating-custom-scratch-buffers-in-vim/</guid>
				<description>&lt;p&gt;The other day I wanted to open a scratch buffer to write some temporary code&#xA;and the pass it on to a repl to test it out, the idea was that I could modify&#xA;it as needed and resend it back to the repl and see the changes, helps to&#xA;debug easily.&lt;/p&gt;&#xA;&lt;p&gt;So I just wrote out this simple code here that allows me to launch a scratch&#xA;buffer in different ways, but the difference is I can set various options for&#xA;it while creating it. First lets have a look at the code :&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM – Filter Quickfix List</title>
				<link>https://dhruvasagar.dev/2013/12/17/vim-filter-quickfix-list/</link>
				<pubDate>Tue, 17 Dec 2013 10:15:07 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/12/17/vim-filter-quickfix-list/</guid>
				<description>&lt;p&gt;If you are used to using the quickfix list in VIM there are times when you&#xA;want to filter certain things out of the quickfix list to narrow it down to&#xA;relevant results that you need. Rather than firing the quickfix command all&#xA;over again with a refined expression, it is easier &amp;amp; often faster to simply&#xA;remove items from the list. I wrote this simple vimscript to do just that.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM – Toggle Ruby Hash Syntax</title>
				<link>https://dhruvasagar.dev/2013/11/26/vim-toggle-ruby-hash-syntax/</link>
				<pubDate>Tue, 26 Nov 2013 15:05:55 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/11/26/vim-toggle-ruby-hash-syntax/</guid>
				<description>&lt;p&gt;Ruby 1.9 introduced a new json style ruby hash syntax. Although we can use&#xA;this to define static hash objects and puts a limitation on the key we can&#xA;use, it&amp;rsquo;s a fairly neat syntax nevertheless. However I work on several&#xA;projects, both new and old and hence the new syntax is not always readily&#xA;available.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Old style hash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;hash&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;:a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# New style hash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;hash&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To demonstrate the sheer power of regular expressions &amp;amp; VIM, here&amp;rsquo;s&#xA;a tiny snippet that allows you to quickly toggle a ruby hash syntax from one&#xA;form to other.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM for Multiple Projects in separate Tmux windows</title>
				<link>https://dhruvasagar.dev/2013/11/26/vim-for-multiple-projects-in-tmux-windows/</link>
				<pubDate>Tue, 26 Nov 2013 05:20:57 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/11/26/vim-for-multiple-projects-in-tmux-windows/</guid>
				<description>&lt;p&gt;My development environment setup consists of several tools, however the 2 most&#xA;used and essential tools that have a great impact on my workflow are &lt;code&gt;tmux&lt;/code&gt;&#xA;&amp;amp; &lt;code&gt;vim&lt;/code&gt;. Since I often work on several projects, I find it best to work on&#xA;different vim sessions in separate tmux windows.&lt;/p&gt;&#xA;&lt;p&gt;However tmux by default only shows the name of the currently running process&#xA;in the title and that can often lead to confusion as to which tmux window is&#xA;which project. To solve this issue I came up with a very simple vim script&#xA;that utilizes tmux&amp;rsquo;s powerful API to automatically rename the tmux&#xA;window appropriately and hence make it incredibly easy for me to know which&#xA;tmux window is for which project.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ActiveRecord like where for array of hashes in ruby</title>
				<link>https://dhruvasagar.dev/2013/04/20/activerecord-like-where-for-array-of-hashes-in-ruby/</link>
				<pubDate>Sat, 20 Apr 2013 05:36:35 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/04/20/activerecord-like-where-for-array-of-hashes-in-ruby/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;Edit : Updated the code as per the suggestions made by Masklinn.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Recently I was working on&#xA;&lt;a href=&#34;https://github.com/dhruvasagar/soulmate_rails/issues/1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Issue#1&lt;/a&gt; of my&#xA;&lt;a href=&#34;https://github.com/dhruvasagar/soulmate_rails&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Soulmate Rails&lt;/a&gt; gem, which is&#xA;a very simple and obvious optimization that I should have thought of myself.&#xA;Thanks to &lt;a href=&#34;https://github.com/lephyrius&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;lephyrius&lt;/a&gt; though for pointing it&#xA;out. In my search method I was looping through the search results and calling&#xA;find on each to get it from db. The fix involved to instead use a single where&#xA;for all ids so that it translates to a single db call. A simple fix as well as&#xA;an optimization.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM Markify</title>
				<link>https://dhruvasagar.dev/2013/04/01/vim-markify/</link>
				<pubDate>Mon, 01 Apr 2013 13:06:29 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/04/01/vim-markify/</guid>
				<description>&lt;p&gt;Recently I picked up some minor configs for ruby from &lt;a href=&#34;http://tpo.pe&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Time&#xA;Pope&amp;rsquo;s&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/tpope/tpope/blob/master/.vimrc#L505&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;vimrc&lt;/a&gt;. Here&amp;rsquo;s the&#xA;code :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FileType&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ruby&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \ &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;expand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=~&lt;/span&gt;# &lt;span class=&#34;s1&#34;&gt;&amp;#39;_test\.rb$&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \   &lt;span class=&#34;nx&#34;&gt;compiler&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rubyunit&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;setl&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;makeprg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;testrb&lt;/span&gt;\ \&lt;span class=&#34;s2&#34;&gt;&amp;#34;%:p\&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \ &lt;span class=&#34;k&#34;&gt;elseif&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;expand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=~&lt;/span&gt;# &lt;span class=&#34;s1&#34;&gt;&amp;#39;_spec\.rb$&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \   &lt;span class=&#34;nx&#34;&gt;compiler&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rspec&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;setl&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;makeprg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rspec&lt;/span&gt;\ \&lt;span class=&#34;s2&#34;&gt;&amp;#34;%:p\&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \ &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \   &lt;span class=&#34;nx&#34;&gt;compiler&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ruby&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;setl&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;makeprg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ruby&lt;/span&gt;\ &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;wc&lt;/span&gt;\ \&lt;span class=&#34;s2&#34;&gt;&amp;#34;%:p\&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    \ &lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What this does is given the filetype is Ruby, it correctly sets up the&#xA;compiler and makeprg such that it allows you to run your tests via &lt;code&gt;:make!&lt;/code&gt;&#xA;This is pretty neat I must say :), because it correctly loads the quickfix&#xA;list with the errors and I can actually traverse them in order and fix them.&#xA;All this without needing any plugin whatsoever :).&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM Better FoldText</title>
				<link>https://dhruvasagar.dev/2013/03/28/vim-better-foldtext/</link>
				<pubDate>Thu, 28 Mar 2013 18:00:54 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/03/28/vim-better-foldtext/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update 3&lt;/strong&gt;: Improved the code for extraction of fillchar from &lt;code&gt;fillchars&lt;/code&gt;&#xA;option and taking &lt;code&gt;foldcolumn&lt;/code&gt; into account.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;: Fixed the regex for removing the fold marker from the&#xA;displayed text by splitting the &lt;code&gt;&#39;{{{&#39;&lt;/code&gt; in the regex to&#xA;&lt;code&gt;&#39;{{&#39;. &#39;{&#39;&lt;/code&gt; so that it is not treated as a fold marker&#xA;by vim. Thanks to &lt;a href=&#34;http://www.reddit.com/user/Amadan&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Amadan&lt;/a&gt; on reddit&#xA;&lt;a href=&#34;http://www.reddit.com/r/vim/comments/1b6viw/vim_better_foldtext/c94it43&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Reddit&#xA;Tip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Fixed &lt;code&gt;NeatFoldText()&lt;/code&gt; to get &lt;code&gt;foldchar&lt;/code&gt; from &lt;code&gt;fillchars&lt;/code&gt;&#xA;settings.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Initially when I started using VIM, I had borrowed configs from my mentor&#xA;&lt;a href=&#34;http://vagmim.in/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Vagmi Mudumbai&lt;/a&gt; &lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;To whom I am Eternally&#xA;Thankful!!!&#xA;&lt;/span&gt;&#xA;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM Table Mode</title>
				<link>https://dhruvasagar.dev/2013/03/17/vim-table-mode/</link>
				<pubDate>Sun, 17 Mar 2013 07:20:15 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/03/17/vim-table-mode/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;UPDATE 2: Released v 2.0 of the plugin. Check github for details.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;UPDATE : I have added more features to the original plugin, showcasing some&#xA;core features in a new demo (Part 2).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Recently a friend of mine showed off emacs table mode to me and to be honest,&#xA;I felt a bit jealous :). Hence I began to search for existing vim plugins that&#xA;might offer a similar functionality and I did find a plugin &lt;a href=&#34;https://github.com/nvie/vim-rst-tables&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;VIM RST&#xA;Tables&lt;/a&gt;, which is a ftplugin that aids&#xA;the creation of tables within rst files and allows you to format existing&#xA;content into a table, although this plugin came closest to what I was looking&#xA;for it wasn&amp;rsquo;t quite there. Then I found a very interesting &amp;amp; simple plugin&#xA;shared as a gist by the infamous &lt;a href=&#34;http://tpo.pe&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tim Pope&lt;/a&gt;:&#xA;&lt;a href=&#34;https://gist.github.com/tpope/287147&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;cucumbertables.vim&lt;/a&gt; which I found quite&#xA;impressive.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Amuse – ZSH Theme</title>
				<link>https://dhruvasagar.dev/2013/03/13/amuse-zsh-theme/</link>
				<pubDate>Wed, 13 Mar 2013 11:12:50 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/03/13/amuse-zsh-theme/</guid>
				<description>&lt;p&gt;Amuse is a simplistic theme I built for the popular shell ZSH that I use.&lt;/p&gt;&#xA;&lt;p&gt;Features :&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Shows git prompt with additional support for dirty (! in red) and untracked&#xA;(? in green) git flags.&lt;/li&gt;&#xA;&lt;li&gt;Shows the system time with a neat time unicode character. Although I am&#xA;sure most wouldn&amp;rsquo;t find having time on the prompt useful, I find it&#xA;very useful since it helps me get a good idea on how long a command took to&#xA;execute or even how long back I executed some command. Check the screenshot&#xA;for reference.&lt;/li&gt;&#xA;&lt;li&gt;Prompt where you type the command starts after a $ on a new line giving you&#xA;ample space (full width barring the $ and a space) to type your command and&#xA;so the prompt (especially if it’s long, eg. if you are in some deep&#xA;nested directory) does not interfere with your commands and avoids wrapping&#xA;for the most part unless you are typing an excessively long command in which&#xA;case you should probably use an editor (&lt;a href=&#34;https://dhruvasagar.dev/2012/08/24/vim-in-my-muscle-memory&#34; title=&#34;VIM in my muscle memory&#34;&gt;VIM&lt;/a&gt;) to edit it with&#xA;&lt;kbd&gt;^X^E&lt;/kbd&gt;&#xA;.&lt;/li&gt;&#xA;&lt;li&gt;Shows you the current ruby version in use from rvm, using the &lt;code&gt;rvm current&lt;/code&gt;&#xA;command in the right prompt. The ZSH right prompt is really&#xA;cool and since I use rvm with several ruby versions which change with&#xA;different projects .rvmrc files, the right prompt helps me to know the ruby&#xA;context at all times. It shows the full ruby version along with the gemset&#xA;name in use. The nice thing about the right prompt in ZSH is that it hides&#xA;automatically if you happen to type a command that&amp;rsquo;s long enough to&#xA;reach it :).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: My AMUSE theme for &lt;a href=&#34;https://github.com/robbyrussell/oh-my-zsh&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Oh My&#xA;Zsh&lt;/a&gt; was merged into the&#xA;repository so you don&amp;rsquo;t need my fork anymore which has since been deleted.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vim Railscasts Colorscheme</title>
				<link>https://dhruvasagar.dev/2013/03/08/vim-railscasts-colorscheme/</link>
				<pubDate>Fri, 08 Mar 2013 08:03:00 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/03/08/vim-railscasts-colorscheme/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://dhruvasagar.dev/2012/08/24/vim-in-my-muscle-memory&#34; title=&#34;VIM in my muscle memory&#34;&gt;VIM in my muscle memory&lt;/a&gt; is one of my popular posts, the day I published&#xA;it, I attracted over 3,200 unique views in a single day, mostly from &lt;a href=&#34;http://news.ycombinator.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hacker&#xA;News&lt;/a&gt; and &lt;a href=&#34;http://www.reddit.com/r/programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Reddit&#xA;Programming&lt;/a&gt;. Although it is an extremely&#xA;densely packed post with lots of information, I hope it has helped some to&#xA;appreciate &lt;a href=&#34;http://www.vim.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;VIM&lt;/a&gt; like I do.&lt;/p&gt;&#xA;&lt;p&gt;In my several years of VIM usage, I have tried several colorscheme’s, though&#xA;I have come to like only a select few. One colorscheme that I have liked the&#xA;most and have always ended up coming back to is the Railscasts theme. There&#xA;are 2 versions of this script :&lt;/p&gt;</description>
			</item>
			<item>
				<title>Soulmate Rails</title>
				<link>https://dhruvasagar.dev/2013/03/04/soulmate-rails/</link>
				<pubDate>Mon, 04 Mar 2013 08:11:28 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/03/04/soulmate-rails/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;UPDATE : I released the first stable version 0.2.1, it should be usable as&#xA;is without any issues.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;One of the most common things to do in any standard rails web applications is&#xA;auto-completion. One interesting solution for this is by using redis’ sorted&#xA;sets &lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;Which are blazing fast&#xA;&lt;/span&gt;&#xA;, storing key value&#xA;pairs for partial matches. For example, if we wish to index the word ‘Dhruva&#xA;Sagar’, you can simply create key -&amp;gt; value pairs of ‘d’ -&amp;gt; ‘Dhruva Sagar’,&#xA;‘dh’ -&amp;gt; ‘Dhruva Sagar’, ‘dhr’ -&amp;gt; ‘Dhruva Sagar’ and so on. Since hash lookups&#xA;are of constant time complexity O(1), they’re very fast and hence the&#xA;completions are too! Combine this with using sorted sets of redis to easily&#xA;order / sort information on a specific criteria and you have a blazing fast&#xA;solution. Of course the actual implementation can be further optimized by&#xA;means of caching query results and make the system perform even further.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tmux Powerline Special Characters Issue</title>
				<link>https://dhruvasagar.dev/2013/02/23/tmux-powerline-special-characters-issue/</link>
				<pubDate>Sat, 23 Feb 2013 07:16:45 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2013/02/23/tmux-powerline-special-characters-issue/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://tmux.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tmux&lt;/a&gt; is a terminal multiplexer like&#xA;&lt;a href=&#34;http://www.gnu.org/software/screen/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Screen&lt;/a&gt; on steroids. It is faster,&#xA;slicker and much more easily extendable than screen. For why you might want to&#xA;try tmux over screen checkout these articles :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://dominik.honnef.co/posts/2010/10/why_you_should_try_tmux_instead_of_screen/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Why you should try Tmux instead of Screen&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.wikivs.com/wiki/Screen_vs_tmux&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Screen Vs Tmux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Tmux Powerline is an extension to tmux&amp;rsquo;s statusline which makes it look&#xA;incredibly cool. Look at this screenshot:&lt;/p&gt;&#xA;&#xA;&#xA;    &lt;figure class=&#34;fullwidth&#34;&gt;&#xA;  &#xA;  &#xA;  &lt;img src=&#34;https://dhruvasagar.dev/wp-content/uploads/2013/02/Screenshot-from-2013-02-23-122131.png&#34; alt=&#34;Image&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;  &#xA;  &lt;figcaption&gt;&#xA;&#xA;&lt;strong&gt;Tmux Powerline. &lt;/strong&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &lt;/figcaption&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&lt;p&gt;There are 2 projects that provide this feature.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ubuntu on Macbook Pro</title>
				<link>https://dhruvasagar.dev/2012/12/28/ubuntu-on-macbook-pro/</link>
				<pubDate>Fri, 28 Dec 2012 11:02:32 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2012/12/28/ubuntu-on-macbook-pro/</guid>
				<description>&lt;p&gt;As I have mentioned before ([Magician Chrome makes RAM disappear][1]), I had&#xA;been facing several issues with Mac OSX. I use vim extensively, and so I had&#xA;installed &lt;a href=&#34;http://macvim.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;MacVim&lt;/a&gt;&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;after great&#xA;difficulty&#xA;&lt;/span&gt;&#xA; on my Macbook Pro, but recently while trying out&#xA;a new plugin I found there was something amiss between MacVim &amp;amp; Python on my&#xA;system and as a result I was unable to use the plugin. In my attempt at trying&#xA;to repair MacVim, I ended up uninstalling it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Magician Chrome makes RAM disappear</title>
				<link>https://dhruvasagar.dev/2012/08/28/magician-chrome-makes-ram-disappear/</link>
				<pubDate>Tue, 28 Aug 2012 08:47:19 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2012/08/28/magician-chrome-makes-ram-disappear/</guid>
				<description>&lt;p&gt;Recently I have been experiencing a very weird issue on my Macbook Pro, I have&#xA;Lion v10.7.4, with a decent configuration : 2.8 GHz Intel Core i7 processor,&#xA;8GB Ram with a 750GB sata hard disk. But over a reasonably prolonged period of&#xA;usage, of around 4-6 hours, I notice from time to time that Mac OSX runs&#xA;completely out of RAM! The Activity Monitor reports mere MBs of Free Memory,&#xA;sometimes even less than 10MB. Needless to say this makes the Macbook loose&#xA;it&amp;rsquo;s mind, it would freeze up on random, seemingly basic tasks, even switching&#xA;to a window can freeze the macbook for minutes, if not hours. Which is&#xA;understandable, though, given how low memory it is left with.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VIM in my muscle memory</title>
				<link>https://dhruvasagar.dev/2012/08/24/vim-in-my-muscle-memory/</link>
				<pubDate>Fri, 24 Aug 2012 17:59:45 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2012/08/24/vim-in-my-muscle-memory/</guid>
				<description>&lt;p&gt;I have been an ardent VIM user for almost 4 years now, and it&amp;rsquo;s been&#xA;a while since I have been wanting to write this Blog. My motivation is not to&#xA;showoff or to start any flame war against any other popular text editors that&#xA;may or &lt;strong&gt;may not&lt;/strong&gt; be better ;), but to simply showcase the things I like and&#xA;have come to appreciate in VIM, and show why you should seriously consider it&#xA;when deciding which programming editor you should use. Hopefully I will be&#xA;able to do justice to VIM - the &lt;strong&gt;Ultimate Programmer&amp;rsquo;s Editor&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Artificially Intelligent Spyware</title>
				<link>https://dhruvasagar.dev/2012/08/21/artificially-intelligent-spyware/</link>
				<pubDate>Tue, 21 Aug 2012 09:58:49 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2012/08/21/artificially-intelligent-spyware/</guid>
				<description>&lt;p&gt;There has been tremendous advancement in the domain of Artificial Intelligence&#xA;(AI) and Machine Learning (ML) in the recent years. Although people often like&#xA;to take a shot at the state of AI on the grounds of the fact that several of&#xA;the early claims on AI that it will soon become almost as real as humans&#xA;haven&amp;rsquo;t really materialized, there still has been an incredible amount&#xA;of growth in this domain.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – TOC</title>
				<link>https://dhruvasagar.dev/2010/12/24/getting-started-with-ruby-toc/</link>
				<pubDate>Fri, 24 Dec 2010 18:29:47 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/12/24/getting-started-with-ruby-toc/</guid>
				<description>&lt;p&gt;Hi,&lt;/p&gt;&#xA;&lt;p&gt;I have written a series of articles (in several parts) in an attempt to guide&#xA;beginners to get comfortable with Ruby. This article is my attempt to build&#xA;a TOC (Table of Contents) for it to act as an index for people to get a brief&#xA;idea regarding what each article is about and help them get to the sections&#xA;they are interested in.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part1/&#34; title=&#34;Getting started with Ruby - Part 1&#34;&gt;Getting started with Ruby - Part 1&lt;/a&gt;: In this article I begin with an&#xA;introduction to myself and my motivation behind writing these articles. I give&#xA;an introduction to Ruby, about how to get started with building your&#xA;development environment and introduce a few tools that ship along with Ruby&#xA;which will make your life that much better.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part2/&#34; title=&#34;Getting started with Ruby - Part 2&#34;&gt;Getting started with Ruby - Part 2&lt;/a&gt;: In this article I introduce Ruby in&#xA;slightly more detail and I get started with describing different data types in&#xA;Ruby. I cover Strings and Numbers in this article.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/10/21/getting-started-with-ruby-part3/&#34; title=&#34;Getting started with Ruby - Part 3&#34;&gt;Getting started with Ruby - Part 3&lt;/a&gt;: In this article I continue from my&#xA;previous article describing data types in Ruby and cover Ranges and Arrays.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/10/23/getting-started-with-ruby-part4/&#34; title=&#34;Getting started with Ruby - Part 4&#34;&gt;Getting started with Ruby - Part 4&lt;/a&gt;: In this article I continue further&#xA;and cover Hashes, one of the most commonly used data types in Ruby. I also&#xA;introduce blocks and about using blocks with functions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/10/26/getting-started-with-ruby-part5/&#34; title=&#34;Getting started with Ruby - Part 5&#34;&gt;Getting started with Ruby - Part 5&lt;/a&gt;: In this article I move onto&#xA;describing various looping constructs in Ruby, and also various flow control&#xA;modifiers in Ruby. After that I introduce Variables, Symbols, Constants,&#xA;Methods and Global Variables in Ruby.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dhruvasagar.dev/2010/11/03/getting-started-with-ruby-part6/&#34; title=&#34;Getting started with Ruby - Part 6&#34;&gt;Getting started with Ruby - Part 6&lt;/a&gt;: After having covered basics of&#xA;various constructs in Ruby, I considered it better to take a problem statement&#xA;and solve it in Ruby to bring most of what we’ve discussed into use. I chose&#xA;Google Codejam 2009′s qualification round problem – &lt;a href=&#34;http://code.google.com/codejam/contest/dashboard?c=90101&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Alien Language&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I tried to be clear, precise and specific. My intention was write more code&#xA;than to waste time in trying to explain and so I’ve used code comments to help&#xA;people understand what each part of the code is meant to do. I have plans on&#xA;going further and go onto describing classes &amp;amp; modules, sometime soon, even&#xA;though I expected more people to read and give their feedback, but owing to&#xA;a lot of work and hence a lack of time, I haven’t been able to do much justice&#xA;to the same, but hopefully I will be able to do so very soon. I hope it helps&#xA;people appreciate Ruby and motivate them to learn and understand it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MongoMapper Plugin – Versionable</title>
				<link>https://dhruvasagar.dev/2010/12/02/mongomapper-plugin-versionable/</link>
				<pubDate>Thu, 02 Dec 2010 03:53:38 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/12/02/mongomapper-plugin-versionable/</guid>
				<description>&lt;p&gt;There was a requirement at one of our projects here at &lt;a href=&#34;http://web.archive.org/web/20110917020206/http://www.artha42.com/&#34; title=&#34;Artha42 Innovations Private Limited&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Artha42 Innovations&#xA;Private Limited&lt;/a&gt; that our Mongo Mapper documents have inherent versioning&#xA;so as to be able to track the changes being made and also if required revert&#xA;the changes to a previous state. Since we’re using MongoMapper, I set out to&#xA;create a simple plugin for the same to add the required functionality.&lt;/p&gt;&#xA;&lt;p&gt;Initially, from the initial research I did, I found &lt;a href=&#34;http://shapado.com/&#34; title=&#34;Shapado&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Shapado&lt;/a&gt; had an&#xA;implementation of exactly what I wanted, however when I studied and understood&#xA;their implementation in detail, I realized that it doesn’t really work that&#xA;well in most scenarios, especially the ones we were tackling in our project.&#xA;Shapado’s versionable allows you to define a set of keys for a document, whose&#xA;changes would trigger creation of new versions. However in our project we&#xA;needed to track changes at the complete document level, i.e. even for changes&#xA;in the associations. Also the versions were embedded within the document&#xA;itself, which implied that the document would grow in size very rapidly, even&#xA;though our changes in each iteration could be minor, since each version would&#xA;literally be a snapshot of the complete document itself.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Calculating Hashes</title>
				<link>https://dhruvasagar.dev/2010/11/25/calculating-hashes/</link>
				<pubDate>Thu, 25 Nov 2010 09:30:27 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/11/25/calculating-hashes/</guid>
				<description>&lt;p&gt;Showcasing how to calculate hashes in Java, C# and Ruby!&lt;/p&gt;&#xA;&lt;h2 id=&#34;java-&#34;&gt;Java :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algorithm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MessageDigest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MessageDigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algorithm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexValue&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0xff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toHexString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toHexString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NoSuchAlgorithmException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;c-&#34;&gt;C# :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System.Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System.Security.Cryptography&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Encoding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WriteLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToUpper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;MD5&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MD5CryptoServiceProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA1Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA256&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA256Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA384&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA384Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA512&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA512Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;StringBuilder&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StringBuilder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Length&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AppendFormat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{0:x2}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ruby-&#34;&gt;Ruby :&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;require&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;digest&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;md5&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upcase&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;MD5&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;MD5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SHA1&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;SHA1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SHA256&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;SHA256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SHA384&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;SHA384&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;SHA512&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;SHA512&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see, the Ruby version to calculate hashes is the most concise&#xA;&amp;amp; simple.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 6</title>
				<link>https://dhruvasagar.dev/2010/11/03/getting-started-with-ruby-part6/</link>
				<pubDate>Wed, 03 Nov 2010 04:22:09 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/11/03/getting-started-with-ruby-part6/</guid>
				<description>&lt;p&gt;After having covered most of the basics of Ruby, lets get started on an actual&#xA;problem, just like I had promised in my previous article – &lt;a href=&#34;https://dhruvasagar.dev/2010/10/26/getting-started-with-ruby-part5/&#34; title=&#34;Getting started with Ruby - Part 5&#34;&gt;Getting started&#xA;with Ruby – Part 5&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am taking a relatively simple problem that came in &lt;a href=&#34;http://code.google.com/codejam/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google&#xA;Codejam&lt;/a&gt; 2009 qualification round. Here is&#xA;the direct link to the problem : &lt;a href=&#34;http://code.google.com/codejam/contest/dashboard?c=90101&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Alien&#xA;Language&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After years of study, scientists at Google Labs have discovered an alien&#xA;language transmitted from a faraway planet. The alien language is very&#xA;unique in that every word consists of exactly L lowercase letters. Also,&#xA;there are exactly D words in this language.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 5</title>
				<link>https://dhruvasagar.dev/2010/10/26/getting-started-with-ruby-part5/</link>
				<pubDate>Tue, 26 Oct 2010 03:35:06 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/10/26/getting-started-with-ruby-part5/</guid>
				<description>&lt;p&gt;Hi in my previous article &lt;a href=&#34;https://dhruvasagar.dev/2010/10/23/getting-started-with-ruby-part4/&#34; title=&#34;Getting started with Ruby - Part 4&#34;&gt;Getting started with Ruby – Part 4&lt;/a&gt; I covered&#xA;Hashes &amp;amp; blocks.&lt;/p&gt;&#xA;&lt;p&gt;Today I will take you through the various forms of loops in Ruby.&lt;/p&gt;&#xA;&lt;h2 id=&#34;while&#34;&gt;While&lt;/h2&gt;&#xA;&lt;p&gt;Executes &lt;em&gt;code&lt;/em&gt; as long as the given condition is true. We can separate the&#xA;code from the condition using either the keyword &lt;strong&gt;do&lt;/strong&gt;, a newline or&#xA;a semi-colon (;)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Iteration &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;#{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Output :&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Alternatively, it is also possible to use the while loop as a modifier&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# towards the end of a statement or a code block&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;puts&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Iteration &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;#{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Output :&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Iteration 4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;until&#34;&gt;Until&lt;/h2&gt;&#xA;&lt;p&gt;Is very similar to the while loop with respect to the syntax &amp;amp; usage, the only&#xA;difference between the two is the fact that the while loop executes the code&#xA;block as long as the condition is true, the until loop does exactly the&#xA;opposite, i.e. it executes the code block as long as the condition is false.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 4 – Hashes &amp; Blocks</title>
				<link>https://dhruvasagar.dev/2010/10/23/getting-started-with-ruby-part4/</link>
				<pubDate>Fri, 22 Oct 2010 19:57:01 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/10/23/getting-started-with-ruby-part4/</guid>
				<description>&lt;p&gt;In my previous article &lt;a href=&#34;https://dhruvasagar.dev/2010/10/21/getting-started-with-ruby-part3/&#34; title=&#34;Getting started with Ruby&#34;&gt;Getting started with Ruby – Part 3&lt;/a&gt; I started with&#xA;Collections and covered basics of Ranges &amp;amp; Arrays. Like I mentioned towards&#xA;the end of the article (in case you couldn’t manage to reach the end) I will&#xA;start with one of the most commonly used Collection objects in Ruby, namely&#xA;Hashes.&lt;/p&gt;&#xA;&lt;p&gt;Hashes are essentially data structures to store key – value pairs, when you&#xA;wish to store an element in the Hash you do so by assigning a unique key to it&#xA;within the hash and while retrieving you do so with the help of that unique&#xA;key. The beauty of hashes is the fact that the ‘key’ in question here could be&#xA;just about any object in Ruby, most commonly however in practice strings or&#xA;symbols (i’ll get to what these are soon) are used as keys.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 3 – Collections, Ranges &amp; Arrays</title>
				<link>https://dhruvasagar.dev/2010/10/21/getting-started-with-ruby-part3/</link>
				<pubDate>Wed, 20 Oct 2010 19:27:19 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/10/21/getting-started-with-ruby-part3/</guid>
				<description>&lt;p&gt;In my previous article &lt;a href=&#34;https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part2/&#34; title=&#34;Getting started with Ruby - Part 2&#34;&gt;Getting started with Ruby – Part 2&lt;/a&gt; I introduced&#xA;you all to Ruby &amp;amp; its philosophy and I started out with data type classes in&#xA;Ruby. I was able to give you an overview about Strings &amp;amp; Numbers in ruby.&#xA;Today I will start with &lt;strong&gt;Collections&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-range&#34;&gt;The Range&lt;/h2&gt;&#xA;&lt;p&gt;As the name suggests, ranges hold a sequential collection of numbers. Defining&#xA;a range in Ruby is extremely simple, instead of explaining, i’ll show it to&#xA;you. Don’t be afraid to start an IRB shell to try the code out.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 2 – Introduction &amp; Philosophy</title>
				<link>https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part2/</link>
				<pubDate>Mon, 18 Oct 2010 18:53:29 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part2/</guid>
				<description>&lt;p&gt;Hi again, this is part 2 of my series of articles to help beginners getting&#xA;started with the Ruby programming language. At this point of time I would like&#xA;to quote the definition of Ruby from the &lt;a href=&#34;http://www.ruby-lang.org/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ruby Programming Language&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A dynamic, open source programming language with a focus on simplicity and&#xA;productivity. It has an elegant syntax that is natural to read and easy to&#xA;write.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I know I had already quoted Ruby’s definition from wikipedia in my previous&#xA;article &lt;a href=&#34;https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part1/&#34;&gt;Getting started with Ruby - Part&#xA;1&lt;/a&gt;, but that was more from&#xA;a technical standpoint. Here I wanted to draw your attention to &lt;a href=&#34;http://en.wikipedia.org/wiki/Yukihiro_Matsumoto&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Yukihiro&#xA;Matsumoto&lt;/a&gt;‘s&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;Popularly&#xA;known as Matz&#xA;&lt;/span&gt;&#xA; philosophy behind creating Ruby, which is&#xA;making programming as simple &amp;amp; natural as humanely possible. We will be&#xA;witnessing that very soon.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with Ruby – Part 1</title>
				<link>https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part1/</link>
				<pubDate>Mon, 18 Oct 2010 18:38:33 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2010/10/19/getting-started-with-ruby-part1/</guid>
				<description>&lt;p&gt;Before we get started with Ruby, let me first give you a brief on who I am,&#xA;I am Dhruva Sagar, a software engineer having a little over 4 years of&#xA;professional experience having worked in technologies in and around Java,&#xA;Javascript, Adobe Flex, PHP and Ruby. I have always been fascinated by&#xA;programming languages and have been eager to learn new ones and I can also&#xA;code comfortably in Perl, Python &amp;amp; Groovy, however I haven’t worked&#xA;extensively on these. Right now I am working in a startup &lt;a href=&#34;http://www.artha42.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Artha42 Innovations&#xA;Private Limited&lt;/a&gt; and am having the best time of my&#xA;life!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Moving to Ubuntu</title>
				<link>https://dhruvasagar.dev/2008/05/06/moving-to-ubuntu/</link>
				<pubDate>Tue, 06 May 2008 09:59:31 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2008/05/06/moving-to-ubuntu/</guid>
				<description>&lt;p&gt;I have worked on quite a few Linux distros, Redhat, Knoppix, BackTrack, PHLAK,&#xA;ubuntu, etc. But most of the times I did that only to explore the realm of&#xA;Linux and see for myself what its all about and explore a little more for the&#xA;particular distro’s utilities, and not to actually shift myself completely to&#xA;using it solely, since I have been accustomed to using windows and the various&#xA;softwares that I use on windows.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cleaning data on my computer</title>
				<link>https://dhruvasagar.dev/2008/05/05/cleaning-data-on-my-computer/</link>
				<pubDate>Mon, 05 May 2008 03:50:14 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2008/05/05/cleaning-data-on-my-computer/</guid>
				<description>&lt;p&gt;I remember my first computer which I had when I was in about 4th&#xA;standard&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;About 15 years back if I remember&#xA;correctly&#xA;&lt;/span&gt;&#xA;. It was a real source of entertainment for me at&#xA;the time. Although I did enjoy playing basic dos games on it for long&#xA;durations a lot, but I remember that computer and most importantly it’s exact&#xA;configuration because of a really hilarious incident that happened with&#xA;me!&lt;label for=&#34;sidenote-2&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(2)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-2&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(2)&lt;/span&gt;Well considering my age at that time and my level of&#xA;understanding of computers, it really was hilarious, not that dumb&#xA;😀&#xA;&lt;/span&gt;&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Calculating a MD5, SHA1, SHA256, SHA384, SHA512 Hash in C#</title>
				<link>https://dhruvasagar.dev/2007/08/15/calculating-a-md5-sha1-sha256-sha384-sha512-hash-in-c/</link>
				<pubDate>Wed, 15 Aug 2007 18:12:56 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2007/08/15/calculating-a-md5-sha1-sha256-sha384-sha512-hash-in-c/</guid>
				<description>&lt;p&gt;Following up on my &lt;a href=&#34;https://dhruvasagar.dev/2007/08/13/calculating-a-md5-sha1-sha256-sha384-sha512-hash-in-java&#34; title=&#34;Calculating a MD5, SHA1, SHA256, SHA384, SHA512 hash in Java&#34;&gt;Creating a Hash in Java&lt;/a&gt; post, here I am giving another&#xA;implementation through a simple function for calculating a Hash in C#.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the code:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System.Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;System.Security.Cryptography&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;computeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Encoding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WriteLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToUpper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;MD5&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MD5CryptoServiceProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA1Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA256&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA256Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA384&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA384Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SHA512&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SHA512Managed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ComputeHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sourceBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;StringBuilder&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StringBuilder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Length&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AppendFormat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{0:x2}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Calculating a MD5, SHA1, SHA256, SHA384, SHA512 Hash in Java</title>
				<link>https://dhruvasagar.dev/2007/08/13/calculating-a-md5-sha1-sha256-sha384-sha512-hash-in-java/</link>
				<pubDate>Mon, 13 Aug 2007 17:58:32 +0000</pubDate>
				<guid>https://dhruvasagar.dev/2007/08/13/calculating-a-md5-sha1-sha256-sha384-sha512-hash-in-java/</guid>
				<description>&lt;p&gt;Hi, today I will show you with examples how to evaluate Hashes in Java&#xA;programming language. I hope this information comes in useful for many&#xA;people.&lt;/p&gt;&#xA;&lt;p&gt;Java which is my favorite programming language because of sheer simplicity,&#xA;vastness and ease with which you can customize and extend existing libraries&#xA;to suit your needs.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * The getHash method returns the hash of the message&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param message The message to be hashed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param algorithm The hashing algorithm to be used,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *                  Possible values are MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @return The hash of the message&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @author Dhruva Sagar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getHash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algorithm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getBytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MessageDigest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MessageDigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algorithm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexValue&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0xff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toHexString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toHexString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NoSuchAlgorithmException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>About</title>
				<link>https://dhruvasagar.dev/about/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://dhruvasagar.dev/about/</guid>
				<description>&lt;h2 id=&#34;i-am-dhruva-sagar&#34;&gt;I am Dhruva Sagar&lt;/h2&gt;&#xA;&lt;p&gt;When I was 15 year old. My dream was very simple. I wanted to write code. Open&#xA;Source code, more specifically. I have been chasing that dream for a long&#xA;time&lt;label for=&#34;sidenote-1&#34; class=&#34;margin-toggle sidenote-number&#34;&gt;(1)&lt;/label&gt;&#xA;&lt;input type=&#34;checkbox&#34; id=&#34;sidenote-1&#34; class=&#34;margin-toggle&#34;/&gt;&#xA;&lt;span class=&#34;sidenote&#34;&gt;&#xA;&lt;span class=&#34;sidenote-number&#34;&gt;(1)&lt;/span&gt;~20 years professionally, significantly longer if you count&#xA;the time since I was writing code in school / college&#xA;&lt;/span&gt;&#xA;.&#xA;Still at it. &lt;strong&gt;That&amp;rsquo;s what keeps me going&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This site is my little corner of the web where I jot down some of the&#xA;interesting things I come across&lt;/p&gt;</description>
			</item>
			<item>
				<title>Now</title>
				<link>https://dhruvasagar.dev/now/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://dhruvasagar.dev/now/</guid>
				<description>What I am focused on NOW</description>
			</item>
	</channel>
</rss>
