{"id":13951,"date":"2026-03-28T01:09:38","date_gmt":"2026-03-28T05:09:38","guid":{"rendered":"https:\/\/spinor.info\/weblog\/?p=13951"},"modified":"2026-03-28T01:09:38","modified_gmt":"2026-03-28T05:09:38","slug":"chatting-with-a-plush-tiger","status":"publish","type":"post","link":"https:\/\/spinor.info\/weblog\/?p=13951","title":{"rendered":"Chatting with a plush tiger"},"content":{"rendered":"<p>Very well, I was not really chatting or conferencing with a toy animal. My wife&#8217;s little tiger just served as a prop, since he was far more likely to stay put than any of our actual miniature tigers, I mean cats.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13952\" src=\"https:\/\/spinor.info\/weblog\/wp-content\/uploads\/2026\/03\/chatting-with-tiger.png\" alt=\"\" width=\"400\" height=\"800\" srcset=\"https:\/\/spinor.info\/weblog\/wp-content\/uploads\/2026\/03\/chatting-with-tiger.png 400w, https:\/\/spinor.info\/weblog\/wp-content\/uploads\/2026\/03\/chatting-with-tiger-150x300.png 150w, https:\/\/spinor.info\/weblog\/wp-content\/uploads\/2026\/03\/chatting-with-tiger-75x150.png 75w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>In any case, the point was not so much who I was chatting with but how: I was doing so using my very own little conferencing service, implemented in half an afternoon with prodigious coding help from Claude.<\/p>\n<p>No, not &#8220;vibe coding&#8221;. I tried &#8220;vibe coding&#8221; and it&#8217;s not my cup of tea. Not because I am a control freak but because I like to know what my applications do and why, and how to fix and debug them. Moreover, I don&#8217;t mind owning the concept. That&#8217;s not the time-consuming part. The time-consuming part is implementation and this is where coding assistants, Claude in particular, excel. Don&#8217;t outsource combinatorial reasoning, like navigating the excessive landscape of design options. Nor do I need a coding agent type commands for me (and, on a bad day, wipe out my code base.) What I need the AI for is to write the routine stuff once the design is settled.<\/p>\n<p>That is exactly what we did here, and the result&#8230; well, works. The concept is simple: Keep everything TCP. Of course TCP is the worst choice for real-time media streaming, except for the alternative: UDP works until it doesn&#8217;t, because it is blocked by a NAT-firewall, a mobile network policy, or something else. In fact, it was my struggle to get things run well in these post-Skype days that led me to my simple (but not simplistic) implementation: sending compressed, differenced video and audio at a bandwidth that remains manageable even with my self-hosted relay host for up to maybe half a dozen users.<\/p>\n<p>The thing works. Granted, so far I only tested it with two users (me and me) but it works robustly and reliably even over a cellular connection. I might soon get a chance to test it with real users, some friends. Until then, I have my plush tiger to talk to.<\/p>\n<p>All in all, 2000+ lines of good quality, working code in half an afternoon. That&#8217;s what a good AI assistant can do under competent supervision.<\/p>\n<fb:like href='https:\/\/spinor.info\/weblog\/?p=13951' send='false' layout='button_count' show_faces='true' width='450' height='65' action='like' colorscheme='light' font='lucida grande'><\/fb:like>","protected":false},"excerpt":{"rendered":"<p>Very well, I was not really chatting or conferencing with a toy animal. My wife&#8217;s little tiger just served as a prop, since he was far more likely to stay put than any of our actual miniature tigers, I mean cats. In any case, the point was not so much who I was chatting with <a href='https:\/\/spinor.info\/weblog\/?p=13951' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[58,6,35,36],"tags":[],"class_list":["post-13951","post","type-post","status-publish","format-standard","hentry","category-cybernetics","category-internet","category-personal","category-programming","category-58-id","category-6-id","category-35-id","category-36-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/posts\/13951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13951"}],"version-history":[{"count":1,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/posts\/13951\/revisions"}],"predecessor-version":[{"id":13953,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=\/wp\/v2\/posts\/13951\/revisions\/13953"}],"wp:attachment":[{"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spinor.info\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}