Sommaire
Dans les petits projets informatiques qui viennent rapidement s'imposer comme ayant un réel potentiel utile, artistique et intellectuel, nous avons déjà évoqué UXN
Dans un style encore plus retro, mais aussi plus abordable, Decker semble présenter une sorte de raffinement et d'aboutissement qui ne peuvent pas laisser indifférent. Inspiré du logiciel HyperCard de la préhistoire d'Apple, il est bien plus que cela : c'est un terrain de jeu, un système de présentation, un outil de programmation interactif et visuel.
=> https://beyondloom.com/decker/ Decker
Présentation de Decker
Une certaine quantité d'éléments peuvent être développés visuellement, tandis qu'un language de script original, inspiré de Lua et Q, permet de rajouter de l'interactivité.
À rebours de la tendance actuelle qui empile les technologies jusqu'à rendre les outils indigestes (comme par exemple tout ce qui tourne toujours de javascript), l'auteur de Decker a préféré ne pas réutiliser Lua, notamment parce que ce dernier, malgré ses avantages et sa compacticité, reste environ 3 fois plus gros que tout le code de Decker + Lil. De plus, certaines caractéristiques de Lil sont uniques et non présentes dans Lua (notamment un langage de requêtes proche de SQL).
L'apparence de Decker est originale pour notre époque, et atemporelle : inspiré de System-6 sur MacOS, il détonne mais reste cohérent avec sa volonté de décroissance de l'informatique actuelle, et en cela s'inscrit dans un schéma de permacomputing qui aura ses adeptes.
Exemple de code Decker
Exemple de code à rajouter sur un canevas pour afficher une image vectorielle :
Créer un nouveau "Deck". Cliquer sur "Tool>Widgets". Cliquer sur "Widgets>New Canvas". L'agrandir sur toute la page. Cliquer sur "Widgets>Script". Effacer le modèle, et remplacer par le code plus bas. Cliquer sur "File>Close script", puis "Tool>Interact". Cliquer sur le cadre du canvas, et cela fera apparaître l'image interactive.
tip1.x:10
tip1.y:20
tip2: pointer.pos-(20,30)
tip3: pointer.pos-(20,30)-(99,12)
on click pos do
#?canvas1.clear[]
end
on wolf do
canvas1.clear[]
canvas1.line[(313,267) (380,200)]
canvas1.line[(380,200) (343,136)]
canvas1.line[(343,136) tip3]
canvas1.line[tip3 (270,90)]
canvas1.line[(270,90) tip2]
canvas1.line[tip2 (223,89)]
canvas1.line[(223,89) (301,105)]
canvas1.line[(301,105) (223,89)]
canvas1.line[(223,89) (200,93)]
canvas1.line[(200,93) (193,99)]
canvas1.line[(193,99) (249,106)]
canvas1.line[(249,106) (301,105)]
canvas1.line[(193,99) (187,113)]
canvas1.line[(187,113) (228,122)]
canvas1.line[(187,113) (138,117)]
canvas1.line[(138,117) (228,122)]
canvas1.line[(138,117) (128,147)]
canvas1.line[(128,147) (210,198)]
canvas1.line[(128,147) (175,188)]
canvas1.line[(175,188) (138,192)]
canvas1.line[(175,188) (210,198)]
canvas1.line[(138,192) (210,198)]
canvas1.line[(138,192) (133,199)]
canvas1.line[(133,199) (145,216)]
canvas1.line[(145,216) (215,220)]
canvas1.line[(215,220) (237,249)]
canvas1.line[(237,249) (313,267)]
canvas1.line[(215,220) (267,225)]
canvas1.line[(267,225) (313,267)]
canvas1.pattern:5
canvas1.fill[(300,200)-canvas1.pos]
end
on drag pos do
tip1.x:10
tip1.y:20
tip2: pointer.pos-(20,30)
tip3: pointer.pos-(20,30)-(99,12)
wolf[]
end
on release pos do
end
Enfin, une puissante ligne de commande intégrée dans Decker, en mode REPL, permettra d'offrir débogage et amusement aux plus audacieux.
Exemple de code Lil
Lil a plusieurs paradigmes de programmation : impérative et fonctionnelle notamment, le guide d'utilisation les détaille, mais on peut également l'utiliser comme langage de requêtes, façon SQL, et cela devient assez puissant pour générer des tableaux. Par exemple :
animaux.nom: "Chien", "Chat", "Loup", "Tigre", "Lion", "Canari", "Migale", "Coccinelle"
animaux.type: "Canin", "Felin", "Canin", "Felin", "Felin", "Oiseau", "Araignee", "Insecte"
animaux.pattes: 4, 4, 4, 4, 4, 2, 8, 6
animaux: table animaux
Pour afficher le tableau il suffit de taper :
select from animaux
+--------------+------------+--------+
| nom | type | pattes |
+--------------+------------+--------+
| "Chien" | "Canin" | 4 |
| "Chat" | "Felin" | 4 |
| "Loup" | "Canin" | 4 |
| "Tigre" | "Felin" | 4 |
| "Lion" | "Felin" | 4 |
| "Canari" | "Oiseau" | 2 |
| "Migale" | "Araignee" | 8 |
| "Coccinelle" | "Insecte" | 6 |
+--------------+------------+--------+
Pour afficher un tableau filtré :
select nom pattes orderby pattes asc from animaux
+--------------+--------+
| nom | pattes |
+--------------+--------+
| "Canari" | 2 |
| "Chien" | 4 |
| "Chat" | 4 |
| "Loup" | 4 |
| "Tigre" | 4 |
| "Lion" | 4 |
| "Coccinelle" | 6 |
| "Migale" | 8 |
+--------------+--------+
Pour afficher un résultat sur une ligne :
extract nom pattes orderby pattes asc from animaux
("Canari","Chien","Chat","Loup","Tigre","Lion","Coccinelle","Migale")
extract count nom from animaux
8
extract nom[4] orderby pattes asc from animaux
"Tigre"
Conclusion
Au-dela de son aspect expérimental, Decker est un beau projet développé par un passionné (John Earnest), qui l'a livré avec des manuels d'utilisation extrêmement clairs et précis.
Il existe comme application indépendante pour la plupart des OS (Linux, MacOS, Windows), ainsi qu'en mode web, dans le navigateur.
=> https://beyondloom.com/decker/decker.html Manuel de référence de Decker
=> https://beyondloom.com/decker/lil.html Manuel de référence de Lil
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.