Journal Kansha, clone de Trello, écrit sans une ligne de javascript, ajax compris, avec le framework Nagare

Posté par  . Licence CC By‑SA.
11
23
déc.
2016

Kansha est un clone de Trello (et plutôt bien fait). Il est open-source, avec une image Docker et tout, il est utilisé par de gros comptes, le lien pointe vers une démo. Et il est construit avec un framework Python qui abstrait le html, le javascript et jusqu'aux appels Ajax. Il s'agit de Nagare, un framework alien basé sur des continuations.

Sa liste de fonctionnalités dit que…

… le programmeur est soulagé de plusieurs problèmes inhérents au développement web:

  • plus besoin de mapping d'URL manuel,
  • pas d'objet session global. Tous les états de tous les composants sont gardés sur le serveur,
  • Ajax automatique, sans plus de code python ou javascript à ajouter,
  • clustering possible avec memcached,

… et que

  • le framework est basé sur des composants, facilement réutilisables
  • les continuations permettent d'écrire une appli web comme une appli de bureautique, c'est à dire (si je comprends bien) avec du code linéaire,
  • si on donne une fonction python à une méthode client, Nagare la traduit en javascript,

Une vue ressemble à ça:

@presentation.render_for(Board, 'switch')
def render_Board_item(self, h, comp, *args):
    reload_search = ajax.Update(component_to_update='show_results',
                                render=lambda renderer: comp.render(renderer, 'search_results'))
    h << h.script(u'''$(window).on('reload_search', function() { %s; })''' % reload_search.generate_action(41, h))

    with h.div(id='switch_zone'):
        if self.model == 'columns':
            search_cb = ajax.Update(
                action=self.search,
                component_to_update='show_results',
                render=lambda renderer: comp.render(renderer, 'search_results')
            ).generate_action(1, h).replace('this', 'elt')
            oninput = 'debounce(this, function(elt) { %s; }, 500)' % search_cb
            # etc

Hérésie ? Pour les standards actuels, énorme hérésie. Cependant, ce n'est pas un mélange de html et de javascript à la React ou à la PHP, il s'agit malgré tout de pur Python, de plus une app est toujours séparée en parties "template" et controlleur, templates qu'on peut écrire comme de vrais templates d'ailleurs mais, d'après un court échange avec le développeur principal, aucun dév de l'équipe ne privilégie cette manière.

Vous aurez noté que:

  • les URLs ne sont pas belles
  • Nagare ne fait pas (encore ?) du double data binding partout ou de Single Page Application, pour cela il faudrait ajouter également à son app une couche d'api REST et de framework JS, comme Django en fait. Mais enfin, Kansha quand même.

À essayer pour juger, plus que d'habitude, j'imagine. En attendant plus de présentations de l'équipe derrière le projet !

Nagare dit s'inspirer fortement de Seaside, écrit en Smalltalk. Il (a) exist(é) de tels frameworks en Common Lisp, Ruby, C++, Haskell, OCaml, Perl,…

  • # Du web ? Essayez BCHS

    Posté par  . Évalué à 2.

    Les développeurs web aiment pas le web, ouais, eux non plus. Garanti hype-free. :)

  • # Sans une ligne de javascript ?

    Posté par  (site web personnel) . Évalué à 9.

    https://github.com/Net-ng/kansha/tree/master/static/js
    h.head.javascript('searchinput', '''jQuery(document).ready(function ($) { $('#search').searchInput(); });''')
    

    Ça mélange python, html, javascript de partout. C'est bien moche, je souhaite bonne chance à celui qui s'embarque la dedans. J'ai connu Nevow, je suis content d'être passé à rails + haml.

  • # C'est quoi Kansha ?

    Posté par  . Évalué à 5.

    Kansha est un clone de Trello (et plutôt bien fait).

    Je reformule ma question : c'est quoi, Trello ?

    • [^] # Re: C'est quoi Kansha ?

      Posté par  (site web personnel) . Évalué à 1.

      Un truc pour faire du kanban

      • [^] # Re: C'est quoi Kansha ?

        Posté par  . Évalué à 4.

        Non.

        Trello est une tableau (une board) dans la quelle tu défini des listes dans les quelles tu va placer des cartes. Les listes sont présenter comme en colonnes.

        Une carte peut contenir, un titre, un label, une description des commentaires, une échéance, des documents, des commentaires,… et tu peut déplacer une carte d'une liste à une autre.

        Cela permet d'avoir un board scrum numérique ou de faire du Getting Things Done par exemple.

        Pour Kanban, il manque la règle la plus importante de kanban : la limitation du nombre de carte par liste (c'est pas pratique de l'avoir à coté et c'est pas intégré).

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # on recommence

    Posté par  (site web personnel) . Évalué à 10. Dernière modification le 23 décembre 2016 à 11:08.

    C'est rigolo les technologies, c'est un éternel recommencement.

    Ca me rappelle l'époque ASP.NET où tout la partie "technique" javascript/cookie/ajax était abstraite et gérée côté serveur derrière du C#/VB, avec l'objectif de proposer la même expérience que pour le développement d'application bureautique (composants réutilisables, WYSIWYG, événements, etc.).

    Le genre d'abstraction qui en fait cache trop de chose pour celui qui n'est pas expert et ne comprend pas comment fonctionne le framework (c'est à dire tout le monde sauf ceux qui l'ont conçu).

    Puis on est revenu aux sources : du bon gros javascript qui communique avec des API REST. C'est moins sexy mais on comprend comment ca marche et le résultat obtenu est relativement "light" et pas entièrement bloated par un framework juste pour afficher un bouton et une liste.

    Mais bon quand même c'est relou le javascript et tout : alors tout le monde y va de sa bibliothèque "2.0" voir de sa surcouche de language (Typescript & co).

    Et hop maintenant ca redevient même hype de faire abstraction de l'ensemble client/serveur pour proposer… la même chose qu'il y a 10 ans.

    Quand à Kansha, comme Trello, y'a un truc qui me chagrine : on propose de gérer des tâches comme des bouts de papier (drap & drop), mais toujours pas de support tactile ! c'est quand même extrêmement frustrant en 2016.

    Bon ok je suis un vieux con :-p

    • [^] # Re: on recommence

      Posté par  . Évalué à 2.

      C'est vrai c'est comme ASP.NET ? Vu comme ça c'est moins emballant.

      Bien résumé sinon.

    • [^] # Re: on recommence

      Posté par  . Évalué à 1.

      Ben oui mais avant c'était en ASP.net, ça pouvait pas être bien. Là c'est écrtit en Python, ça ne peut qu'être bien. Et si tu peux pas développer comme tu veux avec, c'est que ta façon de développer n'est pas la bonne. Et si tu as un besoin qui n'est pas couvert par l'outil, c'est ton besoin qui est pas bon, ou tu t'y prend pas de la bonne façon pour répondre à ce besoin.

      • [^] # Re: on recommence

        Posté par  . Évalué à 4.

        Ça fait 2 fois que tu nous le sors.
        Y'a un pythonneux qui t'a piqué ton job que tu es rageux comme ça ?

        • [^] # Re: on recommence

          Posté par  . Évalué à 0.

          Y'a un pythonneux qui t'a piqué ton job que tu es rageux comme ça ?

          Nan, ya juste une bande de pythonneux qui me gave à prétendre que Python est le meilleur langage au monde alors que c'est loin d'être le cas. J'en ai marre de ce langage qui vient toujours me'empêcher de faire les choses comme j'en ai envie et m'impose sa façon de faire pas toujours très logique, et qui pousse à se répéter ou à écrire plus de lignes de code que nécessaire. un exemple de truc débile qui traduit bien la mentalité douteuse de ce langage : l'absence de switch/case (oui ça me gave d'enchainer les elsif : c'est affreux et bien moins lisible qu'un switch/case - tout aussi affreux que le contournement qui consiste à utiliser un dictionnaire pour pallier ce manquiement). Et l'absence de switch n'est pas le seul cas de figure, on trouve des palanquées de ce genre de contournement un peu partout dès qu'on a besoin de faire un truc un peu évolué.

          • [^] # Re: on recommence

            Posté par  (site web personnel) . Évalué à 1.

            ce langage qui vient toujours me'empêcher de faire les choses comme j'en ai envie et m'impose

            • Ah bon, Python est venu chez toi te mettre un pistolet sur la tempe pour t'obliger à l'utiliser ?
            • Tous les langages du monde ont des limites à ta sublime imagination. Ex: avec un langage sans gestion automatique de la mémoire tu "dois" écrire du code pour gérer la mémoire ; mais s'il a une gestion automatique tu dois aussi le prendre en compte et certaines choses ne seront pas possibles (overhead trop important, pause du GC vs temps réel…). Si les contraintes ne te conviennent pas, change de langage.
            • "Une fois un arabe m'a volé mon portable, depuis je colle des affiches pour le FN".
            • [^] # Re: on recommence

              Posté par  . Évalué à 3.

              Ah bon, Python est venu chez toi te mettre un pistolet sur la tempe pour t'obliger à l'utiliser ?

              Tu as très bien compris le sens de la phtrase. Sinon, oui python m'est imposé.

              Tous les langages du monde ont des limites à ta sublime imagination.

              Bien sur mais aucun de ceux que j'ai essayé jusqu'à maintenant ne m'ont mis autant de batons dans les roues.

              Ex: avec un langage sans gestion automatique de la mémoire tu "dois" écrire du code pour gérer la mémoire

              ben oui mais il ne m'impose pas une seule méthode pour le faire. J'ai juste à développer ma lib (ou utiliser une lib qui me convient), mais pas de restrictions sur le comment.

              Si les contraintes ne te conviennent pas, change de langage.

              J'évite python quand je le peux, mais dans le cadre pro je n'ai pas toujours le choix.

              "Une fois un arabe m'a volé mon portable, depuis je colle des affiches pour le FN".

              Quel est le rapport ?

              Sinon, plus queles limites de Python en elles-même c'est surtout la mauvaise foi de beaucoup de pythonneux qui me gave (et c'est surtout envers eux que mes commentaires initiaux était dirigé).

              • [^] # Re: on recommence

                Posté par  (site web personnel) . Évalué à 5.

                Quel est le rapport ?
                c'est surtout la mauvaise foi de beaucoup de pythonneux qui me gave

                Il est là le rapport. Tu te prends la tête avec quelques pythonneux (vu la popularité du langage y en a forcément beaucoup dans l'absolu avec qui tu ne t'entendras pas ), puis tu viens nous lâcher des commentaires de frustration qui vise tout le monde; garde les pour tes collègues de travail s'ils sont les seuls à être visés (et pouvoir comprendre le contexte).

                En ce qui me concerne j'aime beaucoup Python, et pourtant ça me m'empêche de poster des commentaires où je le critique. Et pourtant je me vois imposer (haha) tes commentaires :)

                Sinon, oui python m'est imposé.

                On peut aussi l'interpréter autrement : tu gagnes (en partie) ta vie grâce à Python, et derrière tu craches dessus. C'est plus facile que de changer de travail je te l'accorde. Mais ça ne donne pas des commentaires très intéressants.

          • [^] # Re: on recommence

            Posté par  (site web personnel) . Évalué à 0.

            Si tu tiens à avoir un switch/case, il existe diverses implémentations disponibles directement dans pypi.python.org. Cela dit, je trouve que la solution du dictionnaire est assez efficace. S'il y a beaucoup de if/else, du polymorphisme pourrait-il résoudre le problème?

            Il y a eu plusieurs tentatives d'intégrer switch-case au langage mais les porpositions n'ont pas été considérées comme satisfaisantes, ce qui explique pourquoi il n'a jamais été intégré au langage.

            J'aime beaucoup Python sans pour autant prétendre qu'il puisse résoudre l'ensemble des problèmes de manière parfaite ou idéale.

    • [^] # Re: on recommence

      Posté par  (site web personnel) . Évalué à 2.

      ca existe en tactile mais c'est plus cher et propriétaire. Cela s'appelle iObeya. Les belles applications bien ergonomiques et bourrées de bonnes idées, le tout bien peaufiné c'est malheureusement encore propriétaire…

    • [^] # Re: on recommence

      Posté par  . Évalué à 2.

      Trello à une appli mobile plutôt décente, surtout vu l'état des applis natives de gestion de projet.

      Linuxfr, le portail francais du logiciel libre et du neo nazisme.

  • # Tut tut tut !

    Posté par  (site web personnel) . Évalué à 5.

    Cependant, ce n'est pas un mélange de html et de javascript à la React

    Tu veux certainement dire "à la JSX". React c'est du 100% javascript pur bio, élevé en plein air; JSX est un "sucre syntactique" qui est transformé en javascript avant d'être interprété. D'ailleurs tu peux tout à fait t'en passer, et tu auras un truc qui ressemble à ça:

        render: function () {
            return React.createElement("li", { className: "ListItem" },
                React.createElement("a", { href: "/items/" + this.props.item.id },
                    this.props.item.name
                )
            );
        }

    Ce qui est tout de même moche, du coup tu as des librairies qui te permettent de faire, par exemple, ça:

        renderTree: function () {
            return ["li", { className: "ListItem" },
                ["a", { href: "/items/" + this.props.item.id },
                    this.props.item.name,
                ],
            ];
        }

    Ou alors créer une fonction qui alias React.createElement, ou alors passer par une autre bibliothèque javascript… Toute la force de React, justement, c'est de n'être que du javascript.

  • # Joli mais buggué

    Posté par  (site web personnel) . Évalué à 3.

    J'ai essayé 2 min sur la page de démo : c'est joli … mais ça bugge pas mal.
    Je peux comprendre que toutes les 30 sec. j'ai un message indiquant que la page n'est pas à jour et qu'il faut la recharger : tout le monde teste la même page.
    Mais pas, que quand je saisis une carte, les modifications n'apparaissent pas (il faut rafraîchir la page), de plus quand on finit la carte, on ne sait pas où cliquer pour valider … bref, pour moi c'est joli mais pas fini … quand ça le sera, cela sera sûrement très bien.

    En attendant, je reste sur mon framaboard (une instance de Kanboard) qui est moins sexy mais qui fonctionne très bien (pour mes -tout- petits besoins).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.