<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Bits & Bolts]]></title><description><![CDATA[Tech, Coding and Electrical Engineering]]></description><link>http://satyamedh.me/</link><image><url>http://satyamedh.me/favicon.png</url><title>Bits &amp; Bolts</title><link>http://satyamedh.me/</link></image><generator>Ghost 5.82</generator><lastBuildDate>Tue, 05 May 2026 08:19:17 GMT</lastBuildDate><atom:link href="http://satyamedh.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[If anyone is wondering why your ESP32 in your wall as your ESPHome controller randomly flickers and dies...]]></title><description><![CDATA[<p>Especially when you turn on large inductive loads such as a ceiling fan...</p><p>May I remind you of the fact that the inductive loads have a massive inrush current...</p><p>Which means a massive magnetic field...</p><p>Which, to unprotected devkits in your switchboards with coiled up Dupont wire right next to</p>]]></description><link>http://satyamedh.me/if-anyone-is-wondering-why-your-esp32-in-your-wall-as-your-esphome-controller-randomly-flickers-and-dies/</link><guid isPermaLink="false">6998cf0a969d1e05dbacece9</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Fri, 20 Feb 2026 21:22:45 GMT</pubDate><content:encoded><![CDATA[<p>Especially when you turn on large inductive loads such as a ceiling fan...</p><p>May I remind you of the fact that the inductive loads have a massive inrush current...</p><p>Which means a massive magnetic field...</p><p>Which, to unprotected devkits in your switchboards with coiled up Dupont wire right next to these AC lines means...</p><p>Massive spikes in voltage... What do they do to poor tiny ESP32s and the input pins on relays?</p><p>They kill them. Straight up murder, let me tell you! Guess who learnt it the hard way? </p><p>Expensive mistakes :(</p><p>The fact that my ESP32s survived almost 4 years is a massive achievement, but yeah they&apos;re slowly starting to die. I guess I&apos;ll have to shield them.</p><p>Or just get a ZBMINI from Sonoff and get those ESP32s off the damn Wi-Fi network. Frankly, I might just do that.</p><p>Thanks for reading...</p>]]></content:encoded></item><item><title><![CDATA[eMMUlate: Breaking (some of) the TI-Nspire CX II's security]]></title><description><![CDATA[<p><strong>Disclaimer: <em>This work does not enable cheating, nor does it break the chain of trust. It is intended solely to enable emulation of the CX II in Firebird.</em></strong></p><h3 id="the-backstory">The Backstory</h3><p>Earlier this year, I was debating over getting either a Casio CG-50 or a TI-Nspire for my AP Calc BC</p>]]></description><link>http://satyamedh.me/emmulate/</link><guid isPermaLink="false">692b81d4e2c3a706091e2533</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Sun, 30 Nov 2025 14:50:21 GMT</pubDate><content:encoded><![CDATA[<p><strong>Disclaimer: <em>This work does not enable cheating, nor does it break the chain of trust. It is intended solely to enable emulation of the CX II in Firebird.</em></strong></p><h3 id="the-backstory">The Backstory</h3><p>Earlier this year, I was debating over getting either a Casio CG-50 or a TI-Nspire for my AP Calc BC exam. To me, the ability to mod and mess around with my stuff is an important factor, and upon a quick google search, the Nspire had ndless, which allowed me to run assembly programs. Hence obviously, I purchased the Nspire.</p><p>To my dismay, however, my calculator was too new to run ndless(it shipped with OS ver. 6.0). Unfortunately, the project seemed abandoned, with no updates in over 4y. Desperate, I started looking for exploits myself, hoping to port it. Eventually, I was added to the dev group, and Ndless r2020 was born. </p><p>My drive for digging into the calc didn&apos;t end there, however. I eventually discovered that <a href="https://github.com/nspire-emus/firebird?ref=satyamedh.me" rel="noreferrer">Firebird</a>, the emulator for all Nspires, couldn&apos;t emulate the CX II. &quot;Incomplete bootrom detected.&quot;, it would complain. Intrigued, I looked into what exactly this &quot;incomplete&quot; meant, and it turned out to be this hidden region of the BootROM from <code>0x27800</code> to <code>0x28000</code>, which was nicknamed keys. </p><p>While most of BootROM is normally readable and dumpable using a tool such as polydumper, this elusive region will dump out all zeros. It was understood that it would only be unmasked under a very specific set of conditions, conditions only known to TI and etched into the silicon. </p><h3 id="the-analysis">The Analysis</h3><p>By disassembling the dumped BootROM using Ghidra, is it quite trivial to find out that function <code>0x39C</code> is responsible for reading the keys. However, it directly loads the keys into the 3DES MMIO block. <strong>The keys never touch SDRAM!</strong></p><p>It is obvious that there is some sort of check on the Program Counter(PC), since both the OS and the Bootloader never attempt to read that region by themselves. Instead, they call <code>0x150</code>(which eventually calls <code>0x39C</code>) to directly load the keys to <code>0xC8010000</code>, the location of the 3DES MMIO block. They then use it directly to encrypt and decrypt the files. This is a direct indicator that keys can only be read from BootROM, and maybe only specifically those instruction addresses.</p><p>Furthermore, according to research done by Vogtinator, the hardware is needed to be in an extremely specific state. MMU needed to be off and some undocumented bits in CP15 needed to be set. The 3DES engine seems have its registers be write-only, and reading would only produce <code>0x5D5AEA97</code>(not keys). All to say, TI did not cheap out on the security... Or did they...?</p><h3 id="wait-a-second">Wait a second...</h3><p>While stepping through the instructions in Firebird(which could at max load bootloader without keys), I noticed something odd. The stack pointer was assigned to <code>0x1800FB54</code>. This address does not exist in physical memory, since SDRAM is only from <code>0x10000000</code> to <code>0x14000000</code>. This meant that the MMU was actively in use. This contradicted with what Vogtinator said previously so I checked it out myself:</p><figure class="kg-card kg-image-card"><img src="http://satyamedh.me/content/images/2025/11/image.png" class="kg-image" alt loading="lazy" width="557" height="183"></figure><p>A multi-billion dollar company such as TI could surely have foreseen that if the MMU is on, it is extremely simple to do some MMU mapping shenanigans to hijack where keys are written. Obviously, right? </p><p>This is a funny pattern that I&apos;ve noticed across the entire Nspire code. TI seems to fortify their house with bricks but leaves their front door wide open. Of course, there could still be a check to ensure that <code>0xC8000000</code> was identity mapped, but you are reading this post so you know where that is going :D </p><p>Looking at my (admittedly very ugly) code for the exploit, the starting just creates the program&apos;s own page tables so I can freely change memory mappings. </p><pre><code class="language-c">uint32_t pt_addr = ((uint32_t)page_table_buffer + 0x3FFF) &amp; ~0x3FFF;
uint32_t *page_table = (uint32_t *)pt_addr;</code></pre><p>It goes on to identity map most peripherals, SRAM and RAM. However, with regards to <code>0xC8000000</code>: </p><pre><code class="language-c">uint32_t des_va_idx = 0xC8000000 &gt;&gt; 20;
page_table[des_va_idx] = (0x13000000 &amp; 0xFFF00000) | (0b11 &lt;&lt; 10) | (0 &lt;&lt; 5) | 0 | 0b10;</code></pre><p>This maps <code>0xC8000000</code> to <code>0x13000000</code>, so any writes to the 3DES engine ends up at <code>0x13010000</code>. Therefore, after somehow exiting from <code>0x39C</code>, we can just read off this address to get keys.</p><h3 id="the-stack-trap">The Stack Trap</h3><p>When I originally attempted to call <code>0x39C</code>, it would not return only on hardware. Therefore, I though I could exploit this piece of code:</p><pre><code>0000076c 60 10 8f e2     adr        r1,DAT_000007d4  = E12FFF1Eh
00000770 00 40 91 e5     ldr        r4,[r1,#0x0]=&gt;DAT_000007d4  = E12FFF1Eh
00000774 10 00 2d e9     stmdb      sp!,{r4}
00000778 3d ff 2f e1     blx        sp
</code></pre><p>For some reason, it attempts to load a <code>bx lr</code> into the stack and jump to it. I don&apos;t exactly understand why, but this is before </p><pre><code>00000788 b3 fe ff eb     bl         FUN_0000025c </code></pre><p>which was causing the problems with not returning. Hence, by setting the stack to an extremely precise position at the edge of accessible memory, it is possible to get back control right after keys are read a couple instructions earlier. For this, I create my own exception vectors:</p><pre><code class="language-c">uint32_t vec_addr = ((uint32_t)vector_buffer + 0xFFF) &amp; ~0xFFF; 
uint32_t *vectors = (uint32_t *)vec_addr;

uint32_t cpta_vec_addr = ((uint32_t)cpta_vectors_buffer + 0x3FF) &amp; ~0x3FF;
uint32_t *coarse_vec_table = (uint32_t *)cpta_vec_addr;

// build vector table
printf(&quot;Setting up vector table at 0x%08lX...\n&quot;, vec_addr);
for (int i = 0; i &lt; 8; i++) vectors[i] = 0xE59FF018;
vectors[12] = (uint32_t)data_handler; // The one we care about</code></pre><p>And map it to <code>0xFFFF0000</code> . I also enable high vectors, so the ARM CPU knows to jump to my vectors instead of BootROM&apos;s:</p><pre><code>// high vector enable
uint32_t sctlr;
asm volatile(&quot;mrc p15, 0, %0, c1, c0, 0&quot; : &quot;=r&quot;(sctlr));
sctlr |= (1 &lt;&lt; 13) | (1 &lt;&lt; 0);
asm volatile(&quot;mcr p15, 0, %0, c1, c0, 0&quot; :: &quot;r&quot;(sctlr));</code></pre><h3 id="setup">Setup</h3><p>Next, we perform some setup for the exploit:</p><pre><code>void perform_exploit_setup(void) {
    printf(&quot;Performing exploit setup...\n&quot;);

	// these are the observed conditions that 0x39c is in when called via bootloader.
	volatile uint32_t *usb_top = (volatile uint32_t *)0xB0000000;
	usb_top[0x100 / 4] = 0;

	usb_top[0x1C0 / 4] = 0;

	// extensive setup, refer to the source for the full function

    printf(&quot;Exploit setup complete.\n&quot;);
}</code></pre><p>This is just setting a list of conditions on the hardware(such as shutting off the DMA, the USB controllers etc) that the CPU expects at this point. Without this, the CPU will just return <code>0x0</code>s. Most of this was just observed by using Firebird.  Finally, we can call <code>trigger_next_key();</code>, which just jumps into SVC mode(in case we were previously in abort mode), resets the trap stack(which catches the <code>stmdb</code> at <code>0x774</code>) and jumps to <code>call_rom39c</code>. </p><p><code>0x39C</code> takes in 4 paramters. <code>r0</code> is ignored and overwritten. <code>r1</code>just dictates which part of the switch will be used(we want <code>0x5</code>), <code>r2</code> decides which &quot;set&quot; of keys we are loading and <code>r3</code> sets the 3DES engine to either encrypt or decrypt mode. By iterating <code>r2</code> for each call, we can extract the entire hidden region. However, it seems like only <code>0x27</code>, <code>0x3d</code>, <code>0x25</code>, <code>0x2d</code> are ever used. Hence, my program only extracts those:</p><pre><code class="language-c">__attribute__((naked))
void call_rom39c(uint32_t __attribute__((unused)) sram_stack, uint32_t __attribute__((unused)) r2_val) {
    asm volatile(
        // r0 = sram_stack
        // r1 = r2_val
        
        &quot;mov r12, r0                \n\t&quot;   // r12 = sram_stack
        
        // Save caller registers on *current* stack
        &quot;stmfd sp!, {r4-r11, lr}    \n\t&quot;

        // Save old SP
        &quot;mov   r4, sp               \n\t&quot;

        // Switch to trap stack
        &quot;mov   sp, r12              \n\t&quot;

        // Save old SP on trap stack
        &quot;stmfd sp!, {r4}            \n\t&quot;

        // Setup ROM args
        &quot;mov r2, r1                 \n\t&quot;   // r2 = r2_val
        &quot;mov r0, #0x5               \n\t&quot;
        &quot;mov r1, #0x5               \n\t&quot;
        &quot;mov r3, #0x1               \n\t&quot;

        // Call ROM 0x39C
        &quot;ldr lr, =0x0000039C        \n\t&quot;
        &quot;blx lr                     \n\t&quot;

        // Restore SP
        &quot;ldmfd sp!, {r4}            \n\t&quot;
        &quot;mov   sp, r4               \n\t&quot;

        // Restore caller registers and return
        &quot;ldmfd sp!, {r4-r11, lr}    \n\t&quot;
        &quot;bx lr                      \n\t&quot;
    );
}</code></pre><h3 id="the-finale">The Finale</h3><p>Here&apos;s the final flow:</p><ol><li>We call <code>0x39C</code></li><li>It writes keys to what it <em>thinks</em> is <code>0xC8010000</code></li><li>The keys end up at <code>0x13010000</code></li><li>CPU attempts to <code>stmdb</code>, and ends up in our no-access region</li><li><strong>DATA ABORT!</strong></li></ol><p>This calls our own exception vectors, which copy the keys to a different location and moves onto the next set of keys:</p><pre><code class="language-c">void c_handler(EXCEPTION_TYPE type, uint32_t lr, uint32_t sp) {
    if (type == DATA_ABORT) {
        volatile uint32_t* des_regs = (volatile uint32_t*)0x13010000;
        for (int i = 0; i &lt; 6; i++) {
            extracted_keys[current_key_idx][i] = des_regs[2 + i];
        }

        // ... print keys ...
        current_key_idx++;
        trigger_next_key();
    } else {
        // ... error handling ...
}</code></pre><p>After all keys are extracted, we can display the keys to the user. I have chosen to do this via a QR code, allowing the user to easily use a tool to inject keys into their keyless bootrom.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://satyamedh.me/content/images/2025/11/fdsfdfsdfdsfdsfdsfds.png" class="kg-image" alt loading="lazy" width="1235" height="928" srcset="http://satyamedh.me/content/images/size/w600/2025/11/fdsfdfsdfdsfdsfdsfds.png 600w, http://satyamedh.me/content/images/size/w1000/2025/11/fdsfdfsdfdsfdsfdsfds.png 1000w, http://satyamedh.me/content/images/2025/11/fdsfdfsdfdsfdsfdsfds.png 1235w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Had to erase out the QR since it contains the actual keys, which is copyrighted. </span></figcaption></figure><p>(It seems like there&apos;s some sort of issue with my nginx reverse proxy and https, causing the above image to not load in correctly. You might need to click on it.)</p><p>Both QRs are the same, this is just the result of weird VRAM mapping that TI does and me being too lazy to handle it correctly. Furthermore, since this program messes up the state of the device pretty bad, I found it easier just to reset instead of attempting to restore and exit back to the Nspire UI.</p><p>And there you have it. (some of) the TI-Nspire CX II&apos;s security is broken with an  <strong>UNPATCHABLE</strong> exploit. Good job TI :)</p><p>I&apos;d appreciate if you could star the project on Github below</p><p>Exploit: <a href="https://github.com/satyamedh/eMMUlate?ref=satyamedh.me" rel="noreferrer">https://github.com/satyamedh/eMMUlate</a><br>Injector: <a href="https://satyamedh.github.io/eMMUlate_injector?ref=satyamedh.me" rel="noreferrer">https://satyamedh.github.io/eMMUlate_injector</a></p>]]></content:encoded></item><item><title><![CDATA[Broken Bluetooth on an AMD system like the Framework 13?]]></title><description><![CDATA[<p>I won&apos;t waste your time. The solution is to simply turn off the computer and wait for some time, ~1 minute. It should fix itself.</p><p>I&apos;ve discovered MediaTek&apos;s chips suck ass. Be it the RZ616 on my fw13 or the RZ608 on my Asus</p>]]></description><link>http://satyamedh.me/broken-bluetooth-on-an-amd-system-like-the-framework-13/</link><guid isPermaLink="false">686062d46fb86005e0e3a3af</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Sat, 28 Jun 2025 21:50:15 GMT</pubDate><content:encoded><![CDATA[<p>I won&apos;t waste your time. The solution is to simply turn off the computer and wait for some time, ~1 minute. It should fix itself.</p><p>I&apos;ve discovered MediaTek&apos;s chips suck ass. Be it the RZ616 on my fw13 or the RZ608 on my Asus ROG motherboard, I keep running into this bullshit where bluetooth just dies and I have to shut down and wait to get this fixed. Screw MediaTek :D</p><p>Thanks for reading :)</p>]]></content:encoded></item><item><title><![CDATA[Grow Smarter: Introducing My LoRa-Powered Garden Monitor]]></title><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Have soil that needs to be monitored but has no access to an electricity line or Wi-Fi? My project here might just be a great solution for you!</p><p>The frustration is real: you want to give your plants the best chance to thrive, but manual checks are time-consuming, and</p>]]></description><link>http://satyamedh.me/grow-smarter-introducing-my-mesh-powered-garden-monitor/</link><guid isPermaLink="false">682e0465f9ffa50603080747</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Sun, 25 May 2025 12:43:49 GMT</pubDate><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Have soil that needs to be monitored but has no access to an electricity line or Wi-Fi? My project here might just be a great solution for you!</p><p>The frustration is real: you want to give your plants the best chance to thrive, but manual checks are time-consuming, and traditional smart garden tech often falls short in remote areas. Limited by power outlets and Wi-Fi range, many promising solutions are simply impractical for sprawling gardens or off-grid plots.</p><p>That&apos;s where my project comes in. This prototype, using an ESP32, SX1278 LoRa transceiver, and a bunch of sensors, allows you to monitor your farm, garden, or even just a little plant anywhere. It is designed to be used from as small as just one node, to be scaled to a huge farm. Imagine having accurate, real-time data about your soil&apos;s moisture, temperature, Carbon Monoxide levels, all delivered reliably, even in the most remote corners of your land. Intrigued? Let&apos;s dive deeper into how this works.</p><h2 id="lora-beyond-wi-fi-and-wires">LoRa: Beyond Wi-Fi and Wires</h2><p>Traditional garden monitoring solutions often hit a wall &#x2013; literally. Wi-Fi has limited range, struggles with obstacles, and typically requires a constant power source. Running wires across a large garden or farm is simply not feasible. This leaves many aspiring smart gardeners out in the cold, or rather, out in the unmonitored field.</p><p>This is precisely why I designed a system that leverages LoRa (Long Range) technology, for my project. LoRa allows for incredible communication distances with very little power, making it perfect for remote locations where traditional Wi-Fi can&apos;t reach.</p><p>But what happens if a single sensor is too far even for LoRa to reach the main hub directly, or if there are obstacles in the way? That&apos;s where a clever feature comes in: <strong>packet re-broadcasting</strong>. Imagine your garden sensors as little messengers. Each sensor sends out its data, and if a neighboring sensor hears that message but doesn&apos;t receive an acknowledgement from the receiver, it simply repeats it, helping the information travel further across your garden. This way, even if a sensor is tucked away behind a shed or far down a field, its data can still make its way to the central monitoring station by &quot;hopping&quot; through other nearby sensors. In the future I plan on completely converting this into a mesh-based network with route planning etc.</p><p>For agriculture, this means:</p><ul><li><strong>Unparalleled Range:</strong> LoRa allows for communication over 8-10 kilometers, making it perfect for large farms or gardens where Wi-Fi signals simply wouldn&apos;t reach.</li><li><strong>Ultra-Low Power:</strong> LoRa is incredibly power-efficient, allowing our sensor nodes to run for extended periods on basic AA batteries, completely liberating them from the need for external power lines. This is crucial for off-grid operations.</li></ul><p>By leveraging LoRa with this intelligent re-broadcasting, we&apos;re not just adding smart tech to your garden; we&apos;re fundamentally rethinking how we monitor natural environments, making it accessible and reliable, even in the most challenging locations.</p><h3 id="what-does-it-monitor"><strong>What Does It Monitor? </strong></h3><p>So, what exactly does this powerful, off-grid system tell you about your plants? My prototype is designed to capture the vital signs of your soil and immediate environment, providing actionable insights right to your fingertips.</p><p>Currently, each sensor node in the system gathers critical data points:</p><ul><li><strong>Soil Moisture:</strong> This is arguably the most crucial metric. My sensors tell you exactly how much water is available to your plants in the soil. No more overwatering, no more under-watering &#x2013; just optimal hydration. You&apos;ll know precisely when your plants are thirsty, and when they&apos;ve had enough. It is possible to integrate this with an automated system to make watering automatic even!</li><li><strong>Ambient Temperature:</strong> Understanding the air temperature around your plants is key for growth and preventing stress. Sudden drops or spikes can indicate a need for protection or adjustment.</li><li><strong>Humidity:</strong> High or low humidity can affect plant transpiration and disease susceptibility. Monitoring this helps you create the ideal microclimate for your crops.</li><li><strong>Carbon Monoxide (CO) for Early Detection:</strong> While primarily focused on plant health, we&apos;ve also integrated a Carbon Monoxide sensor. Beyond being a danger to humans, sudden increases in CO can be an early indicator of smoke or smoldering in the area. My system processes this CO data to help detect potential fire incidents quickly, providing an extra layer of peace of mind for your valuable crops and property. </li></ul><p>To ensure all sensor readings are accurately time-stamped and synchronized across your garden, the system also uses a small <strong>NEO-6M GPS module for precise time synchronization</strong>. This helps in organizing and analyzing data chronologically, giving you a clear historical view of your garden&apos;s conditions.</p><p>All this data, collected wirelessly and efficiently by our sensor network, is then transmitted to a central gateway. From there, it&apos;s pushed to a robust backend, which can be adapted to any frontend you desire (for example, a Home Assistant server). I&apos;ve developed a sample Home Assistant backend to demonstrate the capabilities, but the system is designed for flexibility, allowing integration with various monitoring dashboards.</p><h2 id="aaaand-what-about-power">Aaaand what about power?</h2><p>Don&apos;t worry, I kept that in mind too. Utilizing the advanced deep sleep modes of the ESP32 microcontroller and the LoRa SX1278 transceiver, the sensor nodes spend most of their time in a low-power state, only waking up when necessary to take readings and transmit data. Components like the GPS module and the MQ7 CO sensor, which consume more power, are only powered on <em>momentarily</em> when needed, using clever MOSFET switching. This meticulous power management allows a single sensor node to achieve(theoretically) <strong>weeks of continuous runtime on just 4 standard AA batteries</strong>. This means less frequent battery changes, minimal disruption to your monitoring, and true independence from external power lines. And this is before putting everything onto a single PCB and simplifying and optimizing everything.</p><h2 id="what-about-the-code">What about the code?</h2><p> Beyond the hardware, the software driving this project is built for reliability and future growth. Instead of a simpler framework, I&apos;ve utilized the <strong>ESP-IDF frameowrk</strong>, which provides a more robust and professional development environment for the ESP32. </p><p>Furthermore, the system relies on a <strong>proper and future-proof communication protocol</strong> with a robust packet format. This ensures that data transmission is efficient, reliable, and that the system can easily adapt to new sensor types or features in the future, providing a solid foundation for continuous innovation.</p><p>If you&apos;re interested, you can check out the project <a href="https://github.com/satyamedh/Grow-Smarter?ref=satyamedh.me" rel="noreferrer">here</a>! </p><p>Thanks for reading :)</p>]]></content:encoded></item><item><title><![CDATA[The Breengrub.com ARG]]></title><description><![CDATA[<p>Just a blogpost showing my thoughts as I parse through this website</p><p>So I tried to deobfuscate the JS, which resulted in <a href="https://gist.github.com/satyamedh/3da1ebcebddab58b3aa2b11a5fd89039?ref=satyamedh.me" rel="noreferrer">this</a>.</p><p>Moving on, the 404 page has this eerie looking <a href="https://breengrub.com/assets/areyoulost.png?ref=satyamedh.me" rel="noreferrer">image</a>, I&apos;m currently trying to parse through it for any hidden messages. performing strings on the</p>]]></description><link>http://satyamedh.me/the-breengrub-com-arg/</link><guid isPermaLink="false">676abe4db5484805f8972c2d</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Tue, 24 Dec 2024 14:16:03 GMT</pubDate><content:encoded><![CDATA[<p>Just a blogpost showing my thoughts as I parse through this website</p><p>So I tried to deobfuscate the JS, which resulted in <a href="https://gist.github.com/satyamedh/3da1ebcebddab58b3aa2b11a5fd89039?ref=satyamedh.me" rel="noreferrer">this</a>.</p><p>Moving on, the 404 page has this eerie looking <a href="https://breengrub.com/assets/areyoulost.png?ref=satyamedh.me" rel="noreferrer">image</a>, I&apos;m currently trying to parse through it for any hidden messages. performing strings on the image reveals the following</p><pre><code class="language-shell">$ strings areyoulost.png
IHDR
        pHYs
iTXtXML:com.adobe.xmp
&lt;?xpacket begin=&quot;
&quot; id=&quot;W5M0MpCehiHzreSzNTczkc9d&quot;?&gt; &lt;x:xmpmeta xmlns:x=&quot;adobe:ns:meta/&quot; x:xmptk=&quot;Adobe XMP Core 5.6-c145 79.163499, 2018/08/13-16:40:22        &quot;&gt; &lt;rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt; &lt;rdf:Description rdf:about=&quot;&quot; xmlns:xmp=&quot;http://ns.adobe.com/xap/1.0/&quot; xmlns:xmpMM=&quot;http://ns.adobe.com/xap/1.0/mm/&quot; xmlns:stEvt=&quot;http://ns.adobe.com/xap/1.0/sType/ResourceEvent#&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:photoshop=&quot;http://ns.adobe.com/photoshop/1.0/&quot; xmp:CreatorTool=&quot;Adobe Photoshop CC 2019 (Windows)&quot; xmp:CreateDate=&quot;2024-11-05T21:11:30-06:00&quot; xmp:MetadataDate=&quot;2024-11-05T21:11:30-06:00&quot; xmp:ModifyDate=&quot;2024-11-05T21:11:30-06:00&quot; xmpMM:InstanceID=&quot;xmp.iid:761d1d64-ba57-b242-abf2-8bba113e3b47&quot; xmpMM:DocumentID=&quot;adobe:docid:photoshop:f256ba5b-60f6-2e44-b517-4fdab717818b&quot; xmpMM:OriginalDocumentID=&quot;xmp.did:87957d27-41a5-1344-a13e-b1da34594c7e&quot; dc:format=&quot;image/png&quot; photoshop:ColorMode=&quot;3&quot;&gt; &lt;xmpMM:History&gt; &lt;rdf:Seq&gt; &lt;rdf:li stEvt:action=&quot;created&quot; stEvt:instanceID=&quot;xmp.iid:87957d27-41a5-1344-a13e-b1da34594c7e&quot; stEvt:when=&quot;2024-11-05T21:11:30-06:00&quot; stEvt:softwareAgent=&quot;Adobe Photoshop CC 2019 (Windows)&quot;/&gt; &lt;rdf:li stEvt:action=&quot;saved&quot; stEvt:instanceID=&quot;xmp.iid:761d1d64-ba57-b242-abf2-8bba113e3b47&quot; stEvt:when=&quot;2024-11-05T21:11:30-06:00&quot; stEvt:softwareAgent=&quot;Adobe Photoshop CC 2019 (Windows)&quot; stEvt:changed=&quot;/&quot;/&gt; &lt;/rdf:Seq&gt; &lt;/xmpMM:History&gt; &lt;/rdf:Description&gt; &lt;/rdf:RDF&gt; &lt;/x:xmpmeta&gt; &lt;?xpacket end=&quot;r&quot;?&gt;
qIDATx
=vQX
\U55
uj[^
4aq{
x1E&quot;
nyHEE
44k?
2U[|
!\8KL
_x[6
c*DX
eYHuT
7ZhP
NQ!#
4WmK&quot;
Vja%
t2P&amp;7j
4t&quot;
&quot;*/&quot;
C&gt;&amp;[
g2g;
yTs[
Tr&gt;p
JxL&apos;Q)
UgEQ
2&gt;VH/
(j&apos;?
x&lt;vJ
/lPiV
J#Do
]~[!
P0Ix(
ER*$
i4iM
j/CJ
1o*q
[t\j
*POF
+M?n
@fe[
vBTq *
_&apos;@oy
tj&apos;L
&lt;mL7k4
aWdf
!odzo-
M(A8
UAV#
P0KT
Z7&apos;B
@:&amp;i
?Q /,
&lt;mK8j
\8]*
VN]_
x&apos;i=.
APJ6
d\z&lt;:F
-  w
?g,~
f47U
J+2&lt;
V24EU
=r8b
Q@g4
@&gt;X&lt;
XNT-
&apos;:BqJ
_ddl7=yJ
        2:3
q,(&apos;
r1K.m
p8tneS
Q{)Q
w*SZ
,!j_
d&amp;&lt;n
V`,p
$j|d&gt;
y`$g
f;g/7i
&lt;-j^U
&quot;Bc2
meej
?T|%6P
J%P;k
nAP3
Xmwe
 cQk
[B4Y
9Q      5
OW{uF&gt;q
B`xny
@v,&quot;?
3SniS
A]g*
&gt;[ZQ
j8.m?
-[&lt;-
 x~J
vzs=K
%BTD8*
J[&amp;x*
--D2
s7tHG
*ZXX
t:t&lt;
?:::::zo
sssJ
8::RJ
,..ba4
X5_2N   Xo
Zk&gt;O[
D9Px
PMm7
B$&lt;`
dxls!
|J)&apos;
HD5??
Rj~~~aa
mi\E8
fYF/
TJ-,,DQ
xpp`
XMkM\
b=Soz\X2
l#`&lt;
ppP/@
E+A;:HQ@
/u:&apos;
h.28
?&lt;&lt;&lt;&lt;&lt;
{eAp
$I(/
XZZB
P&apos;Fh/
-.F8l
&gt;L5     C
{{{!=`
Iw~~~ii
%pV#k
4MIU
MrF^
WVVh
_ZZBSlqq
KKKh
y&apos;++
mWU`Q
Rjnnn
CsssGGG
eP,-
kDN+
$s&quot;):
g&amp;y}CZ2
G;2d
ssst&lt;
`0hN
Rjkk
/^4gz
*       9::
4JSHS
eoOF
(T9 W
9BG*o
(see
Rj{{
l&gt;(p~
O777
pa}}
3gVWWI
,-----
?WVV
t|ppPT
6onn
% w{
K%ix2
J)45
9r}}
iiiaa
x|-M
vH{Q
WJ-,,
ggguuu
qm@#
gV*ppp
 fB.
jhc`
+k,0??Oj
ytp?
5c;N
(X6&quot;qa
|ycc
GGG~J
&amp;]^^FO)JV
ZG95N
4`cT)uxxXd
+nC&gt;0
kOI(
_Q      ?
mY@q?
U&apos;]*eA*
(A)utt
[[[h
wvv^
VVVn
sii
ein&amp;
kT1OL%
`0pR
&amp;F!jU
&apos;ZkJ
B5i\bJ-
|&lt;~     p
s!~nm!
-riL;
!|Dh
&gt;j+M
4Q z
|gdmc
oX[[
&apos;B;@(
}wwwz
9-%IB
AoN&quot;D=
766666._
j&quot;`gk[
ppppp
!H2*7
2BG*
Rjiiiiiiee
u_U\
K|d_
HgrI
huuuiiiqqqii
teK3H&apos;0
 pF9
g:8s
3gvwwwww_
&apos;2&quot;/i
+ljg
zc)D
K$(3
kkkJ
j{{[
hT4&lt;
nW)E
/5O)u
FkMV
Zoll
*(*Co
\]]UJ
&quot;hGBnI
sssGGG
+}H|m
+W.]
xxxH
!Cd&gt;
W_}E
faaAk
&amp;VR7
(`:6
B&apos;wvv0_
9o$fO
2Hi]I[t
vvv^
O777
$       vB
}JK[
c;2L
7Q`#
RKKKD
&lt;8::B
(py&gt;
9       Z1
 jjcoF
C&apos;677777
`L]r
.mll`
&apos;0{.
cx!!
g@+(
2=q&gt;;
yy=q
]**fd
;`I5
j0(-
d)\(
E((G
@pZ!
=~oA
VbA
~ciIw.O
:i5I
@G*2,9
F#ja
Km}}
&gt;@.G
E(y0
z=&lt;O
sssZ
6       Ei
{766
q677
O+++
B@!v
LqvQ
1b;*c
pd,B
e{{{
{{{!r
P#bR4
\TfgggwwW)
%766
;;;;
zii)D
&apos;pz&amp;IB
v;sss
ZXXX\\
[ZZZXX
3??OJ
Z]]E7
*R)e
5D*B
4MSg
&apos;ar}
3kkkJ
U*c7
f`xLqC=9?
sD\Y
&amp;WWQ
W766
K777+e
Nm\k
wvvVWW
*~Mfgg
5dDc
JUpc
y27/I[
gEN3
888@9
k3Ui
Niy#e
hz@6
J)NY|
N+PO
        Z7      N&amp;
Ij4d
g#0LH
u{nn
DQttt
}\^^
laaq~~
%eF 8M
SXk}ec
OQ,Z
n@1BN
*I&amp;#
|kTP
Y]xz
y.!/
&quot;.|w
nW3
G&quot;9N
3@Nx
vww_
gWWW
wwwwww_
+++KKK
Vr&gt;p
KKKQ
*R M
$IP,
++++++
?[D
&amp;0/c
766666P
=zdXH
[ux@l7
mS~)R
flnn
?88x
*A$H
;R^6
J5^6
isss
xsKKK
KKKx
Rjgg
^UJmll
zGWWW
,;::
ODH&apos;
[x-5
.=41
`0@^
U&lt;^\\\
7cG+
[&apos;Apw
mi^2
ZgYv
b&lt;2K
GGGGGGF
mooommmmm9
EDcx
2epx|
%ijh
=8yK
:1B:
#D}D
Y[[[__
o?&quot;C
+++|
U+J+
I7E[
^ui+
czS!
.r&amp;&apos;
i=qxxH
`kkkss
16F~
de{ZNc
pkhB
|#*L
?+cK
A,BA}
O x_!D(
S ]E
,H%a
qCk}
JBvvv
xaaa~~~aa
ag_&quot;
eB&gt;Q
`aaaqqqiiIM
|Y3
^onn
F!_}
C,Q,6
T&gt;MS
{{{h&amp;
3(s{{
]akk
K^Vg
lll`y
\___]]
b;;;
t&lt;77
vvvp
r$yh
WO5^6
?&lt;&lt;TJ
[^^^ZZZ^^
Z///Sg
Zooo
,..&quot;
Hsj.
xa||r
=::ZXX
/+ja
F4sx
$!Vv
FI:v
F{h5
TX[[[
=;zdh
.\X__
Y3kkk0Ix
UxRk=
dV&lt;5
;g&lt;3
rgiQ
I&apos;&lt;_
&amp;!_Rt
M~Fy
~}xx
 bss
&gt;zcs
^-&apos;S
wjSv(w
c~&lt;/f4
=::Bo|
PyC{x
^GOZ
nooooo
&apos;:BqG
?~\Z
&lt;:::&lt;&lt;
\CQdnR
p8TJ
tE\h
M       &apos;J%
0G.n
e&quot;d0
ammmuuuee
Kwww
pB]M
L_A)
&quot;!J)
S       !BAk
P xG!D(
sJHrt:
Po4&apos;B&apos;
t:t&lt;
$Q /|
IbA^X
h4jE
(P)E%a
ccxa
Jsz~ZY
eeeeyy
sssGGGx
?Q`%
r3:D
;tqqqnn
Tn~!$
?X~D
_&gt;pc.
i-y~
&lt;880
X#@`k
41yt0b
(SIfi
`xGI
?::&quot;
CmaynK54_
(2#J
Od;Tm
E1B{+
]LqqG
v8*5
`2z7
%g#n
_~J
;\XX
09`x^
gP0P
uSQZ)
_Tk=77
UC0\
zF~e
,Cz~
S /,t
:,ER^
ayl!
 uN[]Q
&lt;Z/R
F&lt;hb
&lt;i[\
Xf6g{@#&lt;
2xLWm=
&amp;E~jz
u:Nq
s*7?P
bGGG5
t;j3&apos;c
O&amp;IR
&amp;I277g
sP[I
C`6)
rM^I
dQbA~
1^~&gt;
B~mJS
0! s
E^;G
SU`)
(VWU
Z4Rm?
sN@:
Eyris
8e[&amp;o
}qtz~
JC]v
        #cp
h;cVP
Mm`_
#       _g
qI?DQ
rriW2G
T&quot;9.
)R&lt;O
ieej
DmhE
A`0.
fXHML
EB**
y|      C
=77g
XQ%P
y.D{vI
TaxG
0&lt;0\
m#Q8
FLS)dH
]M]{
I=9d
+&amp;|&gt;
OKsT
VCZU
s5P8
oQ0|
i6FmM
AT:=
lOy4E
X j_
(&quot;&quot;l
iNKNZ
)C%!
~       G5
J)&lt;S
        jM6
\orgQ%p
,9:p
F6&lt;T0I
hyHEE
#tUj
FNE]
34Xj
~H?l
{Ex^
bkw|%&gt;kq
KM7t
y:vN
i(R]
(L:Y
s9PZ^
FKB\
jK*A[
~&quot;TJ
P IC
zG1h
`2:Oo$MS
S5M(:h
&amp;=HE
qjeej
[Akm
efYVd
.PoqD
Qyh
eZ$y
-i      &quot;Q
p_G=x
UtWf
B(!c{
-:ZO2
ceerWB
fpY&apos;
^rlz
&apos;D      WB
W^L=]
%DXd
$$~r
kBV4
9U@fEA
B$SX1d
G]Ua
        ;@%
t iE
 N:i
VX(&lt;
&quot;       zF
#Tm&apos;X,
L[AGC
?XJVYN
m+ja)
PfCBu
0,Q=
oX6v3
dt~0
M-]l
5WyN4i
%Gm
yH%c#
ni*Uk
%3ki
)Mr}
*.gun&quot;
        }a0z
f{__}
dwv!.XL;
@58|
r8[0
?xMH
O}\2
IEND</code></pre>]]></content:encoded></item><item><title><![CDATA[Running into issues with Immich behind a nginx reverse proxy?]]></title><description><![CDATA[<p></p><p>CHECK YOUR <em>client_max_body_size</em>! I changed it to 25GB</p><p>god I don&apos;t want to admit how long this took for me to figure out...</p><p>Thanks for reading :)</p><p></p>]]></description><link>http://satyamedh.me/setting-up-immich-with-nginx-reverse-proxy/</link><guid isPermaLink="false">669e640f82d8ae05f9a574e3</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Mon, 22 Jul 2024 14:04:12 GMT</pubDate><content:encoded><![CDATA[<p></p><p>CHECK YOUR <em>client_max_body_size</em>! I changed it to 25GB</p><p>god I don&apos;t want to admit how long this took for me to figure out...</p><p>Thanks for reading :)</p><p></p>]]></content:encoded></item><item><title><![CDATA[The Pseudocode compiler is (mostly) over]]></title><description><![CDATA[<p>Available <a href="http://satyamedh.me/psc-compiler/" rel="noreferrer">here</a></p><p>I will be publishing a whole long post on how I wrote it... maybe</p>]]></description><link>http://satyamedh.me/the-pseudocode-compiler-is-mostly-over/</link><guid isPermaLink="false">668be9ad05f5861ce5ce3506</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Mon, 08 Jul 2024 13:30:17 GMT</pubDate><content:encoded><![CDATA[<p>Available <a href="http://satyamedh.me/psc-compiler/" rel="noreferrer">here</a></p><p>I will be publishing a whole long post on how I wrote it... maybe</p>]]></content:encoded></item><item><title><![CDATA[I AM WRITING A CIE PSEUDOCODE COMPILER!]]></title><description><![CDATA[<p>Cambridge&apos;s IGCSE and AS/A Levels have a huge problem: &quot;Pseudo&quot;code<br></p><p>Well I never really understood how someone would program in a language that could never be run so... here I am to fix it</p><p>How is this called pseudocode when it is so well</p>]]></description><link>http://satyamedh.me/i-am-writing-a-pseudocode-compiler/</link><guid isPermaLink="false">667ef7ed05f5861ce5ce34eb</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Fri, 28 Jun 2024 17:54:20 GMT</pubDate><content:encoded><![CDATA[<p>Cambridge&apos;s IGCSE and AS/A Levels have a huge problem: &quot;Pseudo&quot;code<br></p><p>Well I never really understood how someone would program in a language that could never be run so... here I am to fix it</p><p>How is this called pseudocode when it is so well defined <a href="https://www.cambridgeinternational.org/Images/697401-2026-syllabus-legacy-notice.pdf?ref=satyamedh.me" rel="noreferrer">here</a> that I can write a compiler for it? I have no goddamn idea but its fine</p><p>I mostly plan on hosting this as an online service so my CS teacher can use it in her classes but also doing this for fun so</p><p>You can find the source code and progress on <a href="https://github.com/satyamedh/CIE-Pseudocode-compiler?ref=satyamedh.me" rel="noreferrer">GitHub</a> (pls star)</p><p>I know I barely post anythere here but,</p><p>Thanks for reading :)</p>]]></content:encoded></item><item><title><![CDATA[THE SITE IS UP!]]></title><description><![CDATA[<p>YAY!!!!!!!!!!!!!!</p>]]></description><link>http://satyamedh.me/the-site-is-up/</link><guid isPermaLink="false">662e408fdc72dc2a20246594</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Sun, 28 Apr 2024 12:27:06 GMT</pubDate><content:encoded><![CDATA[<p>YAY!!!!!!!!!!!!!!</p>]]></content:encoded></item><item><title><![CDATA[The online review predicament]]></title><description><![CDATA[<p>A while ago, like back in November, I was in the market for a 3D printer. My main use of this would be for fast prototyping of a robot I would be building to take to IIT-B Techfest literally the next month.</p><p>After searching google for a while, I came</p>]]></description><link>http://satyamedh.me/the-online-review-predicament/</link><guid isPermaLink="false">6628ee427280c1154829a3df</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Wed, 24 Apr 2024 12:21:52 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1633613286991-611fe299c4be?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHJldmlld3xlbnwwfHx8fDE3MTM5NTg0NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1633613286991-611fe299c4be?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHJldmlld3xlbnwwfHx8fDE3MTM5NTg0NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="The online review predicament"><p>A while ago, like back in November, I was in the market for a 3D printer. My main use of this would be for fast prototyping of a robot I would be building to take to IIT-B Techfest literally the next month.</p><p>After searching google for a while, I came across many printers. Most far too expensive for my budget. I went to the 3D Printing discord for help, and after a lot of back and forth of things that don&apos;t ship to me and budget constraints, I found the Elegoo Neptune 4. most people instantly denied it as a potential option. Their reasoning being, many people in the discord were throwing in their complaints about print quality and the ungodly amount of effort required to maintain it. I didn&apos;t care about print quality cuz well, I&apos;m not printing art. It&apos;s a prototype. I was still scared of the QC issues and other reported problems. However, after going through a LOT of Youtube reviews, I was pretty sure it&apos;s gonna be fine</p><p>After getting the printer, I actually did not face ANY issues. The print quality was actually better than I expected, and it was FAST! 18 minute Benchy!! I considered myself lucky and moved on. I didn&apos;t share my experience anywhere except maybe a message or two in the 3D printing discord (remember this)</p><p></p><p>A month or so later, my mom ended up buying a Pixel 6a. She didn&apos;t like it much and preferred her old broken phone over it so I ended up getting it as my 5T died around the same time(yay). I ended up using it for two whole months without any issues. Then, one day, while scrolling Reddit, I stumbled across <a href="https://reddit.com/r/GooglePixel?ref=satyamedh.me" rel="noreferrer">r/GooglePixel</a>. Apparently people dislike the 6a and Pixels in general due to reported issues. </p><p>But here&apos;s the catch, I didn&apos;t face any issues. Heck I&apos;ve been running the Android 15 Developer Previews and Betas on this thing and it&apos;s absolutely fine! </p><p>So, I came across <a href="https://www.reddit.com/r/GooglePixel/comments/193y4lg/comment/khceftg/?ref=satyamedh.me" rel="noreferrer">this</a> comment on one of the threads, and it made me realise what&apos;s up.</p><p>When I bought my Neptune and had a good experience, I never told anybody about my positive experience. When I got my Pixel and loved it, I never told anyone about, well, the positive experience. But the people who did have a negative experience went around asking for help and showing their dissatisfaction. This created a larger ratio of negative posts to positive posts in the community, creating a bias on the people that it&apos;s not a good product, where in reality, it&apos;s just a bias.</p><p>This can be extended to reviews in general. For example, Whenever I would have a positive Uber ride, I would not bother leaving a review because I view it as a hassle. But when I would have issues, I&apos;d especially remember to leave a lesser star rating in order to help Uber and potential future drivers. </p><p>Whenever an app asks us to leave a rating, we don&apos;t usually bother and smack the &quot;Later&quot; button. But, when we&apos;re having issues, guess what do we do? Open up the Google Play Store and leave a 1-star review. </p><p>This is just something interesting I came across and decided would be a good thing to write about(also to just test my writing skills). I personally now do keep this in mind when I&apos;m looking at reviews and try to account for the bias. </p><p>Thanks for reading :)</p>]]></content:encoded></item><item><title><![CDATA[Why does this exist]]></title><description><![CDATA[<p>I was bored the other day and decided to make a blog for the fun of it. At first, I thought I&apos;d make my own blogging system with the MERN stack, which I did...</p><p>And then I realised it&apos;s too much work and switched to Ghost.</p>]]></description><link>http://satyamedh.me/why-does-this-exist/</link><guid isPermaLink="false">6628eb517280c1154829a3b8</guid><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Wed, 24 Apr 2024 11:23:50 GMT</pubDate><content:encoded><![CDATA[<p>I was bored the other day and decided to make a blog for the fun of it. At first, I thought I&apos;d make my own blogging system with the MERN stack, which I did...</p><p>And then I realised it&apos;s too much work and switched to Ghost... so here we are</p><p>I&apos;ve had some more thought on what I&apos;ll do here and mostly it&apos;ll be project devlogs, along with solutions to programming issues I encounter, and also the occasional rants.</p><p>Oh yeah, things are probably broken too, just send me a mail at <code>me@satyamedh.me</code> or <code>satyamedh9@gmail.com</code> . </p><p>I&apos;ve got a few things in the queue, by the time y&apos;all are seeing this(I mean, who&apos;d be seeing it anyway) I might have a few other posts out. </p><p>Oh yeah, I would like to thank ChatGPT for the name of the blog too</p><p>Thanks for reading :)</p><p></p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>This is Bits &amp; Bolts, a brand new site by Satyamedh Hulyalkar that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is</p>]]></description><link>http://satyamedh.me/coming-soon/</link><guid isPermaLink="false">6628df11d03b8c0e7873014b</guid><category><![CDATA[News]]></category><dc:creator><![CDATA[Satyamedh Hulyalkar]]></dc:creator><pubDate>Wed, 24 Apr 2024 10:29:37 GMT</pubDate><media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://static.ghost.org/v4.0.0/images/feature-image.jpg" alt="Coming soon"><p>This is Bits &amp; Bolts, a brand new site by Satyamedh Hulyalkar that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></content:encoded></item></channel></rss>