<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Lázaro de Pina Ramos — Notes</title>
  <id>https://lazaroramos.com/blog</id>
  <link rel="alternate" type="text/html" href="https://lazaroramos.com/blog"/>
  <link rel="self" type="application/atom+xml" href="https://lazaroramos.com/blog/feed.xml"/>
  <updated>2026-08-12T00:00:00Z</updated>
  <author><name>Lázaro de Pina Ramos</name></author>
  <entry>
    <title>D1: bound params exclude multi-statement SQL</title>
    <id>https://lazaroramos.com/blog/d1-bound-params-and-multi-statement-sql</id>
    <link rel="alternate" type="text/html" href="https://lazaroramos.com/blog/d1-bound-params-and-multi-statement-sql"/>
    <published>2026-08-12T00:00:00Z</published>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary type="text">Cloudflare D1 answers &quot;params with multiple statements is not supported&quot;. What that costs you, and how to order writes so a half-failure is recoverable.</summary>
  </entry>
  <entry>
    <title>speechSynthesis cannot be captured</title>
    <id>https://lazaroramos.com/blog/speechsynthesis-cannot-be-captured</id>
    <link rel="alternate" type="text/html" href="https://lazaroramos.com/blog/speechsynthesis-cannot-be-captured"/>
    <published>2026-08-12T00:00:00Z</published>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary type="text">The Web Speech API hands you no MediaStreamTrack, so a spoken translation can never go into a WebRTC sender. Here is the route that does work.</summary>
  </entry>
  <entry>
    <title>srcObject is DOM state, not a prop</title>
    <id>https://lazaroramos.com/blog/srcobject-is-dom-state-not-a-prop</id>
    <link rel="alternate" type="text/html" href="https://lazaroramos.com/blog/srcobject-is-dom-state-not-a-prop"/>
    <published>2026-08-12T00:00:00Z</published>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary type="text">The self-view goes black while the other side sees you perfectly. React never restores srcObject, and binding it once inside getUserMedia misses.</summary>
  </entry>
  <entry>
    <title>Translator.create needs a real click</title>
    <id>https://lazaroramos.com/blog/translator-api-needs-a-click</id>
    <link rel="alternate" type="text/html" href="https://lazaroramos.com/blog/translator-api-needs-a-click"/>
    <published>2026-08-12T00:00:00Z</published>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary type="text">Chrome's Translator API requires transient user activation whenever the language pack still has to download, which is every fresh profile. Warm it in the click.</summary>
  </entry>
</feed>
