Planet Crafter [early access] : pourquoi c'est bien

J'ai pris du temps pour jouer un peu à planet crafter et je dois avouer que passé la première impression de béta version mal finie - essentiellement à cause de quelques bugs de collision (non bloquants) et d'un aspect graphique un peu daté et peu élaboré de prime abord - j'ai vraiment apprécié d'y jouer...

Et c'était pas gagné parce que  en dehors des Elder Scrolls,   les jeux vidéos m'ennuient  de plus en plus...

Du coup, pourquoi ?

1. c'est un monde ouvert à la première personne

Il y a un côté immersif indéniable... on se promène dans les limites de sa réserve d'O2, on découvre de nouveaux biomes dont la plupart ne sont pas bloqués. Certaines zones sont inaccessibles à cause de la glace qui doit fondre, mais globalement, pas de blocages artificiels des zones... Si tu te casses en mode full bûchette pour l'O2, tu peux aller loin assez vite.

J'ai trouvé certaines idées plutôt bonnes, comme le fait de n'obtenir une carte que lorsque tu es en mesure d'expédier des satellites GPS en orbite. Bonne trouvaille !

2. la difficulté est bien dosée

Contrairement à Breathedge où l'on stresse beaucoup et où le level design te pousse à retourner à un point d'o2 à la dernière seconde, on ne stresse pas vraiment dans Planet Crafter: pas d'urgences, pas de moments où on doit se mettre vraiment en danger pour obtenir une ressource... si on meurt, c'est vraiment qu'on a mal dosé... C'est un jeu qui détend vraiment.

3. c'est non violent

comme subnautica, pas de tchac tchac poum poum au menu... Normal puisque le but est de terraformer la planète, donc, niveau monstres à buter, c'est plutôt calme, faut reconnaître.

Donc, on fait son petit bonhomme de chemin avec un arbre technologique simple mais satisfaisant.

4. c'est écolo

Là où satisfactory te conduit à pourrir la planète à tour de bras et te récompense pour ça, Planet crafter se place résolument aux antipodes... Tu pars d'un monde hostile à la vie et tu dois y augmenter la température et la pression progressivement, créer une atmosphère, parvenir à y développer des formes de vie simple, puis de la végétation, des insectes et enfin des poissons et batraciens.

Au lieu de devenir de plus en plus laid à force d'industrialisation outrancière, grâce à toi, un monde de roche inerte prend peu à peu vie et s'embellit progressivement.

5. Ce n'est pas compliqué (ni même complexe)

La courbe d'apprentissage du jeu est très douce: l'interface est simple, les outils sont faciles à comprendre et même l'arbre technologique est linéaire... pas de prise de tête à mettre en place une stratégie de développement vu que les items se débloquent tout seuls à certains paliers de terraformation. Pour un gars sommaire et lent à piger comme moi, c'est le top... Par contre, si tu aimes le challenge et l'organisation dantesque à la rimworld...

Peu de surprises dans ce jeu: on retrouve les choses qu'on aime et on attend avec impatience de les obtenir (coucou le jet pack )

Le plaisir immédiat y gagne ce que l'originalité y perd. On s'amuse très vite.

6. on peut automatiser

À partir d'un certain niveau de développement, on obtient des outils d'automatisation: un autocrafter et des drones... Et ça donne un nouveau souffle au jeu en ajoutant une petite dimension satisfactory pile au moment où on commençait à en avoir marre du combo répétitif farm de ressources/craft... ça relance vraiment l'intérêt sans compliquer le jeu... et de façon assez naturelle...

Conclusion

Je suis parvenu à l'étape où l'on attend l'apparition des mammifères et on voit clairement qu'ils ne sont pas implémentés car la progression est devenue très très lente... C'est donc à regrets que je quitte un monde dans lequel je n'ai plus grand chose d'autre à faire que de planter des arbres...

Si tu veux un jeu calme pour te détendre et débrancher ton esprit des emmerdes quotidiennes sans t'ajouter de la charge mentale inutile, si tu as aimé subnautica et satisfactory, si tu as peu de temps devant toi pour tes sessions de jeu... alors, planet crafter est pour toi...

5 extraits CSS que tout développeur front-end devrait connaître en 2024

Il y a de ces trucs en CSS quand même...

Quelques notes perso ici...

:has()

styler le parent en fonction du nombre d'enfants

Pour modifier une grid par exemple...

main:has(> :nth-child(5)) {…}

styler un élément selon l'état d'une checkbox

Pour appliquer un darkmode

html:has(#dark-mode:checked) {…}

styler un form dont au moins un des items est invalide

form:has(:user-invalid) .error {
  display: block;
}

L'imbrication CSS

Et moi qui pensais que ce n'était réservé qu'à des sass & consorts !

Voilà qui permettra de mieux organiser le code et le rendre plus lisible...

/*AVANT*/
.nesting {
  color: hotpink;
}
.nesting > .is {
  color: rebeccapurple;
}
.nesting > .is > .awesome {
  color: deeppink;
}
/* MAINTENANT*/
.nesting {
  color: hotpink;

  > .is {
    color: rebeccapurple;

    > .awesome {
      color: deeppink;
    }
  }
}

[EDIT] Par contre, ce n'est pas forcément supporté par les navigateurs pas à jour... https://caniuse.com/css-nesting

text-wrap:balance

en gros, pour rendre plus homogène un texte sur plusieurs lignes... Attention, pas pour un texte de plus de 10 lignes apparemment.

via https://bookmarks.ecyseo.net/?DunHiA

Conciliateur de justice | Service-public.fr

Oh ! Bon à savoir, ça: un médiateur gratuit qui permet de régler les conflits à l'amiable:

Compétent pour

  • Problèmes de voisinage (bornage, droit de passage, mur mitoyen)
  • Différends entre propriétaires et locataires ou entre locataires
  • Différends relatifs à un contrat de travail
  • Litiges de la consommation
  • Litiges entre commerçants
  • Litiges en matière de droit rural
  • Litiges en matière prud'homale

On peut trouver le conciliateur le plus proche là: http://www.conciliateurs.fr/Trouver-une-permanence

Via https://shaarli.mydjey.eu/shaare/67xoyw

PHP - Notes perso sur Imagick, un résumé de pourquoi je vire GD à coups de pompes dans l'oignon.

Allez, pour une fois, j'ai un peu de temps devant moi, je vais éplucher un peu la lib Image magick dont je parlais il n'y a guère...

La base

charger UNE image

Simple: pas besoin de plusieurs fonctions selon le format, il suffit de $images = new Imagick('image.jpg');

charger DES images (et là c'est fort)

Même pas nécessaire de passer par un foreach, on fournit le tableau des fichiers voire directement un glob: $images = new Imagick(glob('images/*.JPG'));

Sauver une image

$im->writeImage('image.jpg');

Faire une miniature

Si on laisse une dimension à 0, les proportions sont conservées (quand tu vois la merde que c'est avec GD !) $image->thumbnailImage(100, 0);

Output une image

header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
# ici on effectue un traitement puis on sort le résultat
echo $image;

Récupération d'infos sur les images

  • taille $im->getImageWidth() $im->getImageHeight()
  • format $im->getImageFormat()

création d'une nouvelle image

$im->NewImage(largeur,hauteur,couleur de fond);

création d'une couleur

Comme pour GD, il faut créer un objet couleur dans les traitements d'image, mais c'est plus simple qu'avec GD (et plus complet): il suffit de passer une couleur selon les normes CSS. Du coup, la transparence n'est pas gérée par une connerie de paramètre «alpha» mais simplement par ... rgba()... 💖

$couleur=new ImagickPixel("white");
$couleur=new ImagickPixel("#FFF");
$couleur=new ImagickPixel('rgb(255,255,200)');
$couleur=new ImagickPixel('rgba(255,255,200,0.5)');

🆒 ⮕ Ça peut paraître compliqué, mais en fait, dans les fonctions où on est sensé utiliser ImagickPixel, je me suis aperçu qu'on pouvait tout simplement passer une string contenant la couleur css... elles se démerdent seules. 😍

Traitements

Ajouts

  • de bordure ->borderImage(couleur,largeur bords verticaux, largeur bords horizontaux): $im->borderImage(new ImagickPixel("white"), 5, 5);
  • de texte :
  • de stéganographie (cacher un filigrane dans une image) ->steganoImage():

Modification de couleurs

  • sepia ->sepiaToneImage(force) : une valeur raisonnable est 80 (sic)
  • solarisation ->solarizeImage(force)
  • négatif ->negateImage(gris): $im->negateImage(0);
  • niveaux
    • $im->normalizeImage();
    • $im->autoLevelImage();
  • gamma ->gammaImage(niveau) : $im->gammaImage(5);
  • contraste $im->contrastImage(niveau)
  • luminosité et contraste $im->brightnessContrastImage(niveau luminosite, niveau contraste);
  • égalisation $im->equalizeImage()
  • coloriser ->colorizeImage(couleur,opacite) : $im->colorizeImage("red",0.5); 🤬 pas réussi à l'utiliser pour ce test...

Modification de taille et d'orientation

  • redimensionner :
    • ->resizeImage(largeur,hauteur, filtre, flou) : $i->resizeImage(250,0,Imagick::FILTER_POINT,0);
    • ->scaleImage(largeur,hauteur): pas encore compris la différence avec la précédente
    • recadrer ->cropImage(largeur,hauteur,x,y): $im->cropImage(200,200,50,50);
    • 💖 créer une miniature à la taille donnée en recadrant l'image autour du centre ->cropThumbnailImage(largeur,hauteur)
  • retourner :
    • $im->flipImage() pour retourner horizontalement
    • $im->flopImage() pour retourner verticalement
  • pivoter ->rotateimage(color, $angle): $im->rotateImage(new ImagickPixel('#00000000'), 75);

Modifications de qualité

  • modification d'opacité ->setImageOpacity(0-1) : $im->->setImageOpacity(0.3);
  • netteté ->sharpenImage(rayon, deviation,canal):
  • amélioration ->enhanceImage()
  • flou :
    • flou tout court ->blurImage(rayon, décalage): $im->blurImage(5,2);
    • gaussien ->gaussianBlurImage(rayon, deviation) : $im->gaussianBlurImage(5,2);
    • de mouvement ->motionBlurImage(rayon,deviation,angle) : $im->motionBlurImage(5,5,45);
  • réduction du nombre de couleurs ->posterizeImage(nb de couleurs, 0/1) :$im->posterizeImage(5,0);
  • ajout de bruit ->addNoiseImage(type) : `$im->addNoiseImage(imagick::NOISE_GAUSSIAN ); voir les constantes de type de bruit

Modification d'aspect et déformations

  • aspect crayon $im->sketchImage(rayon, deviation, angle);
  • aspect fusain $im ->charcoalImage(rayon, deviation);
  • aspect emboss ->shadeImage(gris, angle, hauteur):
    • $im->->shadeImage(1, 90, 2); # emboss + image grisée
    • $im->shadeImage(0, 90,2) # emboss sur l'image d'origine (couleur)
  • peinture à l'huile ->oilPaintImage(rayon) : $im->oilPaintImage(5);
  • détection de bords ->edgeImage(rayon) : $im->edgeImage(5);
  • vagues ->waves(amplitude,longueur): $im->waveImage( 10, 10);
  • déformation ->distortImage(methode, arguments[],0) : voir les constantes de déformation

interactions d'images

Conclusion

Image Magick me semble particulièrement bien nommée tant les possibilités sont énormes et la simplicité d'utilisation étonnante: on sent une volonté de se simplifier la vie lors de l'utilisation... c'est juste beau.

Je voulais mettre une image de chaque effet dans les descriptions mais:

  1. ça prenait une place de ouf
  2. je préfère reprendre certaines de mes applis/api avec imagick
  3. j'ai plus le temps, les autres arrivent
  4. j'ai la flemme.

[EDIT] En fait, j'ai fait une page de test même si tout n'est pas concluant : http://test.warriordudimanche.net/imagick/

RIDITLETEUR spécial DEV : CSS, HTML, JS, PHP...

A l'occasion d'un ménage dans les brouillons de billets, je compile les trucs DEV qui trainaient par là

Ressources CSS

Ressources JS

Ressources PHP

  • https://github.com/jcampbell1/simple-file-manager : GitHub - jcampbell1/simple-file-manager: A Simple PHP file manager. The code is a single php file.
  • https://grafikart.fr/tutoriels/authentification-2-facteurs-totp-630 : Tutoriel vidéo PHP : Authentification 2 facteurs, TOTP | Grafikart
  • https://phpbestpractices.org/ : A short, practical guide for common and confusing PHP tasks (Storing passwords, PHP and MySQL, PHP tags, Auto-loading classes, Single vs. double quotes, define() vs. const, Caching PHP opcode, PHP and Memcached, PHP and regex, Serving PHP, Sending email, Validating email addresses, Sanitizing HTML, PHP and UTF-8, Working with dates and times, Checking null and false values, Removing accent marks (diacritics) )

Tiny Tims Adventures - YouTube

Pour toute personne ayant envie de sourire - voire de rire - aujourd'hui, je partage la chaîne de Tim, un Anglais qui imite à la perfection un enfant de «trois ans bientôt six» et fait des blagues aux gens...

Fous rires garantis

Everything, Everywhere, All at Once - Chez Sammy

Il était passé complètement à côté, le Bronco...

J'ai trouvé le film long et le côté déjanté, appréciable au début, a fini par me perdre...

Tu m'as donné envie de lui redonner une chance, en particulier pour le personnage de Waymond ... Allez, dès que je suis assez en forme pour pas m'endormir à 21:00 devant l'écran.

Serie: Last of Us, la meilleure serie... tout court ?

Je viens de terminer last of us et je pense qu'il s'agit de la meilleure série que j'ai vue.

L'histoire

Je n'ai jamais joué au jeu ce qui fait que je n'avais aucun à priori, positif ou négatif. Toutefois, le scénario est solide, l'histoire bien racontée, les flashbacks particulièrement bien amenés... l'ensemble est cohérent et remarquablement bien rythmé. On ne s'ennuie pas, toutes les digressions servent la narration.

On retrouve beaucoup de références aux films de zombie mais tout est amené et utilisé de façon si subtile et intelligente que jamais on ne se dit «personne ne fait ça!». Mieux, on retrouve souvent le personnage en train de faire ce à quoi on pensait la minute d'avant... bâtir un scénar solide et une histoire qui tient la route avec des personnages qui font ce que ferait une personne normale à ce moment là: voilà une recette efficace pour maintenir le spectateur dans l'histoire.

Les personnages

Pas de manichéisme ici: difficile de juger et de condamner les personnages tant ils naviguent dans le gris. Ni bons ni méchants, juste des gens qui cherchent à survivre et la morale «habituelle» n'est pas forcément celle qu'on retient. Les personnages sont remarquablement humains, en particulier les personnages principaux, qui évoluent ensemble au fil des neuf épisodes.

Le jeu des acteurs

Il y avait longtemps que je n'avais pas vu d'aussi remarquables acteurs: Bella Ramsey et Pedro Pascal sont tout simplement exceptionnels. Leur jeu évolue tout le long des épisodes de façon très subtile et humaine. Les meilleurs moments se passent même de dialogues et leur jeu comble les non dits: on voit comment l'homme redevient progressivement père et comment la jeune adolescente devient petit à petit la fille du premier. C'est tout simplement magistral.

Ce que j'ai particulièrement apprécié, c'est l'absence de volonté de montrer des gens sublimes: au contraire, on se sent proche de ces personnages imparfaits, non maquillés et loin des gravures aux corps parfaits qu'on nous impose à chaque fois. On se sent proche d'eux et on les aime, plus sincèrement à chaque épisode. Bella Ramsey est parfaite et son jeu est impressionnant de naturel. Elle EST Ellie, dans toutes ses dimensions humaines - faiblesses comme forces. Pedro Pascal n'est pas en reste: on retrouve dans son jeu tous les sentiments d'un père ayant perdu sa fille dans un monde détruit et qui retrouve une raison de vivre avec l'arrivée d'Ellie.

Merci à eux deux pour cette prestation sans faille. J'en ai encore la gorge serrée.

Des histoires plutôt qu'une histoire

Certains épisodes racontent l'histoire parallèle à celle des personnages principaux, mais pas comme une digression... plutôt comme le complément qui montre que l'histoire d'une personne ne saurait être séparée de celle de son entourage.

Je retiens en particulier l'histoire d'amour de l'épisode 3: ce que je reproche souvent aux séries et films mettant en scène l'homosexualité, c'est de le faire de façon parfaitement artificielle, comme un prétexte pour être à la mode, une façon un peu racoleuse de tenter de séduire un public ciblé pour vendre sa came. C'est moche, sans saveur et, surtout, ça n'apporte strictement rien à l'histoire.

Ici, tout est parfait: leur rencontre, la sensibilité, la simplicité et l'humanité avec laquelle leur histoire est racontée, la beauté et le romantisme, le vrai, qui marque leur histoire... Au bout du compte, la série choisit de montrer ce qu'il y a de beau à sauver dans l'humanité en montrant deux hommes qui s'aiment. Jamais de voyeurisme, jamais de grandes phrases. En plus on choisit un survivaliste - parangon de virilisme habituellement - pour cette histoire. Magnifique et habilement mené. J'en ai eu les larmes aux yeux.

On notera également la suggestion des sentiments naissants d'Ellie pour son amie, là aussi si subtils qu'on ressent l'émotion de nos propres premiers émois amoureux. Magistral de simplicité, de naturel et d'humanité.

En fait, tout est là: le regard posé sur les personnages est toujours bienveillant et compréhensif, sans artifice, sans complication, sans clichés et c'est là la remarquable maîtrise qui rend l'ensemble si exceptionnel.

Merci pour ces neuf épisodes, merci pour cette fin, merci pour Ellie, pour Joe, pour Bill et Frank... Merci pour ces moments et pour l'attachement à ces personnages.

Désormais, toutes les séries devront se mesurer à l'aune de Last of Us à mes yeux.

SwebDev - La fonction CSS clamp()

Clamp permet de spécifier trois valeurs pour une propriété : la valeur minimale, la valeur préférée et la valeur maximale.

Glopglop N°1

Ainsi, on pourra donner des tailles fixes comme minimum et maximum et une taille variable (pourcentages ou valeur de viewport) comme valeur préférée: la valeur variable sera utilisée, mais bornée au minimum et au maximum. ex: clamp(20px, 5vw, 54px)

Glopglop N°2

On peut faire des calculs directement dans clamp() : font-size: clamp(20px, 16px + 5vw, 54px);

Glopglop N°3

Clamp peut être utilisé sur les paddings, les margins etc... Tout ce qui a une valeur numérique (length, number, percentage...)

Lectures de vacances : 1 légende, 1 labyrinthe, 2 auteurs découverts - Chez Sammy

Ouelcome back copain !

Je partage ton avis sur Dieu David Gemmell et celui qui est sur les quatrième de couv' de ses romans: «on a envie de croire que tout cela fut vrai tant c'est beau»

Écriture simple et claire mais jamais simpliste, univers cohérent (c'est pas si souvent), personnages forts mais humains... <3

Et Pratchett aussi ! (j'ai - encore - recommencé la lecture des annales du disque monde... )

Fil RSS des articles