<?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: Serguei Caraguay</title>
    <description>The latest articles on DEV Community by Serguei Caraguay (@serguei_caraguay_ea67feee).</description>
    <link>https://dev.to/serguei_caraguay_ea67feee</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%2F4055332%2F68fe6e44-b037-4a77-8d2c-1277aba0df79.jpg</url>
      <title>DEV Community: Serguei Caraguay</title>
      <link>https://dev.to/serguei_caraguay_ea67feee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/serguei_caraguay_ea67feee"/>
    <language>en</language>
    <item>
      <title>Resolving Bug #24040 in Zulip: Unlocking the UI During Network Failures</title>
      <dc:creator>Serguei Caraguay</dc:creator>
      <pubDate>Tue, 11 Aug 2026 19:42:39 +0000</pubDate>
      <link>https://dev.to/serguei_caraguay_ea67feee/resolving-bug-24040-in-zulip-unlocking-the-ui-during-network-failures-2n9</link>
      <guid>https://dev.to/serguei_caraguay_ea67feee/resolving-bug-24040-in-zulip-unlocking-the-ui-during-network-failures-2n9</guid>
      <description>&lt;p&gt;This article documents the technical audit and the implemented solution to resolve issue #24040 in the &lt;strong&gt;Zulip&lt;/strong&gt; repository. The primary objective was to correct a critical state-handling flaw within the message composition module (&lt;code&gt;compose&lt;/code&gt;), where a network failure left the send button and the loading spinner permanently frozen.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bug
&lt;/h2&gt;

&lt;p&gt;During unstable or interrupted network conditions in the Zulip repository, a critical state-handling flaw was identified in the message composition module, linked to issue #24040. When a message failed to send due to a connection drop, the visual loading indicator (spinner) and the interface controls remained permanently locked. Although an error banner was successfully generated, the interface did not recover its operational state, preventing the user from seamlessly retrying the action.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;After auditing the event loops and the network layer between &lt;code&gt;transmit.ts&lt;/code&gt; and &lt;code&gt;compose.ts&lt;/code&gt;, the root cause was located: the instruction designed to hide the loading indicator (&lt;code&gt;compose_ui.hide_compose_spinner()&lt;/code&gt;) was strictly isolated within the &lt;code&gt;locally_echoed&lt;/code&gt; conditional block, preventing its execution under other network error paths.&lt;/p&gt;

&lt;p&gt;The refactoring consisted of extracting this instruction and relocating it absolutely at the beginning of the error handler, guaranteeing that the interface is unlocked and regains operability in the face of any network interruption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Refactoring and Code Optimization
&lt;/h2&gt;

&lt;p&gt;Below is the exact snippet where the intervention was made within the &lt;code&gt;web/src/compose.ts&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before (Restrictive conditional logic):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
if (locally_echoed) {
    // ... (internal block logic)
    compose_ui.hide_compose_spinner();
}

compose_ui.hide_compose_spinner();
if (locally_echoed) {
    // ... (internal block logic without visual interruptions)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Improvements
&lt;/h2&gt;

&lt;p&gt;During the intervention, not only was the main interface instruction relocated, but Clean Code principles were also applied. Seven lines of dead code and redundant comments that had lost their logical validity within the original block were removed, resulting in a final commit of 1 insertion and 7 deletions.&lt;/p&gt;

&lt;p&gt;The technical approach prioritized the separation of concerns: it was ensured that the failure handler in the network layer unconditionally and immediately released the user interface in the event of any exception, subsequently proceeding to evaluate secondary conditional states (such as the local echo of the message).&lt;/p&gt;

&lt;h2&gt;
  
  
  AI-Assisted Diagnostic Methodology
&lt;/h2&gt;

&lt;p&gt;For the diagnosis and resolution of this issue, Google AI was employed as a code review and methodological structuring assistant. Through its use, the execution tree was traced from the network layer (transmit.ts) to the user interface (compose.ts), efficiently isolating the logical flaw. Furthermore, the tool was utilized to audit strict compliance with the open-source repository's contribution guidelines and to apply Clean Code principles during the refactoring process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing &amp;amp; Validation
&lt;/h2&gt;

&lt;p&gt;The robustness of the modified code was verified through the project's official Continuous Integration (CI/CD) system. The 12 required automated tests were successfully passed, which included security scans and cross-validation in multiple Debian environments and Python versions (3.10 to 3.13), achieving a 0% failure rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration &amp;amp; Pipeline Validation
&lt;/h2&gt;

&lt;p&gt;The official record of the delivered and validated solution can be found at the following link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web/src/compose.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy4ecdr91kb4q3a9uxqo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy4ecdr91kb4q3a9uxqo.png" alt=" " width="799" height="394"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooeapcixqbdhx8acyfk9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fooeapcixqbdhx8acyfk9.png" alt=" " width="799" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The refactored logic was subjected to the project's rigorous Continuous Integration (CI/CD) pipeline. The solution successfully passed all automated checks, including environment builds across multiple Debian and Ubuntu distributions, confirming that the UI optimization does not introduce regressions or memory leaks within the application's infrastructure.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
    </item>
    <item>
      <title>How I’m Building English Coach Pro: Designing Custom Language Model Environments for EdTech</title>
      <dc:creator>Serguei Caraguay</dc:creator>
      <pubDate>Thu, 30 Jul 2026 16:39:04 +0000</pubDate>
      <link>https://dev.to/serguei_caraguay_ea67feee/how-im-building-english-coach-pro-designing-custom-language-model-environments-for-edtech-2nig</link>
      <guid>https://dev.to/serguei_caraguay_ea67feee/how-im-building-english-coach-pro-designing-custom-language-model-environments-for-edtech-2nig</guid>
      <description>&lt;p&gt;Building personalized language learning tools requires more than just calling a standard LLM API—it demands tailored Language Model (LM) environments engineered to guide, correct, and engage learners effectively. In this post, I dive into the development of English Coach Pro, an EdTech initiative focused on creating interactive, context-aware AI coaching. I explore the core architectural decisions and environment setups needed to transform general-purpose LLMs into structured, pedagogical assistants.&lt;/p&gt;

&lt;p&gt;From setting up conversational guardrails to managing state and integrating Cloud workflows, I share the practical lessons learned while building this stack. Whether you are curious about EdTech innovations, LLM orchestration, or scaling AI applications, this breakdown offers a hands-on look at how custom LM environments can reshape digital learning.&lt;br&gt;
&lt;a href="https://asacademic.com/english-coach/" rel="noopener noreferrer"&gt;https://asacademic.com/english-coach/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
