Damien Cassou a écrit 50 commentaires

  • [^] # Re: Excellente initiative !

    Posté par  . En réponse à la dépêche L’installation et la distribution de paquets Python (1/4). Évalué à 3.

    J'ai adoré l'article, merci !

  • # Petite correction sur l'envoie de message

    Posté par  . En réponse à la dépêche Pharo : quoi de neuf ?. Évalué à 4.

    Condition
          ifTrue: quelque chose
          ifFalse: autre chose
    

    Condition est un objet de type booléen à qui on envoie deux messages (ifTrue et ifFalse, avec à chaque fois un bloc comme argument).

    En fait, ifTrue:ifFalse: est une méthode de la classe abstraite Boolean avec une implémentation différente dans les sous-classes concrètes True et False. Voici l'implémentation de la méthode dans la classe True:

    True>>ifTrue: trueBlock ifFalse: falseBlock
      ^ trueBlock value
    

    La première ligne est la signature de la méthode ifTrue:ifFalse: qui prend 2 arguments (trueBlock et falseBlock). La deuxième ligne est l'implémentation qui retourne la valeur du premier argument. Dans la classe False, l'implémentation est la même sauf que c'est la valeur du deuxième argument qui est retournée. Grâce à ça, le langage n'a pas besoin de if/then/else.

    Dans le code de l'article, un seul message ifTrue:ifFalse: est envoyé à l'objet Condition pour que la méthode du même nom soit exécutée, et non pas deux.

  • [^] # Re: Il est où l'APK ?

    Posté par  . En réponse à la dépêche Firefox 80 Quantum et Daylight sont sortis !. Évalué à 3.

    J'utilise ça depuis un moment. Mais j'avoue m'y perdre avec tous les "Firefox" disponibles :

    • Firefox Klar
    • Firefox Focus
    • Firefox Lite
    • Firefox Browser
    • Firefox Nightly
    • Firefox Lockwise
  • # Excellent article pour un excellent gestionnaire de paquets

    Posté par  . En réponse à la dépêche Gestion de paquets évoluée avec Nix : cachix, overlays et home‑manager. Évalué à 5. Dernière modification le 26 novembre 2019 à 07:25.

    Très bel article, beau travail. Nix est vraiment en gestionnaire de paquets hors du commun.

  • [^] # Re: BankID

    Posté par  . En réponse au journal Lettre ouverte à La Banque Postale. Évalué à 2.

    BankID réclame à chaque démarrage que les services Google soient installés même si elle semble fonctionner en leur absence. De plus l'application Android est propriétaire et n'est disponible à ma connaissance que sur le Play Store. Pour moi, c'est pas l'idéal non plus cette solution.

  • [^] # Re: Petites typos

    Posté par  . En réponse à la dépêche Gnuk, NeuG, FST-01 : entre cryptographie et matériel libre. Évalué à 3.

    Je pense que cette ligne

    $ sudo ./neug_upgrade.py ../../gnuk/regnual/regnual/bin ../../gnuk/src/build/gnuk.bin

    devrait être corrigé pour contenir ../../gnuk/regnual/regnual.bin plutôt que ../../regnual/regnual/bin.

  • # Comment choisir ?

    Posté par  . En réponse à la dépêche Gnuk, NeuG, FST-01 : entre cryptographie et matériel libre. Évalué à 5.

    Excellent article encore. Merci

    Cet article arrive à point, j'allais justement passer commande chez Nitrokey. Je me demande maintenant si je ne vais pas plutôt passer par la FSF même si le prix est quand même bien supérieur ($50 à la FSF, 29€ pour la NitroKey Start). Pourquoi avoir pris la clé de la FSF plutôt que la Start ? Referais-tu ce choix aujourd'hui ?

    J'aimerai mettre ma clé primaire sur un token aussi pour que ma clé ne soit jamais accessible. Est-ce que ça vaut le coût de payer un deuxième token (surtout s'il coûte $50) ?

  • # Nix et NixOS sont top

    Posté par  . En réponse à la dépêche Le gestionnaire de paquets Nix en version 2.0. Évalué à 3.

    Super article. Je recommande chaudement Nix et NixOS (ou GuixSD que je n'ai pas essayé mais qui utilise Nix). GNU/Linux Mag leur avait consacré un article dans le numéro 203.

  • # Container Firefox 57 vs. Test Pilot

    Posté par  . En réponse au journal Firefox 57 - onglets contextuels et autres joyeusetés. Évalué à 1.

    La fonctionnalité always open in n'est pas (encore) dans Firefox 57. On la trouve dans le Test Pilot : https://testpilot.firefox.com/experiments/containers.

  • # Article Nix/NixOS dans le GNU/Linux Magazine du mois

    Posté par  . En réponse à la dépêche NixOS, collection printemps‐été 17. Évalué à 1.

    Le GNU/Linux Magazine du mois (numéro 203) a un article présentant Nix et NixOS. Je vous le recommanderais chaudement si je ne l'avais pas écrit :

    http://www.gnulinuxmag.com/mettez-en-place-un-systeme-de-reconnaissance-faciale/

    Bonne lecture

  • [^] # Re: Data mining

    Posté par  . En réponse à la dépêche Sortie de Pharo et de son environnement de développement en version 4.0. Évalué à 1.

    Qu'est-ce que tu cherches exactement en terme de fouille de données ?

  • [^] # Re: Un peu embêté...

    Posté par  . En réponse à la dépêche Sortie de Pharo et de son environnement de développement en version 4.0. Évalué à 3.

    C'est plutôt intéressant de pouvoir constater tout ça tout seul, et le modifier après.

    c'est une des grandes forces de Pharo (ainsi que des autres Smalltalk et des Lisp) : tout son code est sous le nez, tout le temps et il est modifiable !

  • [^] # Re: Un peu embêté...

    Posté par  . En réponse à la dépêche Sortie de Pharo et de son environnement de développement en version 4.0. Évalué à 2.

    Tu demandes à la méta-classe de Transcript (obtenue via le message class de Transcript) […]

    bien tenté mais en fait non :-). Transcript n'est pas une classe, c'est une variable globale, unique instance de ThreadSafeTranscript.

    (SystemWindow allInstances size > 1)

    ça ne suffit pas car il pourrait y avoir d'autres instances de SystemWindow qui ne serait pas des transcripts. Une solution possible est de ne compter que les instances dont le label est Transcript. Dans tous les cas, je recommande d'utiliser la méthode #detect:ifFound:ifNone: qui évite à la fois les parenthèses, la comparaison entre la taille et le nombre 1 et le #ifTrue:ifFalse: qui suit.

  • [^] # Re: Un peu embêté...

    Posté par  . En réponse à la dépêche Sortie de Pharo et de son environnement de développement en version 4.0. Évalué à 2.

    Ah, ça c'est une super nouvelle ! On peut aider ?

    c'est plus que bienvenu ! Il suffit de récupérer le livre et de faire des pull requests avec les changements. Envoie moi un email pour plus de précisions.

  • [^] # Re: Un peu embêté...

    Posté par  . En réponse à la dépêche Sortie de Pharo et de son environnement de développement en version 4.0. Évalué à 5.

    dommage que les livres "Pharo par l'exemple" soient un peu périmés, d'ailleurs

    Nous en sommes bien conscient et le livre Updated Pharo by Example va dans ce sens (en cours de mise à jour).

    C'est peut-être pas le meilleur endroit pour ça, mais personne ne parle alors je pose ma question.

    ça fait vivre le post, merci !

    Mon but c'était d'être sûr qu'on ouvrirait au plus un seul Transcript. Seulement voilà, quand je sauvegarde et que je clique sur les fenêtres de ma GUI, plusieurs Transcript s'ouvrent.

    Transcript est un singleton : unique instance de la classe ThreadSafeTranscript. De plus, Transcript représente le modèle, i.e., l'objet qui reçoit le texte à afficher. Il faut le distinguer de la vue (instance de la class PluggableTextMorph) qui offre une représentation graphique du modèle. Le code Transcript open augmente le nombre d'instances de PluggableTextMorph mais pas le nombre d'instances de ThreadSafeTranscript qui reste à 1.

    Pour faire ce que tu veux, je te conseille de n'utiliser que la méthode show: dans ton code. Quand tu le souhaites, tu ouvres un transcript depuis le World menu (en cliquant sur le bureau).

  • [^] # Re: think IDE and OS rolled into one

    Posté par  . En réponse à la dépêche Sortie du langage Pharo et de son environnement de développement en version 3.0. Évalué à 4.

    C'est une bonne remarque. Pour le moment, Pharo reste monolithique : soit tu prends tout (langage et outils) soit rien. Cependant, nous travaillons à la séparation des deux, notamment avec le projet Coral que l'on relance. On manque de bras, toute aide est la bienvenue.

  • [^] # Re: Un phare isolé ?

    Posté par  . En réponse à la dépêche Sortie du langage Pharo et de son environnement de développement en version 3.0. Évalué à 1. Dernière modification le 07 mai 2014 à 11:19.

    Un avantage de contrôler l'ensemble de l'environnement est de pouvoir faire des choses comme ça : https://www.youtube.com/watch?v=uKhXLOu_DBU

  • [^] # Re: Un phare isolé ?

    Posté par  . En réponse à la dépêche Sortie du langage Pharo et de son environnement de développement en version 3.0. Évalué à 7.

    Tu as tout a fait raison. Pharo est un héritier de Smalltalk dont la tradition a toujours été de fournir un environnement englobant. Je ne connais pas bien l'histoire, mais je suppose que ça vient de la vision d'Alan Kay autour du Dynabook et de l'OLPC qui devaient être utilisés par les enfants. L'interface de Squeak (projet duquel Pharo provient suite à un fork) devait fournir un environnement complet pour l'éducation : manipulation d'objets divers, dessin, programmation…

    De nos jours, nous sommes nombreux à penser que ça n'est plus forcément très raisonnable et certains travaillent à une nouvelle couche graphique (appelée Mars) qui permettrait d'utiliser les widgets natifs et les fenêtres du système hôte.

    Il est tout à fait possible de déployer une application graphique, console ou web dans une version restreinte de Pharo. Pour les applications graphiques desktop, il est possible d'utiliser XUL par exemple (grâce au framework Phobos).

  • [^] # Re: Inspiré de Smalltalk?

    Posté par  . En réponse à la dépêche Sortie du langage Pharo et de son environnement de développement en version 3.0. Évalué à 10.

    Effectivement, on peut voir Pharo comme une implémentation du standard Smalltalk avec son environnement de développement et ses bibliothèques de code. Cependant, nous avons décidé d'arrêter de dire ça car le standard Smalltalk n'évolue plus alors qu'on améliore Pharo en permanence.

    Ça signifie qu'on s'autorise à ne pas être compatible avec le standard. Par exemple, Pharo possède la notion de trait (un mécanisme d'héritage multiple de méthodes) alors que le standard ne le prévoit pas. De même, dans la prochaine version de Pharo, on n'utilisera plus de chaînes de caractères pour déclarer les variables d'instances car on utilisera à la place les Slots (un mécanisme beaucoup plus poussé qui permet d'avoir différents types de variables d'instances avec des comportements différents). Là encore, on s'éloigne du standard Smalltalk. Enfin, le standard définit une API qu'on s'autorise à remplacer petit à petit par une autre plus moderne.

    Pour toutes ces raisons, on parle maintenant de Smalltalk-inspired et plus d'implémentation de Smalltalk.

  • [^] # Re: semble sympa.

    Posté par  . En réponse à la dépêche Sortie d'Amber 0.11.0. Évalué à 5.

    model: aModel
        model := aModel
    

    La première ligne permet de définir la méthode. Le nom de la méthode est model:. Cette méthode possède un paramètre dont le nom est aModel. On ne connaît pas le type du paramètre ni le type de retour de la méthode. La deuxième ligne affecte la valeur de l'argument aModel à la variable d'instance model. Cette méthode est donc tout simplement un setter.

    onClassMoved: anAnnouncement
    

    définition d'une nouvelle méthode dont le nom est onClassMoved: et qui prend un paramètre nommé anAnnouncement.

        | class oldPackage |
    

    déclaration de 2 nouvelles variables temporaires. En Smalltalk on doit déclarer toutes les variables que l'on utilise.

        class := anAnnouncement theClass.
    

    assignation à la variable temporaire class de la valeur résultante de l'envoie du message theClass (sans argument) à l'objet anAnnouncement.

        oldPackage := anAnnouncement oldPackage.
    

    même chose.

        (oldPackage = self model selectedPackage or: [
            class package = self model selectedPackage ])
    

    expression qui retourne un booléen. L'expression est un OR entre 2 égalités.

                ifFalse: [ ^ self ].
    

    ifFalse: est un message envoyé au booléen (de la ligne précédente) qui prend un block en paramètre. Le block n'est évalué que si le booléen vaut false. L'accent circonflexe ^ signifie "return". Ici, on retourne l'objet courant (self = this en Java). C'est donc pareil que return this en Java. En Smalltalk, toutes les méthodes retournent un objet, et self est retourné par défaut. Donc, si la condition est fausse, on quitte la méthode.

        oldPackage = self model selectedPackage ifTrue: [ 
            self 
                selectedItem: nil;
                selectItem: nil ].
    

    La première ligne définie une condition. Si la condition est vraie, on envoie 2 messages à self (= this). Le premier message est selectedItem: avec un argument à nil (= null). Le deuxième message est selectItem: avec un argument à nil. Il faut noter l'utilisation du ; qui permet d'envoyer plusieurs messages à un même objet.

        self setItemsForSelectedPackage.
        self refresh
    

    Ici on envoie 2 messages à self, aucun ne prenant d'argument. On aurait pu utiliser un ; ici aussi.

  • [^] # Re: semble sympa.

    Posté par  . En réponse à la dépêche Sortie d'Amber 0.11.0. Évalué à 2.

    Tu as des exemples de code à montrer ? As-tu regardé le flyer ?

  • [^] # Re: semble sympa.

    Posté par  . En réponse à la dépêche Sortie d'Amber 0.11.0. Évalué à 2.

    Pour la première question sur les 2 environnements, je ne sais pas trop. Avec Amber, toute la partie graphique du site est rendue dynamiquement et il n'y a donc pas un fichier HTML qui représente la charte. Je pense que c'est la problème avec beaucoup de technologie web modernes (comme JQuery) qui manipulent le DOM HTML.

    En ce qui concerne la qualité du code, je vais être beaucoup plus affirmatif : oui, le code peut rester propre même pour les très grosses applications, il suffit juste que ça soit un des objectifs des développeurs. Regarde par exemple le code d'Helios ou celui du compilateur.

  • [^] # Re: Cool

    Posté par  . En réponse à la dépêche Sortie d'Amber 0.11.0. Évalué à 3.

    La syntaxe s'apprend vraiment vite car il n'y a quasiment rien à savoir. Toute la syntaxe (+ des infos sur l'environnement de développement Pharo) tient sur un flyer.

    Côté serveur, n'importe quoi qui fait du REST convient. Pharo par exemple avec Zinc ou Seaside. JSON est parfaitement supporté côté client et côté serveur. Voir par exemple la documentation de Zinc .

  • [^] # Re: Cool

    Posté par  . En réponse à la dépêche Sortie d'Amber 0.11.0. Évalué à 1.

    Le bug est connu. Il paraît que ça marche avec d'autres navigateurs, mais je n'ai pas essayé.

  • [^] # Re: font

    Posté par  . En réponse à la dépêche GNU Emacs 24 est là !. Évalué à 0.

    J'ai ça dans mon .emacs.d/init.el pour ceux qui veulent changer leur police :

    (custom-set-variables
     '(default-frame-alist (quote ((font . "Inconsolata-12"))))