snac.daltux.net is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.
This server runs the snac software and there is no automatic sign-up process.
You don't have to pretend that Claude Code's source code is lovely just because you like using it or are impressed by whatever madness is going on around AI right now.
#AI #GenAI #GenerativeAI #LLMs #Anthropic #Claude #ClaudeCode #ClaudeCodeLeak #AgenticAI #tech #dev #software #SoftwareEngineering #SoftwareDevelopment
Buddy. I've written COBOL. I spent several years working almost daily with a 3-million-line monstrosity of a COBOL program. I was working on another app that interfaced with it, but in that work I occasionally had to read the code and in a few cases modify it. Granted I haven't spent as much time looking at the leaked Claude Code source code (and won't lol), but nevertheless I confidently declare that Claude Code is worse. "Spaghetti code" doesn't come close to describing this thing.
#AI #GenAI #GenerativeAI #LLMs #ClaudeCode #ClaudeCodeLeak #Anthropic #Claude #tech #dev #SoftwareEngineering #SoftwareDevelopment #software #COBOL #LinkedIn
So I just bought @nileane’s TinyStart launcher and, yep, it’s beautiful.
Minimalist in the best possible way. I’m keeping Spotlight around for the moment but already I’m not sure why I would use it for anything.
So lovely to see indie devs showing trillion-dollar corporations how it should be done.
💕
#AI #GenAI #GenerativeAI #github #tech #dev #SoftwareDevelopment
I worry that few smaller companies or startups will survive, and the country will be pockmocked with half-constructed data centers and obsolete equipment. This is not like the dot-com crash that left useful and unused fiber optic networking.
hashtag#AI hashtag#GenAI hashtag#GenerativeAI hashtag#software hashtag#tech hashtag#dev hashtag#AssetBubble hashtag#PrivateCredit
🥳 New Kitten¹ Release
• Adds Kitten Introspection API
I’ll record a video this week demonstrating it.
In the meanwhile, check out the change log for details:
https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#2026-03-29
Enjoy!
💕
¹ https://kitten.small-web.org
#Kitten #KittenReleases #SmallWeb #SmallTech #introspectionAPI #web #dev
Me: I really need to launch the things I’m building with Kitten¹ this year.
Also me: You know what would be sweet? If I added an introspection API to make working with the Kitten Shell (REPL)² easier.
(It is going to be sweet though. Prototyping it in the REPL now and I’ll record a little demo when I’m done and it’s released. It’s going to make examining and affecting the state of the client from the server interactively even easier.)
¹ https://kitten.small-web.org
² https://kitten.small-web.org/tutorials/kitten-s-interactive-shell-repl/
#Kitten #developerExperience #debugging #KittenShell #NodeJS #web #dev
You know how you’re in the middle of a process and you refresh a web page and it loses state?
So that sucks.
With Kitten¹ – when using the new state-maintaining/class-based and event model-based component model – it’s easy to have flowing interfaces that animate between states, etc., that don’t lose state if you refresh the page (or open another tab).
What you can’t do on the Web, however, is restore the state of any cross-origin iframes. (As you have no visibility into their contents to take a snapshot, etc.)
This is something I ran into with the embedded Stripe component I’m using in Catalyst². Specifically, it has a success state that I want to restore so the interface, which uses selective disclosure and has animated to that step in the sign up process, doesn’t jump if you refresh it or look different if you open it in another tab.
So what do you do if you’re obsessed with making things work as well as possible?
Apparently, this:
1. You go and manually save the Stripe iframe’s HTML and relevant CSS
2. You notice that it is ~371KB in size and you sigh
3. You use a combination of automated and manual methods to whittle that down to a 4.2KB HTML/CSS snapshot of the state.
4. You make that into a Kitten component³ so you can set the bits that are dynamic⁴
5. You make sure that it matches the original exactly using PixelSnap 2 guides⁵ (see screenshot; and yes, I told you I’m obsessed) :)
6. Et voila!
🤷♂️
¹ https://kitten.small-web.org
² https://catalyst.small-web.org
³ https://kitten.small-web.org/tutorials/components-and-fragments/
⁴ https://codeberg.org/project-catalyst/app/src/commit/a3cf136f3670a9e2954a35d5b3aa227969f22eaf/sign-up/SuccessfulStripeSubscription.fragment.js
⁵ https://pixelsnap.com
#Catalyst #SmallWeb #design #Stripe #iframes #stateRestoration #web #dev
Oi, quer trabalhar comigo?
(tem vaga na empresa)
https://jobs.quickin.io/botcity/jobs/69526b159f7bde0013f9e8ad
🥳 New Kitten Release
• Fix: Events on `KittenComponent` hierarchies are now bubbled in reverse (from children down to parents). This provides for predictable event firing in cases where parents might emit events (e.g., a page emitting an event from its `onConnect()` handler). Your existing code should work as before with certain edge cases that might have broken before no longer breaking.
Enjoy!
💕
#Kitten #KittenReleases #SmallWeb #SmallTech #web #dev #events #serverSide #eventBased #components #hypermedia #streamingHTML
🥳 New Kitten Release
• `KittenComponent` (and thereby `KittenPage`) gains an `emit()` method.
Use this to bubble events from your page to all child components or from any component to all of its child components.
This is useful, for example, for setting the state of a page or a component where each child component knows how to present itself for that state.
(That, in turn, is useful if you want to be able to restore state based on URLs.)
The naming convention-based mapping of event names to event handler names is the same as for the events you receive from the client. So an event called `myEvent` will result in `onMyEvent` handlers on child components being called.
(Also update @small-web/kitten to version 7.1.0 to get language intelligence for the new method.)
Enjoy!
💕
#Kitten #KittenReleases #SmallWeb #SmallTech #web #dev #events #serverSide #eventBased #components #hypermedia #streamingHTML
🥳 New @small-web/kitten (Kitten globals) release.
• Improved type information.
• Now plays nice with tsconfig.json and tsc.
• Adds `rawBody` to `KittenRequest`.
This is not really a breaking change (in that it won’t break your apps) but I’m releasing it as a major version update so as not to surprise you if you notice the type information is different (more detailed than before).
To update in your kitten apps:
npm install @small-web/kitten@7
For more information on how to use this module, see the Kitten Type Safety tutorial:
https://kitten.small-web.org/tutorials/type-safety/
Full change log:
https://codeberg.org/kitten/globals/src/branch/main/CHANGELOG.md#7-0-0-2026-03-19
Enjoy!
💕
#Kitten #KittenReleases #SmallWeb #SmallTech #web #dev #typeSafety #JavaScript #JS #nodeJS
Peço desculpas pela demora, validando internamente de fato seria necessário o envio da documentação pela plataforma, logo seria necessário o aceite dos termos, infelizmente não conseguimos seguir de outra forma.Então, estou fora e, lamentavelmente, as pessoas continuam sem chance de participar do cotidiano financeiro brasileiro de alguma maneira minimamente livre e/ou soberana.
Eu estou impedido, mas, se alguém se dispuser a aceitar isso e, a partir daí, desenvolver sistemas que ofertem serviços a seus próprios clientes que, por sua vez, utilizariam apenas software livre, parece algo possível, segundo a documentação.
#softwareLivre #soberaniaDigital #brasil #pix #finanças #banco #dev #oportunidade
🥳 New Kitten¹ Release
• Adds `rawBody` to non-multipart POST requests.
This property, which is a Buffer, is necessary if you want to verify signatures (e.g., for webhooks).
I had to fork express-busboy as they already ruled out adding it. The fork (@small-web/kitten-busboy²) also allowed me to type the middleware extension point for Polka³ instead of Express (Kitten uses Polka) so that’s one @ts-ignore removed (hey, dev is a string of little wins) :)
Change log: https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#2026-03-18
Caught a bug and feeling a little under the weather at the moment (nothing major, mom and dad – no need to worry) so apologies if I’m not responsive here.
Enjoy!
💕
¹ https://kitten.small-web.org
² https://codeberg.org/kitten/busboy
³ https://github.com/lukeed/polka
#Kitten #SmallWeb #KittenReleases #busboy #polka #express #bodyParsing #middleware #NodeJS #web #dev
Oh I do love how you have your Kitten¹ app’s database in memory – thanks to Kitten’s built-in JavaScript Database (JSDB)² – and accessible via the Kitten Shell (REPL)³ during dev.
(If I do say so myself.) ;)
💕
¹ https://kitten.small-web.org
² https://kitten.small-web.org/tutorials/persistence/
³ https://kitten.small-web.org/tutorials/kitten-s-interactive-shell-repl/
English speakers of the fedi. In a software with the interface in English, Reading a menu with verbs such as Save, Open, Close, Edit, Format etc., do you read them as imperative (an order: "do this") or as an infinitive (the "base form" of the verb, like "to do this")?
Are you a native speaker or have English as a second language?
#Dev #ux #ui #software #interface #translation #uiux #uxui #gui
| Native speaker, imperative: | 656 |
| Native speaker, infinitve: | 465 |
| Second Language, imperative: | 534 |
| Second Language, infinitive: | 900 |
Closed
🥳 New Kitten¹ Release
• Fixed: Errors in a project’s _main.script.js_ now cause a hard crash without retry attempts. The errors are also now better classified and communicated.
• Housekeeping: Removed unmaintained dev dependency, updated supported ES versions to esnext and simplified jsconfig.json.
Full change log:
https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#changelog
Enjoy!
💕
There’s life beyond VSCode… thought I’d share my dev setup:
• Main monitor: WezTerm¹ running in a three (sometimes four)-way split with Helix Editor² as my main editor, a terminal pane for general commands while working, and Yazi³ usually running in another for working with files/directories in a project.
• Other monitor: Sublime Merge⁴ always running full-screen so I can immediately see exactly what I’ve changed (in real time) as I’m working.
Others (not shown): Browser(s) on a third screen and my laptop’s monitor as a fourth screen sometimes for other apps (read: distractions) :)
What’s yours like?
¹ https://wezterm.org
² https://helix-editor.com
³ https://github.com/sxyazi/yazi
⁴ https://www.sublimemerge.com
#myDevSetup #web #dev #WezTerm #HelixEditor #Yazi #SublimeMerge
se você ainda guarda senha com SHA-256 ou MD5, o banco de dados dos seus usuários é uma bomba-relógio esperando o próximo vazamento.
não é exagero. uma GPU moderna quebra bilhões de hashes SHA-256 por segundo. isso não é hipótese, é aritmética.
foi assistindo ao vídeo do @RenatoAugustoTech (https://youtu.be/VW2mywTTz80) que a ficha caiu de vez sobre o quanto esse tema é negligenciado. recomendo muito.
no novo post do blog eu fui um passo além e mostro como implementar Argon2id em Python do jeito certo — com salt automático, pepper no servidor (nunca no banco), rehash transparente quando os parâmetros evoluem e configuração separada por ambiente com Dynaconf.
o código está pronto. as libs são estáveis. a pergunta não é se o seu sistema vai vazar um dia — é se quando isso acontecer os hashes vão ser inúteis pro atacante.
Thanks to a work-in-progress Homebrew cask by Andi Péter (https://codeberg.org/GramEditor/gram/issues/15#issuecomment-11159294), I was just able to quickly install and play with the new Gram code editor (https://codeberg.org/GramEditor/gram#gram) – a fork of Zed with all the bullshit (AI, telemetry, etc.) removed that looks like it could be great editor to recommend both for people just learning to code (as I was, recently, to recommend for people learning Kitten¹) as well as seasoned programmers who don’t want to work in terminal.
And, as a bonus, it actually has a Helix Editor mode so if that’s your daily driver (raises hand), you can just use it like Helix (i.e., Helix Editor in a graphical shell).
If you want to try Andi’s build (only works on Mac at the moment and remember, you have to trust Andi):
brew tap petrosz007/gram-tap https://codeberg.org/Petrosz007/homebrew-gram-tap.git
brew install --cask gram
PS. You can follow the author of Gram, @krig, on the fediverse :)
¹ https://kitten.small-web.org
#gram #editor #gramEditor #programming #coding #dev #zed #zedEditor #helix #helixEditor #brew #macOS #noAI #privacyRespecting #tool
🥳 New Kitten Release
I just reworked the fix for this to simplify the Kitten renderer (as this fix introduced a regression with components getting instantiated multiple times due to the fall-through logic between asynchronous and synchronous rendering). The renderer now treats every component render function as asynchronous, thereby avoiding the issue entirely.
Enjoy!
💕
#Kitten #KittenReleases #SmalWeb #SmallTech #web #dev #components #async #rendering
Até então, realizava isso com um script que já tinha contribuído ao projeto e que executava manualmente quando queria atualizar a imagem que depois usaria neste servidor.
Outra novidade é uma variação "full" da imagem de contêiner que acrescenta os pacotes ffmpeg e imagemagick. Eles, recentemente, podem ser usados pelo snac, se isso for definido no server.json, para remover metadados EXIF de arquivos de imagens e vídeos enviados. O porém é que isso a torna praticamente 10 vezes maior: 60MB, em vez dos menos de 7MB da imagem padrão. Custo-benefício depende do gosto do freguês.
🥳 New Kitten Release
This one fixes a bug that you would have encountered had you had an asynchronous component (component with asynchronous render method) nested more than one-level deep within synchronous components.
(Kitten’s html renderer transparently supports both synchronous and asynchronous render methods.)
So, this (taken from my unit test), for example, works correctly now:
```js
class AsynchronousOtherName extends KittenComponent {
async html () {
await new Promise(resolve => setTimeout(resolve, 10))
return kitten.html`<i>Balkan</i>`
}
}
class SynchronousName extends KittenComponent {
/* NOT async */ html () {
return kitten.html`<strong>Aral</strong> <${AsynchronousOtherName.connectedTo(this)} />`
}
}
class SynchronousTemplate extends KittenComponent {
html ({ SLOT }) {
return kitten.html`[Before slot]${SLOT}[After slot]`
}
}
class MyPage extends KittenPage {
html () {
return kitten.html`
<${SynchronousTemplate.connectedTo(this)}>
<h1>This should render all at once after a short delay.</h1>
<p>Hello, <${SynchronousName.connectedTo(this)} /></p>
</>
`
}
}
```
Enjoy!
💕
#Kitten #KittenReleases #SmallWeb #SmallTech #web #dev #JavaScript #NodeJS #async #render
🥳 New Kitten Release
• Added `target` and `data-*` to the list of safe attributes you can specify within curly brackets when writing Markdown in Kitten.
Enjoy!
💕
#Kitten #KittenReleases #SmallWeb #SmallTech #Markdown #web #dev
🥳 New Kitten¹ release
• Added `initialise()` hook to `kitten.Component` instances.
This gets called at the end of the constructor and is handy if you don’t want to override the constructor and have to handle the `data` parameter and remember to call `super(data)`. You can still access passed data from `this.data`.
Note that the component is not part of the view hierarchy on the client at this point. If you have tasks you need to perform only once per page – for example, instantiating a child component to use in your view template – override the `onConnect()` handler instead which is guaranteed to be called just once when your component has successfully been added to a connected page.
https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#2026-02-23
Enjoy!
💕
¹ https://kitten.small-web.org
#Kitten #KittenReleases #SmallWeb #SmallTech #web #dev #components
If you’re looking for an ngrok alternative for tunnelling that is affordable and just works (e.g., with Kitten¹), I can highly recommend LocalXpose (https://localxpose.io/).
(Not affiliated with them in any way; just use their tunnels for testing with Kitten on a daily basis.)
PS. If you have a static IPv4 address for your dev machine or if your network is IPv6 compatible, you can now run secure servers on IP addresses, so that’s another option if you need your app to be universally accessible during dev/testing (e.g., for web hooks, etc.) without requiring any external services. But, for most of us, something like LocalXpose is essential and it’s the best I’ve found so far.
Still using `npm init -y`?
May I introduce you to `npm init --init-type=module --init-license=AGPL-3.0-only -y`?
👍 Free software license (makes “open” as in ”open for business” folks squirm)
👍 ES modules (because it’s 2026)
#nodeJS #npm #FreeSoftware #AGPL #ECMAScriptModules #JavaScript #web #dev
🥳 New Kitten release
Just released a new version of Kitten that now includes JSDB 7.0.0 with its improved JSTable.PERSIST event.
Note that this is a breaking change. If you’re listening for the old 'persist' event, please update your code.
For more information, please see the changelog: https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#breaking-changes
Enjoy!
💕
#SmallWeb #SmallTech #Kitten #KittenReleases #web #dev #JavaScriptDatabase #JSDB #NodeJS
Like global search and replace but don’t like surprises?
Check out serpl – a handy little command-line app that gives you a visual preview of the changes you are about to make. You can even go in and remove the replacements you don’t want from the source previews. The regex support appears to be basic, however (I couldn’t get a negative lookbehind to work).
https://github.com/yassinebridi/serpl#readme
(Also, it appears they’re looking for maintainers. It’s written in Rust.)
⏳️ Mais um ano se vai e, ao contrário de vários outros sistemas, , o mais comum na nossa querida Web Social federada, permanece sem deixar publicar Markdown, embora exiba o de terceiros. Neste caso, que considero pior, ainda não ocorre sequer um aviso a quem o utiliza de que houve um #EmojiReact de suas publicações. 🔕
Sim, essa funcionalidade acaba de ser implementada pelo SNAC (merci @vi@downbad.fr 👏), nem foi lançada ainda e já estou me gabando por utilizá-lo!
Gostei muito de poder reagir assim às publicações, como já era possível em outros como #Pleroma, #Akkoma, #Misskey etc. Mas #SNAC, embora, até então, não exibisse EmojiReact junto à publicação correspondente, já gerava notificação de sua ocorrência faz tempo. Achava que no Mastodon isso ficasse sempre como se fosse uma curtida, mas, apenas ao testar isso, notei que não surte qualquer efeito. O mais curioso é que consta uma estrutura de dados que serviria para isso desde Mastodon 3.1.0. Ficamos assim então!
#SocialWeb #Fediverso #Fediverse #ActivityPub #diversidade #blambers #dev
O que poderia ser considerado incrível é como, a essa altura, ainda vemos tantos projetos que se declaram de software livre ou meramente de "código aberto" sob esse domínio. Muito antes dos recentes desmandos, aquilo jamais foi adequado para projetos mais alinhados com princípios de autonomia e ética do que de conveniência. Basta de ser tão pragmático. Tome providências já.
#dev #software #git #SoftwareLivre #FreeSoftware #CódigoAberto #OpenSource
Acompanhe, a partir das 9h (horário de Brasília, UTC-3), o minicurso online “Todos na Web - Boas práticas para acessibilidade digital: Design Acessível”, pelos links:#acessibilidade #WebDesign #dev #frontend #UI #acessível #NicBRVídeo sem audiodescrição: https://youtube.com/watch?v=dS-P3cwvRg4 ou
Vídeo com audiodescrição: https://youtube.com/watch?v=5WStx9i7GLY
A atividade apresentará boas práticas para o desenvolvimento de interfaces acessíveis, com foco na criação de uma identidade visual inclusiva e acessível. Serão abordadas técnicas relacionadas ao uso de cores, design de controles e formulários, animações e demais recursos visuais. [...]
Saiba mais em: https://todosnaweb.ceweb.br/
[...] ainda hoje, após o encerramento da atividade, disponibilizaremos no site a inscrição para mais um minicurso, desta vez sobre programação contemplando os requisitos de acessibilidade na Web, que será realizado na próxima quinta-feira, dia 21 de agosto. [...]
GitLab CFO, Brian Robins, says they are “aligned with the goals of DOGE, because the company’s software tools aim to help people do more with less. What the Department of Government Efficiency is trying to do is what GitLab does.”
You either support fascism or you don’t. It’s binary. There’s no gray area or “aligning.”
Considering GitLab? Don’t.
Use @Codeberg instead.
(Hat tip @aphyr)
Exemplos entre inúmeros: 🇩🇪 Codeberg, 🇳🇱 Disroot, duas instâncias de Forgejo @forgejo@floss.social, que, por ser software livre (GPLv3), também lhe garante liberdades para que seja autohospedado, estudado, modificado e redistribuído.
Também gostaria de citar algum #Forgejo (ou sistemas afins que sejam software livre) situado no território brasileiro e com disponibilidade de abertura de contas. Quem tem?
#git #dev #SoftwareLivre #soberaniaDigital #dependênciaTecnológica
E não é que existe mesmo? Vi, enfim, que dá pra ajustar o índice OOM de um processo, então posso mandar matar logo o navegador! Mua-ra-rá! ☠️![]()
O #Linux (o kernel) poderia ter uma flag especial, útil para programadores diversos, pela qual pudesse mandar o out of memory killer ir direto no processo com determinado nome: o navegador da Web, responsável por ocupar memória considerável enquanto, nesse caso específico, ele pode ser sumariamente morto com menos trauma do que outro com eventual maior índice OOM.
Quando começa a rolar swap aqui, os dedos já coçam pra ⌨️ Alt+PrintScreen+F (só funciona se deixar isso ativado), mas o medo de matar aquilo no qual estou trabalhando (servidor de aplicação e IDE) é mais forte.
Não sou profundo conhecedor, então algo assim talvez até já exista...? 🤔
Exemplo em que 10 é o ajuste que vou especificar (poderia ser entre -16 e 15) e 13649 é o PID do processo principal do navegador:
echo 10 /proc/13649/oom_adjDestaque de página salva no Web Archive (com ajustes):
Podemos definir intervalos válidos paraoom_adjde-16a+15e uma configuração de-17isenta um processo totalmente do matador OOM. Quanto maior o número, maior a probabilidade de nosso processo ser escolhido para finalização se o sistema encontrar uma condição de OOM. O conteúdo de/proc/<PID>/oom_scoretambém pode ser visualizado para conferir a probabilidade de um processo ser morto pelo matador OOM. Uma pontuação de0é uma indicação de que nosso processo está isento do matador OOM. Quanto maior a pontuação de OOM, maior a probabilidade de um processo ser morto em uma condição de OOM.
TRACE in that file. If it's actually Hibernate under JPA, I commented that he might tweak certain properties in persistence.xml; otherwise, it would be another file. I emphasized that this is how it works at least in the Hibernate version I know. If it does not work this way, I concluded, he (or someone else—definitely not me!) would have to search the documentation for their specific Hibernate version.🤔 ...Did I just tell my manager to #RTFM??? 🙀