<?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: Fine tech suggestions</title>
    <description>The latest articles on DEV Community by Fine tech suggestions (@praveen3601).</description>
    <link>https://dev.to/praveen3601</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F678608%2Fc926f6ee-ee70-4c50-99ee-d67bdf7dd41d.png</url>
      <title>DEV Community: Fine tech suggestions</title>
      <link>https://dev.to/praveen3601</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/praveen3601"/>
    <language>en</language>
    <item>
      <title>𝐖𝐞𝐛 𝐀𝐬𝐬𝐞𝐦𝐛𝐥𝐲 : 𝐑𝐮𝐧 𝐲𝐨𝐮𝐫 𝐂/𝐂++ 𝐜𝐨𝐝𝐞 𝐨𝐧 𝐖𝐞𝐛 𝐛𝐫𝐨𝐰𝐬𝐞𝐫𝐬</title>
      <dc:creator>Fine tech suggestions</dc:creator>
      <pubDate>Tue, 18 Aug 2026 05:57:23 +0000</pubDate>
      <link>https://dev.to/praveen3601/--3l67</link>
      <guid>https://dev.to/praveen3601/--3l67</guid>
      <description>&lt;p&gt;Have you ever wondered what happens when you take lightning-fast C/C++ code and drop it directly into a web browser?&lt;/p&gt;

&lt;p&gt;For decades, the browser was strictly JavaScript's domain. But with WebAssembly (Wasm), that barrier has vanished. Whether you're looking to port legacy code, build high-performance web tools, or run heavy data crunching right at the edge client-side, Wasm opens up a whole new paradigm. &lt;/p&gt;

&lt;p&gt;In this guide, we’ll break down how WebAssembly works under the hood and walk through a simple, step-by-step example of compiling your C/C++ code to run smoothly inside a modern web browser. Let's dive in!  &lt;/p&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;What is Web Assembly(WASM)&lt;/strong&gt; ?
&lt;/h4&gt;

&lt;p&gt;• Low-level assembly like language for the web.&lt;br&gt;
 • Open standard developed by a W3C Community Group.&lt;br&gt;
 • Designed as a complement to JavaScript, not a replacement.&lt;br&gt;
 • Allows to write/port high performance code for the web.&lt;/p&gt;

&lt;p&gt;We believe that soon WebAssembly will be an integral part of every developer's tech stack. Explore more on &lt;a href="https://www.scribd.com/document/1075364430/Web-Assembly-Run-your-C-C-code-on-web-browsers" rel="noopener noreferrer"&gt;https://www.scribd.com/document/1075364430/Web-Assembly-Run-your-C-C-code-on-web-browsers&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cpp</category>
      <category>c</category>
      <category>programming</category>
    </item>
    <item>
      <title>Sentence Transformers for Natural Language Voice Assistants</title>
      <dc:creator>Fine tech suggestions</dc:creator>
      <pubDate>Mon, 10 Nov 2025 13:14:49 +0000</pubDate>
      <link>https://dev.to/praveen3601/sentence-transformers-for-natural-language-voice-assistants-2cal</link>
      <guid>https://dev.to/praveen3601/sentence-transformers-for-natural-language-voice-assistants-2cal</guid>
      <description>&lt;p&gt;The majority of systems in the age of AI voice assistants rely significantly on the cloud for speech recognition, which raises issues with data security, privacy, and the requirement for continuous internet connectivity. AI-powered offline voice assistants are utilized to solve these issues. In automotive systems, where dependable voice control over in-car activities must continue to be available even in locations with spotty cellular coverage, such offline voice assistants are especially important. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background: AI-driven Offline Voice Assistant&lt;/strong&gt;&lt;br&gt;
In our setup, we have a Linux-based Raspberry Pi and an Android-based CAVLI CQS290 EVK. The voice assistant is running on the RPi, and it’s handling the voice input data from the user controls the infotainment system running on the EVK.The voice input is converted to text using the OpenAI Whisper ASR model. Hotspot, airplane mode, Wi-Fi, Bluetooth, lights, and other features are controlled by the voice assistant using the transformed text. &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%2Fgc0ud91d6csj7q4kpbvl.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%2Fgc0ud91d6csj7q4kpbvl.png" alt="AI-driven Offline Voice Control" width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem Study&lt;/strong&gt;&lt;br&gt;
There are several reasons why Automatic Speech Recognition (ASR) may make mistakes. For instance, we often got enable wife, enable life, or just Wi-Fi when we said enable Wi-Fi. As seen in the pseudocode below, we first attempted to solve these problems by employing complex layered IF condition,&lt;/p&gt;

&lt;p&gt;IF response contains "wif" OR "wi-fi" OR "life":&lt;br&gt;
        IF response contains "on" OR "enable":&lt;br&gt;
            CALL set_wifi_state(True)&lt;br&gt;
        ELSE IF response contains "off" OR "disable":&lt;br&gt;
            CALL set_wifi_state(False)&lt;br&gt;
        ELSE:&lt;br&gt;
            PRINT "Unknown audio request: response" .. continues..&lt;/p&gt;

&lt;p&gt;Although this is functional, it lacks elegance and scalability. Rather than being a solution, it is more of a workaround.&lt;/p&gt;

&lt;p&gt;We were also required to support "Natural language commands" in the second iteration of our system. Thus, the Wi-Fi would be activated if a user spoke any of the following. &lt;br&gt;
**Turn on Wi-Fi&lt;/p&gt;

&lt;p&gt;Enable Wi-Fi&lt;/p&gt;

&lt;p&gt;Please turn on the Wi-Fi&lt;/p&gt;

&lt;p&gt;Wi-Fi on&lt;/p&gt;

&lt;p&gt;Wi-Fi enable, please!** &lt;/p&gt;

&lt;p&gt;To do this, we briefly considered using a full-fledged LLM-based agent with tool calling. &lt;/p&gt;

&lt;p&gt;Thus, we were faced with the following issues.&lt;/p&gt;

&lt;p&gt;incorrect identification of terms unique to a given domain.&lt;/p&gt;

&lt;p&gt;Background noise introduces words.&lt;/p&gt;

&lt;p&gt;A human speaker introduces uncertainties.&lt;/p&gt;

&lt;p&gt;commands in natural language.&lt;/p&gt;

&lt;p&gt;The first issue was solved by fine-tuning the model with domain specific terms. (How we did this is discussed in detail in a separate article Lessons from &lt;a href="https://zilogic.com/blog/article-fine-tuning-whisper.html" rel="noopener noreferrer"&gt;Fine-Tuning Whisper for Tamil Voice Commands.)&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution Study&lt;/strong&gt; : &lt;br&gt;
We must comprehend what word embeddings are in order to comprehend how Sentence Transformers operate and how we used them to solve our difficulty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedding Words&lt;/strong&gt;&lt;br&gt;
A word is typically represented in computers as a series of ASCII codes, each of which stands for a character. This is helpful for printing the word, obtaining the word from user input, etc. However, this depiction does not aid in comprehending the word's meaning. Therefore, there is no hint that "dog" and "pup" are comparable in any way, and their ASCII representations are entirely distinct.&lt;/p&gt;

&lt;p&gt;For LLMs to process words, they are represented as token embeddings, which are very similar to word embeddings that we have discussed. These token embeddings can have a dimension in the range 2048 to 12288, which is represented in below format like 2-dimensional building : &lt;br&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%2F7e9w7rynt56rku4yrvic.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%2F7e9w7rynt56rku4yrvic.png" alt="Embedding words" width="621" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sentence transformers&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We now know the fundamentals of word embeddings. Let's attempt to comprehend sentence embeddings. Sentence embeddings are fixed-length vector representations of whole sentences. Even when phrased differently or with minor pronunciation problems, these embeddings are especially helpful for comprehending natural language inputs since they capture the content of a statement.&lt;/p&gt;

&lt;p&gt;In this region, sentences with similar meanings are closer to one another. "On the wifi" and "Enable WAP," for instance, may be closer than "Enable WAP" and "Turn on the Bluetooth." The following diagram uses a two-dimensional sentence embedding to illustrate this concept.&lt;/p&gt;

&lt;p&gt;Explore the complete solution study in this article quickly now - &lt;a href="https://zilogic.com/blog/article-sentence-transformers.html" rel="noopener noreferrer"&gt;article sentence transformer &lt;/a&gt; along our extensive &lt;a href="https://zilogic.com/automotive.html" rel="noopener noreferrer"&gt;automotive software development services&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>discuss</category>
      <category>opensource</category>
      <category>performance</category>
    </item>
    <item>
      <title>Debugging WiFi Router build on RPi with OpenWrt</title>
      <dc:creator>Fine tech suggestions</dc:creator>
      <pubDate>Thu, 06 Nov 2025 11:55:46 +0000</pubDate>
      <link>https://dev.to/praveen3601/debugging-wifi-router-build-on-rpi-with-openwrt-1flm</link>
      <guid>https://dev.to/praveen3601/debugging-wifi-router-build-on-rpi-with-openwrt-1flm</guid>
      <description>&lt;p&gt;In any software project, defects are inevitable and requires debugging to root cause it, and this eventually leads to a fix. The key lies in understanding the issue, analyzing it, and choosing the right approach to resolve it. Debugging issues may seem overwhelming at first, but with a clear understanding of the problem and the right tools, the process becomes more manageable.&lt;/p&gt;

&lt;p&gt;This article explores the debugging sequence for common issues encountered while working with the Linux WiFi stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Issues&lt;/strong&gt;&lt;br&gt;
While developing code or testing a particular feature, various issues may arise, such as:&lt;/p&gt;

&lt;p&gt;Device Not Detected&lt;/p&gt;

&lt;p&gt;Driver Not Loaded&lt;/p&gt;

&lt;p&gt;Process Not Running&lt;/p&gt;

&lt;p&gt;Crashes &amp;amp; Kernel Panics&lt;/p&gt;

&lt;p&gt;Performance Bottlenecks&lt;/p&gt;

&lt;p&gt;Compatibility Issues&lt;br&gt;
Each of these requires different approaches of analysis and debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons from the Field: Debugging WiFi Issues&lt;/strong&gt;&lt;br&gt;
While working with the Openwrt target based on ath12k driver, which supports Qualcomm Wi-Fi 7 (IEEE 802.11be) devices, several challenges were encountered. Here are some key issues and how they were tackled:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crashes and Kernel Panics&lt;/strong&gt; : Misconfigurations, firmware incompatibilities, or unhandled exceptions led to unexpected crashes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Packet Drops and Performance Issues&lt;/strong&gt; : Unstable firmware, hardware limitations caused connectivity problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hostapd and Wpa_supplicant Failures&lt;/strong&gt; : Misconfigured network parameters and hidden driver bugs resulted in failures.&lt;br&gt;
Now, let’s visualize how these issues manifest across different layers of the WiFi stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging Essentials&lt;/strong&gt;: Tracing, Crashes, Network Insights&lt;br&gt;
Linux provides a variety of powerful tools to track down and resolve issues efficiently. Some essential debugging tools which were involved in our analysis:&lt;/p&gt;

&lt;p&gt;Print Statements and Logs: The simplest yet most effective debugging method. Inserting printk (for kernel debugging) or printf statements (for user-space debugging) helps to track the program flow and identify issues.&lt;/p&gt;

&lt;p&gt;GDB (GNU Debugger): A powerful tool for inspecting and controlling program execution, setting breakpoints, and analyzing crashes.&lt;/p&gt;

&lt;p&gt;Tcpdump: A command-line tool for capturing and analyzing network packets, essential for diagnosing network-related issues.&lt;/p&gt;

&lt;p&gt;Wireshark: A graphical tool for deep packet inspection, useful for troubleshooting network communications and protocol-level issues.&lt;br&gt;
**&lt;br&gt;
**&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging through Hostapd and Wpa_supplicant Logs
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
In Openwrt, by default hostapd or wpa_supplicant runs in less verbose mode, while debugging we may need a detailed log. To get the logs, we may need to start the hostapd or wpad in higher verbose mode. We would also like to run the hostapd in foreground to lively watch the logs in console.&lt;/p&gt;

&lt;p&gt;Debugging user-space applications is just the first step. In the upcoming article, we’ll venture into the depths of kernel debugging and unraveling techniques to diagnose and resolve kernel-level issues with precision. For the exciting deep dive on the article, visit this &lt;a href="https://zilogic.com/blog/tutorial-linux-wifi-debugging.html" rel="noopener noreferrer"&gt;https://zilogic.com/blog/tutorial-linux-wifi-debugging.html&lt;/a&gt; &lt;br&gt;
Stay tuned for more updates. &lt;/p&gt;

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