Quand Java bien... - Warrior du Dimanche - Antichesse (o ^ω^ o)

Merci à tous pour vos témoignages anti-java qui font que je me sens moins seul et pour vos conseils en la matière !

@Antichesse (o ^ω^ o) Merci à toi en particulier pour ta proposition il se pourrait que je te prenne au mot o/ Je vais aller essayer la rubrique openclassroom dédiée à Kotlin DQP ( https://www.youtube.com/watch?v=QpNOl2BU7tE pour la référence ^u^ )

Quand Java bien...

En ce moment, j'essaie de me remettre à Java en reprenant les cours openclassroom... c'est un langage que je n'ai jamais utilisé et j'aimerais vraiment être en mesure de coder des applis pour Android...

J'ai bien sûr commencé par le cours de base, même si les concepts me sont familiers. Pourtant, une comparaison avec d'autres langages m'aurait bien simplifié les choses (comme pour python)

Une fois ces infos ingurgitées je me suis penché sur l'utilisation d'un IDE dans cet environnement.

Et bien j'ai plusieurs choses à dire.

  • tout d'abord, les «cours» en ligne s'apparentent à des tutos et parfois, c'est vraiment trop limité, en particulier quand on passe à côté de certains trucs: il manque la possibilité de poser des questions, comme dans un vrai cours.
  • ensuite, un reproche qu'on pourrait faire à tous ceux que j'ai vus (à part Grafikart pour les autres langages), je trouve qu'ils choisissent mal leurs exemples et leurs illustrations, en particulier pour les notions abstraites. Je trouve qu'on y gagnerait à partir sur un projet concret, à le faire d'une certaine façon, au niveau 1, pour en démontrer les limites dans certains contextes (dev pro ou en équipe par exemple), voir les problèmes et comprendre l'UTILITÉ de ces concepts pour résoudre ces problèmes... (les interfaces, les classes abstraites etc...) Souvent, les tutos se contentent de régurgiter la doc, c'est nul.
  • parfois, la progression me semble très irrégulière: passer des boucles/tableaux/tests/gestion d'erreurs aux abstractions les plus hautes d'un coup, ça plonge dans la perplexité.
  • pour openclassroom, les quizz finaux sont parfois très mal formulés ce qui fait qu'on ne comprend pas vraiment ce que l'auteur attend: pourtant, la clarté de rédaction des consignes me semble primordiale quand on a des prétentions didactiques.
  • Plus j'avance dans mon «étude» de Java, plus je rencontre de problèmes qui entravent la programmation elle-même: installation qui gâtouille, versions diverses... Et je ne parle même pas de l'utilisation d'un IDE qui multiplie ces difficultés et la complexité de leur résolution de plusieurs ordres de grandeur.
Mais LUTIN Y AVAIT VRAIMENT  PAS MOYEN DE FAIRE PLUS  SIMPLE BOL D'AIR DE MERLE?
  • Les IDE, là, c'est des pitin d'usines à gaz ! C'est juste pas possible de démarrer sans avoir une courbe d'apprentissage de l'éditeur qui ridiculise celle de dwarf fortress, la lisibilité en moins ! Et vas-y que je te fous des options de partout, des structures imbitables, des libellés pour Bac+15... Namého ! Même pour arriver enfin à pondre ton «hello world», t'en a chié des contrebasses. Quand tu viens du dev web, c'est un choc.
Quand tu codes en PHP, en JS,  en Python... un sublime text  suffit pour se faire plaisir et   bosser tranquilou dans ton  coin... T'as vite des résultats  sans être emmerdé par ton IDE
  • Java en lui-même... me semble vraiment... Moche. Je trouve la façon de coder inutilement verbeuse et lourde. Alors, je sais que c'est parce que je n'ai pas atteint le «point d'habitude» qui fait que tu ne vois plus les choses non pertinentes dans le cas qui t'occupe, mais bon: en général, en lisant un bout de code, j'arrive à piger ce que ça fait, à moins de me trouver devant un bout de JS de très haute volée. Là, ça me semble toujours plus compliqué que nécessaire...

Et là vous me direz «Mais qu'est-ce que tu nous pètes les gonades avec tes états d'âme sur l'apprentissage d'un langage dont tu n'as pas vraiment besoin et que tu n'es donc absolument pas obligé d'apprendre ?»

Déjà, je répondrais que c'est pas très gentil et que j'attendais plus de solidarité de la part des développeurs

J'avais juste besoin de me vider la frustration de ne pas pouvoir apprendre plus facilement un autre langage pourtant très utilisé.

Mais en échange, je comprends la blague suivante:

2iy43iatsqu41.webp

Note : optimisation PHP - Le Hollandais Volant

Pas bête du tout ça: quand on met en place un cache en PHP, on crée le contenu s'il n'existe pas ou on le lit puis le renvoie s'il existe.

Grâce à un .htaccess bien placé, on peut servir directement le fichier s'il existe et on renvoie vers la page php censée le générer s'il n'existe pas (erreur 404)

Du coup, on n'exécute du PHP que si le contenu n'existe pas.

Pas con du tout !

Work in progress: Quicomic

Après discussions avec quelques personnes qui trouvaient Broncomic sympa, je me suis lancé dans une reprise qui soit plus adaptable:

  • j'ai repris le système de positionnement (plus simple)
  • j'ai un peu clarifié le code
  • j'ai ajouté la possibilité de créer des packs: un dossier contenant un sous dossier par calque à superposer
  • du coup, le nombre de calques et leur ordre de superposition s'adapte au pack: on peut mettre plus ou moins de calques dans son pack.
  • le pack peut contenir un fichier ini dans lequel;
    • on peut configurer les formats d'images disponibles
    • on peut spécifier l'ordre des calques
    • on peut configurer l'endroit où l'image apparaît dans le calque (en pourcentages x et y)

Reste encore du taf avant de proposer le code:

  • une page de config permettant d'uploader un pack sous forme de zip (et qui s'installe seul)
  • un sélecteur de packs
  • terminer le pack par défaut
  • faire une page FAQ pour savoir comment faire son propre pack.

Bon  ben ça commence à prendre  forme avec des graphismes  par défaut et la possibilité de faire des  PACKS .png

Broncomic : Un coup d'oeil sur mon appli dédiée à la fabrication des BD de ce site - Warrior du Dimanche - dukeart

@Duke : Effeectivement, c'est le souci de base, le risque de retrouver mon Bronco à toutes les sauces

Toutefois, si Broncomic intéresse vraiment, je réfléchirai à l'adapter pour un usage plus général:

  • en créant des graphismes plus génériques
  • en prévoyant la possibilité d'importer ses propres graphismes simplement
  • en travaillant peut-être aussi la maquette pour qu'elle soit plus mobile friendly (gros taf )
  • en isolant le code spécifique de l'appli car pour le moment, elle fait partie d'un ensemble basé sur mon framework perso
  • en refactorisant le code pour permettre à des gens sains d'esprit de le reprendre sans se retrouver en PLS avec un pompier qui leur demande combien il a de doigts...

Mais bon, ça, c'est si ça intéresse des gens

ASTUCE: Body qui apparait après chargement en 2 lignes

Un truc que je teste sur ma page de générateur de comics pour masquer le chargement de la page...

Minimaliste...


/* Dans le Head */
<style type="text/css">body{opacity: 0;transition: opacity 1s}
/* balise body */
<body onload="document.body.style.opacity=1" >

Nouvel article

Je n'ai pas lu le contenu du lien mais ça ne me paraît pas si contre intuitif que ça : quand ton appli commence à avoir du succès auprès des utilisateurs, les demandes d'amélioration ne se font pas attendre dont certaines, n'étant pas du tout envisagées au départ, peuvent entraîner soit une réécriture plus complexe de l'appli, soit - pire - un patch à la scie sauteuse et au pistolet à colle qui complique l'appli, son usage et son architecture... (#sansdeconner)

Via https://nicolas-delsaux.hd.free.fr/Shaarli/?9O0OvQ

- HTML (HyperText Markup Language) | MDN

Le jour où tu t'aperçois comme un abruti que l'input de type range prévoit la possibilité d'ajouter des repères et même des repères avec des labels !

Genre:

<input type="range" list="tickmarks">
<datalist id="tickmarks">
  <option value="0" label="0%">
  <option value="10">
  <option value="20">
  <option value="30">
  <option value="40">
  <option value="50" label="50%">
  <option value="60">
  <option value="70">
  <option value="80">
  <option value="90">
  <option value="100" label="100%">
</datalist>
Est-ce que je deviens trop   vieux pour tout ça ?!

EDIT: Ha mais c'est pas standardisé, tous les navigateurs ne l'utilisent pas... firefox par exemple...

OUF !  C'est pas moi le problème !

CSS Tips - Marko Denic - Web Developer

Je suis fan de ces astuces minimalistes...

  • filter:drop-shadow(2px 4px 8px #585858); pour faire une ombre sur des images à fond transparent.
  • scroll-behavior: smooth; pour activer le smooth scroll
  • .center { display: flex; align-items: center; justify-content: center; } pour centrer horizontalement et verticalement
  • white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pour tronquer un texte
  • caret-color:red pour changer la couleur du curseur de texte

Ou encore la fenêtre modale SANS javascript:


/* If you like this, be sure to ❤️ it. */
.wrapper {
  height: 100vh;
  /* This part is important for centering the content */
  display: flex;
  align-items: center;
  justify-content: center;
  /* End center */
  background: -webkit-linear-gradient(to right, #834d9b, #d04ed6);
  background: linear-gradient(to right, #834d9b, #d04ed6);
}

.wrapper a {
  display: inline-block;
  text-decoration: none;
  padding: 15px;
  background-color: #fff;
  border-radius: 3px;
  text-transform: uppercase;
  color: #585858;
  font-family: 'Roboto', sans-serif;
}

.modal {
  visibility: hidden;
  opacity: 0;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(77, 77, 77, .7);
  transition: all .4s;
}

.modal:target {
  visibility: visible;
  opacity: 1;
}

.modal__content {
  border-radius: 4px;
  position: relative;
  width: 500px;
  max-width: 90%;
  background: #fff;
  padding: 1em 2em;
}

.modal__footer {
  text-align: right;
  a {
    color: #585858;
  }
  i {
    color: #d02d2c;
  }
}
.modal__close {
  position: absolute;
  top: 10px;
  right: 10px;
  color: #585858;
  text-decoration: none;
}
Via https://sebsauvage.net/links/

Le dimanche, c'est cadeau: T'as pas de ball...

Moi quand je serai grand  je serai comique  pasque  moi  je fais des jeux de mots rigolos

Oui  ben en attendant  si tu pouvais arrêter de me pourrir systématiquement TOUS mes titres

Le confinement nouveau est arrivé et avec lui plein de nouvelles raisons de se poser des questions exitentielles (non, j'ai pas fait de faute) (GAG)

Pour y répondre et vous guider dans vos choix, plutôt que de vous fier aux oracles, haruspices et autres politiciens qui vous noieront sous des mensonges, des billevesées voire même des promesses électorales, pourquoi ne pas utiliser la bonne vieille 8 ball magique ?

Du coup, je vous en propose une. Sous forme d'API. Oui.

Tu poses ta question dans ta tête, tu vas sur https://api.warriordudimanche.net/8ball et tu as ta réponse. Par contre, elle est parfois un peu franche...

1 LOC | Favorite JavaScript utilities in single line of code [Edit]

OMAGAD j'adore ce genre de sites d'astuces et de snippets ultra condensés ! MERCI COPAIN ! o/

[EDIT] La vache ! Pour certaines astuces, l'auteur propose plusieurs possibilités. En bon nerd, je me dis que j'aimerais bien savoir s'il y a des différences de perfs... Spoiler: y'en a.

Pour la deuxième astuce, le clonage de tableaux, le site propose:

// `arr` is an array
const clone = arr => arr.slice(0);

// Or
const clone = arr => [...arr];

// Or
const clone = arr => Array.from(arr);

// Or
const clone = arr => arr.map(x => x);

// Or
const clone = arr => JSON.parse(JSON.stringify(arr));

// Or
const clone = arr => arr.concat([]);

Du coup, je bricole un petit test vite fait, genre ça:

function repeat(funct,nb){
        let t=Date.now();
        let arr=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9];
        for (let i=0;i<=nb;i++){
            let a=funct(arr);
        }
        return Date.now()-t;
    }
    let nb=100000;
    console.log("arr.slice(0) x "+nb+": "+repeat(function(arr){return arr.slice(0);},nb) );
    console.log("[...arr] x "+nb+": "+repeat(function(arr){return [...arr];},nb) );
    console.log("Array.from(arr) x "+nb+": "+repeat(function(arr){return Array.from(arr);},nb) );
    console.log("arr.map(x => x) x "+nb+": "+repeat(function(arr){return arr.map(x => x);},nb) );
    console.log("JSON.parse(JSON.stringify(arr)) x "+nb+": "+repeat(function(arr){return JSON.parse(JSON.stringify(arr));},nb) );

Histoire de voir ce que chaque méthode donne en vitesse ...

Le résultat est sans appel...

Capture du 2021-03-29 18-55-29.png BIM!

Donc arr.slice(0) est 10x plus rapide que [...arr] et carrément 33 fois plus rapide que le recours à JSON (la non surprise est totale)

J'aime bien faire ce genre de tests

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

Fil RSS des articles