scls19fr a écrit 132 commentaires

  • # Mini cibles

    Posté par  (site web personnel) . En réponse au journal Nouvelles de "Ada for Automation". Évalué à 0. Dernière modification le 12 décembre 2013 à 21:12.

    Bonjour,

    Avez-vous pensé à développer sur la base d'Arduino une sorte de pseudo PLC avec lequel votre framework pourrait interagir ?
    Une autre idée pourrait être de créer un soft qui tourne sur PC et émulerait (pour des applications non critiques en terme de temps de réponse) un PLC via une carte pas cher possédant des entrées/sorties numériques (Labjack U12 par exemple).

    IRAI (Automgen) fait ce genre de choses… et ça me semble une bonne idée.
    Il y a même un projet sur SourceForge
    http://automgenruntime.sourceforge.net/
    mais ça date un peu

    Cordialement

  • [^] # Re: Notion de distance

    Posté par  (site web personnel) . En réponse au message Programmation générique / programmation par contraintes. Minimisation du nombre d' "insatisfaits". Évalué à 1.

    Moi ce que je n'aime pas dans ta solution c'est qu'elle n'est pas stable (si je relance le script j'ai une nouvelle attribution). Par contre on est d'accord sur l'aspect "politique" de la tâche.

  • [^] # Re: Et de 20

    Posté par  (site web personnel) . En réponse au message Programmation générique / programmation par contraintes. Minimisation du nombre d' "insatisfaits". Évalué à 1. Dernière modification le 24 septembre 2013 à 20:24.

    on fait (presque) pas d'info… chez nous c'est plutôt plomberie, chauffage et énergies renouvelables

  • [^] # Re: Programme Lineaire en Nombre Entier

    Posté par  (site web personnel) . En réponse au message Programmation générique / programmation par contraintes. Minimisation du nombre d' "insatisfaits". Évalué à 1.

    c'est intéressant cette mise en forme du problème….

    par contre ça me gêne un peu que ça puisse "casser" les groupes donc ajouter la contrainte "tout ces étudiants font le même projet" me semble judicieux

  • [^] # Re: algoritme du vrai "chef"

    Posté par  (site web personnel) . En réponse au message Programmation générique / programmation par contraintes. Minimisation du nombre d' "insatisfaits". Évalué à 1.

    si je n'arrive pas à mettre au point l'algo de minimisation du nombre de "clients" insatisfait ça pourrait tourner à une version proche de ça… mais bon je suis pas un vrai "chef"… je suis juste prof ;-)

  • # Notion de distance

    Posté par  (site web personnel) . En réponse au message Programmation générique / programmation par contraintes. Minimisation du nombre d' "insatisfaits". Évalué à 0.

    Merci pour ce début de réponse… mais je ne vois juste pas comment mettre ça en forme !

    Ce que je comprends de mon problème c'est que pour minimiser le nombre d'"insatisfaits" il faut maximiser le nombre de premier voeux en fait il faudrait créer une "distance" ou une norme entre le projet attribué à un étudiant / groupe d'étudiant par rapport à l'ordre de ses choix

    exemple:
    un étudiant ou un groupe d'étudiant a fait le choix d'ordre
    1,3,6,4,5,2,7,8,9,10,11,12,13,14,15,16,17,18,19
    et le programme lui donne le projet 1
    alors il est totalement satisfait (distance=0)

    si le programme lui donne le projet 6
    alors il n'est plus totalement satisfait (distance=2)

    si le programme lui donne le projet 2
    alors il n'est plus totalement satisfait (distance=5)

    l'idée serait de sommer pour tous les étudiants (et tous les groupes avec un coefficient dépendant du nombre d'étudiant dans le groupe) cette distance et trouver la distance "minimale"

    Le truc que je ne vois pas c'est comment "envoyer" un choix de projet pour chaque étudiants / groupe d'étudiants sachant que lorsque j'affecte le projet à un groupe il ne pourra pas être affecté à un autre groupe mais que lorsque je l'affecte à un étudiant seul il peut être affecté à 3 autres étudiants.

  • [^] # Re: Utilisation

    Posté par  (site web personnel) . En réponse à la dépêche Sortie de R version 3.0.0. Évalué à 3.

    Quels sont les avantage de R par rapport à Python + Numpy + Scipy + Pandas ?

    PS: c'est une vraie question… pas un troll !

  • [^] # Re: Scaffolding

    Posté par  (site web personnel) . En réponse au journal Django 1.5 beta. Évalué à 0.

    Désolé de ne répondre qu'avec pas mal de retard.

    En fait l'idée du scaffolding c'est de créer automatiquement tout le code nécessaire pour les opérations CRUD (Create Read Update Delete)
    http://fr.wikipedia.org/wiki/CRUD

    Il est vrai que les vues ainsi gérées peuvent avoir besoin d'être pas mal modifiées… mais cela évite d'avoir à partir d'une feuille blanche.

    http://book.cakephp.org/2.0/fr/controllers/scaffolding.html

    En fait le problème c'est que j'aime bien CakePHP… mais pas le PHP (je préfère Python)

    Donc je cherche un framework en Python qui lui ressemble.

  • # Scaffolding

    Posté par  (site web personnel) . En réponse au journal Django 1.5 beta. Évalué à 0.

    Juste une question comme ça…

    Y a-t-il désormais du scaffolding dans Django ?

    Pour info, avec CakePHP (ou Ruby on Rails), il est très facile de générer à partir de la base de donnée (en respectant quelques conventions) directement le code du modèle, de la vue et du conroleur (et faire ensuite les modifications comme on veut)…

    C'est assez sympa le concept de "convention over configuration"… je ne sais pas si Django utilise cette idée…
    http://book.cakephp.org/1.3/en/The-Manual/Basic-Principles-of-CakePHP/CakePHP-Conventions.html
    http://fr.wikipedia.org/wiki/Convention_plut%C3%B4t_que_configuration

  • [^] # Re: J'ai du mal a comprendre

    Posté par  (site web personnel) . En réponse au journal 5-sigma: le boson de Higgs est débusqué !. Évalué à 1.

    Y a pas de physicienNES au CERN ?

  • [^] # Re: C'est cher, mais ça ne me dérange pas

    Posté par  (site web personnel) . En réponse au journal [Prix des ebooks] coup de gueule. Évalué à 1.

    oui mais juste les versions en anglais…

    pas celles en français !

    "Limited to English language products"

  • [^] # Re: OVNI ?

    Posté par  (site web personnel) . En réponse au journal Un article anti-Word, mais pas pro-libre office. Évalué à 1.

    ce commentaire m'évoque une question.

    Quel(s) outil(s) existe(nt) pour transformer une syntaxe en une autre avec n formats d'entrée et m formats de sortie et qui puisse être étendu pour supporter un autre format en entrée (et/ou en sortie).

    L'objectif d'un tel outil pourrait être de faciliter la migration des données d'un moteur de wiki à un autre.``

    On peut peut-être aussi imaginer tout faire à coup de regexp… mais j'imagine une solution un peu plus modulaire.

    L'outil générerait en plus des logs quand il rencontrerait des marques prises en compte dans le format d'entrée mais pas dans celui de sortie, etc…

    j'ai l'impression que txt2tags réponds en partie à ma question sauf que ça à l'air d'être
    1 format d'entrée et m format de sorties (ONE source, MULTI targets)

  • # Dois-je changer mon mot de passe ?

    Posté par  (site web personnel) . En réponse au journal lulz, mots de passe et compagnie. Évalué à 1.

    Bonjour,

    voici une initiative intéressante d'un spécialiste en sécurité informatique.
    Si vous vous posez la question "Dois-je changer mon mot de passe ?"
    peut être que le site
    https://shouldichangemypassword.com/
    pourra vous aider à y répondre

    Cordialement

  • [^] # Re: Quel est l'avantage de Node.js par rapport à Twisted ?

    Posté par  (site web personnel) . En réponse à la dépêche Les technos web cools du moment. Évalué à -2.

    YAML, acronyme récursif de YAML Ain't Markup Language
    http://fr.wikipedia.org/wiki/YAML
  • [^] # Re: Point de vue et infos supplémentaires sur l'Opération Ordicollège

    Posté par  (site web personnel) . En réponse à la dépêche Ordicollège en Corrèze : saison n° 2. Évalué à 3.

    "Réduire la fracture numérique" c'est un bien grand mot quand en Corrèze et à moins de 15 km de Brive on n'a pas l'ADSL... et que la solution de secours (le WiMax) n'est pas au top. Quand on rajoute que les offres wimax proposées sont plus onéreuse qu'une connexion ADSL chez le plus cher des FAI pour ne même pas avoir la téléphonie illimitée... que la mise en place est loin d'être évidente (l'azimuth fournit n'étant pas nécessairement le bon... il faut chercher "à l'aveugle" les autres relais, etc...)

    Je pense que le conseil général de Corrèze aurait mieux à faire à s'intéresser aux problèmes des connexions Internet qu'à fournir des portables aux collègiens...

    Quand je vois mes étudiants de DUT qui ne savent pas se servir de leur calculatrice (et qu'ils en ont depuis le collège) je crains d'avoir à leur enseigner l'informatique quand ils auront un portable depuis le collège...
  • [^] # Re: synology

    Posté par  (site web personnel) . En réponse à la dépêche NAS LaCie Network Space : un firmware alternatif. Évalué à 2.

    idem.

    Des mises à jour du firmware régulières (y compris sur des vieux modèles).

    Un débit pas mal (désolé j'ai pas les chiffres)

    Une interface web AJAX

    Accès SSH pour bidouiller, possibilité d'installer des package avec ipkg...

    que du bon !
  • # Quelles différences avec ... ?

    Posté par  (site web personnel) . En réponse à la dépêche Sortie de Parted Magic 4.3. Évalué à 6.

    Bonjour,

    qu'apporte ce live CD par rapport à
    Ultimate Boot CD
    System Rescue CD
  • [^] # Re: Et sinon, pour les utilisateurs normaux ?

    Posté par  (site web personnel) . En réponse à la dépêche ext3 est mort ? Vive ext4 !. Évalué à 8.

    En même temps vu le nombre d'ISO de Debian qui sortent chaque année... tu as le temps de le déplacer ton fichier...

    Désolé je -------->[]
  • [^] # Re: Question con que tout le monde se pose

    Posté par  (site web personnel) . En réponse au journal Windows 7 et IE. Évalué à 3.

    Peut-être qu'une alternative est que MS développe un vrai système de gestion de paquets logiciels à la Linux et dans laquelle on trouve plusieurs browsers.
    La liste des medias comprendrait tous les navigateurs majeurs mais ça ne serait pas MS qui hébergerait les fichiers... ils seraient sur les serveurs de leur créateurs respectifs. Par contre MS aurait à charge de gérer une liste de media cohérente.
  • [^] # Re: bravo

    Posté par  (site web personnel) . En réponse à la dépêche Corrèze, 1er déploiement massif du libre dans les collèges. Évalué à 4.

    Le WiMax est déployé... oui... mais opérationnel ? rien n'est moins sûr.
    Ma mère attend désespérément une connexion haut-débit depuis quelques années... Elle habite Cosnac (10-15 km de Brive)... Les derniers essais étaient loins d'être fructueux ! Ne pas avoir un accès facile au haut débit est une honte aujourd'hui ! (surtout dans des coins aussi peu reculés...)
  • [^] # Re: YY_INPUT

    Posté par  (site web personnel) . En réponse au message Parser une chaine de caractère en C avec Flex/Bison. Évalué à 2.

    En fait c'est bien plus simple !!!
    Il y a juste besoin d'utiliser

    yy_scan_string("*IDN?\n");
    yyparse();

    et il est nullement nécessaire de redéfinir la macro YY_INPUT !!!

    main.l


    %{
    #include <string.h>
    #include "main.tab.h"
    %}

    %option case-insensitive

    INTEGER [0-9]+
    FLOATING [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

    %%
    {INTEGER} {yylval=atoi(yytext); return TOK_NUMBER;}
    "*IDN?" return TOK_IDENT;
    heat return TOK_HEAT;
    on|off {yylval=!strcmp(yytext,"on"); return TOK_STATE;}
    set return TOK_SET;
    temperature return TOK_TEMPERATURE;
    get return TOK_GET;
    \n return TOK_EOL; /* end of line */;
    [ \t]+ /* ignore whitespace */;

    %%



    main.y

    %{
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    int value; /* temperature value */

    enum _state {
    off,
    on
    };
    enum _state state;

    void show_heat_state() {
    if (state==off) {
    printf("\tHeat is off\n");
    } else {
    printf("\tHeat is on\n");
    }
    }


    /* Si l'on compile avec l'option --verbose et yydebug mis a 1, permet
    d'obtenir le fichier data.output, qui contient la liste des
    differents states possibles pour la machine d'etat. */
    int yydebug=1;

    %}


    %token TOK_IDENT TOK_NUMBER TOK_HEAT TOK_STATE TOK_SET TOK_TEMPERATURE TOK_GET TOK_EOL
    /*
    %union
    {
    double dbl;
    int integer;
    }
    */

    %%

    commands: /* empty */
    | commands command TOK_EOL
    ;

    command:
    identification
    | heat_switch
    | heat_get
    | target_set
    | target_get
    ;

    identification:
    TOK_IDENT
    {
    printf("\tMyDevice\n",value);
    }
    ;


    heat_switch:
    TOK_HEAT TOK_STATE
    {
    if ($2==0) {
    state=off;
    } else if ($2==1) {
    state=on;
    }
    show_heat_state();
    }
    ;

    heat_get:
    TOK_GET TOK_HEAT
    {
    show_heat_state();
    }
    ;


    target_set:
    TOK_SET TOK_TEMPERATURE TOK_NUMBER
    {
    value=$3;
    printf("\tTemperature set to %d\n",value);
    }
    ;

    target_get:
    TOK_GET TOK_TEMPERATURE
    {
    printf("\tTemperature is %d\n",value);
    }
    ;
    %%


    void yyerror(const char *str) {
    fprintf(stderr,"yyerror: %s\n",str);
    }

    int yywrap() {
    return 1;
    }



    int main(void) {
    value=0;
    state=off;

    /* yyparse(); */ /* parser les commandes envoyées sur stdin */

    /* suite de commandes à parser */
    yy_scan_string("*idn?\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("*IDN?\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("heat on\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("get heat\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("heat off\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("get heat\n");
    yyparse();

    /* suite de commandes à parser */
    yy_scan_string("set temperature 21\n");
    yyparse();

    /* suite commandes à parser */
    yy_scan_string("get temperature\n");
    yyparse();

    return 0;
    }



    Makefile

    all:
    flex main.l
    bison -d --verbose main.y
    gcc lex.yy.c main.tab.c -lfl -o main
    ./main
  • [^] # Re: YY_INPUT

    Posté par  (site web personnel) . En réponse au message Parser une chaine de caractère en C avec Flex/Bison. Évalué à 1.

    ça y est c'est fait !... et ça marche nickel... merci...
    Il faut juste que je gère le problème des températures en nombre à virgule flottante
  • [^] # Re: YY_INPUT

    Posté par  (site web personnel) . En réponse au message Parser une chaine de caractère en C avec Flex/Bison. Évalué à 1.

    Merci beaucoup de passer du temps à résoudre mes problèmes !
    Ah ce fichu malloc/free !!! je sais pourquoi j'avais abandonné le C pendant
    quelques années pour me mettre à Python ! par contre Python sur un uC 8 bits ça doit pas le faire ;-)
  • [^] # Re: YY_INPUT

    Posté par  (site web personnel) . En réponse au message Parser une chaine de caractère en C avec Flex/Bison. Évalué à 1.

    si je mets un char* j'ai un bus error lorsque j'initialise ma chaine de caractère !

    ok pour le \n .... je n'y avais vraiment pas pensé !!!!!

    sinon je crois qu'il existe une fonction nommé yy_scan_string...
    ne peut-elle pas servir à cet usage ?

    http://flex.sourceforge.net/manual/Multiple-Input-Buffers.ht(...)

    Function: YY_BUFFER_STATE yy_scan_buffer (char *base, yy_size_t size)

    which scans in place the buffer starting at base, consisting of size bytes, the last two bytes of which must be YY_END_OF_BUFFER_CHAR (ASCII NUL). These last two bytes are not scanned; thus, scanning consists of base[0] through base[size-2], inclusive.

    If you fail to set up base in this manner (i.e., forget the final two YY_END_OF_BUFFER_CHAR bytes), then yy_scan_buffer() returns a NULL pointer instead of creating a new input buffer.
  • [^] # Re: YY_INPUT

    Posté par  (site web personnel) . En réponse au message Parser une chaine de caractère en C avec Flex/Bison. Évalué à 1.

    Désolé mais ça ne marche pas... il ne se passe rien quand j'exécute !!!

    main.l

    %{
    #include <string.h>
    #include "main.tab.h"

    #undef YY_INPUT
    #define YY_INPUT(b,r,ms) (r = my_yyinput(b, ms))

    extern char* g_str;
    extern size_t g_str_size; /* taille de g_str */
    extern int g_str_read; /* nombre de caractère déjà envoyés à lex, initializé au départ à 0 */

    int my_yyinput(char* buf, int max_size)
    {
    /* on calcule le nombre de caractères à copier dans buf,
    * soit on a assez de caractères pour remplir, buf, soit on prend le reste de la chaine
    */
    int num = fmin(max_size, g_str_size-g_str_read);


    /* on copie notre chaine dans buf */
    if (num > 0)
    {
    memcpy(buf, g_str+g_str_read, num);
    g_str_read += num;
    }
    return num;
    }


    %}

    %option case-insensitive

    INTEGER [0-9]+
    FLOATING [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

    %%

    {INTEGER} {yylval=atoi(yytext); return TOK_NUMBER;}
    heat return TOK_HEAT;
    on|off {yylval=!strcmp(yytext,"on"); return TOK_STATE;}
    set return TOK_SET;
    temperature return TOK_TEMPERATURE;
    get return TOK_GET;
    \n return TOK_EOL; /* end of line */;
    [ \t]+ /* ignore whitespace */;

    %%


    main.y

    %{
    #include <stdio.h>
    #include <string.h>

    #define STR_SIZE 50
    char g_str[STR_SIZE];
    /*char* g_str;*/
    size_t g_str_size; /* taille de g_str */
    int g_str_read; /* nombre de caractère déjà envoyés à lex, initializé au départ à 0 */

    /*
    #define STR_SIZE 50
    char str[STR_SIZE];

    int myinput(char *buf, int max){
    memcpy(buf, str, STR_SIZE);
    }
    */
    /*
    int n = min(max, gStringLimit-gStringPtr);
    if(n>0){
    memcpy(buf, gStringPtr, n);
    gStringPtr +=n;
    }
    return n;
    }
    */


    int value; /* temperature value */

    enum _state {
    off,
    on
    };
    enum _state state;

    void show_heat_state() {
    if (state==off) {
    printf("\tHeat is off\n");
    } else {
    printf("\tHeat is on\n");
    }
    }

    %}


    %token TOK_NUMBER TOK_HEAT TOK_STATE TOK_SET TOK_TEMPERATURE TOK_GET TOK_EOL

    %%

    commands: /* empty */
    | commands command TOK_EOL
    ;

    command:
    heat_switch
    |
    heat_get
    |
    target_set
    |
    target_get
    ;

    heat_switch:
    TOK_HEAT TOK_STATE
    {
    if ($2==0) {
    state=off;
    } else if ($2==1) {
    state=on;
    }
    show_heat_state();
    }
    ;

    heat_get:
    TOK_GET TOK_HEAT
    {
    show_heat_state();
    }
    ;


    target_set:
    TOK_SET TOK_TEMPERATURE TOK_NUMBER
    {
    value=$3;
    printf("\tTemperature set to %d\n",value);
    }
    ;

    target_get:
    TOK_GET TOK_TEMPERATURE
    {
    printf("\tTemperature is %d\n",value);
    }
    ;
    %%


    void yyerror(const char *str) {
    fprintf(stderr,"yyerror: %s\n",str);
    }

    int yywrap() {
    return 1;
    }



    int main(void) {

    strcpy(g_str,"get temperature");
    /* printf(g_str); */

    value=0;
    state=off;

    yyparse();

    return 0;
    }


    Makefile

    all:
    flex main.l
    bison -d main.y
    gcc lex.yy.c main.tab.c -lfl -o main
    ./main