<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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>CVK's Blog</title>
	<atom:link href="http://blog.cvk.fr/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.cvk.fr</link>
	<description>Les coulisses du projet CVK</description>
	<pubDate>Fri, 02 Oct 2009 09:51:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zoom sur le Kernel &#124; BehindCVK 2/5</title>
		<link>http://blog.cvk.fr/?p=28</link>
		<comments>http://blog.cvk.fr/?p=28#comments</comments>
		<pubDate>Fri, 09 Jan 2009 11:53:50 +0000</pubDate>
		<dc:creator>Maxime Paquatte</dc:creator>
		
		<category><![CDATA[Au coeur de CVK]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=28</guid>
		<description><![CDATA[Lors du premier article de la série BehindCVK, nous vous avions brièvement parlé du  noyau ou Kernel  du CVK.  Nous allons maintenant approfondir cette partie de notre architecture.
Le Kernel peut être considéré comme le chef d’orchestre des plugins. Lorsqu’il est seul, rien ne se passe, mais il est pourtant indispensable au fonctionnement [...]]]></description>
			<content:encoded><![CDATA[<p>Lors du <a href="?p=24">premier article</a> de la série BehindCVK, nous vous avions brièvement parlé du  noyau ou Kernel  du CVK.  Nous allons maintenant approfondir cette partie de notre architecture.</p>
<p>Le Kernel peut être considéré comme le chef d’orchestre des plugins. Lorsqu’il est seul, rien ne se passe, mais il est pourtant indispensable au fonctionnement du CVK car il effectue différents rôles majeurs :</p>
<ul>
<li>Il possède et propose le contexte (état) courant du CVK, c&#8217;est-à-dire les claviers disponibles, avec chacune de leurs touches, les commandes associées, ….</li>
<li>Il découvre dynamiquement les plugins installés sur la machine</li>
<li>Il gère les dépendances entres ces plugins</li>
<li>Il gère la persistance de chaque plugin</li>
</ul>
<p><strong>1) Le contexte</strong></p>
<p>Le contexte est l’état du CVK à un instant donné. C’est la représentation des claviers et tous les éléments qui les composent.  Voici les éléments qui composent le contexte :</p>
<p><a href="http://blog.cvk.fr/wp-content/uploads/2009/01/context.png"><img class="size-medium wp-image-55" title="context" src="http://blog.cvk.fr/wp-content/uploads/2009/01/context-300x277.png" alt="Le contexte CVK" width="300" height="277" /></a></p>
<ul>
<li>Keyboards : Liste des claviers disponibles</li>
<li>Modes : Liste des modes disponibles pour un clavier (Maj, Alt, Ctrl …)</li>
<li>Zones : Liste des zones qui composent le clavier. Ce sont des zones fonctionnelles qui servent à regrouper des touches (Zone du pavé numérique, zone de flèches …)</li>
<li>Keys : Liste des touches contenues dans la zone. Elles contiennent des ActualKeys</li>
<li>ActualKeys : Liste des actions pour une touche dans un mode donné. Chaque touche ayant un comportement différent selon le mode, ce sont les ActualKeys  qui possèdent le label et l’action à effectuer.</li>
<li>Layouts : Ils représentent la disposition des touches. Pour un même clavier, il est possible d’avoir plusieurs dispositions. Par exemple, Il est possible de changer la position de certaines touches pour obtenir des claviers AZERTY et QWERTY</li>
<li>LayoutZones : Groupement de KeyLayouts correspondant aux Zones du clavier</li>
<li>KeyLayouts : Contient les informations relatives au positionnement de chaque touche.</li>
<li>CurrentMode : Mode actuellement utilisé</li>
<li>CurrentLayout : Layout actuellement utilisé</li>
<li>CurrentKeyboard : Clavier actuellement utilisé</li>
</ul>
<p>Le contexte est sauvé dans un fichier XML, il est donc possible de publier ce fichier afin de le partager avec d’autres utilisateurs. Ainsi un ergothérapeute ayant configuré un contexte spécifique à un handicape peut diffuser ce contexte aux personnes concernées.</p>
<p><strong>2) Découverte des plugins</strong></p>
<p>Les plugins CVK sont en réalité des assembly (Fichier .dll). Pour les installer, il suffit d’ajouter des fichiers dans le dossier « Plugins » du répertoire d’installation. C’est donc le rôle du Kernel de parcourir ces fichiers, de les identifier comme plugins puis de les charger dans l’application.</p>
<p><strong>3) Gestion des dépendances</strong></p>
<p>Chaque plugin à la possibilité d’utiliser d’autres plugins. CVK gère différents niveaux de dépendances entre ces plugins :</p>
<ul>
<li>Optional : Le plugin utilisé peut ne pas être présent</li>
<li>OptionalTryStart : Le plugin utilisé peut ne pas être présent. Dans le cas où il est présent et arrêté,  le Kernel essaiera de le démarrer.</li>
<li>MustExist : Le plugin utilisé doit être présent même arrêté</li>
<li>MustExistTryStart : Le plugin utilisé doit être présent  . Dans le cas où il est présent et arrêté,  le Kernel essaiera de le démarrer.</li>
<li>MustExistAndRun : Le plugin utilisé doit être présent et démarré.</li>
</ul>
<p>En fonction des dépendances, le Kernel démarre ou non chacun des plugins. Par exemple si un Plugin-A déclare avoir besoin d’un Plugin-B en MustExistAndRun et que ce Plugin-B n’est pas présent, le Plugin-A sera désactivé. Cela implique que si un autre plugin à besoin du Plugin-A il sera désactivé à son tour et ainsi de suite.</p>
<p><strong>4) Gestion de la persistance</strong></p>
<p>Afin de centraliser l’ensemble des données à persister, le Kernel propose à chaque plugin un dictionnaire permettant  de stocker des données ce qui facilite le travail des développeurs de plugins.</p>
<p>Par exemple un plugin peut stocker un paramètre comme ceci :<br />
<code>dictionnaire[‘monParametre’] = true ; </code></p>
<p>Il peut ensuite l’utiliser comme cela :<br />
<code>if( (bool)dictionnaire[‘monParametre’]) </code></p>
<p>De manière automatique, le paramètre « monParametre » sera persisté et rechargé par le Kernel sans aucune action du plugin.</p>
<p>En réalité il est possible de sauver des données sur différent éléments :</p>
<ul>
<li>Configuration «User», si la machine possède plusieurs comptes utilisateurs. Les plugins peuvent sauver des paramètres spécifiques à chaque utilisateur.</li>
<li>Configuration « Machine», les paramètres sont communs à tous les utilisateurs d’une même machine.</li>
<li>Configuration «Context», les paramètres sont sauvés dans le fichier du contexte. Si ce fichier est diffusé et utilisé sur une autre machine, les paramètres seront rechargés.</li>
<li>Il est ensuite possible d’affecter des paramètres sur chaque élément du contexte. Cela permet, par exemple, d’affecter une couleur de touche à tout le clavier et d’affecter une autre couleur à une touche en particulier. Ainsi toutes les touches du clavier auront une couleur sauf celle qui a reçu le paramètre spécifique.</li>
</ul>
<p>Episode 3 : La gestion des plugins.<br />
Episode 4 : Les editeurs.<br />
Episode 5 : La configuration des plugins.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=28</wfw:commentRss>
		</item>
		<item>
		<title>6 bonnes raisons de choisir le CVK</title>
		<link>http://blog.cvk.fr/?p=38</link>
		<comments>http://blog.cvk.fr/?p=38#comments</comments>
		<pubDate>Tue, 09 Dec 2008 09:51:27 +0000</pubDate>
		<dc:creator>Clement Folliet</dc:creator>
		
		<category><![CDATA[CVK au jour le jour]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=38</guid>
		<description><![CDATA[
Aujourd&#8217;hui, nous allons vous lister quelques raisons vous expliquant pourquoi le CVK est un outil qui va vous être utile.


Gratuit:
Le CVK est un logiciel gratuit. C&#8217;est tout simple mais important à savoir car trop très souvent ce genre de logiciel spécifique coûte très cher.
Personnalisable:
Le CVK est conçu pour répondre à vos gestes, vos habitudes, vos [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="text-align: center;"><a href="http://blog.cvk.fr/wp-content/uploads/2008/12/clavier.jpg"><img class="aligncenter" src="http://blog.cvk.fr/wp-content/uploads/2008/12/clavier.jpg" alt="exemple de clavier" width="468" height="79" /></a></p>
<p>Aujourd&#8217;hui, nous allons vous lister quelques raisons vous expliquant pourquoi le CVK est un outil qui va vous être utile.</p></div>
<div>
<ol>
<li style="text-align: justify;"><strong>Gratuit:</strong><br />
Le CVK est un logiciel gratuit. C&#8217;est tout simple mais important à savoir car <span style="text-decoration: line-through;">trop</span> très souvent ce genre de logiciel spécifique coûte très cher.</li>
<li style="text-align: justify;"><strong>Personnalisable:<br />
</strong>Le CVK est conçu pour répondre à vos gestes, vos habitudes, vos BESOINS. Il est totalement personnalisable, si une touche du clavier ne vous convient pas, vous pouvez la modifier, déplacer, supprimer. C&#8217;est le CVK qui s&#8217;adapte à vous et non vous qui changez pour le CVK.</li>
<li style="text-align: justify;"><strong>&#8220;Pluginisable&#8221;:</strong><br />
Le CVK possède une architecture qui permet d&#8217;additionner des fonctionnalités à celles de base. Ainsi, une communauté entière de développeurs peut travailler sur la création de nouvelles fonctionnalitées.</li>
<p style="text-align: center;"><a href="http://blog.cvk.fr/wp-content/uploads/2008/12/defilementAuto.jpg"><img class="aligncenter" style="margin-top: 10px; margin-bottom: 10px;" src="http://blog.cvk.fr/wp-content/uploads/2008/12/defilementAuto.jpg" alt="" width="439" height="78" /></a></p>
<li style="text-align: justify;"><strong>Sans efforts:</strong><br />
Avec l&#8217;aide de différentes fonctions telles que le défilement automatique, le centrage automatique de la souris ou le clic automatique, vous pourrez utiliser votre ordinateur sans vous fatiguer.</li>
<li style="text-align: justify;"><strong>Rapide:</strong><br />
Grâce à la prédiction de mots, il vous suffit d&#8217;écrire les premières lettres du mot de votre choix et le logiciel pourra écrire la suite pour vous.</li>
<li style="text-align: justify;"><strong>Facile à utiliser:</strong><br />
Le CVK a beau être un clavier virtuel, il reste un clavier avec un système simple: Une touche = une lettre.</p>
<p><a href="http://blog.cvk.fr/wp-content/uploads/2008/12/gestionnairePlugin.jpg"><img style="margin-top: 10px; margin-bottom: 10px;" src="http://blog.cvk.fr/wp-content/uploads/2008/12/gestionnairePlugin.jpg" alt="" width="348" height="159" /></a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=38</wfw:commentRss>
		</item>
		<item>
		<title>Présentation du Défilement Automatique</title>
		<link>http://blog.cvk.fr/?p=37</link>
		<comments>http://blog.cvk.fr/?p=37#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:37:39 +0000</pubDate>
		<dc:creator>Nicolas Laporte</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[Automatique]]></category>

		<category><![CDATA[Défilement]]></category>

		<category><![CDATA[v2]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=37</guid>
		<description><![CDATA[Cet article vous présente un des plugins du CVK version 2, qui a pour but d&#8217;aider les handicapés à mobilitée réduite.
Il s&#8217;agit du plugin de défilement automatique, qui permet à un utilisateur d’utiliser le CVK sans avoir de dispositif de pointage (juste un &#8220;contacteur&#8221;).

Lorsque se lance le plugin de défilement automatique, des zones de touches [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Cet article vous présente un des plugins du CVK version 2, qui a pour but d&#8217;aider les handicapés à mobilitée réduite.</p>
<p class="MsoNormal">Il s&#8217;agit du plugin de défilement automatique, qui permet à un utilisateur d’utiliser le CVK sans avoir de dispositif de pointage (juste un &#8220;contacteur&#8221;).</p>
<p style="text-align: center;"><object width="480" height="381"><param name="movie" value="http://www.dailymotion.com/swf/x7jhtq"></param><param name="allowfullscreen" value="true"></param><embed src="http://www.dailymotion.com/swf/x7jhtq" type="application/x-shockwave-flash" width="480" height="381" allowfullscreen="true"></embed></object></p>
<p style="text-align: left;">Lorsque se lance le plugin de défilement automatique, des zones de touches défilent en surbrillance. Après un premier clic, les touches se situant dans la zone en surbrillance se mettent à défiler à leur tour. Au second clic, un clic s’effectue sur la touche qui était en surbrillance et les zones se remettent à défiler.</p>
<p style="text-align: left;">Je vais maintenant vous présenter les options de ce plugin.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://blog.cvk.fr/wp-content/uploads/2008/11/Option1.jpg" alt="Option Défilement" /></p>
<p><strong>Vitesse de Défilement :</strong> Il s&#8217;agit de la vitesse de défilement (en millisecondes) des zones et des touches qui sont séléctionnées (en surbrillance). Lors de l&#8217;enregistrement de la vidéo, cette option était réglée sur 750ms, comme indiqué sur l&#8217;image au dessus.</p>
<p style="text-align: left;"><strong>Nombre de passage dans une zone :</strong> Permet de choisir le nombre de fois que défilent les touches dans une zone avant de sortir de celle-ci.</p>
<p style="text-align: left;"><strong>Durée sur la première touche :</strong> Permet de choisir la durée (en millisecondes) durant laquelle la première touche de chaque zone reste en surbrillance.</p>
<p style="text-align: left;"><strong>Durée d&#8217;un clic long :</strong> Permet de définir après combien de secondes un clic est considéré comme un clic long. Le clic long permet d&#8217;annuler l&#8217;action en cours. Si par exemple, vous vous trompez de zone et vous ne voulez pas attendre la fin de la ligne pour recommencer le défilement, c&#8217;est alors que vous effectuez un clic long.</p>
<p style="text-align: left;"><strong>Déclenchement du clic :</strong> Permet de définir si un clic s’exécute au moment de l’appuie sur le bouton ou au moment du relâchement du bouton.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://blog.cvk.fr/wp-content/uploads/2008/11/Option2.jpg" alt="Option Défilement" /></p>
<p style="text-align: left;"><strong>Touche clavier qui simule un clic :</strong> Permet de choisir la touche du clavier qui simulera un simple clic gauche de la souris. Ainsi, vous pouvez choisir n&#8217;importe quel &#8220;capteur&#8221; pour déclancher un clic. Celà signifie qu&#8217;au lieu de cliquer sur la souris, vous pouvez aussi bien appuyer sur n&#8217;importe quel touche du clavier.</p>
<p style="text-align: left;">La sortie de la version 2 approchant, les articles de présentation des plugins seront de plus en plus fréquents. Restez connectés.</p>
<p style="text-align: left;">L&#8217;équipe CVK.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=37</wfw:commentRss>
		</item>
		<item>
		<title>Custom Virtual Keyboard version 2, c’est reparti !</title>
		<link>http://blog.cvk.fr/?p=34</link>
		<comments>http://blog.cvk.fr/?p=34#comments</comments>
		<pubDate>Fri, 07 Nov 2008 17:27:52 +0000</pubDate>
		<dc:creator>Matthieu Madillo</dc:creator>
		
		<category><![CDATA[CVK au jour le jour]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=34</guid>
		<description><![CDATA[Après une rentrée réussie, deux nouvelles équipes d’étudiants In’Tech INFO, une pour les développements techniques et une pour la communication, ont décidé de finaliser le Custom Virtual Keyboard (CVK) version 2.
Ce semestre, l’équipe technique aura pour mission de produire une version stable du logiciel répondant aux demandes de tous nos partenaires (travail déjà bien entamé [...]]]></description>
			<content:encoded><![CDATA[<p>Après une rentrée réussie, <a href="http://blog.cvk.fr/?page_id=3"><strong>deux nouvelles équipes</strong></a> d’étudiants In’Tech INFO, une pour les développements techniques et une pour la communication, ont décidé de finaliser le <strong>Custom Virtual Keyboard (CVK) version 2</strong>.</p>
<p>Ce semestre, l’équipe technique aura pour mission de produire une version stable du logiciel répondant aux demandes de tous nos partenaires (travail déjà bien entamé le semestre précédent). Ces développements concerneront des options destinées aux handicapés avec notamment des fonctionnalités permettant de saisir du texte simplement en cliquant ou en bougeant le curseur, ou encore un moteur de prédiction nouvelle génération proposant une liste de mots en fonction des caractères et des mots précédemment tapés. Nous vous proposerons également des options d’édition permettant la personnalisation des claviers de façon très avancée aussi bien visuellement que fonctionnellement. Bien entendu, nous vous présenterons ces fonctionnalités (et bien d’autres) plus en détails dans de prochains billets.</p>
<p>Concernant la communication, l’objectif est de préparer une sortie prochaine du<strong> CVK</strong>. Un nouveau site internet doit faire son apparition courant décembre et ce sera l’occasion pour nous de diffuser une première version de test du <strong>CVK</strong>. Nous allons également choisir la licence logiciel la mieux adaptée au <strong>CVK</strong> et à son <a href="http://blog.cvk.fr/?p=24">architecture par plugin</a>. Enfin, un évènement qui marquera la sortie officielle du <strong>CVK version 2</strong> devrait avoir lieu courant 2009.</p>
<p>En attendant, voici une skin destiné aux enfants. La personnalisation du clavier n&#8217;a plus de limite!</p>
<p><img class="alignnone" src="http://www.itinet.fr/BlogCVK/wp-content/uploads/2008/11/skin_enfant.jpg" alt="Skin enfant" width="471" height="104" /></p>
<p>Restez connectés !</p>
<p>L&#8217;equipe CVK</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=34</wfw:commentRss>
		</item>
		<item>
		<title>C&#8217;est pour bientot&#8230;</title>
		<link>http://blog.cvk.fr/?p=31</link>
		<comments>http://blog.cvk.fr/?p=31#comments</comments>
		<pubDate>Tue, 01 Jul 2008 14:44:22 +0000</pubDate>
		<dc:creator>Isaac Duplan</dc:creator>
		
		<category><![CDATA[CVK au jour le jour]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=31</guid>
		<description><![CDATA[

Quelle évolution du CVK depuis l&#8217;époque du premier prototype. Autant en termes de graphisme que de souplesse de l&#8217;architecture.
Voici les premières images de la beta qui sera bientot disponible.
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Video CVK" href="http://demo.cvk.fr/cvk.htm" target="_blank"><img class="aligncenter" src="http://demo.cvk.fr/VideoScreen.jpg" alt="Video CVK" /></a></p>
<p style="text-align: left;">
<p style="text-align: left;">Quelle évolution du <strong>CVK </strong>depuis l&#8217;époque du premier prototype. Autant en termes de <strong>graphisme </strong>que de souplesse de l&#8217;<strong>architecture</strong>.</p>
<p style="text-align: left;">Voici les <strong>premières images </strong>de la beta qui sera bientot disponible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=31</wfw:commentRss>
		</item>
		<item>
		<title>CVK.fr va faire peau neuve</title>
		<link>http://blog.cvk.fr/?p=29</link>
		<comments>http://blog.cvk.fr/?p=29#comments</comments>
		<pubDate>Fri, 13 Jun 2008 10:36:20 +0000</pubDate>
		<dc:creator>Gabriel Hannaby</dc:creator>
		
		<category><![CDATA[CVK au jour le jour]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=29</guid>
		<description><![CDATA[Nous cherchons à donner au projet CVK une meilleur visibilité et une meilleure accessibilité au public.
Parmis les actions en cours nous comptons relooker le site web du CVK: CVK.fr afin de le rendre plus dynamique, plus complet et plus pratique d&#8217;utilisation.
Dans ce but nous avons étudié quelques points:

Quels outils seront les plus utiles pour la [...]]]></description>
			<content:encoded><![CDATA[<p>Nous cherchons à donner au projet CVK une meilleur visibilité et une meilleure accessibilité au public.</p>
<p>Parmis les actions en cours nous comptons relooker le site web du CVK: CVK.fr afin de le rendre plus dynamique, plus complet et plus pratique d&#8217;utilisation.</p>
<p>Dans ce but nous avons étudié quelques points:</p>
<ul>
<li>Quels outils seront les plus utiles pour la communication entre les membres de la communauté?</li>
<li>Quelle est l&#8217;architecture la plus pratique pour le site du CVK?</li>
<li>Quelles formes auront nos pages web?</li>
</ul>
<p>Pour répondre à ces différentes interrogations, le meilleur moyen reste de visiter les différentes communautés open source existantes.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=29</wfw:commentRss>
		</item>
		<item>
		<title>Le CVK entre déja au musée !</title>
		<link>http://blog.cvk.fr/?p=27</link>
		<comments>http://blog.cvk.fr/?p=27#comments</comments>
		<pubDate>Fri, 13 Jun 2008 10:35:36 +0000</pubDate>
		<dc:creator>Cédric Legendre</dc:creator>
		
		<category><![CDATA[CVK au jour le jour]]></category>

		<guid isPermaLink="false">http://blog.cvk.fr/?p=27</guid>
		<description><![CDATA[C&#8217;est en effet le cas, le CVK sera présenté en avant première mondiale au musée de l&#8217;informatique à l&#8217;Arche de la Défense !
Le musée de l&#8217;informatique a ouvert ses portes le 4 avril 2008 pour une exposition permanente au sommet de l&#8217;Arche et le 5 et 6 Juillet 2008, une exposition menée par des élèves [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est en effet le cas, le <strong>CVK </strong>sera présenté en avant première mondiale au musée de l&#8217;informatique à l&#8217;Arche de la Défense !</p>
<p>Le musée de l&#8217;informatique a ouvert ses portes le 4 avril 2008 pour une exposition permanente au sommet de l&#8217;Arche et le 5 et 6 Juillet 2008, une exposition menée par des élèves de l&#8217;école <strong>In&#8217;Tech INFO</strong> retraçant l&#8217;histoire de l&#8217;informatique ouvre ses portes (lien : <a href="http://www.informarchive.com">InformArchive </a>). Le <strong>CVK </strong>y tiendra une place de choix dans la partie réservée à l&#8217;accessibilité.</p>
<p>Au menu, démonstration du produit avec la possibilité de le tester vous-même, distribution de flyers et CD-ROM <strong>CVK</strong>, et une fresque retraçant l&#8217;histoire du <strong>CVK</strong>.</p>
<p>Tout le monde est donc le bienvenu à cette exposition, et ce sera l&#8217;occasion de faire parler du <strong>CVK </strong>!</p>
<p>PS : le musée est gratuit, mais l&#8217;accès au toit de l&#8217;Arche de la Défense est payant :</p>
<ul>
<li><strong>Adultes :</strong> 9€</li>
<li><strong>Etudiants et enfants de moins de 17 ans :</strong> 7,50€</li>
<li><strong>Enfants de moins de 6 ans :</strong> Gratuit</li>
<li><strong>Handicapés :</strong> Gratuit</li>
<li><strong>Pass Famille :</strong>
<ul>
<li>2 adultes + 1 enfant : 22 €</li>
<li>2 adultes + 2 enfants : 25 €</li>
<li>2 adultes + 3 enfants : 29 €</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>Comment éviter qu&#8217;une fenêtre devienne active&#8230;</title>
		<link>http://blog.cvk.fr/?p=26</link>
		<comments>http://blog.cvk.fr/?p=26#comments</comments>
		<pubDate>Tue, 10 Jun 2008 07:54:10 +0000</pubDate>
		<dc:creator>Cédric Legendre</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.itinet.fr/BlogCVK/?p=26</guid>
		<description><![CDATA[L&#8217;objectif d&#8217;un clavier virtuel est d&#8217;offrir à l&#8217;utilisateur, un confort d&#8217;utilisation qui ne lui fera pas regretter son clavier physique favori.
La principale différence est que le clavier physique est détaché de l&#8217;écran tandis qu&#8217;un clavier virtuel est quant à lui, prisonnier de cette jungle de pixels.
L&#8217;enjeu est donc de réduire ce désavantage au minimum.
Et la [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;objectif d&#8217;un clavier virtuel est d&#8217;offrir à l&#8217;utilisateur, un confort d&#8217;utilisation qui ne lui fera pas regretter son clavier physique favori.</p>
<p>La principale différence est que le clavier physique est détaché de l&#8217;écran tandis qu&#8217;un clavier virtuel est quant à lui, prisonnier de cette jungle de pixels.</p>
<p>L&#8217;enjeu est donc de réduire ce désavantage au minimum.<br />
Et la première difficulté que nous avons rencontré fut de rendre le CVK totalement &#8220;transparent&#8221; aux yeux du système d&#8217;exploitation. Concrètement, lorsque l&#8217;on clique sur une fenetre, celle-ci reprends le focus, devenant active. Cependant, pour un clavier virtuel, le but étant de saisir des informations dans une autre fenetre, ce mécanisme rendrait la chose impossible.<span id="more-26"></span></p>
<p>Il existe un moyen de résoudre ce problème : controler soi-meme les évenements de la souris lorsqu&#8217;ils sont sur le clavier, et les traiter nous meme, comme si le système ne savait pas que l&#8217;on avait cliqué.</p>
<p>Or ceci à ses limites : lorsqu&#8217;une fenetre ou un autre composant du système se trouve au dessus du clavier, (typiquement un menu, comme menu démarrer pour windows, ou des menus de barres des taches) le clic est lui aussi ignoré&#8230;</p>
<p>Solution !</p>
<p>Rendre le CVK non activable : pour ceci : on surcharge notre méthode CreateParams de la classe Windows.Form</p>
<p><span style="color: #008000;">///Message système qui définit, à la création, si la form devient active sur un click</span></p>
<p><span style="color: #003366;">private const int </span>WS_EX_NOACTIVATE = 0&#215;8000000;</p>
<p><span style="color: #008000;">///Message système qui définit, à la création, si la form peut avoir une barre de titre</span></p>
<p><span style="color: #003366;">private </span><span style="color: #003366;">const int </span>WS_CAPTION = 0xc00000;</p>
<p><span style="color: #008000;">/// &lt;summary&gt;<br />
/// Override virtual method to have a form with Resizable borders but no<br />
/// TitleBar and to made the form inactive when clicks are performed over its<br />
/// &lt;/summary&gt;</span><br />
<span style="color: #000080;">protected override </span><span style="color: #0000ff;">CreateParams </span>CreateParams<br />
{<br />
<span style="color: #003366;">get</span><br />
{<br />
<span style="color: #0000ff;">CreateParams </span>cp = <span style="color: #003366;">base</span>.CreateParams;<br />
<span style="color: #003366;">long </span>Style = cp.Style;<br />
cp.Style ^= WS_CAPTION;<br />
cp.ExStyle |= WS_EX_NOACTIVATE;<br />
<span style="color: #003366;">return </span>cp;<br />
}<br />
}<br />
Les paramètres de créations sont, soit soustraits ( ^= ) soit ajoutés ( |= ) sur les styles étendus ( ExStyle ) ou de bases ( Style ).</p>
<p>Il faut aussi penser à redéfinir la méthode WndProc de la classe Form et capter le message WM_MOVING.</p>
<p>En effet, lors d&#8217;un déplacement ou d&#8217;un redimensionnement, si la fenêtre n&#8217;est pas activable (comme démontré ci-dessus), nous ne verrons pas en temps réel son déplacement, mais uniquement lors du relâché du bouton.</p>
<p><span style="color: #003366;">private const int </span>WM_MOVING = 534;</p>
<p><span style="color: #008000;">/// &lt;summary&gt;<br />
/// Helper structure used to retrieve and follow the location of the form on a moving or resizing operation<br />
/// &lt;/summary&gt;</span><br />
<span style="color: #003366;">private struct </span><span style="color: #008080;">RECT</span><br />
{<br />
<span style="color: #003366;">public int </span>Left;<br />
<span style="color: #003366;">public int </span>Top;<br />
<span style="color: #003366;">public int </span>Right;<br />
<span style="color: #003366;">public int </span>Bottom;<br />
}</p>
<p><span style="color: #008000;">/// &lt;summary&gt;<br />
/// Windows.Form Methode witch processes Windows messages.<br />
/// &lt;/summary&gt;</span><br />
<span style="color: #003366;">protected override void </span>WndProc( <span style="color: #003366;">ref </span><span style="color: #008080;">Message </span>m )<br />
{</p>
<p><span style="color: #008000;">// Listen for operating system messages.</span><br />
<span style="color: #003366;">switch </span>(m.Msg)<br />
{</p>
<p><span style="color: #003366;">case </span>WM_MOVING:<br />
<span style="color: #008080;">RECT </span>r;<br />
r = (<span style="color: #008080;">RECT</span>)<span style="color: #008080;">Marshal</span>.PtrToStructure(m.LParam, <span style="color: #003366;">typeof</span>(RECT));<br />
<span style="color: #003366;">this</span>.Location = <span style="color: #003366;">new </span><span style="color: #008080;">Point</span>(r.Left, r.Top);<br />
<span style="color: #003366;">break</span>;<br />
}<br />
<span style="color: #003366;">base</span>.WndProc(ref m);</p>
<p>}</p>
<p>Il en va de même pour le redimensionnement de la Form : capter le message WM_SIZING, afin d&#8217;avoir un redimensionnement en temps réel.</p>
<p>Toujours dans notre méthode WndProc :</p>
<p><span style="color: #003366;">private const int </span>WM_SIZING = 0&#215;0214;</p>
<p><span style="color: #008000;">//Resizing the form thanks to the border althought it is inactivated. Shows live the resizing.</span><br />
<span style="color: #003366;">case </span>WM_SIZING:<br />
r = ( <span style="color: #33cccc;">RECT </span>) <span style="color: #33cccc;">Marshal</span>.PtrToStructure( m.LParam, <span style="color: #003366;">typeof</span>( RECT ) );</p>
<p><span style="color: #003366;">this</span>.Size = new Size( r.Right - r.Left, r.Bottom - r.Top );</p>
<p><span style="color: #008000;">//If the left or top anchors or the top right are selected</span><br />
<span style="color: #003366;">if </span>(<br />
m.WParam == ( <span style="color: #33cccc;">IntPtr </span>) WMSZ_LEFT ||<br />
m.WParam == ( <span style="color: #33cccc;">IntPtr </span>) WMSZ_TOP ||<br />
m.WParam == ( <span style="color: #33cccc;">IntPtr </span>) WMSZ_TOPLEFT ||<br />
m.WParam == ( <span style="color: #33cccc;">IntPtr </span>) WMSZ_BOTTOMLEFT ||<br />
m.WParam == ( <span style="color: #33cccc;">IntPtr </span>) WMSZ_TOPRIGHT)<br />
{ <span style="color: #008000;">//We also change the top left location of the form</span><br />
<span style="color: #003366;">this</span>.Location = <span style="color: #003366;">new </span>Point( r.Left, r.Top );<br />
}<br />
<span style="color: #33cccc;">Marshal</span>.StructureToPtr( r, m.LParam, <span style="color: #003366;">true </span>);<br />
<span style="color: #003366;">break</span>;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=26</wfw:commentRss>
		</item>
		<item>
		<title>Fonctionnement Global &#124; BehindCVK 1/5</title>
		<link>http://blog.cvk.fr/?p=24</link>
		<comments>http://blog.cvk.fr/?p=24#comments</comments>
		<pubDate>Wed, 28 May 2008 22:52:08 +0000</pubDate>
		<dc:creator>Isaac Duplan</dc:creator>
		
		<category><![CDATA[Au coeur de CVK]]></category>

		<guid isPermaLink="false">http://www.itinet.fr/BlogCVK/?p=24</guid>
		<description><![CDATA[

Voici le premier article d’une petite série qui consiste à vous présenter le fonctionnement sous-jacent du CVK (et pourquoi il est promis à un grand avenir).
 
Au premier coup d’œil à part plusieurs graphismes attrayants les concurrents du CVK n’ont rien à lui envier, mais regardant de plus près… le terme « Custom » prend tout [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;"><a href="http://www.itinet.fr/BlogCVK/wp-content/uploads/2008/05/structcvk.png"></a></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
<p class="MsoNormal" style="text-align: left;"><span style="font-size: small; font-family: Times New Roman;">Voici le premier article d’une <strong>petite série</strong> qui consiste à vous présenter le <strong>fonctionnement sous-jacent</strong> du CVK (et pourquoi il est promis à un grand avenir).</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Au premier coup d’œil à part plusieurs graphismes attrayants les concurrents du CVK n’ont rien à lui envier, mais regardant de plus près… le terme « <strong>Custom</strong> » prend tout son sens.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">En creusant un peu, on observe plusieurs grandes parties dans notre architecture :</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<ul>
<li>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-family: Times New Roman;"><span style="font-size: small;"><strong>Un noyau</strong> (que nous appelleront <strong>Kernel</strong>) qui contient l’intelligence utile pour générer le comportement des claviers en termes de logique.</span></span></div>
</li>
<li>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-family: Times New Roman;"><span style="font-size: small;"><strong>Un système de gestion de plugins</strong> (extensions) permettant de faire évoluer le clavier très simplement sans remettre en cause ce qui à déjà été fait.</span></span></div>
</li>
</ul>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Cela constitue la <strong>base « solide »</strong> du CVK..<span id="more-24"></span>, seule elle ne sert à rien puisque se sont les plugins qui vont l’exploiter et la faire vivre. Nous reviendrons plus en détails sur ces deux composantes de l’application dans les prochains épisodes.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Ensuite on trouve deux parties beaucoup <strong>plus souples</strong> de l’architecture : </span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<ul>
<li>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-family: Times New Roman;"><span style="font-size: small;"><strong>Un hôte</strong>, qui se charge de créer un espace de vie pour le CVK, et qui « démarre » la machine. C’est lui qui va s’occuper d’initialiser le Kernel et de gérer la configuration.</span></span></div>
</li>
<li>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-family: Times New Roman;"><span style="font-size: small;">Et enfin, <strong>l’ensemble des plugins</strong> qui vont donner vie à notre clavier et ajouter toutes les fonctionnalités utiles.</span></span></div>
</li>
</ul>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Les premières présentations sont faites, voici une vision simple du système mis en œuvre :</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><span style="font-size: small; font-family: Times New Roman;"><img class="size-medium wp-image-25 aligncenter" title="Structure CVK" src="http://www.itinet.fr/BlogCVK/wp-content/uploads/2008/05/structcvk-279x300.png" alt="" width="279" height="300" /></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="font-size: small; font-family: Times New Roman;">Ce qu’il faut bien comprendre c’est que le Kernel n’est que la <strong>représentation logique</strong> d’un clavier : c&#8217;est-à-dire des ensembles de touches organisées réalisant des actions. Il charge les claviers à partir d’un fichier XML et met ensuite cette structure à disponibilité des plugins. Ce sont eux qui vont s’occuper de l’affichage et de l’interaction avec l’utilisateur. Ainsi il devient très simple <strong>d’injecter de nouvelles fonctionnalités</strong> et/ou de créer des environnements différents selon le contexte d’utilisation.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="font-size: small; font-family: Times New Roman;">C’est grâce à cette architecture modulaire très souple qu’il est possible de répondre à <span style="text-decoration: line-through;">presque</span> tous les besoins imaginables liés à un clavier virtuel.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Episode 2 : Zoom sur le Kernel.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Episode 3 : La gestion des plugins.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Episode 4 : Les editeurs.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">Episode 5 : La configuration des plugins.</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman;">A bientôt !</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=24</wfw:commentRss>
		</item>
		<item>
		<title>Accès aux ressources</title>
		<link>http://blog.cvk.fr/?p=19</link>
		<comments>http://blog.cvk.fr/?p=19#comments</comments>
		<pubDate>Mon, 26 May 2008 14:49:50 +0000</pubDate>
		<dc:creator>Cédric Legendre</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.itinet.fr/BlogCVK/?p=19</guid>
		<description><![CDATA[Un petit point technique concernant l&#8217;accès à la ressource d&#8217;un même élément par plusieurs Threads tout en évitant le Cross-Thread Access.
Exemple concrêt : l&#8217;image qui représente la Touche est la même pour les 105 touches du clavier. Le plugin de défilement automatique (qui est un autre Thread) change cette image pour la faire apparaitre comme [...]]]></description>
			<content:encoded><![CDATA[<p>Un petit point technique concernant l&#8217;accès à la ressource d&#8217;un même élément par plusieurs Threads tout en évitant le <em>Cross-Thread Access.</em></p>
<p>Exemple concrêt : l&#8217;image qui représente la Touche est la même pour les 105 touches du clavier. Le plugin de défilement automatique (qui est un autre Thread) change cette image pour la faire apparaitre comme illuminée, et ce, pour une sélection de N Touches. Lors de cette opération, il est très probable qu&#8217;une exception de type : <em>InvalidOperatioException</em> soit jetée. Ceci est du au fait que le Thread qui essaye d&#8217;accéder à l&#8217;image n&#8217;est pas le même que le thread qui a créé le contrôle.</p>
<p>Voici la méthode utilisée pour régler ce problème :</p>
<p><span style="color: #008000;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">///Sets the Image by a thread-safe manner.</span></span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void </span>SetImageOut()</span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">{</span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #0000ff;">if </span>( InvokeRequired )<span style="color: #008000;"> //Vérifie si l&#8217;appelant est un thread différent de celui qui a créé le contrôle</span></span></span></p>
<blockquote><p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #008000;">//Dans ce cas, on ré-appelle notre méthode SetImageOut () par le Thread à qui notre contrôle appartient</span></span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #0000ff;">this</span>.Invoke(<span style="color: #0000ff;">new</span> <span style="color: #2b91af;">MethodInvoker</span>(<span style="color: #0000ff;">delegate</span>() { SetImageOut(); }));</span></span></p></blockquote>
<p><span style="color: #0000ff;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">else <span style="color: #000000;">{</span></span></span></span><span style="color: #0000ff;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><br />
</span></span></span><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #008000;">//Si tout est bon, on peut appliquer notre Image au contrôle</span></span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">this</span>.Image == <span style="color: #0000ff;">null</span>)</span></span><br />
<span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="color: #0000ff;">this</span>.Image = _keyNormalImage;</span></span></p>
<blockquote>
<div><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">}</span></span></span></span></div>
<p><span style="font-family: Arial,sans-serif;"></span></p></blockquote>
<div><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"></p>
<div><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;">}</span></span></span></span></div>
<div>D&#8217;autres exemples sont disponibles sur :</div>
<p><a href="http://grouplab.cpsc.ucalgary.ca/cookbook/index.php/VisualStudio/HowToHandleCross-threadAccessToGUIElements">cette page </a>et <a href="http://msdn.microsoft.com/en-us/library/ms171728(VS.85).aspx">sur le MSDN </a></p>
<p></span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.cvk.fr/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
	</channel>
</rss>
