<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5757035952716848983</id><updated>2024-10-07T07:06:32.505+02:00</updated><category term="java"/><category term="1-wire"/><category term="Arduino"/><category term="Design Pattern"/><category term="Domotique"/><category term="Agile"/><category term="Ivy"/><category term="astuce"/><category term="owfs"/><category term="Angular Material"/><category term="Ant"/><category term="Bonnes pratiques"/><category term="CMMI"/><category term="Debian"/><category term="GQM"/><category term="Hudson"/><category term="KY040"/><category term="LCD"/><category term="Maven"/><category term="Microservices"/><category term="PMD"/><category term="POO"/><category term="RTC DS1307"/><category term="SVG"/><category term="Sonar"/><category term="c#"/><title type='text'>Le blog de BokC</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-6161781615413972782</id><published>2023-12-16T08:00:00.103+01:00</published><updated>2023-12-16T08:00:00.245+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Angular Material"/><category scheme="http://www.blogger.com/atom/ns#" term="SVG"/><title type='text'> Intégrer des icônes SVG avec Angular Material</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Angular Material, une bibliothèque d&#39;UI pour Angular, offre une panoplie
 d&#39;éléments visuels prêts à l&#39;emploi, incluant des icônes. Les icônes 
SVG, sont des images vectorielles extensibles. Elles offrent une flexibilité et une netteté visuelle 
exceptionnelle, et leur utilisation avec Angular Material peut être 
réalisée de manière transparente. Même si Angular Material propose par défaut une bonne collection d&#39;icone (liste &lt;a href=&quot;https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list/&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt;), il peut être utile d&#39;ajouter ses propres icones&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dans ce guide, nous allons voir les étapes pour intégrer et utiliser nos icônes SVG avec Angular 
Material.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Étape 1 : Installation d&#39;Angular Material&lt;/h2&gt;&lt;p&gt;Assurez-vous d&#39;avoir Angular Material installé dans votre projet Angular. Si ce n&#39;est pas déjà fait, utilisez Angular CLI pour ajouter Angular Material :&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;bg-black rounded-md&quot;&gt;&lt;div class=&quot;flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class=&quot;!whitespace-pre hljs language-bash&quot;&gt;&lt;blockquote&gt;ng add @angular/material&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Étape 2 : Intégration des icônes SVG&lt;/h2&gt;&lt;p&gt;Placez vos fichiers SVG dans un répertoire approprié de votre projet, par exemple, dans&amp;nbsp; &lt;code&gt;assets/icons&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;!whitespace-pre hljs language-bash&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Étape 3 : Création d&#39;un module pour la configuration des icônes&lt;/h2&gt;&lt;p&gt;Lors de l&#39;intégration d&#39;icônes SVG avec Angular Material, séparer la 
configuration des icônes dans un module dédié peut rendre votre code 
plus modulaire et maintenable.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Créez un nouveau fichier, par exemple &lt;code&gt;icon-config.module.ts&lt;/code&gt;, pour gérer la configuration des icônes. N&#39;oubliez pas d&#39;importer MatIconModule.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;NgModule&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;@angular/core&#39;&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;MatIconModule&lt;/span&gt;, &lt;span class=&quot;hljs-title class_&quot;&gt;MatIconRegistry&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;@angular/material/icon&#39;&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;DomSanitizer&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;@angular/platform-browser&#39;&lt;/span&gt;;

&lt;span class=&quot;hljs-meta&quot;&gt;@NgModule&lt;/span&gt;({
  &lt;span class=&quot;hljs-attr&quot;&gt;imports&lt;/span&gt;: [&lt;span class=&quot;hljs-title class_&quot;&gt;MatIconModule&lt;/span&gt;],
})
&lt;span class=&quot;hljs-keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;IconConfigModule&lt;/span&gt; {
  &lt;span class=&quot;hljs-title function_&quot;&gt;constructor&lt;/span&gt;(&lt;br /&gt;&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;      private&lt;/span&gt; matIconRegistry: MatIconRegistry,&lt;br /&gt;      &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; domSanitizer: DomSanitizer&lt;/span&gt;) {
    &lt;span class=&quot;hljs-comment&quot;&gt;// Ajoutez ici la configuration de vos icônes SVG&lt;/span&gt;
    &lt;span class=&quot;hljs-variable language_&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;hljs-property&quot;&gt;matIconRegistry&lt;/span&gt;&amp;nbsp;&lt;br /&gt;           .&lt;span class=&quot;hljs-title function_&quot;&gt;addSvgIcon&lt;/span&gt;(&#39;&lt;span class=&quot;hljs-string&quot;&gt;nom_de_votre_icone1&#39;&lt;/span&gt;,this.setPath(`${this.path}/&lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;chemin_vers_votre_icone1&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;.svg`))
           &lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;.&lt;span class=&quot;hljs-title function_&quot;&gt;addSvgIcon&lt;/span&gt;(&#39;&lt;span class=&quot;hljs-string&quot;&gt;nom_de_votre_icone2&#39;&lt;/span&gt;,this.setPath(`${this.path}/&lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;chemin_vers_votre_icone&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;2.svg`)&lt;/code&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;);
  }&lt;/code&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;  private setPath(url: string): SafeResourceUrl {&lt;br /&gt;      return this.domSanitizer.bypassSecurityTrustResourceUrl(url);&lt;br /&gt;  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Étape 4 : Intégration du module dans votre application&lt;/h2&gt;&lt;p&gt;Dans votre module principal (&lt;code&gt;app.module.ts&lt;/code&gt;), importez et utilisez &lt;code&gt;IconConfigModule&lt;/code&gt; :&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;bg-black rounded-md&quot;&gt;&lt;div class=&quot;flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre&gt;&lt;div class=&quot;bg-black rounded-md&quot;&gt;&lt;div class=&quot;p-4 overflow-y-auto&quot;&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;NgModule&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;@angular/core&#39;&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;BrowserModule&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;@angular/platform-browser&#39;&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;hljs-title class_&quot;&gt;IconConfigModule&lt;/span&gt; } &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;./icon-config.module&#39;&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;// Chemin vers votre module d&#39;icônes&lt;/span&gt;

&lt;span class=&quot;hljs-meta&quot;&gt;@NgModule&lt;/span&gt;({
  &lt;span class=&quot;hljs-attr&quot;&gt;declarations&lt;/span&gt;: [
    &lt;span class=&quot;hljs-comment&quot;&gt;// ...&lt;/span&gt;
  ],
  &lt;span class=&quot;hljs-attr&quot;&gt;imports&lt;/span&gt;: [
    &lt;span class=&quot;hljs-title class_&quot;&gt;BrowserModule&lt;/span&gt;,
    &lt;span class=&quot;hljs-title class_&quot;&gt;IconConfigModule&lt;/span&gt;,
    &lt;span class=&quot;hljs-comment&quot;&gt;// ...&lt;/span&gt;
  ],
  &lt;span class=&quot;hljs-attr&quot;&gt;providers&lt;/span&gt;: [],
  &lt;span class=&quot;hljs-attr&quot;&gt;bootstrap&lt;/span&gt;: [&lt;span class=&quot;hljs-title class_&quot;&gt;AppComponent&lt;/span&gt;],
})
&lt;span class=&quot;hljs-keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;AppModule&lt;/span&gt; {
  // ...
}
&lt;/blockquote&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Étape 5 : Utilisation des icônes SVG&lt;/h2&gt;&lt;p&gt;Une fois la configuration effectuée, utilisez les icônes SVG dans votre application avec &lt;code&gt;&amp;lt;mat-icon&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&amp;nbsp;&lt;code class=&quot;!whitespace-pre hljs language-html&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;mat-icon&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;svgIcon&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;nom_de_votre_icone&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;mat-icon&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;En suivant ces étapes, vous pouvez intégrer facilement des icônes SVG dans votre application Angular utilisant Angular Material, offrant ainsi une interface utilisateur esthétique et personnalisée.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;code class=&quot;!whitespace-pre hljs language-html&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;!whitespace-pre hljs language-typescript&quot;&gt;&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/6161781615413972782/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2023/12/integrer-des-icones-svg-avec-angular.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6161781615413972782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6161781615413972782'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2023/12/integrer-des-icones-svg-avec-angular.html' title=' Intégrer des icônes SVG avec Angular Material'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-59783853573661972</id><published>2023-03-29T08:00:00.002+02:00</published><updated>2023-12-19T16:32:31.663+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="Design Pattern"/><title type='text'>Design Pattern Composite : exemple C#</title><content type='html'>&lt;p&gt;&amp;nbsp;Voila un exemple simple en C# pour illustrer le &lt;a href=&quot;http://bokc-fr.blogspot.fr/2010/04/design-pattern-composite.html&quot;&gt;pattern composite&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;h3&gt;
&lt;b&gt;Diagramme UML&lt;/b&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibSVwVF_TjTyJaa9Izs9McogRdPpFwimzug31gyQ0vb_sl_FVKYt-ELvUO1Y3gAtgqMKl6B-JQBMxa94-_x4dA6OiCdBVhyphenhyphenkPgII_X85P-aNqcMfMjDHhYhsqzvbpXphMsfcDY7VlOe3kb/s1600/compositeJava.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibSVwVF_TjTyJaa9Izs9McogRdPpFwimzug31gyQ0vb_sl_FVKYt-ELvUO1Y3gAtgqMKl6B-JQBMxa94-_x4dA6OiCdBVhyphenhyphenkPgII_X85P-aNqcMfMjDHhYhsqzvbpXphMsfcDY7VlOe3kb/s320/compositeJava.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Les sources&lt;/h3&gt;&lt;p&gt;
&lt;b&gt;La classe Forme&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;div style=&quot;margin-left: 40px; text-align: left;&quot;&gt;abstract class Forme&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected string nom;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Forme(string nom)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.nom = nom;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual void Ajouter(Forme f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new NotImplementedException();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual void Retirer(Forme f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new NotImplementedException();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual void Afficher(int profondeur)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(new string(&#39;-&#39;, profondeur) + nom);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public abstract double CalculerAire();&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;La classe Carre&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote&gt;class Carre : Forme&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private double cote;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Carre(string nom, double cote) : base(nom)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.cote = cote;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override double CalculerAire()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return cote * cote;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;La classe Cercle&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote&gt;class Cercle : Forme&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private double rayon;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Cercle(string nom, double rayon) : base(nom)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.rayon = rayon;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override double CalculerAire()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Math.PI * rayon * rayon;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;La classe Composite&lt;/b&gt;&lt;br /&gt;
&lt;blockquote&gt;class Composite : Forme&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&amp;lt;Forme&amp;gt; enfants = new List&amp;lt;Forme&amp;gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Composite(string nom) : base(nom)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Ajouter(Forme f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enfants.Add(f);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Retirer(Forme f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enfants.Remove(f);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Afficher(int profondeur)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(new string(&#39;-&#39;, profondeur) + &quot;+ &quot; + nom);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Forme enfant in enfants)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enfant.Afficher(profondeur + 2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override double CalculerAire()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double aire = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Forme enfant in enfants)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aire += enfant.CalculerAire();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return aire;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;Exemple d&#39;utilisation :&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 40px; text-align: left;&quot;&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Composite groupe1 = new Composite(&quot;Groupe 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe1.Ajouter(new Cercle(&quot;Cercle 1&quot;, 3));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe1.Ajouter(new Carre(&quot;Carre 1&quot;, 4));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe1.Ajouter(new Carre(&quot;Carre 2&quot;, 5));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Composite groupe2 = new Composite(&quot;Groupe 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe2.Ajouter(new Cercle(&quot;Cercle 2&quot;, 2));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe2.Ajouter(new Carre(&quot;Carre 3&quot;, 3));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe2.Ajouter(groupe1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; groupe2.Afficher(0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&quot;Aire totale : &quot; + groupe2.CalculerAire());&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/59783853573661972/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2023/03/design-pattern-composite-exemple-c.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/59783853573661972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/59783853573661972'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2023/03/design-pattern-composite-exemple-c.html' title='Design Pattern Composite : exemple C#'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibSVwVF_TjTyJaa9Izs9McogRdPpFwimzug31gyQ0vb_sl_FVKYt-ELvUO1Y3gAtgqMKl6B-JQBMxa94-_x4dA6OiCdBVhyphenhyphenkPgII_X85P-aNqcMfMjDHhYhsqzvbpXphMsfcDY7VlOe3kb/s72-c/compositeJava.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4434678219389597521</id><published>2016-04-18T08:00:00.000+02:00</published><updated>2016-04-18T08:00:28.603+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Microservices"/><title type='text'>Les microservices - Introduction</title><content type='html'>&lt;h2&gt;
Microservices, de quoi parle t&#39;on ?&amp;nbsp;&lt;/h2&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Microservices&quot; target=&quot;_blank&quot;&gt;Wikipedia en donne la définition suivante :&lt;/a&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En informatique, les microservices est un style d&#39;architecture logiciel à partir duquel un ensemble complexe d&#39;applications est décomposé en plusieurs processus indépendants et faiblement couplées, souvent spécialisés dans une seule tâche. Les processus indépendants communiquent les uns avec les autres en utilisant des API langage-agnostiques.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Des API REST sont souvent employées pour relier chaque microservice aux autres. Un avantage avancé est que lors d&#39;un besoin critique en une ressource, seul le microservice lié sera augmenté, contrairement à la totalité de l&#39;application dans une architecture classique, par exemple une architecture trois tiers. Cependant, le coût de mise en place, en raison des compétences requises, est parfois plus élevé.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Le but est de fragmenter ce qui aurait du être une application monolithique souvent difficile à tester et maintenir en de multiples petites applications faiblement couplées qui communiquent entre elles avec des protocoles de communication simple.&lt;/div&gt;
&lt;h2&gt;
Avantages et Inconvénients &lt;/h2&gt;
&lt;h3&gt;
Les avantages&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;line-height: 1.5em; list-style-type: disc; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em; text-align: justify;&quot;&gt;Chaque microservice est relativement petit, il répond à une fonctionnalité bien spécifique. Il est donc plus facilement testable.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em; text-align: justify;&quot;&gt;Tous les services peuvent être développés de façon indépendant les uns des autres, il est donc plus facile à déployer. Chaque microservice peut donc avoir son propre langage de programmation et choisir la meilleur &quot;pile technologique&quot; pour répondre au besoin.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em; text-align: justify;&quot;&gt;Plus facile à développer, il est donc plus facile à maintenir ou à faire évoluer.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em; text-align: justify;&quot;&gt;Les pannes sont plus isolées. Si un service tombe en panne il y a peut d’impact sur les autres.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Les inconvénients&lt;/h3&gt;
&lt;ul style=&quot;line-height: 1.5em; list-style-type: disc; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Il ne faut pas sous-estimer la complexité du développement d&#39;une architecture distribuée. Il ne faut pas hésiter à utiliser des frameworks ou des librairies pour simplifier la mise en place d&#39;une telle architecture.&lt;/div&gt;
&lt;ul style=&quot;line-height: 1.5em; list-style-type: disc; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;line-height: 1.5em; list-style-type: disc; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em; text-align: justify;&quot;&gt;De par leur nombre, le déploiement et la gestion peuvent devenir complexe. Il faut mettre en place un système de monitoring.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;La forte dépendance au réseau&amp;nbsp;: une hausse du trafique dû aux nombreux appelles entre microservice ainsi qu&#39;une forte dépendance au bon fonctionnement de celui-ci : pas de réseau implique pas de message entre microservice&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
Les communications&lt;/h2&gt;
Aujourd&#39;hui on retrouve principalement 2 fonctionnements pour les microservices : &lt;br /&gt;
&lt;ul style=&quot;line-height: 1.5em; list-style-type: disc; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
fonctionnement par ressources, qui utiliseront des api REST, avec un fonctionnement principalement synchrone.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
fonctionnement par messages, qui utiliseront des bus logicielles &quot;simples&quot; avec un fonctionnement principalement asynchrone.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
Liens&lt;/h2&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Microservices&quot; target=&quot;_blank&quot;&gt;Wikipedia : Microservices&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://martinfowler.com/articles/microservices.html&quot; target=&quot;_blank&quot;&gt;Martin Fowler : Microservices, a definition of this new architectural term&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://microservices.io/&quot; target=&quot;_blank&quot;&gt;Microservice architecture patterns and best practices&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4434678219389597521/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2016/04/les-microservices-introduction.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4434678219389597521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4434678219389597521'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2016/04/les-microservices-introduction.html' title='Les microservices - Introduction'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4615657569853224258</id><published>2015-01-18T21:00:00.000+01:00</published><updated>2015-01-20T18:00:04.581+01:00</updated><title type='text'>Revue du web S3-2015</title><content type='html'>Quelques liens intéressant :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Développement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.codeleak.pl/2015/01/testing-with-files-and-directories-in.html&quot;&gt;Testing with files and directories in JUnit with @Rule&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Design pattern&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://javarevisited.blogspot.fr/2012/03/10-object-oriented-design-principles.html&quot;&gt;10 Object Oriented Design Principles Java Programmer should know&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4615657569853224258/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2015/01/revue-du-web-s3-2015.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4615657569853224258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4615657569853224258'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2015/01/revue-du-web-s3-2015.html' title='Revue du web S3-2015'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-3822616979488918132</id><published>2014-12-21T21:00:00.000+01:00</published><updated>2015-01-14T18:39:48.400+01:00</updated><title type='text'>Revue du web S51-2014</title><content type='html'>Les liens de la semaines :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Developpement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/12/17/chapitre-9-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 9 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vladmihalcea.com/2014/12/15/eager-fetching-is-a-code-smell/&quot;&gt;EAGER fetching is a code smell&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/3822616979488918132/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s51-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3822616979488918132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3822616979488918132'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s51-2014.html' title='Revue du web S51-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4874639333492303828</id><published>2014-12-14T21:00:00.000+01:00</published><updated>2014-12-14T21:00:03.239+01:00</updated><title type='text'>Revue du web S50-2014</title><content type='html'>Quelques articles intéressants découverts cet semaine :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Développement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.crafting-labs.fr/?post/2014/09/15/Je-ne-suis-pas-un-codeur&quot;&gt;Je ne suis pas un codeur&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.soat.fr/2014/11/organiser-une-politique-de-montee-en-competences/&quot;&gt;Organiser une politique de montée en compétences&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Imprimante 3D&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://gcodesim.dietzm.de/&quot;&gt;GCode Simulator&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4874639333492303828/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s50-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4874639333492303828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4874639333492303828'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s50-2014.html' title='Revue du web S50-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-2307992957191742889</id><published>2014-12-07T21:00:00.000+01:00</published><updated>2014-12-07T21:00:01.978+01:00</updated><title type='text'>Revue du web S49-2014</title><content type='html'>Les liens de la semaine :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Developpement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aubryconseil.com/post/Les-promesses-de-l-Agilite&quot;&gt;Les promesses de l&#39;Agilité&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.buddyweb.fr/5-points-pour-ameliorer-la-productivite-des-developpeurs/&quot;&gt;5 Points pour améliorer la productivité des développeurs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/12/05/chapitre-8-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 8 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Domotique&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.abavala.com/2014/12/05/thinking-cleaner-et-votre-robot-aspirateur-roomba-est-compatible-wi-fi-et-apple-homekit/&quot;&gt;Thinking Cleaner et votre robot aspirateur Roomba est compatible Wi-Fi et Apple HomeKit&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/2307992957191742889/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s49-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/2307992957191742889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/2307992957191742889'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/12/revue-du-web-s49-2014.html' title='Revue du web S49-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-1274364641703276073</id><published>2014-11-30T21:00:00.000+01:00</published><updated>2014-11-30T21:00:00.793+01:00</updated><title type='text'>Revu du web S48-2014</title><content type='html'>Quelques liens interressants découverts cette semaine :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Developpement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/11/25/chapitre-7-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 7 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aubryconseil.com/post/Pratiques-Scrum-obsoletes&quot;&gt;Pratiques Scrum obsoletes&lt;/a&gt;&amp;nbsp; et &lt;a href=&quot;http://www.aubryconseil.com/post/D-autres-pratiques-Scrum-obsoletes&quot;&gt;D&#39;autres pratiques Scrum obsoletes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/1274364641703276073/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s48-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/1274364641703276073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/1274364641703276073'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s48-2014.html' title='Revu du web S48-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-1147373290666747079</id><published>2014-11-23T21:00:00.000+01:00</published><updated>2014-11-24T15:12:08.117+01:00</updated><title type='text'>Revu du web S47-2014</title><content type='html'>Les liens de la semaines :

&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Developpement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/11/04/chapitre-5-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 5 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/11/18/chapitre-6-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 6 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;http://pro.clubic.com/it-business/securite-et-donnees/actualite-740015-mozilla-eff-cisco-certificat-gratuits-chiffrer-web.html&quot;&gt;Clubic Pro &amp;gt; IT business &amp;gt Sécurité et données  Mozilla, l&#39;EFF et Cisco lancent des certificats SSL gratuits pour chiffrer le Web&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/1147373290666747079/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s47-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/1147373290666747079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/1147373290666747079'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s47-2014.html' title='Revu du web S47-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-9025696960975716687</id><published>2014-11-02T21:00:00.000+01:00</published><updated>2014-11-20T09:35:58.431+01:00</updated><title type='text'>Revu du web S44-2014</title><content type='html'>&lt;ul&gt;
&lt;/ul&gt;
&amp;nbsp;Les liens de la semaines :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Imprimante 3D&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lesnumeriques.com/imprimante-3d/impression-3d-differents-procedes-a1876.html&quot;&gt;Impression 3D : les différents procédésImpression 3D : les différents procédés&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.3dnatives.com/hp-impression-3d-multi-jet-fusion/&quot;&gt;Hewlett-Packard se lance dans l’impression 3D avec le Multi Jet Fusion !&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Developpement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/10/28/chapitre-4-du-livre-de-sandro-mancuso-sur-le-software-craftsmanship/&quot;&gt;Chapitre 4 du livre de Sandro Mancuso sur le Software Craftsmanship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Un site sur les Katas :&amp;nbsp;&lt;a href=&quot;http://codekata.com/&quot;&gt;CodeKata&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Domotique&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Mort programmée du Karotz : &lt;a href=&quot;http://www.karotz.com/support/faq?locale=fr_FR&amp;amp;utm_content=bufferab9a3&amp;amp;utm_medium=social&amp;amp;utm_source=plus.google.com&amp;amp;utm_campaign=buffer&quot;&gt;La fin des aventures de Karotz&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/9025696960975716687/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s44-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/9025696960975716687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/9025696960975716687'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/11/revu-du-web-s44-2014.html' title='Revu du web S44-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-8056145584018087736</id><published>2014-10-26T21:00:00.000+01:00</published><updated>2014-10-26T21:00:00.260+01:00</updated><title type='text'>Revu du web S43-2014</title><content type='html'>Quelques belles découvertes cette semaine :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Développement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Une liste de frameworks, librairies et logiciels pour java, classés par théme : &lt;a href=&quot;https://github.com/akullpp/awesome-java&quot;&gt;Awesome java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Android&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/10/22/android-les-bibliotheques-utiles/&quot;&gt;Android : les bibliothèques utiles&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Agile&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/10/21/chapitre-3-du-livre-de-sandro-mancuso-sur-le-craftsmanship/&quot;&gt;Chapitre 3 du livre de Sandro Mancuso sur le Craftsmanship&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Arduino&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nextinpact.com/news/90575-un-pilote-distribue-par-windows-update-brique-puce-aimee-bidouilleurs.htm&quot;&gt;Un pilote distribué par Windows Update « brique » une puce aimée des bidouilleurs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Impression 3D&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.3dnatives.com/microsoft-kinect-scanner-3d/&quot;&gt;Microsoft vous invite à transformer votre Kinect en scanner 3D&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/8056145584018087736/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s43-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/8056145584018087736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/8056145584018087736'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s43-2014.html' title='Revu du web S43-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-449150997923249727</id><published>2014-10-19T21:00:00.000+02:00</published><updated>2014-10-21T10:59:00.849+02:00</updated><title type='text'>Revu du web S42-2014</title><content type='html'>Les découvertes de la semaine :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Arduino&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Carte de développement Intel Galileo 2eme génération : &lt;a href=&quot;http://www.intel.fr/content/www/fr/fr/do-it-yourself/galileo-maker-quark-board.html&quot;&gt;présentation Intel&lt;/a&gt;, &lt;a href=&quot;http://store.arduino.cc/index.php?main_page=product_info&amp;amp;products_code=E000050&amp;amp;utm_content=buffer7307a&amp;amp;utm_medium=social&amp;amp;utm_source=plus.google.com&amp;amp;utm_campaign=buffer&quot;&gt;présentation Arduino&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.arduino.cc/2014/10/16/arduino-materia-101-is-available/?utm_content=buffer0cfed&amp;amp;utm_medium=social&amp;amp;utm_source=plus.google.com&amp;amp;utm_campaign=buffer&quot;&gt;L&#39;imprimante 3D Arduino est en pré-vente!!!&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Raspberry Py&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.raspberrypi.org/compute-module-io-board-hardware-design-files-now-available/&quot;&gt;Compute Module IO Board Hardware Design Files Now Available!&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Drone&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;La fondation Linux lance : &lt;a href=&quot;https://www.dronecode.org/&quot;&gt;Dronecode&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Développement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agilité&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/10/14/vite-mon-systeme-de-management-doit-changer/&quot;&gt;Vite ! Mon système de management doit changer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eight2late.wordpress.com/2014/10/08/six-heresies-for-enterprise-architecture/&quot;&gt;Six heresies for enterprise architecture&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/449150997923249727/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s42-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/449150997923249727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/449150997923249727'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s42-2014.html' title='Revu du web S42-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-3957412789930097263</id><published>2014-10-12T21:00:00.000+02:00</published><updated>2014-10-12T21:00:00.335+02:00</updated><title type='text'>Revu du web S41-2014</title><content type='html'>Les découvertes de la semaine :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Domotique&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://domotique-info.fr/2014/10/premier-module-z-wave-fil-pilote-by-qubino/&quot; target=&quot;_blank&quot;&gt;Le premier module Z-wave Fil Pilote by Qubino&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dropbox.com/sc/43ougxkvifb3n16/AACC2GOuJlWkdmakBgL5t90sa&quot; target=&quot;_blank&quot;&gt;Programmateur fil pilote WiFi en DIY&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Programmation&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/10/08/dessine-moi-un-craftsman/&quot; target=&quot;_blank&quot;&gt;Dessine moi un craftsman.&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.cleancoder.com/uncle-bob/2014/09/19/MicroServicesAndJars.html&quot;&gt;MicroServices and Jars&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Bibliotheque d&#39;objet 3D :&amp;nbsp;&lt;a href=&quot;http://fr.cults3d.com/&quot; target=&quot;_blank&quot;&gt;Cults&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/3957412789930097263/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s41-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3957412789930097263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3957412789930097263'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s41-2014.html' title='Revu du web S41-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4548851291711693703</id><published>2014-10-05T21:00:00.000+02:00</published><updated>2014-10-05T21:00:00.068+02:00</updated><title type='text'>Revu du web S40-2014</title><content type='html'>Quelques découvertes durant cette semaine :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;DIY&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Electronique&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://sim.okawa-denshi.jp/en/Fkeisan.htm&quot; target=&quot;_blank&quot;&gt;Feuilles de calcul pour les éléments de filtres (passe haut, passe bas, ...)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;3D&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.3dnatives.com/materialiser-idee-pango/&quot; target=&quot;_blank&quot;&gt;Matérialiser une idée n’a jamais été aussi simple avec Pango&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Tier lieux&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.tierslieux.net/2014/09/panorama-comment-creer-un-tiers-lieu/&quot; target=&quot;_blank&quot;&gt;Panorama : comment creer un tiers lieu?&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Développement&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Agile&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/minibooks/agile-adoption-transformation&quot; target=&quot;_blank&quot;&gt;An Agile Adoption and Transformation Survival Guide&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/09/30/chaque-semaine-decouvrez-un-chapitre-du-livre-de-sandro-mancuso-sur-le-craftsmanship-chapitre-2/&quot; target=&quot;_blank&quot;&gt;Chaque semaine, découvrez un chapitre du livre de Sandro Mancuso sur le craftsmanship ! [Chapitre 2]&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://projectlombok.org/&quot; target=&quot;_blank&quot;&gt;Simplifier votre code : projet Lombok&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4548851291711693703/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s40-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4548851291711693703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4548851291711693703'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/10/revu-du-web-s40-2014.html' title='Revu du web S40-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-5606351789797377034</id><published>2014-09-28T21:00:00.000+02:00</published><updated>2014-09-29T16:11:36.328+02:00</updated><title type='text'>Revu du web S39-2014</title><content type='html'>Quoi de neuf cette semaine?&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Développement :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.pragmasphere.com/2014/05/21/eclipse-je-te-quitte-pour-intellij-idea/&quot; target=&quot;_blank&quot;&gt;Eclipse je te quitte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.xebia.fr/2014/09/24/chaque-semaine-decouvrez-un-chapitre-du-livre-de-sandro-sur-le-craftsmanship/&quot; target=&quot;_blank&quot;&gt;Chaque semaine, découvrez un chapitre du livre de Sandro Mancuso sur le Craftsmanship !&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
DIY &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Outillage :&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kokumotsu.org/fr/et-hop-un-deuxi%C3%A8me-%C3%A9tabli-fait-maison&quot; target=&quot;_blank&quot;&gt;Et hop ! Un deuxième établi fait maison...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/5606351789797377034/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/revu-du-web-s39-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/5606351789797377034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/5606351789797377034'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/revu-du-web-s39-2014.html' title='Revu du web S39-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-3340160584892038960</id><published>2014-09-21T20:00:00.000+02:00</published><updated>2014-09-22T12:34:30.857+02:00</updated><title type='text'>Revu du web S38-2014</title><content type='html'>Je vous propose un&amp;nbsp; mélimélo de lien découvert cette semaine sur la toile :&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Photos :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://500px.com/photo/2123660/qingyan-old-town-%E9%9D%92%E5%B2%A9%E5%8F%A4%E9%95%87-by-marcellian-tan?utm_campaign=sept16_12PM_qingyan-old-town&amp;amp;utm_medium=google&amp;amp;utm_source=500px&quot; target=&quot;_blank&quot;&gt;Qingyan Old Town&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Domotique :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Une box domotique qui monte : &lt;a href=&quot;https://jeedom.fr/&quot; target=&quot;_blank&quot;&gt;jeedom&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
DIY :&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Imprimante 3D&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.3dnatives.com/dremel-imprimante-3d-grand-public/&quot; target=&quot;_blank&quot;&gt;Dremel présente une imprimante 3D grand public à $999&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Raspberry :&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.raspberrypi.org/new-raspbian-and-noobs-releases/&quot; target=&quot;_blank&quot;&gt;New Raspbian and NOOBS releases&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Arduino :&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.instructables.com/id/Arduino-Internet-Time-Client/&quot; target=&quot;_blank&quot;&gt;Arduino Internet Time Client&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;FabLab:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fablab.fr/projects/project/fablab-vosges/&quot; target=&quot;_blank&quot;&gt;FABLAB DES VOSGES&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/3340160584892038960/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/revu-du-web-s38-2014.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3340160584892038960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3340160584892038960'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/revu-du-web-s38-2014.html' title='Revu du web S38-2014'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-5359912382493348094</id><published>2014-09-16T08:00:00.000+02:00</published><updated>2019-01-31T16:05:29.369+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><category scheme="http://www.blogger.com/atom/ns#" term="KY040"/><title type='text'>Arduino : encodeur rotatif (KY040)</title><content type='html'>&lt;script charset=&quot;utf-8&quot; src=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=FR&amp;amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&quot; type=&quot;text/javascript&quot;&gt; &lt;/script&gt; &lt;noscript&gt;&lt;a rel=&quot;nofollow&quot; HREF=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;MarketPlace=FR&amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&amp;Operation=NoScript&quot;&gt;Widgets Amazon.fr&lt;/A&gt;&lt;/noscript&gt;
Je vous propose de voir une première utilisation simple d&#39;un encodeur rotatif : le &lt;a href=&quot;https://draft.blogger.com/null&quot; type=&quot;amzn&quot;&gt;KY040&lt;/a&gt; avec un &lt;a href=&quot;https://draft.blogger.com/null&quot; type=&quot;amzn&quot;&gt;arduino UNO&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://draft.blogger.com/null&quot; search=&quot;KY040&quot; type=&quot;amzn&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00W1BTWSM&amp;amp;Format=_SL110_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=FR&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=lebldebo-21&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
Un exemple courant d&#39;utilisation est le bouton d&#39;un autoradio qui permet le réglage du volume mais aussi d&#39;allumer et d&#39;éteindre la radio. Il ressemble beaucoup à un potentiomètre mais contrairement à lui il n&#39;est pas limité dans ça rotation et envoie un signal à chaque &quot;crans&quot;. Il y a 30 crans par tour et l&#39;on est capable de déterminer le sens de rotation de l&#39;encodeur. Pour cela, l&#39;encodeur nous envoie 2 signaux (on parlera du signal A et B) comme suit :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDUG_PWPKJhuDI17wfKGU6XooTW7WTlKQvUhcCImVNoGz3ldsCAV_U3SaiDe28t9ajzy9JNVn1pcpy-69S70t35Zid7jS0Hw0o4fuqPy4NuQXViAAGIJHpJ_Mj1iZ5GfIMWoA7qj90Pdhm/s1600/rotary_encoder_phase.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDUG_PWPKJhuDI17wfKGU6XooTW7WTlKQvUhcCImVNoGz3ldsCAV_U3SaiDe28t9ajzy9JNVn1pcpy-69S70t35Zid7jS0Hw0o4fuqPy4NuQXViAAGIJHpJ_Mj1iZ5GfIMWoA7qj90Pdhm/s1600/rotary_encoder_phase.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Source : &lt;a href=&quot;http://www.hobbytronics.co.uk/arduino-tutorial6-rotary-encoder&quot; target=&quot;_blank&quot;&gt;Arduino UNO Tutorial 6 - Rotary Encoder&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Pour faire simple, lorsque l&#39;on est sur un cran, A et B ont le même niveau logique (0 ou 1). Si on tourne dans le sens horaire, on reçoit le changement d&#39;état de A avant B et si on tourne dans le sens contraire on reçoit B avant A.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Mise en place du hardware&lt;/h2&gt;
Pour &quot;capturer&quot; la rotation nous utiliserons les &quot;interruptions&quot; disponibles sur les entrées 2 et 3 de l&#39;&lt;a href=&quot;https://draft.blogger.com/null&quot; search=&quot;arduino UNO&quot; type=&quot;amzn&quot;&gt;arduino&lt;/a&gt;. L&#39;&lt;a href=&quot;https://draft.blogger.com/null&quot; search=&quot;arduino UNO&quot; type=&quot;amzn&quot;&gt;Uno&lt;/a&gt; ne disposant que de 2 entrées avec gestion des interruptions, le switch sera géré dans la fonction &quot;loop&quot;.&lt;br /&gt;
&lt;br /&gt;
Au niveau hardware, rien de compliqué :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;DT&amp;nbsp;&amp;nbsp; --&amp;gt; pin 2&lt;/li&gt;
&lt;li&gt;CLK --&amp;gt; pin 3&lt;/li&gt;
&lt;li&gt;SW&amp;nbsp; --&amp;gt; pin 4&lt;/li&gt;
&lt;/ul&gt;
Nous utiliserons l&#39;écran &lt;a type=&quot;amzn&quot; search=&quot;lcd 20x4&quot;&gt;LCD&lt;/a&gt; pour afficher le compteur ainsi que l&#39;état des 3 entrées :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;rs (LCD pin 4) --&amp;gt; Arduino pin 12&lt;/li&gt;
&lt;li&gt;enable (LCD pin 6) --&amp;gt; Arduino pin 10&lt;/li&gt;
&lt;li&gt;LCD D4 --&amp;gt; Arduino pin 8&lt;/li&gt;
&lt;li&gt;LCD D5 --&amp;gt; Arduino pin 7&lt;/li&gt;
&lt;li&gt;LCD D6 --&amp;gt; Arduino pin 6&lt;/li&gt;
&lt;li&gt;LCD D7 --&amp;gt; Arduino pin 5&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Le programme correspondant&lt;/h2&gt;
On utiliser un &quot;unsigned int&quot; pour stocker un compteur que l&#39;on incrémente ou décrémente suivant le sens de rotation de l&#39;encodeur. Un appuis dessus remettra à 0 ce compteur.&lt;br /&gt;
&lt;br /&gt;
De part l&#39;utilisation d&#39;un &quot;unsigned int&quot;, ce compteur est forcement compris entre 0 et 65535.&lt;br /&gt;
&lt;br /&gt;
Dernier point important, ce type de bouton génère des rebonds aux niveaux des entrées de l&#39;arduino. Il faut donc un système d&#39;anti-rebond. il existe plusieurs possibilités, soit hardware en utilisant par exemple des condensateurs (0.1µF devrait être bon), soit logique via un peu de code. C&#39;est cette dernière solution que j&#39;ai utilisé.&lt;br /&gt;
&lt;h2&gt;
&amp;nbsp;&lt;/h2&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
include &amp;lt;liquidcrystal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LiquidCrystal lcd(12, 11, 10, 8, 7,6,5);&lt;br /&gt;
&lt;br /&gt;
// définition des pin pour le KY040&lt;br /&gt;
enum PinAssignments {&lt;br /&gt;
&amp;nbsp; encoderPinA = 2,&amp;nbsp;&amp;nbsp; // right (DT)&lt;br /&gt;
&amp;nbsp; encoderPinB = 3,&amp;nbsp;&amp;nbsp; // left (CLK)&lt;br /&gt;
&amp;nbsp; clearButton = 4&amp;nbsp;&amp;nbsp;&amp;nbsp; // switch (SW)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
volatile unsigned int encoderPos = 0;&amp;nbsp; // un compteur&lt;br /&gt;
unsigned int lastReportedPos = 1;&amp;nbsp;&amp;nbsp; // gestion du changement&lt;br /&gt;
static boolean rotating=false;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // gestion de l&#39;anti-rebonds&lt;br /&gt;
&lt;br /&gt;
// variable pour les routines d&#39;interruption&lt;br /&gt;
boolean A_set = false;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
boolean B_set = false;&lt;br /&gt;
boolean A_change = false;&lt;br /&gt;
boolean B_change= false;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&amp;nbsp; lcd.begin(20,4);&lt;br /&gt;
&amp;nbsp; lcd.clear();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; pinMode(encoderPinA, INPUT_PULLUP); // utilisation du pullup&lt;br /&gt;
&amp;nbsp; pinMode(encoderPinB, INPUT_PULLUP); // utilisation du pullup&lt;br /&gt;
&amp;nbsp; pinMode(clearButton, INPUT_PULLUP); // utilisation du pullup&lt;br /&gt;
&amp;nbsp; // activation de l&#39;interruption 0 (pin 2)&lt;br /&gt;
&amp;nbsp; attachInterrupt(0, doEncoderA, CHANGE);&lt;br /&gt;
&amp;nbsp; // activation de l&#39;interruption 1 (pin 3)&lt;br /&gt;
&amp;nbsp; attachInterrupt(1, doEncoderB, CHANGE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
&amp;nbsp; if (lastReportedPos != encoderPos) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.clear();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.setCursor(0,0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot;Index: &quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(encoderPos, DEC);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lastReportedPos = encoderPos;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.setCursor(0,1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(encoderPinA));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(encoderPinB));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(clearButton));&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.setCursor(0,1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(encoderPinA));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(encoderPinB));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(digitalRead(clearButton));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; if (digitalRead(clearButton) == LOW )&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; encoderPos = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; A_change = false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; B_change= false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(encoderPos);&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; delay (100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Interruption sur changement d&#39;état de A&lt;br /&gt;
void doEncoderA(){&lt;br /&gt;
&amp;nbsp; // debounce&lt;br /&gt;
&amp;nbsp; if ( rotating ) delay (1);&amp;nbsp; // attendre un petit peut&lt;br /&gt;
&amp;nbsp; rotating = true; //activation de l&#39;anti-rebond&lt;br /&gt;
&amp;nbsp; // Confirmation du changement &lt;br /&gt;
&amp;nbsp; if( digitalRead(encoderPinA) != A_set ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; A_set = !A_set;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (B_change) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encoderPos += 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B_change = false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A_change = true;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rotating = false;&amp;nbsp; //libération de l&#39;anti-rebond&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Interruption sur changement d&#39;etat de B&lt;br /&gt;
void doEncoderB(){&lt;br /&gt;
&amp;nbsp; if ( rotating ) delay (1);&lt;br /&gt;
&amp;nbsp; rotating = true;&lt;br /&gt;
&amp;nbsp; if( digitalRead(encoderPinB) != B_set ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; B_set = !B_set;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (A_change) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encoderPos -= 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A_change = false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B_change = true;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rotating = false;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Source :&amp;nbsp;&lt;a href=&quot;http://arduino.cc/&quot;&gt;Arduino&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.hobbytronics.co.uk/arduino-tutorial6-rotary-encoder&quot; target=&quot;_blank&quot;&gt;Arduino UNO Tutorial 6 - Rotary Encoder&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://arduinotronics.blogspot.ie/2013/09/using-rotary-encoder-with-arduino.html&quot; target=&quot;_blank&quot;&gt;Using a Rotary Encoder with the Arduino&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/5359912382493348094/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/arduino-encodeur-rotatif-ky040.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/5359912382493348094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/5359912382493348094'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/09/arduino-encodeur-rotatif-ky040.html' title='Arduino : encodeur rotatif (KY040)'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDUG_PWPKJhuDI17wfKGU6XooTW7WTlKQvUhcCImVNoGz3ldsCAV_U3SaiDe28t9ajzy9JNVn1pcpy-69S70t35Zid7jS0Hw0o4fuqPy4NuQXViAAGIJHpJ_Mj1iZ5GfIMWoA7qj90Pdhm/s72-c/rotary_encoder_phase.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4641970927705952961</id><published>2014-08-08T08:00:00.001+02:00</published><updated>2023-12-19T16:36:01.864+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><category scheme="http://www.blogger.com/atom/ns#" term="RTC DS1307"/><title type='text'>Arduino : Afficher la date et l&#39;heure sur un LCD</title><content type='html'>&lt;script charset=&quot;utf-8&quot; src=&quot;//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=FR&amp;amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&quot; type=&quot;text/javascript&quot;&gt; &lt;/script&gt; &lt;noscript&gt;&lt;A rel=&quot;nofollow&quot; HREF=&quot;//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;MarketPlace=FR&amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&amp;Operation=NoScript&quot;&gt;Widgets Amazon.fr&lt;/A&gt;&lt;/noscript&gt;
Pour afficher l&#39;heure et la date et surtout ne pas perdre ces informations si l&#39;&lt;a type=&quot;amzn&quot;&gt;arduino UNO&lt;/a&gt; n&#39;est plus alimenté, on a besoin d&#39;un module RTC à base de &lt;a type=&quot;amzn&quot;&gt;DS1307&lt;/a&gt; (&lt;a href=&quot;https://datasheets.maximintegrated.com/en/ds/DS1307.pdf&quot; target=&quot;_blank&quot;&gt;datasheets&lt;/a&gt;). On en trouve facilement sur internet à des prix très bas.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a search=&quot;DS1307&quot; type=&quot;amzn&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00JGFF5FK&amp;amp;Format=_SL110_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=FR&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=lebldebo0e-21&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
Ce module embarque, en plus du composant DS1307, une pile qui permet de sauvegarder l&#39;heure. Cette pile (CR2032) à une durée de vie de plusieurs années. &lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce module on va avoir besoin d&#39;une librairie non fournie avec l&#39;IDE Arduino. Celle-ci peut être téléchargée &lt;a href=&quot;https://github.com/jcw/rtclib&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt; (il suffit de faire &quot;Download Zip&quot; et de décompressé l&#39;archive directement dans le répertoire librairies de l&#39;IDE).&lt;br /&gt;
&lt;br /&gt;
Cette librairie propose un exemple (&quot;ds1307&quot;) permettant de mettre à jour le module avec l&#39;heure de votre ordinateur (attention : l&#39;heure utilisée est UTC). Pour cela, il suffit de décommenter la ligne &quot;&lt;i&gt;RTC.adjust(DateTime(__DATE__, __TIME__));&lt;/i&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Tout d&#39;abord le branchement&lt;/h2&gt;
Le branchement est relativement simple. On se base sur le montage du &lt;a search=&quot;LCD 20x4&quot; type=&quot;amzn&quot;&gt;LCD&lt;/a&gt; vu &lt;a href=&quot;https://bokc-fr.blogspot.fr/2014/04/arduino-1er-pas-avec-un-lcd.html&quot; target=&quot;_blank&quot;&gt;précédemment&lt;/a&gt;.&lt;br /&gt;
Le module RTC DS1307 ce branche comme suit:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Gnd --&amp;gt; GND&lt;/li&gt;
&lt;li&gt;Vcc --&amp;gt; 5 V&lt;/li&gt;
&lt;li&gt;Sda --&amp;gt; analog pin A4&lt;/li&gt;
&lt;li&gt;Scl --&amp;gt; analog pin A5&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&lt;span id=&quot;goog_42392394&quot;&gt;Le programme correspondant&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
/************************************************************&lt;br /&gt;
Horloge Arduino&lt;br /&gt;
Horloge simple avec un Arduino Duo, un module RTC DS1307 &lt;br /&gt;
et un afficheur LCD 20x4.&lt;br /&gt;
&lt;br /&gt;
Branchements du RTC DS1307:&lt;br /&gt;
Gnd --&amp;gt; GND&lt;br /&gt;
Vcc --&amp;gt; 5 V&lt;br /&gt;
Sda --&amp;gt; analog pin A4&lt;br /&gt;
Scl --&amp;gt; analog pin A5&lt;br /&gt;
&lt;br /&gt;
Branchements de l&#39;afficheur LCD:&lt;br /&gt;
rs (LCD pin 4) --&amp;gt; Arduino pin 12&lt;br /&gt;
enable (LCD pin 6) --&amp;gt; Arduino pin 10&lt;br /&gt;
LCD D4 --&amp;gt; Arduino pin 5&lt;br /&gt;
LCD D5 --&amp;gt; Arduino pin 4&lt;br /&gt;
LCD D6 --&amp;gt; Arduino pin 3&lt;br /&gt;
LCD D7 --&amp;gt; Arduino pin 2&lt;br /&gt;
&lt;br /&gt;
***************************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;liquidcrystal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;rtclib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LiquidCrystal lcd(12, 11, 10, 5, 4,3,2);&lt;br /&gt;
RTC_DS1307 rtc;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.begin(20,4);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.clear();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Wire.begin();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rtc.begin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime now = rtc.now();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.setCursor(0,0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.year());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot;/&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now.month()&amp;lt;10) lcd.print=&quot;0&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.month());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot;/&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now.day()&amp;lt;10) lcd.print=&quot;0&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.day());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot; &quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now.hour()&amp;lt;10) lcd.print=&quot;0&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.hour());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot;:&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now.minute()&amp;lt;10) lcd.print=&quot;0&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.minute());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(&quot;:&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now.second()&amp;lt;10) lcd.print=&quot;0&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lcd.print(now.second());&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; delay(900);&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
Source :&amp;nbsp;&lt;a href=&quot;http://arduino.cc/&quot;&gt;Arduino&lt;/a&gt;, &lt;a href=&quot;https://github.com/jcw/rtclib&quot; target=&quot;_blank&quot;&gt;Librairie RTC&lt;/a&gt;, &lt;a href=&quot;http://datasheets.maximintegrated.com/en/ds/DS1307.pdf&quot; target=&quot;_blank&quot;&gt;Datasheet du DS1307&lt;/a&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4641970927705952961/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/08/arduino-afficher-la-date-et-lheure-sur.html#comment-form' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4641970927705952961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4641970927705952961'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/08/arduino-afficher-la-date-et-lheure-sur.html' title='Arduino : Afficher la date et l&#39;heure sur un LCD'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-786470160364285014</id><published>2014-04-05T08:00:00.000+02:00</published><updated>2019-01-31T16:19:02.571+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><category scheme="http://www.blogger.com/atom/ns#" term="LCD"/><title type='text'>Arduino: 1er pas avec un LCD</title><content type='html'>&lt;script charset=&quot;utf-8&quot; src=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=FR&amp;amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&quot; type=&quot;text/javascript&quot;&gt; &lt;/script&gt; &lt;noscript&gt;&lt;a rel=&quot;nofollow&quot; HREF=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;MarketPlace=FR&amp;ID=V20070822%2FFR%2Flebldebo-21%2F8005%2Fba380d1b-94c0-4fb5-befb-6b06069cb287&amp;Operation=NoScript&quot;&gt;Widgets Amazon.fr&lt;/A&gt;&lt;/noscript&gt;
Voila un premier programme qui permet l&#39;utilisation d&#39;un écran &lt;a type=&quot;amzn&quot;&gt;LCD 20x4&lt;/a&gt; (20 caractères sur 4 lignes).&lt;br /&gt;
Cette écran sera très utile par la suite pour afficher des informations lors d&#39;exécution de programme.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a type=&quot;amzn&quot; search=&quot;LCD 20x4&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://ws-eu.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00MODAKM4&amp;amp;Format=_SL110_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=FR&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=lebldebo0e-21&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2&gt;
Tout d&#39;abord le branchement&lt;/h2&gt;
Dans ce premier programme, nous brancherons l&#39;écran &lt;a type=&quot;amzn&quot; search=&quot;LCD 20x4&quot;&gt;LCD&lt;/a&gt; directement sur l&#39;&lt;a type=&quot;amzn&quot;&gt;Arduino UNO&lt;/a&gt;. Nous verrons plus tard qu&#39;il est possible d&#39;utiliser un module I2C pour libérer les ports de l&#39;&lt;a type=&quot;amzn&quot; search=&quot;Arduino UNO&quot;&gt;Arduino&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-gf90PtqvbnJbHZ56TpOg20ckBcot6K-0oKv2T02iMkUtESMxLNJnAZbqumIKCeDqKZyo47BJX0D0Fux2tVgfkoL_VfKpZNAhHKyTP7UMzCT1NnpSYn41PMZSprtGhGj64MpTMCotF70/s1600/BranchementLCD_bb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-gf90PtqvbnJbHZ56TpOg20ckBcot6K-0oKv2T02iMkUtESMxLNJnAZbqumIKCeDqKZyo47BJX0D0Fux2tVgfkoL_VfKpZNAhHKyTP7UMzCT1NnpSYn41PMZSprtGhGj64MpTMCotF70/s1600/BranchementLCD_bb.png&quot; height=&quot;189&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span id=&quot;goog_42392394&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_42392395&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span id=&quot;goog_42392394&quot;&gt;Le programme correspondant&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
#include &amp;lt;liquidcrystal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Connections:&lt;br /&gt;
// rs (LCD pin 4) to Arduino pin 12&lt;br /&gt;
// enable (LCD pin 6) to Arduino pin 10&lt;br /&gt;
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2&lt;br /&gt;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; lcd.begin(20,4);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialisation du lcd : 20 columns, 4 rows.
&lt;br /&gt;
&amp;nbsp; lcd.clear();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Effacer le LCD&lt;br /&gt;
&amp;nbsp; lcd.setCursor(0,0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Positionner le curseur sur le 1er caractere de la 1er ligne&lt;br /&gt;
&amp;nbsp; lcd.print(&quot;Hello, World&quot;); // Ecrire&lt;br /&gt;
&amp;nbsp; lcd.setCursor(0,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Positionner le curseur sur le 1er caractere de la 2eme ligne&lt;br /&gt;
&amp;nbsp; lcd.print(&quot;Row 2&quot;);&lt;br /&gt;
&amp;nbsp; lcd.setCursor(0,2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Positionner le curseur sur le 1er caractere de la 3eme ligne&lt;br /&gt;
&amp;nbsp; lcd.print(&quot;Row 3&quot;);&lt;br /&gt;
&amp;nbsp; lcd.setCursor(0,3);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Positionner le curseur sur le 1er caractere de la 4eme ligne&lt;br /&gt;
&amp;nbsp; lcd.print(&quot;Row 4&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
} 
&lt;/blockquote&gt;
&lt;br /&gt;
Source :&amp;nbsp;&lt;a href=&quot;http://arduino.cc/&quot;&gt;Arduino&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/786470160364285014/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2014/04/arduino-1er-pas-avec-un-lcd.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/786470160364285014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/786470160364285014'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2014/04/arduino-1er-pas-avec-un-lcd.html' title='Arduino: 1er pas avec un LCD'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-gf90PtqvbnJbHZ56TpOg20ckBcot6K-0oKv2T02iMkUtESMxLNJnAZbqumIKCeDqKZyo47BJX0D0Fux2tVgfkoL_VfKpZNAhHKyTP7UMzCT1NnpSYn41PMZSprtGhGj64MpTMCotF70/s72-c/BranchementLCD_bb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4590299598547510865</id><published>2013-03-04T08:00:00.000+01:00</published><updated>2013-09-09T15:58:40.998+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="PMD"/><category scheme="http://www.blogger.com/atom/ns#" term="Sonar"/><title type='text'>PMD: Ajouter une régle XPath dans Sonar</title><content type='html'>&lt;a href=&quot;http://www.sonarsource.org/&quot;&gt;Sonar&lt;/a&gt; utilise plusieurs outils pour effectuer ses mesures de qualité de code. Malgré les ~1000 règles utilisées, il est parfois nécessaire de rajouter nos propres règles suivant les &quot;bonnes pratiques&quot; que l&#39;on a mis en place.&lt;br /&gt;
Un des outils qu&#39;il utilise est &lt;a href=&quot;http://pmd.sourceforge.net/&quot;&gt;PMD&lt;/a&gt; et celui-ci permet facilement de rajouter une règle en se servant du mécanisme des &lt;a href=&quot;http://fr.wikipedia.org/wiki/XPath&quot;&gt;XPath&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Un peu de théorie &lt;/h2&gt;
&lt;u&gt;Sonar :&lt;/u&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Sonar est un logiciel libre permettant de mesurer la qualité du code source sur les projets de développement java. Sonar est distribué selon les termes de la licence LGPL v3.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;u&gt;PMD :&lt;/u&gt;
&lt;br /&gt;
&lt;blockquote&gt;
PMD est un framework qui permet d&#39;analyser le code source Java. Il contient un certain nombre de règles qui assure la qualité de code : le code inutile, les imbrications trop complexes... Il permet d&#39;obtenir le résultat par le biais d&#39;un rapport.&lt;/blockquote&gt;
&lt;br /&gt;
PMD utilise l&#39;AST (&lt;a href=&quot;http://fr.wikipedia.org/wiki/Arbre_syntaxique_abstrait&quot;&gt;Abstract Syntax Tree&lt;/a&gt;), plus exactement le &lt;a href=&quot;http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html&quot;&gt;Java AST&lt;/a&gt; pour exécuter ces règles.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
La pratique &lt;/h2&gt;
Un tutorial sur l&#39;ajout de règle via XPath est proposé sur le site de PMD : &lt;a href=&quot;http://pmd.sourceforge.net/pmd-5.0.2/xpathruletutorial.html&quot;&gt;http://pmd.sourceforge.net/pmd-5.0.2/xpathruletutorial.html&lt;/a&gt;. Mais celui-ci reste très basique. De plus, il est fastidieux de tester notre XPath directement dans Sonar.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
PMD Rule Designer&lt;/h4&gt;
Un outil, fort pratique, a été mis à disposition par l&#39;équipe de PMD pour nous permettre d&#39;écrire et de tester nos nouvelles règles. Celui-ci est fourni avec les &lt;a href=&quot;http://sourceforge.net/projects/pmd/files/pmd/5.0.2/pmd-bin-5.0.2.zip/download&quot;&gt;binaires de PMD&lt;/a&gt;. Sinon un package exécutable a été fait par 
&lt;a href=&quot;http://www.techtraits.com/usman.html&quot;&gt;Usman Ismail&lt;/a&gt; sur le site &lt;a href=&quot;http://www.techtraits.com/&quot;&gt;http://www.techtraits.com&lt;/a&gt;. On peut le télécharger &lt;a href=&quot;http://www.techtraits.com/assets/PMDDesigner.jar&quot;&gt;ici&lt;/a&gt;.&lt;br /&gt;
Cette outil prend un code source (ctrl-c, ctrl-v) et montre son équivalent en AST sous forme d&#39;arbre ce qui permet de construire son XPath sans forcément connaitre les noms de tous les éléments possible et ensuite de le tester sur ce même code.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje84XdfJi2ReqyXXnp7sjto-MQJ55CWfiJ7t62jU99rnW8amVdzWFxyFpxEwWYyrpgMOogyoubEreV7WiryvurnxDQGI35EvcVqxLIhg5dnp53b_3_YuZp9YWK5-HvVic1nL6JJ6Ch_iE8/s1600/PMDRuleDesigner.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje84XdfJi2ReqyXXnp7sjto-MQJ55CWfiJ7t62jU99rnW8amVdzWFxyFpxEwWYyrpgMOogyoubEreV7WiryvurnxDQGI35EvcVqxLIhg5dnp53b_3_YuZp9YWK5-HvVic1nL6JJ6Ch_iE8/s320/PMDRuleDesigner.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PMD Rule Designer&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Source : &lt;a href=&quot;http://fr.wikipedia.org/wiki/Sonar_%28logiciel%29&quot; target=&quot;_blank&quot;&gt;Sonar (Wikipédia)&lt;/a&gt;,&lt;a href=&quot;http://fr.wikipedia.org/wiki/PMD_%28logiciel%29&quot; target=&quot;_blank&quot;&gt;PMD (Wikipédia)&lt;/a&gt;, &lt;a href=&quot;http://www.techtraits.com/Programming/2011/11/05/custom-pmd-rules-using-xpath/&quot; target=&quot;_blank&quot;&gt;Custom PMD rules using XPath&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4590299598547510865/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2013/03/pmd-ajouter-une-regle-xpath-dans-sonar.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4590299598547510865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4590299598547510865'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2013/03/pmd-ajouter-une-regle-xpath-dans-sonar.html' title='PMD: Ajouter une régle XPath dans Sonar'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje84XdfJi2ReqyXXnp7sjto-MQJ55CWfiJ7t62jU99rnW8amVdzWFxyFpxEwWYyrpgMOogyoubEreV7WiryvurnxDQGI35EvcVqxLIhg5dnp53b_3_YuZp9YWK5-HvVic1nL6JJ6Ch_iE8/s72-c/PMDRuleDesigner.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-8644862045798953477</id><published>2013-02-11T10:06:00.000+01:00</published><updated>2013-02-11T10:07:39.720+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Domotique"/><title type='text'>Domotique : Commande groupée</title><content type='html'>Le site &lt;a href=&quot;http://www.touteladomotique.com/&quot;&gt;&quot;Toute la Domotique&lt;/a&gt;&quot; effectue jusqu&#39;au 03 Mars 2013 à 20h une commande groupée en partenariat avec le site &quot;&lt;a href=&quot;http://www.solution-domotique.com&quot;&gt;solution-domotique.com&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Pour les intéressés, c&#39;est par &lt;a href=&quot;http://http://www.touteladomotique.com/index.php?option=com_content&amp;view=article&amp;id=777:2013021001&amp;catid=53:bon-plan&amp;Itemid=13&quot; target=&quot;_blank&quot;&gt;la&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/8644862045798953477/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2013/02/commande-groupee.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/8644862045798953477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/8644862045798953477'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2013/02/commande-groupee.html' title='Domotique : Commande groupée'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-6378316604986849602</id><published>2012-11-22T09:27:00.001+01:00</published><updated>2012-11-22T17:00:58.754+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Domotique"/><title type='text'>Domotique : Commande groupée</title><content type='html'>Le site &lt;a href=&quot;http://www.touteladomotique.com/&quot;&gt;&quot;Toute la Domotique&lt;/a&gt;&quot; effectue du 26 novembre au 7 décembre une commande groupée en partenariat avec le site &quot;&lt;a href=&quot;http://www.planete-domotique.com/commande_groupee&quot;&gt;Planete-domotique.com&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Pour les intéressés, c&#39;est par &lt;a href=&quot;http://www.planete-domotique.com/commande_groupee&quot; target=&quot;_blank&quot;&gt;la&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/6378316604986849602/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2012/11/le-site-toute-la-domotique-effectue-du.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6378316604986849602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6378316604986849602'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2012/11/le-site-toute-la-domotique-effectue-du.html' title='Domotique : Commande groupée'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-4431063245379513511</id><published>2012-09-14T08:00:00.000+02:00</published><updated>2012-09-28T21:55:16.907+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="1-wire"/><category scheme="http://www.blogger.com/atom/ns#" term="owfs"/><title type='text'>OWFS : Régle de nommage des composants 1-Wire</title><content type='html'>Le fabricant à créé un système de nommage unique des composants 1-Wire. Cette règle de nommage à été reprise par les développeurs de l&#39; application OWFS.&lt;br /&gt;
&lt;br /&gt;
Chaque répertoire (correspondant au composant connecté) est nommé de la façon suivante :&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;XX. YYYYYYYYYYYY&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;XX :&lt;/b&gt; représente l&#39;ID au format hexadecimal du composant, son numéro de famille. Chaque famille est représenté par un ID différent.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;YYYYYYYYYYYY :&lt;/b&gt; représente le numéro de série du composant. Deux composants ne peuvent pas avoir le même n° de série.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Voila la liste des Id correspondants aux diffèrentes familles de composants :&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;2&quot;&gt;&lt;tbody&gt;
&lt;tr align=&quot;center&quot;&gt;&lt;th style=&quot;background-color: #fc9e4d; font-weight: bold;&quot;&gt;ID&lt;/th&gt;&lt;th style=&quot;background-color: #fc9e4d; font-weight: bold;&quot;&gt;Composant&lt;/th&gt;&lt;th style=&quot;background-color: #fc9e4d; font-weight: bold;&quot;&gt;Commentaire&lt;/th&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;01&lt;/td&gt; &lt;td&gt;DS2401&lt;br /&gt;
DS1990A&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;02&lt;/td&gt; &lt;td&gt;DS1991&lt;br /&gt;
DS1425&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;04&lt;/td&gt; &lt;td&gt;DS1994&lt;br /&gt;
DS2404&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;05&lt;/td&gt; &lt;td&gt;DS2405&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;06&lt;/td&gt; &lt;td&gt;DS1993&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;08&lt;/td&gt; &lt;td&gt;DS1992&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;09&lt;/td&gt; &lt;td&gt;DS1982&lt;br /&gt;
DS2502&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;0A&lt;/td&gt; &lt;td&gt;DS1995&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;0B&lt;/td&gt; &lt;td&gt;DS1985&lt;br /&gt;
DS2505&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;0C&lt;/td&gt; &lt;td&gt;DS1996&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;0F&lt;/td&gt; &lt;td&gt;DS1986&lt;br /&gt;
DS2506&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;10&lt;/td&gt; &lt;td&gt;DS1920&lt;br /&gt;
DS1820&lt;br /&gt;
DS18S20&lt;/td&gt;&lt;td&gt;Thermomètre de précision pouvant fonctionner en mode parasite&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;12&lt;/td&gt; &lt;td&gt;DS2406&lt;br /&gt;
DS2407&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;13&lt;/td&gt; &lt;td&gt;DS1983&lt;br /&gt;
DS2503&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;14&lt;/td&gt; &lt;td&gt;DS1971&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;18&lt;/td&gt; &lt;td&gt;DS1963S&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;1A&lt;/td&gt; &lt;td&gt;DS1963L&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;1D&lt;/td&gt; &lt;td&gt;DS2423&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;1F&lt;/td&gt; &lt;td&gt;DS2409&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;20&lt;/td&gt; &lt;td&gt;DS2450&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;21&lt;/td&gt; &lt;td&gt;DS1921&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;22&lt;/td&gt; &lt;td&gt;DS1822&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;23&lt;/td&gt; &lt;td&gt;DS1973&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;24&lt;/td&gt; &lt;td&gt;DS1904&lt;br /&gt;
DS2415&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;26&lt;/td&gt; &lt;td&gt;DS2438&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;27&lt;/td&gt; &lt;td&gt;DS2417&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;28&lt;/td&gt; &lt;td&gt;DS18B20&lt;/td&gt;&lt;td&gt;Thermomètre à précision ajustable&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;2C&lt;/td&gt; &lt;td&gt;DS2890&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;30&lt;/td&gt; &lt;td&gt;DS2760&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;33&lt;/td&gt; &lt;td&gt;DS1961S&lt;br /&gt;
DS2432&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;39&lt;/td&gt; &lt;td&gt;DS1977&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;41&lt;/td&gt; &lt;td&gt;DS1922&lt;br /&gt;
DS2422&lt;/td&gt; &lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt; &lt;td style=&quot;width: 50px;&quot;&gt;81&lt;/td&gt; &lt;td&gt;DS9490R&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/4431063245379513511/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-regle-de-nommage-des-composants-1.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4431063245379513511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/4431063245379513511'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-regle-de-nommage-des-composants-1.html' title='OWFS : Régle de nommage des composants 1-Wire'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-3857341220242202031</id><published>2012-09-02T08:00:00.000+02:00</published><updated>2012-09-16T16:09:46.774+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="1-wire"/><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><title type='text'>OWFS : script pour le demarrage</title><content type='html'>&lt;h3&gt;
Configuration pour le démarrage automatique de owfs &lt;/h3&gt;
Créer le fichier /etc/init.d/owfs.sh&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; owfs&lt;br /&gt;
# Required-Start:&lt;br /&gt;
# Required-Stop:&lt;br /&gt;
# Default-Start:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 3 4 5&lt;br /&gt;
# Default-Stop:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 6&lt;br /&gt;
# Short-Description:&amp;nbsp; run owfs&lt;br /&gt;
# Description:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run owfs&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MOUNTPOINT=&#39;/mnt/1Wire&#39;&lt;br /&gt;
case &quot;$1&quot; in&lt;br /&gt;
&amp;nbsp; start)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Starting script owfs with USB support...&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo `/usr/bin/owfs -u -s localhost:4304 --allow_other --mountpoint=$MOUNTPOINT`;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; stop)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;stopping script owfs by unloading mount-point ..&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo `umount $MOUNTPOINT`;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; *)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Usage: $N {start|stop}&quot; &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;/blockquote&gt;
&lt;br /&gt;
Puis faire :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
#sudo update-rc.d owfs.sh defaults&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Source : &lt;a href=&quot;http://perso.ens-lyon.fr/sebastien.mei/wiki/doku.php?id=documentations:owfs&quot; target=&quot;_blank&quot;&gt;Sebastien Mei&lt;/a&gt;, &lt;a href=&quot;http://owfs.org/&quot; target=&quot;_blank&quot;&gt;owfs.org&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/3857341220242202031/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-script-pour-le-demarrage.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3857341220242202031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/3857341220242202031'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-script-pour-le-demarrage.html' title='OWFS : script pour le demarrage'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757035952716848983.post-6852643212953891149</id><published>2012-09-01T08:00:00.000+02:00</published><updated>2012-09-01T08:00:00.546+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="1-wire"/><category scheme="http://www.blogger.com/atom/ns#" term="owfs"/><title type='text'>OWFS : installation sur une Debian &quot;Wheezy&quot;</title><content type='html'>&lt;h3&gt;
Owfs - présentation&lt;/h3&gt;
C’est l’exploitation d&#39;owserver sous forme de système de fichiers.&lt;br /&gt;
&lt;br /&gt;
Owserver s’occupe des communications avec le DS9490R, il tourne en tant que serveur à l’écoute sur le port 4304 (cf conf /etc/owfs.conf).&lt;br /&gt;
Owfs, va interroger le serveur pour rendre un résultat sous forme de répertoires et de fichiers.&lt;br /&gt;
L’intérêt est de rendre le 1-wire plus malléable et de répondre à certains besoins. &lt;br /&gt;
&lt;h3&gt;
Verification&lt;/h3&gt;
Connecter votre contrôleur 1-wire DS9490R sur l&#39;un de vos ports USB. Pour s&#39;assurer qu&#39;il est bien reconnu tappez :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# lsusb&lt;/blockquote&gt;
&lt;br /&gt;
Vous devez voir votre clef apparaite dans la liste:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
&lt;b&gt;Bus 002 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3&gt;
Installation&lt;/h3&gt;
OWFS se trouve dans le repository. Il suffit donc de faire un simple apt-get :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# sudo apt-get install owserver ow-shell owhttpd owfs-fuse&lt;/blockquote&gt;
&lt;h3&gt;
&amp;nbsp;Configuration&lt;/h3&gt;
Il faut ensuite modifie le fichier /etc/owfs.conf, commenter la ligne 16, décommenter la 19 :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# This part must be changed on real installation&lt;br /&gt;
#server: FAKE = DS18S20,DS2405&lt;br /&gt;
#&lt;br /&gt;
# USB device: DS9490&lt;br /&gt;
server: usb = all&lt;/blockquote&gt;
&lt;br /&gt;
Restart pour la prise en compte :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# sudo /etc/init.d/owserver restart&lt;/blockquote&gt;
&lt;br /&gt;
On crée un point de montage et on monte :&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# sudo mkdir /mnt/1wire/&lt;br /&gt;
# sudo owfs -s localhost:4304 -m /mnt/1wire/ --allow_other&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;Résultat :&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# ls -lh&lt;br /&gt;
total 0&lt;br /&gt;
drwxrwxrwx 1 root root 8 mars 11 00:09 81.BD2223000000&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 alarm&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 bus.0&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 bus.1&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 settings&lt;br /&gt;
drwxrwxrwx 1 root root 8 mars 11 00:09 simultaneous&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 statistics&lt;br /&gt;
drwxr-xr-x 1 root root 32 mars 10 23:56 structure&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 system&lt;br /&gt;
drwxr-xr-x 1 root root 8 mars 10 23:56 uncached&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Source : &lt;a href=&quot;http://www.domolio.fr/premiers-pas-avec-le-1-wire-et-owserver-sous-debian-wheezy&quot; target=&quot;_blank&quot;&gt;Domolio&lt;/a&gt;, &lt;a href=&quot;http://owfs.org/&quot; target=&quot;_blank&quot;&gt;owfs.org&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://bokc-fr.blogspot.com/feeds/6852643212953891149/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-installation-sur-une-debian-wheezy.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6852643212953891149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757035952716848983/posts/default/6852643212953891149'/><link rel='alternate' type='text/html' href='http://bokc-fr.blogspot.com/2012/09/owfs-installation-sur-une-debian-wheezy.html' title='OWFS : installation sur une Debian &quot;Wheezy&quot;'/><author><name>Olivier KUNTZ</name><uri>http://www.blogger.com/profile/05102986413444486558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>