vocalounge.cafe is one of the many independent Mastodon servers you can use to participate in the fediverse.
A Mastodon instance specializing in Vocaloid, UTAU, and anything relevant to vocalsynth culture.

Administered by:

Server stats:

37
active users

#javascript

5 posts5 participants0 posts today
Negative12DollarBill<p>Hi, <a href="https://techhub.social/tags/Today" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Today</span></a> I decided to try to <a href="https://techhub.social/tags/getfedihired" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>getfedihired</span></a> — I've got many years of experience with web development, programming and production (<a href="https://techhub.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a>, <a href="https://techhub.social/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a>, <a href="https://techhub.social/tags/Javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Javascript</span></a>), I can make myself useful in anything on the open-source side of back end, i.e. the <a href="https://techhub.social/tags/Perl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Perl</span></a>, <a href="https://techhub.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a>, <a href="https://techhub.social/tags/PHP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PHP</span></a>, <a href="https://techhub.social/tags/MySQL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MySQL</span></a>, <a href="https://techhub.social/tags/Linux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Linux</span></a> kind of area.</p><p>I live in <a href="https://techhub.social/tags/Sydney" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Sydney</span></a> Australia and would be happy to work in-office, remote or hybrid.</p><p>Let me know of any opportunities, or pass this on to anyone else who might know of something? Thanks.</p>
Aral Balkan<p>New Kitten release</p><p>• Now leaves &lt;style&gt; tags within &lt;template&gt; tags alone when collating and normalising the CSS on a page so as not to interfere with scoped styles in declarative shadow DOM.</p><p>(Kitten’s Streaming HTML workflow¹ – which uses htmx and WebSockets under the hood – combined with built-in support for slots, etc., in Kitten components² means the use of declarative shadow DOM is mostly useful if you want scoped styles. Ideally, of course, use classes to scope styles to your components and be specific in your CSS selectors in general so as not to pollute elements in your components. Although that’s a bit like saying you should floss everyday. Yeah, we all know we should…) :)</p><p>Update: All that said, I’d highly recommend you don’t use Shadow DOM in your Kitten apps. For one thing, htmx’s WebSocket extension doesn’t seem to play well with it. And for another, you really don’t need it and definitely not just to get scoped CSS.</p><p>Enjoy!</p><p>:kitten:💕</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><br>² <a href="https://kitten.small-web.org/tutorials/components-and-fragments/" 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">/components-and-fragments/</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/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/CSSScoping" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSSScoping</span></a> <a href="https://mastodon.ar.al/tags/ShadowDOM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ShadowDOM</span></a> <a href="https://mastodon.ar.al/tags/shadowRoot" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>shadowRoot</span></a> <a href="https://mastodon.ar.al/tags/DOM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DOM</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/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/JS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JS</span></a> <a href="https://mastodon.ar.al/tags/style" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>style</span></a> <a href="https://mastodon.ar.al/tags/template" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>template</span></a> <a href="https://mastodon.ar.al/tags/declarativeShadowDOM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>declarativeShadowDOM</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/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>
Monoka<p>Share of programming languages used by <a href="https://mastodon.social/tags/GTK3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GTK3</span></a> / <a href="https://mastodon.social/tags/GTK4" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GTK4</span></a> applications (2025-03-16):</p><p>28% <a href="https://mastodon.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a><br>21% <a href="https://mastodon.social/tags/Vala" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Vala</span></a><br>20% <a href="https://mastodon.social/tags/Rust" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rust</span></a><br>17% <a href="https://mastodon.social/tags/C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>C</span></a><br>06% <a href="https://mastodon.social/tags/C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>C</span></a>++ <a href="https://mastodon.social/tags/Cplusplus" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Cplusplus</span></a><br>06% <a href="https://mastodon.social/tags/gjs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>gjs</span></a> <a href="https://mastodon.social/tags/Javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Javascript</span></a><br>04% Other: <a href="https://mastodon.social/tags/Csharp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Csharp</span></a> <a href="https://mastodon.social/tags/Go" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Go</span></a> <a href="https://mastodon.social/tags/Lua" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lua</span></a> <a href="https://mastodon.social/tags/Haskell" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Haskell</span></a> <a href="https://mastodon.social/tags/Swift" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Swift</span></a> <a href="https://mastodon.social/tags/Typescript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Typescript</span></a> <a href="https://mastodon.social/tags/Crystal" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Crystal</span></a> <a href="https://mastodon.social/tags/Swift" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Swift</span></a> <a href="https://mastodon.social/tags/D" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>D</span></a> <a href="https://mastodon.social/tags/Perl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Perl</span></a></p><p>63% use GTK4 (90% of them use <a href="https://mastodon.social/tags/libadwaita" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>libadwaita</span></a>), while still 37% use GTK3</p><p>Method: Source [1] lists 543 awesome <a href="https://mastodon.social/tags/gtk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>gtk</span></a> (3/4) <a href="https://mastodon.social/tags/opensource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>opensource</span></a> applications and their <a href="https://mastodon.social/tags/programminglanguage" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>programminglanguage</span></a></p><p>[1] <a href="https://github.com/valpackett/awesome-gtk" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/valpackett/awesome-</span><span class="invisible">gtk</span></a></p><p><a href="https://mastodon.social/tags/GTK" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GTK</span></a> <a href="https://mastodon.social/tags/FLOSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FLOSS</span></a> <a href="https://mastodon.social/tags/Linux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Linux</span></a> <a href="https://mastodon.social/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a> <a href="https://mastodon.social/tags/Gnome" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Gnome</span></a> </p><p><span class="h-card" translate="no"><a href="https://floss.social/@GTK" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>GTK</span></a></span> <span class="h-card" translate="no"><a href="https://floss.social/@gnome" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>gnome</span></a></span></p>
Mark Stosberg<p>Two critical authentication-bypass vulns in the JavaScript `xml-crypto` module have been disclosed.</p><p>If you use `node-saml` or `passport-saml` which use it for XML handling, you should upgrade immediately.</p><p><a href="https://github.com/node-saml/xml-crypto/security/advisories" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/node-saml/xml-crypt</span><span class="invisible">o/security/advisories</span></a></p><p><a href="https://urbanists.social/tags/infosec" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>infosec</span></a> <a href="https://urbanists.social/tags/security" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>security</span></a> <a href="https://urbanists.social/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://urbanists.social/tags/typescript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>typescript</span></a> <a href="https://urbanists.social/tags/nodejs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>nodejs</span></a></p>
Aral Balkan<p>New Kitten release</p><p>• Socket routes now have precendence in the router.</p><p>This stops wildcard page routes from capturing the default socket routes that Kitten creates to enable the Streaming HTML workflow.</p><p>e.g., Previously, the following route:</p><p>/videos/index_[slug].page.js</p><p>Could not connect to its default socket (/videos/default.socket) because default.socket would be captured by the [slug] parameter.</p><p>Now, it will work as intended as the /videos/default.socket (a socket route) has precendence over index_[slug].page.js (a page route).</p><p>Learn more about Kitten’s Streaming HTML workflow here:<br><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 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/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/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/JS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JS</span></a></p>
Olivia A-C<p>Hi y'all, this has become a bit more important now. I learned this week that my current contract will not be renewed for funding reasons. Please see the quoted post for more info! ​:boost:​<span><br><br></span><a href="https://transfem.social/tags/FediHire" rel="nofollow noopener noreferrer" target="_blank">#FediHire</a> <a href="https://transfem.social/tags/GetFediHired" rel="nofollow noopener noreferrer" target="_blank">#GetFediHired</a> <a href="https://transfem.social/tags/OpenStreetMap" rel="nofollow noopener noreferrer" target="_blank">#OpenStreetMap</a> <a href="https://transfem.social/tags/Python" rel="nofollow noopener noreferrer" target="_blank">#Python</a> <a href="https://transfem.social/tags/Rust" rel="nofollow noopener noreferrer" target="_blank">#Rust</a> <a href="https://transfem.social/tags/JavaScript" rel="nofollow noopener noreferrer" target="_blank">#JavaScript</a> <a href="https://transfem.social/tags/CSharp" rel="nofollow noopener noreferrer" target="_blank">#CSharp</a> <a href="https://transfem.social/tags/C" rel="nofollow noopener noreferrer" target="_blank">#C</a> <a href="https://transfem.social/tags/GIS" rel="nofollow noopener noreferrer" target="_blank">#GIS</a> <a href="https://transfem.social/tags/DistributedSystems" rel="nofollow noopener noreferrer" target="_blank">#DistributedSystems</a> <a href="https://transfem.social/tags/Networking" rel="nofollow noopener noreferrer" target="_blank">#Networking</a><span><br><br>RE: </span><a href="https://transfem.social/notes/a4imho4jra5v01up" rel="nofollow noopener noreferrer" target="_blank">https://transfem.social/notes/a4imho4jra5v01up</a></p>
sb arms & legs<p>Thinking about the wasteful nature of <a href="https://metroholografix.ca/tags/LLMs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LLMs</span></a> got me thinking about waste in my own development. While it can be convenient to use the large, enterprise-grade frameworks to deliver a minimalist website in 2025 - it's absurd.</p><p>Do I really need <a href="https://metroholografix.ca/tags/laravel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>laravel</span></a> with <a href="https://metroholografix.ca/tags/react" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>react</span></a>, <a href="https://metroholografix.ca/tags/jquery" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>jquery</span></a>, <a href="https://metroholografix.ca/tags/tailwind" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>tailwind</span></a>, <a href="https://metroholografix.ca/tags/webFonts" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webFonts</span></a>, <a href="https://metroholografix.ca/tags/postgres" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>postgres</span></a> to host some simple <a href="https://metroholografix.ca/tags/markdown" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>markdown</span></a>?</p><p>Do I need to re-render a bunch of static content at every hit? Does every simple article require 64 connections to the server to display?</p><p>I think not. </p><p>I want my material to be available to anyone who wants it - regardless of the device they are using or the robustness of their connection. </p><p>I want to respect users who disable <a href="https://metroholografix.ca/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> for their personal protection. </p><p>I want to respect <a href="https://metroholografix.ca/tags/ScreenReaders" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ScreenReaders</span></a> and users of assistive technology, without unnecessary complexity. </p><p>Everything we need is built into the HTML and CSS specs.</p>
Aral Balkan<p>New Kitten release</p><p>• Fixes edge case where the sign in page, if left open for longer than the length of a session, would throw an error on sign-in attempt (because the challenge for the public-key authentication Kitten apps use would have expired alongside).</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>:kitten:💕</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/publicKeyAuthentication" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>publicKeyAuthentication</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/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/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></p>
alltechpacks<p><a href="https://mastodon.social/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a> <a href="https://mastodon.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</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/CSharp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSharp</span></a> <a href="https://mastodon.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.social/tags/Code" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Code</span></a> <a href="https://mastodon.social/tags/Tech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tech</span></a> <a href="https://mastodon.social/tags/DeepSeek" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DeepSeek</span></a> <a href="https://mastodon.social/tags/LLM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LLM</span></a> <a href="https://mastodon.social/tags/OpenAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenAI</span></a> <a href="https://mastodon.social/tags/Chatgpt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Chatgpt</span></a></p>
:mima_rule: Mima-sama<p><a href="https://sakurajima.social/@lazerdude" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@lazerdude@sakurajima.social</a> Yeah it's due to top-level <code>await</code>. There's an issue for it in the bug tracker (marked for <a href="https://makai.chaotic.ninja/tags/bounty" rel="nofollow noopener noreferrer" target="_blank">#bounty</a> payment too, so you can get paid for this if you want to help!): <a href="https://repo.palemoon.org/MoonchildProductions/UXP/issues/2229" rel="nofollow noopener noreferrer" target="_blank">https://repo.palemoon.org/MoonchildProductions/UXP/issues/2229</a><span><br><br></span><a href="https://makai.chaotic.ninja/tags/PaleMoon" rel="nofollow noopener noreferrer" target="_blank">#PaleMoon</a> <a href="https://makai.chaotic.ninja/tags/JavaScript" rel="nofollow noopener noreferrer" target="_blank">#JavaScript</a></p>
alexandra<p>just under TWO WEEKS until the submission deadline for Good Internet magazine: march 15, 2025!</p><p>☂️ Good Internet launches in May 2025. it's a volunteer-run, not-for-profit print and digital quarterly magazine for personal website owners and those interested in using the internet as a means of self-expression, art, and recreation.</p><p>🔎 we're looking for 1,500 to 4,000 word articles about anything for that audience! </p><p>👉 this means <a href="https://tilde.zone/tags/webdev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdev</span></a> hobbyists, digital (and traditional) <a href="https://tilde.zone/tags/artists" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>artists</span></a>, <a href="https://tilde.zone/tags/internet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>internet</span></a> culture enthusiasts, <a href="https://tilde.zone/tags/technology" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>technology</span></a> nerds, <a href="https://tilde.zone/tags/socialmedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>socialmedia</span></a> expatriates, &amp; anyone who wants to unplug from the corporate-owned <a href="https://tilde.zone/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a>. </p><p>topics could be:</p><p>* internet history<br>* personal websites &amp; blogs<br>* <a href="https://tilde.zone/tags/accessibility" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>accessibility</span></a> on the <a href="https://tilde.zone/tags/indieweb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>indieweb</span></a> <br>* finding inspiration for a <a href="https://tilde.zone/tags/blog" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>blog</span></a><br>* <a href="https://tilde.zone/tags/webdesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdesign</span></a> trends (current or old)<br>* running from the <a href="https://tilde.zone/tags/enshittification" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>enshittification</span></a> of the web<br>* lessons or post-mortems from web projects<br>* news or overviews of <a href="https://tilde.zone/tags/opensource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>opensource</span></a> projects<br>* <a href="https://tilde.zone/tags/privacy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>privacy</span></a> on the indieweb</p><p>🔍 also looking for any <a href="https://tilde.zone/tags/art" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>art</span></a> submissions centered around the web, coding, internet culture, and digital art!</p><p>if it relates to hobbies on "this side of the web," we probably want to run it!</p><p>✨ you can have your article submitted as text and images only OR you can code a whole webpage that helps tell your story!</p><p>🌊 if you're interested in learning more, sign up for our email list or check out the submission guidelines @ <a href="https://goodinternetmagazine.com" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">goodinternetmagazine.com</span><span class="invisible"></span></a>!</p><p>🙏 (please boost if you can! &lt;3 getting the word out helps so much!)</p><p><a href="https://tilde.zone/tags/writing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>writing</span></a> <a href="https://tilde.zone/tags/publishing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>publishing</span></a> <a href="https://tilde.zone/tags/magazine" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>magazine</span></a> <a href="https://tilde.zone/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://tilde.zone/tags/css" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>css</span></a> <a href="https://tilde.zone/tags/tech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>tech</span></a> <a href="https://tilde.zone/tags/css" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>css</span></a> <a href="https://tilde.zone/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://tilde.zone/tags/rss" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>rss</span></a> <a href="https://tilde.zone/tags/mastodon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>mastodon</span></a> <a href="https://tilde.zone/tags/google" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>google</span></a> <a href="https://tilde.zone/tags/facebook" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>facebook</span></a> <a href="https://tilde.zone/tags/amazon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>amazon</span></a> <a href="https://tilde.zone/tags/resist" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>resist</span></a></p>
Aral Balkan<p>While working on porting the Small Technology Foundation web site¹ to Kitten², I took the opportunity to pull out base Model and Collection classes that I’ll likely end up including in Kitten proper:</p><p>• Model: <a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/Model.js" 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/Model.js</span></a><br>• Collection: <a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/Collection.js" 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/Collection.js</span></a></p><p>To see them in use, here’s the base Posts class (with RSS generation) that extends Collection:<br><a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/Posts.js" 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/Posts.js</span></a> </p><p>And here’s the concrete EventPosts collection class that extends Posts:<br><a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/EventPosts.js" 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/EventPosts.js</span></a></p><p>And the EventPost (showing an implementation of a calculated property):<br><a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/EventPost.js" 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/EventPost.js</span></a></p><p>So all this is possible (persisting and reading back typed model collections, etc.) thanks to JSDB¹ (JavaScript database), a zero-dependency, transparent, in-memory, streaming write-on-update JavaScript database I wrote for the Small Web that persists to a JavaScript transaction log and is included as as first-class citizen in Kitten.</p><p><a href="https://codeberg.org/small-tech/jsdb" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">codeberg.org/small-tech/jsdb</span><span class="invisible"></span></a></p><p>And if you want to know how the magic mapping of classes happens, see the Database App Module:</p><p><a href="https://codeberg.org/small-tech/site/src/branch/kitten/app_modules/database/database.js#L34" 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#L34</span></a></p><p>PS. For a much gentler introduction to persistence in Kitten, see the Kitten Persistence tutorial:<br><a href="https://kitten.small-web.org/tutorials/persistence/" 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">/persistence/</span></a></p><p>Enjoy! :kitten:💕</p><p>¹ <a href="https://small-tech.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">small-tech.org</span><span class="invisible"></span></a><br>² <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/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</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/database" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>database</span></a> <a href="https://mastodon.ar.al/tags/JSDB" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JSDB</span></a> <a href="https://mastodon.ar.al/tags/typeSafety" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>typeSafety</span></a> <a href="https://mastodon.ar.al/tags/JSDoc" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JSDoc</span></a> <a href="https://mastodon.ar.al/tags/closureCompiler" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>closureCompiler</span></a> <a href="https://mastodon.ar.al/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.ar.al/tags/workInProgress" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>workInProgress</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>
0x40k<p>Hey everyone, what's cooking in the open-source universe? 🤯 I just stumbled upon something that's seriously mind-blowing.</p><p>So, there's this Python library pretending to be a music tool (automslc), but get this – it's actually illegally downloading songs from Deezer! And the worst part? It turns your computer into an accomplice in a huge music piracy operation. Seriously, a digital pirate cove. 🏴‍☠️</p><p>And then there's this npm saga with @ton-wallet/create... Crypto wallet emptied, just like that! 💸</p><p>The moral of the story? Open source rocks, but blindly trusting everything is a recipe for disaster. Always double-check those dependencies! Automated scans are cool, but a real penetration test? That's pure gold. 🥇</p><p>Clients are always so appreciative when we can spot and fix this kind of stuff beforehand!</p><p>Now, I'm curious: What are your go-to methods for keeping your codebase squeaky clean and secure? Any tips or tricks you'd like to share?</p><p><a href="https://infosec.exchange/tags/infosec" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>infosec</span></a> <a href="https://infosec.exchange/tags/pentesting" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>pentesting</span></a> <a href="https://infosec.exchange/tags/devsecops" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>devsecops</span></a> <a href="https://infosec.exchange/tags/opensource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>opensource</span></a> <a href="https://infosec.exchange/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://infosec.exchange/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a></p>
Aral Balkan<p>New Kitten release</p><p>• Fixes redirection from sign-in page when person is already authenticated.</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>To learn more about how Kitten automatically implements authentication for your Small Web sites and apps using public-key cryptography (so even your own server doesn’t know your secret)¹, please see the Authentication tutorial:</p><p><a href="https://kitten.small-web.org/tutorials/authentication/" 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">/authentication/</span></a></p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ The security (and privacy) of Domain/Kitten are based on a 32-byte cryptographically random secret string that only the person who owns/controls a domain knows.</p><p>This is basically a Base256-encoded ed25519 secret key where the Base256 alphabet is a set of curated emoji surrogate pairs without any special modifiers chosen mainly from the animals, plants, and food groups with some exceptions (to avoid common phobias or triggers, etc.) that we call KittenMoji.</p><p>…</p><p>When setting up a Small Web app via Domain, this key is generated in the person’s browser, on their own computer, and is never communicated to either the Domain instance or the Kitten app being installed. Instead the ed25519 public key is sent to both and signed token authentication is used when the server needs to verify the owner’s identity (e.g., before allowing access to the administration area).</p><p>The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.</p><p>More: <a href="https://kitten.small-web.org/reference/#cryptographic-properties" 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">/#cryptographic-properties</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/authentication" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>authentication</span></a> <a href="https://mastodon.ar.al/tags/publicKeyCryptography" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>publicKeyCryptography</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/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></p>
julian<p>I discovered this week a little footgun if you happen to use this bit of syntactic sugar:</p> <pre><code>const object = { foo: 'bar', } switch (true) { case object &amp;&amp; object.foo: { // This will never execute } default: // ... } </code></pre> <p>The cases in your <code>switch(true)</code> must actually return <code>true</code>, <strong>not truthy</strong>, for the case to execute.</p> <p>Using <code>switch(true)</code> is a bit of a controversial coding practice, since it's only meant to replace long <code>if..else if..else</code> chains. Literally has no additional utility except aesthetics... but I like it nevertheless :joy_cat:</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>
alltechpacks<p><a href="https://mastodon.social/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a> <a href="https://mastodon.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</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/CSharp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSharp</span></a> <a href="https://mastodon.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.social/tags/Code" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Code</span></a> <a href="https://mastodon.social/tags/Tech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tech</span></a> <a href="https://mastodon.social/tags/DeepSeek" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DeepSeek</span></a> <a href="https://mastodon.social/tags/LLM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LLM</span></a> <a href="https://mastodon.social/tags/OpenAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenAI</span></a> <a href="https://mastodon.social/tags/Chatgpt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Chatgpt</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>
Tommi 🤯<p>Happy <a href="https://ilovefs.org" rel="nofollow noopener noreferrer" target="_blank"><strong>I Love Free Software Day</strong></a>! 💕</p><p>Unfortunately, this year I could not join nor organize any in-person celebration, BUT of course I want to share my gratitude to the many, <em>countless</em> <a href="https://pan.rent/tags/FreeSoftware" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FreeSoftware</span></a> services I don’t merely use, but actually <em>depend</em> on.</p><p>Last year, I decided to focus only on <a href="https://pan.rent/tags/YunoHost" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>YunoHost</span></a>, because it would have been crazy to list all the projects I use and I love.</p><p>This time, even if I will most certainly forget someone, I am challenging myself to mention <em>all</em> the <a href="https://pan.rent/tags/LibreSoftware" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LibreSoftware</span></a> my life is powered by.</p><p>Without further ado, <strong>THANK YOU</strong> to:</p><ul><li><span class="h-card" translate="no"><a href="https://toot.aquilenet.fr/@yunohost" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>yunohost</span></a></span>, for powering <a href="https://tommi.space/neb/" rel="nofollow noopener noreferrer" target="_blank"><em>Nebuchadnezzar</em></a></li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@fedora" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>fedora</span></a></span>, for running my beloved <a href="https://pan.rent/tags/Framework" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Framework</span></a> laptop</li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@frameworkcomputer" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>frameworkcomputer</span></a></span>, for designing and building repairable, <a href="https://pan.rent/tags/Linux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Linux</span></a>-friendly and truly open hardware</li><li><span class="h-card" translate="no"><a href="https://floss.social/@gnome" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>gnome</span></a></span> and <span class="h-card" translate="no"><a href="https://floss.social/@GTK" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>GTK</span></a></span>, for being just <em>gorgeous</em></li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@calyxos" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>calyxos</span></a></span> (thus <span class="h-card" translate="no"><a href="https://fosstodon.org/@LineageOS" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>LineageOS</span></a></span>), for powering my <a href="https://pan.rent/tags/Fairphone5" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fairphone5</span></a></li><li><a href="https://pan.rent/tags/Obtainium" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Obtainium</span></a>, for making me directly download apps on my phone, and <span class="h-card" translate="no"><a href="https://floss.social/@fdroidorg" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>fdroidorg</span></a></span> for distributing them</li><li><a href="https://pan.rent/tags/AuroraStore" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AuroraStore</span></a>, for proxying the download of apps I am doomed to get from Google Play</li><li><span class="h-card" translate="no"><a href="https://mastodon.matrix.org/@element" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>element</span></a></span>, for developing <a href="https://pan.rent/tags/Synapse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Synapse</span></a>, even though the new proprietary Synapse Pro is VERY PROBLEMATIC AND DISAPPOINTING</li><li><a href="https://pan.rent/tags/Fractal" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fractal</span></a>, for being the most beautiful and awesome <a href="https://pan.rent/tags/Matrix" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Matrix</span></a> client ever</li><li><span class="h-card" translate="no"><a href="https://mastodon.world/@signalapp" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>signalapp</span></a></span>, for keeping me connected with the people I love</li><li><span class="h-card" translate="no"><a href="https://mastodon.social/@Mastodon" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>Mastodon</span></a></span>, for also maintaining a feature-packed experimental fork (<a href="https://pan.rent/tags/GlitchSoc" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GlitchSoc</span></a>), that is what <a href="https://pan.rent/about" rel="nofollow noopener noreferrer" target="_blank"><em>Pan</em></a> runs</li><li><a href="https://pan.rent/tags/Tuba" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tuba</span></a> and <a href="https://pan.rent/tags/Moshidon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Moshidon</span></a>, for being the most beautiful and awesome <a href="https://pan.rent/tags/Mastodon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Mastodon</span></a> clients ever</li><li><a href="https://pan.rent/tags/Firefox" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Firefox</span></a>, for still remaining the best possible <a href="https://pan.rent/tags/browser" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>browser</span></a> choice, despite <a href="https://pan.rent/tags/Mozilla" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Mozilla</span></a>’s governance messiness</li><li><span class="h-card" translate="no"><a href="https://en.osm.town/@openstreetmap" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>openstreetmap</span></a></span>, for allowing us to find the right path, both literally and metaphorically!</li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@organicmaps" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>organicmaps</span></a></span>, for being the simplest, cleanest, yet feature-rich <a href="https://pan.rent/tags/OSM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OSM</span></a> client and navigation app</li><li><span class="h-card" translate="no"><a href="https://mastodon.social/@protonvpn" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>protonvpn</span></a></span>, for making me browse safely from/to anywhere in the planet and <span class="h-card" translate="no"><a href="https://mastodon.social/@protonprivacy" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>protonprivacy</span></a></span> <a href="https://pan.rent/tags/ProtonMail" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ProtonMail</span></a>, for hosting my email, despite the latest alarming political statements…</li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@libreoffice" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>libreoffice</span></a></span>, for allowing me to draft documents with ease, the last of which was my <a href="https://pan.rent/tags/CV" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CV</span></a></li><li><a href="https://pan.rent/tags/LanguageTool" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LanguageTool</span></a>, for preventing me from making embarassing spelling mistakes</li><li><span class="h-card" translate="no"><a href="https://floss.social/@photoprism" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>photoprism</span></a></span>, for safely storing and indexing all my photographic memories, on <a href="https://tommi.space/aby/" rel="nofollow noopener noreferrer" target="_blank"><em>Aby</em></a>, and for providing stellar and friendly support too!</li><li><a href="https://pan.rent/tags/Actual" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actual</span></a>, for moderating the very likely risk of ending up completely broke, since it forces me to manage my finances consciously and coherently</li><li><span class="h-card" translate="no"><a href="https://mastodon.online/@readeck" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>readeck</span></a></span>, for storing and sorting ALL my varied and overwhelming <a href="https://inputs.tommi.space" rel="nofollow noopener noreferrer" target="_blank">inputs</a></li><li><span class="h-card" translate="no"><a href="https://mastodon.xyz/@nextcloud" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>nextcloud</span></a></span>, for storing and synchronizing my data, for its <a href="https://pan.rent/tags/calendar" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>calendar</span></a>, its <a href="https://pan.rent/tags/tasks" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>tasks</span></a>, and all its awesome apps</li><li><a href="https://pan.rent/tags/Rustdesk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rustdesk</span></a>, for preventing my friends and family members from going crazy, by allowing me to remotely connect to their devices and directly address the issues they have</li><li><a href="https://pan.rent/tags/Listmonk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Listmonk</span></a>, for sending out <a href="https://tommi.space/newsletter/" rel="nofollow noopener noreferrer" target="_blank">my newsletter</a></li><li><span class="h-card" translate="no"><a href="https://fosstodon.org/@eleventy" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>eleventy</span></a></span>, for powering <em>all</em> the websites I maintain, above all <a href="https://tommi.space/" rel="nofollow noopener noreferrer" target="_blank">the virtual representation of my mind</a>, and for being the only reason why I resist and try to continue learning <a href="https://pan.rent/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a></li><li><span class="h-card" translate="no"><a href="https://floss.social/@forgejo" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>forgejo</span></a></span>, for giving us a chance to truly control and collectively develop the sources of our software, but most importantly <span class="h-card" translate="no"><a href="https://social.anoxinon.de/@Codeberg" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>Codeberg</span></a></span>, for RESISTING, RESISTING, RESISTING, despite the hatred and attacks nazi assholes throw at them</li><li><span class="h-card" translate="no"><a href="https://mastodon.social/@musicbrainz" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>musicbrainz</span></a></span> for keeping music knowledge open and free, and <span class="h-card" translate="no"><a href="https://mastodon.social/@ListenBrainz" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>ListenBrainz</span></a></span> for scrobbling the crazy music I listen to</li><li>The <span class="h-card" translate="no"><a href="https://mastodon.social/@fsfe" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>fsfe</span></a></span>, for promoting this celebration and fighting the good fight!</li></ul><p>Lastly, but most importantly, the <strong>biggest thank you</strong> goes to all the free software <strong>libraries and dependencies</strong> the above mentioned <a href="https://pan.rent/tags/software" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>software</span></a> are made of/built with, including <a href="https://pan.rent/tags/C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>C</span></a>, <a href="https://pan.rent/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a>, <a href="https://pan.rent/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a>, <a href="https://pan.rent/tags/Rust" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rust</span></a>, and all community-maintained programming languages.</p><p>I am super sorry if I forgot someone!</p><p><a href="https://pan.rent/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a> <a href="https://pan.rent/tags/ILoveFS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ILoveFS</span></a> <a href="https://pan.rent/tags/SoftwareFreedom" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SoftwareFreedom</span></a> <a href="https://pan.rent/tags/Fairphone" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fairphone</span></a> <a href="https://pan.rent/tags/Android" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Android</span></a> <a href="https://pan.rent/tags/LineageOS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LineageOS</span></a> <a href="https://pan.rent/tags/FSFE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FSFE</span></a> <a href="https://pan.rent/tags/OpenStreetMap" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenStreetMap</span></a> <a href="https://pan.rent/tags/PhotoPrism" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PhotoPrism</span></a> <a href="https://pan.rent/tags/LibreOffice" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LibreOffice</span></a> <a href="https://pan.rent/tags/Readeck" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Readeck</span></a> <a href="https://pan.rent/tags/Eleventy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Eleventy</span></a> <a href="https://pan.rent/tags/11ty" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>11ty</span></a> <a href="https://pan.rent/tags/GNOME" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GNOME</span></a> <a href="https://pan.rent/tags/Signal" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Signal</span></a> <a href="https://pan.rent/tags/forgejo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>forgejo</span></a> <a href="https://pan.rent/tags/Codeberg" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Codeberg</span></a> <a href="https://pan.rent/tags/MusicBrainz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MusicBrainz</span></a> <a href="https://pan.rent/tags/ListenBrainz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ListenBrainz</span></a> <a href="https://pan.rent/tags/MetaBrainz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MetaBrainz</span></a></p>