Em 2022, Slow Roads apareceu com uma proposta livre, leve e solta para jogos de corrida: apenas dirija em cenários agradáveis gerados dinamicamente, rodando suave no navegador web. Um belo “cozy game”. Slow Roads 2.0, refeito do zero, conta com árvores 3D, efeitos de iluminação e texturas melhorados e suporte a celulares. Já dá para jogar no navegador e, em breve, no computador — está listado no Steam.
Quando soube da venda e encerramento do Omnivore, conversei com o Renan para ofereceremos uma alternativa a ele no PC do Manual. Pesquisamos várias, testamos algumas, acabamos com o Wallabag, que passa a ser disponibilizado a assinantes do Manual.
• 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).
How did we end up in technofascism? Watch this talk I gave over a decade ago warning of the dangers of Silicon Valley and Big Tech and urging us to embrace alternatives.
• 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. If neither attributes exist, 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 (a colon in an element name is ignored for message routing purposes, letting you, for example, give unique names to <details> elements, allowing more than one to be open at a time, while having their events be handled by the same handler).
• Change: Add Kitten’s own routes (that every Kitten app inherits) for the Small Web protocol namespace (/💕) as well as for Kitten’s reserved namespace (/🐱) first, before app-specific routes so that a wildcard route in the form, e.g., [anything]_[anythingElse].get.js won’t lock you out of the Settings site for your app (at /🐱/settings).
(To update, run `kitten update` from your terminal on your development machine or manually update deployment servers from /🐱/settings/kitten/ or just wait a few hours for them to update automatically. You can also just run the installation command again.)
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:
¹ 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.
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.
…
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).
The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.
Dustin Brett passou quatro anos criando um sistema operacional dentro do navegador web. E não é que funciona bem? Até no celular. Ele fez um vídeo de meia hora falando da sua façanha (que ainda não vi).
• 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.
• You can now use key paths in the names of your client-side live components and these will automatically be transformed into object hierarchies for you.¹
• Self heals zombie live pages (see Streaming HTML workflow²) if they return to life due to client-side browser cache.³
• Removes htmx⁴ headers from `data` property into separate `header` property in Kitten Page events and the data your Kitten Page message handlers receive.
• 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 is `request.session.authenticated`⁶ is true from the your layout template and customise the layout accordingly.
² See Streaming HTML tutorial: https://kitten.small-web.org/tutorials/streaming-html/ (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.)
³ 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!
Did you know that Kitten has a built-in HTML validator that checks your markup for validity and accessibility issues, etc.?
You’re informed of validation errors in not just terminal but also in your browser’s web developer panel. And, if you select the “Show validation issues on page” link from a validation error in the web developer panel, Kitten will show the validation errors in place on your page.
This helps me catch issues with my markup all the time and I hope it helps you too.