veganism.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
Veganism Social is a welcoming space on the internet for vegans to connect and engage with the broader decentralized social media community.

Administered by:

Server stats:

295
active users

#websocket

1 post1 participant0 posts today
Prem Kumar Aparanji 👶🤖🐘<p>Is there no <a href="https://mastodon.social/tags/opensource" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opensource</span></a> <a href="https://mastodon.social/tags/VibeCoding" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>VibeCoding</span></a> tool that lets you build web apps without <a href="https://mastodon.social/tags/React" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>React</span></a> / <a href="https://mastodon.social/tags/nextjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nextjs</span></a>?</p><p>Something that builds <a href="https://mastodon.social/tags/localfirst" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>localfirst</span></a> <a href="https://mastodon.social/tags/PWA" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>PWA</span></a> with vanilla <a href="https://mastodon.social/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a>, with single-click deployment even to a <a href="https://mastodon.social/tags/RaspberryPi" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RaspberryPi</span></a>, and optionally uses CDNs?</p><p>Think of something like what DuckLake does with DuckDB <a href="https://mastodon.social/tags/WASM" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WASM</span></a> but for transactional systems instead of analytical – compute on the edge/endpoint with centralised storage?</p><p>Maybe with <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a>, <a href="https://mastodon.social/tags/WebRTC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebRTC</span></a> &amp; <a href="https://mastodon.social/tags/Fediverse" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Fediverse</span></a> as optional additions?</p><p><span class="h-card" translate="no"><a href="https://toot.cafe/@slightlyoff" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>slightlyoff</span></a></span> <span class="h-card" translate="no"><a href="https://fedi.simonwillison.net/@simon" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>simon</span></a></span></p>
GripNews<p>🌘 讓 libcurl 在 WebAssembly 中運作<br>➤ 繞過 WebAssembly 網路限制,讓 libcurl 暢行無阻<br>✤ <a href="https://jeroen.github.io/notes/webassembly-curl/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">jeroen.github.io/notes/webasse</span><span class="invisible">mbly-curl/</span></a><br>本文詳細說明如何透過 WebSocket 代理伺服器,讓依賴 libcurl 的應用程式在 WebAssembly 環境中無需修改即可運作。由於 WebAssembly 本身缺乏直接的 TCP 連線能力,作者提出一種巧妙的解決方案:利用 Emscripten 的 WebSocket 封裝機制,將 TCP 流量導向至一個 WebSocket 代理,該代理再將流量轉發給 SOCKS5 代理,進而允許 libcurl 連線到外部網路服務。文章也探討了 WSS 的使用、生產環境的設定,並提供實際的 R 語言範例來展示此技術的應用。<br>+ 這方法聽起來很有趣,解決了 WebAssembly 網頁應用程式在網路存取上的主要瓶頸!<br>+ 感謝作者分享這麼詳盡的技術細節,特別是<br><a href="https://mastodon.social/tags/WebAssembly" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebAssembly</span></a> <a href="https://mastodon.social/tags/libcurl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>libcurl</span></a> <a href="https://mastodon.social/tags/%E7%B6%B2%E8%B7%AF%E4%BB%A3%E7%90%86" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>網路代理</span></a> <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.social/tags/SOCKS5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SOCKS5</span></a></p>
Neustradamus :xmpp: :linux:<p><a href="https://mastodon.social/tags/XOWS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>XOWS</span></a> 0.9.8 has been released (<a href="https://mastodon.social/tags/XMPPOverWebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>XMPPOverWebSocket</span></a> / <a href="https://mastodon.social/tags/Jabber" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Jabber</span></a> / <a href="https://mastodon.social/tags/XMPP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>XMPP</span></a> / <a href="https://mastodon.social/tags/XMPPClient" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>XMPPClient</span></a> / <a href="https://mastodon.social/tags/JabberClient" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JabberClient</span></a> / <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a>) <a href="https://github.com/iquercorb/xows" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">github.com/iquercorb/xows</span><span class="invisible"></span></a></p>
Neustradamus :xmpp: :linux:<p><a href="https://mastodon.social/tags/curl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>curl</span></a> 8.15.0 has been released (<a href="https://mastodon.social/tags/libcurl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>libcurl</span></a> / <a href="https://mastodon.social/tags/Haxx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Haxx</span></a> / <a href="https://mastodon.social/tags/DICT" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DICT</span></a> / <a href="https://mastodon.social/tags/FILE" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FILE</span></a> / <a href="https://mastodon.social/tags/FTP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FTP</span></a> / <a href="https://mastodon.social/tags/FTPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FTPS</span></a> / <a href="https://mastodon.social/tags/Gopher" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Gopher</span></a> / <a href="https://mastodon.social/tags/HTTP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTTP</span></a> / <a href="https://mastodon.social/tags/HTTPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTTPS</span></a> / <a href="https://mastodon.social/tags/IMAP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>IMAP</span></a> / <a href="https://mastodon.social/tags/IMAPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>IMAPS</span></a> / <a href="https://mastodon.social/tags/LDAP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>LDAP</span></a> / <a href="https://mastodon.social/tags/LDAPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>LDAPS</span></a> / <a href="https://mastodon.social/tags/MQTT" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>MQTT</span></a> / <a href="https://mastodon.social/tags/POP3" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>POP3</span></a> / <a href="https://mastodon.social/tags/POP3S" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>POP3S</span></a> / <a href="https://mastodon.social/tags/RTMP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RTMP</span></a> / <a href="https://mastodon.social/tags/RTMPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RTMPS</span></a> / <a href="https://mastodon.social/tags/RTSP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RTSP</span></a> / <a href="https://mastodon.social/tags/SCP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SCP</span></a> / <a href="https://mastodon.social/tags/SFTP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SFTP</span></a> / <a href="https://mastodon.social/tags/SMB" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SMB</span></a> / <a href="https://mastodon.social/tags/SMBS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SMBS</span></a> / <a href="https://mastodon.social/tags/SMTP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SMTP</span></a> / <a href="https://mastodon.social/tags/SMTPS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SMTPS</span></a> / <a href="https://mastodon.social/tags/Telnet" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Telnet</span></a> / <a href="https://mastodon.social/tags/TFTP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>TFTP</span></a> / <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> / <a href="https://mastodon.social/tags/SOCKS4" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SOCKS4</span></a> / <a href="https://mastodon.social/tags/SOCKS5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SOCKS5</span></a> / <a href="https://mastodon.social/tags/SCRAM" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SCRAM</span></a> / <a href="https://mastodon.social/tags/TLS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>TLS</span></a> / <a href="https://mastodon.social/tags/HTTP2" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTTP2</span></a> / <a href="https://mastodon.social/tags/HTTP3" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTTP3</span></a>) <a href="https://curl.se/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">curl.se/</span><span class="invisible"></span></a></p>
Hacker News<p>BinaryRPC – Lightweight WebSocket-based RPC framework in modern C++</p><p><a href="https://github.com/efecan0/binaryrpc-framework" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/efecan0/binaryrpc-f</span><span class="invisible">ramework</span></a></p><p><a href="https://mastodon.social/tags/HackerNews" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HackerNews</span></a> <a href="https://mastodon.social/tags/BinaryRPC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>BinaryRPC</span></a> <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.social/tags/C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>C</span></a>++ <a href="https://mastodon.social/tags/Framework" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Framework</span></a> <a href="https://mastodon.social/tags/LightweightRPC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>LightweightRPC</span></a> <a href="https://mastodon.social/tags/ModernC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ModernC</span></a>++</p>
Aral Balkan<p>New Kitten release 🎉</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener" 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" 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" 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" 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" 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" 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" 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" 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" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/markdown" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>markdown</span></a> <a href="https://mastodon.ar.al/tags/icons" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>icons</span></a> <a href="https://mastodon.ar.al/tags/PhosphorIcons" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>PhosphorIcons</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>NodeJS</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" 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" 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" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/beautifulDefaults" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>beautifulDefaults</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>StreamingHTML</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" 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" 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" 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" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/server" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>server</span></a> <a href="https://mastodon.ar.al/tags/framework" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>framework</span></a> <a href="https://mastodon.ar.al/tags/kit" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kit</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/routing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>routing</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>NodeJS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dev</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" 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" 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" 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" 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" 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" 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" 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" 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" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/HTMX" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTMX</span></a> <a href="https://mastodon.ar.al/tags/Markdown" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Markdown</span></a> <a href="https://mastodon.ar.al/tags/sessions" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>sessions</span></a> <a href="https://mastodon.ar.al/tags/data" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>data</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</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" 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" 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" 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" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/Domain" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Domain</span></a> <a href="https://mastodon.ar.al/tags/Place" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Place</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/humanRights" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>humanRights</span></a> <a href="https://mastodon.ar.al/tags/democracy" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>democracy</span></a> <a href="https://mastodon.ar.al/tags/technology" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>technology</span></a> <a href="https://mastodon.ar.al/tags/peerToPeer" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>peerToPeer</span></a> <a href="https://mastodon.ar.al/tags/peerToPeerWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>peerToPeerWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>NodeJS</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/objectOriented" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>objectOriented</span></a> <a href="https://mastodon.ar.al/tags/eventBased" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eventBased</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hypermedia</span></a></p>
Aral Balkan<p>Little preview video: Kitten’s improved component model</p><p>• Class-based page routes and components<br>• Object-oriented<br>• Event-based<br>• Seamless hypermedia-driven WebSocket-based event mapping and interface updates (Streaming HTML)<br>• A light server-side live component hierarchy with event bubbling<br>• Almost as if you’re building a desktop or mobile app instead of a web app…</p><p>… another authoring simplification made possible because on the Small Web – which is a peer-to-peer web – you build a web app/site as a tool for one person (the owner of the site/app) instead of as a tool for you to farm millions of people.</p><p>… still experimental ;)</p><p><a href="https://vimeo.com/1049055406" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">vimeo.com/1049055406</span><span class="invisible"></span></a></p><p>Learn more about Kitten:</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>If you like what you see and want us to keep existing, we could definitely use your support:</p><p><a href="https://small-tech.org/fund-us/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">small-tech.org/fund-us/</span><span class="invisible"></span></a></p><p>:kitten:💕</p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/objectOriented" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>objectOriented</span></a> <a href="https://mastodon.ar.al/tags/eventBased" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>eventBased</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>NodeJS</span></a></p>