<?xml version="1.0" encoding="UTF-8"?><rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>All The websocket Shit | Ciprian Mandache</title>
<atom:link href="https://ciprian.51k.eu/tag/websocket/feed/" rel="self" type="application/rss+xml" /><link></link>
<description>Mostly writing code that does stuff...</description>
<lastBuildDate>Wed, 04 Nov 2026 12:17:18 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly	</sy:updatePeriod>
<sy:updateFrequency>
1	</sy:updateFrequency><image>
<url>https://ciprian.51k.eu/upld/2019/02/cropped-terminal-icon-32x32.png</url><title>All The websocket Shit | Ciprian Mandache</title><link></link>
<width>32</width>
<height>32</height>
</image>
<item><title>go-asyncapi: load AsyncAPI 3 specs in Go</title><link>https://ciprian.51k.eu/go-asyncapi-load-asyncapi-3-specs-in-go/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Thu, 15 Oct 2026 21:06:39 +0000</pubDate>
<category><![CDATA[Golang]]></category>
<category><![CDATA[asyncapi]]></category>
<category><![CDATA[claude code]]></category>
<category><![CDATA[code generation]]></category>
<category><![CDATA[ctxerrors]]></category>
<category><![CDATA[event-driven]]></category>
<category><![CDATA[go-asyncapi]]></category>
<category><![CDATA[golang]]></category>
<category><![CDATA[json]]></category>
<category><![CDATA[json schema]]></category>
<category><![CDATA[library]]></category>
<category><![CDATA[package]]></category>
<category><![CDATA[parser]]></category>
<category><![CDATA[websocket]]></category>
<category><![CDATA[yaml]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/go-asyncapi-your-asyncapi-spec-is-a-fucking-graph-wearing-a-yaml-costume/</guid><description><![CDATA[<img
width="300" height="150" src="https://ciprian.51k.eu/upld/2026/10/go-asyncapi-linocut-2-300x150.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/10/go-asyncapi-linocut-2-300x150.jpg 300w, https://ciprian.51k.eu/upld/2026/10/go-asyncapi-linocut-2-768x384.jpg 768w, https://ciprian.51k.eu/upld/2026/10/go-asyncapi-linocut-2-600x300.jpg 600w, https://ciprian.51k.eu/upld/2026/10/go-asyncapi-linocut-2.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />go-asyncapi reads AsyncAPI 3 documents in Go and hands you servers, channels, operations and messages as plain structs, with every $ref on the way to them followed across files, every ...]]></description>
</item>
<item><title>Why am I still hand-typing WebSocket structs from an AsyncAPI spec?</title><link>https://ciprian.51k.eu/gen-asyncapi-why-am-i-still-hand-typing-websocket-structs/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Thu, 15 Oct 2026 18:25:51 +0000</pubDate>
<category><![CDATA[Golang]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[asyncapi]]></category>
<category><![CDATA[cli-tool]]></category>
<category><![CDATA[code generation]]></category>
<category><![CDATA[ctxerrors]]></category>
<category><![CDATA[gen-asyncapi]]></category>
<category><![CDATA[go generate]]></category>
<category><![CDATA[Go programming language]]></category>
<category><![CDATA[go-asyncapi]]></category>
<category><![CDATA[golang]]></category>
<category><![CDATA[json]]></category>
<category><![CDATA[json schema]]></category>
<category><![CDATA[library]]></category>
<category><![CDATA[typescript]]></category>
<category><![CDATA[validation]]></category>
<category><![CDATA[websocket]]></category>
<category><![CDATA[websocket client]]></category>
<category><![CDATA[yaml]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/gen-asyncapi-stop-hand-typing-your-fucking-websocket-structs/</guid><description><![CDATA[<img
width="300" height="150" src="https://ciprian.51k.eu/upld/2026/10/gen-asyncapi-noir-s11-300x150.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/10/gen-asyncapi-noir-s11-300x150.jpg 300w, https://ciprian.51k.eu/upld/2026/10/gen-asyncapi-noir-s11-768x384.jpg 768w, https://ciprian.51k.eu/upld/2026/10/gen-asyncapi-noir-s11-600x300.jpg 600w, https://ciprian.51k.eu/upld/2026/10/gen-asyncapi-noir-s11.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />You shouldn&#8217;t be, because the AsyncAPI spec already says exactly what every message looks like and a machine can retype it better than you. I wrote gen-asyncapi so an AsyncAPI ...]]></description>
</item>
<item><title>Dikciz: An Android Launcher, Automation Runtime and AI Control Plane</title><link>https://ciprian.51k.eu/dikciz-launcher-versus-a-stock-launcher-with-tasker-bolted-on/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Wed, 07 Oct 2026 19:06:22 +0000</pubDate>
<category><![CDATA[AI Tooling]]></category>
<category><![CDATA[Mobile]]></category>
<category><![CDATA[adb]]></category>
<category><![CDATA[ai agent]]></category>
<category><![CDATA[AI Assistant]]></category>
<category><![CDATA[android]]></category>
<category><![CDATA[android app]]></category>
<category><![CDATA[android lab]]></category>
<category><![CDATA[android sdk]]></category>
<category><![CDATA[anthropic]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[Automation]]></category>
<category><![CDATA[dikciz]]></category>
<category><![CDATA[docker]]></category>
<category><![CDATA[emulator]]></category>
<category><![CDATA[fossify]]></category>
<category><![CDATA[gradle]]></category>
<category><![CDATA[home screen]]></category>
<category><![CDATA[html widgets]]></category>
<category><![CDATA[http]]></category>
<category><![CDATA[javascript]]></category>
<category><![CDATA[kotlin]]></category>
<category><![CDATA[launcher]]></category>
<category><![CDATA[lua]]></category>
<category><![CDATA[mcp]]></category>
<category><![CDATA[mobile]]></category>
<category><![CDATA[openai]]></category>
<category><![CDATA[sandbox]]></category>
<category><![CDATA[Speech Recognition]]></category>
<category><![CDATA[sqlite]]></category>
<category><![CDATA[websocket]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/dikciz-launcher-an-android-launcher-you-can-script-grep-and-hand-to-a-fucking-ai-agent/</guid><description><![CDATA[<img
width="300" height="150" src="https://ciprian.51k.eu/upld/2026/10/dikciz-logo-featured-300x150.png" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/10/dikciz-logo-featured-300x150.png 300w, https://ciprian.51k.eu/upld/2026/10/dikciz-logo-featured-768x384.png 768w, https://ciprian.51k.eu/upld/2026/10/dikciz-logo-featured-600x300.png 600w, https://ciprian.51k.eu/upld/2026/10/dikciz-logo-featured.png 1024w" sizes="(max-width: 300px) 100vw, 300px" />Dikciz is an Android launcher, automation runtime and AI control plane in one APK. Install it, choose it as Home, and you get a file-backed home screen you can edit ...]]></description>
</item>
<item><title>peen: A Coding Agent Server That Does Not Die With Your Terminal</title><link>https://ciprian.51k.eu/peen-coding-agent-crashed-work-stayed-put/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Mon, 07 Sep 2026 20:41:36 +0000</pubDate>
<category><![CDATA[AI Agents]]></category>
<category><![CDATA[Golang]]></category>
<category><![CDATA[agentic coding]]></category>
<category><![CDATA[agents]]></category>
<category><![CDATA[ai agent]]></category>
<category><![CDATA[aichteeteapee]]></category>
<category><![CDATA[anthropic]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[asyncapi]]></category>
<category><![CDATA[Automation]]></category>
<category><![CDATA[cli-tool]]></category>
<category><![CDATA[code agent]]></category>
<category><![CDATA[container]]></category>
<category><![CDATA[crash recovery]]></category>
<category><![CDATA[docker]]></category>
<category><![CDATA[durable workflows]]></category>
<category><![CDATA[gen-asyncapi]]></category>
<category><![CDATA[github actions]]></category>
<category><![CDATA[go-workflows]]></category>
<category><![CDATA[golang]]></category>
<category><![CDATA[multi-agent]]></category>
<category><![CDATA[openapi]]></category>
<category><![CDATA[peen]]></category>
<category><![CDATA[prompt injection]]></category>
<category><![CDATA[rest api]]></category>
<category><![CDATA[security]]></category>
<category><![CDATA[server]]></category>
<category><![CDATA[Skills]]></category>
<category><![CDATA[sqlite]]></category>
<category><![CDATA[svelte]]></category>
<category><![CDATA[typescript]]></category>
<category><![CDATA[websocket]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/peen-coding-agent-crashed-work-stayed-put/</guid><description><![CDATA[<img
width="300" height="150" src="https://ciprian.51k.eu/upld/2026/09/peen-feature-300x150.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="Constructivist illustration of an intact archive reel beside a collapsed machine" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/09/peen-feature-300x150.jpg 300w, https://ciprian.51k.eu/upld/2026/09/peen-feature-768x384.jpg 768w, https://ciprian.51k.eu/upld/2026/09/peen-feature-600x300.jpg 600w, https://ciprian.51k.eu/upld/2026/09/peen-feature.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />Peen is a self-hosted coding agent server. You point it at a project directory, give it a model and talk to it from a browser or terminal. It can read ...]]></description>
</item>
<item><title>essessey: Stream a Turn Anywhere Without Rewriting It</title><link>https://ciprian.51k.eu/essessey-stream-a-turn-anywhere-without-rewriting-it/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Wed, 05 Aug 2026 15:52:01 +0000</pubDate>
<category><![CDATA[AI Tooling]]></category>
<category><![CDATA[Golang]]></category>
<category><![CDATA[ai]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[elelem]]></category>
<category><![CDATA[essessey]]></category>
<category><![CDATA[Go programming language]]></category>
<category><![CDATA[golang]]></category>
<category><![CDATA[library]]></category>
<category><![CDATA[llm]]></category>
<category><![CDATA[nats]]></category>
<category><![CDATA[Open Source]]></category>
<category><![CDATA[package]]></category>
<category><![CDATA[protocol]]></category>
<category><![CDATA[reasoning]]></category>
<category><![CDATA[sse]]></category>
<category><![CDATA[streaming]]></category>
<category><![CDATA[websocket]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/?p=1364</guid><description><![CDATA[<img
width="300" height="150" src="https://ciprian.51k.eu/upld/2026/08/essessey-300x150.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/08/essessey-300x150.jpg 300w, https://ciprian.51k.eu/upld/2026/08/essessey-768x384.jpg 768w, https://ciprian.51k.eu/upld/2026/08/essessey-600x300.jpg 600w, https://ciprian.51k.eu/upld/2026/08/essessey.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />The first version streamed over SSE. Then something needed the same turn over NATS, and I found out I&#8217;d built the framing into the wrong layer. event: / data: / ...]]></description>
</item>
<item><title>talkies: Tell OpenAI&#8217;s Speech API to Go Fuck Itself</title><link>https://ciprian.51k.eu/talkies-tell-openais-speech-api-to-go-fuck-itself/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Sat, 30 May 2026 09:00:00 +0000</pubDate>
<category><![CDATA[AI]]></category>
<category><![CDATA[Containers]]></category>
<category><![CDATA[Python]]></category>
<category><![CDATA[ai]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[asr]]></category>
<category><![CDATA[audio processing]]></category>
<category><![CDATA[codex]]></category>
<category><![CDATA[container]]></category>
<category><![CDATA[cuda]]></category>
<category><![CDATA[docker]]></category>
<category><![CDATA[gpu]]></category>
<category><![CDATA[kokoro]]></category>
<category><![CDATA[mcp]]></category>
<category><![CDATA[openai compatible]]></category>
<category><![CDATA[parakeet]]></category>
<category><![CDATA[phoneme recognition]]></category>
<category><![CDATA[python]]></category>
<category><![CDATA[rest api]]></category>
<category><![CDATA[self-hosted]]></category>
<category><![CDATA[Speech Recognition]]></category>
<category><![CDATA[speech-to-text]]></category>
<category><![CDATA[streaming]]></category>
<category><![CDATA[talkies]]></category>
<category><![CDATA[text to speech]]></category>
<category><![CDATA[tts]]></category>
<category><![CDATA[voice cloning]]></category>
<category><![CDATA[websocket]]></category>
<category><![CDATA[whisper]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/talkies-tell-openais-speech-api-to-go-fuck-itself/</guid><description><![CDATA[<img
width="300" height="300" src="https://ciprian.51k.eu/upld/2026/05/talkies-300x300.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/05/talkies-300x300.jpg 300w, https://ciprian.51k.eu/upld/2026/05/talkies-150x150.jpg 150w, https://ciprian.51k.eu/upld/2026/05/talkies-768x768.jpg 768w, https://ciprian.51k.eu/upld/2026/05/talkies.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />I got the OpenAI Whisper API bill for a month of hooking my own tooling up to it and just sat there staring at the number like it had personally ...]]></description>
</item>
<item><title>aichteeteapee: A Go HTTP Library Named By Someone Who Thinks Spelling Things Out Is Funny</title><link>https://ciprian.51k.eu/aichteeteapee-a-go-http-library-named-by-someone-who-thinks-spelling-things-out-is-funny/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Sat, 18 Apr 2026 04:24:37 +0000</pubDate>
<category><![CDATA[Golang]]></category>
<category><![CDATA[aichteeteapee]]></category>
<category><![CDATA[api]]></category>
<category><![CDATA[context]]></category>
<category><![CDATA[Go programming language]]></category>
<category><![CDATA[golang]]></category>
<category><![CDATA[http]]></category>
<category><![CDATA[library]]></category>
<category><![CDATA[middleware]]></category>
<category><![CDATA[Open Source]]></category>
<category><![CDATA[request context]]></category>
<category><![CDATA[server]]></category>
<category><![CDATA[websocket]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/?p=1161</guid><description><![CDATA[<img
width="300" height="295" src="https://ciprian.51k.eu/upld/2026/04/D4cxln0-f1c9d0d2-1a40-4de5-b9fd-9551ea38a6ef-300x295.webp" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/04/D4cxln0-f1c9d0d2-1a40-4de5-b9fd-9551ea38a6ef-300x295.webp 300w, https://ciprian.51k.eu/upld/2026/04/D4cxln0-f1c9d0d2-1a40-4de5-b9fd-9551ea38a6ef-1024x1005.webp 1024w, https://ciprian.51k.eu/upld/2026/04/D4cxln0-f1c9d0d2-1a40-4de5-b9fd-9551ea38a6ef-768x754.webp 768w, https://ciprian.51k.eu/upld/2026/04/D4cxln0-f1c9d0d2-1a40-4de5-b9fd-9551ea38a6ef.webp 1200w" sizes="(max-width: 300px) 100vw, 300px" />Say it out loud: aichteeteapee. Go on. Sound it out. Aitch-tee-tee-pee. Yeah. That&#8217;s HTTP. I named my Go HTTP library by spelling &#8220;HTTP&#8221; phonetically and published it with a straight ...]]></description>
</item>
<item><title>aigate: Your Own Fucking AI Infrastructure</title><link>https://ciprian.51k.eu/aigate-your-own-ai-infrastructure/</link>
<dc:creator><![CDATA[Ciprian Mandache]]></dc:creator>
<pubDate>Sat, 18 Apr 2026 01:41:24 +0000</pubDate>
<category><![CDATA[AI]]></category>
<category><![CDATA[Containers]]></category>
<category><![CDATA[ai agent]]></category>
<category><![CDATA[ai gateway]]></category>
<category><![CDATA[ai infrastructure]]></category>
<category><![CDATA[ai skill]]></category>
<category><![CDATA[aigate]]></category>
<category><![CDATA[asr]]></category>
<category><![CDATA[audio processing]]></category>
<category><![CDATA[audiolla]]></category>
<category><![CDATA[browser automation]]></category>
<category><![CDATA[cerebras]]></category>
<category><![CDATA[claude code]]></category>
<category><![CDATA[clawhub]]></category>
<category><![CDATA[cloudflare tunnel]]></category>
<category><![CDATA[code execution]]></category>
<category><![CDATA[codex]]></category>
<category><![CDATA[cuda]]></category>
<category><![CDATA[deepseek]]></category>
<category><![CDATA[docker]]></category>
<category><![CDATA[flickies]]></category>
<category><![CDATA[Forecasting]]></category>
<category><![CDATA[free ai]]></category>
<category><![CDATA[gemma]]></category>
<category><![CDATA[gpu]]></category>
<category><![CDATA[groq]]></category>
<category><![CDATA[image-generation]]></category>
<category><![CDATA[librechat]]></category>
<category><![CDATA[lipsync]]></category>
<category><![CDATA[litellm]]></category>
<category><![CDATA[local ai]]></category>
<category><![CDATA[mailbox]]></category>
<category><![CDATA[mcp]]></category>
<category><![CDATA[meta-search]]></category>
<category><![CDATA[mtproto]]></category>
<category><![CDATA[nginx]]></category>
<category><![CDATA[nvidia]]></category>
<category><![CDATA[object-storage]]></category>
<category><![CDATA[ollama]]></category>
<category><![CDATA[openai compatible]]></category>
<category><![CDATA[pi-coding-agent]]></category>
<category><![CDATA[pibox]]></category>
<category><![CDATA[piston]]></category>
<category><![CDATA[predictalot]]></category>
<category><![CDATA[redis]]></category>
<category><![CDATA[reverse proxy]]></category>
<category><![CDATA[s3]]></category>
<category><![CDATA[searxng]]></category>
<category><![CDATA[self-hosted]]></category>
<category><![CDATA[speech-to-text]]></category>
<category><![CDATA[stable-diffusion]]></category>
<category><![CDATA[streaming]]></category>
<category><![CDATA[tailscale]]></category>
<category><![CDATA[talkies]]></category>
<category><![CDATA[telethon]]></category>
<category><![CDATA[text to speech]]></category>
<category><![CDATA[userbot]]></category>
<category><![CDATA[video processing]]></category>
<category><![CDATA[web-search]]></category>
<category><![CDATA[websocket]]></category>
<guid
isPermaLink="false">https://ciprian.51k.eu/?p=1145</guid><description><![CDATA[<img
width="300" height="226" src="https://ciprian.51k.eu/upld/2026/04/ai-generated-8186825_1280-300x226.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" style="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" srcset="https://ciprian.51k.eu/upld/2026/04/ai-generated-8186825_1280-300x226.jpg 300w, https://ciprian.51k.eu/upld/2026/04/ai-generated-8186825_1280-1024x771.jpg 1024w, https://ciprian.51k.eu/upld/2026/04/ai-generated-8186825_1280-768x578.jpg 768w, https://ciprian.51k.eu/upld/2026/04/ai-generated-8186825_1280.jpg 1280w" sizes="(max-width: 300px) 100vw, 300px" />A 3060 and no cloud budget. AI models behind one endpoint: five cloud providers with free tiers, five local engines that run on your own hardware, the rest on subscription ...]]></description>
</item>
</channel>
</rss>
<!--
*** This site runs WP Super Minify plugin v2.0.1 - http://wordpress.org/plugins/wp-super-minify ***
*** Total size saved: 3.517% | Size before compression: 21949 bytes | Size after compression: 21177 bytes. ***
-->