<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xml:lang="en" xml:base="https://vincevarga.dev/">
    <title>Vince Varga</title>
    <subtitle type="html"><![CDATA[Hi, I'm Vince Varga, software engineer. Currently building Flutter mobile apps and tinkering with Rust.]]></subtitle>
    <link href="/" rel="alternate" type="text/html" title="html" />
    <link href="/rss.xml" rel="alternate" type="application/rss+xml" title="rss" />
    <link href="/manifest.webmanifest" rel="alternate" type="application/manifest+json" title="manifest" />
    <link href="/atom.xml" rel="self" type="text/xml" title="atom" />
    <link href="/feed.json" rel="alternate" type="application/feed+json" title="jsonfeed" />
    <link href="/index.json" rel="alternate" type="application/json" title="json" />
    <link href="/humans.txt" rel="alternate" type="text/plain" title="humanstxt" />
    <icon>https://vincevarga.dev/img/open-graph-logo_hu_1978870e36bf97f6.png</icon>
    <logo>https://vincevarga.dev/img/open-graph-logo_hu_1978870e36bf97f6.png</logo>
    <author>
        <name>Vince Varga</name>
        <email>vince@vincevarga.dev</email>
    </author>
    <generator uri="https://gohugo.io" version="0.147.9">Hugo</generator>
    <updated>2026-01-06T00:00:00Z</updated>
    <id>urn:uuid:484fe0cb-0a3c-5a93-095c-fb110fa58f93</id>
    <entry>
        
        <category term="posts" />
        
            
            <category term="Rust" x="y" />
            
        
            
            <category term="Webassembly" x="y" />
            
        
            
            <category term="Wasm" x="y" />
            
        
            
            <category term="Web" x="y" />
            
        
            
            <category term="Tutorial" x="y" />
            
        
        <link rel="alternate" type="type/html" href="https://vincevarga.dev/posts/ftextarea/?utm_source=atom_feed" />
        <title type="html"><![CDATA[Building ftextarea: A Vanilla Rust + WebAssembly Textarea App]]></title>
        
        
        
            <link href="https://vincevarga.dev/posts/getting-started-with-rust-async/?utm_source=atom_feed" rel="related" type="text/html" title="Getting Started with Rust Async" />
        
            <link href="https://vincevarga.dev/posts/rust-error-handling-patterns/?utm_source=atom_feed" rel="related" type="text/html" title="Rust Error Handling Patterns" />
        
        <published>2026-01-06T00:00:00Z</published>
        <updated>2026-01-06T00:00:00Z</updated>
        <id>urn:uuid:19217e21-7e98-537e-6920-022caf0dcce1</id>
        
        <summary type="html"><![CDATA[<p>I wanted a simple textarea where I could paste links and jot down quick notes. No login, no cloud sync, no fancy formatting — just a textarea that saves to localStorage. Most existing tools are overkill for this use case.</p>
<p>So I built <a href="https://ftextarea.vincevarga.dev"><strong>ftextarea</strong></a> — and used it as an excuse to learn Rust + WebAssembly without frameworks.</p>
<p><strong><a href="https://ftextarea.vincevarga.dev">Try the live app →</a></strong></p>
<p><strong><a href="https://github.com/vincevargadev/ftextarea">View the source code →</a></strong></p>
<h2 id="the-goal" class="heading-anchor">The Goal<a href="#the-goal" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Build a static web page with:</p>]]></summary>
    </entry>
    <entry>
        
        <category term="posts" />
        
        <link rel="alternate" type="type/html" href="https://vincevarga.dev/posts/2026-new-years-resolutions/?utm_source=atom_feed" />
        <title type="html"><![CDATA[My 2026 New Year's Resolutions]]></title>
        
        
        
        <published>2026-01-01T00:00:00Z</published>
        <updated>2026-01-02T00:00:00Z</updated>
        <id>urn:uuid:5a8b3596-0e1d-5837-290e-aa3ca514a6aa</id>
        
        <summary type="html"><![CDATA[<p>Here&rsquo;s what I&rsquo;m aiming for in 2026: health and fitness, coding, learning, and writing.</p>
<p>This list focuses on side projects and learning goals, I&rsquo;m keeping personal and work-related resolutions private.</p>
<p>Each goal below includes a measurable target, the bigger picture behind it, and why it matters to me.</p>
<p>I&rsquo;ll update this post throughout the year with progress notes under each goal. Check back to see how it&rsquo;s going.</p>
<h1 id="health--fitness" class="heading-anchor">Health &amp; Fitness<a href="#health--fitness" class="anchor-link" aria-hidden="true">#</a>
</h1>

<h2 id="stay-in-ketosis-for-30-days-straight" class="heading-anchor">Stay in ketosis for 30 days straight<a href="#stay-in-ketosis-for-30-days-straight" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>I&rsquo;ve read great things about keto for general health and weight management. I want to experience what ketosis actually feels like and figure out what it takes to get there. The 30-day target forces me to find a sustainable approach: simple recipes that work with a full-time job and a family at home.</p>]]></summary>
    </entry>
    <entry>
        
        <category term="posts" />
        
            
            <category term="Rust" x="y" />
            
        
            
            <category term="Async" x="y" />
            
        
            
            <category term="Placeholder" x="y" />
            
        
        <link rel="alternate" type="type/html" href="https://vincevarga.dev/posts/getting-started-with-rust-async/?utm_source=atom_feed" />
        <title type="html"><![CDATA[Getting Started with Rust Async]]></title>
        
        
        
            <link href="https://vincevarga.dev/posts/ftextarea/?utm_source=atom_feed" rel="related" type="text/html" title="Building ftextarea: A Vanilla Rust &#43; WebAssembly Textarea App" />
        
            <link href="https://vincevarga.dev/posts/flutter-state-management-tips/?utm_source=atom_feed" rel="related" type="text/html" title="Flutter State Management Tips" />
        
            <link href="https://vincevarga.dev/posts/rust-error-handling-patterns/?utm_source=atom_feed" rel="related" type="text/html" title="Rust Error Handling Patterns" />
        
        <published>2025-12-28T00:00:00Z</published>
        <updated>2025-12-28T00:00:00Z</updated>
        <id>urn:uuid:2094b4d5-5e95-5aa3-c9e4-c5096554134f</id>
        
        <summary type="html"><![CDATA[<blockquote>
<p>⚠️ <strong>PLACEHOLDER CONTENT</strong>: This is a fake blog post with dummy content for demonstration purposes only.</p></blockquote>
<h2 id="introduction" class="heading-anchor">Introduction<a href="#introduction" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Rust&rsquo;s async/await syntax makes writing asynchronous code feel almost synchronous. Here&rsquo;s a quick look at how it works.</p>
<h2 id="basic-example" class="heading-anchor">Basic Example<a href="#basic-example" class="anchor-link" aria-hidden="true">#</a>
</h2>

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">tokio</span>::<span class="n">time</span>::<span class="p">{</span><span class="n">sleep</span><span class="p">,</span><span class="w"> </span><span class="n">Duration</span><span class="p">};</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">fetch_data</span><span class="p">(</span><span class="n">id</span>: <span class="kt">u32</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">String</span> <span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c1">// Simulate network delay
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w">    </span><span class="n">sleep</span><span class="p">(</span><span class="n">Duration</span>::<span class="n">from_millis</span><span class="p">(</span><span class="mi">100</span><span class="p">)).</span><span class="k">await</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="fm">format!</span><span class="p">(</span><span class="s">&#34;Data for item </span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">id</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[tokio::main]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kd">let</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch_data</span><span class="p">(</span><span class="mi">42</span><span class="p">).</span><span class="k">await</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;</span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><h2 id="spawning-concurrent-tasks" class="heading-anchor">Spawning Concurrent Tasks<a href="#spawning-concurrent-tasks" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>You can run multiple futures concurrently with <code>tokio::join!</code>:</p>]]></summary>
    </entry>
    <entry>
        
        <category term="posts" />
        
            
            <category term="Flutter" x="y" />
            
        
            
            <category term="Dart" x="y" />
            
        
            
            <category term="Placeholder" x="y" />
            
        
        <link rel="alternate" type="type/html" href="https://vincevarga.dev/posts/flutter-state-management-tips/?utm_source=atom_feed" />
        <title type="html"><![CDATA[Flutter State Management Tips]]></title>
        
        
        
            <link href="https://vincevarga.dev/posts/getting-started-with-rust-async/?utm_source=atom_feed" rel="related" type="text/html" title="Getting Started with Rust Async" />
        
            <link href="https://vincevarga.dev/posts/rust-error-handling-patterns/?utm_source=atom_feed" rel="related" type="text/html" title="Rust Error Handling Patterns" />
        
        <published>2025-12-25T00:00:00Z</published>
        <updated>2025-12-25T00:00:00Z</updated>
        <id>urn:uuid:fbcc0a61-2378-5d13-59c9-dde3d710026e</id>
        
        <summary type="html"><![CDATA[<blockquote>
<p>⚠️ <strong>PLACEHOLDER CONTENT</strong>: This is a fake blog post with dummy content for demonstration purposes only.</p></blockquote>
<h2 id="the-problem" class="heading-anchor">The Problem<a href="#the-problem" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Managing state in Flutter can get messy. Here are some patterns that help.</p>
<h2 id="using-valuenotifier" class="heading-anchor">Using ValueNotifier<a href="#using-valuenotifier" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>A simple approach for local state:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dart" data-lang="dart"><span class="line"><span class="cl"><span class="kd">class</span> <span class="nc">CounterWidget</span> <span class="kd">extends</span> <span class="n">StatefulWidget</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">const</span> <span class="n">CounterWidget</span><span class="p">({</span><span class="k">super</span><span class="p">.</span><span class="n">key</span><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="err">@</span><span class="n">override</span>
</span></span><span class="line"><span class="cl">  <span class="n">State</span><span class="o">&lt;</span><span class="n">CounterWidget</span><span class="o">&gt;</span> <span class="n">createState</span><span class="p">()</span> <span class="o">=&gt;</span> <span class="n">_CounterWidgetState</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">class</span> <span class="nc">_CounterWidgetState</span> <span class="kd">extends</span> <span class="n">State</span><span class="o">&lt;</span><span class="n">CounterWidget</span><span class="o">&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">final</span> <span class="n">_counter</span> <span class="o">=</span> <span class="n">ValueNotifier</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">(</span><span class="m">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="err">@</span><span class="n">override</span>
</span></span><span class="line"><span class="cl">  <span class="n">Widget</span> <span class="n">build</span><span class="p">(</span><span class="n">BuildContext</span> <span class="n">context</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">ValueListenableBuilder</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">      <span class="nl">valueListenable:</span> <span class="n">_counter</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nl">builder:</span> <span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">child</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">Text</span><span class="p">(</span><span class="s1">&#39;Count: </span><span class="si">$</span><span class="n">value</span><span class="s1">&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kt">void</span> <span class="n">increment</span><span class="p">()</span> <span class="o">=&gt;</span> <span class="n">_counter</span><span class="p">.</span><span class="n">value</span><span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="extension-methods" class="heading-anchor">Extension Methods<a href="#extension-methods" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Dart extension methods can clean up your code:</p>]]></summary>
    </entry>
    <entry>
        
        <category term="posts" />
        
            
            <category term="Rust" x="y" />
            
        
            
            <category term="Error Handling" x="y" />
            
        
            
            <category term="Placeholder" x="y" />
            
        
        <link rel="alternate" type="type/html" href="https://vincevarga.dev/posts/rust-error-handling-patterns/?utm_source=atom_feed" />
        <title type="html"><![CDATA[Rust Error Handling Patterns]]></title>
        
        
        
            <link href="https://vincevarga.dev/posts/ftextarea/?utm_source=atom_feed" rel="related" type="text/html" title="Building ftextarea: A Vanilla Rust &#43; WebAssembly Textarea App" />
        
            <link href="https://vincevarga.dev/posts/getting-started-with-rust-async/?utm_source=atom_feed" rel="related" type="text/html" title="Getting Started with Rust Async" />
        
            <link href="https://vincevarga.dev/posts/flutter-state-management-tips/?utm_source=atom_feed" rel="related" type="text/html" title="Flutter State Management Tips" />
        
        <published>2025-12-20T00:00:00Z</published>
        <updated>2025-12-20T00:00:00Z</updated>
        <id>urn:uuid:46b2a3d3-e3e2-567e-9989-f80be8067234</id>
        
        <summary type="html"><![CDATA[<blockquote>
<p>⚠️ <strong>PLACEHOLDER CONTENT</strong>: This is a fake blog post with dummy content for demonstration purposes only.</p></blockquote>
<h2 id="the--operator" class="heading-anchor">The ? Operator<a href="#the--operator" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Rust&rsquo;s <code>?</code> operator makes error propagation elegant:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">std</span>::<span class="n">fs</span>::<span class="n">File</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">std</span>::<span class="n">io</span>::<span class="p">{</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">Read</span><span class="p">};</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">fn</span> <span class="nf">read_config</span><span class="p">()</span><span class="w"> </span>-&gt; <span class="nc">io</span>::<span class="nb">Result</span><span class="o">&lt;</span><span class="nb">String</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">File</span>::<span class="n">open</span><span class="p">(</span><span class="s">&#34;config.toml&#34;</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">contents</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">String</span>::<span class="n">new</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">file</span><span class="p">.</span><span class="n">read_to_string</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="n">contents</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nb">Ok</span><span class="p">(</span><span class="n">contents</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><h2 id="custom-error-types" class="heading-anchor">Custom Error Types<a href="#custom-error-types" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>Define your own errors with <code>thiserror</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">thiserror</span>::<span class="n">Error</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="cp">#[derive(Error, Debug)]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">pub</span><span class="w"> </span><span class="k">enum</span> <span class="nc">AppError</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="cp">#[error(</span><span class="s">&#34;Configuration file not found&#34;</span><span class="cp">)]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">ConfigNotFound</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="cp">#[error(</span><span class="s">&#34;Invalid data: {0}&#34;</span><span class="cp">)]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">InvalidData</span><span class="p">(</span><span class="nb">String</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="cp">#[error(</span><span class="s">&#34;IO error: {0}&#34;</span><span class="cp">)]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">Io</span><span class="p">(</span><span class="cp">#[from]</span><span class="w"> </span><span class="n">std</span>::<span class="n">io</span>::<span class="n">Error</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">fn</span> <span class="nf">load_config</span><span class="p">()</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="n">Config</span><span class="p">,</span><span class="w"> </span><span class="n">AppError</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kd">let</span><span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span>::<span class="n">fs</span>::<span class="n">read_to_string</span><span class="p">(</span><span class="s">&#34;config.toml&#34;</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="n">map_err</span><span class="p">(</span><span class="o">|</span><span class="n">_</span><span class="o">|</span><span class="w"> </span><span class="n">AppError</span>::<span class="n">ConfigNotFound</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">parse_config</span><span class="p">(</span><span class="o">&amp;</span><span class="n">data</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="n">ok_or_else</span><span class="p">(</span><span class="o">||</span><span class="w"> </span><span class="n">AppError</span>::<span class="n">InvalidData</span><span class="p">(</span><span class="s">&#34;malformed TOML&#34;</span><span class="p">.</span><span class="n">into</span><span class="p">()))</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><h2 id="the-anyhow-crate" class="heading-anchor">The anyhow Crate<a href="#the-anyhow-crate" class="anchor-link" aria-hidden="true">#</a>
</h2>

<p>For applications (not libraries), <code>anyhow</code> simplifies everything:</p>]]></summary>
    </entry>
</feed>
