<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Aperçu de l&#8217;attribut contenteditable en HTML5</title>
	<atom:link href="http://www.valhalla.fr/2010/04/19/contenteditable-html5/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valhalla.fr/2010/04/19/contenteditable-html5/</link>
	<description>www.valhalla.fr</description>
	<lastBuildDate>Fri, 30 Dec 2011 14:50:05 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
	<item>
		<title>By: GF</title>
		<link>http://www.valhalla.fr/2010/04/19/contenteditable-html5/comment-page-1/#comment-27955</link>
		<dc:creator>GF</dc:creator>
		<pubDate>Tue, 01 Feb 2011 15:13:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.valhalla.fr/?p=519#comment-27955</guid>
		<description>En effet, il y a un problème de synchronisation. L&#039;attribut contenteditable lui-même ne gère absolument pas cela : c&#039;est du HTML, et il se contente de rendre un bloc éditable directement dans le navigateur. L&#039;enregistrement du contenu n&#039;est plus l&#039;affaire du HTML, mais du langage de script (quel qu&#039;il soit) utilisé pour communiquer avec la base de données.

L&#039;exemple très simple que je donne ici, avec PHP et JavaScript, ne gère pas non plus la synchronisation des modifications (précisément parce qu&#039;il est simple et qu&#039;il doit le rester).

Il faut donc implémenter un système dans le logiciel qui gère les accès à la base de données, si c&#039;est nécessaire. Car cela ne l&#039;est pas forcément. Dans le cas d&#039;un wiki, comme Wikipédia, il est évident qu&#039;il faut gérer les modifications simultanées d&#039;un article. Mais dans un forum ou un blog, par exemple ? Ce n&#039;est généralement pas nécessaire, car la seule personne autorisée à modifier un message est celle qui a écrit ce message (hormis les modérateurs et administrateurs, mais leur intervention est gérée par un système de droits, et celle-ci prévaut sur celles des autres utilisateurs).

Bref, sans n&#039;avoir jamais implémenté un tel système (je n&#039;en ai jamais eu besoin), on pourrait imaginer une première requête vers la base de données avec AJAX, lorsque le champ devient éditable (événement onclick, par exemple) qui insère un verrou dans une table spéciale (table verrou : id_article, id_utilisateur, timestamp...), ou dans une colonne de la table contenant le texte (table texte : id, contenu, auteur, is_locked). On pourrait ensuite modifier la requête d&#039;enregistrement qui, en plus de faire un UPDATE sur le texte, retirerait le verrou. Il ne resterait qu&#039;à prévoir un &quot;failsafe&quot; dans le cas où le verrou n&#039;est pas fermé au bout d&#039;un moment (l&#039;auteur est parti prendre un looong café sans enregistrer les modifications...), ainsi qu&#039;un message avertissant les autres utilisateurs qu&#039;ils ne peuvent pas modifier le texte tant qu&#039;il est verrouillé.

Tout cela serait plutôt simple à implémenter, mais pas très élégant pour les utilisateurs qui devraient prendre leur mal en patience lorsqu&#039;un texte est verrouillé (et l&#039;on sait qu&#039;avec le Web 2.0, la patience n&#039;est pas de mise). Il faudrait alors créer un véritable système de gestion de versions, comme SVN ou Subversion, ou comme ceux de Wikipédia ou de Wordpress, et s&#039;inspirer de leur manière de gérer les accès (COMMIT) concurrents au même contenu. Mais cela est une autre affaire.

Si c&#039;est trop complexe, on peut faire plus léger (mais aussi moins sûr), en se contentant d&#039;avertir l&#039;utilisateur de l&#039;existence d&#039;un accès concurrent, et en le laissant agir de manière appropriée. On pourrait ainsi créer un DIV spécial dans la page, et le mettre à jour avec AJAX, pour dire à l&#039;utilisateur soit &quot;il y a X utilisateurs en train de modifier cette page&quot;, soit &quot;attention le contenu de la page a changé pendant que vous écriviez&quot; (on pourrait dans ce cas, toujours avec AJAX, surligner ou mettre en évidence d&#039;une manière ou d&#039;une autre ce qui a changé).

Ma conclusion est donc la suivante : la gestion des versions concurrentes du même document est un problème complexe et indépendant de la manière d&#039;éditer les données. L&#039;attribut contenteditable ne s&#039;occupe que de l&#039;édition des données. Il permet de rendre l&#039;expérience utilisateur plus agréable, mais il est impuissant à gérer les versions concurrentes. D&#039;ailleurs, que l&#039;on utilise contenteditable et AJAX ou les bonnes vieilles requêtes GET/POST synchrones, cela ne change rien au problème des versions concurrentes. Donc, si le logiciel est susceptible de générer des versions concurrentes, il doit être capable de les gérer.</description>
		<content:encoded><![CDATA[<p>En effet, il y a un problème de synchronisation. L&#8217;attribut contenteditable lui-même ne gère absolument pas cela : c&#8217;est du HTML, et il se contente de rendre un bloc éditable directement dans le navigateur. L&#8217;enregistrement du contenu n&#8217;est plus l&#8217;affaire du HTML, mais du langage de script (quel qu&#8217;il soit) utilisé pour communiquer avec la base de données.</p>
<p>L&#8217;exemple très simple que je donne ici, avec PHP et JavaScript, ne gère pas non plus la synchronisation des modifications (précisément parce qu&#8217;il est simple et qu&#8217;il doit le rester).</p>
<p>Il faut donc implémenter un système dans le logiciel qui gère les accès à la base de données, si c&#8217;est nécessaire. Car cela ne l&#8217;est pas forcément. Dans le cas d&#8217;un wiki, comme Wikipédia, il est évident qu&#8217;il faut gérer les modifications simultanées d&#8217;un article. Mais dans un forum ou un blog, par exemple ? Ce n&#8217;est généralement pas nécessaire, car la seule personne autorisée à modifier un message est celle qui a écrit ce message (hormis les modérateurs et administrateurs, mais leur intervention est gérée par un système de droits, et celle-ci prévaut sur celles des autres utilisateurs).</p>
<p>Bref, sans n&#8217;avoir jamais implémenté un tel système (je n&#8217;en ai jamais eu besoin), on pourrait imaginer une première requête vers la base de données avec AJAX, lorsque le champ devient éditable (événement onclick, par exemple) qui insère un verrou dans une table spéciale (table verrou : id_article, id_utilisateur, timestamp&#8230;), ou dans une colonne de la table contenant le texte (table texte : id, contenu, auteur, is_locked). On pourrait ensuite modifier la requête d&#8217;enregistrement qui, en plus de faire un UPDATE sur le texte, retirerait le verrou. Il ne resterait qu&#8217;à prévoir un &#8220;failsafe&#8221; dans le cas où le verrou n&#8217;est pas fermé au bout d&#8217;un moment (l&#8217;auteur est parti prendre un looong café sans enregistrer les modifications&#8230;), ainsi qu&#8217;un message avertissant les autres utilisateurs qu&#8217;ils ne peuvent pas modifier le texte tant qu&#8217;il est verrouillé.</p>
<p>Tout cela serait plutôt simple à implémenter, mais pas très élégant pour les utilisateurs qui devraient prendre leur mal en patience lorsqu&#8217;un texte est verrouillé (et l&#8217;on sait qu&#8217;avec le Web 2.0, la patience n&#8217;est pas de mise). Il faudrait alors créer un véritable système de gestion de versions, comme SVN ou Subversion, ou comme ceux de Wikipédia ou de WordPress, et s&#8217;inspirer de leur manière de gérer les accès (COMMIT) concurrents au même contenu. Mais cela est une autre affaire.</p>
<p>Si c&#8217;est trop complexe, on peut faire plus léger (mais aussi moins sûr), en se contentant d&#8217;avertir l&#8217;utilisateur de l&#8217;existence d&#8217;un accès concurrent, et en le laissant agir de manière appropriée. On pourrait ainsi créer un DIV spécial dans la page, et le mettre à jour avec AJAX, pour dire à l&#8217;utilisateur soit &#8220;il y a X utilisateurs en train de modifier cette page&#8221;, soit &#8220;attention le contenu de la page a changé pendant que vous écriviez&#8221; (on pourrait dans ce cas, toujours avec AJAX, surligner ou mettre en évidence d&#8217;une manière ou d&#8217;une autre ce qui a changé).</p>
<p>Ma conclusion est donc la suivante : la gestion des versions concurrentes du même document est un problème complexe et indépendant de la manière d&#8217;éditer les données. L&#8217;attribut contenteditable ne s&#8217;occupe que de l&#8217;édition des données. Il permet de rendre l&#8217;expérience utilisateur plus agréable, mais il est impuissant à gérer les versions concurrentes. D&#8217;ailleurs, que l&#8217;on utilise contenteditable et AJAX ou les bonnes vieilles requêtes GET/POST synchrones, cela ne change rien au problème des versions concurrentes. Donc, si le logiciel est susceptible de générer des versions concurrentes, il doit être capable de les gérer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yannick Cadin</title>
		<link>http://www.valhalla.fr/2010/04/19/contenteditable-html5/comment-page-1/#comment-27954</link>
		<dc:creator>Yannick Cadin</dc:creator>
		<pubDate>Tue, 01 Feb 2011 13:08:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.valhalla.fr/?p=519#comment-27954</guid>
		<description>Bonjour,

Je vais peut-être dire une grosse bêtise mais le problème de la concurrence d&#039;accès (envoi quasi simultané d&#039;un document modifié par 2 personnes distinctes) n&#039;a-t-il pas été complètement laissé de côté ?
C&#039;est bien de faire allusion un moment aux bases de données mais dans le cas présent et contrairement à ces dernières, si un internaute commence à éditer le contenu, aucun mécanisme de verrou me semble-t-il ne permet d&#039;éviter qu&#039;un autre larron ne commence de son côté à modifier le contenu.
L&#039;exemple de Wikipédia me semble pertinent. Beaucoup de monde et des gros documents. La haine si le document que je viens de réviser pendant 3 heures est ignoré sous prétexte qu&#039;un autre quidam a validé son édition une seconde après moi.
Désolé si une subtilité m&#039;a échappé qui prévient ce souci.
J&#039;imagine bien un début de solution (au moins un pis-aller). Ajouter une fonction pour gérer l&#039;événement &quot;Focus&quot; qui irait interroger le serveur pour vérifier si un verrou a été positionné et le positionner justement si ce n&#039;est déjà le cas. Gros défaut, il faut prévoir un mécanisme de &quot;rafraîchissement&quot; régulier pour éviter qu&#039;un inconscient qui fermerait sa page Web SANS valider ou annuler ne bloque indéfiniment le document qu&#039;il aurait commencé à modifier.
D&#039;ailleurs je suis en train de penser à un autre &quot;détail&quot; alors que j&#039;écris le mot &quot;annuler&quot;. Ce nouvel attribut &quot;contenteditable&quot; autorise-t-il justement l&#039;abandon des modifications en cours ?
Je me pose une autre question. Comment les sites et outils existants gèrent cette problématique jusqu&#039;à maintenant ? (Je viens de procéder à quelques tests rapides sur Wikipédia et le résultat est assez &quot;surprenant&quot;. C&#039;est plus subtil que du verrouillage et il s&#039;en sort globalement pas trop mal. Ce qui est certain c&#039;est que ce n&#039;est géré qu&#039;au moment de la &quot;publication&quot;, donc en phase finale, pas avant.)

D&#039;avance merci pour tout éclaircissement.</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Je vais peut-être dire une grosse bêtise mais le problème de la concurrence d&#8217;accès (envoi quasi simultané d&#8217;un document modifié par 2 personnes distinctes) n&#8217;a-t-il pas été complètement laissé de côté ?<br />
C&#8217;est bien de faire allusion un moment aux bases de données mais dans le cas présent et contrairement à ces dernières, si un internaute commence à éditer le contenu, aucun mécanisme de verrou me semble-t-il ne permet d&#8217;éviter qu&#8217;un autre larron ne commence de son côté à modifier le contenu.<br />
L&#8217;exemple de Wikipédia me semble pertinent. Beaucoup de monde et des gros documents. La haine si le document que je viens de réviser pendant 3 heures est ignoré sous prétexte qu&#8217;un autre quidam a validé son édition une seconde après moi.<br />
Désolé si une subtilité m&#8217;a échappé qui prévient ce souci.<br />
J&#8217;imagine bien un début de solution (au moins un pis-aller). Ajouter une fonction pour gérer l&#8217;événement &#8220;Focus&#8221; qui irait interroger le serveur pour vérifier si un verrou a été positionné et le positionner justement si ce n&#8217;est déjà le cas. Gros défaut, il faut prévoir un mécanisme de &#8220;rafraîchissement&#8221; régulier pour éviter qu&#8217;un inconscient qui fermerait sa page Web SANS valider ou annuler ne bloque indéfiniment le document qu&#8217;il aurait commencé à modifier.<br />
D&#8217;ailleurs je suis en train de penser à un autre &#8220;détail&#8221; alors que j&#8217;écris le mot &#8220;annuler&#8221;. Ce nouvel attribut &#8220;contenteditable&#8221; autorise-t-il justement l&#8217;abandon des modifications en cours ?<br />
Je me pose une autre question. Comment les sites et outils existants gèrent cette problématique jusqu&#8217;à maintenant ? (Je viens de procéder à quelques tests rapides sur Wikipédia et le résultat est assez &#8220;surprenant&#8221;. C&#8217;est plus subtil que du verrouillage et il s&#8217;en sort globalement pas trop mal. Ce qui est certain c&#8217;est que ce n&#8217;est géré qu&#8217;au moment de la &#8220;publication&#8221;, donc en phase finale, pas avant.)</p>
<p>D&#8217;avance merci pour tout éclaircissement.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Numéro 2 &#8211; Semaine du 19 au 25 avril 2010 — Valhalla Revue</title>
		<link>http://www.valhalla.fr/2010/04/19/contenteditable-html5/comment-page-1/#comment-27415</link>
		<dc:creator>Numéro 2 &#8211; Semaine du 19 au 25 avril 2010 — Valhalla Revue</dc:creator>
		<pubDate>Sun, 25 Apr 2010 09:57:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.valhalla.fr/?p=519#comment-27415</guid>
		<description>[...] semaine, le HTML 5 est à l&#8217;honneur. On parle ici et là de l&#8217;attribut « contenteditable », tandis que d&#8217;autres parlent et reparlent de [...]</description>
		<content:encoded><![CDATA[<p>[...] semaine, le HTML 5 est à l&#8217;honneur. On parle ici et là de l&#8217;attribut « contenteditable », tandis que d&#8217;autres parlent et reparlent de [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 258/280 objects using disk: basic

Served from: www.valhalla.fr @ 2012-01-15 01:48:38 -->
