mathstodon.xyz is one of the many independent Mastodon servers you can use to participate in the fediverse.
A Mastodon instance for maths people. We have LaTeX rendering in the web interface!

Server stats:

2.7K
active users

#websocket

1 post1 participant0 posts today
Pomax<p>I've released v6.0.0 of Socketless, the <a href="https://mastodon.social/tags/Websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Websocket</span></a> based <a href="https://mastodon.social/tags/Javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Javascript</span></a> <a href="https://mastodon.social/tags/RPC" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RPC</span></a> library where you never write any RPC or websocket code, because you should not have to care.</p><p>Get it over on <a href="https://www.npmjs.com/package/socketless" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="">npmjs.com/package/socketless</span><span class="invisible"></span></a> and see <a href="https://github.com/Pomax/socketless/blob/main/docs/CHANGELOG.md" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/Pomax/socketless/bl</span><span class="invisible">ob/main/docs/CHANGELOG.md</span></a> for the changes.</p>
Aral Balkan<p>New Kitten release 🎉</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>• New: Lovely new icons¹ and new callouts in Kitten Settings²</p><p>• New: Markdown now supports attributes and bracketed spans³</p><p>• New: client-side `kitten` global with `trigger` function for triggering events on the server from the client. (Useful when streaming client-side JavaScript when using Kitten’s Streaming HTML⁴ workflow. e.g., when you have to use a client-only web API like the Clipboard API but you want to keep all your logic on your server-side page.⁵)</p><p>• Fixed: The bound render function returned by `KittenComponent` class’s `component` getter now correctly awaits asynchronous templates. (In Kitten, you don’t have to care whether your templates contain promises. Kitten handles all that for you.)</p><p>Enjoy! :kitten:💕</p><p>¹ <a href="https://kitten.small-web.org/reference/#icons" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#icons</span></a></p><p>² <a href="https://mastodon.ar.al/@aral/114381983893061099" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.ar.al/@aral/114381983</span><span class="invisible">893061099</span></a></p><p>³ <a href="https://kitten.small-web.org/reference/#markdown-support" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#markdown-support</span></a> (also see <a href="https://mastodon.ar.al/@aral/114381462302862256" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.ar.al/@aral/114381462</span><span class="invisible">302862256</span></a>)</p><p>⁴ <a href="https://kitten.small-web.org/tutorials/streaming-html/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/streaming-html/</span></a></p><p>⁵ e.g., See how I use this to implement a copy to clipboard button in the database page of Kitten’s Settings: <a href="https://codeberg.org/kitten/app/src/branch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/db/index.page.js#L33" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/kitten/app/src/br</span><span class="invisible">anch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/db/index.page.js#L33</span></a> Of course, you don’t have to use this and you can just write client-side JavaScript or use the built-in Alpine.js integration. e.g., how I do it on the (older) settings/identity page: <a href="https://codeberg.org/kitten/app/src/branch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/identity/index.page.js#L7" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/kitten/app/src/br</span><span class="invisible">anch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/identity/index.page.js#L7</span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/markdown" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>markdown</span></a> <a href="https://mastodon.ar.al/tags/icons" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>icons</span></a> <a href="https://mastodon.ar.al/tags/PhosphorIcons" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PhosphorIcons</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a></p>
Neustradamus :xmpp: :linux:<p><a href="https://mastodon.social/tags/curl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>curl</span></a> 8.13.0 has been released (<a href="https://mastodon.social/tags/libcurl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>libcurl</span></a> / <a href="https://mastodon.social/tags/Haxx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Haxx</span></a> / <a href="https://mastodon.social/tags/DICT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DICT</span></a> / <a href="https://mastodon.social/tags/FILE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FILE</span></a> / <a href="https://mastodon.social/tags/FTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FTP</span></a> / <a href="https://mastodon.social/tags/FTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FTPS</span></a> / <a href="https://mastodon.social/tags/Gopher" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Gopher</span></a> / <a href="https://mastodon.social/tags/HTTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP</span></a> / <a href="https://mastodon.social/tags/HTTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTPS</span></a> / <a href="https://mastodon.social/tags/IMAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IMAP</span></a> / <a href="https://mastodon.social/tags/IMAPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IMAPS</span></a> / <a href="https://mastodon.social/tags/LDAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LDAP</span></a> / <a href="https://mastodon.social/tags/LDAPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LDAPS</span></a> / <a href="https://mastodon.social/tags/MQTT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MQTT</span></a> / <a href="https://mastodon.social/tags/POP3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>POP3</span></a> / <a href="https://mastodon.social/tags/POP3S" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>POP3S</span></a> / <a href="https://mastodon.social/tags/RTMP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTMP</span></a> / <a href="https://mastodon.social/tags/RTMPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTMPS</span></a> / <a href="https://mastodon.social/tags/RTSP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTSP</span></a> / <a href="https://mastodon.social/tags/SCP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SCP</span></a> / <a href="https://mastodon.social/tags/SFTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SFTP</span></a> / <a href="https://mastodon.social/tags/SMB" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMB</span></a> / <a href="https://mastodon.social/tags/SMBS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMBS</span></a> / <a href="https://mastodon.social/tags/SMTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMTP</span></a> / <a href="https://mastodon.social/tags/SMTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMTPS</span></a> / <a href="https://mastodon.social/tags/Telnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Telnet</span></a> / <a href="https://mastodon.social/tags/TFTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TFTP</span></a> / <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> / <a href="https://mastodon.social/tags/SOCKS4" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SOCKS4</span></a> / <a href="https://mastodon.social/tags/SOCKS5" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SOCKS5</span></a> / <a href="https://mastodon.social/tags/SCRAM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SCRAM</span></a> / <a href="https://mastodon.social/tags/TLS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TLS</span></a> / <a href="https://mastodon.social/tags/HTTP2" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP2</span></a> / <a href="https://mastodon.social/tags/HTTP3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP3</span></a>) <a href="https://curl.se/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">curl.se/</span><span class="invisible"></span></a></p>
oneM2M-The Global IoT Standard<p>If you are a <a href="https://c.im/tags/developer" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>developer</span></a> and need to combine several <a href="https://c.im/tags/protocol" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>protocol</span></a> <a href="https://c.im/tags/bindings" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>bindings</span></a> for an <a href="https://c.im/tags/IoT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IoT</span></a> system, the ACME-CSE provides a great environment for learning and experimentation <a href="https://acmecse.net/home/Supported/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">acmecse.net/home/Supported/</span><span class="invisible"></span></a> <a href="https://c.im/tags/CoAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CoAP</span></a> <a href="https://c.im/tags/http" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>http</span></a> <a href="https://c.im/tags/MQTT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MQTT</span></a> <a href="https://c.im/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a></p>
Alexey Skobkin<p>Блин, у меня какая-от непонятная херота с WebSocket соединениями на моём GoToSocial.</p><p>Альтернативные мастодон-морды не могут подключиться к вебсокету. А ручной коннект через создание вебсокета в консоли браузера - срабатывает.</p><p>При этом при WS-коннекте из того же Masto-FE Standalone (GTS flavor) я вижу, что в заголовках запроса улетает <code>sec-websocket-protocol</code> равный моему токену, который и так передаётся в урле при подключении:</p><pre><code>/api/v1/streaming?access_token=&lt;my_token_here&gt; </code></pre><p>И это очень странно. Потому что <code>sec-websocket-protocol</code> так-то вроде вообще не для этого.</p><p>Соответственно, если я попытаюсь воспроизвести руками и сделать примено так:</p><pre><code>new WebSocket( "wss://gts.skobk.in/api/v1/streaming?access_token=&lt;your_token&gt;", "&lt;your_token&gt;" ); </code></pre><p>То получу аналогичный результат с проблемой соединения.</p><p>Но вот какого хера это происходит - неясно.</p><p>Тем временем не факт, что проблема только в этом. В Phanpy при этом заголовка такого в запросе нет, но результат - такой же.</p><p>Со стороны GTS же я вижу такое:</p><pre><code>gotosocial | timestamp="13/04/2025 03:01:29.171" func=streaming.(*Module).handleWSConn level=INFO streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="opened websocket connection" ... gotosocial | timestamp="13/04/2025 03:01:34.214" func=streaming.(*Module).readFromWSConn level=ERROR streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="error during websocket read: websocket: close 1006 (abnormal closure): unexpected EOF" gotosocial | timestamp="13/04/2025 03:01:34.214" func=streaming.(*Module).handleWSConn level=INFO streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="closed websocket connection" </code></pre><p>Хотелось бы подумать, что "да это просто Nginx не настроен!", но:</p><ul><li>Руками-то сокет создаётся и переходит в статус <code>101</code></li><li>Другие сервисы с подобным конфигом работают нормально на этом же сервере</li></ul><p><a href="https://gts.skobk.in/tags/wtf" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WTF</span></a> <a href="https://gts.skobk.in/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://gts.skobk.in/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://gts.skobk.in/tags/gotosocial" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GoToSocial</span></a> <a href="https://gts.skobk.in/tags/log" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>log</span></a> <a href="https://gts.skobk.in/tags/fail" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FAIL</span></a></p>
Adam Nelson<p>It's 2025, and there's still no widely-used standardized RPC protocol for <a href="https://fosstodon.org/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a>.</p><p>I've looked from time to time, and I never find anything. WAMP is perhaps the closest, but it's massively complex, needs a separate router, and the company that "owns" it (Crossbar) is dead.</p><p>What else is there? I see the occasional attempt at JSON-RPC or gRPC over WebSocket, but each implementation is unique and nonstandard. I'm half considering writing my own based on Lexicon (w/o the <a href="https://fosstodon.org/tags/ATProto" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ATProto</span></a> XRPC baggage).</p>
Chris Woody Woodruff<p>Live updates without the hassle? Yes, please. With HTMX and Razor Pages, you can sprinkle real-time magic using SSE—no WebSocket setup is required. Check out how to keep your UI fresh and reactive: <a href="https://woodruff.dev/real-time-magic-live-updates-with-htmx-and-asp-net-razor-pages/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">woodruff.dev/real-time-magic-l</span><span class="invisible">ive-updates-with-htmx-and-asp-net-razor-pages/</span></a></p><p><a href="https://mastodon.social/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.social/tags/aspnetcore" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>aspnetcore</span></a> <a href="https://mastodon.social/tags/webdev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdev</span></a> <a href="https://mastodon.social/tags/ux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ux</span></a> <a href="https://mastodon.social/tags/realtime" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>realtime</span></a> <a href="https://mastodon.social/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://mastodon.social/tags/sse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sse</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E09: Controlling apps via a Web UI using WebSocket</p><p><a href="https://www.youtube.com/live/DR1ay0WR418?si=jiwwiKraMf7WgWXE" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/DR1ay0WR418?s</span><span class="invisible">i=jiwwiKraMf7WgWXE</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E08: Multiplayer Installation using WebSocket</p><p><a href="https://www.youtube.com/live/GtKx2v5Egxw?si=Y_C333EjM0P45xea" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/GtKx2v5Egxw?s</span><span class="invisible">i=Y_C333EjM0P45xea</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E07: Talking to an API via WebSocket</p><p><a href="https://www.youtube.com/live/TTvkQgGZfZw?si=tBfqQOSQ5Aq4LTGM" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/TTvkQgGZfZw?s</span><span class="invisible">i=tBfqQOSQ5Aq4LTGM</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
Aral Balkan<p>New Kitten Release</p><p>• Automatic message routing: if the element that triggers an event on the client does not have a `name` attribute, Kitten now falls back to using its `id` instead to route the event to the correct server-side event handler on your live Kitten pages. </p><p>If neither attribute exists, Kitten will fail to route the message but no longer crash as it was due to a regression introduced when I implemented support for colons in element names.¹</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>For more details on Kitten’s live pages and automatic message routing, please see the Streaming HTML tutorial:</p><p><a href="https://kitten.small-web.org/tutorials/streaming-html/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/streaming-html/</span></a></p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ A colon in an element name is ignored for message routing purposes, letting you, for example, give unique names to &lt;details&gt; elements, allowing more than one to be open at a time, while having their events be handled by the same handler.</p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/beautifulDefaults" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>beautifulDefaults</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a></p>
JSDev Space<p>WebSocket vs Socket.IO: Real-Time Communication Guide <a href="https://jsdev.space/websocket-socketio/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">jsdev.space/websocket-socketio/</span><span class="invisible"></span></a> <a href="https://mastodon.social/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://mastodon.social/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://mastodon.social/tags/socketio" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>socketio</span></a></p>
Aral Balkan<p>New Kitten release</p><p>• Fixes issue with routes where dynamic routes with file names that had more than two extensions were not recognised as the correct type of route. e.g., A route called index.xml.get.js would previously have been treated as a static route instead of a dynamic GET route.</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>For more details, see the Valid File Types section of the Kitten reference¹ and the Dynamic Pages tutorial².</p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ <a href="https://kitten.small-web.org/reference/#valid-file-types" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#valid-file-types</span></a><br>² <a href="https://kitten.small-web.org/tutorials/dynamic-pages/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/dynamic-pages/</span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/server" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>server</span></a> <a href="https://mastodon.ar.al/tags/framework" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>framework</span></a> <a href="https://mastodon.ar.al/tags/kit" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>kit</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/routing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>routing</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a></p>
Symfony Station 🇺🇦🇨🇦🇬🇱<p>Golems GABB: Drupal and WebSocket for Real-time Data Rendering. <a href="https://drupal.community/tags/drupal" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>drupal</span></a> <a href="https://drupal.community/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a><br><a href="https://gole.ms/blog/drupal-and-websocket-real-time-data-rendering" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">gole.ms/blog/drupal-and-websoc</span><span class="invisible">ket-real-time-data-rendering</span></a></p>
Aral Balkan<p>New Kitten release</p><p>• You can now use key paths in the names of your client-side live components and these will automatically be transformed into object hierarchies on the server for you.¹</p><p>• Self heals zombie live pages (see Streaming HTML workflow²) if they return to life due to client-side browser cache.³</p><p>• Removes htmx⁴ headers from `data` property into separate `header` property in Kitten Page events and the data your Kitten Page message handlers receive.</p><p>• Automatically passes references to the live page object (if any) and the request and response objects to the layout templates of Markdown pages⁵ (so you can, for example, check if `request.session.authenticated`⁶ is true from the your layout template and customise the layout accordingly).</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ e.g., See <a href="https://codeberg.org/small-tech/site/src/branch/kitten/admin%F0%9F%94%92/news/index_%5Boptional-postId%5D.page.js#L356" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/small-tech/site/s</span><span class="invisible">rc/branch/kitten/admin%F0%9F%94%92/news/index_%5Boptional-postId%5D.page.js#L356</span></a> (markup) and <a href="https://codeberg.org/small-tech/site/src/branch/kitten/admin%F0%9F%94%92/news/index_%5Boptional-postId%5D.page.js#L173" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/small-tech/site/s</span><span class="invisible">rc/branch/kitten/admin%F0%9F%94%92/news/index_%5Boptional-postId%5D.page.js#L173</span></a> (handler) and <a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/database.js#L95" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/small-tech/site/s</span><span class="invisible">rc/branch/kitten/app_modules/database/database.js#L95</span></a> (model class method). </p><p>² See Streaming HTML tutorial: <a href="https://kitten.small-web.org/tutorials/streaming-html/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/streaming-html/</span></a> (There’s actually more to it now but I haven’t had a chance to document the new class-based and event-driven live page workflow yet. It’s experimental but working very well for me so far so I will do so shortly.)</p><p>³ When a person leaves a live/connected page (a page connected to its default web socket), we clean up and remove that live page from memory. However, browsers being what they are, cache the page on the client. If a person uses the back/forward buttons to return to the page, the browser will serve the cached source from memory, which has the old page ID, for the page that no longer exists in Kitten’s memory. So now we have a problem. The only way to recover from this is to tell the page to reload itself. So we accept the WebSocket connection, send a command to the page for it to reload itself, and then close the socket. That makes the stale page self heal by replacing itself with a fresh one. Yay, go us!</p><p>⁴ HTMX: <a href="https://htmx.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">htmx.org</span><span class="invisible"></span></a></p><p>⁵ Kitten Markdown pages reference: <a href="https://kitten.small-web.org/reference/#markdown-pages-page-md-files" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#markdown-pages-page-md-files</span></a></p><p>⁶ See Session tutorial: <a href="https://kitten.small-web.org/tutorials/sessions/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/sessions/</span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/HTMX" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTMX</span></a> <a href="https://mastodon.ar.al/tags/Markdown" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Markdown</span></a> <a href="https://mastodon.ar.al/tags/sessions" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sessions</span></a> <a href="https://mastodon.ar.al/tags/data" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>data</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a></p>
Burton Nurnie<p>Does anyone here have experience with the <a href="https://jorts.horse/tags/azure" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>azure</span></a> cognitive services <a href="https://jorts.horse/tags/api" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>api</span></a> in the browser client? I'm getting an unexplainable <a href="https://jorts.horse/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> error 1006 that's only happening to my user in certain circumstances, and the reason is `undefined`</p><p>I'm confident it's not a bad key, because the same code and deployment works for another user. </p><p><a href="https://jorts.horse/tags/boosts" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>boosts</span></a> welcome, <a href="https://jorts.horse/tags/help" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>help</span></a> please! This is for a <a href="https://jorts.horse/tags/FOSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FOSS</span></a> accessibility project.</p>
Línea de Código<p>Websocket Echo en Java EE <a href="https://lineadecodigo.com/java/websocket-echo-en-java-ee/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">lineadecodigo.com/java/websock</span><span class="invisible">et-echo-en-java-ee/</span></a> por @victor_cuervo <a href="https://mastodon.social/tags/java" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>java</span></a> <a href="https://mastodon.social/tags/javaee" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javaee</span></a> <a href="https://mastodon.social/tags/jakarta" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jakarta</span></a> <a href="https://mastodon.social/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://mastodon.social/tags/webapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webapi</span></a> <a href="https://mastodon.social/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
Aral Balkan<p>May I just say so myself that I‘m loving playing with Kitten¹ to build Domain² (shown below) and Place³.</p><p>¹ <a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a><br>² <a href="https://codeberg.org/domain/app" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">codeberg.org/domain/app</span><span class="invisible"></span></a><br>³ <a href="https://codeberg.org/place/app" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">codeberg.org/place/app</span><span class="invisible"></span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/Domain" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Domain</span></a> <a href="https://mastodon.ar.al/tags/Place" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Place</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/humanRights" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>humanRights</span></a> <a href="https://mastodon.ar.al/tags/democracy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>democracy</span></a> <a href="https://mastodon.ar.al/tags/technology" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>technology</span></a> <a href="https://mastodon.ar.al/tags/peerToPeer" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>peerToPeer</span></a> <a href="https://mastodon.ar.al/tags/peerToPeerWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>peerToPeerWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/objectOriented" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>objectOriented</span></a> <a href="https://mastodon.ar.al/tags/eventBased" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>eventBased</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hypermedia</span></a></p>
Aral Balkan<p>New Kitten¹ update</p><p>Experimental:</p><p>• Adds `data` property to Kitten components</p><p>• Adds swap target to `page.send` so you can have an element added before, after, as first child of, or as last child of another (this is syntactic sugar over htmx and works around some of the complexities with out-of-band swaps in htmx, especially when streaming table rows to tables).</p><p>Also, check out the latest live page and page events state view in Kitten’s Settings (every Kitten app has this settings view).</p><p><a href="https://vimeo.com/1050348456" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">vimeo.com/1050348456</span><span class="invisible"></span></a></p><p>¹ <a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/OOP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OOP</span></a> <a href="https://mastodon.ar.al/tags/eventModel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>eventModel</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/liveComponents" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>liveComponents</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/RPC" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RPC</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/framework" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>framework</span></a> <a href="https://mastodon.ar.al/tags/server" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>server</span></a> <a href="https://mastodon.ar.al/tags/platform" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>platform</span></a></p>
Aral Balkan<p>So last night, while recording the preview of Kitten’s¹ improved component model², I made a silly mistake (copying raw HTML into a JavaScript function instead of wrapping it in a kitten.html`` tagged template, easy to do when you’re refactoring to pull out components from pages).</p><p>Then, once I figured out what I’d done, I made another one by forgetting to return the value from the function (easy to do when you’re used to using one-line closures as render functions).</p><p>I would have caught both of those so much faster if Kitten had helpful error messages for those two pitfalls. And guess what, this morning, it does :)</p><p>Attached are screenshot showing the before and after error messages.</p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ <a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a> <br>² Scroll up the thread to watch the video.</p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/PeerToPeerWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PeerToPeerWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/server" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>server</span></a> <a href="https://mastodon.ar.al/tags/framework" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>framework</span></a> <a href="https://mastodon.ar.al/tags/platform" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>platform</span></a> <a href="https://mastodon.ar.al/tags/design" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>design</span></a> <a href="https://mastodon.ar.al/tags/usability" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>usability</span></a> <a href="https://mastodon.ar.al/tags/errorMessages" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>errorMessages</span></a> <a href="https://mastodon.ar.al/tags/authoring" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>authoring</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a></p>