+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2006
    Messages
    1 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 691
    Points : 2 916
    Points
    2 916

    Par défaut Vos retours sur la première version beta

    La première version beta de la librairie Dvp.NET vient de paraitre !



    Dvp.NET est une librairie open source .Net regroupant des fonctionnalités issues des membres du club Developpez.com.
    Vous pouvez ajouter cette librairie dans vos projets de développement .NET et bénéficier de ses nombreuses fonctionnalités telles que :
    • Des méthodes d'extensions sur les collections, les chaînes de caractères, les dates, les objets de données, etc. pour faciliter les tâches courantes.
    • Des algorithmes métier fréquemment utilisés (vérification de numéros Siret, Siren, IBAN, RIB, carte de crédit...).
    • Des classes de conversion de nombres en toutes lettres ou en chiffres romains.
    • Des contrôles et utilitaires pour Windows Forms et WPF.
    • Et encore bien d'autres choses !


    Elle est distribuée selon les termes de la GNU Lesser General Public License, qui autorise son utilisation aussi bien dans des logiciels libres que propriétaires.

    Le projet est actuellement en beta test.
    La librairie et le code source sont fournis "en l'état", sans garantie expresse ou implicite d'aucune sorte.

    Essayez-la et donnez-nous ici vos retours sur son intérêt, ses fonctionnalités, son utilisation, des améliorations, d'éventuelles corrections...

    Cliquez sur le lien ci-contre pour la télécharger Librairie Dvp.NET.


  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 820
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 820
    Points : 15 131
    Points
    15 131
    Billets dans le blog
    1

    Par défaut

    Salut,
    sous PowerShell j'aime bien les classes suivantes (je n'ai pas encore tout testé) :
    Developpez.Dotnet.Text.StringTemplate, simple et efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Get-Service|% {[Developpez.Dotnet.Text.StringTemplate]::Format("Nom={DisplayName} Status={Status}",$_)}
    Du coup elle ouvre l'appétit, j'aimerais bien pouvoir manipuler + objets en combinant les 2 approches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      [Developpez.Dotnet.Text.StringTemplate]::Format("Nom={0.DisplayName} Status={0.Status} Thread={1.Threads}",$Service,$Process)}
    ReadOnlyDictionary facilite la création de hashtable en lecture seule, la hashtable étant une structure de base très utilisée sous PowerShell.
    Petit embarras sous PowerShell, les constructeurs ne gérent que des génériques, ce qui oblige à créer une instance transitoire.

    Developpez.Dotnet.Windows.Collections.RangeObservableCollection couplé avec des event et des jobs peut rendre qq service sous PowerShell.
    L'ajout d'une méthode ReplaceRange pourrait être intéressante.

    Ensuite le soucis que je trouve à cette classe se situe dans les events déclenchés sur certaines opérations.
    Par exemple :
    Insert concerne à mon avis l'évenement Add ET l'évenement Move, car en interne on déplace les possibles items de la collection situés en fin de liste.
    Remove concerne soit Remove+Reset (suppression du ou des derniers éléments) soit Remove + Move
    Et ce dans l'optique d'observer ce qui se passe vraiment sur cette collection, mais ce n'est peut être pas l'objectif de cette classe...

    J'ai posté qq demandes sur le gestionnaire du projet, en passant vous ne le mettez pas en avant dans vos posts, c'est voulu ?
    Et je n'ai pas vu d'annonce sur le portail projet ni sur le blog de la rubrique dotnet, vous pourriez aussi l'ajouter dans la page composant de la rubrique dotnet.

    J'apprécie la documentation . Un petit soucis avec celle en ligne (http://dvp-net.developpez.com/doc/), celle-ci propose un Send Feedback, mais le champ destinataire du mail n'est pas renseigné, juste l'objet.
    Il manque à mon avis qq exemples de démonstration des principales classes. Par exemple je suis perplexe sur l'usage de
    Developpez.Dotnet.Collections.DefaultDictionary<(K, V>.

    Et pour finir l'énumération Developpez.Dotnet.SystemUtils.RebootReason propose None (Aucune information), j'aurais plutôt indiqué à la place Unknown.
    C'est juste une histoire de sémantique, rebooter sans raison ce n'est pas courant :-)
    De plus vous devriez indiquer que la classe Developpez.Dotnet.SystemUtils.WindowsProvider est dépendante du service WMI (supposez-vous qu'il soit tjr à l'état running ?).

    Même si je n'en ai utilisé qu'une infime partie, qui plus est sous PowerShell pour le moment, je trouve que vous avez fait du bon boulot.
    Merci.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2004
    Messages : 19 829
    Points : 40 602
    Points
    40 602

    Par défaut

    Salut,

    Citation Envoyé par Laurent Dardenne Voir le message
    sous PowerShell
    Arf, tu dois nous détester d'avoir pris des namespaces aussi longs

    Citation Envoyé par Laurent Dardenne Voir le message
    Developpez.Dotnet.Text.StringTemplate, simple et efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Get-Service|% {[Developpez.Dotnet.Text.StringTemplate]::Format("Nom={DisplayName} Status={Status}",$_)}
    Du coup elle ouvre l'appétit, j'aimerais bien pouvoir manipuler + objets en combinant les 2 approches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      [Developpez.Dotnet.Text.StringTemplate]::Format("Nom={0.DisplayName} Status={0.Status} Thread={1.Threads}",$Service,$Process)}
    Effectivement ça pourrait être sympa. Mais il faudrait complètement revoir l'implémentation... J'essaierai de regarder si c'est faisable un de ces jours

    Citation Envoyé par Laurent Dardenne Voir le message
    Developpez.Dotnet.Windows.Collections.RangeObservableCollection couplé avec des event et des jobs peut rendre qq service sous PowerShell.
    Ben en fait à la base c'est plutôt pour WPF (ObservableCollection est dans l'assembly WindowsBase, du moins en 3.5). Je voulais avoir la possibilité d'ajouter des items par lot en déclenchant une seule notification CollectionChanged. Le problème, c'est qu'en fait WPF ne sait pas gérer cet évènement pour plus d'un item à la fois, et donc cette classe ne sert à rien pour WPF

    Citation Envoyé par Laurent Dardenne Voir le message
    L'ajout d'une méthode ReplaceRange pourrait être intéressante.
    C'est envisageable

    Citation Envoyé par Laurent Dardenne Voir le message
    Ensuite le soucis que je trouve à cette classe se situe dans les events déclenchés sur certaines opérations.
    Par exemple :
    Insert concerne à mon avis l'évenement Add ET l'évenement Move, car en interne on déplace les possibles items de la collection situés en fin de liste.
    Remove concerne soit Remove+Reset (suppression du ou des derniers éléments) soit Remove + Move
    Et ce dans l'optique d'observer ce qui se passe vraiment sur cette collection, mais ce n'est peut être pas l'objectif de cette classe...
    Ben en fait, comme j'hérite d'ObservableCollection, il faut pas que je modifie le contrat... donc j'ai gardé la même logique

    Citation Envoyé par Laurent Dardenne Voir le message
    J'ai posté qq demandes sur le gestionnaire du projet, en passant vous ne le mettez pas en avant dans vos posts, c'est voulu ?
    C'est vrai qu'on y a pas pensé... je vais aller jeter un coup d'oeil à tes demandes quand j'aurai un moment

    Citation Envoyé par Laurent Dardenne Voir le message
    Et je n'ai pas vu d'annonce sur le portail projet ni sur le blog de la rubrique dotnet, vous pourriez aussi l'ajouter dans la page composant de la rubrique dotnet.
    Il y a eu des annonces il y a 2 mois environ sur le portail principal et sur celui de la rubrique .NET (elles ont disparu depuis), et celle du portail projets est encore visible

    Citation Envoyé par Laurent Dardenne Voir le message
    J'apprécie la documentation . Un petit soucis avec celle en ligne (http://dvp-net.developpez.com/doc/), celle-ci propose un Send Feedback, mais le champ destinataire du mail n'est pas renseigné, juste l'objet.
    En fait on préfère pas mettre une adresse mail en clair pour éviter le spam... je la mettrai peut-être sous la forme "user (at) domain (dot) com"

    Citation Envoyé par Laurent Dardenne Voir le message
    Il manque à mon avis qq exemples de démonstration des principales classes.
    Hum... oui, c'est clair que c'est pas très complet à ce niveau là. L'idée était d'utiliser le Wiki pour ça, mais on a pas beaucoup avancé là dessus ces derniers temps

    Citation Envoyé par Laurent Dardenne Voir le message
    Par exemple je suis perplexe sur l'usage de
    Developpez.Dotnet.Collections.DefaultDictionary<(K, V>.
    C'est l'équivalent de la classe defaultdict de Python. En gros, c'est comme un dictionnaire normal, à une différence près : si tu essaies d'accéder à une clé manquante, au lieu de lever une KeyNotFoundException, ça génère une valeur pour cette clé d'après ce que tu as passé en paramètre du constructeur :
    - pas de valeur : génère la valeur par défaut du type TValue
    - une valeur TValue : génère cette valeur
    - un delegate Func<TKey, TValue> : génère une valeur pour la clé recherchée en utilisant ce delegate
    La clé et la valeur générée sont ajoutées au dictionnaire (dans la prochaine version, un paramètre du constructeur permettra de changer ce comportement si on ne veut pas conserver les valeurs générées).

    Exemple d'utilisation :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var charFrequencies = new DefaultDictionary<char, int>();
    foreach(char c in inputString) dict[c]++; // pas besoin de tester l'existence de la clé

    Citation Envoyé par Laurent Dardenne Voir le message
    Et pour finir l'énumération Developpez.Dotnet.SystemUtils.RebootReason propose None (Aucune information), j'aurais plutôt indiqué à la place Unknown.
    C'est juste une histoire de sémantique, rebooter sans raison ce n'est pas courant :-)
    De plus vous devriez indiquer que la classe Developpez.Dotnet.SystemUtils.WindowsProvider est dépendante du service WMI (supposez-vous qu'il soit tjr à l'état running ?).
    Ca je connais pas trop, faudra voir avec Smyley...

    Citation Envoyé par Laurent Dardenne Voir le message
    Même si je n'en ai utilisé qu'une infime partie, qui plus est sous PowerShell pour le moment, je trouve que vous avez fait du bon boulot.
    Merci.
    Content que ça te plaise, et merci pour ton retour

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 820
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 820
    Points : 15 131
    Points
    15 131
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par tomlev Voir le message
    Salut,
    Arf, tu dois nous détester d'avoir pris des namespaces aussi longs
    Non la version 2 de PS permet de créer ses propres raccourcis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     #http://poshcode.org/762
    Add-Accelerator "StrTemplate" Developpez.Dotnet.Text.StringTemplate
    Get-Service|% {[StrTemplate]::Format("Nom={DisplayName} Status={Status}",$_)}
    Citation Envoyé par tomlev Voir le message
    J'essaierai de regarder si c'est faisable un de ces jours
    Je suis entrain de regarder une implémentation sous PS directement, l'idée m'a bien plut en tout cas.
    Citation Envoyé par tomlev Voir le message
    Ben en fait, comme j'hérite d'ObservableCollection, il faut pas que je modifie le contrat
    C'est ce que je craignais, connais-tu une classe opensource qui proposerait un comportement identique sans être dédié à WPF ?
    Citation Envoyé par tomlev Voir le message
    faudra voir avec Smyley...
    C'est bien ce qui me semblait, ça a un goût de Dreamshield :-)

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2004
    Messages : 19 829
    Points : 40 602
    Points
    40 602

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    C'est ce que je craignais, connais-tu une classe opensource qui proposerait un comportement identique sans être dédié à WPF ?
    BindingList<T> peut-être... y a un évènement ListChanged déclenché quand la collection est modifiée. A la base c'est surtout utilisé pour le data binding en Windows Forms, mais c'est dans l'assembly System, donc pas de dépendence à WinForms

    Quand même, je me demande qui est le génie chez MS qui a foutu INotifyCollectionChanged et ObservableCollection dans l'assembly WindowsBase
    D'ailleurs ils ont du se dire aussi que c'était con, parce qu'en 4.0 c'est dans System...

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 820
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 820
    Points : 15 131
    Points
    15 131
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par tomlev Voir le message
    BindingList<T> peut-être...
    Effectivement je n'y avais pas pensé, je vais regarder ça,merci.

    Vous est-il possible de localiser la méthode d'extension Developpez.Dotnet.DateExtensions.Previous ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #ok
    [Developpez.Dotnet.DateExtensions]::Previous((Get-Date),"Sunday")
    #erreur
    [Developpez.Dotnet.DateExtensions]::Previous((Get-Date),"Dimanche")
    Une autre remarque concernant la documentation des méthodes Before et Ago de la même classe, on peut passer un interval négatif ce qui fait la date retournée peut être dans le futur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #Sous PS on voit les méthodes d'extensions comme des méthodes statique
    Get-Date;[Developpez.Dotnet.DateExtensions]::Ago(([TimeSpan]"-1.0:0:0"))
    vendredi 21 mai 2010 18:24:29
    samedi 22 mai 2010 18:24:29
     
    Get-Date;[Developpez.Dotnet.DateExtensions]::before(([TimeSpan]"-1.0:0:0"),(get-date))
    vendredi 21 mai 2010 18:25:08
    samedi 22 mai 2010 18:25:08
    Pour ces méthodes le paramètrage via une date formatée telle que 21/05/2010 ou un nombre de jours -7 serait appréciable.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2004
    Messages : 19 829
    Points : 40 602
    Points
    40 602

    Par défaut

    Citation Envoyé par Laurent Dardenne Voir le message
    Vous est-il possible de localiser la méthode d'extension Developpez.Dotnet.DateExtensions.Previous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #ok
    [Developpez.Dotnet.DateExtensions]::Previous((Get-Date),"Sunday")
    #erreur
    [Developpez.Dotnet.DateExtensions]::Previous((Get-Date),"Dimanche")
    Euh... y'a rien à localiser, la méthode ne travaille que sur des dates... le paramètre dayOfWeek est un enum, pas une chaine. Sunday fait partie de l'énumération DayOfWeek, pas Dimanche... Si j'en crois ton code, en PowerShell les enum s'écrivent sous forme de chaine ? Si c'est ça j'y peux pas grand chose...

    Citation Envoyé par Laurent Dardenne Voir le message
    Une autre remarque concernant la documentation des méthodes Before et Ago de la même classe, on peut passer un interval négatif ce qui fait la date retournée peut être dans le futur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #Sous PS on voit les méthodes d'extensions comme des méthodes statique
    Get-Date;[Developpez.Dotnet.DateExtensions]::Ago(([TimeSpan]"-1.0:0:0"))
    vendredi 21 mai 2010 18:24:29
    samedi 22 mai 2010 18:24:29
     
    Get-Date;[Developpez.Dotnet.DateExtensions]::before(([TimeSpan]"-1.0:0:0"),(get-date))
    vendredi 21 mai 2010 18:25:08
    samedi 22 mai 2010 18:25:08
    Ben en même temps, tu dis "il y a 1 jour", pas "il y a -1 jour"... donc ça n'a pas beaucoup de sens d'appeler Ago avec une durée négative. Qu'est-ce que tu voudrais qu'on dise dans la doc ?

    De toutes façons, je pense que les méthodes de cette classe ont un intérêt limité en PowerShell, vu que c'est des méthodes d'extension. C'est prévu pour s'utiliser comme ça :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var fiveMinutesAgo = 5.Minutes().Ago();

    Si tu dois l'utiliser sous forme de méthode statique :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var fiveMinutesAgo = DateExtensions.Ago(DateTime.Now, DateExtensions.Minutes(5));

    Ca n'a plus aucun intérêt... autant écrire directement :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var fiveMinutesAgo = DateTime.Now.AddMinutes(-5);

    Citation Envoyé par Laurent Dardenne Voir le message
    Pour ces méthodes le paramètrage via une date formatée telle que 21/05/2010 ou un nombre de jours -7 serait appréciable.
    C'est à dire ? la méthode prend une date, tu voudrais qu'elle prenne une chaine ? Ca pour le coup ce n'est pas envisageable : sinon la méthode d'extension deviendrait disponible pour toutes les chaines, même quand ça n'a aucun sens... En fait j'ai l'impression que ton besoin est spécifique à PowerShell, en C# ce ne serait pas du tout une bonne chose.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    janvier 2003
    Messages
    6 820
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 820
    Points : 15 131
    Points
    15 131
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par tomlev Voir le message
    Euh... y'a rien à localiser,
    Bon je ferai avec.
    Citation Envoyé par tomlev Voir le message
    Si j'en crois ton code, en PowerShell les enum s'écrivent sous forme de chaine ?
    Oui c'est une facilité d'écriture.
    Citation Envoyé par tomlev Voir le message
    donc ça n'a pas beaucoup de sens d'appeler Ago avec une durée négative.
    Oui c'était juste une précision, car ceci reste possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     int Mn = -5;
     var f = Mn.Minutes().Ago();
    Citation Envoyé par tomlev Voir le message
    De toutes façons, je pense que les méthodes de cette classe ont un intérêt limité en PowerShell, vu que c'est des méthodes d'extension.
    Si on utilise un fichier d'extension de type (ETS), comme indiqué ici, cela reste possible de les utiliser sur des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Update-TypeData -prependPath DvpExtensions.ps1xml
     #Erreur, pb avec l'interpréteur
    5.Minutes().Ago()
     #Ok
    $I=5
    $I.Minutes().Ago()
    Citation Envoyé par tomlev Voir le message
    En fait j'ai l'impression que ton besoin est spécifique à PowerShell, en C# ce ne serait pas du tout une bonne chose.
    Effectivement je vois ça de ma fenêtre :-), je suis allez plus vite que la musique j'imaginais combiner ce code avec ce script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     #Crée un filtre recherchant les fichiers 
     #de la semaine dernière 
    $AfterThisDate1=$Filtre.AfterThisDate(-7)
    C'est vrai que je n'aurais pas ces besoins si j'utilisais votre code pour développer des cmdlets PowerShell en C#.

Discussions similaires

  1. Quels sont vos retours sur le site Experteer?
    Par Cabanum dans le forum Emploi
    Réponses: 13
    Dernier message: 28/10/2014, 16h17
  2. Rupture retour sur la première valeur
    Par lion961 dans le forum Deski
    Réponses: 2
    Dernier message: 27/03/2012, 15h42
  3. [Talend] vos retours sur TIS
    Par Benoit_Durand dans le forum Installation, migration et administration
    Réponses: 2
    Dernier message: 24/01/2008, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo