<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Juste le zeste...</title>
	<atom:link href="http://www.justelezeste.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.justelezeste.com</link>
	<description>Sans les pépins !</description>
	<lastBuildDate>Thu, 10 May 2012 10:20:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Création d&#8217;un effet &#171;&#160;Toile de Nîmes&#160;&#187; en Css</title>
		<link>http://www.justelezeste.com/2012/05/css-toile-de-nimes/</link>
		<comments>http://www.justelezeste.com/2012/05/css-toile-de-nimes/#comments</comments>
		<pubDate>Thu, 10 May 2012 10:17:18 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=965</guid>
		<description><![CDATA[Un bloc dessiné dans du Jean&#8217;s. p { font-family:Georgia; font-weight:bold; text-transform:uppercase; padding: 5px 10px; margin: 10px; background: linear-gradient(top, #2F2727, #1a82f7); color: #fff; font-size: 21px; line-height: 1.3em; border: 1px dashed #fff; border-radius: 3px; box-shadow: 0 0 0 4px #2F2727, 2px 1px 6px 4px rgba(10,10,0,.5); text-shadow: -1px -1px #2F2727; } Voir la démo.]]></description>
			<content:encoded><![CDATA[<p>Un bloc dessiné dans du Jean&#8217;s.<br />
<span id="more-965"></span></p>
<pre class="brush: css; gutter: true">p {
	font-family:Georgia;
	font-weight:bold;
	text-transform:uppercase;
	padding: 5px 10px;
	margin: 10px;
	background: linear-gradient(top, #2F2727, #1a82f7);
	color: #fff;
	font-size: 21px;
	line-height: 1.3em;
	border: 1px dashed #fff;
	border-radius: 3px;
	box-shadow: 0 0 0 4px #2F2727, 2px 1px 6px 4px rgba(10,10,0,.5);
	text-shadow: -1px -1px #2F2727;
	}</pre>
<p>
<a title="Css effet jeans" href="http://result.dabblet.com/gist/2628396/85451620c42abb0ae87e626a7ddba27b0cc0fcff" target="_blank">Voir la démo.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2012/05/css-toile-de-nimes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;ellipse en Css ou &#171;&#160;comment tronquer proprement une chaîne&#160;&#187;</title>
		<link>http://www.justelezeste.com/2012/05/lellipse-en-css/</link>
		<comments>http://www.justelezeste.com/2012/05/lellipse-en-css/#comments</comments>
		<pubDate>Fri, 04 May 2012 16:35:50 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=606</guid>
		<description><![CDATA[Sur une seule ligne (pour l&#8217;instant)&#8230; .ellipsis { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; }]]></description>
			<content:encoded><![CDATA[<p>Sur une seule ligne (pour l&#8217;instant)&#8230;<span id="more-606"></span></p>
<pre class="brush: css; gutter: true">.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
    -ms-text-overflow: ellipsis;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2012/05/lellipse-en-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Détecter le zoom dans Webkit mobile (et desktop)</title>
		<link>http://www.justelezeste.com/2012/05/detecter-le-zoom-dans-webkit-mobile-et-desktop/</link>
		<comments>http://www.justelezeste.com/2012/05/detecter-le-zoom-dans-webkit-mobile-et-desktop/#comments</comments>
		<pubDate>Fri, 04 May 2012 16:28:59 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=602</guid>
		<description><![CDATA[Lorsque l&#8217;on zoome, window.innerWidth est ajusté, mais document.documentElement.clientWidth ne l&#8217;est pas. Donc: var zoom = document.documentElement.clientWidth / window.innerWidth; Furthermore, you should be able to use the onresize event handler (or jQuery&#8217;s .resize()) to check for this: var zoom = document.documentElement.clientWidth / window.innerWidth; $(window).resize(function() { var zoomNew = document.documentElement.clientWidth / window.innerWidth; if (zoom != zoomNew) { [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on zoome, <em>window.innerWidth</em> est ajusté, mais <em>document.documentElement.clientWidth</em> ne l&#8217;est pas.<span id="more-602"></span></p>
<p>Donc:</p>
<pre class="brush: javascript; gutter: true">var zoom = document.documentElement.clientWidth / window.innerWidth;</pre>
<p>Furthermore, you should be able to use the onresize event handler (or jQuery&#8217;s .resize()) to check for this:</p>
<pre class="brush: javascript; gutter: true">var zoom = document.documentElement.clientWidth / window.innerWidth;
$(window).resize(function() {
    var zoomNew = document.documentElement.clientWidth / window.innerWidth;
    if (zoom != zoomNew) {
        // zoom has changed
        // adjust your fixed element
        zoom = zoomNew
    }
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2012/05/detecter-le-zoom-dans-webkit-mobile-et-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experience Utilisateur sur Ipad</title>
		<link>http://www.justelezeste.com/2010/08/experience-utilisateur-sur-ipad/</link>
		<comments>http://www.justelezeste.com/2010/08/experience-utilisateur-sur-ipad/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 14:09:03 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=361</guid>
		<description><![CDATA[Apple&#8217;s Human Interface Guidelines for the iPad outline how to create user interfaces optimized for the iPad device. According to Apple, the best iPad applications: downplay application UI so that the focus is on content; present content in beautiful, often realistic ways; and take full advantage of device capabilities to enable enhanced interaction. The overview [...]]]></description>
			<content:encoded><![CDATA[<p>Apple&#8217;s <a href="http://uxm.ag/53" target="_blank">Human Interface  Guidelines for the iPad</a> outline how to create user interfaces  optimized for the <a href="http://uxmag.com/archive/ipad" target="_blank">iPad</a> device.  According to <a href="http://uxmag.com/archive/apple" target="_blank">Apple</a>, the  best iPad applications: downplay application UI so that the focus is on  content; present content in beautiful, often realistic ways; and take  full advantage of device capabilities to enable enhanced interaction.</p>
<p><em><strong><span id="more-361"></span>The overview of iPad user experience guidelines listed  below is © 2010 Apple Inc. More details on these guidelines and further  information on developing for the iPad can be found in </strong><a href="http://uxm.ag/53" target="_blank"><strong>Apple&#8217;s Human Interface  Guidelines for the iPad</strong></a><strong>.</strong></em></p>
<h4>Support All Orientations</h4>
<p>Your application should encourage people to interact with iPad from  any side by providing a great experience in all orientations. The reason  is that people don’t view the device as having a default orientation,  because they don’t pay much attention to the minimal device frame and  they’re unconcerned with the location of the Home button.</p>
<h4>Enhance Interactivity (Don’t Just Add Features)</h4>
<p>The best iPad applications give people innovative ways to interact  with content while they perform a clearly defined, finite task. Resist  the temptation to fill the large screen with features that are not  directly related to the main task. In particular, you should not view  the large iPad screen as an invitation to bring back all the  functionality you pruned from your iPhone application.</p>
<h4>Flatten Your Information Hierarchy</h4>
<p>Although you don’t want to pack too much information into one screen,  you also want to prevent people from feeling that they must visit many  different screens to find what they want. In general, focus the main  screen on the primary content and provide additional information or  tools in an auxiliary view, such as a popover.</p>
<h4>Reduce Full-Screen Transitions</h4>
<p>Instead of swapping in a whole new screen when some embedded  information changes, update only the areas of the user interface that  need it. When you perform fewer full-screen transitions, your  application has greater visual stability, which helps people keep track  of where they are in their task.</p>
<h4>Enable Collaboration and Connectedness</h4>
<p>Think of ways people might want to use your application with others.  Expand your thinking to include both the physical sharing of a single  device and the virtual sharing of data.</p>
<h4>Add Physicality and Heightened Realism</h4>
<p>Whenever possible, add a realistic, physical dimension to your  application. The more true to life your application looks and behaves,  the easier it is for people to understand how it works and the more they  enjoy using it.</p>
<h4>Delight People with Stunning Graphics</h4>
<p>The high-resolution iPad screen supports rich, beautiful, engaging  graphics that draw people into an application and make the simplest task  rewarding.</p>
<h4>De-emphasize User Interface Controls</h4>
<p>Help people focus on the content by designing your application UI as a  subtle frame for the information they’re interested in. Downplay  application controls by minimizing their number and prominence. Consider  creating custom controls that subtly integrate with your application’s  graphical style. In this way, controls are discoverable, but not too  conspicuous.</p>
<h4>Minimize Modality</h4>
<p>iPad applications should allow people to interact with them in  nonlinear ways. Modality prevents this freedom by interrupting people’s  workflow and forcing them to choose a particular path.</p>
<h4>Rethink Your Lists</h4>
<p>Consider a more real-world vision of your application. For example,  on iPhone, Contacts is a streamlined list, but on iPad, Contacts is an  address book with a beautifully tangible look and feel.</p>
<h4>Consider Multifinger Gestures</h4>
<p>The large iPad screen provides great scope for multifinger gestures,  including gestures made by more than one person.</p>
<h4>Consider Popovers for Some Modal Tasks</h4>
<p>If you use modal views to enable self-contained tasks in your iPhone  application, you might be able to use popovers instead.</p>
<h4>Restrict Complexity in Modal Tasks</h4>
<p>People appreciate being able to accomplish a self-contained subtask  in a modal view, because the context shift is clear and temporary. But  if the subtask is too complex, people can lose sight of the main task  they suspended when they entered the modal view.</p>
<h4>Downplay File-Handling Operations</h4>
<p>Although iPad applications can allow people to create and manipulate  files and share them with a computer (when the device is docked), this  does not mean that people should have a sense of the file system on  iPad.</p>
<h4>Ask People to Save Only When Necessary</h4>
<p>People should have confidence that their work is always preserved  unless they explicitly cancel or delete it. If your application helps  people create and edit documents, make sure they do not have to take an  explicit save action.</p>
<h4>Start Instantly</h4>
<p>iPad applications should start as quickly as possible so that people  can begin using them without delay.</p>
<h4>Always Be Prepared to Stop</h4>
<p>Like iPhone applications, iPad applications stop when people press  the Home button to open another application.</p>
<p><em>More details on these guidelines and further information on  developing for the iPad can be found in </em><a href="http://uxm.ag/53" target="_blank"><em>Apple&#8217;s Human Interface Guidelines for the iPad</em></a><em>.</em></p>
<p><em>Source : <a href="http://uxmag.com/design/ipad-user-experience-guidelines" target="_blank">[UX]Magazine</a><br />
 </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/08/experience-utilisateur-sur-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails : installer FCKeditor (en 4 étapes !)</title>
		<link>http://www.justelezeste.com/2010/06/ruby-on-rails-installer-fckeditor-en-4-lignes/</link>
		<comments>http://www.justelezeste.com/2010/06/ruby-on-rails-installer-fckeditor-en-4-lignes/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 11:39:51 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=341</guid>
		<description><![CDATA[Pour ceux qui ont connu FCKeditor en version Php ou Asp, ils se souviendront des difficultés à l&#8217;installation sur des serveurs mutualisés, des soucis de transfert et des erreurs générées pas le transfert de fichier. En cause bien souvent le serveur plutôt que FCKeditor, mais devant les besoins et l&#8217;urgence des projets, il fallait bien [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ont connu FCKeditor en version Php ou Asp, ils se souviendront des difficultés à l&#8217;installation sur des serveurs mutualisés, des soucis de transfert et des erreurs générées pas le transfert de fichier. <br />
 En cause bien souvent le serveur plutôt que FCKeditor, mais devant les besoins et l&#8217;urgence des projets, il fallait bien souvent trouver des moyens de pallier à ces problèmes et au final FCKeditor terminait au piloris. Avec Ruby on Rails, cela devient plus simple, pour peu que l&#8217;on respecte les différentes étapes et que l&#8217;on pense à redémarrer Mongrel (ou Webrick) pour que Ruby soit au courant de l&#8217;installation du plugin.  <br />
 <span id="more-341"></span><br />
 Bref, démarrons ! Tout d&#8217;abord, nous allons créer un simili blog en 2 lignes de code grâce à scaffold.<br />
 <code>script/generate scaffold articles name:string body:text</code> <br />
 Puis :<br />
 <code>rake db:migrate</code></p>
<p>Une fois notre partie &laquo;&nbsp;articles&nbsp;&raquo; créée, Il faut télécharger le plugin easyFckeditor.  <br />
 Pré-requis : Il vous faut Git d&#8217;installé pour ensuite télécharger le plugin easyFckeditor.  <br />
 2 solutions s&#8217;offrent à vous : soit l&#8217;installer sous forme de gem :  <br />
 <code>gem install git</code> <br />
 ou directement : sous windows avec <a href="http://code.google.com/p/msysgit/">mysysgit</a>, sous linux en ligne de code :  <br />
 <code>mkdir mon_git cd mon_git git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git</code> <br />
 ou sous mac : <a href="http://code.google.com/p/git-osx-installer/">git-osx-installer</a></p>
<p>Et voici les 4 étapes magiques :  <br />
 1 . Téléchargez le plugin <code>script/plugin install git://github.com/gramos/easy-fckeditor.git</code> <br />
 2 . Installez le plugin puis redémarrez votre serveur <code>rake fckeditor:install</code> <br />
 3. Placez cette ligne de code dans votre layout entre la balise</p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;/p&gt;
&lt;p&gt;
&lt;head&gt;&lt;/p&gt;
&lt;p&gt;
 ...&lt;/p&gt;
&lt;p&gt;
&lt;%= javascript_include_tag :fckeditor %&gt;&lt;/p&gt;
&lt;p&gt;
...&lt;/p&gt;
&lt;p&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;
</pre>
</p>
<p>4. Et enfin ajoutez cette ligne dans le fichier app/view/edit.html.erb et app/view/new.html.erb à la place de <%= f.text_area :body %> par :</p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;/p&gt;
&lt;p&gt;
&lt;%= fckeditor_textarea(&quot;article&quot;, &quot;body&quot;, :toolbarSet =&gt; 'Simple', :width =&gt; '600px', :height =&gt; '600px') %&gt;&lt;/p&gt;
&lt;p&gt;
</pre>
</p>
<p>Et voila ! tout fonctionne. Pour les windosiens, il vous faudra peut-être modifier, si le plugin ne fonctionne pas correctement, le fichier public/javascripts/fckcustom.js.  Modifiez</p>
<p>
<pre class="brush: ruby; title: ; notranslate">FCKRelativePath = '';</pre>
</p>
<p>en</p>
<p>
<pre class="brush: ruby; title: ; notranslate">FCKRelativePath = '/app';</pre>
</p>
<p>Ceci fut testé sur Mac et Pc.</p>
<p>Source : <a href="http://hetj.fr/blog/2010/05/28/fckeditor-pour-ruby-on-rails-en-4-lignes/" target="_blank" class="broken_link">T.Hummel, HJ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/06/ruby-on-rails-installer-fckeditor-en-4-lignes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails : modifier 2 tables avec un formulaire</title>
		<link>http://www.justelezeste.com/2010/06/ruby-on-rails-modifier-2-tables-avec-un-formulaire/</link>
		<comments>http://www.justelezeste.com/2010/06/ruby-on-rails-modifier-2-tables-avec-un-formulaire/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 11:28:21 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=337</guid>
		<description><![CDATA[La puissance des scaffold au service de la rapidité du framework RoR. Nous allons voir comment créer un formulaire manipulant 2 tables en même temps. Tout d&#8217;abord nous allons créer un scaffold user et address. script/generate scaffold user name:string surname:string login:string password:string address_id:integer script/generate scaffold address street:string postalcode:integer city:string country:string user_id:integer Ensuite il faut faire [...]]]></description>
			<content:encoded><![CDATA[<p>La puissance des scaffold au service de la rapidité du framework RoR.<br />
Nous allons voir comment créer un formulaire manipulant 2 tables en même temps.<span id="more-337"></span></p>
<p>Tout d&#8217;abord nous allons créer un scaffold user et address.<br />
 <code>script/generate scaffold user name:string surname:string login:string password:string address_id:integer</code></p>
<p><code>script/generate scaffold address street:string postalcode:integer city:string country:string user_id:integer<br />
 </code></p>
<p>Ensuite il faut faire une migration de ces 2 scaffolds :<br />
 <code>rake db:migrate</code></p>
<p>Une fois la migration effectuée vous devriez avoir ce résultat dans votre fichier db/shema.rb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
ActiveRecord::Schema.define(:version =&gt; 20100520145856) do&lt;br /&gt;
&lt;br /&gt;
  create_table &quot;addresses&quot;, :force =&gt; true do |t|&lt;br /&gt;
    t.string   &quot;street&quot;&lt;br /&gt;
    t.integer  &quot;postalcode&quot;&lt;br /&gt;
    t.string   &quot;city&quot;&lt;br /&gt;
    t.string  &quot;country&quot;&lt;br /&gt;
    t.datetime &quot;created_at&quot;&lt;br /&gt;
    t.datetime &quot;updated_at&quot;&lt;br /&gt;
    t.integer  &quot;user_id&quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  create_table &quot;users&quot;, :force =&gt; true do |t|&lt;br /&gt;
    t.string   &quot;name&quot;&lt;br /&gt;
    t.string   &quot;surname&quot;&lt;br /&gt;
    t.string   &quot;login&quot;&lt;br /&gt;
    t.string   &quot;password&quot;&lt;br /&gt;
    t.integer  &quot;address_id&quot;&lt;br /&gt;
    t.datetime &quot;created_at&quot;&lt;br /&gt;
    t.datetime &quot;updated_at&quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
</pre>
<p>ps : Le numéro de la version du schéma n&#8217;est pas à prendre en compte.</p>
<p>Ensuite nous allons du côté de la vue pour insérer quelques partials, histoire d&#8217;éviter la répétition de code (<a href="http://hetj.fr/blog/2010/05/01/le-principe-dry-rails/" class="broken_link">DRY</a>).<br />
 On commence par la vue addresses ou l&#8217;on va modifier le fichier addresses/new.html.erb,  addresses/edit.html.erb et nous allons créer le fichier  addresses/_form.html.erb.<br />
 <em>( important : le fichier doit forcément contenir &laquo;&nbsp;<strong>_</strong>&nbsp;&raquo; avant le nom pour que le partial le prenne en compte.)</em></p>
<p>addresses/new.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;h1&gt;New address&lt;/h1&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;% form_for(@address) do |f_address| %&gt;&lt;br /&gt;
&lt;%= f_address.error_messages %&gt;&lt;br /&gt;
  &lt;%= render :partial =&gt; 'form', :locals =&gt; { :f_address =&gt; f_address } %&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.submit 'Create' %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;%= link_to 'Back', addresses_path %&gt;&lt;br /&gt;
</pre>
<p>addresses/edit.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;h1&gt;Editing address&lt;/h1&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;% form_for(@address) do |f_address| %&gt;&lt;br /&gt;
&lt;%= f_adress.error_messages %&gt;&lt;br /&gt;
  &lt;%= render :partial =&gt; 'form', :locals =&gt; { :f_address =&gt; f_address } %&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.submit 'Update' %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;%= link_to 'Show', @address %&gt; |&lt;br /&gt;
&lt;%= link_to 'Back', addresses_path %&gt;&lt;br /&gt;
</pre>
<p>addresses/_form.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.label :street %&gt;&lt;br /&gt;&lt;br /&gt;
    &lt;%= f_address.text_field :street %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.label :postalcode %&gt;&lt;br /&gt;&lt;br /&gt;
    &lt;%= f_address.text_field :postalcode %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.label :city %&gt;&lt;br /&gt;&lt;br /&gt;
    &lt;%= f_address.text_field :city %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f_address.label :country %&gt;&lt;br /&gt;&lt;br /&gt;
    &lt;%= f_address.text_field :country %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
</pre>
<p>Vous pouvez vous apercevoir que j&#8217;ajoute lors de l&#8217;écriture de mon partial :locals  =&gt; { :f_address =&gt; f_address }<br />
 Ce qui me permet de passer la variable f_adress dans le partial sinon rails ne le comprendra pas.<br />
 Petite modification aussi de la variable f dans &lt;% form_for(@address) do |f_address| %&gt; que j&#8217;ai changé pour des raisons qui seront évidentes plus tard.</p>
<p>Maintenant occupons nous de la vue users.</p>
<p>users/new.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;h1&gt;New user&lt;/h1&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;% form_for(@user) do |f| %&gt;&lt;br /&gt;
 &lt;%= render :partial =&gt; 'form', :locals =&gt; { :f =&gt; f } %&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f.submit 'Create' %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;%= link_to 'Back', users_path %&gt;&lt;br /&gt;
</pre>
<p>users/edit.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;h1&gt;Editing user&lt;/h1&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;% form_for(@user) do |f| %&gt;&lt;br /&gt;
 &lt;%= render :partial =&gt; 'form', :locals =&gt; { :f =&gt; f } %&gt;&lt;br /&gt;
  &lt;p&gt;&lt;br /&gt;
    &lt;%= f.submit 'Update' %&gt;&lt;br /&gt;
  &lt;/p&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;%= link_to 'Show', @user %&gt; |&lt;br /&gt;
&lt;%= link_to 'Back', users_path %&gt;&lt;br /&gt;
</pre>
<p>users/_form.html.erb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
&lt;%= f.error_messages %&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;p&gt;&lt;br /&gt;
   &lt;%= f.label :name %&gt;&lt;br /&gt;&lt;br /&gt;
   &lt;%= f.text_field :name %&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;br /&gt;
 &lt;p&gt;&lt;br /&gt;
   &lt;%= f.label :surname %&gt;&lt;br /&gt;&lt;br /&gt;
   &lt;%= f.text_field :surname %&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;br /&gt;
 &lt;p&gt;&lt;br /&gt;
   &lt;%= f.label :login %&gt;&lt;br /&gt;&lt;br /&gt;
   &lt;%= f.text_field :login %&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;br /&gt;
 &lt;p&gt;&lt;br /&gt;
   &lt;%= f.label :password %&gt;&lt;br /&gt;&lt;br /&gt;
   &lt;%= f.text_field :password %&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;br /&gt;
&lt;% f.fields_for :addresses do |f_address| %&gt;&lt;br /&gt;
	&lt;%= render :partial =&gt; 'addresses/form', :locals =&gt; { :f_address =&gt; f_address } %&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;
</pre>
<p>Vous pouvez vous apercevoir que je créé un partial dans le partial. Dans mon fichier users/_form.html.erb j&#8217;ajoute la ligne &lt;%= render :partial =&gt; &#8216;addresses/form&#8217;, :locals =&gt; { :f_address =&gt; f_address } %&gt; ce qui va me permettre d&#8217;aller rechercher un bout de code déjà créé dans la vue addresses. De plus vous pouvez vous rendre compte maintenant pourquoi j&#8217;ai changé tout à l&#8217;heure la variable f en f_address. Cela évite une confusion avec la variable f du formulaire un peu plus haut.</p>
<p>Une fois la partie vue terminée, occupons nous du modèle. Pour ce faire il suffit d&#8217;ajouter 2 lignes dans le fichier model/user.rb</p>
<p>model/user.rb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
has_many :addresses, :dependent =&gt; :destroy&lt;br /&gt;
accepts_nested_attributes_for :addresses&lt;br /&gt;
</pre>
<p>&laquo;&nbsp;<strong>has_many </strong>&laquo;&nbsp;permet de dire qu&#8217;un utilisateur peut avoir plusieurs adresses et que celles-ci seront supprimées si l&#8217;on supprime l&#8217;utilisateur grâce à &laquo;&nbsp;<strong>:dependent =&gt; :destroy</strong>&laquo;&nbsp;.<br />
 Ensuite &laquo;&nbsp;<strong>accepts_nested_attributes_for :addresses</strong>&nbsp;&raquo; permet de dire que lorsque l&#8217;on va ajouter un utilisateur, rails ajoutera aussi dans la table Adresses la rue, le code postal et la ville de l&#8217;utilisateur.</p>
<p>Et enfin pour que la partie adresse du formulaire user soit visible, il faut modifier le controller users.</p>
<p>controllers/users_controller.rb</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
def new&lt;br /&gt;
    @user = User.new&lt;br /&gt;
    @user.addresses.build&lt;br /&gt;
&lt;br /&gt;
    respond_to do |format|&lt;br /&gt;
      format.html  new.html.erb&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/06/ruby-on-rails-modifier-2-tables-avec-un-formulaire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails : DRY (Don&#8217;t Repeat Yourself)</title>
		<link>http://www.justelezeste.com/2010/06/ruby-on-rails-dry-dont-repeat-yourself/</link>
		<comments>http://www.justelezeste.com/2010/06/ruby-on-rails-dry-dont-repeat-yourself/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 12:03:14 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=332</guid>
		<description><![CDATA[DRY (Don&#8217;t Repeat Yourself) est un principe de développement visant à réduire la répétition des informations de toutes sortes. Avec Ruby on Rails, il est notamment utilisé pour les partials, les filtres et les callbacks. Voici un exemple de partial : app/view/new.html.rb app/view/edit.html.rb app/view/_form.html.rb Ici le partial _form va être appelé pour la page édit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>DRY </strong>(<strong>D</strong>on&#8217;t <strong>R</strong>epeat <strong>Y</strong>ourself) est un principe de développement visant à réduire la répétition des informations de toutes sortes. <br />
 Avec Ruby on Rails, il est notamment utilisé pour les partials, les filtres et les callbacks.</p>
<p><span id="more-332"></span><br />
Voici un exemple de partial :</p>
<p><strong>app/view/new.html.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
&lt;h2&gt;Ajouter un livre&lt;/h2&gt;
&lt;%= render :partial =&gt; 'form' %&gt;
&lt;%= submit_tag 'Nouveau' %&gt;
</pre>
<p><strong>app/view/edit.html.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
 &lt;h2&gt;Modifier un livre&lt;/h2&gt;
 &lt;%= render :partial =&gt; 'form' %&gt;
 &lt;%= submit_tag 'Edit' %&gt;
 </pre>
<p><strong>app/view/_form.html.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
&lt;% form_for @livres do |f| %&gt;

  &lt;%= error_message_for 'livre' %&gt;
  &lt;p&gt;
    &lt;%= f.label :name %&gt;
    &lt;%= f.text_field : name %&gt;
  &lt;/p&gt;
&lt;% end %&gt;
</pre>
<p>Ici le partial <strong>_form</strong> va être appelé pour la page édit et new.<br />
En php, l&#8217;équivalent serait include(&#8216;form.php&#8217;). Ceci évite la répétition de code.</p>
<p>En ce qui concerne les filtres, la magie de rails opère avec une facilité déconcertante.</p>
<p>Voici quelques exemples :</p>
<p><strong>app/view/application.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
def  livre_disponible
  if @livre.disponible == 't'
    flash[:notice] = &quot;Vous ne pouvez pas prendre ce livre car il n'est pas disponible dans la bibliothèque&quot;
    redirect_to (:controller =&gt; 'livres', :action =&gt; 'demande')
  end
end
</pre>
<p><strong>app/view/livre.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
class AdminController &lt; ApplicationController
  before_filter :livre_disponible

...
end
</pre>
<p>Si la personne veut disposer d&#8217;un livre et qu&#8217;il n&#8217;est pas disponible dans la bibliothèque, celui-ci sera prévenu et redirigé vers la page &#8216;demande.html.erb&#8217;</p>
<p>Pour les <strong>callbacks</strong> (triggers), ils fonctionnent comme les filtres et sont appelés par <strong>ActiveRecord</strong> après ou avant une sauvegarde/suppression d&#8217;un ou plusieurs enregistrements dans la base de données.</p>
<p>ex : <em>before_save/ after_save</em> ou <em>before_destroy/ after_destroy</em></p>
<p>Source : <a href="http://hetj.fr/" target="_blank">T. Hummel, H&amp;J</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/06/ruby-on-rails-dry-dont-repeat-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails : Find() et ses scopes ActiveRecord</title>
		<link>http://www.justelezeste.com/2010/06/ruby-on-rails-find-et-ses-scopes-activerecord/</link>
		<comments>http://www.justelezeste.com/2010/06/ruby-on-rails-find-et-ses-scopes-activerecord/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 20:22:40 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=330</guid>
		<description><![CDATA[Il existe plusieurs manières, dans le controler, de faire une requête grâce à la fonction magique find(). En voici quelques exemples. livres_controller.rb Maintenant à l&#8217;aide des fabuleux scopes de rails, nous allons réécrire les mêmes requêtes mais différemment : livres_controller.rb Vous pouvez remarquer que @livre est parfois au pluriel, parfois au singulier. Ici rien ne [...]]]></description>
			<content:encoded><![CDATA[<p>Il existe plusieurs manières, dans le controler, de faire une requête grâce à la fonction magique <strong>find()</strong>.<br />
<span id="more-330"></span><br />
En voici quelques exemples.</p>
<p><strong>livres_controller.rb</strong></p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
@livres = Livre.find(:all) # Recherche tous les livres&lt;br /&gt;
@livre = Livre.find(:first) # Recherche le premier livre enregistrer&lt;br /&gt;
@livre = Livre.find(:last) # Recherche le dernier livre enregistrer&lt;br /&gt;
@livre = Livre.find(:id) # Rechercher le livre correspondant à un id&lt;br /&gt;
</pre>
</p>
<p>Maintenant  à l&#8217;aide des fabuleux scopes de rails, nous allons réécrire les mêmes requêtes mais différemment :  <strong>livres_controller.rb</strong></p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
@livres = Livre.all # Recherche tous les livres&lt;br /&gt;
 @livre = Livre.first # Recherche le premier livre enregistrer&lt;br /&gt;
 @livre = Livre.last # Recherche le dernier livre enregistrer&lt;br /&gt;
 @livre = Livre.find(:id) # Rechercher le livre correspondant à l'id&lt;br /&gt;
 </pre>
</p>
<p>Vous pouvez remarquer que @livre est parfois au pluriel, parfois au singulier. Ici rien ne vous oblige à plurialiser l&#8217;objet @livre cependant la convention et la logique veut que lorsque l&#8217;on cherche plusieurs livres on ajoute un <strong>s</strong> et lorsque l&#8217;on cherche un seul élément @livre est au singulier.  Tout cela est bien beau mais si nous avons un cas particulier ou les livres doivent être rouges, ou qu&#8217;ils doivent être  disponible dans la bibliothèque&#8230; Eh bien nous allons utiliser les conditions. Celles-ci peuvent s&#8217;écrire de différentes manières :  <strong>livres_controller.rb </strong></p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
 @livres = Livre.all(:conditions { :couleur =&gt; 'rouge'}) # Recherche tous les livres rouges&lt;br /&gt;
 @livres = Livre.all(:conditions =&gt; {:couleur =&gt; ['rouge','vert']}) # Rechercher tous les livres rouges et verts&lt;br /&gt;
 @livres = Livre.all(:conditions =&gt; ['couleur = ? AND disponible = ?', 'rouge', 't']) #Recherche tous les livres rouges disponibles&lt;br /&gt;
 </pre>
</p>
<p>Vous en voulez encore ? Voici comment on peut modifier l&#8217;ordre et faire une jointure avec une ou plusieurs tables :   <strong>livres_controller.rb </strong></p>
<p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;
 @livres = Livre.all(:include =&gt; :categorie, :conditions =&gt; ['categorie.id = ?, '3') # Recherche tous les livres dans la catégorie 3&lt;br /&gt;
 @livres = Livre.all(:include =&gt; [:categorie, :auteur] :conditions =&gt; ['categorie.name = ? AND auteur.name = ?','roman','Hugo']) # Rechercher tous les livres dans la catégorie &lt;strong&gt;roman&lt;/strong&gt; dont l'auteur se nomme &lt;strong&gt;Hugo&lt;/strong&gt;&lt;br /&gt;
 @livres = Livre.all(:order =&gt; 'name DESC') #Recherche tous les livres par nom dans l'ordre descendant&lt;br /&gt;
 </pre>
</p>
<p>Sachez que vous pouvez utiliser <strong>:joins</strong> à la place d&#8217;<strong>:include</strong> mais il faut savoir que la requête prendra plus de temps à s&#8217;effectuer.</p>
<p>Source : <a href="http://hetj.fr/blog/2010/04/30/find-et-ces-scopes-ror-activerecord/" target="_blank" class="broken_link">T. Hummel, H&amp;J</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/06/ruby-on-rails-find-et-ses-scopes-activerecord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails : Jointure &#171;&#160;has_many&#160;&#187; et &#171;&#160;belongs_to&#160;&#187;</title>
		<link>http://www.justelezeste.com/2010/05/ruby-on-rails-jointure-has_many-et-belongs_to/</link>
		<comments>http://www.justelezeste.com/2010/05/ruby-on-rails-jointure-has_many-et-belongs_to/#comments</comments>
		<pubDate>Mon, 31 May 2010 20:21:10 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=327</guid>
		<description><![CDATA[J&#8217;entame aujourd&#8217;hui une série d&#8217;articles concernant Ruby on Rails, le célèbre framework. Cette série est initiée grâce à l&#8217;un de mes amis, Thomas, qui développe en Ruby depuis quelques temps maintenant avec une passion étonnante mais justifiée. Imaginons que nous possédons une bibliothèque. Dans cette bibliothèque nous aimerions connaitre tous les livres appartenant aux catégories [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;entame aujourd&#8217;hui une série d&#8217;articles concernant Ruby on Rails, le célèbre framework.<br />
 Cette série est initiée grâce à l&#8217;un de mes amis, <a href="http://hetj.fr/" target="_blank">Thomas</a>, qui développe en Ruby depuis quelques temps maintenant avec une passion étonnante mais justifiée.<span id="more-327"></span></p>
<p>Imaginons que nous possédons une bibliothèque. <br />
 Dans cette bibliothèque nous aimerions connaitre tous les livres appartenant aux catégories disponibles dans cette celle-ci. <br />
 Dans notre cas nous considérons qu&#8217;un livre appartient à une seule catégorie (singulier) et qu&#8217;une catégorie possède plusieurs livres (pluriel).  <br />
 Pour se faire nous allons utiliser <strong>:include</strong> qui fera la liaison entre les livres et leurs catégories. <strong> </strong> <strong> </strong></p>
<p><strong>app/controllers/livres_controller.rb</strong> (controller)</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
class FavorisController &lt; ApplicationController&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  def index&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
    # ici la requète  avec :include&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
    @livres = Livre.all(:include =&gt; 'categories')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
<p><br class="spacer_" /></p>
<p><strong>app/models/categorie.rb</strong> (model)</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
class Livre &lt; ActiveRecord::Base&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
 has_many :livres&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
<p><br class="spacer_" /></p>
<p><strong>app/models/livre.rb</strong> (model)</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
class Livre &lt; ActiveRecord::Base&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
 belongs_to :categorie&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
<p><br class="spacer_" /></p>
<p>Vous pouvez remarquez que dans les modèles , &#8216;livres&#8217; est au pluriel lorsque l&#8217;on utilise <strong>has_many</strong> et catégorie est au singulier avec <strong>belongs_to</strong>.  Et c&#8217;est grâce à ces 2 modèles et la puissance d&#8217;ActiveRecord que vous allez pouvoir créez la jointure.Maintenant nous allons exploiter les résultats obtenus dans la partie view.  <strong>app/view/index.html.erb</strong> (model)</p>
<pre class="brush: ruby; title: ; notranslate">&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;% @livres.each do ⎮livre⎮ %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;p&gt;Référence du livre : &lt;%= livre.id %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;p&gt;Nom du livre : &lt;%= livre.name %&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;p&gt;Nom de l'auteur : &lt;%= livre.auteur %&gt;&lt;/p&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;p&gt;Référence de la catégorie : &lt;%= livre.categorie.id %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;p&gt;Nom de la catégorie : &lt;%= livre.catégorie.name %&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;% end %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
<p><br class="spacer_" /></p>
<p>Vous pouvez vous apercevoir qu&#8217;il est très facile d&#8217;exploiter les informations des 2 tables.  Ici on va afficher tous les livres présent dans @livres avec l&#8217;itération <strong>each.</strong></p>
<p>Source : <a href="http://hetj.fr/blog/2010/04/29/jointure-rails-ror-avec-has_many-et-belongs_to/" target="_blank" class="broken_link">T. Hummel, H&amp;J</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/05/ruby-on-rails-jointure-has_many-et-belongs_to/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MCD dans PhpMyAdmin 3.2.x</title>
		<link>http://www.justelezeste.com/2010/02/mcd-dans-phpmyadmin-3-2-x/</link>
		<comments>http://www.justelezeste.com/2010/02/mcd-dans-phpmyadmin-3-2-x/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 10:00:52 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=309</guid>
		<description><![CDATA[Le modèle conceptuel des données (MCD) a pour but d&#8217;écrire de façon formelle les données qui seront utilisées par le système d&#8217;information. Il s&#8217;agit donc d&#8217;une représentation des données, facilement compréhensible, permettant de décrire le système d&#8217;information à l&#8217;aide d&#8217;entités. Pendant longtemps, les responsables de projets SI utilisaient des logiciels tiers pour faire la même [...]]]></description>
			<content:encoded><![CDATA[<p>Le modèle conceptuel des données (MCD) a pour but d&#8217;écrire de façon formelle les données qui seront utilisées par le système d&#8217;information. Il s&#8217;agit donc d&#8217;une représentation des données, facilement compréhensible, permettant de décrire le système d&#8217;information à l&#8217;aide d&#8217;entités.   <br />
 Pendant longtemps, les responsables de projets SI utilisaient des logiciels tiers pour faire la même chose : DbDesigner, PowerAmc, etc.<br />
 Il est possible, depuis quelque temps déjà, de conceptualiser les données directement via l&#8217;outil Concepteur de PhpMyAdmin.  <span id="more-309"></span></p>
<p>L&#8217;explication suivante suit une procédure qui fut effectué sur Wamp 2.0 (Apache 2.2.11, Php5.3, MySQL 5.1.36 et PhpMyAdmin 3.2.</p>
<h3>1 &#8211; Générer la base et les tables</h3>
<p>Tout d&#8217;abord, copiez le code SQL que vous trouverez dans /scripts/create_tables.sql, présent dans le répertoire /phpmyadmin/.<br />
 Ouvrez ensuite une fenêtre SQL dans PhpMyAdmin, puis collez et exécuter ce code.<br />
 Cela va vous créer une base &#8216;phpmyadmin&#8217; et les tables associées.</p>
<h3>2 &#8211; Editez et modifier le fichier config.inc.php</h3>
<p>
<pre>$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['controluser'] = 'user';
$cfg['Servers'][$i]['controlpass'] = 'mdp';
</pre>
</p>
<h3>3 &#8211; Forcer la fonction PMA_getRelationsParam</h3>
<p>Dans le fichier librairies/relation.lib.php du répertoire /phpmyadmin/, aller à la ligne 56 et changer la ligne :</p>
<pre>if (empty($_SESSION['relation' . $GLOBALS['server']])) {</pre>
<p>par la ligne :</p>
<pre>if (empty($_SESSION['relation' . $GLOBALS['server']]) || true) {
</pre>
<p>- Fin des manipulations -</p>
<p>Vous pouvez dorénavant faire votre MCD avec PhpMyAdmin en cliquant sur l&#8217;onglet &laquo;&nbsp;Concepteur&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/02/mcd-dans-phpmyadmin-3-2-x/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HTML 5, le multimédia envahit vos navigateurs</title>
		<link>http://www.justelezeste.com/2010/02/html-5-le-multimedia-envahit-vos-navigateurs/</link>
		<comments>http://www.justelezeste.com/2010/02/html-5-le-multimedia-envahit-vos-navigateurs/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 17:08:29 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>
		<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=307</guid>
		<description><![CDATA[Le HTML5 est la prochaine norme HTML du W3C, elle se présente à la fois comme le successeur de la norme 4 du HTML et de la norme 1 du XHTML. Contrairement à ses ainés, qui se concentrent principalement sur l&#8217;aspect sémantique du contenu d&#8217;une page, une des révolutions du HTML 5 est qu&#8217;il apporte [...]]]></description>
			<content:encoded><![CDATA[<p>Le HTML5 est la prochaine norme HTML du W3C, elle se présente à la fois comme le successeur de la norme 4 du HTML et de la norme 1 du XHTML.</p>
<p>Contrairement à ses ainés, qui se concentrent principalement sur l&#8217;aspect sémantique du contenu d&#8217;une page, une des révolutions du HTML 5 est qu&#8217;il apporte toute une série de nouveautés multimédia aux pages.</p>
<p>Le HTML5 offre un ensemble de composants qui permettent de gérer ce type de contenu sans avoir à faire appel à des plug-ins externes (comme Flash ou Silverlight).</p>
<p>Que ce soit pour la vidéo, le son ou encore le dessin vectoriel, une toute nouvelle gamme de balises ont été incorporées aux spécifications du HTML 5. Celles-ci nous permettent d&#8217;accéder à tout un monde auquel on n&#8217;osait aspirer tellement le HTML était vu comme un langage statique et faible en interactions.</p>
<p><span id="more-307"></span><br class="spacer_" /></p>
<h2>Le SVG</h2>
<p><a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a> est un ensemble de spécifications qui permettent de réaliser des graphismes vectoriels à l&#8217;aide de fichiers XML.</p>
<p>Un des grands avantages de ce format, c&#8217;est que les images SVG sont créées exclusivement à partir de XML et donc, de texte.</p>
<p>Elles sont ainsi éditables à la volée, compressibles et leur contenu est facilement trouvable par un moteur de recherche. Ces avantages font qu&#8217;une image SVG est particulièrement adaptée au web.</p>
<p>Un temps destiné à entrer entièrement dans le standard HTML 5 avec sa propre balise <code>&lt;svg&gt;</code>, il n&#8217;est pour l&#8217;instant plus utilisable que grâce à la balise <code>&lt;embed&gt;</code> (Opera et Safari acceptent également le SVG dans la balise <code>&lt;img&gt;</code>, suite à une demande du consortium s&#8217;occupant de la rédaction des spécifications de SVG.</p>
<p>S&#8217;il ne fait plus partie intégrante du HTML5, il est cependant important de s&#8217;y intéresser, car tous les navigateurs (sauf Internet Explorer), gèrent le format SVG et permettent donc de l&#8217;intégrer directement dans n&#8217;importe laquelle des pages. L&#8217;intégration du SVG dans une page permet des effets intéressants. On peut par exemple interagir avec une vidéo (voir plus loin : la balise <code>&lt;video&gt;</code>) en y appliquant des filtres à la volée.</p>
<p>Un document SVG se présente sous la forme suivante :</p>
<pre>	&lt;?xml version="1.0" standalone="no"?&gt;
	&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
	"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"&gt;

	&lt;svg width="100%" height="100%" version="1.1"
	xmlns="http://www.w3.org/2000/svg"&gt;

	&lt;circle cx="42" cy="42" r="40" stroke="black"
	stroke-width="2" fill="yellow"/&gt;

	&lt;circle cx="43" cy="42" r="30" stroke="black"
	stroke-width="2" fill="red"/&gt;

	&lt;circle cx="25" cy="30" r="10" stroke="black"
	stroke-width="2" fill="white"/&gt;
	&lt;circle cx="25" cy="30" r="3" stroke="black"
	stroke-width="1" fill="blue"/&gt;

	&lt;circle cx="60" cy="30" r="10" stroke="black"
	stroke-width="2" fill="white"/&gt;
	&lt;circle cx="60" cy="30" r="3" stroke="black"
	stroke-width="2" fill="blue"/&gt;

	&lt;/svg&gt;</pre>
<p>Il y a beaucoup de choses à découvrir à propos du SVG, il permet créer des filtres avancés sur les images ainsi que de gérer des animations. Les liens suivants constituent un bon point de départ pour toute personne désirant en savoir plus :</p>
<ul>
<li><a href="http://www.benjoffe.com/code/demos/canvascape/">Tutorial SVG sur w3schools.com</a></li>
<li><a href="http://dev.opera.com/articles/svg/">Articles dédiés au SVG sur dev.opera.com</a></li>
<li><a href="http://www.w3schools.com/svg/svg_examples.asp">Liens vers un bon nombre de démos SVG sur w3schools</a></li>
</ul>
<h2>Vidéo</h2>
<p>Parmi toutes les nouveautés qu&#8217;apporte le HTML5, il ne fait aucun doute que celle qui aura fait le plus parler d&#8217;elle est la balise <code>&lt;video&gt;</code>. En effet, alors que le SVG est un peu trop technique pour le grand public, c&#8217;est <code>&lt;video&gt;</code> qui est la plus représentative de l&#8217;alternative aux plug-ins externes type flash ou silverlight pour l&#8217;insertion de contenu multimédia dans une page.</p>
<p>Le W3C avait dans un premier temps essayé de standardiser les formats utilisés par cette balise. Ils pensaient que le plus adapté serait un format ouvert qui n&#8217;impose de royalties à aucun niveau. Ogg Theora était donc à leur sens la meilleure option, et l&#8217;intégration de codecs pour lire les vidéos de ce format a été ajoutée dans les spécifications du HTML5.</p>
<p>Cependant, les différents éditeurs de navigateurs ne voyaient pas la chose du même oeil, en particulier Safari, qui a tout simplement refusé le format Ogg, en disant qu&#8217;ils préféraient gérer le H.264.</p>
<p>Le H.264 a ses avantages, comme le fait d&#8217;avoir des fichiers plus petits en taille ou d&#8217;offrir une qualité vidéo supérieure (même si le Ogg se défend bien de ce côté là. Par contre, H.264 n&#8217;est pas gratuit à implémenter pour les navigateurs, et les <a href="http://www.streamingmedia.com/article.asp?id=10900">coûts de licence</a> ont refroidi Firefox et Opera.</p>
<p>De son côté, Google annonce que Chrome supportera aussi bien Ogg que H.264.</p>
<p>Puisque les éditeurs n&#8217;acceptaient pas l&#8217;idée d&#8217;un format unique pour la balise <code>&lt;video&gt;</code>, <a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-June/020620.html">Ian Hickson</a> a retiré des spécifications la partie qui impose le format Ogg.</p>
<table border="0">
<tbody>
<tr>
<th> Navigateur</th>
<th> Formats supportés</th>
</tr>
<tr>
<td>Chrome</td>
<td>Ogg Theora, H.264</td>
</tr>
<tr>
<td>Mozilla (Firefox)</td>
<td>Ogg Theora</td>
</tr>
<tr>
<td>Opera</td>
<td>Ogg Theora</td>
</tr>
<tr>
<td>Safari</td>
<td>Tous les formats supportés par QuickTime</p>
<p><br class="spacer_" /></p>
<p>Nativement H.264, mais pour Ogg il faut un plug-in.</p>
</td>
</tr>
<tr>
<td>Internet Explorer</td>
<td><code>&lt;video&gt;</code> ? Pour quoi faire ?</td>
</tr>
</tbody>
</table>
<p>On voit ici que Ogg est supporté nativement par trois navigateurs sur cinq, ce qui lui donne une longueur d&#8217;avance sur les autres. Il n&#8217;est cependant pas trop tard pour H.264 (qui possède un avantage technique sur Ogg) de prendre des mesures stratégiques en rapport avec leur licence qui pourrait changer la donne.</p>
<p>Comme souvent, quand plusieurs formats entrent en conflit, on laisse les deux vivre jusqu&#8217;à ce que l&#8217;un prenne l&#8217;avantage sur l&#8217;autre. Ainsi, il ne fait aucun doute que d&#8217;ici quelques années, l&#8217;un des deux (ou éventuellement un nouvel acteur) s&#8217;imposera.</p>
<p>On remarque accessoirement qu&#8217;Internet Explorer n&#8217;a pas réagi sur cette histoire de format. En fait, il n&#8217;a même pas réagi sur l&#8217;implémentation de la balise <code>&lt;video&gt;</code>. Si jamais il venait à le supporter, les chances qu&#8217;il supporte le WMV sont grandes, mais le doute plane sur le format ouvert qu&#8217;il choisira (si jamais il en choisit un). On pourrait même supposer que puisque Silverlight n&#8217;est pas vraiment un plug-in externe pour Internet Explorer, il l&#8217;utilisera pour gérer la balise <code>&lt;video&gt;</code>.</p>
<p>Voici la façon la plus simple d&#8217;utiliser la balise vidéo dans un navigateur qui le supporte.</p>
<pre>&lt;video src="chemin vers la vidéo"&gt;
Message alternatif à afficher si le navigateur ne supporte pas la balise.
&lt;/video&gt;</pre>
<p>Ce code très simple permet donc d&#8217;afficher une vidéo dans une page web mais le W3C a prévu tout un ensemble d&#8217;options permettant une utilisation plus avancée de ce tag.</p>
<dl>
<dt><code>controls</code></dt>
<dd>(true ou false)</p>
<p><br class="spacer_" /></p>
<p>En passant cet attribut à vrai, on indique au navigateur qu&#8217;on souhaite qu&#8217;il affiche des contrôles pour la vidéo (volume, bouton lecture, bouton stop&#8230;).</p>
</dd>
<dt><code>poster</code></dt>
<dd>(lien vers une image)</p>
<p><br class="spacer_" /></p>
<p>En passant à l&#8217;attribut poster un lien vers une image, on indique quelle image le navigateur doit afficher à la place de la vidéo quand celle-ci n&#8217;est pas encore lancée ou qu&#8217;il y a un problème lors de l&#8217;accès à la vidéo.</p>
</dd>
<dt><code>autobuffer</code></dt>
<dd>(true ou false)</p>
<p><br class="spacer_" /></p>
<p>Permet de lancer le chargement de la vidéo automatiquement, sans avoir à cliquer sur lecture. Ainsi, lorsque l&#8217;utilisateur lancera la vidéo, celle-ci aura déjà pré chargé suffisamment de vidéo pour qu&#8217;il n&#8217;y ait pas de temps d&#8217;attente avant que la vidéo ne commence.</p>
</dd>
<dt><code>autoplay</code></dt>
<dd>(true ou false)</p>
<p><br class="spacer_" /></p>
<p>En passant cet attribut à vrai, la vidéo se lancera dès que la page sera chargée, sans attendre d&#8217;action de la part du visiteur.</p>
</dd>
<dt><code>loop</code></dt>
<dd>(true ou false)</p>
<p><br class="spacer_" /></p>
<p>A la fin de la lecture, si cet attribut est à vrai, la lecture de la vidéo reprendra à zéro</p>
</dd>
<p>On peut observer qu&#8217;il n&#8217;est pas indispensable d&#8217;utiliser les contrôleurs du navigateur. Ça implique, évidemment, que l&#8217;on peut créer ses propres contrôleurs en leur donnant l&#8217;apparence que l&#8217;on souhaite. Mieux encore, on peut même intégrer sa vidéo dans du SVG et y appliquer des filtres &laquo;&nbsp;à la volée&nbsp;&raquo;.</p>
<p>L&#8217;interaction avec le lecteur se fait grâce à du JavaScript qui peut modifier très simplement les propriétés d&#8217;un élément DOM (et lancer des évènements comme la lecture avec la méthode &laquo;&nbsp;play()&nbsp;&raquo;).</p>
<p>Vous trouverez ci-dessous, quelques liens vers des pages où la balise vidéo est en démonstration. (Tous ne fonctionnent pas avec tous les navigateurs)</p>
<ul>
<li><a href="http://people.opera.com/howcome/2007/video/svg/clip-move.svg">Intégration de la balise <code>&lt;video&gt;</code> dans du SVG avec application de filtres à la volée</a></li>
<li><a href="http://people.mozilla.com/%7Eprouget/demos/round/index.xhtml">Démonstration de Mozilla de l&#8217;association du SVG avec <code>&lt;video&gt;</code></a></li>
<li><a href="http://www.mozilla.com/en-US/firefox/video/">Page de présentation de la balise <code>&lt;video&gt;</code> pour Firefox.</a></li>
<li><a href="http://www.youtube.com/html5">Page de Youtube où les vidéos utilisent la balise <code>&lt;video&gt;</code> au lieu du plug-in Flash</a></li>
<li><a href="http://www.dailymotion.com/openvideodemo">Page de Dailymotion où les vidéos utilisent la balise <code>&lt;video&gt;</code> au lieu du plug-in Flash.</a></li>
<li><a href="http://dev.opera.com/articles/view/a-call-for-video-on-the-web-opera-vid/#video">Quelques autres exemples sur le site dédié aux développeurs sur Opera.com</a></li>
</ul>
<h2>Audio</h2>
<p>La balise audio, n&#8217;est pas quelque chose de complètement nouveau dans le monde du HTML. On se souvient en effet qu&#8217;Internet Explorer implémentait la balise <code>&lt;bgsound&lt;</code>, qui permettait de jouer un son en fond d&#8217;une page. Ce n&#8217;était cependant pas une balise valide et n&#8217;était donc compatible avec rien d&#8217;autre qu&#8217;un Internet Explorer (ce qui à l&#8217;époque était nettement moins problématique qu&#8217;aujourd&#8217;hui).</p>
<p>Aujourd&#8217;hui, c&#8217;est une véritable balise d&#8217;intégration de musique dans le navigateur que le W3C ajoute aux spécifications du HTML5.</p>
<p>De la même manière que pour les vidéos, l&#8217;idée au départ était d&#8217;imposer un codec à tous les navigateurs, mais ça a été retiré des spécifications, et maintenant chaque navigateur lit les formats qu&#8217;il désire.</p>
<table border="0">
<tbody>
<tr>
<th> Navigateur</th>
<th> Formats supportés</th>
</tr>
<tr>
<td>Chrome</td>
<td>Ogg Vorbis, MP3</td>
</tr>
<tr>
<td>Mozilla (Firefox)</td>
<td>Ogg Vorbis, WAV</td>
</tr>
<tr>
<td>Opera</td>
<td>WAV</td>
</tr>
<tr>
<td>Safari</td>
<td>Tous les formats supportés par QuickTime</p>
<p><br class="spacer_" /></p>
<p>Encore une fois, pour le Ogg, il faudra installer une extension à QuickTime</p>
</td>
</tr>
<tr>
<td>Internet Explorer</td>
<td><code>&lt;audio&gt;</code> ? <code>bgsound</code> ne vous suffit pas ?</td>
</tr>
</tbody>
</table>
<p>Dans l&#8217;état actuel des spécifications, voici à quoi l&#8217;utilisation de la balise audio devrait ressemble :</p>
<pre>&lt;audio src="mon_fichier_audio.ext" /&gt;</pre>
<p>On retrouve également le même type d&#8217;attributs que pour la balise <code>video</code> : <code>autobuffer</code> pour charger le fichier dès le chargement de la page, <code>autoplay</code> pour lancer le fichier audio dès que la page est chargée, <code>loop</code> pour la lecture en boucle et <code>controles</code> pour utiliser les contrôles fournis par le navigateur.</p>
<p>vous trouverez ci-après, quelques liens vers des démonstrations de la balise <code>&lt;audio&gt;</code>.</p>
<ul>
<li><a href="http://bocoup.com/">JavaScript Audio Interface : un lecteur musical n&#8217;utilisant que des éléments HTML 5 (dont audio)</a></li>
<li><a href="http://www.w3schools.com/tags/html5_audio.asp" class="broken_link">La balise audio sur w3schools</a></li>
</ul>
<h2>Les sources</h2>
<p>Comme il est indiqué plus haut, que ça soit pour la balise vidéo ou pour la balise audio, il n&#8217;y a pas de format supporté par tous les navigateurs (à l&#8217;heure actuelle). Il n&#8217;est donc pas facile pour un webmaster de faire son choix dans le codec.</p>
<p>Sans apporter de solution, puisqu&#8217;ils se sont effacés du débat des codecs, le W3C apporte quand même une nouvelle balise qui permet, à défaut de fournir un seul format à tous, de fournir plusieurs formats afin que tout le monde puisse lire le format que son navigateur supporte.</p>
<p>La balise <code>&lt;source&lt;</code> permet donc de définir plusieurs origines pour le contenu des balises multimédia.</p>
<p>Le code suivant permet donc de définir deux sources de vidéo pour le navigateur. Si la première ne peut pas être utilisée, que ça soit parce que la vidéo est inaccessible pour que le navigateur n&#8217;est pas capable de lire un certain format, alors le navigateur essaiera la source suivante.</p>
<pre>&lt;video controller="true"&gt;
	&lt;source src="video.mkv" /&gt;
	&lt;source src="video.mp4" /&gt;
&lt;/video&gt;</pre>
<p>Tant qu&#8217;il n&#8217;y aura pas eu d&#8217;adaptation d&#8217;un unique codec pour tous les navigateurs, les balises multimédia ont pour l&#8217;instant assez peu de sens. Cette balise <code>source</code> leur en redonne un peu.</p>
<h2>Canvas</h2>
<p><code>&lt;canvas&gt;</code> est assez peu révolutionnaire dans son genre puisque, dans l&#8217;absolu, elle ne représente que la bitmap d&#8217;une image. Cependant, c&#8217;est probablement de cette balise que viendront les démonstrations les plus spectaculaires du HTML5.</p>
<p>En effet, un <code>canvas</code> est complètement manipulable au travers du JavaScript, ce qui permet de créer toutes sortes d&#8217;effets et/ou d&#8217;interactions avec le visiteur.</p>
<p>Depuis que les navigateurs ont commencé à intégrer cette balise, on a vu fleurir sur internet toutes sortes de démonstrations qui montrent le potentiel de la balise. Du jeu en 3D à une copie de Paint, il y a beaucoup d&#8217;espoir qui repose sur cette balise.</p>
<ul>
<li><a href="http://blog.mozbox.org/post/2009/04/12/Firefox-35:-a-new-experiment-with-Canvas-Video">Intégration d&#8217;une vidéo dans la balise <code>&lt;canvas&gt;</code></a></li>
<li><a href="http://webdemos.sourceforge.net/haxesandy/">Un moteur 3D utilisant <code>&lt;canvas&gt;</code></a></li>
<li><a href="http://www.blobsallad.se/">Une sorte de Loco Roco que l&#8217;on peut controller avec sa souris</a></li>
<li><a href="http://www.canvasdemos.com/">Canvas Demos.com, un site dédié au <code>&lt;canvas&gt;</code>. Regorge d&#8217;exemples, d&#8217;articles et de liens</a></li>
<li><a href="http://www.kevs3d.co.uk/dev/asteroids/">Un Asteroids en HTML 5</a></li>
<li><a href="http://www.benjoffe.com/code/games/torus/">Torus : Un Tétris en 3 dimensions utilisant</a></li>
</ul>
<h2>Conclusion</h2>
<p>Le HTML5 est décidément plein de surprises et apporte un véritable lot d&#8217;évolutions, surtout en comparaison avec l&#8217;XHTML qui a suivi le HTML 4. Il se positionne pour un internet moderne, et propose de se libérer des plug-ins externes au navigateur qui dépendent de sociétés tierces et travaillent avec outils fermés et qui rendent donc dépendant de ces entreprises.</p>
<p>Les balises multimédia du HTML 5 ne sont qu&#8217;un petit aperçu de ce qui est à venir, et tout programmeur web devrait prendre le temps de regarder attentivement les évolutions des spécifications et suivre les implémentations de chaque nouvelle fonctionnalité dans les navigateurs pour pouvoir les essayer au plus vite. Je pense notamment à la possible implémentation de balises en relation avec la communication réseau de bas niveau qui permettrait d&#8217;avoir des relations suivant n&#8217;importe quel type de protocole en symétrique et asynchrone.</p>
<p>On est encore loin d&#8217;avoir tout vu de ce que le HTML 5 a à nous offrir, et je pense sincèrement qu&#8217;on n&#8217;a pas fini d&#8217;être épatés.</p>
<p><a href="http://www.mti.epita.fr/blogs/" target="_blank">Source : MTI &#8211; Epita</a></p>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/02/html-5-le-multimedia-envahit-vos-navigateurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menu déroulant : Keyboard friendly ?</title>
		<link>http://www.justelezeste.com/2010/01/menu-deroulant-keyboard-friendly/</link>
		<comments>http://www.justelezeste.com/2010/01/menu-deroulant-keyboard-friendly/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 17:08:19 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=304</guid>
		<description><![CDATA[Les menus déroulants ne sont pas sur ma liste personnelle de fonctions préférées implémentées sur un site Web. Beaucoup ne semblent pas être appliqués de manière accessible et adaptée de façon universelle à ce que je nomme le &#171;&#160;Keyboard friendly&#160;&#187;. Quelques exemples courants: Pas de véritables liens : les sous-liens ne peuvent être révélés sans [...]]]></description>
			<content:encoded><![CDATA[<p>Les menus déroulants ne sont pas sur ma liste personnelle de fonctions préférées implémentées sur un site Web.<br />
 Beaucoup ne semblent pas être appliqués de manière accessible et adaptée de façon universelle à ce que je nomme le &laquo;&nbsp;Keyboard friendly&nbsp;&raquo;.</p>
<p>Quelques exemples courants:</p>
<ul>
<li> <strong>Pas de véritables liens :</strong> les sous-liens ne peuvent être révélés sans l&#8217;aide d&#8217;une souris, les utilisateurs de clavier &laquo;&nbsp;exclusif&nbsp;&raquo; sont donc automatiquement mis hors de portée de l&#8217;accessibilité au contenu. Pourquoi ne pas ajouter des indications pour les claviers ?  De cette façon, les menus déroulants n&#8217;empêchent pas les gens de naviguer dans le site et peut être vu comme une amélioration pour les utilisateurs &laquo;&nbsp;keyboard only&nbsp;&raquo;. </li>
<li> <strong>Tabulation &laquo;&nbsp;trou noir&nbsp;&raquo; :</strong> les sous-liens ne sont pas affichés sur le focus mais existent dans l&#8217;ordre de tabulation, ce qui les rend accessible techniquement, mais crée également un &laquo;&nbsp;trou noir de tabulation&nbsp;&raquo; pour les non-utilisateurs de souris. Comme il n&#8217;y a pas de retour visuel, sauf si vous utilisez une souris, ils sont extrêmement difficiles à utiliser. </li>
</ul>
<p>La prochaine fois que vous mettez en place un menu déroulant, s&#8217;il vous plaît, assurez-vous d&#8217;éviter ces problèmes qui sont corrigibles avec un code HTML simple.<br />
 Et le petit plus, c&#8217;est mieux pris en compte par les moteurs de recherche, avis aux experts SEO !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2010/01/menu-deroulant-keyboard-friendly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Background-image, pensez à la couleur de fond</title>
		<link>http://www.justelezeste.com/2009/12/background-image-pensez-a-la-couleur-de-fond/</link>
		<comments>http://www.justelezeste.com/2009/12/background-image-pensez-a-la-couleur-de-fond/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 12:36:55 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Ergonomie - Usability - UX]]></category>
		<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=299</guid>
		<description><![CDATA[A chaque fois que vous spécifiez une image d&#8217;arrière-plan dans votre CSS, prenez en compte ce qui peut arriver lorsque l&#8217;image est manquante. S&#8217;il y a un texte au dessus de l&#8217;image, est-il toujours lisible ? Si non, spécifiez une couleur pour le navigateur pour l&#8217;utiliser à la place de l&#8217;image ainsi le texte deviendra [...]]]></description>
			<content:encoded><![CDATA[<p>A chaque fois que vous spécifiez une image d&#8217;arrière-plan dans votre CSS, prenez en compte ce qui peut arriver lorsque l&#8217;image est manquante.<br />
 S&#8217;il y a un texte au dessus de l&#8217;image, est-il toujours lisible ? Si non, spécifiez une couleur pour le navigateur pour l&#8217;utiliser à la place de l&#8217;image ainsi le texte deviendra lisible à nouveau.<span id="more-299"></span></p>
<p>Pourquoi une image peut-elle être manquante ? De nombreuses possibilités peuvent générées des images non visibles, problèmes de réseaux et paramètres utilisateurs.<br />
 Ci-dessous, voici un CSS qui peut convenir.</p>
<ol>
<li><code>body {</code></li>
<li><code>color:#000;</code></li>
<li><code>background-color:#fff;</code></li>
<li><code>}</code></li>
<li><code>#my-element {</code></li>
<li><code>color:#fff; /* white */</code></li>
<li><code>background-image:url(my-blue-image.png);</code></li>
<li><code>background-color:#2f4b8e; /* blue */</code></li>
<li><code>}</code></li>
</ol>
<p><br class="spacer_" /></p>
<p>Source : <a href="http://www.456bereastreet.com" target="_blank">456BereaStreet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/12/background-image-pensez-a-la-couleur-de-fond/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gagner du temps en entreprise</title>
		<link>http://www.justelezeste.com/2009/12/gagner-du-temps-en-entreprise/</link>
		<comments>http://www.justelezeste.com/2009/12/gagner-du-temps-en-entreprise/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 12:26:47 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=294</guid>
		<description><![CDATA[Source : ConseilMarketing Dans le numéro 373 d’Enfants Magazine de septembre dernier, la journaliste donnait 20 idées pour mieux s’organiser pour les mères de famille qui sont débordées… A la lecture de cet ancien magazine, je me suis dit que ces conseils pouvaient très bien s’appliquer à l’entreprise… Voici le résultat de cette réflexion ! [...]]]></description>
			<content:encoded><![CDATA[<p>Source : <a href="http://www.conseilsmarketing.fr/autres-conseils-marketing/20-trucs-de-mere-de-famille-pour-gagner-du-temps-en-entreprise" target="_blank">ConseilMarketing</a> <br />
Dans le numéro 373 d’Enfants Magazine de septembre dernier, la journaliste donnait <strong>20 idées pour mieux s’organiser pour les mères de famille qui sont débordées</strong>…<br />
 A la lecture de cet ancien magazine, je me suis dit que <strong>ces conseils pouvaient très bien s’appliquer à l’entreprise</strong>… Voici le résultat de cette réflexion !<span id="more-294"></span></p>
<p><strong>1 – Organisez et planifiez votre journée avec soin entre les tâches prioritaires et secondaires à effectuer en plus des tâches habituelles. </strong><br />
 C’est très utile aux mères de famille qui veulent trop en faire et qui finalement manquent l’objectif principal de la journée et qui se dispersent avec des tâches mineures…<br />
 <em>En entreprise il faut également se fixer des priorités pour la journée et la semaine… et des objectifs longs termes !</em></p>
<p><strong>2 – Ne jouez pas aux héroïnes</strong><br />
 Si votre belle mère ou votre copine vous demande de l’aide vous n’êtes pas obligée de dire toujours Oui !<br />
 <em>En entreprise c’est la même chose, vous devez apprendre à dire non à ceux qui vous demandent de faire leur travail tout simplement car ils ont la flemme ou que vous êtes la “bonne poire”.</em></p>
<p><strong>3 – Mettez vos enfants à contribution.</strong><br />
 En fonction de leurs âges et leurs préférences, confiez leur des tâches (mettre le couvert, essuyer la vaisselle…). Si nécessaire dressez un tableau des “corvées” pour éviter les sempiternels “C’est son tour” ou “c’est toujours à moi de le faire”.<br />
 <em>En entreprise c’est tout simplement apprendre à déléguer et à ne pas vouloir tout faire soit même… mais également à être juste et à établir des règles écrites. </em></p>
<p><strong>4 – Faites vos courses malin.</strong><br />
 Faire les courses c’est parfois le stress : place de parking introuvable, enfants qui font des caprices… Profitez donc d’internet pour vous faire livrer chez vous à l’heure qui vous convient même si c’est un peu plus cher !<br />
 <em>En entreprise c’est faire appel à des services qui peuvent automatiser vos tâches administrative : service de sauvegarde automatique de votre disque dur, faire une “réunion sandwich” le midi si les agendas sont remplis, commander par internet vos produits au lieu d’aller les chercher…</em></p>
<p><strong>5 – Prévoyez les imprévus</strong><br />
 Prévoir c’est anticiper. Les super mamans ne remplissent qu’à 60% leur planning quotidien pour laisser de la place à l’imprévu sans culpabiliser.<br />
 <em>En entreprise vous devez aussi éviter de charger votre agenda à 100% avec des réunions. Planifiez des réunions avec vous-même pour vous réserver des créneaux de travail et de réflexion.</em></p>
<p><strong>6- Utilisez les services à domicile</strong><br />
 Désormais avec le CESU et les déductions d’impôts faire appel à une entreprise d’aide à domicile n’est plus compliqué ni trop onéreux. Vous vous pouvez même demander de l’aide pour 1h seulement.<br />
 <em>En entreprise c’est parfois sous-traiter à une agence plutôt que vouloir tout faire soit même (ex: organiser un évènement, faire des impressions couleur…).</em></p>
<p><strong>7 – Ne laissez pas les objets vous envahir</strong><br />
 Une fois par mois faites le ménage: classez ce qui doit être conservé, et jetez le reste… Cela permet de ne plus perdre de temps à chercher dans des placards remplis et de gagner de la place.<br />
 Par exemple jetez les prospectus dès réception, faites vos comptes sur internet…<br />
 <em>En entreprise vous devez également éviter que le désordre ne vienne perturber votre esprit… Quand un email arrive soit vous le lisez, soit vous le jetez, soit vous l’archivez… Pour vos dossiers en cours, organisez-les via des chemises de différentes couleurs que vous étalez sur votre bureau, vous aurez une meilleure vision de votre travail et vous aurez l’impression de maîtriser vos dossiers.</em></p>
<p><strong>8 – Planifiez en famille</strong><br />
 Utilisez un calendrier où toute la famille pourra indiquer les dates clés : fêtes de l’école, weekend chez les grands parents, anniversaires… Vous éviterez les clashs (tu m’avais promis que tu serais là pour….) et les mauvaises surprises.<br />
 <em>En entreprise il faut utiliser les agendas partagés (Outlook, Google Agenda ou ACT!), avec si possible une synchronisation avec votre iPhone ou votre PDA.</em></p>
<p><strong>9 – Evitez les économies chronophages !</strong><br />
 Courir chez le pressing le moins cher à l’autre bout de la ville, chercher le fameux pain au 4 céréales chez le meilleur boulanger… est couteux en temps et en énergie… Privilégiez ce qui est proche de chez vous.<br />
 <em>En entreprise il faut savoir se concentrer sur sa valeur ajoutée et consacrer du temps à ce qui va vous rapporter le plus… Cela peut se faire via la sous-traitance, l’organisation de réunion téléphonique ou de visio conférences au lieu d’un premier rendez-vous physique, c’est identifier les affaires qui ont le plus de chance de se concrétiser, c’est automatiser les relances de ses devis…</em></p>
<p><strong>10 – Dressez la veille au soir la table du petit déjeuner.</strong><br />
 Et investissez dans une cafetière programmable qui vous fera le café automatiquement tous les matins…<br />
 <em>En entreprise c’est la même chose : vous devez planifier vos journées de travail, mais également mettre en place des chaines de prospection et de fidélisation avec l’envoi automatique de messages, mais aussi la planification d’action dans votre agenda.</em></p>
<p><strong>11 – Créez-vous un réseau !</strong><br />
 Profitez des fêtes de l’école, des réunions de parents d’élèves… pour mutualiser des services entre parents (emmener les enfants à l’école, ramener les enfants depuis le judo…).<br />
 <em>En entreprise il est essentiel de travailler son réseau, que cela soit via des soirées networking entre professionnels, un réseau social professionnel… Ainsi vous pouvez mutualiser vos coûts et mettre en place des partenariats : échanges de visibilité, emailings croisés, journées portes ouvertes, matinée découvertes…</em></p>
<p><span id="more-5243"> </span></p>
<p><strong>12 – Pensez “Lundi c’est ravioli” !</strong><br />
 Prévoyez un menu par jour : cela permet de ne pas se creuser la tête, vous prévoyez vos courses et vous faites des repas équilibrés.<br />
 <em>En entreprise vous devez planifier des plages réservées à la réflexion stratégique (évolution de votre business, plan d’action long terme…) pour ne pas rester la tête dans le guidon.<br />
 Et au contraire vous devez prévoir des actions récurrentes chaque mois afin de rythmer votre activité avec des opérations qui sont simples et faciles à réactualiser (newsletter, promotion…).</em></p>
<p><strong>13 – Passez quelques minutes à préparer le lendemain avec vos enfants.</strong><br />
 D’abord cela rassurera vos enfants sur ce qu’ils auront à faire, et cela leur donnera moins l’impression de tout décider à leur place… enfin cela vous permettra de ne rien oublier !<br />
 <em>En entreprise c’est faire une réunion mensuelle avec vos équipes, mais également de faire des réunions individuelles hebdomadaires pour faire un point sur l’activité, refixer les priorités, prendre des décisions…</em></p>
<p><strong>14 – Etablissez des règles avec votre conjoint.</strong><br />
 Faites le point sur ce qui ne marchait pas l’année dernière et trouvez ensemble des solutions pour l’améliorer, et essayez de jouer la complémentarité (inutile que 2 personnes vérifient 2 fois que les enfants sont prêts).<br />
 <em>En entreprise il faut faire un entretien annuel pour faire un point sur l’activité d’un salarié et voir les points de satisfaction et les thèmes à améliorer. Mais c’est aussi mettre en place régulièrement des task forces sur des sujets particuliers afin d’avancer sur un sujet précis.</em></p>
<p><strong>15 – Congélez !</strong><br />
 Lorsque que vous préparez des plats complets faites en deux fois plus et congelez le tout. Ainsi vous le temps de préparation sera rentabilisé sur 2 repas, et vous aurez des repas de prêts en cas d’imprévu.<br />
 <em>En entreprise lorsque vous réalisez une opération, il est essentiel de réutiliser au maximum ce qui a été réalisé (template d’emailing, salon…) pour le refaire plus tard (en changeant quelques éléments), mais aussi en les ré-exploitant sous différentes formes (ex: un article de blog peut être utilisé via un résumé sur Powerpoint, via une vidéo…).</em></p>
<p><strong>16 – Anticipez le biberon de la nuit.</strong><br />
 Il suffit de le préparer le soir même, de le mettre au réfrigérateur et de le réchauffer au micro onde à 3h du matin…<br />
 <em>En entreprise il est essentiel de prévoir un budget supplémentaire pour les opportunités qui pourraient se présenter (publicité, partenariat…). De même vous pouvez prévoir une action sous le coude (ou l’adaptation d’une action existante…) pour la sortir si votre business commence à se ramollir. Enfin vous pouvez faire une veille concurrentielle sur votre secteur, et mettre dans une bibliothèque des idées que vous pourrez réutiliser dans votre secteur d’activité en suivant ce qui se fait ailleurs.</em></p>
<p><strong>17 – Gardez en permanence un change dans la voiture.</strong><br />
 Grâce à cela vous pourrez faire face aux petits imprévus sans devoir faire demi tour pour retourner chercher un change à la maison.<br />
 <em>En entreprise lorsque vous organisez un évènement, un emailing… vous devez toujours prévoir un plan B pour parer aux imprévus. Par exemple si votre site plante, vous devez prévoir un hébergement de secours avec un miroir de votre site.</em></p>
<p><strong>18 – Apprenez à dire non !</strong><br />
 Mais il faut le faire fermement, et surtout définitivement !<br />
 <em>En entreprise parfois il faut savoir dire non à un client, si vous savez que le client ne va que vous attirer des ennuis, ou si ce qu’il réclame n’est pas rentable pour votre entreprise. Si vous ne pouvez pas dire non, vous devez alors absolument cadrer votre proposition commerciale en délimitant exactement ce que vous allez effectuer comme prestations, et les obligations de l’annonceur (validation, remise des éléments…).</em></p>
<p><strong>19 – Préparez vos vêtements la veille au soir !</strong><br />
 Cela vous permettra d’éviter les caprices des enfants qui ne veulent plus porter un vêtement ou la chasse à la chaussette qui manque !<br />
 <em>En entreprise c’est la même chose : préparez votre costume cravate, cirez vos chaussures le jour avant… vous serez prêt plus rapidement le matin et vous serez plus tôt au bureau !</em></p>
<p><strong>20 – Cultivez l’humour !</strong><br />
 Rire c’est très bon pour le moral et la santé, et ensuite c’est un bon moyen de faire obéir ses enfants (”Le premier dans le bain à gagné…”).<br />
 <em>En entreprise, plutôt que de s’énerver ou de faire des entretiens de recadrage, jouez également sur l’humour, cela détendra tout de suite l’atmosphère et cela vous évitera que vos collaborateurs ne se braquent à la moindre remarque…</em></p>
<p>&#8230;</p>
<p><br class="spacer_" /></p>
<p>Source : <a href="http://www.conseilsmarketing.fr/autres-conseils-marketing/20-trucs-de-mere-de-famille-pour-gagner-du-temps-en-entreprise" target="_blank">ConseilMarketing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/12/gagner-du-temps-en-entreprise/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>7 erreurs en accessibilité</title>
		<link>http://www.justelezeste.com/2009/12/7-erreurs-en-accessibilite/</link>
		<comments>http://www.justelezeste.com/2009/12/7-erreurs-en-accessibilite/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:52:50 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=290</guid>
		<description><![CDATA[L’accessibilité est vraiment quelque chose de très présent sur la toile. Mais l’accessibilité est un réel métier, ce n’est pas juste faire valider son site W3C, et même si le fait de mettre une balise alt à toutes ses images correspond bien à de l’accessibilité, cette dernière touche à des domaines beaucoup plus variés est [...]]]></description>
			<content:encoded><![CDATA[<p>L’accessibilité est vraiment quelque chose de très présent sur la toile. Mais l’accessibilité est un réel métier, ce n’est pas juste faire valider son site W3C, et même si le fait de mettre une balise alt à toutes ses images correspond bien à de l’accessibilité, cette dernière touche à des domaines beaucoup plus variés est pointu (WYSIWYG, captchas, WIA triple-A, etc.). Quand je dis que l’accessibilité est un vrai métier, ce n’est pas réellement juste. L’accessibilité est directement liée aux savoirs faires des développeurs et des intégrateurs, mais pas forcement un métier à part.<span id="more-290"></span></p>
<p><a title="Le site de Christian Heilmann." hreflang="en" href="http://icant.co.uk/">Christian Heilmann</a>, nous fait part dans un article traduit par pompage.net, de son expérience en temps que développeur.</p>
<p><a href="http://www.pompage.net/pompe/sept-erreurs-accessibilite-1/" target="_blank">http://www.pompage.net/pompe/sept-erreurs-accessibilite-1/</a></p>
<p><a href="http://www.pompage.net/pompe/sept-erreurs-accessibilite-2/" target="_blank"> http://www.pompage.net/pompe/sept-erreurs-accessibilite-2/</a></p>
<ul>
<li>Erreur #1 : <strong>Croire en des produits sans les avoir testés</strong>. Ce n’est pas drôle de découvrir au milieu d’un développement que le <abbr title="Content Management System">CMS</abbr> n’aide pas vraiment à créer un balisage propre, ou que l’application utilisée crache des contrôles qui sont uniquement utilisables avec une souris.</li>
<li>Erreur #2 : <strong>Prendre trop de responsabilités</strong>. Parfois nous donnons l’impression au client que tout ce qu’il a à faire pour créer un produit accessible est de croire en nous ! Nous devrions aider le client à comprendre que lorsque qu’il s’agit de la maintenance du produit, l<em>‘accessibilité est autant de sa responsabilité que de la nôtre</em>.</li>
<li>Erreur #3 : <strong>Prévoir uniquement le pire des scénarios</strong>. Trop souvent, nous voyons l’accessibilité comme le fait de faire un design pour le plus petit dénominateur, gardant ainsi en vie le mythe selon lequel les produits accessibles doivent être laids et approximatifs.</li>
<li>Erreur #4 : <strong>Partager les problèmes avec le visiteur</strong>. Il est tentant de faire subir à l’utilisateur nos propres problèmes de sécurité. Pourquoi vos visiteurs devraient-ils passer à travers plusieurs étapes d’un processus d’inscription pour vous poser une question ? C’est votre problème si vous recevez du spam !</li>
<li>Erreur #5 : <strong>Essayer de résoudre des problèmes qui sont en dehors de notre domaine de compétences</strong>. L’utilisation de gadget par des scripts clients sont-ils appropriés ? L’exemple des gestions de la taille des polices est frappant, car ce sont des fonctionnalités gérees par le navigateur.</li>
<li>Erreur #6 : <strong>Cacher ou écraser des améliorations d’accessibilité/utilisabilit</strong>é. Les liens ont plusieurs états, tout comme les éléments de formulaires, mais bien souvent, pour des raisons d’esthétisme nous limitons ces états alors qu’ils ont une réelle raison d’être.</li>
<li>Erreur #7 : <strong>Satisfaire votre client, et pas <em>leurs</em> clients.</strong> Nous sommes engagés comme des experts, et non pas comme des valets. N’oubliez pas que le meilleur moyen de faire passer vos idées et vos arguments passe par la pédagogie !</li>
</ul>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>Source : Ergonomie Utilisateur</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/12/7-erreurs-en-accessibilite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>N&#8217;oubliez pas d&#8217;ajouter un doctype</title>
		<link>http://www.justelezeste.com/2009/11/noubliez-pas-dajouter-un-doctype/</link>
		<comments>http://www.justelezeste.com/2009/11/noubliez-pas-dajouter-un-doctype/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 13:14:22 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>
		<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=287</guid>
		<description><![CDATA[Ajouter un quoi ? Il n&#8217;y a pas qu&#8217;un seul type de HTML, il y en a plusieurs : HTML 4.01 Strict, HTML 4.01 Transitionnel, XHTML 1.0 Strict, et d&#8217;autres encore. Tous ces types de HTML sont définis dans leurs spécifications respectives (en langage humain), mais ils sont également définis dans un langage compréhensible par [...]]]></description>
			<content:encoded><![CDATA[<h2 id="id01">Ajouter un quoi ?</h2>
<p>Il n&#8217;y a pas qu&#8217;un seul type de HTML, il y en a plusieurs : HTML 4.01 Strict, HTML 4.01 Transitionnel, XHTML 1.0 Strict, et d&#8217;autres encore. Tous ces types de HTML sont définis dans leurs spécifications respectives (en langage humain), mais ils sont également définis dans un langage compréhensible par les machines, qui précise la structure légale, les éléments et les attributs de chaque type de HTML.<span id="more-287"></span></p>
<p>Cette seconde définition s&#8217;appelle en anglais &laquo;&nbsp;Document Type Definition&nbsp;&raquo; (Définition du Type de Document) ou pour faire court, <acronym title="Définition du Type de Document (Document Type Definition)" lang="en">DTD</acronym>.</p>
<p>Les outils qui traitent les documents HTML (les navigateurs Web par exemple) ont besoin de savoir quelle  <acronym title="Définition du Type de Document (Document Type Definition)" lang="en">DTD</acronym> tel document (X)HTML utilise : c&#8217;est pourquoi chaque document (X)HTML doit commencer par une déclaration <acronym title="Définition du Type de Document (Document Type Definition)" lang="en">DTD</acronym> comme :</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
</pre>
<p>Étant donnée sa syntaxe, la déclaration DTD s&#8217;appelle souvent, pour faire simple, &laquo;&nbsp;doctype&nbsp;&raquo;.</p>
<h2 id="id02">Pourquoi ?</h2>
<p>Pourquoi préciser un docytpe ? Parce qu&#8217;il définit la version (X)HTML dont votre document se sert ; cette information est indispensable aux navigateurs et aux outils qui traitent votre document.</p>
<p>Par exemple, en précisant le doctype de votre document, vous pourrez utilisez des outils tels que le <a hreflang="en" href="http://validator.w3.org/">validateur de balisage (Markup Validator)</a> pour vérifier la syntaxe de votre document (X)HTML (et découvrir ainsi des erreurs qui pourraient altérer la façon dont votre page est rendue par différents navigateurs). De tels outils ne peuvent fonctionner que s&#8217;ils savent quel type de document vous utilisez.</p>
<p>Plus important : une déclaration doctype épargne à la plupart des navigateurs beaucoup de choses à deviner ; ainsi la page est interprétée dans un mode &laquo;&nbsp;standard&nbsp;&raquo;, dans lequel l&#8217;interprétation du document (et donc son affichage) est non seulement plus rapide, mais également cohérente et sans les mauvaises surprises que les documents sans doctype génèrent.</p>
<h2 id="read">En savoir plus</h2>
<ul>
<li><a hreflang="en" href="http://www.alistapart.com/stories/doctype/">Compléter votre site avec un Doctype (Fixing your site with the right Doctype)</a>, un article de <a href="http://www.zeldman.com/">Jeffrey Zeldman</a> sur le site <a hreflang="en" href="http://www.alistapart.com/">A List apart</a> </li>
<li>une <a hreflang="en" href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">liste de doctypes valides pour les documents (X)HTML (list of valid doctypes for (X)HTML documents)</a></li>
</ul>
<p>Source : <a href="http://www.pdimension.net" target="_blank">PDimension.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/11/noubliez-pas-dajouter-un-doctype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choix d&#8217;une Url : recommandations W3C</title>
		<link>http://www.justelezeste.com/2009/11/choix-dune-url-recommandations-w3c/</link>
		<comments>http://www.justelezeste.com/2009/11/choix-dune-url-recommandations-w3c/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 11:15:16 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=282</guid>
		<description><![CDATA[Le choix d&#8217;une Url ne doit jamais être fait au hasard par le développeur au moment où il crée la page. Le nom d&#8217;une page doit être réfléchi surtout pour les visiteurs et les moteurs de recherche. Comment choisir l&#8217;intitulé d&#8217;une Url ? Peut-on l&#8217;écrire / la mémoriser facilement ? Peut-on l&#8217;épeler ? L&#8217;intitulé donne-t-il [...]]]></description>
			<content:encoded><![CDATA[<p>Le choix d&#8217;une Url ne doit jamais être fait au hasard par le développeur au moment où il crée la page.<br />
 Le nom d&#8217;une page doit être réfléchi surtout pour  les visiteurs et les moteurs de recherche.</p>
<h3>Comment choisir l&#8217;intitulé d&#8217;une Url ?</h3>
<p>Peut-on l&#8217;écrire / la mémoriser facilement ? <br />
 Peut-on l&#8217;épeler ?<br />
 L&#8217;intitulé donne-t-il des informations sur le contenu de la page ?</p>
<p>Cela peut apparaitre très basique, mais au vu de nombreux sites qui ne l&#8217;appliquent pas, un petit rappel ne fait jamais de mal.</p>
<p>De plus, pour aisément re-écrire une Url, il convient d&#8217;utiliser différents paramètres d&#8217;Url Rewriting présent dans un fichier .htaccess (sous Apache, bien entendu).<br />
 Voici un exemple simple permettant de transformer l&#8217;adresse : http://www.monsite.com/test.php en http://www.monsite/test</p>
<pre>RewriteEngine on
 RewriteCond %{REQUEST_FILENAME}.php -f
 RewriteRule ^(.*)$ $1.php [L]</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/11/choix-dune-url-recommandations-w3c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analyse stratégique en management de projet</title>
		<link>http://www.justelezeste.com/2009/11/analyse-strategique-en-management-de-projet/</link>
		<comments>http://www.justelezeste.com/2009/11/analyse-strategique-en-management-de-projet/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 16:57:10 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=253</guid>
		<description><![CDATA[La gestion de projet ou conduite de projet est une démarche visant à structurer, assurer et optimiser le bon déroulement d’un projet. Gérer et animer un projet, être chef de projet c&#8217;est d&#8217;abord savoir en négocier l&#8217;objectif mais aussi mettre en œuvre les compétences et outils de l&#8217;analyse fonctionnelle, de planification (WBS, PERT, Gantt), gérer [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.justelezeste.com/wp-content/uploads/2009/11/management-id77retail.jpg"><img class="alignnone size-full wp-image-268" title="management-id77retail" src="http://www.justelezeste.com/wp-content/uploads/2009/11/management-id77retail.jpg" alt="management-id77retail" width="580" height="200" /></a></p>
<p>La gestion de projet ou conduite de projet est une démarche visant à structurer, assurer et optimiser le bon déroulement d’un projet.<br />
 Gérer et animer un projet, être chef de projet c&#8217;est d&#8217;abord savoir en négocier l&#8217;objectif mais aussi mettre en œuvre les compétences et outils de l&#8217;analyse fonctionnelle, de planification (WBS, PERT, Gantt), gérer un budget, maîtriser des risques, animer et motiver une équipe-projet tout cela en conciliant les intérêts du maitre d&#8217;ouvrage et des parties prenantes.<br />
 Les livrables doivent être clairement définis pour un résultat conforme à des normes de qualité, pour le moindre coût et dans le meilleur délai possible. <span id="more-253"></span></p>
<h3>1. Faire le diagnostic d’un projet</h3>
<h4>– Le triangle qualité-coûts-délais</h4>
<p><img class="size-full wp-image-254 alignright" title="cost_time_scope_triangle" src="http://www.justelezeste.com/wp-content/uploads/2009/11/cost_time_scope_triangle.gif" alt="cost_time_scope_triangle" width="244" height="257" />Budget = synthèse de toutes les ressources utilisées : salaires, achats, machines, prototypage, prestations externes…<br />
 Temps = un projet est limité dans le temps : pénalités de retard, date de fin imposée…<br />
 Qualité = spécifications techniques : plus de fonctions, de fiabilité, d’ergonomie…</p>
<p>En pratique…</p>
<p>L&#8217;amélioration d’une composante … Par exemple finir plus vite … est possible, mais avec une détérioration des deux autres. Par exemple, pour gagner du temps on dégrade les coûts et la qualité … ou si on veut être plus exigeant sur le livrable … alors il faudra accepter d’attendre et de payer plus cher.<br />
 Un projet peut se représenter comme un point dans ce triangle …</p>
<h4>– Pilotage et acteurs du projet</h4>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="10" frame="box" rules="all">
<tbody>
<tr style="height: 28px; width: 50%;">
<td><strong>Ceux qui &#8230;</strong></td>
<td><strong>Sont les &#8230;</strong></td>
</tr>
<tr>
<td>Demandent, payent, utilisent … ou décident d’arrêter le projet</td>
<td>Client maitre d’ouvrage, commanditaire, destinataire..</td>
</tr>
<tr style="height: 28px; width: 50%;">
<td>Pilotent le projet</td>
<td>Chef de projet, maitre d’oeuvre, directeur de projet, coordonateur de rojet</td>
</tr>
<tr>
<td>Réalisent le projet</td>
<td>Equipe-projet (acteurs projet à plein temps, mais aussi acteurs métiers « fonctionnels », prestataires externes, Consultants )</td>
</tr>
<tr>
<td>Sans en faire formellement partie, soutiennent (ou s’opposent) au projet</td>
<td>Parrains, fans, personnes et organisations impactées<br />
 = Parties prenantes (stakeholders)</td>
</tr>
</tbody>
</table>
<h4>A quoi sert un consultant ?</h4>
<p>• Agent de changement : – aide à définir des objectifs réalistes en qualité/délai/coût <br />
 • Expert : – sur des domaines pointus, apporte des conseils et propose des pistes <br />
 • Formateur : – lorsque le consultant n&#8217;est pas là, il reste un apprentissage. <br />
 • Personne-ressource : – force de travail <br />
 • Certificateur : – valide et certifie les compétences acquises <br />
 <em><strong>Un consultant se paye et on négocie son apport. </strong></em></p>
<h4>Analyse stratégique des acteurs du projet</h4>
<p>Pour tous les acteurs du projet : <br />
 – Identifier leurs enjeux :  pourquoi s&#8217;est-il impliqué au début ? pourquoi reste t-il impliqué ? atouts et handicaps pour agir sur le projet.<br />
 – Stratégie adoptée.<br />
 – Le projet est un système d’action.</p>
<p>Ces données sont dynamiques : les comprendre est la responsabilité du manager de projet exploiter la marge de manœuvre cachée, redéfinir certaines composantes du projet, négocier&#8230;</p>
<h3>2. Comprendre et gérer les ressources humaines</h3>
<p><strong>Les différents types de tâches … et leur facteurs-clés de succès</strong><br />
 1. Tâches additives : pousser une voiture à plusieurs,  risque = &laquo;&nbsp;passager clandestin&nbsp;&raquo;<br />
 2. Tâches communes ou indispensables : cordée,  risque = &laquo;&nbsp;facteur limitant&nbsp;&raquo;<br />
 3. Tâches disjointes : réponse à trouver,  risque = &laquo;&nbsp;importance du champion&nbsp;&raquo;<br />
 4. Tâches discrétionnaires : brainstorming,  risque = &laquo;&nbsp;coordination complexe&nbsp;&raquo;</p>
<h4>La motivation</h4>
<p>Par la stimulation : source de motivation extérieure au travail/projet =&gt; approche externe<br />
 – Approche taylorienne : paiement aux pièces aliénation au travail<br />
 Par les besoins : motivation = processus interne de satisfaction<br />
 – c’est la fameuse pyramide de Maslow.<br />
 <a href="http://www.justelezeste.com/wp-content/uploads/2009/11/maslow.png"><img class="alignnone size-full wp-image-264" title="maslow" src="http://www.justelezeste.com/wp-content/uploads/2009/11/maslow.png" alt="maslow" width="350" height="253" /></a></p>
<h4>La motivation : comment la créer ?</h4>
<p>D’après l’approche par les critères, on ne peut donc pas « motiver » quelqu&#8217;un, la motivation a une origine interne à l’individu.<br />
 • Le management consiste donc à … <br />
 – Identifier, puis<br />
 – …créer les conditions de la motivation<br />
 Plus de « recette » de motivation mais une équation :<br />
 Critères + contexte = motivation<br />
 – Ne pas mettre quelqu&#8217;un dont les critères sont l&#8217;apprentissage, la prise de risques, et le travail en équipe sur une mission en solitaire, facile et sans enjeu fort =&gt; désintérêt, démission.<br />
 Attention à l&#8217;effet Pygmalion !</p>
<h4>La motivation : comment trouver les critères</h4>
<p>Commencer par éclaircir votre propre motivation<br />
 – Revenir sur vos expériences vécues, faire de l&#8217;introspection<br />
 • Comprendre la motivation des autres<br />
 – Observer le comportement quotidien : indices<br />
 – Écouter, maintenir un contact informel, poser des questions<br />
 • De la motivation individuelle à la dynamique de groupe<br />
 – Créer une identité de groupe<br />
 – Faire émerger les différences crée une dynamique, utiliser les autres groupes comme benchmark<br />
 – Dialoguer, décider ensemble,<br />
 • Critères partagés + vision de l&#8217;avenir =&gt; motivations =&gt; actions<br />
 – L&#8217;espace symbolique (nom, logo, rites)<br />
 – &#8230;</p>
<h3>3 &#8211; Animer un projet : conclusions</h3>
<p>• Revenir périodiquement sur la motivation et ses raisons<br />
 – Ne pas perdre de vue le sens et les critères du projet, surtout pour l’équipe<br />
 • Ne pas chercher à convaincre ceux qui sont moins motivés<br />
 – Mais confier des actions aux hésitants qui leur permettent de s’impliquer (théorie de l&#8217;engagement : action &gt; opinion).<br />
 • Les règles de fonctionnement et les objectifs sont primordiaux :<br />
 – Avoir une charte de travail en commun avant tout<br />
 – Ont-ils été construits par tous ? Sont-ils partagés ?<br />
 • Le projet traverse différentes phases et doit réussir différents types de tâches<br />
 – Savoir s&#8217;adapter en conséquence<br />
 • Ne pas laisser traîner les décisions et les actions<br />
 – Toute réunion donne des objectifs formalisés par un compte-rendu approuvé par tous.<br />
 – Jalonner le projet : des livrables précis à des dates précises<br />
 – Un retard n’est pas forcément grave, ce qui est grave c’est un retard<br />
 • Qu’on « oublie » au lieu de l’expliquer pour traiter le problème<br />
 • Qu’on « laisse filer » au lieu de réprévoir une échéance et un livrable<br />
 • Les expertises individuelles ne servent que si elles sont « maillées »<br />
 – Garder une communication régulière entre les sous-projets<br />
 • Valoriser le projet et capitaliser les connaissances au fur et à mesure<br />
 – Ne pas attendre la fin… à la fin, c’est trop tard.<br />
 • Appréhender un projet, c&#8217;est aussi comprendre et gérer un système d’action.<br />
 – Construire / entretenir un réseau d&#8217;alliés autour du projet. (cf.<br />
 analyse stratégique).</p>
<h4>Idées à retenir</h4>
<p>• Ne pas craindre de &laquo;&nbsp;perdre du temps&nbsp;&raquo; en étant rigoureux au début d&#8217;un projet pour le réussir par la suite<br />
 • Un projet peut avoir de multiples objectifs (points de vue, enjeux des acteurs). Identifier le système-client.<br />
 • Produire un livrable final n&#8217;est pas le seul critère d&#8217;évaluation de la réussite d&#8217;un projet<br />
 – Apprentissages des membres de l’équipe-projet dans tous les domaines (savoir-être…), transmission d’un savoir-faire,<br />
 amélioration de l’image, récupération par un tiers, valorisation &#8230;</p>
<p> Source : Central Lille, <a href="http://rb.ec-lille.fr/gestion_projet.htm" target="_blank">R. Bachelet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/11/analyse-strategique-en-management-de-projet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menu Dock avec JQuery</title>
		<link>http://www.justelezeste.com/2009/11/un-menu-dock-avec-jquery/</link>
		<comments>http://www.justelezeste.com/2009/11/un-menu-dock-avec-jquery/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:53:03 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=247</guid>
		<description><![CDATA[Si vous êtes un fan de Mac, vous apprécierez ce script développé avec la librairie JQuery et le composant FishEye d&#8217;Interface. Voici donc comment l&#8217;implémenter sur votre site. Voir une démo. 1 &#8211; Télécharger le menu Dock. 2 &#8211; Insertion de code Voici le code à insérer entre les balises &#60;head&#62; &#60;script type="text/javascript" src="js/jquery.js"&#62;&#60;/script&#62; &#60;script [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.justelezeste.com/wp-content/uploads/2009/11/css-dock-menu.jpg"><img class="alignnone size-full wp-image-250" title="css-dock-menu" src="http://www.justelezeste.com/wp-content/uploads/2009/11/css-dock-menu.jpg" alt="css-dock-menu" width="550" height="120" /></a><span id="more-247"></span><br />
Si vous êtes un fan de Mac, vous apprécierez ce script développé avec la librairie JQuery et le composant FishEye d&#8217;<a href="http://interface.eyecon.ro/" target="_blank">Interface</a>.<br />
Voici donc comment l&#8217;implémenter sur votre site.<br />
<a href="http://www.ndesign-studio.com/demo/css-dock-menu/css-dock.html" target="_blank">Voir une démo</a>.</p>
<h4>1 &#8211; Télécharger le <a href="http://www.justelezeste.com/wp-content/uploads/2009/11/css-dock-menu.zip">menu Dock</a>.</h4>
<h4>2 &#8211; Insertion de code</h4>
<p>Voici le code à insérer entre les balises &lt;head&gt;</p>
<p><code>&lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript" src="js/interface.js"&gt;&lt;/script&gt;</code></p>
<p><code> &lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;</code></p>
<p><code> &lt;!--[if lt IE 7]&gt;<br />
&lt;style type="text/css"&gt;<br />
.dock img { behavior: url(iepngfix.htc) }<br />
&lt;/style&gt;<br />
&lt;![endif]–&gt;</code></p>
<h4>3 &#8211; Configuration</h4>
<p>N&#8217;oubliez pas de copier ce code avant la balise &lt;body&gt;</p>
<p><code>&lt;script type="text/javascript"&gt;<br />
$(document).ready(<br />
function()<br />
{<br />
$(’#dock2′).Fisheye(<br />
{<br />
maxWidth: 60,<br />
items: ‘a’,<br />
itemsText: ’span’,<br />
container: ‘.dock-container2′,<br />
itemWidth: 40,<br />
proximity: 80,<br />
alignment : ‘left’,<br />
valign: ‘bottom’,<br />
halign : ‘center’<br />
}<br />
)<br />
}<br />
);<br />
&lt;/script&gt;</code></p>
<h4>4 &#8211; Ajouter ou retirer un item</h4>
<p>Pour ajouter un item dans un menu supérieur.<br />
<code>&lt;a href="#"&gt;&lt;img src="images/home.png" alt="home" /&gt;&lt;span&gt;Home&lt;/span&gt;&lt;/a&gt; </code></p>
<p>Pour ajouter un item dans un menu inférieur</p>
<p><code>&lt;a href="#"&gt;&lt;span&gt;Home&lt;/span&gt;&lt;img src="images/home.png" alt="home" /&gt;&lt;/a&gt;</code></p>
<h4>Compatibilité des navigateurs</h4>
<p>Ce script a été tester avec IE 6, IE 7, Opera 9, Firefox 2, and  Safari 2</p>
<p>Source : <a href="http://www.ndesign-studio.com/" target="_blank">N.Design Studio</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/11/un-menu-dock-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>le mythe de la limite de visibilité</title>
		<link>http://www.justelezeste.com/2009/11/le-mythe-de-la-limite-de-visibilite/</link>
		<comments>http://www.justelezeste.com/2009/11/le-mythe-de-la-limite-de-visibilite/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:51:29 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Ergonomie - Usability - UX]]></category>

		<guid isPermaLink="false">http://www.justelezeste.com/?p=239</guid>
		<description><![CDATA[La limite de visibilité est la ligne horizontale d’une page au-dessous de laquelle le contenu n’est plus affiché à cause de la résolution de l’écran. Apparu sur les journaux papiers aux niveaux de la pliure médiane, elle continue son existence sur le web, au delà de laquelle l&#8217;utilisation de la barre de défilement est utilisée. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-240" title="longpages" src="http://www.justelezeste.com/wp-content/uploads/2009/11/longpages.jpg" alt="longpages" width="540" height="426" /></p>
<p>La limite de visibilité est  la ligne horizontale d’une page au-dessous de laquelle le contenu n’est plus affiché à cause de la résolution de l’écran.<br />
Apparu sur les journaux papiers aux niveaux de la pliure médiane, elle continue son existence sur le web, au delà de laquelle l&#8217;utilisation de la barre de défilement est utilisée.<br />
<span id="more-239"></span><br />
il en ressort que les démonstrations marketing du siècle dernier ne sont pas celles actuelles.<br />
Pour s&#8217;affranchir de cette limite, il suffit de mettre en avant les moyens visuels qui donneront l&#8217;envie aux internautes de scroller leurs pages.</p>
<p>Un exemple permettra de s&#8217;en convaincre.<br />
La limite de visibilité tombant au milieu d&#8217;un contenu de photos et d&#8217;images aura un impact direct sur l&#8217;envie que l&#8217;utilisateur aura de faire défiler sa barre de scroll.</p>
<p><img class="alignnone size-full wp-image-241" title="Fold_Good" src="http://www.justelezeste.com/wp-content/uploads/2009/11/Fold_Good.jpg" alt="Fold_Good" width="540" height="337" /></p>
<p>Source : le bon blog <a href="http://www.simpleweb.fr/2009/10/31/en-finir-avec-le-mythe-de-la-limite-de-visibilite/" target="_blank">SimpleWeb </a>de <a href="http://www.fredcavazza.net/" target="_blank">FredCavazza</a>.<br />
Plus d&#8217;infos ? <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.boxesandarrows.com');" href="http://www.boxesandarrows.com/view/blasting-the-myth-of">Blasting the Myth of the Fold</a>, <a onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.braintraffic.com');" href="http://blog.braintraffic.com/2008/11/worried-about-content-below-the-fold-dont-be/">Worried about content “below the fold”? Don’t be</a>, <a onclick="javascript:pageTracker._trackPageview(&#039;/outbound/article/www.webmonkey.com&#039;);" href="http://www.webmonkey.com/blog/Debunking_the_Myth_of_the_Page_Fold_in_Web_Design" class="broken_link">Debunking the Myth of the Page Fold in Web Design</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justelezeste.com/2009/11/le-mythe-de-la-limite-de-visibilite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

