<?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: vmodal_ai</title>
    <description>The latest articles on DEV Community by vmodal_ai (@vmodal_ai).</description>
    <link>https://dev.to/vmodal_ai</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%2F4052446%2F2fcb63ba-7be8-4ffd-93ce-f4f00223ddfa.jpeg</url>
      <title>DEV Community: vmodal_ai</title>
      <link>https://dev.to/vmodal_ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vmodal_ai"/>
    <language>en</language>
    <item>
      <title>Flutter + Physical AI: Release Checklist for Performance, Safety, and Reliability</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:24 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-physical-ai-release-checklist-for-performance-safety-and-reliability-1o0c</link>
      <guid>https://dev.to/vmodal_ai/flutter-physical-ai-release-checklist-for-performance-safety-and-reliability-1o0c</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + Physical AI: Release Checklist for Performance, Safety, and Reliability
&lt;/h1&gt;

&lt;p&gt;A production release connecting Flutter to smart glasses, Jetson, ROS 2, and AI models needs more than a smooth demo. Review latency, stale data, degraded modes, privacy, and recovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate the performance envelope
&lt;/h2&gt;

&lt;p&gt;Run sustained tests on supported devices. Record p95/p99 frame timings, source-to-display age, memory growth, dropped updates, and reconnect time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test degraded operation
&lt;/h2&gt;

&lt;p&gt;Cover network loss, gateway restarts, unavailable model capabilities, permission revocation, low memory, thermal throttling, and stale telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify command semantics
&lt;/h2&gt;

&lt;p&gt;Ensure important commands have IDs, authorization, acknowledgement, timeout, and reconciliation behavior. Distinguish unknown outcomes from confirmed failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review observability and privacy
&lt;/h2&gt;

&lt;p&gt;Ensure logs are useful without exposing raw media, secrets, or unnecessary personal data. Correlate client and gateway diagnostics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship with rollback criteria
&lt;/h2&gt;

&lt;p&gt;Document supported device/model combinations, performance baseline, and thresholds that trigger rollback. Monitor regressions after rollout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;releaseChecks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
  &lt;span class="s"&gt;'Profile-mode performance tested on target hardware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Latency and telemetry freshness within budget'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Queues bounded and stale updates handled'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Commands acknowledged and reconciled safely'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Reconnect and degraded modes tested'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Logs reviewed for privacy and secrets'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Model/API capability matrix verified'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Rollback and monitoring thresholds documented'&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>physicalai</category>
      <category>robotics</category>
      <category>release</category>
    </item>
    <item>
      <title>Flutter Robotics Alerts: Priority Queues and Notification Flood Control</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:22 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-robotics-alerts-priority-queues-and-notification-flood-control-5293</link>
      <guid>https://dev.to/vmodal_ai/flutter-robotics-alerts-priority-queues-and-notification-flood-control-5293</guid>
      <description>&lt;h1&gt;
  
  
  Flutter Robotics Alerts: Priority Queues and Notification Flood Control
&lt;/h1&gt;

&lt;p&gt;A robot can emit hundreds of status changes during a fault. If every event triggers a toast, vibration, or full-screen rebuild, the interface can obscure the alert that matters most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define severity and deduplication keys
&lt;/h2&gt;

&lt;p&gt;Classify alerts by severity, source, and incident identity. Repeated reports for the same active fault should update one incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate alert state from transient UI
&lt;/h2&gt;

&lt;p&gt;Keep a durable incident list in application state. Snackbars and banners should be secondary cues, not the only record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rate-limit repeated notifications
&lt;/h2&gt;

&lt;p&gt;Group repetitive low-priority events. Critical alerts need a separately defined escalation policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the UI responsive
&lt;/h2&gt;

&lt;p&gt;Batch incident updates, cap queues, and avoid rebuilding the entire fleet screen for each message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify priority behavior
&lt;/h2&gt;

&lt;p&gt;Replay alert storms and confirm critical incidents remain visible while duplicates are grouped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AlertKey&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;AlertKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;robotId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;robotId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="kd"&gt;operator&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="n"&gt;other&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;AlertKey&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;robotId&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;robotId&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;hashCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;robotId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>robotics</category>
      <category>alerts</category>
      <category>performance</category>
    </item>
    <item>
      <title>Flutter + Jetson: Network-Aware Update Rates for Robot Dashboards</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:20 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-jetson-network-aware-update-rates-for-robot-dashboards-4c4m</link>
      <guid>https://dev.to/vmodal_ai/flutter-jetson-network-aware-update-rates-for-robot-dashboards-4c4m</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + Jetson: Network-Aware Update Rates for Robot Dashboards
&lt;/h1&gt;

&lt;p&gt;A dashboard can become unusable when the network degrades and the client keeps requesting full-rate updates. Adapt update frequency by priority while preserving clear connection-health signals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure connection quality
&lt;/h2&gt;

&lt;p&gt;Track round-trip time, packet loss where measurable, reconnect frequency, and message age. One failed request does not prove a permanently poor link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assign priority classes
&lt;/h2&gt;

&lt;p&gt;Commands and alarms remain responsive. High-rate pose/chart data can be sampled down; bulky diagnostics can be paused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apply hysteresis and backoff
&lt;/h2&gt;

&lt;p&gt;Use distinct thresholds for entering and leaving reduced mode, and exponential backoff with jitter for reconnects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let the gateway aggregate
&lt;/h2&gt;

&lt;p&gt;A Jetson gateway can publish summaries or adjust telemetry rates before data reaches Flutter. Make supported rates explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve operator trust
&lt;/h2&gt;

&lt;p&gt;Show when values are sampled, delayed, or stale. Do not imply full-rate real-time coverage in reduced mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="nf"&gt;retryDelay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;baseMs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;maxMs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;exponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;baseMs&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;exponent&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;baseMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;maxMs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;milliseconds:&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Add random jitter in production to prevent synchronized retry storms.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>jetson</category>
      <category>networking</category>
      <category>performance</category>
    </item>
    <item>
      <title>Smart Glasses + Flutter: Privacy-Preserving Telemetry That Saves Battery</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:19 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/smart-glasses-flutter-privacy-preserving-telemetry-that-saves-battery-1ene</link>
      <guid>https://dev.to/vmodal_ai/smart-glasses-flutter-privacy-preserving-telemetry-that-saves-battery-1ene</guid>
      <description>&lt;h1&gt;
  
  
  Smart Glasses + Flutter: Privacy-Preserving Telemetry That Saves Battery
&lt;/h1&gt;

&lt;p&gt;Privacy-conscious data handling can also reduce bandwidth, storage, and processing cost. Send only what a feature needs, keep retention explicit, and avoid collecting raw streams merely because they are available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimize data at collection
&lt;/h2&gt;

&lt;p&gt;Prefer derived events or coarse summaries when raw audio, video, location, or motion samples are unnecessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make sensing visible
&lt;/h2&gt;

&lt;p&gt;Clearly indicate when sensor-dependent features are active. Follow platform permission and background behavior requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep retention bounded
&lt;/h2&gt;

&lt;p&gt;Define transient, session-scoped, and persisted data. Apply size/time limits and never log raw media or tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redact exported diagnostics
&lt;/h2&gt;

&lt;p&gt;Use structured logging with allow-listed fields. Strip personal identifiers and sensitive payloads before logs leave the device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test permission changes
&lt;/h2&gt;

&lt;p&gt;Verify revoking permission stops the pipeline, clears relevant buffers, and does not silently resume collection on reconnect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TelemetryPolicy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;TelemetryPolicy&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;includeRawSamples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;maxRetentionMinutes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;redactIdentifiers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;includeRawSamples&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxRetentionMinutes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;redactIdentifiers&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>smartglasses</category>
      <category>privacy</category>
      <category>performance</category>
    </item>
    <item>
      <title>CI Performance Gates for Flutter Physical AI Companion Apps</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:17 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/ci-performance-gates-for-flutter-physical-ai-companion-apps-2m5j</link>
      <guid>https://dev.to/vmodal_ai/ci-performance-gates-for-flutter-physical-ai-companion-apps-2m5j</guid>
      <description>&lt;h1&gt;
  
  
  CI Performance Gates for Flutter Physical AI Companion Apps
&lt;/h1&gt;

&lt;p&gt;Performance regressions can arrive through unrelated changes: a new chart, extra JSON parsing, larger images, or more frequent state emissions. Automated gates catch some before release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a stable test setup
&lt;/h2&gt;

&lt;p&gt;Use profile or release-like builds. Keep device, OS, power state, and workload consistent across comparisons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gate product-relevant metrics
&lt;/h2&gt;

&lt;p&gt;Track frame build/raster time, startup, memory growth, decode time, queue depth, and telemetry age. Avoid one threshold for every device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Store a baseline
&lt;/h2&gt;

&lt;p&gt;Record commit, dependency lockfile, test trace, device details, and metric definitions. Compare repeated runs rather than trusting one noisy sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep tests deterministic
&lt;/h2&gt;

&lt;p&gt;Replay saved telemetry and mock network timing for UI tests. Use hardware-in-the-loop tests for real camera, gateway, inference, and robot paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make failures actionable
&lt;/h2&gt;

&lt;p&gt;Publish slow stage, affected screen, trace ID, and before/after metrics so a failure points toward a cause.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PerformanceBudget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;PerformanceBudget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;maxP95FrameBuildMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;maxP95DecodeMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;maxP95TelemetryAgeMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;maxP95FrameBuildMs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;maxP95DecodeMs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;maxP95TelemetryAgeMs&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>ci</category>
      <category>performance</category>
      <category>robotics</category>
    </item>
    <item>
      <title>Flutter + ROS 2 Commands: Low-Latency UI With Explicit Acknowledgements</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:51:15 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-ros-2-commands-low-latency-ui-with-explicit-acknowledgements-1nbn</link>
      <guid>https://dev.to/vmodal_ai/flutter-ros-2-commands-low-latency-ui-with-explicit-acknowledgements-1nbn</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + ROS 2 Commands: Low-Latency UI With Explicit Acknowledgements
&lt;/h1&gt;

&lt;p&gt;Operator commands should not be treated like replaceable telemetry. A responsive button is only one part of the system; the client needs to distinguish submitted, accepted, executing, completed, and rejected states.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model the command lifecycle
&lt;/h2&gt;

&lt;p&gt;Assign a unique command ID and expose explicit lifecycle states. Do not show success merely because a request was written to a socket.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep commands separate from telemetry
&lt;/h2&gt;

&lt;p&gt;Do not queue critical commands behind camera metadata or diagnostics. Use a dedicated path with authentication, authorization, timeouts, and rate limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prevent duplicate actions
&lt;/h2&gt;

&lt;p&gt;Disable or debounce controls while pending where appropriate, but make the server idempotent using command IDs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show uncertainty honestly
&lt;/h2&gt;

&lt;p&gt;If the connection drops after submission, show outcome unknown until reconciled. Do not blindly resend a non-idempotent command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test delay and disconnection
&lt;/h2&gt;

&lt;p&gt;Inject slow acknowledgements, duplicate responses, gateway restarts, and reordered events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;CommandPhase&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;idle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;submitting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accepted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;executing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rejected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;outcomeUnknown&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CommandStatus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;CommandStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;CommandPhase&lt;/span&gt; &lt;span class="n"&gt;phase&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>ros2</category>
      <category>robotics</category>
      <category>safety</category>
    </item>
    <item>
      <title>Flutter + TensorRT/ONNX Edge Inference: Keep Tensor Work Outside Widgets</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:44 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-tensorrtonnx-edge-inference-keep-tensor-work-outside-widgets-2hna</link>
      <guid>https://dev.to/vmodal_ai/flutter-tensorrtonnx-edge-inference-keep-tensor-work-outside-widgets-2hna</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + TensorRT/ONNX Edge Inference: Keep Tensor Work Outside Widgets
&lt;/h1&gt;

&lt;p&gt;Flutter is suited to presenting model outputs and operator workflows. Heavy tensor execution, GPU memory management, and device-specific inference are usually better isolated behind a native or network service boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define a narrow inference contract
&lt;/h2&gt;

&lt;p&gt;Expose inputs and outputs in a documented schema. Keep tensor layouts, accelerator initialization, and backend-specific errors inside the inference service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimize copies across boundaries
&lt;/h2&gt;

&lt;p&gt;Large image/tensor payloads incur costly conversions. Use supported streaming or shared-buffer approaches where practical, and measure copy cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Return useful metadata
&lt;/h2&gt;

&lt;p&gt;Include model version, source timestamp, inference duration, confidence format, and error category. Avoid debug tensors in normal production responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep inference asynchronous
&lt;/h2&gt;

&lt;p&gt;Do not block the main isolate. Use streams, futures, or a dedicated service connection and keep the UI responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark realistic workloads
&lt;/h2&gt;

&lt;p&gt;Measure cold start, warm inference, peak memory, queue depth, and sustained throughput on the actual target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InferenceResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;InferenceResult&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;modelVersion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sourceSequence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;inferenceDurationMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;modelVersion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;sourceSequence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;inferenceDurationMs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;labels&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>nvidia</category>
      <category>onnx</category>
      <category>performance</category>
    </item>
    <item>
      <title>Smart Glasses Companion Apps: Sensor Fusion Without Excessive Flutter Work</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:42 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/smart-glasses-companion-apps-sensor-fusion-without-excessive-flutter-work-obo</link>
      <guid>https://dev.to/vmodal_ai/smart-glasses-companion-apps-sensor-fusion-without-excessive-flutter-work-obo</guid>
      <description>&lt;h1&gt;
  
  
  Smart Glasses Companion Apps: Sensor Fusion Without Excessive Flutter Work
&lt;/h1&gt;

&lt;p&gt;Wearable experiences may combine motion, location, camera metadata, and device status. Processing every sample in the widget layer wastes resources and can make the interface noisy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample for the feature
&lt;/h2&gt;

&lt;p&gt;A heading indicator, status panel, and motion classifier need different sampling rates. Use the lowest rate that meets the product requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fuse signals near the source
&lt;/h2&gt;

&lt;p&gt;Where supported, combine high-rate sensor data in a native or edge service and send compact derived state to Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smooth with bounded windows
&lt;/h2&gt;

&lt;p&gt;Use a small rolling window or defined filter. Bound memory and reset state when permissions, connection, or calibration changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make privacy explicit
&lt;/h2&gt;

&lt;p&gt;Request sensor access only for features that need it, show sensing state clearly, and avoid storing raw streams by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure power and responsiveness
&lt;/h2&gt;

&lt;p&gt;Test sampling rate, screen-on duration, reconnect behavior, and thermal impact on target hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RollingAverage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;RollingAverage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;removeAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;
      &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
      &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;_values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>smartglasses</category>
      <category>sensors</category>
      <category>performance</category>
    </item>
    <item>
      <title>Flutter + NVIDIA Models: Runtime Capability Negotiation</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:40 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-nvidia-models-runtime-capability-negotiation-344m</link>
      <guid>https://dev.to/vmodal_ai/flutter-nvidia-models-runtime-capability-negotiation-344m</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + NVIDIA Models: Runtime Capability Negotiation
&lt;/h1&gt;

&lt;p&gt;Edge deployments evolve: Jetson devices may run different models, accelerators, resolutions, or inference backends after updates. A capability endpoint lets Flutter adapt without hard-coding one deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expose supported capabilities
&lt;/h2&gt;

&lt;p&gt;Return model identifier/version, supported input sizes, output types, maximum stream rate, and feature flags. Avoid secrets and unnecessary host details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Negotiate at session start
&lt;/h2&gt;

&lt;p&gt;Flutter requests needed features and the gateway returns the supported subset. Show a clear degraded mode if a capability is missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Version the contract
&lt;/h2&gt;

&lt;p&gt;Use a schema version and define unknown-field behavior. Keep model version separate from API version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle updates safely
&lt;/h2&gt;

&lt;p&gt;Refresh capabilities after reconnect or a service-change event. Avoid aggressive polling and unsafe mid-task transitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test a capability matrix
&lt;/h2&gt;

&lt;p&gt;Test supported model versions, hardware configurations, optional outputs, and a deliberately reduced capability profile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EdgeCapabilities&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeCapabilities&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;modelVersion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;supportsDepth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;maxPreviewFps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;modelVersion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;supportsDepth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxPreviewFps&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>nvidia</category>
      <category>ai</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Flutter + Jetson Video: Decode Backpressure and Adaptive Stream Quality</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:38 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-jetson-video-decode-backpressure-and-adaptive-stream-quality-2a49</link>
      <guid>https://dev.to/vmodal_ai/flutter-jetson-video-decode-backpressure-and-adaptive-stream-quality-2a49</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + Jetson Video: Decode Backpressure and Adaptive Stream Quality
&lt;/h1&gt;

&lt;p&gt;A live stream can overwhelm a mobile client when decode, texture upload, and display cannot keep pace. The solution is end-to-end backpressure, not merely a smaller widget tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure each stage
&lt;/h2&gt;

&lt;p&gt;Track bitrate, packet loss, jitter, decode time, texture upload cost, and displayed-frame age. Distinguish network delay from client decode delay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Negotiate quality at the source
&lt;/h2&gt;

&lt;p&gt;If supported, let the client request lower resolution or frame rate based on sustained measurements, not a single spike.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep control traffic independent
&lt;/h2&gt;

&lt;p&gt;Video congestion should not block commands, health messages, or critical notifications. Use separate channels and priorities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bound jitter buffering
&lt;/h2&gt;

&lt;p&gt;A larger buffer smooths jitter but increases latency. Set a maximum delay that fits the use case and expose stream health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate sustained operation
&lt;/h2&gt;

&lt;p&gt;Test roaming, weak signal, thermal throttling, reconnects, and long playback. Check for memory growth and old frames after recovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StreamHealth&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;StreamHealth&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;frameAgeMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decodeMs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;droppedFrames&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;frameAgeMs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;decodeMs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;droppedFrames&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;shouldRequestLowerQuality&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="n"&gt;frameAgeMs&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;decodeMs&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;droppedFrames&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>jetson</category>
      <category>video</category>
      <category>performance</category>
    </item>
    <item>
      <title>Flutter Robot Maps: Rendering Large Occupancy Grids Efficiently</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:37 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-robot-maps-rendering-large-occupancy-grids-efficiently-3a3b</link>
      <guid>https://dev.to/vmodal_ai/flutter-robot-maps-rendering-large-occupancy-grids-efficiently-3a3b</guid>
      <description>&lt;h1&gt;
  
  
  Flutter Robot Maps: Rendering Large Occupancy Grids Efficiently
&lt;/h1&gt;

&lt;p&gt;Robot maps can contain thousands or millions of cells. Building one widget per cell is usually the wrong abstraction; use a rendering strategy that matches scale and update patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate map data from UI state
&lt;/h2&gt;

&lt;p&gt;Store dimensions, resolution, origin, and cells in a model. Apply deltas to the model and notify the renderer only when visible regions change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a rendering strategy
&lt;/h2&gt;

&lt;p&gt;CustomPainter can suit moderate grids with caching and repaint boundaries. Large, frequently changing maps may need tile caching or a native/GPU-backed renderer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid rebuilding every cell
&lt;/h2&gt;

&lt;p&gt;Batch cells into rows, tiles, or layers. Cache static geometry and invalidate changed regions where supported.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decouple map and telemetry refresh
&lt;/h2&gt;

&lt;p&gt;Robot pose may update often while occupancy maps change rarely. Render layers at appropriate cadences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark zoom and pan
&lt;/h2&gt;

&lt;p&gt;Test representative map sizes, pixel ratios, zooming, and simultaneous telemetry. Track raster time, UI time, and memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MapViewportPainter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;CustomPainter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;MapViewportPainter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mapRevision&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;mapRevision&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;paint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Canvas&lt;/span&gt; &lt;span class="n"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Draw cached tiles or batched geometry here.&lt;/span&gt;
    &lt;span class="c1"&gt;// Avoid allocating one Paint or widget per occupancy cell.&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;shouldRepaint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;covariant&lt;/span&gt; &lt;span class="n"&gt;MapViewportPainter&lt;/span&gt; &lt;span class="n"&gt;oldDelegate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="n"&gt;oldDelegate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mapRevision&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;mapRevision&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>robotics</category>
      <category>maps</category>
      <category>performance</category>
    </item>
    <item>
      <title>Flutter + ROS 2: Correlating Traces Across UI, Gateway, and Robot</title>
      <dc:creator>vmodal_ai</dc:creator>
      <pubDate>Thu, 15 Oct 2026 20:50:35 +0000</pubDate>
      <link>https://dev.to/vmodal_ai/flutter-ros-2-correlating-traces-across-ui-gateway-and-robot-4p81</link>
      <guid>https://dev.to/vmodal_ai/flutter-ros-2-correlating-traces-across-ui-gateway-and-robot-4p81</guid>
      <description>&lt;h1&gt;
  
  
  Flutter + ROS 2: Correlating Traces Across UI, Gateway, and Robot
&lt;/h1&gt;

&lt;p&gt;A slow dashboard can originate in the sensor, ROS 2 transport, gateway, network, decoder, state management, or rendering. Correlated traces make those bottlenecks distinguishable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate correlation identifiers
&lt;/h2&gt;

&lt;p&gt;Carry a trace ID through gateway requests and robot-side events. For periodic telemetry, use a stream ID and sequence number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record stage boundaries
&lt;/h2&gt;

&lt;p&gt;Measure receive, decode, validation, state publication, and render scheduling separately. Message receipt is not the same as frame presentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use clock-safe measurements
&lt;/h2&gt;

&lt;p&gt;Use monotonic durations within a process. Across hosts, synchronize clocks and record uncertainty, or compare independently measured segments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep instrumentation affordable
&lt;/h2&gt;

&lt;p&gt;Sample high-volume traces and avoid logging complete sensor payloads. Include enough metadata to reproduce behavior without exposing private media or location.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn traces into regression tests
&lt;/h2&gt;

&lt;p&gt;Replay representative traces and compare p95 stage duration, queue growth, stale-data frequency, and dropped messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TraceContext&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;TraceContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;traceId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;traceId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;stage&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;h2&gt;
  
  
  Performance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure p95/p99 behavior on target hardware, not only a desktop simulator.&lt;/li&gt;
&lt;li&gt;Bound queues and buffers; define what may be coalesced or dropped.&lt;/li&gt;
&lt;li&gt;Keep heavy parsing, image processing, and inference away from the Flutter UI thread.&lt;/li&gt;
&lt;li&gt;Track source timestamps, sequence numbers, stale-data rate, and dropped updates.&lt;/li&gt;
&lt;li&gt;Test network degradation, reconnects, sustained operation, and resource pressure.&lt;/li&gt;
&lt;li&gt;Keep control commands and critical alerts separate from replaceable telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="http://www.v-modal.com" rel="noopener noreferrer"&gt;www.v-modal.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Flutter: &lt;a href="https://github.com/v-modal/vmodal_sdk_flutter" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Android: &lt;a href="https://github.com/v-modal/vmodal_sdk_android" rel="noopener noreferrer"&gt;https://github.com/v-modal/vmodal_sdk_android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/K72z28KUx" rel="noopener noreferrer"&gt;https://discord.gg/K72z28KUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit: &lt;a href="https://www.reddit.com/r/v_modal/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/v_modal/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>ros2</category>
      <category>observability</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
