1680

Le probleme de ST sont les plugins dans un sens, aussi puissant soient certains, la majorite sont mal code...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

1681

Brunni (./1679) :
(genre on ne peut pas ajouter un dossier qui n'est pas sous le répertoire de base du projet)
Tu es sûr ?
Avec pycharm on ajoute autant de racines qu'on veut (+exclusion de branches si besoin), donc je suppose que ça devrait être similaire avec webstorm ?

1682

Je confirme, on peut aussi sous PhpStorm (Settings > Directories > [For current project] > + Add Content Root). Je n'en ai jamais vraiment eu besoin vu la structure des projets sur lesquels je travaille, mais c'est tout à fait faisable smile (et on peut évidemment exclure un dossier, via la même fenêtre).
avatar

1683

Nil (./1682) :
(Settings > Directories > [For current project] > + Add Content Root)
Merci, exactement comme pycharm, donc.
Je l'ai utilisé parce qu'on a un dossier de sources, et un dossier d'un script de qualif à côté.

1684

ce n'est pas le cas avec IntelliJ, curieusement.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

1685

java est tellement puissant qu'il n'a pas besoin de ces artifices embarrassed

1686

Ni CLion
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

1687

Brunni (./1672) :
Je suis toujours sur la même tâche de trouver comment on affiche un context menu. Apparemment j'ai besoin d'un PrivateContextMenuProxy (160 lignes auxquelles je ne comprends rien du tout), d'un AbstractStaticContextMenuHandler (qui construit les options, mais je ne sais pas comment en mettre plusieurs), d'une classe AbstractContextMenuEntry PAR élément que je veux afficher (102 lignes, par entrée, franchement pas grand chose d'intéressant et d'autres trucs que je ne comprends pas), des entrées dans le manifeste, et euh je ne sais pas trop.
Et tu te demandes encore si le problème est de ton côté ? grin
Franchement on dirait un extrait d'article de TheDailyWTF.

Brunni (./1672) :
Et euh j'aimerais bien rigoler, mais. Non pas de goûters d'anniversaire.
Dommage. Ça aurait pu être sympa, avec Nhut qui fait les dessins, et toi qui imites le bruit du phacochère dans le tuyau d'aspirateur pour amuser les enfants sad

Bon sinon, si ta prochaine boîte ne te convient pas, tu peux toujours postuler chez eux :

Je ne sais pas comment est leur code, mais au moins tu travailleras sur quelque chose qui te plaît.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1688

Pen^2 (./1675) :
Mmmm, il me semble que ça reste plus un éditeur de texte qu'un ide, non ? Perso je n'imagine pas coder avec un éditeur de texte même avancé, ce serait catastrophiquement pénible. Peut-être qu'un bon ide spécialisé te permettrait de t'y retrouver beaucoup plus facilement ? Personne n'a une suggestion ? Perso je n'y connais rien en js.
Pourquoi ? Si tu connais les bonnes extensions et les raccourcis, c'est rtès rapide. J'ai un pote qui fait du python sous vim, il n'envisage pas de changer.

1689

Ça dépend peut-être des langages, mais, par exemple l'import/include ajouté automatiquement sans se soucier de savoir son nom par exemple ? Ou le refactoring avancé ? (avec un respect de la portée de variable, un i d'une boucle for n'étant pas le même qu'un i d'une autre boucle for ?). Le goto déclaration/définition qui fonctionne ? La recherche des déclarations, des implémentations, des références à quelque chose (pas juste du texte qui ressemble), l'ajout automatique des annotations qui vont bien (override, etc) ?). La création de variable automatique (avec le bon type) à partir d'une fonction qui renvoie quelque chose ?) Le débugueur intégré ? Les warnings du respect du style, de bonnes pratiques, la génération d'accesseurs/délégués/etc automatique, la proposition de surcharge de méthode sans devoir se rappeler exactement de son nom, la mise en évidence des warnings/erreurs au fur et à mesure de la frappe, le designer de fenêtres, l'assistant de génération de scripts de builds, le gestionnaire de paquets de libs, etc. J'oublie sans doute plein de trucs, c'est juste des idées qui me viennent en vrac ^^)

Évidemment, si des plugins font tout ça, ça me va très bien aussi.
Mais je serais bien malheureux avec un éditeur avancé qui trouve que c'est innovant de faire du mode colonnes ou des expressions rationnelles pour remplacer des trucs. Même si ce genre d'éditeur est effectivement utile par ailleurs.

1690

1691

Codelite, j'ai déjà voulu essayer quelques fois suite au spam de Folco (tongue), la fonction d'import de projet des SLN de visual n'a jamais fonctionné.
Ça a peut-être évolué.

1692

Pen^2 (./1689) :
Ça dépend peut-être des langages, mais, par exemple l'import/include ajouté automatiquement sans se soucier de savoir son nom par exemple ? Ou le refactoring avancé ? (avec un respect de la portée de variable, un i d'une boucle for n'étant pas le même qu'un i d'une autre boucle for ?). Le goto déclaration/définition qui fonctionne ? La recherche des déclarations, des implémentations, des références à quelque chose (pas juste du texte qui ressemble), l'ajout automatique des annotations qui vont bien (override, etc) ?). La création de variable automatique (avec le bon type) à partir d'une fonction qui renvoie quelque chose ?) Le débugueur intégré ? Les warnings du respect du style, de bonnes pratiques, la génération d'accesseurs/délégués/etc automatique, la proposition de surcharge de méthode sans devoir se rappeler exactement de son nom, la mise en évidence des warnings/erreurs au fur et à mesure de la frappe, le designer de fenêtres, l'assistant de génération de scripts de builds, le gestionnaire de paquets de libs, etc. J'oublie sans doute plein de trucs, c'est juste des idées qui me viennent en vrac ^^)

Évidemment, si des plugins font tout ça, ça me va très bien aussi.
Mais je serais bien malheureux avec un éditeur avancé qui trouve que c'est innovant de faire du mode colonnes ou des expressions rationnelles pour remplacer des trucs. Même si ce genre d'éditeur est effectivement utile par ailleurs.
epee
Mais tu as oublié l'inférence de type et les arguments manquants ou en trop ^^ J'utilise beaucoup le typage pour ne pas avoir de bug, comme dans les langages fortement typés.

Et ce n'est pas faute d'avoir passé de longues années sous vim. Mon code s'est automagiquement très fortement amélioré avec le simple passage à PyCharm. Un bon indicateur serait de lui demander quelle est la probabilité que le code fonctionne au premier lancement. Perso, je trouve la différence très violente entre ceux qui utilisent vim et ceux qui utilisent PyCharm.

Je trouve qu'avec vim on a une fausse impression de rapidité. Oui, on se déplace vite, et on tape super vite. En termes d'apm, on explose complètement PyCharm ! Mais en fait, les actions ne sont pas comparables.
Exemple pour ajouter la ligne ma_super_fonction(ma_constante), avec deux objets dans deux packages différents qui ne sont pas encore importés.
Avec PyCharm : ma_su<ctrl-espace><ctrl-espace>ma_co<ctrl-espace><ctrl-espace>) : 5 + 2 + 5 + 2 + 1 = 15 frappes au clavier.
Avec vim : ma_super_fonction<esc>:split<enter>ggfrom package1 import ma_su<ctrl-P><ctrl-w><ctrl-W>(ma_constante)<ctrl-w><ctrl-W>from package2 import ma_co<ctrl-P> 17 + 1 + 7 + 2 + 26 + 3 + 14 + 2 + 26 + 1 = 100 frappes. Effectivement, on va taper deux fois plus vite avec vim… mais même ainsi, PyCharm reste 3 fois plus rapide.

De plus : la façon de procéder dans vim dépendra du contexte (le <Ctrl-P> n'aura pas le même comportement en fonction des fichiers déjà ouverts) ce qui n'est pas terrible, et tu n'auras aucune garantie sur la justesse du code (PyCharm va au contraire me prévenir si j'utilise une syntaxe qui n'est pas utilisable dans l'une des versions de Python choisies pour le projet).
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

1693

flanker (./1692) :
Mais tu as oublié l'inférence de type
J'avais dit etc embarrassed
flanker (./1692) :
les arguments manquants ou en trop
Tiens, ça me fait penser que j'oubliais aussi le remplissage automatique intelligent des arguments (c'est une option dans Eclipse JDT) lors d'une auto complétion d'appel de méthode. Évidemment, c'est potentiellement un peu dangereux mais si on n'utilise pas plus de 9000 variables dans une seule portée, ça trouve les bons arguments dans 99% des cas.
flanker (./1692) :
J'utilise beaucoup le typage pour ne pas avoir de bug, comme dans les langages fortement typés.
pencil

flanker (./1692) :
ma_su<ctrl-espace>
Et encore, de mémoire on peut se passer de _, c'est moins pénible à taper. Et on peut même taper juste la partie la plus ciblée du nom de la fonction pour tenter un nombre de caractères encore plus réduit tout en restant discriminant ^^

La méthode vim fait peur, honnêtement grin. Et en plus il faut connaître l'import en question, c'est plus que de la simple frappe au clavier.
(Et d'ailleurs, pourquoi on taperait trois fois plus vite les caractères avec vim ?)

EDIT : j'oubliais aussi la documentation en mouseover des éléments.

1694

(Et d'ailleurs, pourquoi on taperait trois fois plus vite les caractères avec vim ?)
Parce qu'on en tape plus, et de la même catégorie (je trouve plus lent de passer d'une lettre à une combinaison ou à une touche de fonction que d'une lettre à l'autre, par exemple).
Mais bon, bien sûr, tous les chiffres ne sont que des exemples, pas des vérités absolues grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

1695

flanker (./1694) :
Parce qu'on en tape plus
Effectivement, ça fait de l'entraînement grin
flanker (./1694) :
et de la même catégorie
Mmmm, <esc>: c'est pas super pratique, c'est peut-être un manque d'habitude mais je trouve le ctrl+space plus accessible (bord de paume sur le ctrl et space avec le pouce)

flanker (./1694) :
Mais bon, bien sûr, tous les chiffres ne sont que des exemples, pas des vérités absolues grin
Je suis déçu, je pensais que tu avais des stats embarrassed

1696

flanker (./1692) :
Mon code s'est automagiquement très fortement amélioré avec le simple passage à PyCharm.
Je pense que tu devrais demander une licence gratuite de PyCharm en échange de cette phrase. Parce que venant de toi, c'est une publicité en or embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1697

Les bons IDE savent faire popper MaSuperClasse quand on tape "msc".

1698

Folco (./1697) :
Les bons IDE savent faire popper MaSuperClasse quand on tape "msc".
Oui, mais vim n'est pas un IDE, malgré tous les plugins qu'on peut lui ajouter ^^
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

1699

Je devrais essayer à nouveau oui. J'ai toujours été fan des IDE lourds, déjà parce que j'ai toujours pris des PCs relativement puissants pour l'époque, et parce qu'il faut moins d'actions pour faire la même chose, que c'est plus secure, et qu'on s'économise une bonne partie du temps.
Après tout oui c'est impressionnant de voir qqn taper super vite avec vim ou autres (ou moi avec Sublime), mais on passe une chiée de temps avec des merdes qu'on n'aurait pas avec un vrai langage.

CECI DIT Javascript n'est pas un vrai langage dans tous les cas. Je veux dire, regarde comment on définit une "classe" (extrait de notre super code) :
  var SimilarWebPageEntry = function(handler, modelData) {
    AbstractContextMenuEntry.call(this, handler);

    this.modelData = modelData;
  };

  SimilarWebPageEntry.prototype = Object.create(AbstractContextMenuEntry.prototype, {
    constructor: {
      value: SimilarWebPageEntry,
    },
    _escapeHTMLString: {
      value: function(text) {
        return text
          .replace(/&/g, '&amp;')
          .replace(/</g, '&lt;')
          .replace(/>/g, '&gt;')
          .replace(/"/g, '&quot;')
          .replace(/'/g, '&apos;');
      },
    },
    cancelAction: {
      value: function() {
        return false;
      },
    },
  });
Il faudrait un IDE vraiment avancé pour te lister les types et les méthodes, parce qu'il doit vraiment exécuter le truc pour avoir une idée (ternjs serait supposé faire ça, pas sûrr qu'il s'en sorte dans ce cas mais ©a a le plus de chances de.

Bon sinon j'ai malheureusement perdu mon diagramme (je l'éditais online, le driver wifi a planté, j'ai fait Ctrl+S et fermé comme un con -- le machin n'avertit pas que la sauvegarde a échoué même si ça aurait dû m'être évident puisque j'avais pas de wifi cheeky), j'ai finalement repris depuis zéro, inclus le code et me suis dit "on verra bien". Ben comme je pensais il ne se passe rien. Je crée le menu, les arguments supposés, documentés je cite "The arguments for the menu as stringified JSON.", que je ne sais pas ce qu'il en fait, où ils passent, à quoi ils servent, mais qui ne semblent pas récupérés où que ce soit que le menu est vraiment créé pour de vrai. Bref voilà, comme un message sur un objet nil en Objective-C.

Vraiment je fais tout mon possible pour être positif. Après tout je n'ai pas ENVIE de déprimer. Mais juste quelle que soit la motivation et la dose de positivisme avec laquelle j'arrive le matin, quand je suis à faire ça il y a trop de trucs que je dois me retenir de faire, comme d'envoyer des messages de haine à celui qui a conçu ce projet et qui est retourné en allemagne (je l'imagine comme un genre de Kevin à partir des interactions écrites que j'ai eues avec lui), comme d'avoir qqn d'autre ici faire ce boulot de merde à ma place (parce qu'après tout ce n'est pas possible qu'il faille plus de 3 jours and counting pour afficher un putain de menu contextuel, ce n'est pas 3 jours ni économiquement valables ni souhaitables à quelconque être humain).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1700

Si ça peut te consoler, être indépendant c'est pas le rêve tous les jours non plus.

Là il est 4h du mat en France, je suis en train de faire un truc qui prend la tête, qui n'était pas prévu que je fasse et qui aurait pu être évité si le client m'avait écouté et avait un minimum d'organisation.

Le pire c'est que j'ai moi-même permis que cette situation se produise. J'avais prévu une solution de secours parce que je sentais le truc venir. Bah bingo, c'est bibi qui se retrouve à devoir faire le truc de secours, alors qu'il avait tout fait pour que ce ne soit pas nécessaire. Comme d'habitude quoi. Ça m'apprendra à vouloir trop bien faire, et à vouloir respecter les plannings des autres quitte à bosser le week-end pour ça.

Ah et puis évidemment, ça tombe au moment où j'ai déjà deux autres projets en parallèle et deux clients potentiels à aller voir, parce que ce serait pas drôle sinon.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

1701

*pat* *pat*

1702

Erf. Oui trop voulu faire bien…
De toute façon un malheur n'arrive jamais seul comme on dit…
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1703

Ah oui, tu devrais tester webstorm.

1704

Wa, c'est beau. Je voulais chercher quand est fermé le menu (oui parce qu'il y a du nouveau, mon collègue m'a fait un sample, ça lui a pris une heure mais c'est nickel, maintenant j'ai intégré et j'affiche les options. Bon j'ai eu qqes trucs à adapter, mais un truc important maintenant c'est de fermer le context menu element une fois cliqué, parce que bon ça aussi ça vient avec l'API mais apparement pas tout seul, et ce n'est pas si trivial que c'en a l'air. Regardez plutôt ce que j'ai trouvé dans un module qui se sert du menu (ça c'est le privatecontextmenuhandlerproxy, qui sert un peu d'interprocess si vous voulez, sauf qu'en JS c'est des modules) :
    close: {
      value: function(typeToClose) {
        if (typeToClose === undefined || typeToClose === this.showingType) {
          this._setModel(null);
          this._menuAge++;
          if (this.isMenuShowing() && !this._closing) {
            this._close();
            return true;
          }
        }
        return false;
      },
    },
    _close: {
      value: function() {
        this._closing = this.closeMenu()
          .then(function() {
            this._closing = false;
          }.bind(this));
        return this._closing;
      },
    },
Pour appeler un this.closeMenu (qui fait partie d'une sous classe donc, mais celle-ci est documentée). Moi qui pensais naïvement l'appeler, on dirait que je dois faire gaffe à *quelques* petits trucs là. Notez la jolie utilisation de this._closing un moment comme une promise, un moment comme un booléen. Autant j'aime bien le fait de tester avec if (object) plutôt que if (object != nil) car c'est concis et souvent on donne un nom qui rend la lecture agréable -- par exemple aujourd'hui dans Highway Runners j'ai écrit if (System::remoteSettings), pour tester l'existence de settings remote, l'objet étant nul lorsqu'ils ne sont pas disponibles -- autant le coup de la promise booléenne c'est quand même un peu too much.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1705

Je me suis déjà fait baiser par un if (object), qui m'a crevé les yeux jusqu'à ce que quelqu'un mette le doigt sur mon erreur (coucou Kevin !). Maintenant j'explicite tout.

1706

C'était dans quel cas par curiosité ?

(hmmm voilà ce que j'ai fini par écrire. Que c'est beauuu, notez comme ce merveilleux langage rend simple et absolument pas error-prone l'appel de la méthode parente (overridée). C'est vraiment professionnel, et LE langage que tout le monde devrait utiliser !).

crr7
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1707

lol:: grin

1708

J'ai fait des petits tests, pour ceux que ça intéresse :

rxAQ

En C++ ça ferait :
struct A {
  int argument;
  A(int arg) : argument(arg) { printf("A:ctor(%d)", arg); }
  virtual void print(char c) { printf("A:print(%d, %c)", argument, c);
};

struct B: A {
  int otherArg;
  B(int arg) : A(11), otherArg(arg) {}
  void print(char c) {
    printf("B:print(%d, %c)", otherArg, c);
    A::print(c);
  }
};
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

1709

1- votre framework est pourri
2 - me souvenir de jamais faire de js pro
3- votre framework est pourri
4 - me souvenir de jamais faire de js pro
5- votre framework est pourri

1710

C'est magnifique. Voilà ce qui se passe dans juste une classe à la création du menu (alors que je tentais de découvrir comment on peut faire pour afficher plusieurs menus différents -- en effet le même handler est appelé dans l'autre process quoi qu'il en soit, et s'il existe des arguments que l'on peut passer au sous-menu, ils ne semblent a priori pas utilisés). Reverse engineering below courtesy of Brunni.

kdyh

Donc avec tout ça, et des lignes et des lignes de code absolument pas suivable puisqu'on fait appel à des fonctions via des tables et des arguments string concaténés à partir de propriétés assignées dans des objets parents, on se retrouve à pouvoir populer des options différentes en fonction du type de menu, à partir d'un JSON passé initialement ! Je suis vraiment trop fort, je devrais me faire surnommer Holmes dans ce bureau. cool

A part ça pour être gentil avec le prochain enquêteur qui cherchera à comprendre le code et qui peut être par chance commencera par regarder mon code, j'ai mis un joli commentaire.
            /*
             * Simplified view of showing a menu.
             * -> ContextMenuProxy.showMenu(menuArguments)
             * -> PenMenuHandler.constructor(..., menuArguments, ...)
             * -> PenMenuHandlerBase.createMenu()
             *    Note: use previously stored menuArguments to select what to display)
             *    Create SimpleButtonEntry'es
             * -> [click on menu item]
             * -> SimpleButtonEntry.finalizeActionExecution
             * -> PenMenuHandler.postMessage
             * -> [intermodule message passing]
             * -> ContextMenuProxy.messageReceived
             * -> ContextMenuProxy.messageReceived: eventListener.emit(action)
             * -> PenLibraryWidget.eventListener.on(action)
             */
Peut être qu'on aperçoit en filigrane que j'y ai passé un petit moment cheeky
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741