<?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: Zahir Fahmi</title>
    <description>The latest articles on DEV Community by Zahir Fahmi (@zblack).</description>
    <link>https://dev.to/zblack</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%2F3104552%2Fe323e335-9e36-4cb0-bd43-2e9cc0477c23.jpg</url>
      <title>DEV Community: Zahir Fahmi</title>
      <link>https://dev.to/zblack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zblack"/>
    <language>en</language>
    <item>
      <title>PostgreSQL AI: The Everything Database (+ Hidden 10x Performance Tricks)</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Sat, 16 Aug 2025 07:36:40 +0000</pubDate>
      <link>https://dev.to/zblack/postgresql-ai-the-everything-database-hidden-10x-performance-tricks-2hgj</link>
      <guid>https://dev.to/zblack/postgresql-ai-the-everything-database-hidden-10x-performance-tricks-2hgj</guid>
      <description>&lt;p&gt;PostgreSQL just ate everyone's lunch. Here's proof:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers Don't Lie
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;49%&lt;/strong&gt; developers switched from MySQL (Stack Overflow 2024)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;70%&lt;/strong&gt; infrastructure cost reduction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10M&lt;/strong&gt; vectors with &amp;lt;100ms queries
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;50K&lt;/strong&gt; queries/sec at Uber production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;600M&lt;/strong&gt; vectors at Instacart&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Secret Sauce Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Found 4 optimization tricks that changed everything:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Parallel Partitioned Search (10x faster)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Create partitioned table&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;embeddings_partitioned&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;BIGSERIAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;HASH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Create 8 partitions = 8 CPU cores&lt;/span&gt;
&lt;span class="k"&gt;DO&lt;/span&gt; &lt;span class="err"&gt;$$&lt;/span&gt; 
&lt;span class="k"&gt;BEGIN&lt;/span&gt; 
  &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;IN&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;7&lt;/span&gt; &lt;span class="n"&gt;LOOP&lt;/span&gt;
    &lt;span class="k"&gt;EXECUTE&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'CREATE TABLE embeddings_part_%s 
                    PARTITION OF embeddings_partitioned 
                    FOR VALUES WITH (modulus 8, remainder %s)'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;LOOP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="err"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Enable parallel execution&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;max_parallel_workers_per_gather&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Binary Quantization (30x faster!)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Convert float vectors to binary&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt; &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;embedding_binary&lt;/span&gt; &lt;span class="nb"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;embedding_binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;string_agg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="k"&gt;unnest&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="s1"&gt;'1'&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="s1"&gt;'0'&lt;/span&gt; &lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
  &lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="k"&gt;unnest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Two-stage search: binary first, then refine&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;bit_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding_binary&lt;/span&gt; &lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;query_binary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;
  &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; 
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;query_vector&lt;/span&gt; 
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Memory-Mapped Indexes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Force index to stay in RAM&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;pg_prewarm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;pg_prewarm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'idx_embeddings_ivfflat'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'buffer'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;shared_buffers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'8GB'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Migration Success Stories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instagram:&lt;/strong&gt; Billions of vectors, zero new infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spotify:&lt;/strong&gt; Recommendation engine serving 500M users
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord:&lt;/strong&gt; 150M users, p99 latency &amp;lt;50ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DoorDash:&lt;/strong&gt; 40% latency reduction after migration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uber:&lt;/strong&gt; Driver matching at 50K queries/sec&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Cost Breakdown That Matters
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;10M Vectors/mo&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;Vendor Lock-in&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pinecone&lt;/td&gt;
&lt;td&gt;$227&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weaviate&lt;/td&gt;
&lt;td&gt;$300+&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Milvus&lt;/td&gt;
&lt;td&gt;Self-host complexity&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL + pgvector&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When PostgreSQL AI Makes Sense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Perfect for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're already using PostgreSQL&lt;/li&gt;
&lt;li&gt;1-100M vectors (covers 95% of use cases)&lt;/li&gt;
&lt;li&gt;Need ACID compliance + vectors&lt;/li&gt;
&lt;li&gt;Want to avoid vendor lock-in&lt;/li&gt;
&lt;li&gt;Team knows SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Consider alternatives when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Billions of vectors across 100+ nodes&lt;/li&gt;
&lt;li&gt;Need GPU acceleration&lt;/li&gt;
&lt;li&gt;Purely vector-only workload&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One Database to Rule Them All
&lt;/h2&gt;

&lt;p&gt;PostgreSQL now handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector embeddings&lt;/strong&gt; (pgvector)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON documents&lt;/strong&gt; (JSONB)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-series data&lt;/strong&gt; (TimescaleDB)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-text search&lt;/strong&gt; (tsvector)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph data&lt;/strong&gt; (Apache AGE)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular ACID SQL&lt;/strong&gt; (obviously)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No more data pipeline nightmares. No more sync issues. Just SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Deep Dive
&lt;/h2&gt;

&lt;p&gt;Production code, benchmarks, and more tricks: &lt;br&gt;
&lt;a href="https://ncse.info/postgresql-ai-integration/" rel="noopener noreferrer"&gt;https://ncse.info/postgresql-ai-integration/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question for the community:&lt;/strong&gt; &lt;br&gt;
Are you still using separate vector databases or have you consolidated to PostgreSQL? What's been your experience with pgvector at scale?&lt;/p&gt;

&lt;p&gt;Drop your thoughts below!&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>ai</category>
      <category>database</category>
      <category>vectorsearch</category>
    </item>
    <item>
      <title>Why Rust Programming Language Became the Most Loved Developer Choice (5 Years Running!)</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Wed, 30 Jul 2025 23:30:54 +0000</pubDate>
      <link>https://dev.to/zblack/why-rust-programming-language-became-the-most-loved-developer-choice-5-years-running-2ao1</link>
      <guid>https://dev.to/zblack/why-rust-programming-language-became-the-most-loved-developer-choice-5-years-running-2ao1</guid>
      <description>&lt;p&gt;Remember when everyone said C++ would rule systems programming forever? Yeah, that aged about as well as MySpace.&lt;/p&gt;

&lt;p&gt;After a decade of wrestling with segfaults and memory leaks, I finally dove into Rust. The result? I'm never going back. And apparently, neither is anyone else - Stack Overflow just crowned Rust the "most loved" language for the FIFTH year straight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's what blew my mind:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Discord cut their servers from hundreds to just 5&lt;/strong&gt; (not a typo!)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Senior Rust devs pulling $300K+ at FAANG&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Microsoft rewriting Windows kernel components in Rust&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;70% of security bugs just... disappear&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the full article:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Real performance benchmarks (Rust vs C++ vs Go)
&lt;/li&gt;
&lt;li&gt;Complete salary breakdown by US tech hub
&lt;/li&gt;
&lt;li&gt;Working code examples you can actually use
&lt;/li&gt;
&lt;li&gt;Why companies like AWS hired entire Rust teams
&lt;/li&gt;
&lt;li&gt;Honest learning curve assessment (spoiler: it's rough but worth it)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spent weeks researching, benchmarking, and talking to Rust devs across Silicon Valley to understand why this language has developers absolutely obsessed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ncse.info/why-rust-programming-language-is-most-loved-by-devs/" rel="noopener noreferrer"&gt;Read the full deep dive here →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>systemsprogramming</category>
      <category>career</category>
    </item>
    <item>
      <title>AI Coding Tools Showdown: GitHub Copilot vs The New Challengers</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Fri, 25 Jul 2025 12:37:42 +0000</pubDate>
      <link>https://dev.to/zblack/ai-coding-tools-showdown-github-copilot-vs-the-new-challengers-4pjn</link>
      <guid>https://dev.to/zblack/ai-coding-tools-showdown-github-copilot-vs-the-new-challengers-4pjn</guid>
      <description>&lt;p&gt;Hey DEV community!&lt;/p&gt;

&lt;p&gt;I just spent the last few months diving deep into the AI coding tools landscape, and wow, things have changed. GitHub Copilot isn't the only player anymore, and the competition is getting spicy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The TL;DR Results That Surprised Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; is beating GitHub Copilot on speed (33% faster for complex refactoring)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CodeWhisperer&lt;/strong&gt; absolutely dominates if you're in the AWS ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tabnine&lt;/strong&gt; is winning enterprise contracts with on-premises deployment&lt;/li&gt;
&lt;li&gt;Developers using AI tools are seeing &lt;strong&gt;30% productivity gains&lt;/strong&gt; (this is real, measured data)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Money Talk
&lt;/h2&gt;

&lt;p&gt;Here's what really got my attention - AI coding tools are actually INCREASING developer salaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entry-level devs who master AI tools: &lt;strong&gt;$95K+&lt;/strong&gt; (up from $80K)&lt;/li&gt;
&lt;li&gt;Senior devs in Silicon Valley: &lt;strong&gt;$195K average&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;One freelancer friend went from $120K to $165K/year while working 10 fewer hours per week&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Performance Comparison
&lt;/h2&gt;

&lt;p&gt;I ran some head-to-head tests. Here's a simple example that shows the difference:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task:&lt;/strong&gt; Generate a secure user registration endpoint&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; (1.2 seconds):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Good, but basic&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&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;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;});&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;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; (0.8 seconds):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Notice the input validation and proper status codes?&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Missing required fields&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&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;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hashedPassword&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateAuthToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nx"&gt;token&lt;/span&gt; 
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Internal server error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&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;
  
  
  The Plot Twist
&lt;/h2&gt;

&lt;p&gt;AI coding tools aren't replacing developers &lt;strong&gt;they're making us more valuable&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The grunt work is automated, so we focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System architecture
&lt;/li&gt;
&lt;li&gt;Complex problem solving
&lt;/li&gt;
&lt;li&gt;Code review and quality
&lt;/li&gt;
&lt;li&gt;Mentoring and leadership
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Junior devs are skipping straight to interesting work.&lt;br&gt;&lt;br&gt;
Senior devs are becoming force multipliers.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Hot Take
&lt;/h2&gt;

&lt;p&gt;By 2026, &lt;strong&gt;not using AI coding tools will be like not using an IDE&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It's not about &lt;em&gt;if&lt;/em&gt; you should adopt them, but &lt;em&gt;which ones&lt;/em&gt; match your stack.&lt;/p&gt;

&lt;p&gt;For most devs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;GitHub Copilot&lt;/strong&gt; (safe choice)
&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;Cursor&lt;/strong&gt; if you want cutting-edge features
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;CodeWhisperer&lt;/strong&gt; for AWS projects
&lt;/li&gt;
&lt;li&gt;Consider &lt;strong&gt;Tabnine&lt;/strong&gt; if you need on-premises&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Want the Full Analysis?
&lt;/h2&gt;

&lt;p&gt;I wrote a comprehensive 2500-word breakdown with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detailed cost/benefit analysis for teams
&lt;/li&gt;
&lt;li&gt;Real case studies from Silicon Valley startups
&lt;/li&gt;
&lt;li&gt;Implementation guides and best practices
&lt;/li&gt;
&lt;li&gt;Market predictions and salary trends
&lt;/li&gt;
&lt;li&gt;Security considerations for enterprises
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://ncse.info/ai-coding-tools-github-copilot-and-new-competitors/" rel="noopener noreferrer"&gt;Read the full article: AI Coding Tools Showdown Between GitHub Copilot and New Competitors&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>SQL Injection Attacks: What Developers Need to Know - A $8.7M Lesson</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Tue, 01 Jul 2025 12:18:30 +0000</pubDate>
      <link>https://dev.to/zblack/sql-injection-attacks-what-developers-need-to-know-a-87m-lesson-197</link>
      <guid>https://dev.to/zblack/sql-injection-attacks-what-developers-need-to-know-a-87m-lesson-197</guid>
      <description>&lt;p&gt;I just published a comprehensive guide on SQL injection prevention. Here’s what you’ll find inside:&lt;/p&gt;

&lt;h2&gt;
  
  
  The worst SQL injection I've seen in production happened because...
&lt;/h2&gt;

&lt;p&gt;A senior developer thought escaping quotes was enough. Three months later: 2.4 million customer records lost, $8.7 million in regulatory fines.&lt;/p&gt;

&lt;p&gt;I just published a comprehensive guide on SQL injection prevention with:&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Inside:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real breach case studies&lt;/strong&gt; from US companies (with actual costs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vulnerable vs secure code examples&lt;/strong&gt; for Node.js, Python, Java, PHP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework-specific prevention&lt;/strong&gt; techniques that actually work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated testing tools&lt;/strong&gt; to catch injections before production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance requirements&lt;/strong&gt; (PCI DSS, HIPAA, SOC 2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Takeaway&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Vulnerable: string concatenation opens the door to SQL injection&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Secure: parameterized query blocks injection&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SELECT * FROM users WHERE id = ?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Perfect for:
&lt;/h3&gt;

&lt;p&gt;Web developers who handle database queries&lt;br&gt;
DevSecOps engineers implementing security&lt;br&gt;
Team leads conducting code reviews&lt;br&gt;
Anyone working with user input&lt;/p&gt;

&lt;p&gt;Read the full article here:&lt;br&gt;
&lt;a href="https://ncse.info/these-5-sql-injection-attacks-are-targeting-your-code/" rel="noopener noreferrer"&gt;https://ncse.info/these-5-sql-injection-attacks-are-targeting-your-code/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the conversation&lt;br&gt;
What’s the worst security vulnerability you’ve encountered in production? Let’s discuss in the comments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Prevent Phishing Attacks: A Technical Implementation Guide</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Fri, 20 Jun 2025 22:31:09 +0000</pubDate>
      <link>https://dev.to/zblack/how-to-prevent-phishing-attacks-a-technical-implementation-guide-mc1</link>
      <guid>https://dev.to/zblack/how-to-prevent-phishing-attacks-a-technical-implementation-guide-mc1</guid>
      <description>&lt;p&gt;Last week, our CISO got phished. Yes, really. The email was so convincing that three senior managers clicked the link within minutes. That's when I realized we needed more than just "don't click suspicious links" training.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality Check
&lt;/h2&gt;

&lt;p&gt;If you think phishing is just a "user education problem," here's a wake-up call: &lt;strong&gt;US businesses lost $2.4 billion to phishing last year&lt;/strong&gt;. Modern phishing bypasses traditional defenses using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perfect domain spoofing&lt;/li&gt;
&lt;li&gt;Legitimate cloud services for hosting&lt;/li&gt;
&lt;li&gt;AI-generated contextual content&lt;/li&gt;
&lt;li&gt;Multi-stage attacks that evolve&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Defenses That Actually Work
&lt;/h2&gt;

&lt;p&gt;Here's what I implemented after our incident:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Email Authentication Trinity
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# SPF Record&lt;/span&gt;
&lt;span class="nv"&gt;v&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;spf1 include:_spf.google.com include:mailgun.org &lt;span class="nt"&gt;-all&lt;/span&gt;

&lt;span class="c"&gt;# DKIM Setup&lt;/span&gt;
default._domainkey.yourdomain.com TXT &lt;span class="s2"&gt;"v=DKIM1; k=rsa; p=MIGfMA0GCS..."&lt;/span&gt;

&lt;span class="c"&gt;# DMARC Policy (start monitoring, then enforce)&lt;/span&gt;
&lt;span class="nv"&gt;v&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DMARC1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;rua&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mailto:dmarc@yourdomain.com&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;pct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: Start with &lt;code&gt;p=none&lt;/code&gt;, analyze for 30 days, then gradually move to &lt;code&gt;p=reject&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Advanced Detection with ML
&lt;/h3&gt;

&lt;p&gt;Instead of relying on blocklists, implement behavioral analysis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Check authentication
&lt;/span&gt;    &lt;span class="n"&gt;spf_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authentication-Results-SPF&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dkim_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authentication-Results-DKIM&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# ML-based content analysis
&lt;/span&gt;    &lt;span class="n"&gt;risk_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ml_model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;analyze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;urgency_indicators&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;extract_urgency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;domain_age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;check_domain_age&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sender_domain&lt;/span&gt;&lt;span class="p"&gt;)&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;risk_score&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Zero-Hour Protection Config
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url_analysis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"real_time_checking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reputation_threshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"age_check_days"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ssl_verification"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"redirect_chain_analysis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Automated Response Playbook
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;phishing_response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;triggers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;user_reported_phish&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gateway_high_risk_detection&lt;/span&gt;

  &lt;span class="na"&gt;actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;block_sender_domain&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;quarantine_all_instances&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;disable_affected_accounts&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;initiate_forensic_collection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Human Factor
&lt;/h2&gt;

&lt;p&gt;Technical controls catch ~95% of phishing. For the remaining 5%:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Segmented Training&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executives: Focus on whaling/BEC&lt;/li&gt;
&lt;li&gt;Finance: Wire transfer fraud scenarios&lt;/li&gt;
&lt;li&gt;IT: Advanced threat identification&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Realistic Simulations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start simple (fake shipping notifications)&lt;/li&gt;
&lt;li&gt;Gradually increase sophistication&lt;/li&gt;
&lt;li&gt;Use current events (tax season, holidays)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Metrics That Matter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click rate: Target &amp;lt;5%&lt;/li&gt;
&lt;li&gt;Report rate: Target &amp;gt;70%&lt;/li&gt;
&lt;li&gt;Time to report: Target &amp;lt;10 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Quick Wins You Can Implement Today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Email Banners for External Mail&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background:#FFF3CD;border:1px solid #FFEEBA;padding:10px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    ⚠️ EXTERNAL EMAIL: Verify before clicking links or attachments
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dual Authorization for Wire Transfers&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wire_transfer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;require_approval_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authorized_approver_list&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;require_verification_via&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;out_of_band_channel&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;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browser Isolation for High-Risk Users&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Finance team&lt;/li&gt;
&lt;li&gt;Executive assistants&lt;/li&gt;
&lt;li&gt;HR with PII access&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Results After Implementation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phishing success rate&lt;/strong&gt;: 12% → 0.8%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User reporting&lt;/strong&gt;: 15% → 78%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean time to detect&lt;/strong&gt;: 4 hours → 7 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incidents requiring remediation&lt;/strong&gt;: 8/month → 1/month&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Want the Complete Implementation Guide?
&lt;/h2&gt;

&lt;p&gt;I've written a comprehensive guide covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step-by-step DMARC deployment&lt;/li&gt;
&lt;li&gt;Advanced ML detection setup&lt;/li&gt;
&lt;li&gt;Industry-specific configurations&lt;/li&gt;
&lt;li&gt;Incident response procedures&lt;/li&gt;
&lt;li&gt;12-week implementation roadmap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ncse.info/how-to-prevent-phishing-attacks/" rel="noopener noreferrer"&gt;Read the full technical guide here →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;*What's your most effective anti-phishing control? Drop a comment below - always looking to improve our defenses!&lt;/p&gt;

&lt;h1&gt;
  
  
  cybersecurity #phishing #emailsecurity #infosec
&lt;/h1&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>phishing</category>
      <category>email</category>
    </item>
    <item>
      <title>I Spent a Weekend Implementing Post-Quantum Cryptography - Here's What I Learned</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Fri, 13 Jun 2025 14:24:22 +0000</pubDate>
      <link>https://dev.to/zblack/i-spent-a-weekend-implementing-post-quantum-cryptography-heres-what-i-learned-4g9a</link>
      <guid>https://dev.to/zblack/i-spent-a-weekend-implementing-post-quantum-cryptography-heres-what-i-learned-4g9a</guid>
      <description>&lt;p&gt;Last month, our security auditor dropped a bomb during a routine review:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's your post-quantum cryptography migration plan?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The room went silent. Twenty experienced developers and not one of us had a real answer.&lt;/p&gt;

&lt;p&gt;That question sent me down a weekend rabbit hole that fundamentally changed how I think about encryption. If you're like I was vaguely aware that quantum computers might break encryption &lt;em&gt;someday&lt;/em&gt; this post is for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Wake-Up Call
&lt;/h2&gt;

&lt;p&gt;Here's what made me panic: it's not about &lt;strong&gt;when&lt;/strong&gt; quantum computers arrive. It's about &lt;strong&gt;how long&lt;/strong&gt; your data needs to stay secret.&lt;/p&gt;

&lt;p&gt;Current Year: 2025&lt;br&gt;
Data Encryption Lifespan: 20 years&lt;br&gt;
Risk Window: Starting NOW&lt;/p&gt;

&lt;p&gt;Why? Because of &lt;strong&gt;Harvest Now, Decrypt Later (HNDL)&lt;/strong&gt; attacks. Adversaries are already collecting encrypted data, storing it, and waiting for quantum computers powerful enough to decrypt it.&lt;/p&gt;

&lt;p&gt;Your medical records from 2020? That API key you encrypted last year? They're all potentially exposed.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Quantum Threat Timeline
&lt;/h2&gt;

&lt;p&gt;According to research from the Global Risk Institute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;By 2034&lt;/strong&gt;: 17-34% chance of breaking RSA-2048&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;By 2044&lt;/strong&gt;: 79% chance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're encrypting data with 15–20 year lifespans, &lt;strong&gt;you’re already in the danger zone&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  My Weekend Deep Dive
&lt;/h2&gt;

&lt;p&gt;I stopped panicking and started coding. Here's what I learned:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Standards Are Already Here
&lt;/h3&gt;

&lt;p&gt;NIST released their first &lt;strong&gt;quantum-resistant&lt;/strong&gt; algorithms in 2024:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML-KEM&lt;/strong&gt; (formerly CRYSTALS-Kyber) for key encapsulation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ML-DSA&lt;/strong&gt; (formerly CRYSTALS-Dilithium) for digital signatures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SLH-DSA&lt;/strong&gt; (formerly SPHINCS+) for hash-based signatures&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Implementation Is Surprisingly Accessible
&lt;/h3&gt;

&lt;p&gt;I expected complex math, but found usable libraries. Here’s a working example using &lt;a href="https://ncse.info/post-quantum-tools-guide/" rel="noopener noreferrer"&gt;Open Quantum Safe (OQS)&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;oqs/oqs.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;OQS_KEM&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OQS_KEM_new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OQS_KEM_alg_kyber_768&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;public_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length_public_key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;secret_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length_secret_key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;OQS_KEM_keypair&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secret_key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ciphertext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length_ciphertext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;shared_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length_shared_secret&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;OQS_KEM_encaps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ciphertext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shared_secret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;public_key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Generated %zu-byte quantum-safe shared secret&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length_shared_secret&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;OQS_KEM_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Performance Surprised Me
&lt;/h3&gt;

&lt;p&gt;I expected PQC to be slow it wasn’t. Here's what my benchmarks showed:&lt;/p&gt;

&lt;p&gt;Algorithm   Operation   vs RSA-2048&lt;br&gt;
Kyber-768   Key Gen 3× faster&lt;br&gt;
Kyber-768   Encapsulation   2.5× faster&lt;br&gt;
Dilithium-3 Signing 4× faster&lt;br&gt;
Dilithium-3 Verification    2× faster&lt;/p&gt;

&lt;p&gt;Yes, post-quantum crypto can be faster than legacy algorithms.&lt;/p&gt;

&lt;p&gt;The Hybrid Approach (What You Should Do Now)&lt;br&gt;
The smart strategy? Hybrid cryptography combine classical + post-quantum algorithms.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Pseudo-code for hybrid key exchange&lt;/span&gt;
&lt;span class="n"&gt;classical_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ECDH_key_exchange&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;pq_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kyber_key_exchange&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;final_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;KDF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;classical_secret&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;pq_secret&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way:&lt;/p&gt;

&lt;p&gt;You're safe if quantum computers come early&lt;/p&gt;

&lt;p&gt;You're still safe if new PQ algorithms get broken&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Adoption Is Already Happening
&lt;/h2&gt;

&lt;p&gt;This isn't sci-fi. Big players are already shifting:&lt;/p&gt;

&lt;p&gt;AWS: Kyber in Key Management Service&lt;/p&gt;

&lt;p&gt;Google: Chrome testing PQ-TLS&lt;/p&gt;

&lt;p&gt;Cloudflare: PQC deployed across infrastructure&lt;/p&gt;

&lt;p&gt;Signal: Using hybrid key exchange in messaging protocol&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Start now full migration takes years, not months&lt;/p&gt;

&lt;p&gt;Inventory your crypto stack you can’t protect what you don’t know&lt;/p&gt;

&lt;p&gt;Go hybrid combine old and new for safer transitions&lt;/p&gt;

&lt;p&gt;Test early start in dev/test environments&lt;/p&gt;

&lt;p&gt;Stay crypto-agile standards will evolve; your systems should too&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;After my deep dive, I compiled a full implementation guide:&lt;/p&gt;

&lt;p&gt;Working examples of ML-KEM, ML-DSA, SL&lt;/p&gt;

</description>
      <category>security</category>
      <category>cryptography</category>
      <category>quantum</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Post-Quantum Cryptography: A Hands-On Guide for Developers and Infra Teams</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Fri, 13 Jun 2025 14:09:08 +0000</pubDate>
      <link>https://dev.to/zblack/post-quantum-cryptography-a-hands-on-guide-for-developers-and-infra-teams-4bh8</link>
      <guid>https://dev.to/zblack/post-quantum-cryptography-a-hands-on-guide-for-developers-and-infra-teams-4bh8</guid>
      <description>&lt;p&gt;Quantum computing is no longer a far-fetched scenario. Governments and tech giants are racing to build machines that could render current cryptographic systems obsolete. The threat is real and it’s already begun.&lt;/p&gt;

&lt;p&gt;This article walks you through a practical, technical approach to Post-Quantum Cryptography (PQC), including performance benchmarks, hybrid stacks, and a migration readiness calculator.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why It Matters: “Harvest Now, Decrypt Later”
&lt;/h2&gt;

&lt;p&gt;Even if quantum computers can’t break encryption today, attackers are already &lt;strong&gt;stockpiling encrypted data&lt;/strong&gt; with plans to decrypt it in the future.&lt;/p&gt;

&lt;p&gt;This strategy &lt;strong&gt;Harvest Now, Decrypt Later&lt;/strong&gt; is already being used. That means the urgency isn’t theoretical anymore.&lt;/p&gt;




&lt;h2&gt;
  
  
  NIST Finalists: The New PQC Standards
&lt;/h2&gt;

&lt;p&gt;NIST has selected several algorithms for post-quantum cryptography:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ML-KEM&lt;/strong&gt; (key encapsulation, based on Kyber)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ML-DSA&lt;/strong&gt; and &lt;strong&gt;SLH-DSA&lt;/strong&gt; (digital signatures)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These will define future standards for cryptographic safety in TLS, VPNs, and secure messaging protocols.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Benchmark: RSA-2048 vs ML-KEM-768
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;RSA-2048&lt;/th&gt;
&lt;th&gt;ML-KEM-768&lt;/th&gt;
&lt;th&gt;Overhead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keygen&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;0.05ms&lt;/td&gt;
&lt;td&gt;0.0006x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encapsulation&lt;/td&gt;
&lt;td&gt;0.08ms&lt;/td&gt;
&lt;td&gt;0.07ms&lt;/td&gt;
&lt;td&gt;0.875x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decapsulation&lt;/td&gt;
&lt;td&gt;2.4ms&lt;/td&gt;
&lt;td&gt;0.08ms&lt;/td&gt;
&lt;td&gt;0.033x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public Key Size&lt;/td&gt;
&lt;td&gt;256 bytes&lt;/td&gt;
&lt;td&gt;1,184 bytes&lt;/td&gt;
&lt;td&gt;4.6x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ciphertext Size&lt;/td&gt;
&lt;td&gt;256 bytes&lt;/td&gt;
&lt;td&gt;1,088 bytes&lt;/td&gt;
&lt;td&gt;4.25x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; ML-KEM is faster and more efficient for computation but larger in size. For most systems, the performance gain is worth the storage tradeoff.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using Hybrid Cryptographic Stacks
&lt;/h2&gt;

&lt;p&gt;Many cloud providers and browsers now support &lt;strong&gt;hybrid key exchanges&lt;/strong&gt;. This means combining post-quantum and classical algorithms in the same handshake—for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X25519 + ML-KEM&lt;/li&gt;
&lt;li&gt;RSA + ML-DSA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures &lt;strong&gt;backward compatibility&lt;/strong&gt; while adding quantum resistance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Interface-Level Readiness
&lt;/h2&gt;

&lt;p&gt;For engineers and architects, building cryptographic agility means thinking in &lt;strong&gt;versioned APIs&lt;/strong&gt;, &lt;strong&gt;migratable keys&lt;/strong&gt;, and &lt;strong&gt;algorithm-aware interfaces&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PQC isn’t a drop-in replacement. You need systems that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detect algorithm versions&lt;/li&gt;
&lt;li&gt;upgrade encrypted keys&lt;/li&gt;
&lt;li&gt;monitor post-quantum security status&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try the PQC Migration Calculator
&lt;/h2&gt;

&lt;p&gt;Not sure how ready your organization is for PQC?&lt;/p&gt;

&lt;p&gt;This tool will calculate your estimated migration timeline based on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Infrastructure scale&lt;/li&gt;
&lt;li&gt;Primary cryptographic use&lt;/li&gt;
&lt;li&gt;Data sensitivity&lt;/li&gt;
&lt;li&gt;Current readiness&lt;/li&gt;
&lt;li&gt;Technical constraints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://ncse.info/post-quantum-cryptography/#pqc-calculator" rel="noopener noreferrer"&gt;Launch the calculator&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: The Clock Is Ticking
&lt;/h2&gt;

&lt;p&gt;After 18 months of diving into post-quantum crypto, one thing is clear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We're not waiting for quantum computers. We're racing adversaries who already are.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The organizations that survive won’t be the biggest or richest. They’ll be the ones who prepared early, stayed agile, and treated cryptography as a &lt;strong&gt;living system&lt;/strong&gt; not a frozen dependency.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Full article + visuals:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://ncse.info/post-quantum-cryptography/" rel="noopener noreferrer"&gt;https://ncse.info/post-quantum-cryptography/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>security</category>
      <category>blockchain</category>
      <category>devops</category>
    </item>
    <item>
      <title>Post-Quantum Cryptography: A Hands-On Guide for Developers and Infra Teams</title>
      <dc:creator>Zahir Fahmi</dc:creator>
      <pubDate>Wed, 04 Jun 2025 10:32:50 +0000</pubDate>
      <link>https://dev.to/zblack/post-quantum-cryptography-a-hands-on-guide-for-developers-and-infra-teams-5ckg</link>
      <guid>https://dev.to/zblack/post-quantum-cryptography-a-hands-on-guide-for-developers-and-infra-teams-5ckg</guid>
      <description>&lt;p&gt;Quantum computing is no longer a far-fetched scenario. Governments and tech giants are racing to build machines that could render current cryptographic systems obsolete. The threat is real and it’s already begun.&lt;/p&gt;

&lt;p&gt;This article walks you through a practical, technical approach to Post-Quantum Cryptography (PQC), including performance benchmarks, hybrid stacks, and a migration readiness calculator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters: “Harvest Now, Decrypt Later”
&lt;/h2&gt;

&lt;p&gt;Even if quantum computers can’t break encryption today, attackers are already stockpiling encrypted data with plans to decrypt it in the future.&lt;/p&gt;

&lt;p&gt;This strategy Harvest Now, Decrypt Later is already being used. That means the urgency isn’t theoretical anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  NIST Finalists: The New PQC Standards
&lt;/h2&gt;

&lt;p&gt;NIST has selected several algorithms for post-quantum cryptography:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ML-KEM (key encapsulation, based on Kyber)&lt;/li&gt;
&lt;li&gt;ML-DSA and SLH-DSA (digital signatures)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These will define future standards for cryptographic safety in TLS, VPNs, and secure messaging protocols.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Benchmark: RSA-2048 vs ML-KEM-768
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;RSA-2048&lt;/th&gt;
&lt;th&gt;ML-KEM-768&lt;/th&gt;
&lt;th&gt;Overhead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keygen&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;0.05ms&lt;/td&gt;
&lt;td&gt;0.0006x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encapsulation&lt;/td&gt;
&lt;td&gt;0.08ms&lt;/td&gt;
&lt;td&gt;0.07ms&lt;/td&gt;
&lt;td&gt;0.875x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decapsulation&lt;/td&gt;
&lt;td&gt;2.4ms&lt;/td&gt;
&lt;td&gt;0.08ms&lt;/td&gt;
&lt;td&gt;0.033x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public Key Size&lt;/td&gt;
&lt;td&gt;256 bytes&lt;/td&gt;
&lt;td&gt;1,184 bytes&lt;/td&gt;
&lt;td&gt;4.6x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ciphertext Size&lt;/td&gt;
&lt;td&gt;256 bytes&lt;/td&gt;
&lt;td&gt;1,088 bytes&lt;/td&gt;
&lt;td&gt;4.25x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: ML-KEM is faster and more efficient for computation but larger in size. For most systems, the performance gain is worth the storage tradeoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Hybrid Cryptographic Stacks
&lt;/h2&gt;

&lt;p&gt;Many cloud providers and browsers now support hybrid key exchanges. This means combining post-quantum and classical algorithms in the same handshake for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X25519 + ML-KEM&lt;/li&gt;
&lt;li&gt;RSA + ML-DSA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures backward compatibility while adding quantum resistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  PQC Readiness at the Interface Level
&lt;/h2&gt;

&lt;p&gt;For engineers and architects, building cryptographic agility means thinking in versioned APIs, migratable keys, and algorithm-aware interfaces.&lt;/p&gt;

&lt;p&gt;PQC isn’t a drop-in replacement. You need systems that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detect algorithm versions&lt;/li&gt;
&lt;li&gt;upgrade encrypted keys&lt;/li&gt;
&lt;li&gt;monitor post-quantum security status&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PQC Migration Readiness Calculator
&lt;/h2&gt;

&lt;p&gt;Not sure how ready your organization is for PQC?&lt;/p&gt;

&lt;p&gt;Use this tool to calculate your estimated migration timeline based on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Infrastructure scale
&lt;/li&gt;
&lt;li&gt;Cryptographic use case
&lt;/li&gt;
&lt;li&gt;Data sensitivity
&lt;/li&gt;
&lt;li&gt;Current readiness
&lt;/li&gt;
&lt;li&gt;Technical constraints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Try it here: &lt;a href="https://ncse.info/post-quantum-cryptography/#pqc-calculator" rel="noopener noreferrer"&gt;https://ncse.info/post-quantum-cryptography/#pqc-calculator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The Clock Is Ticking
&lt;/h2&gt;

&lt;p&gt;After 18 months of diving into post-quantum crypto, one thing is clear:&lt;/p&gt;

&lt;p&gt;We’re not waiting for quantum computers. We’re racing adversaries who already are.&lt;/p&gt;

&lt;p&gt;The organizations that survive won’t be the biggest or richest. They’ll be the ones who prepared early, stayed agile, and treated cryptography as a living system not a frozen dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full article with visuals:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://ncse.info/post-quantum-cryptography/" rel="noopener noreferrer"&gt;https://ncse.info/post-quantum-cryptography/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>security</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
