Blogue

Réflex ” Modèles, partie 2

Dans ma dernière entrée sur les modèles dans Réflex, j’ai parlé de comment les requêtes à la base de données sont construites pour correspondre aux besoins du modèle. Du point de vue du développeur d’application web, ça veux dire moins de code qui sert à contrôler l’affichage des pages. Ça donne aussi beaucoup de flexibilité au concepteur du modèle qui n’est plus limité par ce que le développeur d’application rend disponible au modèle. Mais ce principe du modèle qui crée la requête peut être poussé encore plus loin. Embarquons dans les formulaires!

Créer un formulaire c’est plutôt facile en HTML. Créer un formulaire qui fonctionne demande cependant une certaine compétence en programmation du côté serveur. Et bien, pas avec les modèles de Réflex. Écrivez votre formulaire tout comme vous l’auriez fait en HTML et il fonctionnera :

<rx:form>

<p>
<label>
  Titre :
  <rx:input type="text" source="entry/title"/>
</label><br />

<label>
  Contenu :
  <rx:textarea cols="80" rows="20" source="entry/content"/>
</label>
</p>

<p>
  <rx:input type="submit" perform="update"/>
  <rx:input type="submit" perform="delete"/>
</p>

</rx:form>

Notez les balises <rx:input> et <rx:textarea>. Elles possèdent les mêmes attributs que les balises HTML <input> et <textarea>, et seront rendu de cette façon au navigateur avec quelque transformations. Chacune recevra un attribut name. L’attribut value, du premier <input> et le contenu du <textarea> sera remplis avec les données indiqués par l’attribut source.

L’élément <rx:form> sera changé en un <form> standard avec l’attribut action menant vers la page courante et l’attribut method="post". Les deux derniers <rx:input> ont l’attribut type="submit" et seront affichés comme des boutons par le navigateur. Parce qu’ils n’en ont pas déjà, Réflex ajoute le texte à afficher sur les boutons (attribut value).

Finalement, quand vous soumettez le formulaire, Réflex prend toutes les entrées et appelle l’action associée à l’attribut perform du bouton sur lequel vous avez cliqué. Et voilà, vous avez mis à jour, ou effacé, votre entrée.

Mais un instant, n’est-ce pas totalement insécure? Et si je ne veux pas que personne n’efface mon entrée ? La réponse évidente serait « enlevons le bouton supprimer », ce qui évidemment ne fait rien pour empêcher un utilisateur malicieux de fausser les données de façon à faire effacer l’entrée même en l’absence du bouton. Vraiment ? Si vous enlevez le bouton appelant l’action « delete », Réflex n’acceptera plus d’effectuer cette action. C’est totalement WYSITFIAYCDWTFWhat You See In The Form Is All You Can Do With The Form.

Ce n’est pas tout.

Supposons qu’on veuille éditer plusieurs entrées à la fois… c’est possible? Tout à fait, c’est aussi simple que si vous vouliez afficher toutes vos entrées sur la même page; placez les <rx:input> dans une liste:

<rx:form>

<ul>
  <rx:list source="weblog/entry" as="entry">
    <li><rx:input type="text" source="entry/title"/></li>
  </rx:list>
</ul>

<p><rx:input type="submit" perform="update"/></p>

</rx:form>

N’est-ce pas merveilleux? Notez qu’à la place d’écrire une balise <rx:list> avec quelque attributs, j’aurais pu utiliser le raccourcis <rx:entry-list> comme dans la partie 1.

Donc on peut créer à peu près n’importe quel genre de formulaire avec ce système de modèle. Ce qui est vraiment intéressant c’est qu’ils fonctionnent automatiquement. C’est aussi la base de toute l’interface d’administration de Réflex.

Vous aurez peut-être remarqué que tous ces exemples traitent d’entrées d’un blogue. Ce n’est pas limité à ça: tous les types de données peuvent être gérés de cette façon dans Réflex. Le stockage des données et le fonctionnement des actions sont définis par les modules. Ce sera le sujet de ma prochaine entrée sur Réflex.


Big Box Mart

Apparemment, magasiner chez Wal-Mart n’est pas une si bonne aubaine que ce qu’ils voudraient nous faire croire. Voici un beau vidéo (en anglais, désolé) qui explique tout d’une manière très éloquante. Amusant !


Réflex ” Modèles, partie 1

Je viens tout juste de lire cet opinion à propos des modèles qui explique pourquoi la grande majorité des engins de modèles n’ont pas vraiment leur raison d’être. Et j’ai donc pensé que ce serait une bonne occasion de parler un peu plus des modèles dans Réflex.

Je ne penses pas pouvoir mettre les modèles de Réflex dans la même catégorie que la majorité des autres engins de modèle. Les modèles dans Réflex sont là pour vous aider à écrire moins de code. Et pour faire ça, il faut sortir du paradigme de modèle traditionnel : à la place de récupérer les données puis de les envoyer au modèle, c’est l’engin de modèle qui récupère les données en se basant sur ce que le modèle a réellement besoin.

Ça ne rend pas les modèles difficile à utiliser ; il n’y a pas vraiment moyen de voir ce qui se passe quand vous écrivez quelque chose comme ça :

<rx:entry-list>

<h2><rx:entry-title/></h2>

<rx:entry-content/>

</rx:entry-list>

ce qui n’est en réalité qu’une forme plus simple de ceci :

<rx:list source="weblog/entry" as="entry">

<h2><rx:data source="entry/title"/></h2>

<rx:data source="entry/content"/>

</rx:list>

Tout ça ressemble à un modèle standard n’est-ce pas ? Mais basé sur ce modèle, Réflex va exécuter la requête SQL suivante :

SELECT title, content FROM weblog_entry WHERE weblog_id=1

Supposons qu’on ajoute la date de publication à notre modèle :

<rx:entry-list>

<h2><rx:entry-title/></h2>

<rx:entry-content/>

<p>Published on <rx:entry-publication-date/></p>

</rx:entry-list>

La requête va s’adapter d’elle même :

SELECT title, content, published_on FROM weblog_entry WHERE weblog_id=1

Comment est-ce que ça fonctionne ? Le modèle est converti en une forme intermédiaire, qui est en fait un tableau de chaînes de caractères et d’objets « Pane ». Les panes qui sont à l’intérieur d’autre panes peuvent demander des données à leur parent ; les panes qui récupère des données doivent sélectionner les champs demandés par leurs enfants.

Réflex utilise donc les modèles pour deux choses : récupérer les données et afficher les données. Faire ces deux choses ne rend pas le modèle plus compliqué que les autres systèmes de modèle. Mais c’est un subtile changement de paradigme : à la place de simplement dire comment présenter les choses, le modèle est aussi là pour choisir quoi présenter.


Vote électronique ; fiabilité ?

Aujourd’hui c’est jour d’élection dans plusieurs municipalités du Québec. Si vous êtes allé voter aujourd’hui, vous aurez peut-être remarqué que dans votre ville le vote se fait de façon électronique, ou semi-électronique. Ici à Lévis, on noirci le cercle sur un bulletin de vote, et le bulletin de vote est ensuite inséré dans une machine qui maintient un décompte. Ailleurs, on appuie simplement sur le bouton d’un candidat et la machine compte. Mais est-ce que ces machines sont vraiment fiables ? J’ai des gros doutes, et voici pourquoi.

Dans une élection traditionnelle, sur bulletin papier, il y aura toujours des dizaines de témoins en cas de manipulation douteuse des bulletins. Tout le monde présent comprend très bien comment ça fonctionne : le bulletin de vote est dans la boîte et la boîte reste scellée donc personne ne peux altérer les votes. Aussi absurde que ça peut paraître, si quelqu’un était caché dans la boîte pour trafiquer les bulletins, on le remarquerait très vite et il se retrouverait aussitôt accusée de fraude.

Avec une machine qui compte les votes, c’est le fonctionnement interne de la machine qui effectue le décompte des votes au fur et à mesure que les votes entrent. Le décompte est gardé dans une mémoire interne qui n’est pas affiché avant la fin de l’élection.

Il y a toujours des dizaines de personnes dans le bureau de vote en mesure de vérifier que tout se passe correctement. Le fonctionnement est simple : le vote est entré dans l’appareil et l’appareil tient le compte du nombre de vote pour chaque option. Tout le monde sait que personne n’est caché dans l’appareil pour trafiquer le compte des votes. Mais est-ce vraiment le cas ?

Les machines à compter les votes reposent sur un mécanisme (électronique et logiciel) qui tient à jour le nombre de vote pour chaque option. Les gens dans le bureau de vote n’ont pour la plupart pas la compétence de vérifier ce mécanisme avant le scrutin. Et ceux qui auraient les connaissances requises ne peuvent généralement pas vérifier le mécanisme par eux-mêmes : le logiciel et le matériel est vendu par une compagnie qui tient à garder le fonctionnement comme secret industriel.

Autrement dit, contrairement aux bulletins sur papier, personne en dehors de la compagnie et de ses techniciens n’est en mesure de vérifier le mécanisme par lequel le vote est enregistré. C’est là que réside le principal problème du vote électronique.

Pourtant, d’après cet article de Radio-Canada, le vote électronique semblerais sécuritaire. En voici un extrait :

[…] le président des élections à Québec, René Damphousse, affirme que des tests ont été faits et que les résultats comptabilisés par ces machines sont fiables : « En 2000, nous avons essayé ce type d’appareil. Il a été essayé ailleurs et, à chaque fois, le résultat a concordé avec ce qui avait été voté par les électeurs. »

Ce à quoi je répondrais qu’on peut facilement avoir testé une machine une journée et la voir fonctionner différemment le lendemain. Votre ordinateur est bien capable de passer à l’heure d’été automatiquement à la bonne date, alors pourquoi pas une machine à voter ?

Tester la machine démontre que ces machines sont capables de compter les votes correctement. Par contre, ça ne prouve pas du tout que la machine n’a pas été trafiquée. Elle pourrait compter les votes différemment le jour de l’élection et, tant que les résultats restent vraisemblables, personne ne pourrait s’en douter.

Même si on découvrait que la machine a été trafiquée, il risque d’être très difficile de trouver le responsable. En fait, la fraude aurait pu être commise plusieurs jours — voir des mois — auparavant, par quelqu’un ayant subtilement modifié le programme.

Le secret qui entoure le fonctionnement de ces machines rend très difficile, voir impossible, de vérifier que la machine n’a pas été trafiquée. Sérieusement, comment vérifier que le mécanisme est dans son état normal le jour de l’élection si on ne connaît même pas c’est quoi son état normal ? On doit s’en remettre entièrement aux services d’inspection de la compagnie qui fourni les machines. Et cette compagnie n’a pas nécessairement intérêt à faire de publicité quand elle trouve des problèmes. C’est sans compter que la compagnie pourrait être partisane.

Comparez la sécurité du comptage des votes électronique et du comptage des votes sur papier dans des urnes traditionnelles et vous aurez un gagnant certain : personne n’est en mesure d’assurer une sécurité avec le comptage des votes électronique.

Le vote électronique, tel qu’il fonctionne actuellement, fait que le processus démocratique, au lieu d’être supervisé par des membres de tous les partis, repose entre les mains d’une compagnie privée et de sa boîte au fonctionnement opaque.

Son seul avantage est que le résultat est connu plus rapidement… mais à quel prix ?


Toujours dans le même article de Radio-Canada :

Par ailleurs, des solutions sont prévues, en cas d’éventuelles contestations. Il est notamment possible d’imprimer un relevé de tous les votes, ou de compter tous les bulletins de papier.

Jusqu’à maintenant je n’ai parlé que du comptage des votes. Il y a une importante différence à faire entre entrer son vote de façon électronique et simplement compter les votes.

  • Quand on entre son vote directement dans une machine, la machine peut le changer sans laisser de trace de votre vote intention originale, et sans que vous le sachiez (vous ne pouvez pas vérifier que ce qui s’enregistre à l’intérieur est bien la même chose que ce que le bouton que vous appuyé et ce que vous avez vu à l’écran.)

  • Quand vous écrivez votre vote sur un bout de papier, il est écrit et ne peut être modifié. Il ne peut qu’être mal compté. Un recomptage manuel suffit pour résoudre le problème. (Encore faut-il qu’il y ait recomptage. Un recomptage en cas d’égalité serré comme à l’habitude ne suffit pas : une machine pourrait trafiquer le vote pour qu’un candidat l’emporte largement.)

L’idée d’imprimer les bulletins de vote n’est pas une mauvaise idée. Si l’électeur peut le voir, il peut s’assurer que la machine a écrit correctement son vote sur le bulletin.

Mais que ce passe-il si le bulletin imprimé ne reflète pas le souhait de l’électeur ? Ça semble absurde à première vue, mais ça c’est produit aux États-Unis lors de la dernière élection présidentielle, et, qu’il s’agisse d’une défaillance ou d’une manipulation frauduleuse, ça se produira certainement encore. Il faut que quelque chose soit prévu pour ces cas là.

Je vous laisse maintenant le soin de décider si vous faites confiance au vote électronique dans votre ville. Je vous invite à consulter ces quelques sites intéressants sur le sujet :



  • © 2003–2024 Michel Fortin.