<?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: TildAlice</title>
    <description>The latest articles on DEV Community by TildAlice (@tildalice).</description>
    <link>https://dev.to/tildalice</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3755725%2Fed8d5042-b5bb-495f-b8f6-9d8b470e1d46.png</url>
      <title>DEV Community: TildAlice</title>
      <link>https://dev.to/tildalice</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tildalice"/>
    <language>en</language>
    <item>
      <title>EAL6+ vs EAL5+: Why Hardware Wallet Chip Certification Matters</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Sat, 02 May 2026 00:02:47 +0000</pubDate>
      <link>https://dev.to/tildalice/eal6-vs-eal5-why-hardware-wallet-chip-certification-matters-7g6</link>
      <guid>https://dev.to/tildalice/eal6-vs-eal5-why-hardware-wallet-chip-certification-matters-7g6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fonekey-classic-1s-device.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fonekey-classic-1s-device.jpg" alt="OneKey Classic 1S hardware wallet" width="800" height="1067"&gt;&lt;/a&gt;Credit-card sized, four physical buttons, a small but crisp OLED display.&lt;/p&gt;

&lt;h1&gt;
  
  
  EAL6+ vs EAL5+: Why Hardware Wallet Chip Certification Matters
&lt;/h1&gt;

&lt;p&gt;I spent three years trusting a Ledger Nano S before realizing I had no idea what "secure element" actually meant. The spec sheet said "CC EAL5+ certified" and I assumed that was good enough. Then I started researching hardware wallet attacks and discovered my assumptions were completely wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Common Criteria EAL Ratings Actually Mean
&lt;/h2&gt;

&lt;p&gt;Common Criteria (CC) is an international security certification standard (ISO/IEC 15408) used to evaluate everything from smartcards to military hardware. The Evaluation Assurance Level (EAL) scale runs from EAL1 to EAL7, but most consumer hardware lives in the EAL4–EAL6 range.&lt;/p&gt;

&lt;p&gt;Here's what each level requires:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;EAL Level&lt;/th&gt;
&lt;th&gt;What Gets Tested&lt;/th&gt;
&lt;th&gt;Typical Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EAL4&lt;/td&gt;
&lt;td&gt;Methodically designed, tested, and reviewed&lt;/td&gt;
&lt;td&gt;Payment cards, SIM cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EAL5&lt;/td&gt;
&lt;td&gt;Semi-formally designed and tested&lt;/td&gt;
&lt;td&gt;Government ID cards, passport chips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EAL5+&lt;/td&gt;
&lt;td&gt;EAL5 + specific attack resistance (AVA_VAN.5)&lt;/td&gt;
&lt;td&gt;Most hardware wallets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EAL6&lt;/td&gt;
&lt;td&gt;Semi-formally verified design and tested&lt;/td&gt;
&lt;td&gt;Military communications, high-security banking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/eal6-vs-eal5-hardware-wallet-chip-certification/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hardwarewallet</category>
      <category>security</category>
      <category>commoncriteria</category>
      <category>ealcertification</category>
    </item>
    <item>
      <title>uv vs pip vs Poetry: 50+ Package Install Speed Test</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Fri, 01 May 2026 21:06:33 +0000</pubDate>
      <link>https://dev.to/tildalice/uv-vs-pip-vs-poetry-50-package-install-speed-test-1j3o</link>
      <guid>https://dev.to/tildalice/uv-vs-pip-vs-poetry-50-package-install-speed-test-1j3o</guid>
      <description>&lt;h2&gt;
  
  
  Installing 50 Packages Takes 2.5 Minutes with pip. uv Does It in 12 Seconds.
&lt;/h2&gt;

&lt;p&gt;I cloned a Django project with 57 dependencies yesterday and ran &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;. Watched the terminal scroll. Made coffee. Came back. Still installing.&lt;/p&gt;

&lt;p&gt;Then I tried &lt;code&gt;uv pip install -r requirements.txt&lt;/code&gt; on the same lockfile. Twelve seconds.&lt;/p&gt;

&lt;p&gt;This isn't a synthetic benchmark. This is a real mid-sized web app with Django, Celery, psycopg2, Pillow, and the usual suspects. The kind of project where &lt;code&gt;pip install&lt;/code&gt; is the bottleneck in CI, local setup, and Docker builds.&lt;/p&gt;

&lt;p&gt;But uv's speed comes with tradeoffs. Poetry gives you deterministic builds and dependency resolution that actually works. pip is everywhere and requires zero setup. So which one should you actually use?&lt;/p&gt;

&lt;p&gt;I ran the same 57-package install across all three tools, measured cold cache, warm cache, and CI scenarios, and tracked exactly where each tool spends its time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F05%2Fstock-uv-vs-pip-vs-poetry-install-speed-benchmark-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F05%2Fstock-uv-vs-pip-vs-poetry-install-speed-benchmark-1.jpg" alt="A Burmese python slithers through grass on a sunny day, showcasing its beautiful patterned scales." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@willians-huerta-2157111846" rel="nofollow noopener noreferrer"&gt;Willians Huerta&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  The Test Setup: Real Project, Real Dependencies
&lt;/h2&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/uv-vs-pip-vs-poetry-install-speed-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>pip</category>
      <category>uv</category>
      <category>poetry</category>
    </item>
    <item>
      <title>Prefix Tree vs Hash Map: 47% Slower Insert Reality</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Fri, 01 May 2026 18:04:21 +0000</pubDate>
      <link>https://dev.to/tildalice/prefix-tree-vs-hash-map-47-slower-insert-reality-1ajl</link>
      <guid>https://dev.to/tildalice/prefix-tree-vs-hash-map-47-slower-insert-reality-1ajl</guid>
      <description>&lt;h2&gt;
  
  
  Hash maps dominate autocomplete implementations, but that's not the full story
&lt;/h2&gt;

&lt;p&gt;Most production autocomplete systems use hash maps. They're simple, fast, and "good enough" for search boxes with a few thousand product names or city entries. But push them past 100k entries with shared prefixes — think domain names, file paths, or gene sequences — and you start seeing lag.&lt;/p&gt;

&lt;p&gt;The classic computer science answer is "use a trie" (prefix tree). The reality? Tries are slower to build, use more memory, and only win in specific scenarios. I tested both on a 500k-word dictionary to see where the crossover happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mental model: what each structure actually does
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;hash map&lt;/strong&gt; stores complete strings as keys. When you type "pyth", it doesn't know that "python" and "pythonic" share a prefix — it just checks if "pyth" exists as a key (it doesn't), then returns nothing. To support autocomplete, you have to scan ALL keys looking for matches. That's $O(n \cdot k)$ where $n$ is the dictionary size and $k$ is the average word length (for &lt;code&gt;startswith()&lt;/code&gt; comparison).&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;prefix tree&lt;/strong&gt; (trie) stores strings character-by-character in a tree structure. Each node represents one character. The path from root to a node spells out a prefix. When you type "pyth", you walk down p→y→t→h in the tree (4 operations), then collect all words in that subtree. That's $O(p + m)$ where $p$ is the prefix length and $m$ is the number of matches.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/prefix-tree-vs-hash-map-autocomplete-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>autocomplete</category>
      <category>trie</category>
      <category>prefixtree</category>
      <category>hashmap</category>
    </item>
    <item>
      <title>multiprocessing vs concurrent.futures: 2.1x Speed Gap</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Fri, 01 May 2026 15:03:46 +0000</pubDate>
      <link>https://dev.to/tildalice/multiprocessing-vs-concurrentfutures-21x-speed-gap-3ji</link>
      <guid>https://dev.to/tildalice/multiprocessing-vs-concurrentfutures-21x-speed-gap-3ji</guid>
      <description>&lt;h2&gt;
  
  
  The API You Choose Changes Everything
&lt;/h2&gt;

&lt;p&gt;Python's &lt;code&gt;multiprocessing&lt;/code&gt; module and &lt;code&gt;concurrent.futures.ProcessPoolExecutor&lt;/code&gt; both spawn processes to sidestep the GIL. They solve the same problem. But the overhead gap between them can hit 2.1x on small tasks.&lt;/p&gt;

&lt;p&gt;I ran 10,000 CPU-bound jobs (prime factorization up to 10^6) on both APIs, Python 3.11, M1 MacBook. &lt;code&gt;ProcessPoolExecutor&lt;/code&gt; finished in 4.2 seconds. Raw &lt;code&gt;multiprocessing.Pool&lt;/code&gt; took 8.9 seconds. Same work, same process count, wildly different runtimes.&lt;/p&gt;

&lt;p&gt;The culprit? Task submission overhead and result serialization. &lt;code&gt;concurrent.futures&lt;/code&gt; batches tasks more aggressively and amortizes pickle costs. &lt;code&gt;multiprocessing.Pool.map()&lt;/code&gt; incurs per-task IPC overhead that compounds at scale.&lt;/p&gt;

&lt;p&gt;This post benchmarks both APIs on three real workloads: embarrassingly parallel number crunching, I/O-mixed tasks, and large result sets. You'll see where &lt;code&gt;ProcessPoolExecutor&lt;/code&gt; wins, where raw &lt;code&gt;multiprocessing&lt;/code&gt; fights back, and the one scenario where neither matters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F05%2Fstock-multiprocessing-vs-concurrent-futures-cpu-bound-benchmark-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F05%2Fstock-multiprocessing-vs-concurrent-futures-cpu-bound-benchmark-1.jpg" alt="A person reads 'Python for Unix and Linux System Administration' indoors." width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@divinetechygirl" rel="nofollow noopener noreferrer"&gt;Christina Morillo&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;






&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/multiprocessing-vs-concurrent-futures-cpu-bound-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>multiprocessing</category>
      <category>concurrentfutures</category>
      <category>parallelism</category>
    </item>
    <item>
      <title>Adjacency List vs Matrix: 47% Faster DFS in Interview Code</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:04:57 +0000</pubDate>
      <link>https://dev.to/tildalice/adjacency-list-vs-matrix-47-faster-dfs-in-interview-code-3i2g</link>
      <guid>https://dev.to/tildalice/adjacency-list-vs-matrix-47-faster-dfs-in-interview-code-3i2g</guid>
      <description>&lt;h2&gt;
  
  
  Why Your Graph Choice Tanks Interview Performance
&lt;/h2&gt;

&lt;p&gt;Most candidates freeze when asked "adjacency list or matrix?" during graph problems. They mumble something about sparse vs dense graphs, then pick one arbitrarily and hope it works. But here's what actually matters: the wrong choice doesn't just waste memory — it kills your runtime on test cases that matter.&lt;/p&gt;

&lt;p&gt;I ran the same DFS traversal on a 1000-node graph using both representations. Adjacency list: 0.8ms. Adjacency matrix: 1.5ms. That's 47% slower for identical logic.&lt;/p&gt;

&lt;p&gt;And it gets worse with certain graph patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Memory Trap Nobody Mentions
&lt;/h2&gt;

&lt;p&gt;Everyone knows the space complexity formulas. Adjacency list: $O(V + E)$ where $V$ is vertices and $E$ is edges. Adjacency matrix: $O(V^2)$ regardless of edge count.&lt;/p&gt;

&lt;p&gt;But interview problems don't care about your Big-O theory — they care about whether your code passes the hidden test case with 10,000 nodes and 15,000 edges (a fairly sparse social network graph). That adjacency matrix allocates 100 million boolean values. Python booleans are 1 byte each. You just consumed 95MB for a graph that should take under 1MB.&lt;/p&gt;

&lt;p&gt;LeetCode's memory limit? Often 256MB. You're already using 37% of your budget before storing anything else.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/adjacency-list-vs-matrix-performance-interview/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphalgorithms</category>
      <category>codinginterview</category>
      <category>datastructures</category>
      <category>performanceoptimizat</category>
    </item>
    <item>
      <title>SAM vs FastSAM vs SAM 2: Inference Speed Benchmark</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Thu, 30 Apr 2026 18:05:14 +0000</pubDate>
      <link>https://dev.to/tildalice/sam-vs-fastsam-vs-sam-2-inference-speed-benchmark-341m</link>
      <guid>https://dev.to/tildalice/sam-vs-fastsam-vs-sam-2-inference-speed-benchmark-341m</guid>
      <description>&lt;h2&gt;
  
  
  FastSAM is 15x faster than SAM on my RTX 3090, but it misses 22% of fine details
&lt;/h2&gt;

&lt;p&gt;I spent the weekend running 500 images through SAM, SAM 2, and FastSAM to settle the speed-vs-quality debate once and for all. The headline number everyone quotes—"FastSAM is 50x faster!"—turns out to be misleading. On real-world images with mixed object sizes, the gap shrinks dramatically, and the quality trade-off is harder than the papers suggest.&lt;/p&gt;

&lt;p&gt;Here's what actually happened when I benchmarked all three models on identical hardware with consistent preprocessing. The results surprised me, especially around memory usage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-sam-vs-fastsam-vs-sam2-speed-benchmark-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-sam-vs-fastsam-vs-sam2-speed-benchmark-1.jpg" alt="A shirtless man drinking from a yellow cup at the beach, enjoying a sunny seaside day." width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@rdne" rel="nofollow noopener noreferrer"&gt;RDNE Stock project&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  The models: architecture differences that explain the speed gap
&lt;/h2&gt;

&lt;p&gt;SAM (Segment Anything Model, Kirillov et al., 2023) uses a massive ViT-H image encoder with 632M parameters. The encoder runs once per image, producing a 256×64×64 embedding. Then for each prompt (point, box, or mask), a lightweight decoder generates the segmentation in ~50ms. Total first-frame time? Around 3-4 seconds on GPU.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/sam-vs-fastsam-vs-sam2-speed-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sam</category>
      <category>fastsam</category>
      <category>sam2</category>
      <category>segmentation</category>
    </item>
    <item>
      <title>Linear vs Binary Search: 1M Element Speed Test Results</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Thu, 30 Apr 2026 15:04:16 +0000</pubDate>
      <link>https://dev.to/tildalice/linear-vs-binary-search-1m-element-speed-test-results-461j</link>
      <guid>https://dev.to/tildalice/linear-vs-binary-search-1m-element-speed-test-results-461j</guid>
      <description>&lt;h2&gt;
  
  
  The 400x Speed Gap Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Linear search gets demolished by binary search on sorted data. Everyone knows that in theory. But here's what surprised me: on a 1 million element array, binary search wasn't just faster — it was &lt;strong&gt;418 times faster&lt;/strong&gt; in the worst case. And in the average case? The gap widened to over 600x.&lt;/p&gt;

&lt;p&gt;Most coding interview prep skips the actual performance measurement. They show you the $O(n)$ vs $O(\log n)$ notation and move on. But when you're sitting in an interview and the interviewer asks "which algorithm would you choose for this scenario," the answer depends on details that Big-O notation doesn't capture: dataset size, whether the data is sorted, memory constraints, and how often you're searching.&lt;/p&gt;

&lt;p&gt;I ran both algorithms on the same 1 million element dataset with different scenarios: best case, worst case, average case, and repeated searches. The results show exactly when linear search is acceptable (hint: almost never on large datasets) and when you'd be crazy not to use binary search.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Each Algorithm Works
&lt;/h2&gt;

&lt;p&gt;Linear search is dead simple: start at index 0, compare each element to your target, return when you find it (or reach the end). The search time grows linearly with array size. If you're looking for the last element in a million-item list, you check all million items.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/linear-vs-binary-search-1m-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>binarysearch</category>
      <category>linearsearch</category>
      <category>algorithmbenchmark</category>
      <category>codinginterview</category>
    </item>
    <item>
      <title>Chain-of-Thought vs Few-Shot: 34% Accuracy Gap on GSM8K</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Wed, 29 Apr 2026 21:04:50 +0000</pubDate>
      <link>https://dev.to/tildalice/chain-of-thought-vs-few-shot-34-accuracy-gap-on-gsm8k-47b9</link>
      <guid>https://dev.to/tildalice/chain-of-thought-vs-few-shot-34-accuracy-gap-on-gsm8k-47b9</guid>
      <description>&lt;h2&gt;
  
  
  Chain-of-Thought Beats Few-Shot by 34% on Grade School Math
&lt;/h2&gt;

&lt;p&gt;GSM8K is a dataset of 8,500 grade school math word problems that trip up even large language models. When I tested GPT-3.5-turbo with standard few-shot prompting, accuracy hovered around 23%. Switching to chain-of-thought (CoT) prompting — where the model writes out intermediate reasoning steps — jumped accuracy to 57%.&lt;/p&gt;

&lt;p&gt;That's a 34 percentage point gap from the same model, same API call, just a different prompt structure.&lt;/p&gt;

&lt;p&gt;The gap isn't magic. CoT forces the model to decompose multi-step reasoning into explicit steps, which prevents the arithmetic and logical errors that plague direct answer generation. But it comes with a cost: 3.2x more tokens per response, which translates directly to API spend and latency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-chain-of-thought-vs-few-shot-gsm8k-accuracy-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-chain-of-thought-vs-few-shot-gsm8k-accuracy-1.jpg" alt="A man in a suit reading religious books at a wooden table indoors." width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@cottonbro" rel="nofollow noopener noreferrer"&gt;cottonbro studio&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  What GSM8K Actually Tests
&lt;/h2&gt;

&lt;p&gt;GSM8K problems look deceptively simple:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?"&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/chain-of-thought-vs-few-shot-gsm8k-accuracy/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>chainofthought</category>
      <category>fewshotlearning</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Pandas Join Performance: merge() vs concat() vs join()</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Wed, 29 Apr 2026 18:04:24 +0000</pubDate>
      <link>https://dev.to/tildalice/pandas-join-performance-merge-vs-concat-vs-join-538e</link>
      <guid>https://dev.to/tildalice/pandas-join-performance-merge-vs-concat-vs-join-538e</guid>
      <description>&lt;h2&gt;
  
  
  merge() Beats concat() by 12x on Indexed Lookups
&lt;/h2&gt;

&lt;p&gt;I benchmarked all three Pandas join methods on a 500K-row customer dataset with a 200K-row transaction table. &lt;code&gt;merge()&lt;/code&gt; completed in 0.18s, &lt;code&gt;join()&lt;/code&gt; in 0.21s, and &lt;code&gt;concat()&lt;/code&gt; took 2.4s. That's not a typo — concatenation with axis=1 was over 12 times slower than a hash join.&lt;/p&gt;

&lt;p&gt;Most tutorials treat these as interchangeable "ways to combine DataFrames." They're not. Each method optimizes for a completely different use case, and picking the wrong one tanks performance or silently produces incorrect results.&lt;/p&gt;

&lt;p&gt;Here's what actually matters: &lt;strong&gt;merge()&lt;/strong&gt; is a relational database join (hash-based, column matching), &lt;strong&gt;join()&lt;/strong&gt; is index-aligned merging (defaults to left join on index), and &lt;strong&gt;concat()&lt;/strong&gt; is axis-wise stacking (intended for appending rows or columns without matching logic). The syntax overlap fools people into thinking they're equivalent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-pandas-join-performance-merge-concat-join-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-pandas-join-performance-merge-concat-join-1.jpg" alt="A giant panda lounges in a lush bamboo forest, surrounded by nature." width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@joanie-xie-1306424600" rel="nofollow noopener noreferrer"&gt;Joanie xie&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  The Benchmark Setup
&lt;/h2&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/pandas-join-performance-merge-concat-join/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pandas</category>
      <category>dataframe</category>
      <category>merge</category>
      <category>join</category>
    </item>
    <item>
      <title>Backtest.py to Vectorbt: 3x Faster Parallel Strategies</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Wed, 29 Apr 2026 15:05:57 +0000</pubDate>
      <link>https://dev.to/tildalice/backtestpy-to-vectorbt-3x-faster-parallel-strategies-5g9h</link>
      <guid>https://dev.to/tildalice/backtestpy-to-vectorbt-3x-faster-parallel-strategies-5g9h</guid>
      <description>&lt;h2&gt;
  
  
  Why Backtest.py's Loop-Based Design Kills Multi-Strategy Testing
&lt;/h2&gt;

&lt;p&gt;Running 50 variations of a moving average crossover strategy in Backtest.py takes about 12 minutes on my M1 MacBook. The same test in vectorbt finishes in under 4 minutes.&lt;/p&gt;

&lt;p&gt;The gap isn't about code quality — it's architectural. Backtest.py runs each strategy sequentially in a Python loop, recalculating indicators and event handling for every parameter combination. Vectorbt precomputes everything as NumPy arrays and broadcasts operations across all parameter sets simultaneously. When you're testing hundreds of hyperparameter combinations (different MA windows, stop-loss levels, position sizing rules), that difference compounds fast.&lt;/p&gt;

&lt;p&gt;I migrated a pairs trading system from Backtest.py to vectorbt last month. The migration itself took maybe 3 hours, but the real payoff came when I started running parameter sweeps — what used to be overnight grid searches now finish during lunch.&lt;/p&gt;

&lt;p&gt;This isn't a hit piece on Backtest.py. It's a fantastic library for beginners: clean API, great documentation, easy to reason about. But if you're moving from "test one strategy" to "test 100 variations in parallel," you'll hit its performance ceiling hard.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-backtest-py-to-vectorbt-parallel-strategy-testing-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-backtest-py-to-vectorbt-parallel-strategy-testing-1.jpg" alt="A Burmese python slithers through grass on a sunny day, showcasing its beautiful patterned scales." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/backtest-py-to-vectorbt-parallel-strategy-testing/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>backtesting</category>
      <category>vectorbt</category>
      <category>python</category>
      <category>quantitativefinance</category>
    </item>
    <item>
      <title>GraphSAGE vs GAT: Reddit/PPI Inductive Learning 95% F1</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Tue, 28 Apr 2026 21:06:28 +0000</pubDate>
      <link>https://dev.to/tildalice/graphsage-vs-gat-redditppi-inductive-learning-95-f1-5e6f</link>
      <guid>https://dev.to/tildalice/graphsage-vs-gat-redditppi-inductive-learning-95-f1-5e6f</guid>
      <description>&lt;h2&gt;
  
  
  The 95% F1 Barrier on Reddit That Broke GCN
&lt;/h2&gt;

&lt;p&gt;Graph Convolutional Networks hit a wall. Not because they weren't accurate—Kipf and Welling's GCN (ICLR 2017) dominated transductive tasks—but because they couldn't handle nodes that didn't exist during training. Every time Reddit added a new user or PPI discovered a new protein interaction, the entire model needed retraining. You can read the full GraphSAGE paper &lt;a href="https://arxiv.org/abs/1706.02216" rel="noopener noreferrer"&gt;here&lt;/a&gt; and the GAT paper &lt;a href="https://arxiv.org/abs/1710.10903" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;GraphSAGE (Hamilton et al., NeurIPS 2017) cracked this by learning aggregation functions instead of fixed embeddings. GAT (Veličković et al., ICLR 2018) took a different route: attention-weighted neighbors. Both papers claimed inductive superiority—but which actually delivers when you're staring at 232,965 Reddit posts or 56,944 PPI proteins?&lt;/p&gt;

&lt;p&gt;I ran both implementations on identical hardware, and the results weren't what I expected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-graphsage-vs-gat-inductive-learning-benchmark-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-graphsage-vs-gat-inductive-learning-benchmark-1.jpg" alt="Visual abstraction of neural networks in AI technology, featuring data flow and algorithms." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@googledeepmind" rel="nofollow noopener noreferrer"&gt;Google DeepMind&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  GraphSAGE: Sampling Neighbors to Scale
&lt;/h2&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/graphsage-vs-gat-inductive-learning-benchmark/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphsage</category>
      <category>gat</category>
      <category>graphneuralnetworks</category>
      <category>inductivelearning</category>
    </item>
    <item>
      <title>tmux Scroll vs Terminal: 10K Line Benchmark Results</title>
      <dc:creator>TildAlice</dc:creator>
      <pubDate>Tue, 28 Apr 2026 15:03:35 +0000</pubDate>
      <link>https://dev.to/tildalice/tmux-scroll-vs-terminal-10k-line-benchmark-results-2hc7</link>
      <guid>https://dev.to/tildalice/tmux-scroll-vs-terminal-10k-line-benchmark-results-2hc7</guid>
      <description>&lt;h2&gt;
  
  
  The Myth of tmux Scroll Overhead
&lt;/h2&gt;

&lt;p&gt;A colleague insisted tmux was "destroying his scroll performance" when tailing logs. He'd switched to running everything bare in iTerm2, convinced the multiplexer layer was the bottleneck. But when I tested scrolling through 10,000 lines of dense output, the results flipped his assumption.&lt;/p&gt;

&lt;p&gt;tmux's scroll-back buffer isn't the problem most people think it is. The terminal emulator's rendering engine matters far more than the multiplexer sitting between your shell and the display. In fact, across four different terminal emulators running identical tmux configurations, I measured a 3.8x difference in scroll responsiveness — while tmux vs. no-tmux on the same emulator showed only a 1.2x gap.&lt;/p&gt;

&lt;p&gt;The real performance story is about GPU acceleration, text shaping engines, and how your terminal handles rapid frame invalidation. Not the tmux layer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-tmux-scroll-speed-vs-terminal-benchmark-10k-lines-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftildalice.io%2Fwp-content%2Fuploads%2F2026%2F04%2Fstock-tmux-scroll-speed-vs-terminal-benchmark-10k-lines-1.jpg" alt="Hand analyzing business graphs on a wooden desk, focusing on data results and growth analysis." width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;
Photo by &lt;a href="https://www.pexels.com/@goumbik" rel="nofollow noopener noreferrer"&gt;Lukas Blazek&lt;/a&gt; on &lt;a href="https://www.pexels.com" rel="nofollow noopener noreferrer"&gt;Pexels&lt;/a&gt;



&lt;h2&gt;
  
  
  Test Setup: Controlled Chaos
&lt;/h2&gt;




&lt;p&gt;&lt;em&gt;Continue reading the full article on &lt;a href="https://tildalice.io/tmux-scroll-speed-vs-terminal-benchmark-10k-lines/" rel="noopener noreferrer"&gt;TildAlice&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tmux</category>
      <category>terminalemulator</category>
      <category>benchmarks</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
