<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technology &#8211; Thejesh GN</title>
	<atom:link href="https://thejeshgn.com/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>https://thejeshgn.com</link>
	<description>A container for all my views with excerpts from technology, travel, films, books, kannada, friends and other interests. I am Thejesh GN, friends call me Thej.</description>
	<lastBuildDate>Sat, 12 Sep 2026 10:08:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.5</generator>

<image>
	<url>https://thejeshgn.com/wp-content/uploads/2015/08/cropped-thejeshgn_icon1-150x150.png</url>
	<title>Technology &#8211; Thejesh GN</title>
	<link>https://thejeshgn.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">9645742</site>	<item>
		<title>Why Garmin Forerunner 965?</title>
		<link>https://thejeshgn.com/2026/09/12/why-garmin-forerunner-965/</link>
					<comments>https://thejeshgn.com/2026/09/12/why-garmin-forerunner-965/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Sat, 12 Sep 2026 10:07:38 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Forerunner 965]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39782</guid>

					<description><![CDATA[I have been looking for a full-fledged smartwatch for a while now. I have a Pebble and a BangleJS; I use them all the time. But they are semi-smartwatches. I wanted a full-fledged watch that lasts for days and works fully offline. This post isn&#8217;t a review; that will take time. This one&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I have been looking for a full-fledged smartwatch for a while now. I have a <a href="https://thejeshgn.com/tag/pebble/">Pebble</a> and a <a href="https://thejeshgn.com/tag/banglejs2/">BangleJS</a>; I use them all the time. But they are semi-smartwatches. I wanted a full-fledged watch that lasts for days and works fully offline. This post isn&#8217;t a review; that will take time. This one is more like why I chose the 965. Before I go any further, let me list out my requirements.</p>



<h3 class="wp-block-heading">Requirements</h3>



<ul class="wp-block-list">
<li>Known and proven brands that have supported the hardware for at least a decade. And not known for dropping products. No Google, Apple, or Samsung.</li>



<li>It&#8217;s meant for outdoor use, so at least semi-rugged. Buttons and not just touch screen. Good readable screen.</li>



<li>Good battery life</li>



<li>It should work without a phone for at least a few days. I.e., good offline functionality. It should work without a network for sure.</li>



<li>GPS and Offline Maps. Ability to run GPS/Maps for at least 24 hours.</li>



<li>Good community, openness</li>



<li>Cost. I had a fairly high budget of 50K.</li>
</ul>



<h3 class="wp-block-heading">Solution</h3>



<p class="wp-block-paragraph">I looked into Garmin, Coros, and Casio.</p>



<p class="wp-block-paragraph">I chose the Garmin Forerunner 965. Other watches I considered were the Garmin Instinct 3, the Garmin Fenix® 7X Pro, and the Coros Nomad. I considered the Casio ProTek (WSD-F20) series, but neither the community nor the OS seemed interesting enough. But I do love how rugged they are. I will keep an eye on them.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-1024x768.jpg" alt="Forerunner 965 showing recovery" class="wp-image-39783" srcset="https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-1024x768.jpg 1024w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-300x225.jpg 300w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-768x576.jpg 768w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-1536x1152.jpg 1536w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-720x540.jpg 720w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-520x390.jpg 520w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973-320x240.jpg 320w, https://thejeshgn.com/wp-content/uploads/2026/09/wp-17892075190296749525348771677973.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Forerunner 965 showing recovery</figcaption></figure>
</div>


<p class="wp-block-paragraph">Garmin Instinct 3 has everything except offline maps. It has a cool screen and GPS. But it has no routeable maps. It&#8217;s also expensive. Garmin Fenix® 7X Pro is better in every way, but it&#8217;s double the cost and weight. Coros Nomad is the closest competitor; it has all the features I wanted, at a similar price, and it&#8217;s rugged and pretty. But I don&#8217;t know anything about Coros; no one I know has it. Also, I don&#8217;t know much about the community around it. It&#8217;s also the brand that is on my list.</p>



<p class="wp-block-paragraph">I was able to load <a href="https://thejeshgn.com/2026/09/05/lloading-indian-maps-garmin-forerunner-965/">Indian OSM maps onto my Forerunner 965</a>. I have used it while running and for casual walking. I haven&#8217;t done much routing on the watch, though it&#8217;s possible. I could follow a GPX track easily. I will blog more. Overall, these features seem to work.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="768" src="https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-1024x768.jpg" alt="I am so happy that I can see maps on my wrist." class="wp-image-39721" srcset="https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-1024x768.jpg 1024w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-300x225.jpg 300w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-768x576.jpg 768w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-1536x1152.jpg 1536w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-720x540.jpg 720w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-520x390.jpg 520w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893-320x240.jpg 320w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052037338330002204274028893.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">I am so happy that I can see maps on my wrist.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Everything on the phone works offline and also works without the phone. Of course, you can send messages without the phone (it doesn&#8217;t have a network), but it can connect to Wi-Fi if needed. It can also store music and play it through my Bluetooth earbuds. So you can go out without the phone.</p>



<p class="wp-block-paragraph">I have not charged the watch much. I am quite active every day, so it&#8217;s not bad. I haven&#8217;t taken it out for a full day of motorcycling or trekking with maps/routing on. When I do that, I will write more.</p>



<p class="wp-block-paragraph">The community around it is good, though they are more focused on outdoor activities and mapping. I haven&#8217;t explored their apps yet.</p>



<p class="wp-block-paragraph">As I said, this is not a review. This is just the list of things that I looked for while buying this watch, held up against them. For how it performs in those areas, you will have to wait. And it won&#8217;t be a single blog post. For now, there are no red flags with the Forerunner 965.</p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39782" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/09/12/why-garmin-forerunner-965/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39782</post-id>	</item>
		<item>
		<title>Loading Indian Maps on a Garmin Forerunner 965</title>
		<link>https://thejeshgn.com/2026/09/05/lloading-indian-maps-garmin-forerunner-965/</link>
					<comments>https://thejeshgn.com/2026/09/05/lloading-indian-maps-garmin-forerunner-965/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Sat, 05 Sep 2026 05:04:17 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Forerunner 965]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Garmin]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[Travel Gadgets]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39746</guid>

					<description><![CDATA[The primary reason I bought this watch was the ability to display and navigate using proper offline maps. Garmin doesn&#8217;t have maps for India. But the OpenStreetMaps community has maps that can be loaded into Garmin. There are many community-built web services, such as Thukke&#8217;s OSM Downloads and Userbeam, that provide Indian maps&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The primary reason I bought this watch was the ability to display and navigate using proper offline maps. Garmin doesn&#8217;t have maps for India. But the <a href="https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/Download" target="_blank" rel="noreferrer noopener">OpenStreetMaps</a> community has maps that can be loaded into Garmin. There are many community-built web services, such as <a href="https://www.thkukuk.de/osm/" target="_blank" rel="noreferrer noopener">Thukke&#8217;s OSM Downloads</a> and <a href="https://www.userbeam.de/osm/maps/asia/india/" target="_blank" rel="noreferrer noopener">Userbeam</a>, that provide Indian maps for use on Garmin devices, including routing. I used one by run by <a href="https://garmin.bbbike.org/" target="_blank" rel="noreferrer noopener">BBBike</a>. It creates a map of the area you choose from <a href="https://wiki.openstreetmap.org/wiki/Planet.osm">PlanetOSM</a>&#8216;s extracts and delivers it in the format you want.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="768" src="https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-1024x768.jpg" alt="Offline Maps on Garmin Forerunner 965." class="wp-image-39722" srcset="https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-1024x768.jpg 1024w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-300x225.jpg 300w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-768x576.jpg 768w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-1536x1152.jpg 1536w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-720x540.jpg 720w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-520x390.jpg 520w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310-320x240.jpg 320w, https://thejeshgn.com/wp-content/uploads/2026/08/wp-17881052988843639715114615992310.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Offline Maps on Garmin Forerunner 965.</figcaption></figure>
</div>


<h4 class="wp-block-heading">Download</h4>



<ol class="wp-block-list">
<li>Go to <a href="https://garmin.bbbike.org/" target="_blank" rel="noreferrer noopener">BBBikes Garmin Page</a></li>



<li>Choose the format <strong>Garmin OSM (UTF-8)</strong>. All modern Garmin devices can use UTF-8.</li>



<li>Select the area you want (bbox)</li>



<li>Click on Extract</li>



<li>Once it&#8217;s ready, you will get an email.</li>



<li>You can also check the <a href="https://download1.bbbike.org/osm/extract/" target="_blank" rel="noreferrer noopener">progress on the status page</a> and download it from there.</li>



<li>Extract the zip file to get <strong>.img</strong> file</li>
</ol>



<h4 class="wp-block-heading">Load</h4>



<ol class="wp-block-list">
<li>Plug into Ubuntu with USB; it should appear as mass storage. </li>



<li>It&#8217;s in the Garmin Connect App; On the top right, click on the watch. Go to System > USB Mode; set it to Media Transfer (MTP). Reattach and check.</li>



<li>In my case (Forerunner 965), I had to block the `garmin_gps` kernel module from loading. <a href="https://wiki.openstreetmap.org/wiki/USB_Garmin_on_GNU/Linux" target="_blank" rel="noreferrer noopener">You can try that too</a>.</li>



<li>Once that is done. Once you connect, the watch will ask for your permission to connect as mass storage</li>



<li>Say yes</li>



<li>It should appear as mass storage</li>



<li>Go to /Garmin/</li>



<li>Paste the downloaded <strong>.img</strong> file</li>



<li>Safely unmount the Garmin</li>



<li>Now go to the watch and go to Maps Manager</li>



<li>Your map file should be there</li>



<li>Open it and see</li>
</ol>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39746" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/09/05/lloading-indian-maps-garmin-forerunner-965/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39746</post-id>	</item>
		<item>
		<title>Exploring 1-Bit LLMs</title>
		<link>https://thejeshgn.com/2026/08/25/exploring-1-bit-llms/</link>
					<comments>https://thejeshgn.com/2026/08/25/exploring-1-bit-llms/#comments</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Tue, 25 Aug 2026 09:21:32 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI 🤖]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Large Language Model]]></category>
		<category><![CDATA[Small Language Model]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39680</guid>

					<description><![CDATA[My interest in LLMs has increasingly shifted towards smaller models, small in terms of size and their ability to run on modest local machines. For some time now, I have been using models with fewer than 40 B parameters on my machines in some quantized way. Then I came across BitNet, a project&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">My interest in LLMs has increasingly shifted towards smaller models, small in terms of size and their ability to run on modest local machines. For some time now, I have been using models with fewer than 40 B parameters on my machines in some quantized way. Then I came across BitNet, a project that introduced me to the concept of using just 1 bit per weight.</p>






<h4 class="wp-block-heading">Quantization</h4>



<p class="wp-block-paragraph"><a href="https://hai.stanford.edu/ai-definitions/what-are-weights" target="_blank" rel="noreferrer noopener">Weights are represented</a> by numbers in a model. A normal model might store each weight using 16 bits, i.e<strong> </strong>FP16 (half-precision floating-point). Quantization reduces that dramatically, where weights are represented using INT8 (8-bit integer) or INT4 (4-bit integer). They reduce precision but <a href="https://developer.nvidia.com/blog/int4-for-ai-inference/" target="_blank" rel="noreferrer noopener">increase inference speed</a> and reduce hardware requirements. Most of the time, quantization is performed post-training, which reduces model accuracy. But there is INT4 QAT (4-bit Integer <a href="https://www.ibm.com/think/topics/quantization-aware-training" target="_blank" rel="noreferrer noopener">Quantization-Aware Training</a>), which does this during training, thereby reducing the extreme accuracy drops common with standard 4-bit quantization.</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>Approach</th><th>Training</th><th>Inference weights</th></tr></thead><tbody><tr><td>FP16 model</td><td>Full precision</td><td>FP16</td></tr><tr><td>INT8 post-training quantization</td><td>Train normally, quantize later</td><td>INT8</td></tr><tr><td>INT4 QAT</td><td>Quantization simulated during training</td><td>INT4</td></tr><tr><td>BitNet</td><td>Designed and trained around extreme low-bit weights</td><td>ternary or binary</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">1 bit weight</h4>



<p class="wp-block-paragraph">1-bit goes one step further and asks: what if the weights were just one bit, and if that were done during training? With exactly 1 bit per weight, each weight can have only 2 possible values. 0 or 1. 0 represents -1 and 1 represents +1. i.e., instead of storing numbers like 0.72, -0.13, 1.24, -0.56, we will store +1, -1, +1, -1. That is at least 16 times less storage for weights theoretically.</p>



<h4 class="wp-block-heading">1.58 bit weight</h4>



<p class="wp-block-paragraph">In <a href="https://arxiv.org/abs/2504.12285v2">1.58-bit weights</a> (ternary bit weights), there are three possible values: {-1, 0, +1}. Theoretically, we need log2(3) bits of information to distinguish between 3 possible states : 2<sup>x</sup>=3. i.e. log<sub>2</sub>​(3)≈1.585. Hence the name.</p>



<p class="wp-block-paragraph">For our interpretation and understanding:</p>



<ul class="wp-block-list">
<li>0: the input is effectively ignored for that connection. i.e., no influence at all, which also gives you built-in sparsity.</li>



<li>+1: the input contributes positively to the output. i.e., an increase in the input pushes the weighted sum up. This is &#8220;same-direction&#8221; influence.</li>



<li>-1: the input contributes negatively. i.e., an increase in the input pushes the weighted sum down. This is &#8220;opposite-direction&#8221; influence.</li>
</ul>



<h4 class="wp-block-heading">1.125-bit weight</h4>



<p class="wp-block-paragraph">1.125-bit applies different logic for compression and calculation. One can&#8217;t literally allocate 1.125 bits per weight. The way this works is that the average bit allocation is used when they are packed. For example, it takes 9 bits to store 8 weights; thus, the average number of bits per weight is 1.125. One important distinction here is that bits per weight doesn&#8217;t necessarily tell you how many values each individual weight can take. <strong>1.58 has a clean theoretical connection</strong> to three states, while <strong>1.125 bpw</strong> usually describes the overall encoding/storage scheme. The table below should make a bit clear</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>Format</th><th>Possible basic values</th><th>Approx storage / 1B weights</th></tr></thead><tbody><tr><td>FP16</td><td>~65,536</td><td>2 GB</td></tr><tr><td>INT8</td><td>256</td><td>1 GB</td></tr><tr><td>INT4</td><td>16</td><td>500 MB</td></tr><tr><td>Ternary</td><td>3</td><td>~198 MB at theoretical 1.58 bpw</td></tr><tr><td>1.125-bit</td><td>special packed encoding</td><td>~141 MB</td></tr><tr><td>Binary</td><td>2</td><td>125 MB</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">BitNet b1.58 2B4T</h4>



<p class="wp-block-paragraph">This is the first open-source, native 1-bit Large Language Model (LLM) at the 2-billion parameter scale, developed by Microsoft Research. You can find the <a href="https://huggingface.co/microsoft/bitnet-b1.58-2B-4T">model on the hugging face</a>, it needs a specific inference code called <a href="https://github.com/microsoft/BitNet">bitnet.cpp</a>.</p>



<h4 class="wp-block-heading">Bonsai models</h4>



<p class="wp-block-paragraph"><a href="https://huggingface.co/collections/prism-ml/bonsai" target="_blank" rel="noreferrer noopener">Bonsai 1-bit models</a> are probably the first set of production-ready binary/ternary models. They have <a href="https://huggingface.co/prism-ml/Bonsai-1.7B-gguf" target="_blank" rel="noreferrer noopener">1.7B</a>, <a href="https://huggingface.co/prism-ml/Bonsai-4B-gguf" target="_blank" rel="noreferrer noopener">4B</a>, <a href="https://huggingface.co/prism-ml/Bonsai-8B-gguf" target="_blank" rel="noreferrer noopener">8B</a>, and <a href="https://huggingface.co/prism-ml/Bonsai-27B-gguf" target="_blank" rel="noreferrer noopener">27B</a> parameter models.</p>



<p class="wp-block-paragraph">I have been running the 8B-parameter version locally. My experience with it has been positive. I have explored it for text summaries, code explanations, etc. I will try to install the 27B version and do some coding to see how it goes.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# Install llama
curl -LsSf https://llama.app/install.sh | sh
# Serve the model using OpenAI-compatible API and a web ui
llama serve -hf prism-ml/Bonsai-1.7B-gguf:Q1_0
# or 8B parameter version
llama serve -hf prism-ml/Bonsai-8B-gguf:Q1_0
</pre></div>


<p class="wp-block-paragraph">Note: Yes, I have moved away from Ollama and now mostly use <a href="https://llama.app/">llama.cpp</a>. Also I sometimes <a href="https://www.jan.ai/">Jan.ai</a> along with <a href="https://openwebui.com/">OpenWebUI</a></p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39680" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/08/25/exploring-1-bit-llms/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39680</post-id>	</item>
		<item>
		<title>Embedding Workouts using Web Component</title>
		<link>https://thejeshgn.com/2026/08/16/embedding-workouts-using-web-component/</link>
					<comments>https://thejeshgn.com/2026/08/16/embedding-workouts-using-web-component/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 16:15:06 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Assisted by AI 🤖]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Web Components]]></category>
		<category><![CDATA[Workouts]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39630</guid>

					<description><![CDATA[I wanted a way to represent workouts by the muscle groups they activate. Most applications where you log do it. I thought it must be easy with SVG images. It wasn&#8217;t as easy. First, I had to get an image that is remake-friendly. I used this drawing by OpenStax &#38; Tomáš Kebert &#38;&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I wanted a way to represent workouts by the muscle groups they activate. Most applications where you log do it. I thought it must be easy with SVG images. It wasn&#8217;t as easy. First, I had to get an image that is remake-friendly. I used this <a href="https://commons.wikimedia.org/w/index.php?curid=94071041" target="_blank" rel="noreferrer noopener">drawing</a> by <em>OpenStax &amp; Tomáš Kebert &amp; umimeto.org</em>, from Wikimedia Commons. Cleaned it up to reduce the complexity. Then tagged each muscle group, including separating left and right muscles, in case you focus on one side.</p>



<p class="wp-block-paragraph">After that, I wanted an easy way to embed it on any web page. I chose to use web components. It converts the given list of exercises into muscle groups, then applies styles to them within the SVG and embeds the SVG. I have verified it to the best of my knowledge and from available sources. It took a lot of battling with Claude to make it the way I want, that is, to make it generic and reusable. I still have to map a bunch of muscle groups, I have listed all the <a href="https://github.com/thejeshgn/muscle-map">short comings in the readme</a>. </p>



<p class="wp-block-paragraph">Finally, I created a WordPress shortcode to queue the JavaScript and embed the component. But that&#8217;s not really required. If you have a simple static site, then you can include SVG and a JS file and use the <a href="https://github.com/thejeshgn/muscle-map">muscle-map</a> tag in your HTML</p>






<h4 class="wp-block-heading">Wednesday Workout</h4>


<muscle-map exercises="RDL, Decline Bench Press, Assisted Pull Up, Leg Extension, Back Extension" labels="0"></muscle-map>



<h4 class="wp-block-heading">Run</h4>


<muscle-map exercises="run" labels="0"></muscle-map>



<h4 class="wp-block-heading">Calf raise, Tibialis raise</h4>


<muscle-map exercises="calf raise, tibialis raise" labels="0"></muscle-map>



<h4 class="wp-block-heading">Calf raise</h4>


<muscle-map exercises="calf raise" labels="0"></muscle-map>



<p class="wp-block-paragraph">Happy workout and happy logging.</p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39630" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/08/16/embedding-workouts-using-web-component/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39630</post-id>	</item>
		<item>
		<title>Linked List : Annotating Photos for Humans and Machines</title>
		<link>https://thejeshgn.com/2026/07/14/linked-list-annotating-photos-for-humans-and-machines/</link>
					<comments>https://thejeshgn.com/2026/07/14/linked-list-annotating-photos-for-humans-and-machines/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 07:47:25 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Linked List]]></category>
		<category><![CDATA[Open Data]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39312</guid>

					<description><![CDATA[Photos taken on a mobile phone can include metadata. I like it for various reasons. My various projects depend on metadata, such as date, location, orientation, etc. But more and more, the phones are removing that metadata when I transmit it. Some of them also change the file name. But I care, and&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Photos taken on a mobile phone can include metadata. I like it for various reasons. My various projects depend on metadata, such as date, location, orientation, etc. But more and more, the phones are removing that metadata when I transmit it. Some of them also change the file name. But I care, and I want them. It&#8217;s a carefully considered call.</p>



<p class="wp-block-paragraph">In response to these aggressive moves by the platforms, I have started adding the data directly to the visible part of the image, like how your old film camera would add the date/time directly onto the photo itself. There is no danger of losing that information. As long as I have the picture, I have the date/time it was taken.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537.jpg" rel="lightbox[39312]"><img loading="lazy" decoding="async" width="2000" height="1125" src="https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537.jpg" alt="Gummalapuram Branch P.O" class="wp-image-39104" srcset="https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537.jpg 2000w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-300x169.jpg 300w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-1024x576.jpg 1024w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-768x432.jpg 768w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-1536x864.jpg 1536w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-720x405.jpg 720w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-520x293.jpg 520w, https://thejeshgn.com/wp-content/uploads/2026/06/wp-17820131989467051048442338121537-320x180.jpg 320w" sizes="auto, (max-width: 2000px) 100vw, 2000px" /></a><figcaption class="wp-element-caption">Gummalapuram Branch P.O</figcaption></figure>
</div>


<p class="wp-block-paragraph">Similarly, now, when I take certain pictures, I add text directly to the bottom-right corner, usually in English. I am making sure it has good contrast so humans and OCRs can pick it up easily. I have scripts to extract this data easily if I want to process it. Of course, any cheap visual model can also do it, but it&#8217;s easy and cheap to make the model write code and reuse it.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577.png" rel="lightbox[39312]"><img loading="lazy" decoding="async" width="900" height="2000" src="https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577.png" alt="6oz Coffee" class="wp-image-39309" style="width:auto;height:500px" srcset="https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577.png 900w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-135x300.png 135w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-461x1024.png 461w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-768x1707.png 768w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-691x1536.png 691w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-720x1600.png 720w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-520x1156.png 520w, https://thejeshgn.com/wp-content/uploads/2026/07/wp-17839700613736043349321074350577-320x711.png 320w" sizes="auto, (max-width: 900px) 100vw, 900px" /></a><figcaption class="wp-element-caption">6oz Coffee</figcaption></figure>
</div>


<p class="wp-block-paragraph">I have also started playing around with adding text to a QR code and then placing it on top of a Photo/Image. It works very well. It makes it much easier for machines to read and can also be read by humans using almost any phone camera.</p>



<p class="wp-block-paragraph">The Apps that I use are</p>



<ol class="wp-block-list">
<li><a href="https://opencamera.org.uk/" target="_blank" rel="noreferrer noopener">OpenCamera</a> (<a href="https://f-droid.org/en/packages/net.sourceforge.opencamera/" target="_blank" rel="noreferrer noopener">F-Droid</a>, <a href="https://play.google.com/store/apps/details?id=net.sourceforge.opencamera&amp;hl=en_IN" target="_blank" rel="noreferrer noopener">Play</a>): The most flexible camera app I have used. It&#8217;s open source. I use the GPS and Text stamping features a lot. It adds GPS tags, a timestamp, and a line of text on top of the image. I wish it had some more text features, but it works. All my new <a href="https://thejeshgn.com/projects/openpostboxindia/" target="_blank" rel="noreferrer noopener">OpenPostboxIndia</a> project pictures are taken with this. So unlike my first set of pictures, however they are maintained or transmitted, that data will remain with them. It can also be configured to take a sequence of pictures (like a timelapse) that can be uploaded to <a href="https://panoramax.fr/comment-participer-a-panoramax" target="_blank" rel="noreferrer noopener">Panoramax</a>. I also love that it can record video along with the GPS tags as a separate subtitle text.</li>



<li><a href="https://github.com/T8RIN/ImageToolbox" target="_blank" rel="noreferrer noopener">ImageToolBox</a> (<a href="https://f-droid.org/packages/ru.tech.imageresizershrinker/" target="_blank" rel="noreferrer noopener">FDroid</a>, Obtanium and <a href="https://play.google.com/store/apps/details?id=ru.tech.imageresizershrinker" target="_blank" rel="noreferrer noopener">Play</a>): A FOSS Swiss Army knife of image editing and annotating images or pictures on Phone. It has a <a href="https://github.com/T8RIN/ImageToolbox#-features" target="_blank" rel="noreferrer noopener">ton of tools</a>; some aren&#8217;t even directly related to image manipulation, like PDF Tools. So take your time to check out all the tools. Recently I discovered OCR tools and some local AI-based tools. All useful. I generally use the built-in QR code generator, then the watermarking feature to add that QR code to the image. Sometimes I use it for hand drawn notes or markers on top of pictures. I am still exploring this app. I am sure I will fit it into my other workflows and uninstall some other apps.</li>



<li><a href="https://github.com/markusfisch/BinaryEye" target="_blank" rel="noreferrer noopener">BinaryEye</a> (<a href="https://f-droid.org/en/packages/de.markusfisch.android.binaryeye/" target="_blank" rel="noreferrer noopener">FDroid</a>, <a href="https://play.google.com/store/apps/details?id=de.markusfisch.android.binaryeye" target="_blank" rel="noreferrer noopener">Play</a>) is a dedicated QR Code (Barcode) scanner and creator App. It works well and can also do other things, like forwarding the scanned content to a a web endpoint or working as a remote Bluetooth scanner.</li>
</ol>



<p class="wp-block-paragraph">Do you annotate photographs or pictures? If yes, why? and What tools do you use?</p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39312" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/07/14/linked-list-annotating-photos-for-humans-and-machines/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39312</post-id>	</item>
		<item>
		<title>SIR Online: Everything Is Difficult by Design</title>
		<link>https://thejeshgn.com/2026/07/09/sir-online-everything-is-difficult-by-design/</link>
					<comments>https://thejeshgn.com/2026/07/09/sir-online-everything-is-difficult-by-design/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Thu, 09 Jul 2026 17:52:18 +0000</pubDate>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Aadhaar]]></category>
		<category><![CDATA[Elections]]></category>
		<category><![CDATA[Politics]]></category>
		<location><![CDATA[India 🇮🇳]]></location>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39277</guid>

					<description><![CDATA[I did SIR enumeration online. The application seems to have been written by someone who hates users and doesn&#8217;t want them to get the work done1. I have had the same EPIC number since 2002, and it is still valid. I have kept my information updated over the years. Yet, I had to&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I did SIR enumeration online. The application seems to have been written by someone who hates users and doesn&#8217;t want them to get the work done<sup class='footnote'><a href='#fn-39277-1' id='fnref-39277-1' onclick='return fdfootnote_show(39277)'>1</a></sup>.</p>



<p class="wp-block-paragraph">I have had the same EPIC number since 2002, and it is still valid. I have kept my information updated over the years. Yet, I had to search for myself in a 2002 electoral roll, and I couldn&#8217;t find my name. I don&#8217;t exactly remember what happened in 2002 or why my name isn&#8217;t there. Or may be it was added after 2002 SIR<sup class='footnote'><a href='#fn-39277-2' id='fnref-39277-2' onclick='return fdfootnote_show(39277)'>2</a></sup>. Ideally system should know it and guide accordingly.</p>



<p class="wp-block-paragraph">Then I had to search for one of my parents and link their details. Thanks to my father&#8217;s good memory we were able to find the part no. Because the search dropdowns doesn&#8217;t always show the polling station address. One has to know it!</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search.png" rel="lightbox[39277]"><img loading="lazy" decoding="async" width="1024" height="602" src="https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-1024x602.png" alt="Searching your name in SIR in 2002." class="wp-image-39278" srcset="https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-1024x602.png 1024w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-300x176.png 300w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-768x452.png 768w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-1536x903.png 1536w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-2048x1204.png 2048w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-720x423.png 720w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-520x306.png 520w, https://thejeshgn.com/wp-content/uploads/2012/09/sir_2002_search-320x188.png 320w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Searching your name in SIR in 2002.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Of course, Aadhaar is not compulsory<sup class='footnote'><a href='#fn-39277-3' id='fnref-39277-3' onclick='return fdfootnote_show(39277)'>3</a></sup>; it&#8217;s just that you can&#8217;t submit the form online without e-signing it using Aadhaar + OTP. I have a valid digital signature certificate that I use for e-signing. Why can&#8217;t I use that? No one knows.</p>



<p class="wp-block-paragraph">What happens after the submission, no one knows. There is acknowledgement shown on the screen after the signing, but I dont know what happens after that. You do get a SMS message of the acknowledgement. But that message also doesn&#8217;t show any acknowledgement or any details on how to check on it.</p>



<p class="wp-block-paragraph">For someone with a tech background, it took considerable amount time and effort to submit the form. Imagine folks who are less comfortable with technology or those who have changed locations and doesn&#8217;t remember well. Imagine those who fall for things like “digital arrest” scams trying to navigate this.</p>



<p class="wp-block-paragraph">What a mess this #SIR is. The #ECI website is probably one of the most user-unfriendly applications I have seen online recently. I thought IRCTC was bad.</p>



<p class="wp-block-paragraph">Some coverage</p>



<ul class="wp-block-list">
<li><a href="https://citizenmatters.in/sir-for-karnataka-voters-all-you-need-to-know-about-enumeration/">Citizen Matter&#8217;s has an How &#8211; To</a></li>



<li><a href="https://www.thehindu.com/news/cities/bangalore/sir-voters-blos-unsure-what-follows-after-filling-online-form/article71183278.ece">The Hindu &#8211; SIR: Voters, BLOs unsure what follows after filling online form</a></li>



<li><a href="http://timesofindia.indiatimes.com/articleshow/132245659.cms?utm_source=thejeshgn.com">TOI &#8211; SIR’s digital wall: 1 lakh try in Karnataka, only 0.2% get through</a></li>



<li><a href="https://www.thehindu.com/news/cities/bangalore/sir-progeny-mapping-in-karnataka-different-blos-different-instructions/article71179256.ece">The Hindu &#8211; SIR progeny mapping in Karnataka: Different BLOs, different instructions</a></li>



<li><a href="https://www.thehindu.com/news/cities/bangalore/sir-missing-2002-supplementary-rolls-leave-voters-unable-to-verify-electoral-records/article71211009.ece">The Hindu &#8211; SIR: Missing 2002 ‘supplementary rolls’ leave voters unable to verify electoral records</a></li>
</ul>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39277" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>



<h3 class="wp-block-heading">Footnotes</h3>


<div class='footnotes' id='footnotes-39277'><div class='footnotedivider'></div><ol><li id='fn-39277-1'> Your mobile number has to associated with your current EPIC or you can&#8217;t. To do that you need to submit Form 8 <span class='footnotereverse'><a href='#fnref-39277-1'>&#8617;</a></span></li><li id='fn-39277-2'> Learnt later, as per the The Hindu,  2002 supplementary rolls are not included, so may be that is the reason? <span class='footnotereverse'><a href='#fnref-39277-2'>&#8617;</a></span></li><li id='fn-39277-3'> Also remember the names have to match exactly between your current EPIC and Aadhaar. If they don&#8217;t match then submit the enumeration form offline. <span class='footnotereverse'><a href='#fnref-39277-3'>&#8617;</a></span></li></ol></div>]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/07/09/sir-online-everything-is-difficult-by-design/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39277</post-id>	</item>
		<item>
		<title>Getting Started with SimulIDE and Arduino</title>
		<link>https://thejeshgn.com/2026/07/03/getting-started-with-simulide-and-arduino/</link>
					<comments>https://thejeshgn.com/2026/07/03/getting-started-with-simulide-and-arduino/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 20:02:14 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Basic Electronics]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Hardware Simulation]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39215</guid>

					<description><![CDATA[I was looking for an alternative to Tinkercad to simulate building, coding, and running Arduino projects. SimulIDE Circuit Simulator seemed like an ideal candidate. SimulIDE is a simple real time electronic circuit simulator, intended for hobbyist or students to learn and experiment with analog and digital electronic circuits and microcontrollers. It supports PIC,&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I was looking for an alternative to Tinkercad to simulate building, coding, and running Arduino projects. SimulIDE Circuit Simulator seemed like an ideal candidate.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><a href="https://simulide.com/p/">SimulIDE</a> is a simple real time electronic circuit simulator, intended for hobbyist or students to learn and experiment with analog and digital electronic circuits and microcontrollers. It supports PIC, AVR , Arduino and other MCUs and MPUs.</p>
</blockquote>



<p class="wp-block-paragraph">I installed it from Flathub (<a href="https://flathub.org/en/apps/com.simulide.simulide">SimulIDE</a>). It worked well. It is easy to understand and work with. It&#8217;s also easy for a beginner to pick up and start designing circuits in 5 minutes. I tried a few basic circuits. Then I tried the Blink circuit and Fade circuits based on Arduino. Unlike previous ones, this one included building a firmware and loading it. To make it complex, I was also using the Flatpak version of the Arduino IDE. Then I found two options</p>



<h3 class="wp-block-heading">Load Firmware in SimulIDE</h3>



<p class="wp-block-paragraph">In this option, we will build the software in the Arduino IDE. Compile it. Once it generates a firmware (a HEX file), we will load it into SimulIDE. For this, we need to know where the compilation output is in the Arduino IDE, and then make sure SimulIDE has access to that path. Enable verbose output in the Arduino IDE Preferences, and then compile. The IDE will print the path. Take the path, go to <a href="https://flathub.org/en/apps/com.github.tchx84.Flatseal">Flatseal</a> <sup class='footnote'><a href='#fn-39215-1' id='fnref-39215-1' onclick='return fdfootnote_show(39215)'>1</a></sup>, and give SimulIDE access to that path.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="635" src="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-1024x635.png" alt="Arduino IDE, Enable Verbose output" class="wp-image-39224" srcset="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-1024x635.png 1024w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-300x186.png 300w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-768x476.png 768w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-720x446.png 720w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-520x322.png 520w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose-320x198.png 320w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_enable_verbose.png 1511w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Arduino IDE, Enable Verbose output</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="650" src="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-1024x650.png" alt="Path of firmware hexfile built by Arduino IDE" class="wp-image-39225" srcset="https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-1024x650.png 1024w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-300x191.png 300w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-768x488.png 768w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-1536x975.png 1536w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-720x457.png 720w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-520x330.png 520w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub-320x203.png 320w, https://thejeshgn.com/wp-content/uploads/2026/07/arduino_ide_v2_hex_path_flathub.png 1951w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Path of firmware hexfile built by Arduino IDE</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="377" src="https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-1024x377.png" alt="Giving folder access to SimulIDE so it can access the Hex files in Flatseal." class="wp-image-39226" srcset="https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-1024x377.png 1024w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-300x110.png 300w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-768x283.png 768w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-1536x565.png 1536w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-720x265.png 720w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-520x191.png 520w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files-320x118.png 320w, https://thejeshgn.com/wp-content/uploads/2026/07/simulIDE_accessing_arduino_compiled_files.png 1892w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Giving folder access to SimulIDE so it can access the Hex files in Flatseal.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Now SimulIDE has access to the folders where firmware is built. Before you simulate the circuit, right-click the Uno, go to mega328-109, and then load firmware. Choose the hex file. Alternatively, right-click Uno, go to mega328-109 &#8211; Properties, enter the firmware path, and select Reload HEX at Simulation Start.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="744" src="https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-1024x744.png" alt="Accessing Arduino Uno properties in SimulIDE" class="wp-image-39227" srcset="https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-1024x744.png 1024w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-300x218.png 300w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-768x558.png 768w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-720x523.png 720w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-520x378.png 520w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings-320x233.png 320w, https://thejeshgn.com/wp-content/uploads/2007/06/simulide_uno_settings.png 1285w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Accessing Arduino Uno properties in SimulIDE</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="541" src="https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-1024x541.png" alt="Load hex firmware from a path in SimulIDE" class="wp-image-39228" srcset="https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-1024x541.png 1024w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-300x159.png 300w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-768x406.png 768w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-1536x812.png 1536w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-2048x1082.png 2048w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-720x380.png 720w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-520x275.png 520w, https://thejeshgn.com/wp-content/uploads/2007/06/simulIDE_loading_firmware_from_a_path-320x169.png 320w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Load hex firmware from a path in SimulIDE</figcaption></figure>
</div>


<p class="wp-block-paragraph">Now everything is set up. Code and Compile in Arduino IDE. Come to SimulIDE and restart the simulation. That will load the recent firmware and start the simulation.</p>



<h3 class="wp-block-heading">Configure SimulIDE with Arduino Toolchain</h3>



<p class="wp-block-paragraph">For this, you can use the SimulIDE flatpak version, but you will need the native Arduino installed on the machine. For me, I downloaded the Arduino Linux ZIP file version. Then extracted it into a local directory, say <code>/home/thej/code/arduino-ide_2.3.10_Linux_64bit</code>. Then go to Flatseal and grant SimulIDE access to the folder <code>/home/thej/code/arduino-ide_2.3.10_Linux_64bit</code> .</p>



<p class="wp-block-paragraph">Once this is done, open an INO file (the Arduino Sketch) on the right-hand panel of the SimulIDE. Go to compiler settings and set the Arduino installation folder path (<code>/home/thej/code/arduino-ide_2.3.10_Linux_64bit</code>) as the Tool path.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide.png" rel="lightbox[39215]"><img loading="lazy" decoding="async" width="1024" height="673" src="https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-1024x673.png" alt="Setup Arduino Toolchain in SimulIDE" class="wp-image-39230" srcset="https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-1024x673.png 1024w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-300x197.png 300w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-768x505.png 768w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-1536x1009.png 1536w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-2048x1346.png 2048w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-720x473.png 720w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-520x342.png 520w, https://thejeshgn.com/wp-content/uploads/2007/06/setup_arduino_toolchainIin_simulide-320x210.png 320w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Setup Arduino Toolchain in SimulIDE</figcaption></figure>
</div>


<p class="wp-block-paragraph">Now it&#8217;s all set. Use the integrated editor in the SimulIDE to edit code, compile, and load firmware. Then simulate.</p>



<p class="wp-block-paragraph">Both setups were easy, even though Flatpak made it a bit difficult. If you are not using Flatpak, then you can ignore the Flatseal permission-giving part. The rest of the configuration will still work. Once set up, both flows worked flawlessly. For most people option 2, setting up Arduino toolchain is an easy option. See the demo below.</p>



<figure class="wp-block-video aligncenter"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls src="https://thejeshgn.com/wp-content/uploads/2026/07/simulide_arduino_blink_circuit_simulation.webm"></video><figcaption class="wp-element-caption">Demo of Arduino Uno Blink circuit simulation in  SimulIDE </figcaption></figure>



<p class="wp-block-paragraph">SimulIDE is an amazing piece of software for beginners. You will have fun building and simulating circuits in it. Try it and let me know.</p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39215" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>


<div class='footnotes' id='footnotes-39215'><div class='footnotedivider'></div><ol><li id='fn-39215-1'> Flatseal is a graphical utility to review and modify permissions from your Flatpak applications. <span class='footnotereverse'><a href='#fnref-39215-1'>&#8617;</a></span></li></ol></div>]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/07/03/getting-started-with-simulide-and-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://thejeshgn.com/wp-content/uploads/2026/07/simulide_arduino_blink_circuit_simulation.webm" length="8242214" type="video/webm" />

		<post-id xmlns="com-wordpress:feed-additions:1">39215</post-id>	</item>
		<item>
		<title>Building kannada-kasturi-embeddings</title>
		<link>https://thejeshgn.com/2026/07/01/building-kannada-kasturi-embeddings/</link>
					<comments>https://thejeshgn.com/2026/07/01/building-kannada-kasturi-embeddings/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 11:37:26 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Digital Kannada]]></category>
		<category><![CDATA[Embedding Models]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Indic Models]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Sanchaya]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39191</guid>

					<description><![CDATA[Embeddings are numerical representations of real-world objects, such as words, phrases, text, images, audio, and video. Since the real world is so complex, these representations are usually vector arrays of floating-point numbers. This helps computers process meaning, context, and semantic relationships using distances and directions between vectors. Word2Vec and FastText Embeddings are learned&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Embeddings are numerical representations of real-world objects, such as words, phrases, text, images, audio, and video. Since the real world is so complex, these representations are usually vector arrays of floating-point numbers. This helps computers process meaning, context, and semantic relationships using distances and directions between vectors.</p>






<h3 class="wp-block-heading">Word2Vec and FastText</h3>



<p class="wp-block-paragraph">Embeddings are learned numerical representations. The actual values depend on the model architecture, training data, and its training objective. So the same object (say a word) gets different embeddings in Word2Vec and GPT. Think of an embedding as a model&#8217;s custom learned coordinate system for meaning.</p>



<p class="wp-block-paragraph">This coordinate system lets us do useful things. Find semantically similar items, power search, feed downstream ML models, or even perform arithmetic on meaning. A general example from Word2Vec is <code>king − man + woman ≈ queen</code>. There are mainly two types</p>



<ul class="wp-block-list">
<li>SkipGram: Where the model predicts context words given a target word</li>



<li>CBOW (Continuous Bag of Words): Where the model predicts the target word from its context.</li>
</ul>



<p class="wp-block-paragraph">I wanted to build a simple Word2Vec model for Kannada just to try it out and see if it&#8217;s useful. In the process I also built a <a href="https://fasttext.cc/">FastText</a> model. FastText is the same as Word2Vec with character n-grams. By default, I have built Skipgram based models. But you can try CBOW too.</p>



<p class="wp-block-paragraph">With n-grams support, FastText makes it easy to handle out of vocabulary words and capture subword information, which Word2vec is not good at. For example, given the settings minn=3, maxn=8, FastText breaks each word into character n-grams of lengths 3 to 8 and learns embeddings for those n-grams as well. There is also a wordNgrams setting, set to 2 by default. We can play with this setting. wordNgrams is used to learn embeddings about the sequences of adjacent words.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
For example consider the sentence:

&quot;ಬೆಂಗಳೂರು ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ&quot;

With:

wordNgrams=1 (default) Learns only individual words:

ಬೆಂಗಳೂರು
ಕರ್ನಾಟಕದ
ರಾಜಧಾನಿ

wordNgrams=2 Also learns bigrams:

ಬೆಂಗಳೂರು ಕರ್ನಾಟಕದ
ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ

wordNgrams=3 Also learns trigrams:

ಬೆಂಗಳೂರು ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ
</pre></div>


<h3 class="wp-block-heading">Data</h3>



<p class="wp-block-paragraph">For the corpus, I went with the Kannada text of Kasturi Magazine OCRed by <a href="https://sanchaya.org/" target="_blank" rel="noreferrer noopener">Sanchaya</a> and available on <a href="https://archive.org/search?query=subject%3A%22Kasturi+Magazine%22" target="_blank" rel="noreferrer noopener">Archive.org</a>. My repository has this text; you can use it instead of redownloading from Archive.org. I chose <a href="https://en.wikipedia.org/wiki/Kasthuri_(magazine)" target="_blank" rel="noreferrer noopener">Kasturi</a> content because it&#8217;s the most generic Kannada content <a href="https://archive.org/search?query=subject%3A%22Kasturi+Magazine%22" target="_blank" rel="noreferrer noopener">available</a>, small but good enough to do quick tests. It&#8217;s a monthly family magazine published from the house of Samyukta Karnataka, a very popular newspaper. You can think of it as Reader&#8217;s Digest of Kannada. I have not given the script used to download, as it&#8217;s not required. But it&#8217;s not that difficult to write if you want to. My bots were identified by <code>headers={"User-Agent": "thejeshgn.com/1.0"}</code> and all the downloaded files are named <code>kananda_kasturi_{identifier}.txt</code> where identifier is archive..org identifier.</p>



<h3 class="wp-block-heading">Build and Test</h3>



<p class="wp-block-paragraph">You can run the trainer, change parameters and test them. I have included all the code and steps for both Fastext and Word2Vec. </p>



<p class="has-text-align-center has-luminous-vivid-amber-background-color has-background wp-block-paragraph">Project is available on <a href="https://codeberg.org/thejeshgn/kannada-kasturi-embeddings">Codeberg</a>, <a href="https://github.com/thejeshgn/kannada-kasturi-embeddings">Github</a> and <a href="https://huggingface.co/thejeshgn/kannada-kasturi-embeddings">HF</a>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# Prepare the clean corpus.txt from the raw inputs
uv run prepare_corpus.py prepare ../data/ ./corpus.txt

# Train the embeddings with default parameters 
uv run fasttext_embeddings.py train ./corpus.txt --recursive --out ../models/kasturi_fasttext_v4

# Try the embeddings
uv run fasttext_embeddings.py test ../models/kasturi_fasttext_v4.bin --word ಕನ್ನಡ
uv run fasttext_embeddings.py test ../models/kasturi_fasttext_v4.bin --word ರಾಜಧಾನಿ
uv run fasttext_embeddings.py test ../models/kasturi_fasttext_v4.bin --sentence &quot;ಬೆಂಗಳೂರು ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ&quot;
uv run fasttext_embeddings.py compare ../models/kasturi_fasttext_v4.bin
</pre></div>


<p class="wp-block-paragraph">For comparison and evaluation, I used the same method that I had used before for testing <a href="https://thejeshgn.com/2025/06/18/embedding-models-for-kannada/">other embeddings</a>. Take a bunch of Kannada words (I have used the same bunch), get the cosine similarity between them and create a comparison matrix. I also compared my matrix against the <a href="https://fasttext.cc/docs/en/crawl-vectors.html" target="_blank" rel="noreferrer noopener">word vectors trained by FastText team</a> using Wikipedia and Common Crawl data. You can see them below.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi.png" rel="lightbox[39191]"><img loading="lazy" decoding="async" width="1024" height="914" src="https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-1024x914.png" alt="Compare Matrix for Kannada Kasturi." class="wp-image-39194" srcset="https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-1024x914.png 1024w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-300x268.png 300w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-768x686.png 768w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-1536x1371.png 1536w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-720x643.png 720w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-520x464.png 520w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi-320x286.png 320w, https://thejeshgn.com/wp-content/uploads/2014/03/compare_matrix_kannada_kasturi.png 1593w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Compare Matrix for Kannada Kasturi.</figcaption></figure>
</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300.png" rel="lightbox[39191]"><img loading="lazy" decoding="async" width="1024" height="914" src="https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-1024x914.png" alt="Kannada Word vectors trained by FastText team - cc.kn.300.bin" class="wp-image-39195" srcset="https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-1024x914.png 1024w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-300x268.png 300w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-768x686.png 768w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-1536x1371.png 1536w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-720x643.png 720w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-520x464.png 520w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300-320x286.png 320w, https://thejeshgn.com/wp-content/uploads/2026/06/compare_matrix_cc_kn_300.png 1593w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Kannada Word vectors trained by FastText team &#8211; cc.kn.300.bin</figcaption></figure>
</div></div>
</div>



<h3 class="wp-block-heading">TODO</h3>



<p class="wp-block-paragraph">I have called it <em><span style="text-decoration: underline;">kannada-kasturi-embeddings</span></em> because it&#8217;s a good name and we started with Kasturi. But it wont be limited to Kasturi magazine data alone. I will add other newspaper and magazine data to it and build a comprehensive embedding that&#8217;s useful. I will also keep comparing to see how it performs. The current test and compare methods are very basic. I will come up with a better method. So the TODO list is</p>



<ul class="wp-block-list">
<li>Add more quality data</li>



<li>Improve the <code>clean_text</code> function </li>



<li>Add more automated quality testing and comparisons</li>



<li>Build different embedding models and not just Word2Vec or Fastext</li>
</ul>



<p class="wp-block-paragraph">In the meantime, try it and let me know what you think.</p>



<hr class="wp-block-separator has-text-color has-vivid-purple-color has-alpha-channel-opacity has-vivid-purple-background-color has-background is-style-dots"/>



<div class="wp-block-columns has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex" style="background:linear-gradient(137deg,rgb(255,206,236) 0%,rgb(152,150,240) 62%)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can read this blog using <a href="https://feeds.thejeshgn.com/thejeshgn" target="_blank" rel="noreferrer noopener">RSS Feed</a>. But if you are the person who loves getting emails, then you can join my readers by <a href="https://thejeshgn.com/subscribe/" target="_blank" rel="noreferrer noopener">signing</a> up.</p>


<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions__show-subs wp-block-jetpack-subscriptions">
		<div>
			<div>
				<div>
					<p style="width: 25%;max-width: 100%;">
						<a href="https://thejeshgn.com/?post_type=post&#038;p=39191" style="width: calc(100% - 10px);font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-color: black;border-radius: 6px;border-width: 2px; background-color: #000000; color: #FFFFFF; text-decoration: none; white-space: nowrap; margin-left: 0">Subscribe</a>
					</p>
				</div>
			</div>
		</div>
	</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:5px"></div>
</div>



<p class="wp-block-paragraph"> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://thejeshgn.com/2026/07/01/building-kannada-kasturi-embeddings/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39191</post-id>	</item>
	</channel>
</rss>
