<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Janardhan Pulivarthi</title>
    <description>The latest articles on DEV Community by Janardhan Pulivarthi (@j143).</description>
    <link>https://dev.to/j143</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F788194%2F05e95ed6-9ff7-4f3a-8623-db54f5633314.jpeg</url>
      <title>DEV Community: Janardhan Pulivarthi</title>
      <link>https://dev.to/j143</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/j143"/>
    <language>en</language>
    <item>
      <title>Why I rebuilt the 6G core network from scratch in Rust: and what's architecturally different from 5G</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 03:03:38 +0000</pubDate>
      <link>https://dev.to/j143/why-i-rebuilt-the-6g-core-network-from-scratch-in-rust-and-whats-architecturally-different-from-5g-2g0o</link>
      <guid>https://dev.to/j143/why-i-rebuilt-the-6g-core-network-from-scratch-in-rust-and-whats-architecturally-different-from-5g-2g0o</guid>
      <description>&lt;p&gt;I've spent the last few months building something that doesn't exist anywhere&lt;br&gt;
else in open source: a 6G protocol stack where the architectural differences&lt;br&gt;
from 5G are not theoretical — they're running code.&lt;/p&gt;

&lt;p&gt;This post explains three specific decisions I made in the core network that&lt;br&gt;
are &lt;strong&gt;impossible to implement in Open5GS, free5GC, or any existing 5G SA&lt;br&gt;
stack&lt;/strong&gt; — and why they matter for what 6G actually needs to be.&lt;/p&gt;

&lt;p&gt;The repo: &lt;a href="https://github.com/j143/6g" rel="noopener noreferrer"&gt;github.com/j143/6g&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The problem with treating 6G as "faster 5G"
&lt;/h2&gt;

&lt;p&gt;Most 6G discussion talks about terahertz spectrum, higher speeds, and lower&lt;br&gt;
latency. Those are PHY-layer improvements — incremental. The architectural&lt;br&gt;
changes are deeper and less discussed.&lt;/p&gt;

&lt;p&gt;5G's core network was designed around three assumptions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sessions are IP-based&lt;/strong&gt; — every PDU session carries IP packets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control plane leads&lt;/strong&gt; — AMF establishes the session, then UPF forwards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terrestrial-only mobility&lt;/strong&gt; — tracking areas are ground-cell anchored&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three assumptions break for 6G. Here's how, and what I built instead.&lt;/p&gt;


&lt;h2&gt;
  
  
  Inversion 1: User-plane-first UPF
&lt;/h2&gt;

&lt;p&gt;In 5G SA, the first packet from a UE cannot be forwarded until:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AMF registers the UE (NAS Registration)&lt;/li&gt;
&lt;li&gt;SMF creates a PDU session&lt;/li&gt;
&lt;li&gt;UPF establishes the bearer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That chain takes 10–50ms of control-plane signaling &lt;strong&gt;before a single byte&lt;br&gt;
of user data moves&lt;/strong&gt;. This is fine for smartphones downloading Instagram.&lt;br&gt;
It is catastrophic for a 6G industrial sensor that sends a 40-byte reading&lt;br&gt;
every 2ms and cannot afford the setup overhead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnu2izr491epj4rqigmb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnu2izr491epj4rqigmb9.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6G proposals (Qualcomm's "Rethinking the Control Plane" whitepaper series)&lt;br&gt;
argue for inverting this: &lt;strong&gt;let the UPF forward speculatively, and lazily&lt;br&gt;
trigger session establishment only if the flow continues.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what that looks like in &lt;code&gt;6g-core/upf.rs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;FlowAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/// Forward immediately, notify control plane asynchronously&lt;/span&gt;
    &lt;span class="n"&gt;ForwardAndNotify&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;qos_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;QosClass&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="cd"&gt;/// Buffer for up to `wait_ms` while SMF establishes session&lt;/span&gt;
    &lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;wait_ms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="cd"&gt;/// Reject — policy violation&lt;/span&gt;
    &lt;span class="n"&gt;Reject&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RejectReason&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Upf&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/// Called when a packet arrives with no matching session context.&lt;/span&gt;
    &lt;span class="cd"&gt;/// This is architecturally impossible in 5G — a 6G-only behavior.&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;forward_unknown_flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Packet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;FlowAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Heuristic: known UE + low-latency slice → forward immediately&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.ue_table&lt;/span&gt;&lt;span class="nf"&gt;.contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="py"&gt;.source_ue_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="py"&gt;.slice_id&lt;/span&gt;&lt;span class="nf"&gt;.is_urllc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nn"&gt;FlowAction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ForwardAndNotify&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;qos_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nn"&gt;QosClass&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Urllc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nn"&gt;FlowAction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;wait_ms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control plane becomes a &lt;strong&gt;thin adaptation layer&lt;/strong&gt;, not the gatekeeper.&lt;br&gt;
First-packet latency drops to sub-millisecond for known UEs on low-latency&lt;br&gt;
slices.&lt;/p&gt;


&lt;h2&gt;
  
  
  Inversion 2: Semantic PDU sessions
&lt;/h2&gt;

&lt;p&gt;5G has three PDU session types: IPv4/v6, Ethernet, and Unstructured.&lt;br&gt;
All three assume the network's job is to deliver &lt;strong&gt;bits faithfully&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6G semantic communication research challenges this assumption entirely. The&lt;br&gt;
network should deliver &lt;strong&gt;meaning&lt;/strong&gt; — transmit enough for the receiving&lt;br&gt;
application's task to succeed, not necessarily every bit. A video stream&lt;br&gt;
for an object detection task only needs to transmit enough for the detector&lt;br&gt;
to fire correctly — not every pixel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8itdk8n8xuvh6ym42gm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8itdk8n8xuvh6ym42gm.png" alt="6G semantic" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added a fourth PDU session type: &lt;code&gt;Semantic(GoalSpec)&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="cd"&gt;/// 6G-only: 4th PDU session type. No equivalent in 3GPP 5G specifications.&lt;/span&gt;
&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;PduSessionType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Ipv4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Ipv6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Ipv4v6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Ethernet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Unstructured&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="cd"&gt;/// Semantic / goal-oriented session.&lt;/span&gt;
    &lt;span class="cd"&gt;/// The network knows the application task and optimises&lt;/span&gt;
    &lt;span class="cd"&gt;/// transmission for task success, not bit fidelity.&lt;/span&gt;
    &lt;span class="nf"&gt;Semantic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GoalSpec&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;GoalSpec&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/// What the receiver is trying to accomplish&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SemanticTask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="cd"&gt;/// Maximum bits the sender is allowed to use&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;max_bits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="cd"&gt;/// Minimum task success rate the session must sustain&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;min_task_success_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;SemanticTask&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ImageClassification&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;SpeechRecognition&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;wer_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;ObjectDetection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;iou_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;TextSummarization&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;rouge_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the SMF creates a &lt;code&gt;Semantic(GoalSpec)&lt;/code&gt; session, the UPF routes the&lt;br&gt;
payload through &lt;code&gt;TextSemanticCodec&lt;/code&gt; — a semantic encoder that compresses&lt;br&gt;
2048 bytes to ~312 bytes by preserving task-relevant meaning rather than&lt;br&gt;
exact bytes. The metric is no longer BER. It's &lt;strong&gt;task success rate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a protocol-level change, not an application-layer optimization.&lt;br&gt;
The network infrastructure — not the app — owns the semantic contract.&lt;/p&gt;


&lt;h2&gt;
  
  
  Inversion 3: NTN-native AMF
&lt;/h2&gt;

&lt;p&gt;5G NR added NTN (Non-Terrestrial Networks) as a bolt-on in Release 17. The&lt;br&gt;
AMF's tracking area concept was designed for terrestrial cells — a cell has&lt;br&gt;
a fixed location, fixed propagation delay, and a static coverage boundary.&lt;/p&gt;

&lt;p&gt;A LEO satellite at 550km altitude moves at 7.5km/s relative to Earth. Its&lt;br&gt;
beam sweeps across ground at ~100km per minute. The coverage boundary moves&lt;br&gt;
continuously. The propagation delay (~1.8ms to 550km LEO) is a first-order&lt;br&gt;
effect on HARQ timing, not an afterthought.&lt;/p&gt;

&lt;p&gt;In 5G, the AMF has no model for this. In &lt;code&gt;6g-core/amf.rs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;TrackingArea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/// Conventional terrestrial cell — identical to 5G concept&lt;/span&gt;
    &lt;span class="n"&gt;Terrestrial&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;tac&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;cell_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="cd"&gt;/// 6G-native NTN tracking area.&lt;/span&gt;
    &lt;span class="cd"&gt;/// The AMF reasons about beam-level mobility for LEO satellites.&lt;/span&gt;
    &lt;span class="cd"&gt;/// No equivalent in 3GPP 5G AMF specifications.&lt;/span&gt;
    &lt;span class="n"&gt;Ntn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ntn_node_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NtnNodeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="cd"&gt;/// Beam index within the satellite's coverage pattern&lt;/span&gt;
        &lt;span class="n"&gt;beam_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="cd"&gt;/// One-way propagation delay — required for HARQ timing adjustment&lt;/span&gt;
        &lt;span class="n"&gt;propagation_delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="cd"&gt;/// Expected beam dwell time before handover is needed&lt;/span&gt;
        &lt;span class="n"&gt;beam_dwell_remaining&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Amf&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/// Handles mobility from terrestrial to NTN mid-session.&lt;/span&gt;
    &lt;span class="cd"&gt;/// In 5G, this path does not exist — NTN is a separate deployment.&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;handle_ntn_handover&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ue_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nn"&gt;TrackingArea&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Ntn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;HandoverDecision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CoreError&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Adjust HARQ timing for new propagation delay&lt;/span&gt;
        &lt;span class="c1"&gt;// Re-evaluate QoS against NTN link budget&lt;/span&gt;
        &lt;span class="c1"&gt;// Preserve semantic session context across handover&lt;/span&gt;
        &lt;span class="o"&gt;...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AMF now reasons about &lt;strong&gt;beam-level mobility&lt;/strong&gt; as a first-class concept,&lt;br&gt;
not as a network topology edge case.&lt;/p&gt;


&lt;h2&gt;
  
  
  The fourth new thing: SDF (Sensing Data Function)
&lt;/h2&gt;

&lt;p&gt;5G has no NF for sensing — because 5G doesn't do integrated sensing. In 6G,&lt;br&gt;
the same waveform that carries data also functions as a radar. The base&lt;br&gt;
station simultaneously communicates and senses its environment (ISAC —&lt;br&gt;
Integrated Sensing and Communication).&lt;/p&gt;

&lt;p&gt;This creates a new architectural requirement: &lt;strong&gt;sensing results generated&lt;br&gt;
in the RAN need to be consumable by applications through the core network.&lt;/strong&gt;&lt;br&gt;
A factory automation application should be able to subscribe to "object&lt;br&gt;
detected within 10 meters of cell X" the same way it subscribes to a UPF&lt;br&gt;
traffic flow.&lt;/p&gt;

&lt;p&gt;I built this as a new network function — &lt;code&gt;SDF&lt;/code&gt; (Sensing Data Function):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="cd"&gt;/// Sensing Data Function — a 6G-new NF with no 5G equivalent.&lt;/span&gt;
&lt;span class="cd"&gt;/// Exposes ISAC sensing results from the RAN as a core SBI subscription.&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;SensingDataFunction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;subscriptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ApplicationId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SensingFilter&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sensing_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;VecDeque&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SensingResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;SensingResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;source_cell&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CellId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Instant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;detections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Detection&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Clone)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Detection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;range_m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;azimuth_deg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;velocity_mps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An application subscribes to &lt;code&gt;SDF&lt;/code&gt; over the SBI (Service-Based Interface),&lt;br&gt;
identical to how an application subscribes to &lt;code&gt;NWDAF&lt;/code&gt; analytics in 5G.&lt;br&gt;
The difference: the data originates from the radio waveform itself, not&lt;br&gt;
from network KPIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it can simulate today
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;cargo test --workspace&lt;/code&gt; and the following behaviors are exercised:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UPF lazy session establishment&lt;/strong&gt; — &lt;code&gt;forward_unknown_flow()&lt;/code&gt; route
selection with QoS heuristics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic PDU session lifecycle&lt;/strong&gt; — SMF creates &lt;code&gt;Semantic(GoalSpec)&lt;/code&gt;,
UPF routes through &lt;code&gt;TextSemanticCodec&lt;/code&gt;, measures task success rate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NTN AMF registration&lt;/strong&gt; — UE registers with &lt;code&gt;TrackingArea::Ntn&lt;/code&gt;,
beam handover triggered on &lt;code&gt;beam_dwell_remaining = 0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDF pub/sub&lt;/strong&gt; — ISAC detection published by &lt;code&gt;6g-isac&lt;/code&gt; crate, delivered
to subscriber via &lt;code&gt;SensingDataFunction&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Q-learning MAC scheduler&lt;/strong&gt; — compared against Round Robin baseline
on throughput fairness (Jain index)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;THz PHY&lt;/strong&gt; — OTFS waveform BER vs Eb/N0, RIS phase-shift channel model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full 5G-AKA auth flow&lt;/strong&gt; — AUSF + UDM subscriber credential management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The validation strategy is in &lt;code&gt;ROADMAP.md&lt;/code&gt; — every experiment has a&lt;br&gt;
real-system baseline to compare against (NIST path-loss tables, Vienna 5G&lt;br&gt;
LLS, ns-3 NR, Liu et al. CRB results for ISAC).&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Rust
&lt;/h2&gt;

&lt;p&gt;Three reasons, none of them trendy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Correctness in protocol state machines.&lt;/strong&gt;&lt;br&gt;
6G core network code manages sessions, bearers, and mobility state across&lt;br&gt;
concurrent UEs. State machine bugs in C++ are silent — a null pointer&lt;br&gt;
dereference in a 5G AMF won't panic, it'll corrupt neighbor state&lt;br&gt;
silently. Rust's ownership model makes illegal state transitions a&lt;br&gt;
compile error. &lt;code&gt;TrackingArea::Ntn&lt;/code&gt; cannot be constructed without a&lt;br&gt;
&lt;code&gt;propagation_delay&lt;/code&gt; — the type system enforces the protocol invariant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. No garbage collector pauses.&lt;/strong&gt;&lt;br&gt;
A 6G scheduler operating at sub-millisecond HARQ timescales cannot afford&lt;br&gt;
GC pauses. Rust gives deterministic memory behavior without the manual&lt;br&gt;
memory management risk of C/C++.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cargo workspace for protocol layering.&lt;/strong&gt;&lt;br&gt;
The 5G/6G stack is a strict layered architecture. Rust's workspace +&lt;br&gt;
crate system maps perfectly: &lt;code&gt;6g-phy&lt;/code&gt; cannot accidentally import&lt;br&gt;
&lt;code&gt;6g-core&lt;/code&gt; types, because the dependency graph in &lt;code&gt;Cargo.toml&lt;/code&gt; makes&lt;br&gt;
layer violations a build error. In a C++ monorepo, nothing prevents a&lt;br&gt;
PHY function from calling into the core. Rust makes the architecture&lt;br&gt;
physically enforced.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm building next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;examples/hello_6g.rs&lt;/code&gt; — a single runnable scenario that exercises all
four 6G-unique behaviors in sequence with readable terminal output&lt;/li&gt;
&lt;li&gt;Python bindings via &lt;code&gt;pyo3&lt;/code&gt; — so ML researchers can drive the 6G-ai
channel estimator and scheduler from Python notebooks without Rust&lt;/li&gt;
&lt;li&gt;Scenario library — urban ISAC, LEO NTN handover, industrial URLLC —
each a self-contained reproducible experiment&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Looking for collaborators
&lt;/h2&gt;

&lt;p&gt;If you work in any of these areas, I'd genuinely value your input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6G researchers&lt;/strong&gt; — is the architecture directionally correct against
current proposals? Where am I wrong?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust engineers&lt;/strong&gt; — crate structure, API design, idiomatic Rust review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telecom engineers with 5GC experience&lt;/strong&gt; — does the delta from 5G read
as meaningful to you, or am I solving the wrong problems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repo: &lt;strong&gt;&lt;a href="https://github.com/j143/6g" rel="noopener noreferrer"&gt;github.com/j143/6g&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open issues, open PRs, or find me here. All feedback welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>6g</category>
    </item>
    <item>
      <title>How to rewrite history in git repo</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 16 Jul 2023 10:34:59 +0000</pubDate>
      <link>https://dev.to/j143/how-to-rewrite-history-in-git-repo-32p3</link>
      <guid>https://dev.to/j143/how-to-rewrite-history-in-git-repo-32p3</guid>
      <description>&lt;p&gt;Changing the email address and author&lt;/p&gt;

&lt;p&gt;ref: &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History"&gt;https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/d/repo/go-training &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git filter-branch &lt;span class="nt"&gt;--commit-filter&lt;/span&gt; &lt;span class="s1"&gt;'
        if [ "$GIT_AUTHOR_EMAIL" = "person@example.com" ];
        then
                GIT_AUTHOR_NAME="New Person";
                GIT_AUTHOR_EMAIL="new.person@example.com";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi'&lt;/span&gt; HEAD

Proceeding with filter-branch...

Rewrite 8430e1b897d5419fdasfsafasfsa685db2ae2327 &lt;span class="o"&gt;(&lt;/span&gt;1/3&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0 seconds passed, remainRewrite 77c97ee4fsdafasfasdfaf5f9276348435fb768487e &lt;span class="o"&gt;(&lt;/span&gt;2/3&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1 seconds passed, remainRewrite 6bb1508502ff0add7ae46d121a8d33a565f1889c &lt;span class="o"&gt;(&lt;/span&gt;2/3&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1 seconds passed, remaining 0 predicted&lt;span class="o"&gt;)&lt;/span&gt;
Ref &lt;span class="s1"&gt;'refs/heads/main'&lt;/span&gt; was rewritten
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>github</category>
      <category>git</category>
      <category>howto</category>
    </item>
    <item>
      <title>short tutorial on git config</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 16 Jul 2023 05:00:01 +0000</pubDate>
      <link>https://dev.to/j143/short-tutorial-on-git-config-37j9</link>
      <guid>https://dev.to/j143/short-tutorial-on-git-config-37j9</guid>
      <description>&lt;p&gt;Here is the starter config file.&lt;/p&gt;

&lt;p&gt;you can open this with &lt;code&gt;git config -e&lt;/code&gt; for any specific repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;core&lt;/span&gt;]
    &lt;span class="n"&gt;repositoryformatversion&lt;/span&gt; = &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;filemode&lt;/span&gt; = &lt;span class="n"&gt;false&lt;/span&gt;
    &lt;span class="n"&gt;bare&lt;/span&gt; = &lt;span class="n"&gt;false&lt;/span&gt;
        &lt;span class="n"&gt;logallrefupdates&lt;/span&gt; = &lt;span class="n"&gt;true&lt;/span&gt;
        &lt;span class="n"&gt;symlinks&lt;/span&gt; = &lt;span class="n"&gt;false&lt;/span&gt;
        &lt;span class="n"&gt;ignorecase&lt;/span&gt; = &lt;span class="n"&gt;true&lt;/span&gt;
[&lt;span class="n"&gt;remote&lt;/span&gt; &lt;span class="s2"&gt;"origin"&lt;/span&gt;]
        &lt;span class="n"&gt;url&lt;/span&gt; = &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;github&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;j143&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;
        &lt;span class="n"&gt;fetch&lt;/span&gt; = +&lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;heads&lt;/span&gt;/*:&lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;remotes&lt;/span&gt;/&lt;span class="n"&gt;origin&lt;/span&gt;/*
[&lt;span class="n"&gt;branch&lt;/span&gt; &lt;span class="s2"&gt;"main"&lt;/span&gt;]
        &lt;span class="n"&gt;remote&lt;/span&gt; = &lt;span class="n"&gt;origin&lt;/span&gt;
        &lt;span class="n"&gt;merge&lt;/span&gt; = &lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;heads&lt;/span&gt;/&lt;span class="n"&gt;main&lt;/span&gt;
[&lt;span class="n"&gt;user&lt;/span&gt;]
        &lt;span class="n"&gt;name&lt;/span&gt; = &lt;span class="n"&gt;John&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt;
        &lt;span class="n"&gt;email&lt;/span&gt; = &lt;span class="n"&gt;jp&lt;/span&gt;@&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
[&lt;span class="n"&gt;credential&lt;/span&gt; &lt;span class="s2"&gt;"https://github"&lt;/span&gt;]
        &lt;span class="n"&gt;com&lt;/span&gt; = &lt;span class="n"&gt;j143&lt;/span&gt;
[&lt;span class="n"&gt;credential&lt;/span&gt;]
        &lt;span class="n"&gt;helper&lt;/span&gt; = &lt;span class="n"&gt;store&lt;/span&gt;
[&lt;span class="n"&gt;branch&lt;/span&gt; &lt;span class="s2"&gt;"show-tcp-syn-ack"&lt;/span&gt;]
    &lt;span class="n"&gt;remote&lt;/span&gt; = &lt;span class="n"&gt;origin&lt;/span&gt;
    &lt;span class="n"&gt;merge&lt;/span&gt; = &lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;heads&lt;/span&gt;/&lt;span class="n"&gt;show&lt;/span&gt;-&lt;span class="n"&gt;tcp&lt;/span&gt;-&lt;span class="n"&gt;syn&lt;/span&gt;-&lt;span class="n"&gt;ack&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  credential
&lt;/h2&gt;

&lt;p&gt;these lines control which credential to use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;credential&lt;/span&gt; &lt;span class="s2"&gt;"https://github"&lt;/span&gt;]
        &lt;span class="n"&gt;com&lt;/span&gt; = &lt;span class="n"&gt;j143&lt;/span&gt;
[&lt;span class="n"&gt;credential&lt;/span&gt;]
        &lt;span class="n"&gt;helper&lt;/span&gt; = &lt;span class="n"&gt;store&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  author
&lt;/h2&gt;

&lt;p&gt;author details&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;user&lt;/span&gt;]
        &lt;span class="n"&gt;name&lt;/span&gt; = &lt;span class="n"&gt;John&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt;
        &lt;span class="n"&gt;email&lt;/span&gt; = &lt;span class="n"&gt;jp&lt;/span&gt;@&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Remote repository for example GitHub
&lt;/h2&gt;

&lt;p&gt;How to reference a git server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;remote&lt;/span&gt; &lt;span class="s2"&gt;"origin"&lt;/span&gt;]
        &lt;span class="n"&gt;url&lt;/span&gt; = &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;github&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;j143&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;
        &lt;span class="n"&gt;fetch&lt;/span&gt; = +&lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;heads&lt;/span&gt;/*:&lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;remotes&lt;/span&gt;/&lt;span class="n"&gt;origin&lt;/span&gt;/*
[&lt;span class="n"&gt;branch&lt;/span&gt; &lt;span class="s2"&gt;"main"&lt;/span&gt;]
        &lt;span class="n"&gt;remote&lt;/span&gt; = &lt;span class="n"&gt;origin&lt;/span&gt;
        &lt;span class="n"&gt;merge&lt;/span&gt; = &lt;span class="n"&gt;refs&lt;/span&gt;/&lt;span class="n"&gt;heads&lt;/span&gt;/&lt;span class="n"&gt;main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>git</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>PVC stuck in terminating state?</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Mon, 14 Nov 2022 02:50:11 +0000</pubDate>
      <link>https://dev.to/j143/pvc-stuck-in-terminating-state-3gpf</link>
      <guid>https://dev.to/j143/pvc-stuck-in-terminating-state-3gpf</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# kubectl get pvc
NAME                                  STATUS        VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
service-vol-0                          Terminating   pvc-1517f4d4-48ac-4892-9618-5bc3bfb255db   1Gi        RWO            sc     33d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the finalizer all &lt;code&gt;null&lt;/code&gt;, in place of &lt;code&gt;kubernetes.io/pv-protection&lt;/code&gt; to be able to delete.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl patch pvc service-vol-0 &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"metadata":{"finalizers":null}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;docs to know more about pv-protection: &lt;a href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection"&gt;https://kubernetes.io/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Documentation links</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Tue, 02 Aug 2022 17:38:00 +0000</pubDate>
      <link>https://dev.to/j143/documentation-links-2i8k</link>
      <guid>https://dev.to/j143/documentation-links-2i8k</guid>
      <description>&lt;h2&gt;
  
  
  Basics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;bash:&lt;/strong&gt; &lt;a href="https://www.gnu.org/software/bash/manual/bash.html#index-return"&gt;https://www.gnu.org/software/bash/manual/bash.html#index-return&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;grub:&lt;/strong&gt; &lt;a href="https://www.gnu.org/software/grub/grub-documentation.html"&gt;https://www.gnu.org/software/grub/grub-documentation.html&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;wget:&lt;/strong&gt; &lt;a href="https://www.gnu.org/software/wget/manual/html_node/"&gt;https://www.gnu.org/software/wget/manual/html_node/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;git:&lt;/strong&gt; &lt;a href="https://git-scm.com/docs/git"&gt;https://git-scm.com/docs/git&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;java 8:&lt;/strong&gt; &lt;a href="https://docs.oracle.com/javase/8/docs/"&gt;https://docs.oracle.com/javase/8/docs/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;gpg:&lt;/strong&gt; &lt;a href="https://www.gnupg.org/documentation/manuals/gnupg/"&gt;https://www.gnupg.org/documentation/manuals/gnupg/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;nano:&lt;/strong&gt; &lt;a href="https://www.nano-editor.org/dist/v2.0/nano.html"&gt;https://www.nano-editor.org/dist/v2.0/nano.html&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;libstdc++:&lt;/strong&gt; &lt;a href="https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.what"&gt;https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.what&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;dpkg:&lt;/strong&gt; &lt;a href="https://manpages.debian.org/bullseye/dpkg/dpkg.1.en.html"&gt;https://manpages.debian.org/bullseye/dpkg/dpkg.1.en.html&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;mvn cli:&lt;/strong&gt; &lt;a href="https://maven.apache.org/ref/3.8.1/maven-embedder/cli.html"&gt;https://maven.apache.org/ref/3.8.1/maven-embedder/cli.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;gfm&lt;/code&gt;:&lt;/strong&gt; - &lt;a href="https://github.github.com/gfm/"&gt;https://github.github.com/gfm/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;yaml&lt;/code&gt;:&lt;/strong&gt; - &lt;a href="https://yaml.org/spec/1.2.2"&gt;https://yaml.org/spec/1.2.2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Configure site specific search on Chrome</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Tue, 02 Aug 2022 17:37:49 +0000</pubDate>
      <link>https://dev.to/j143/search-like-a-pro-on-chrome-cag</link>
      <guid>https://dev.to/j143/search-like-a-pro-on-chrome-cag</guid>
      <description>&lt;p&gt;If we want to search for music directly on spotify without google search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;We would like to search the term nirvana in the search bar. And in the address bar the corresponding address is &lt;/p&gt;

&lt;p&gt;&lt;code&gt;open.spotify.com/search/&lt;/code&gt;&lt;strong&gt;&lt;code&gt;nirvana&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--17dPlxFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w29qfpapvqg2dfetrh7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--17dPlxFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w29qfpapvqg2dfetrh7u.png" alt="identify the pattern in the URL" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;

&lt;p&gt;Right click on the address bar, and select &lt;code&gt;Edit search engines...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oERbyM3S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ph671db5bxbwdvcxufxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oERbyM3S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ph671db5bxbwdvcxufxb.png" alt="Add search engine" width="478" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3
&lt;/h3&gt;

&lt;p&gt;Add configuration as shown&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fyYbiHd7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1qj5tn6pl43zfj9bfbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fyYbiHd7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1qj5tn6pl43zfj9bfbk.png" alt="search engine configuration" width="478" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4
&lt;/h3&gt;

&lt;p&gt;Enter keyword &lt;code&gt;spotify&lt;/code&gt; and press &lt;code&gt;tab&lt;/code&gt; in the address bar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ZjD4non--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sffufocxe6xegh2liino.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ZjD4non--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sffufocxe6xegh2liino.png" alt="site specific search" width="364" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What makes a good engineer?</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Tue, 02 Aug 2022 17:37:21 +0000</pubDate>
      <link>https://dev.to/j143/what-makes-a-good-engineer-2j5f</link>
      <guid>https://dev.to/j143/what-makes-a-good-engineer-2j5f</guid>
      <description>&lt;p&gt;I am not sure, how good I am. But, here are some attributes that made me admire people.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Basics
&lt;/h3&gt;

&lt;p&gt;Reads "Introduction to ...", and stays with academic rigor. Reads the documentation first, before searching for answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Time it takes
&lt;/h3&gt;

&lt;p&gt;This person knows how much time does it take to write a program, review code. If the task is not well studied, at least try to pay attention to get the stat for how much time other people take.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Relentless focus
&lt;/h3&gt;

&lt;p&gt;They have a focus with one goal in mind. Complete the task. They do not multitask.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Common-ness
&lt;/h3&gt;

&lt;p&gt;They tend to have common appeal, generally approachable but not always.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Hand calculations
&lt;/h3&gt;

&lt;p&gt;They know how to do a simple calculation for a complex program they are writing. So, they are sure of their momentum at any point.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. They say "thank you"
&lt;/h3&gt;

&lt;p&gt;They thank their manager, their direct reports and they are just thankful.&lt;/p&gt;

&lt;p&gt;Not an exhaustive list.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What happens when a pod gets deleted</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 31 Jul 2022 11:06:14 +0000</pubDate>
      <link>https://dev.to/j143/what-happens-when-a-pod-gets-deleted-3c8d</link>
      <guid>https://dev.to/j143/what-happens-when-a-pod-gets-deleted-3c8d</guid>
      <description>&lt;h2&gt;
  
  
  1 State change and preparation
&lt;/h2&gt;

&lt;p&gt;The pod is set to Terminating. And it will be isolated from end points&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Run a preStop Hook
&lt;/h2&gt;

&lt;p&gt;preStopHook will be executed. It is special command or http request sent to containers in the pod.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 SIGTERM signal is sent to the pod
&lt;/h2&gt;

&lt;p&gt;Kubernetes sends SIGTERM signal to all the containers in the pod. This lets them know that they are going to be terminated. SIGTERM can be handled, or ignored.&lt;/p&gt;

&lt;h2&gt;
  
  
  4 Kuberntes waits for the grace period
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pod&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-pod&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-container&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;busybox&lt;/span&gt;
  &lt;span class="na"&gt;terminationGracePeriodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5 Kubernetes sends SIGKILL command
&lt;/h2&gt;

&lt;p&gt;If the containers are still running it sends SIGKILL command. Kubernetes cleanup all the objects related to the terminated pod.\&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to check aws use all at once (to see hidden services)</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 31 Jul 2022 11:02:00 +0000</pubDate>
      <link>https://dev.to/j143/how-to-check-aws-use-all-at-once-5987</link>
      <guid>https://dev.to/j143/how-to-check-aws-use-all-at-once-5987</guid>
      <description>&lt;p&gt;It is hard to know which service is consuming more or which service we forgot to turn off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Billing by Services (Across all regions)
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="//console.aws.amazon.com/billing/home#/bills"&gt;https://console.aws.amazon.com/billing/home#/bills&lt;/a&gt; to see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jgk3AMLv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cyebr1w3dne0yjz064i6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jgk3AMLv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cyebr1w3dne0yjz064i6.png" alt="Bill details by service" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Pass Environmental variables along with Powershell commands</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sat, 23 Jul 2022 05:01:06 +0000</pubDate>
      <link>https://dev.to/j143/pass-environmental-variables-along-with-powershell-commands-20c7</link>
      <guid>https://dev.to/j143/pass-environmental-variables-along-with-powershell-commands-20c7</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;PS1 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$env&lt;/span&gt;:NODE_OPTIONS&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"--openssl-legacy-provider"&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>windows</category>
      <category>beginners</category>
      <category>node</category>
    </item>
    <item>
      <title>How does people know when you have opened an email?</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sat, 18 Jun 2022 09:14:12 +0000</pubDate>
      <link>https://dev.to/j143/how-does-people-know-when-you-have-opened-an-email-39pn</link>
      <guid>https://dev.to/j143/how-does-people-know-when-you-have-opened-an-email-39pn</guid>
      <description>&lt;p&gt;I think the image links are uniquely named so that when we open email, the image gets loaded from the link. This way the sender know that the email has been received.&lt;/p&gt;

&lt;p&gt;Workaround: By default do not enable images for emails. Then you will be asked whether to display images or not from a sender.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuw3wzbdqoa4vgjlnlx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuw3wzbdqoa4vgjlnlx9.png" alt="Image description" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What are some phrases you use that have magical powers ✨?</title>
      <dc:creator>Janardhan Pulivarthi</dc:creator>
      <pubDate>Sun, 05 Jun 2022 08:27:06 +0000</pubDate>
      <link>https://dev.to/j143/what-are-some-phrases-you-use-that-have-magical-powers--56j0</link>
      <guid>https://dev.to/j143/what-are-some-phrases-you-use-that-have-magical-powers--56j0</guid>
      <description>&lt;p&gt;For me, I always pass instructions in the form of questions. Like,  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;can you see why the code was not passing?, &lt;/li&gt;
&lt;li&gt;can you help me at this step?, can you check the document once, &lt;/li&gt;
&lt;li&gt;it might have some pointers?&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
