Monthly Shaarli
June, 2024
Une syntaxe pour les fichiers de configuration qui a l’air beaucoup lisible et cohérente que les formats actuels (json, yaml, toml, …)
Un framework pour réaliser des applications Web dynamiques exclusivement en #Python.
Cela crée des composants type React - pouvant être réutilisés dans des layouts (à définir en Python également).
L'exemple repris sur la page d'accueil est celui-ci :
import reflex as rx
class State(rx.State):
count: int = 0
def increment(self):
self.count += 1
def decrement(self):
self.count -= 1
def index():
return rx.hstack(
rx.button(
"Decrement",
color_scheme="ruby",
on_click=State.decrement,
),
rx.heading(State.count, font_size="2em"),
rx.button(
"Increment",
color_scheme="grass",
on_click=State.increment,
),
spacing="4",
)
app = rx.App()
app.add_page(index)

Une alternative #PaaS self-hosted à fly.io / #heroku , mais qui a l'air de piocher des idées chez #terraform - en ne se plaçant que comme intermédiaire entre le gestionnaire (Coolify) et le serveur où le déploiement sera réalisé (Hetzner, ...).
A essayer ?

"With Burr you express your application as a #state machine (i.e. a graph/flowchart). You can (and should!) use it for anything in which you have to manage state, track complex decisions, add human feedback, or dictate an idempotent, self-persisting workflow."
Plusieurs chouettes idées pour un diagramme d'états - mais je ne vois pas trop comment l'utiliser 🤔

Et l’avis de Gee sur les IA et la fin d’internet tel qu’on l’a connu.

Une chouette analyse de l’application Cara.app de la part de David Revoy - auteur de Pepper and Carrot, et utilisateur de Debian 🐧
Support de vélo pour aller planquer un #AirTag, et sur lequel on peut encore fixer un porte gourde.
Ce n’est pas un antivol (l’AirTag prévient la personne si il la « suit » trop longtemps…), mais cela semble quand même être un chouette compromis (étanche) pour pas trop cher.
Une (re)définition de #Python (à partir de la 3.12) pour s'approcher de programmation fonctionnelle statiquement typée - et qui s'approche d' #OCaml ou #Haskell.
A partir de quelques définitions de base, cela donne des trucs très jolis comme :
>>> example = Let("x", 1, If(BinOp("<", "x", 2), 42, 0))
>>> eval({}, example)
42

Utiliser des #uuids sur de très grosses structures peut poser problème aux insertions (l'arbre sous-jacent doit être rebalancé) - et qu'il est nécessaire d'avoir 128 bits de stockage pour chaque clé - là où un entier pourrait suffire.
(mais je crois être tombé sur un article récemment qui indiquait qu'il fallait oublier les clés naturelles dans une #db relationnelle... 🤔)


La nouvelle fonctionnalité « recall » de Windows AI stocke ses informations en local, dans une base de données SQLite non protégée 👌

Un outil pour gérer les fichiers d’environnement qui est multi plateforme, multi environnement (locaux dev, …), multi langages et qui autorise le chiffrement des secrets précédents (même si je n’ai pas trop compris cette partie là 🙃) #dotenv

Une proposition d'implémentation de backgrounds-workers dans #django, avec trois possibilités d'exécution (Immediate, Database ou Dummy (pour les stocker en mémoire, donc pour les tests)) et plusieurs statuts prédéfinis (new, running, failed, complete).
Cela ressemble énormément aux tâches async
que l'on trouve en .Net.
(et c'est déjà accepté comme Enchancement Proposal ➡️ cela va arriver 😉

Des réglages "optimaux" (je n'ai pas vérifié) pour configurer une DB SQLite pour une application #django :
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
"OPTIONS": {
"init_command": (
"PRAGMA foreign_keys=ON;"
"PRAGMA journal_mode = WAL;"
"PRAGMA synchronous = NORMAL;"
"PRAGMA busy_timeout = 5000;"
"PRAGMA temp_store = MEMORY;"
"PRAGMA mmap_size = 134217728;"
"PRAGMA journal_size_limit = 67108864;"
"PRAGMA cache_size = 2000;"
),
"transaction_mode": "IMMEDIATE",
},
},
}

