<?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>Tue, 27 Oct 2026 00:41:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</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>A Public Reticulum Backbone Interface in India</title>
		<link>https://thejeshgn.com/2026/10/26/a-public-reticulum-backbone-interface-in-india/</link>
					<comments>https://thejeshgn.com/2026/10/26/a-public-reticulum-backbone-interface-in-india/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 14:20:16 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Reticulum Network]]></category>
		<location><![CDATA[India 🇮🇳]]></location>
		<guid isPermaLink="false">https://thejeshgn.com/?p=40006</guid>

					<description><![CDATA[Until last week, India had no Public Backbone Interfaces for the reticulum. I started one last week so we could have one in India. I really wanted one in Bangalore, but the Mumbai server was the cheapest. So I set up one in Mumbai. Of course, you can use the one outside India;&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Until last week, India had no <a href="https://reticulum.network/manual/gettingstartedfast.html#hosting-public-entrypoints" target="_blank" rel="noopener">Public Backbone Interfaces</a> for the reticulum. I started one last week so we could have one in India. I really wanted one in Bangalore, but the Mumbai server was the cheapest. So I set up one in Mumbai. Of course, you can use the one outside India; that is how I started, but it would make sense to have one closer to you. It avoids packets going out and coming back. The configuration is below if you wan to use them.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
&#x5B;&#x5B;reticulum_thejeshgn_com]]
  type = BackboneInterface
  enabled = yes
  remote = reticulum.thejeshgn.com
  target_port = 4242
  transport_identity = dc1414ac19f3c488bdd9c7badaf0862a
</pre></div>


<p class="wp-block-paragraph">Setting it up and running as a system <a target="_blank" href="https://gist.github.com/thejeshgn/64aaf8e69cefc1f9ae6c8f342499eade" rel="noopener">service</a> wasn&#8217;t that difficult. There is enough information online to do. I did create a separate non-root user called rns just to run these services. Otherwise, it&#8217;s a standard Linux service.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="1010" src="https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-1024x1010.png" alt="Stats at reticulum.thejeshgn.com" class="wp-image-40007" srcset="https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-1024x1010.png 1024w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-300x296.png 300w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-768x758.png 768w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-80x80.png 80w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-720x710.png 720w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-520x513.png 520w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats-320x316.png 320w, https://thejeshgn.com/wp-content/uploads/2010/10/rnstatus_stats.png 1055w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Stats at reticulum.thejeshgn.com</figcaption></figure>
</div>


<p class="wp-block-paragraph">Now that I have a machine. I thought I should make the most of it. So I also configured it to run the <a target="_blank" href="https://github.com/markqvist/lxmf#propagation-nodes" rel="noopener">LXMF Propagation Node</a> (store-and-forward for messages). Now I can use my own Propagation node for <a target="_blank" href="https://thejeshgn.com/2026/10/22/messaging-with-reticulum-and-lxmf/" rel="noopener">messaging purposes</a>. It&#8217;s open to the public to use as a propagation server.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="424" src="https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-1024x424.png" alt="Propagation Node status" class="wp-image-40008" srcset="https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-1024x424.png 1024w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-300x124.png 300w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-768x318.png 768w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-1536x636.png 1536w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-720x298.png 720w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-520x215.png 520w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status-320x132.png 320w, https://thejeshgn.com/wp-content/uploads/2010/10/lxmd_status.png 1715w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Propagation Node status</figcaption></figure>
</div>


<p class="wp-block-paragraph">As you can see, the BackboneInterface and Node seem to be getting used. I have restarted the machine a couple of times to update the OS. I have created a <a href="https://thejeshgn.com/projects/reticulum/">Reticulum Project Wiki</a> page to track my work.</p>



<p class="wp-block-paragraph">Update: Now there is one more that is running in Mumbai, which is a good thing. I will try to find a cheap host in Bengaluru or Chennai.</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=40006" 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/10/26/a-public-reticulum-backbone-interface-in-india/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">40006</post-id>	</item>
		<item>
		<title>Messaging with Reticulum and LXMF</title>
		<link>https://thejeshgn.com/2026/10/22/messaging-with-reticulum-and-lxmf/</link>
					<comments>https://thejeshgn.com/2026/10/22/messaging-with-reticulum-and-lxmf/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 10:12:20 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Free and Open Source]]></category>
		<category><![CDATA[Mesh networking]]></category>
		<category><![CDATA[Reticulum Network]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39985</guid>

					<description><![CDATA[The first kind of application you could try after setting up Reticulum, or with it, is messaging. I think Reticulum protocol designer Mark Qvist knew that without a practical example of the protocol&#8217;s use, people might not use it. Messaging seems obvious. LXMF (Lightweight Extensible Message Format) is a universal messaging protocol built&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The first kind of application you could try after setting up <a href="https://thejeshgn.com/2026/10/14/getting-started-with-reticulum/">Reticulum</a>, or with it, is messaging. I think Reticulum protocol designer <a href="https://unsigned.io/log.html" target="_blank" rel="noopener">Mark Qvist</a> knew that without a practical example of the protocol&#8217;s use, people might not use it. Messaging seems obvious.</p>



<p class="wp-block-paragraph">LXMF (Lightweight Extensible Message Format) is a universal messaging protocol built on top of Reticulum. It&#8217;s a distributed (doesn&#8217;t need an account with a service provider), secure, versatile messaging system. It also supports store and forward (Propagation Node), so you can receive messages even when you are offline. It can also handle non-text messages, meaning you can send and receive <a target="_blank" href="https://msgpack.org/" rel="noopener">MessagePacked</a> data fields. For example, you can send telemetry, sensor data, etc.</p>



<p class="wp-block-paragraph">There are quite a few apps. The quality of apps differs. They are all still evolving. Give them six months to a year; you&#8217;ll definitely see some good apps. At present, Desktop apps are generally better than mobile ones.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="691" src="https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-1024x691.webp" alt="Sideband is an extensible LXMF messaging and LXST telephony client" class="wp-image-39986" srcset="https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-1024x691.webp 1024w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-300x203.webp 300w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-768x518.webp 768w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-720x486.webp 720w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-520x351.webp 520w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small-320x216.webp 320w, https://thejeshgn.com/wp-content/uploads/2025/09/devices_small.webp 1440w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Sideband is an extensible LXMF messaging and LXST telephony client</figcaption></figure>
</div>


<p class="wp-block-paragraph">Some apps to try</p>



<ul class="wp-block-list">
<li><a href="https://unsigned.io/software/Sideband.html" target="_blank" rel="noopener">Sideband</a> &#8211; Built by Mark Qvist, available on all platforms, including Android (Sideload). It feels more like reference implementation but it works. I use it for all my testing.</li>



<li><a href="https://github.com/liamcottle/reticulum-meshchat" target="_blank" rel="noopener">Meshchat</a> &#8211; A well-designed web browser app. It has lots of features. It works vey well.</li>



<li><a href="https://github.com/markqvist/nomadnet" target="_blank" rel="noopener">Nomadnet</a> &#8211; It does more than messaging. It&#8217;s a CLI.</li>



<li><a href="https://ratspeak.org/" target="_blank" rel="noopener">Ratspeak</a> &#8211; It&#8217;s designed well. Available for all platforms including Andoid (Sideload). I found some rough edges but otherwise good.</li>
</ul>



<p class="wp-block-paragraph">Don&#8217;t run the same Reticulum identity on two machines. The LXMF identity is tied to the Reticulum&#8217;s identity. So messages will land in one of them, and they may not arrive in order. It might confuse you. Also, since the identity is attached to Reticulum&#8217;s, you can either attach the messaging apps to an already running rnsd or let them run their own rnsd instance, depending on your needs. I usually suggest running the messaging application&#8217;s own rnsd and identity. That way, there is less setup to do.</p>



<p class="wp-block-paragraph">Text is okay; what about calls? It&#8217;s possible, though it depends on your Interfaces that carry the packets. But Reticulkum community has <a target="_blank" href="https://github.com/markqvist/lxst" rel="noopener">LXST</a>, for both voice calls and PTT. It supports OPUS and Codec2 codecs for voice. I have been able to make calls. But I prefer leaving voice messages. I choose Opus Low/Medium quality.</p>



<p class="wp-block-paragraph">If you like to leave a message or chat. Contact me at my LXMF address : <code>0b1c6b8c0cfa77f7892715e130f49e66</code></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=39985" 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/10/22/messaging-with-reticulum-and-lxmf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39985</post-id>	</item>
		<item>
		<title>Getting Started with Reticulum</title>
		<link>https://thejeshgn.com/2026/10/14/getting-started-with-reticulum/</link>
					<comments>https://thejeshgn.com/2026/10/14/getting-started-with-reticulum/#respond</comments>
		
		<dc:creator><![CDATA[Thejesh GN]]></dc:creator>
		<pubDate>Wed, 14 Oct 2026 03:37:28 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Mesh networking]]></category>
		<category><![CDATA[Permacomputing]]></category>
		<category><![CDATA[Reticulum Network]]></category>
		<guid isPermaLink="false">https://thejeshgn.com/?p=39930</guid>

					<description><![CDATA[I have been looking for a network protocol stack that can be run in addition to the regular TCP/IP network at TVC. Kiran has been exploring Meshtastic, mainly to connect the sensors to the Home Assistant that TVC runs. We have very poor cell phone connection and two BSNL wired internet connections, one&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I have been looking for a network protocol stack that can be run in addition to the regular TCP/IP network at TVC. <a href="https://jackerhack.ing/" target="_blank" rel="noopener">Kiran</a> has been exploring Meshtastic, mainly to connect the sensors to the Home Assistant that TVC runs. We have very poor cell phone connection and two BSNL wired internet connections, one of which is mostly down. Kiran has been laying OFC across TVC to share that network. I took a bit off-route and started looking for a protocol that can work in adverse conditions; I was okay with high latency and extremely low bandwidth. Reticulam doesn&#8217;t make the OFC and network that is already setup at TVC. It works alongside TCP/IP, including over existing internet connections.</p>



<p class="has-luminous-vivid-amber-background-color has-background wp-block-paragraph"><a target="_blank" href="https://reticulum.network/" rel="noopener">Reticulum</a> is the cryptography-based networking stack for building local and wide-area networks with readily available hardware. Reticulum can keep operating even in adverse conditions with very high latency and extremely low bandwidth.</p>



<p class="wp-block-paragraph">Unlike <a href="https://meshtastic.org/" target="_blank" rel="noopener">Meshtastic</a> or <a href="https://meshcore.io/" target="_blank" rel="noopener">MeshCore</a>, Reticulam is not a messaging platform (though you can add messaging on top of it). It&#8217;s a full replacement networking stack. You can have many applications on top of it once it&#8217;s running. Ordinary TCP/IP applications do not automatically run on it.</p>



<p class="wp-block-paragraph">In Reticulum, every machine or node is identified by a pair of signing and encryption keys (transferable). I fact a machine can have more than one. This is used for both encryption and routing. Both key pairs use 32-byte keys. Together, the two public keys form a 64-byte public identity. But to identify the node, Reticulum uses an identity hash, which is derived from these public keys.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
hash = SHA256(encryption public key + signing public key )
identity_hash = first_16_bytes(hash)
</pre></div>


<p class="wp-block-paragraph">That is 128 bits, or 16 bytes, or 32 hex characters. This is what you usually see everwhere to identify the node.</p>



<p class="wp-block-paragraph">To route the traffic, Reticulum uses a destination hash, which is an address of an application endpoint in Reticulum. So different applications within the same node get different destination hashes. A normal identity-backed destination is derived from:</p>



<ul class="wp-block-list">
<li><strong>Application name</strong>, such as lxmf.</li>



<li><strong>Aspects</strong> that identify the service, such as delivery.</li>



<li><strong>Identity hash</strong>, identifying the key holder.</li>
</ul>



<p class="wp-block-paragraph">lxmf is a messaging protocol built on top of Reticulum.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
name_hash = SHA256(b&quot;lxmf.delivery&quot;)&#x5B;:10] # First 10 bytes
destination_hash = SHA256(name_hash + identity_hash)&#x5B;:16]
</pre></div>


<p class="wp-block-paragraph">For <strong>rncp</strong> (file transfer utility like scp), the destination name is <strong>rncp.receive</strong>:</p>



<ul class="wp-block-list">
<li>Application: rncp</li>



<li>Aspect: receive</li>
</ul>



<p class="wp-block-paragraph">The calculation is similar:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
name_hash = SHA256(b&quot;rncp.receive&quot;)&#x5B;:10]
destination_hash = SHA256(name_hash + identity_hash)&#x5B;:16]
</pre></div>


<p class="wp-block-paragraph">This is how different applications on the same node can have different destination addresses. Packets are delivered to these destination addresses.</p>



<p class="wp-block-paragraph">Applications can send an announce for their destination. An announce includes the destination’s public identity information and a signature that others can verify. As it travels through the network, nodes learn which direction that destination can be reached from and how many hops away it is. If a node does not know a path, it can request one.</p>



<p class="wp-block-paragraph">Reticulum uses Transport nodes to carry traffic between other nodes, sometimes across different interfaces. Not every node needs to be a Transport node. Ideally a stationary, always on and available nodes can be a Transport node. A network needs relatively small number of Transport nodes.</p>



<p class="wp-block-paragraph">Reticulam doesn&#8217;t have IP addresses, DNS names, etc. Everything is handled by cryptographic keys or hashes. Traffic is also encrypted end-to-end. All encryption keys are ephemeral, and communication offers forward secrecy by default. All of this is handled at the network level, and you don&#8217;t have to do anything as an application developer. The Reticulam protocol doesn&#8217;t support store-and-forward; the packets will be dropped if the destination couldn&#8217;t be reached or is down.</p>



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



<p class="wp-block-paragraph">The network can use available mediums (like links, called Interfaces) to ship the packets. Your network can be heterogeneous based on your design. It can use SerialInterface (RS-232/485 line, serial radio modem, or XBee-style transceiver), PipeInterface (pipes packets through stdin/stdout), Internet (TCP), Local LAN, Ethernet or WiFi, automatically using IPv6 multicast. Bluetooth or other radio (LoRa, VHF/UHF/HF using KISS, AX.25 ), etc. Basically, it can use any medium as long as they transmit packets. You can configure more than one interface.</p>



<p class="wp-block-paragraph">To get started, we will install <code>rnsd</code> (Reticulam Network Service Daemon). I installed it using UV, you can do pip if you want. It will install the <code>rnsd</code> and <a href="https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs">other utilities</a>. Once installed, run <code>rnsd</code> to create a key pair. It usually creates a key pair in your home directory at <code>~/.reticulum</code>. All your network keys are stored here. You can also edit <code>~/.reticulum/config</code> to add interfaces. It comes with <code>AutoInterface</code> for local LAN/Wifi connectivity. But you can add one or two TCPClientInterface so you can send packets across the internet. You can start with an Interface <a href="https://reticulum.network/connect.html" target="_blank" rel="noopener">provided by the community</a>. It&#8217;s the easiest Interface to set up. If you change the config at any time, you need to restart RNS.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# using pip
pip install rns

# using uv
uv tool install rns

# run rnsd to create keys
rnsd
</pre></div>


<p class="wp-block-paragraph">After that, you can create a system service if you&#8217;d like to run it as a service. I want it to run all the time, so I set it up that way. If not, you can start it manually whenever you want. You can check the status and traffic flow using `rnstatus`. It should show the status of all Interfaces and the traffic flowing through each one. Now you are on the network and ready.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world.png" rel="lightbox[39930]"><img loading="lazy" decoding="async" width="1024" height="681" src="https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-1024x681.png" alt="A Reticulum node mapped on Rmap World." class="wp-image-39936" srcset="https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-1024x681.png 1024w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-300x199.png 300w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-768x510.png 768w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-1536x1021.png 1536w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-720x479.png 720w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-520x346.png 520w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world-320x213.png 320w, https://thejeshgn.com/wp-content/uploads/2010/11/rmap_world.png 1822w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">A Reticulum node mapped on Rmap World.</figcaption></figure>
</div>


<p class="wp-block-paragraph">To test you can pickup a node on <a href="https://rmap.world/">Rmap</a>, like this and see the path to it by running the command.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
rnpath 5ee1bfcf91d35528c9dc22c083ea0594 # destination hash
</pre></div>


<p class="wp-block-paragraph">It will print.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Path found, destination &amp;lt;5ee1bfcf91d35528c9dc22c083ea0594&gt; is 7 hops away via 
&amp;lt;d7db22f63b453c23bb0688dde565b7c1&gt; on BackboneInterface&#x5B;PSHP G01/dyn1.intatec.com:4242]
</pre></div>


<p class="wp-block-paragraph">Now you know you are on the network and can reach others on the Reticulam Network.</p>



<p class="wp-block-paragraph">Next, install a useful app that can do something on this network, perhaps short messaging?</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=39930" 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/10/14/getting-started-with-reticulum/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">39930</post-id>	</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>
	</channel>
</rss>
