<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kodono &#187; Niveau intermédiaire</title>
	<atom:link href="http://blog.kodono.info/wordpress/category/niveau-intermediaire/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kodono.info/wordpress</link>
	<description>Pour tous les technophiles</description>
	<lastBuildDate>Fri, 03 Feb 2012 08:15:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DOMContentLoaded pour cross browser (multi-navigateurs) [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 14:57:18 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=899</guid>
		<description><![CDATA[Après avoir parcouru le Net pour un évènement DOMContentLoaded (qui s&#8217;enclenche avant window.onload) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : http://javascript.info/tutorial/onload-ondomcontentloaded Pour résumer la fonction à utiliser est : function bindReady(handler){ var called = false [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir parcouru le Net pour un évènement <code>DOMContentLoaded</code> (qui s&#8217;enclenche avant <code>window.onload</code>) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : <a href="http://javascript.info/tutorial/onload-ondomcontentloaded" title="DOMContentLoaded cross browser article">http://javascript.info/tutorial/onload-ondomcontentloaded</a></p>
<p>Pour résumer la fonction à utiliser est :</p>
<pre class="brush: javascript">function bindReady(handler){
  var called = false
  function ready() {
    if (called) return
    called = true
    handler()
  }
  if ( document.addEventListener ) { // native event
    document.addEventListener( "DOMContentLoaded", ready, false )
  } else if ( document.attachEvent ) {  // IE
    try { var isFrame = window.frameElement != null } catch(e) {}

    // IE, the document is not inside a frame
    if ( document.documentElement.doScroll &#038;&#038; !isFrame ) {
      function tryScroll(){
        if (called) return
        try {
          document.documentElement.doScroll("left")
          ready()
        } catch(e) {
          setTimeout(tryScroll, 10)
        }
      }
      tryScroll()
    }

    // IE, the document is inside a frame
    document.attachEvent("onreadystatechange", function(){
      if ( document.readyState === "complete" ) {
        ready()
      }
    })
  }

  // Old browsers
  if (window.addEventListener)
    window.addEventListener('load', ready, false)
  else if (window.attachEvent)
    window.attachEvent('onload', ready)
  else {
    var fn = window.onload // very old browser, copy old onload
    window.onload = function() { // replace by new onload and call the old one
      fn &#038;&#038; fn()
      ready()
    }
  }
}</pre>
<p>A partir de là vous pouvez appeler votre fonction avec :</p>
<pre class="brush: javascript">bindReady(function() {
  /* quelque chose qui doit se lancer après le chargement du DOM */
});</pre>
<p>Dans le cas où vous voudriez appeler plusieurs fonctions, alors vous pouvez simplement faire quelque chose comme :</p>
<pre class="brush: javascript">
var fonctionsACharger=[];
bindReady(function() {
  for (var i=0; i&lt;functionsACharger.length;i++) functionsACharger[i]();
});

/* on ajoute les fonctions à charger dans notre tableau */
fonctionsACharger.push(function() {
  /* première chose à faire */
});
fonctionsACharger.push(function() {
  alert("Toutes les fonctions sont maintenant chargées !");
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appeler un lien relatif dans une masterpage [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/18/appeler-un-lien-relatif-dans-une-masterpage-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/18/appeler-un-lien-relatif-dans-une-masterpage-sharepoint/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 09:51:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=888</guid>
		<description><![CDATA[J&#8217;ai eu le cas où j&#8217;avais besoin d&#8217;appeler un fichier Javascript à la racine de tous mes sites Sharepoint (et donc avec un lien relatif au site consulté). Pour cela j&#8217;ai modifié la masterpage en y ajoutant la ligne suivante : &#60;script type="text/javascript" src='&#60;asp:Literal runat="server" Text="&#60;% $SPUrl:~Site/customized.js %>">&#60;/asp:Literal>'> C&#8217;est donc &#60;asp:Literal runat="server" Text="&#60;% $SPUrl:~Site/customized.js %>">&#60;/asp:Literal> [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai eu le cas où j&#8217;avais besoin d&#8217;appeler un fichier Javascript à la racine de tous mes sites Sharepoint (et donc avec un lien relatif au site consulté). Pour cela j&#8217;ai modifié la masterpage en y ajoutant la ligne suivante :</p>
<pre class="brush: html">&lt;script type="text/javascript" src='&lt;asp:Literal runat="server" Text="&lt;% $SPUrl:~Site/customized.js %>">&lt;/asp:Literal>'></script></pre>
<p>C&#8217;est donc <code>&lt;asp:Literal runat="server" Text="&lt;% $SPUrl:~Site/customized.js %>">&lt;/asp:Literal></code> qui fait tout le boulot. Et bien sûr vous pouvez utiliser <code>asp:Literal</code> pour d&#8217;autres appels de fichiers !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/18/appeler-un-lien-relatif-dans-une-masterpage-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Define the preview image for your masterpage [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/17/define-the-preview-image-for-your-masterpage-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/17/define-the-preview-image-for-your-masterpage-sharepoint/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:26:57 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=883</guid>
		<description><![CDATA[You can easily define the preview image for your masterpage : just go to the Master Page Gallery (e.g. : http://your.server.com/your/root/dir/_catalogs/masterpage/) and find your masterpage in the collection. Then move your mouse hover to have the downward arrow that appears to open its context menu. Choose &#171;&#160;Edit Properties&#160;&#187;, and you&#8217;ll see a Preview Image section [...]]]></description>
			<content:encoded><![CDATA[<p>You can easily define the preview image for your masterpage : just go to the Master Page Gallery (e.g. : <a href="http://your.server.com/your/root/dir/_catalogs/masterpage/" title="Example link">http://your.server.com/your/root/dir/_catalogs/masterpage/</a>) and find your masterpage in the collection. Then move your mouse hover to have the downward arrow that appears to open its context menu. Choose &laquo;&nbsp;Edit Properties&nbsp;&raquo;, and you&#8217;ll see a Preview Image section <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>For your information, the image should <strong>216px × 160px</strong> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/17/define-the-preview-image-for-your-masterpage-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Si vous avez l&#8217;erreur &#171;&#160;The security validation for this page is invalid&#160;&#187; [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 11:14:34 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[error message]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=818</guid>
		<description><![CDATA[&#171;&#160;The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.&#160;&#187; Si Sharepoint vous donne ce joli message d&#8217;erreur lorsque vous communiquez avec un de ses web services, alors il est possible que vous ayez oublié d&#8217;ajouter un header &#171;&#160;SOAPAction&#160;&#187; avec le nom du [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&laquo;&nbsp;The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.&nbsp;&raquo;</p></blockquote>
<p>Si Sharepoint vous donne ce joli message d&#8217;erreur lorsque vous communiquez avec un de ses web services, alors il est possible que vous ayez oublié d&#8217;ajouter un <em>header</em> &laquo;&nbsp;SOAPAction&nbsp;&raquo; avec le nom du service associé.</p>
<p>Prenons l&#8217;exemple du web service <em>lists.asmx</em> et de l&#8217;action &laquo;&nbsp;UpdateListItems&nbsp;&raquo;. Si vous allez sur l&#8217;URL suivante <a href="http://votre_sharepoint/_vti_bin/lists.asmx?op=UpdateListItem">http://votre_sharepoint/_vti_bin/lists.asmx?op=UpdateListItem</a>s vous verrez la SOAPAction qu&#8217;il faut définir (cliquez pour agrandir) :<br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/12/20111223_Sharepoint_Web_Service.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/12/20111223_Sharepoint_Web_Service-300x166.png" alt="Copie d&#039;écran du web service lists.asmx" title="20111223_Sharepoint_Web_Service" width="300" height="166" class="aligncenter size-medium wp-image-819" /></a></p>
<p>Dans l&#8217;exemple ci-dessus il faut donc définir l&#8217;header &laquo;&nbsp;SOAPAction&nbsp;&raquo; avec la valeur &laquo;&nbsp;http://schemas.microsoft.com/sharepoint/soap/UpdateListItems&nbsp;&raquo;.<br />
Si vous utilisez l&#8217;AJAX de jQuery cela donnera quelque chose comme ça :</p>
<pre class="brush: javascript">
jQuery.ajax({
        url: "http://your_sharepoint/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'); },
        contentType: "text/xml; charset=\"utf-8\""
    });
</pre>
<p>Si vous utilisez l&#8217;add-on Firefox <a href="https://addons.mozilla.org/fr/firefox/addon/poster/">Poster</a>, alors utilisez l&#8217;onglet &laquo;&nbsp;Headers&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrouver les styles CSS appliqués à un élément du DOM [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 13:55:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=814</guid>
		<description><![CDATA[[niveau intermédiaire] Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément : function getStyle(e) { var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle" var res=[]; $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément :</p>
<pre class="brush: javascript">
function getStyle(e) {
    var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle"
    var res=[];
    $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement parce que c'est plus pratique/simple que le for-in
      if (typeof window.getComputedStyle == "undefined") {
        var kNoCamel=k.replace(/([A-Z])/g, "-$1").toLowerCase(); // sous IE on a des noms de propriétés au format camelCase
        k=v;
        v=kNoCamel;
      }
      if (v.charAt(0) != "-") {
        var vSlice = v.slice(0,7);
        // ici on va chercher à conserver que quelques propriétés CSS bien particulières
        var ok = (vSlice=="border-"||vSlice=="margin-"||vSlice=="padding");
        switch(v) {
          case "background-color":
          case "color":
          case "font-style":
          case "font-weight":
          case "font-size":
          case "font-family":
          case "width":
          case "height":
          case "vertical-align":
          case "text-align":
          case "text-decoration": ok=true;
        }
        if (ok) {
          if (typeof window.getComputedStyle == "function") {
            var vCamel=(v.search("-") != -1 ? v.replace(/(-)(.)/g,function(c) { return c[1].toUpperCase();}) : v); // pour trouver les valeurs associés aux propriétés on se change en camelCase
            res.push(v+":"+arr[vCamel]);
          } else {
            res.push(v+":"+k);
          }
      }
    }
  });
  return res.join(";");
};

alert(getStyle(document.getElementById('test')));
/* qui retournera par exemple:
background-color:transparent;border-bottom-color:rgb(128, 128, 128);
border-bottom-left-radius:0px;border-bottom-right-radius:0px;
border-bottom-style:none;border-bottom-width:0px;border-collapse:collapse;
border-left-color:rgb(128, 128, 128);border-left-style:none;
border-left-width:1px;border-right-color:rgb(128, 128, 128);
border-right-style:none;border-right-width:0px;border-spacing:2px 2px;
border-top-color:rgb(128, 128, 128);border-top-left-radius:0px;
border-top-right-radius:0px;border-top-style:none;border-top-width:1px;
color:rgb(0, 0, 0);font-family:verdana;font-size:16px;font-style:normal;
font-weight:400;height:3738px;margin-bottom:0px;margin-left:0px;margin-right:0px;
margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;
padding-top:0px;text-align:start;text-decoration:none;vertical-align:baseline;width:1756px
*/
</pre>
<p><strong>Edit:</strong> J&#8217;ai découvert qu&#8217;il existe un plugin pour jQuery qui fait un peu près la même chose (sauf qu&#8217;il retourne TOUTES les propriétés et qu&#8217;il est bien <a href="http://jsperf.com/copycss-vs-mine" title="Test comparatif fait sur jsperf.com">plus lent à l&#8217;exécution</a>) : <a href="http://upshots.org/javascript/jquery-copy-style-copycss" title="jQuery CopyCSS plugin">http://upshots.org/javascript/jquery-copy-style-copycss</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a file into Sharepoint document librairies with the Copy.asmx web service [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:33:19 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=808</guid>
		<description><![CDATA[This is the English version of my previous article Did you know it&#8217;s possible to create a file from scratch and to add it into a shared documents library of Sharepoint, and only with Javascript ? To do it we&#8217;ll use the &#171;&#160;copy.asmx&#160;&#187; web service with the &#171;&#160;CopyIntoItems&#160;&#187; function. If you check http://your_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems you&#8217;ll see [...]]]></description>
			<content:encoded><![CDATA[<div lang="en"><strong><em>This is the English version of my previous article</em></strong></p>
<p>Did you know it&#8217;s possible to create a file from scratch and to add it into a shared documents library of Sharepoint, and only with Javascript ?</p>
<p>To do it we&#8217;ll use the &laquo;&nbsp;copy.asmx&nbsp;&raquo; web service with the &laquo;&nbsp;CopyIntoItems&nbsp;&raquo; function.<br />
If you check <strong>http://your_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems</strong> you&#8217;ll see that we have several details about the &laquo;&nbsp;CopyIntoItems&nbsp;&raquo; function. Unfortunately it&#8217;s very difficult to find any information regarding this on the Web, and specially for Javascript&#8230;</p>
<p>So, here is the solution to create a file, e.g. an Excel file (.xls) with a regular HTML table, and we&#8217;re going to save it to this library: &laquo;&nbsp;http://your_sharepoint/Shared Documents/&nbsp;&raquo; (Note: I&#8217;m using jQuery for the AJAX requests).</p>
<pre class="brush: javascript">
// The file content must be encoded into Base64. To do it I use the function available on my blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&#038;=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&#038;c>>++e*2))c=c&lt;&lt;8|a.charCodeAt(d-=!e);return f}

// "Upload" is the name of our function to do the job
// txtContent is a plain text, the content of our file
// destinationUrl is the full path URL to the document library (with the filename included)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?>&quot;
                  +&quot;&lt;soap:Envelope xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns:xsd=\&quot;http://www.w3.org/2001/XMLSchema\&quot; xmlns:soap=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;>&quot;
                  +&quot;&lt;soap:Body>&quot;
                  +&quot;&lt;CopyIntoItems xmlns=\&quot;http://schemas.microsoft.com/sharepoint/soap/\&quot;>&quot;
                  +&quot;&lt;SourceUrl>http://null&lt;/SourceUrl>&quot;
                  +&quot;&lt;DestinationUrls>&lt;string>&quot;+destinationUrl+&quot;&lt;/string>&lt;/DestinationUrls>&quot;
                  +&quot;&lt;Fields>&lt;FieldInformation Type=&apos;File&apos; />&lt;/Fields>&quot;
                  +&quot;&lt;Stream>&quot;+jsStream+&quot;&lt;/Stream>&quot;
                  +&quot;&lt;/CopyIntoItems>&quot;
                  +&quot;&lt;/soap:Body>&quot;
                  +&quot;&lt;/soap:Envelope>&quot;;
    jQuery.ajax({
        url: &quot;http://your_sharepoint/_vti_bin/copy.asmx&quot;,
        type: &quot;POST&quot;,
        dataType: &quot;xml&quot;,
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader(&apos;SOAPAction&apos;, &apos;http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems&apos;); },
        contentType: &quot;text/xml; charset=\&quot;utf-8\&quot;&quot;
    });
}

Upload("&lt;html>&lt;table>&lt;tr>&lt;th>Colonne 1&lt;/th>&lt;th>Colonne B&lt;/th>&lt;/tr>&lt;tr>&lt;td>Total:&lt;/td>&lt;td>1500&lt;/td>&lt;/tr>&lt;/table>&lt;/html>","http://your_sharepoint/Shared Documents/test.xls");
</pre>
<p>Then, when you&#8217;ll click on the new &laquo;&nbsp;test.xls&nbsp;&raquo; file, your web browser will want to open it with Excel. MS Excel should show you a warning message, but just click YES and you&#8217;ll see your table inside the sheet !</p>
<p>Of course you can create any type of files (.txt, .jpg, .doc, &#8230;) and with any content.</p>
<p>Related links:</p>
<ul>
<li><a href="http://blog.stuartwhiteford.com/?p=86">http://blog.stuartwhiteford.com/?p=86</a></li>
<li><a href="http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c">http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx">http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un fichier dans une librairie Sharepoint grâce au web service Copy.asmx [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:12:45 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=792</guid>
		<description><![CDATA[Saviez-vous qu&#8217;il est possible de créer un document de toute pièce et de l&#8217;ajouter dans une librairie (&#171;&#160;Shared Document&#160;&#187;) de Sharepoint seulement avec Javascript ? Pour cela nous utiliserons le web service &#171;&#160;copy.asmx&#160;&#187; avec la fonction &#171;&#160;CopyIntoItems&#160;&#187;. Si vous pointez vers l&#8217;adresse http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems vous remarquerez qu&#8217;on vous fournit un certain nombre de détails quant aux [...]]]></description>
			<content:encoded><![CDATA[<p>Saviez-vous qu&#8217;il est possible de créer un document de toute pièce et de l&#8217;ajouter dans une librairie (&laquo;&nbsp;Shared Document&nbsp;&raquo;) de Sharepoint seulement avec Javascript ?</p>
<p>Pour cela nous utiliserons le web service &laquo;&nbsp;copy.asmx&nbsp;&raquo; avec la fonction &laquo;&nbsp;CopyIntoItems&nbsp;&raquo;.<br />
Si vous pointez vers l&#8217;adresse <strong>http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems</strong> vous remarquerez qu&#8217;on vous fournit un certain nombre de détails quant aux informations qu&#8217;il faut envoyer. Malheureusement c&#8217;est plutôt très mal documenté, surtout pour Javascript&#8230;</p>
<p>Voici donc la solution pour créer un fichier, par exemple un fichier Excel (en .xls) dans lequel on va mettre un tableau HTML banal et qui sera enregistré (dans notre exemple) dans la librairie &laquo;&nbsp;http://votre_sharepoint/Shared Documents/&nbsp;&raquo; (à noter que j&#8217;utilise jQuery pour la requête ajax).</p>
<pre class="brush: javascript">
// le contenu de notre fichier doit être encodé en Base64. Pour cela j'utilise la fonction disponible sur mon blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&#038;=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&#038;c>>++e*2))c=c&lt;&lt;8|a.charCodeAt(d-=!e);return f}

// Notre fonction qu'on va appeler &quot;Upload&quot;
// txtContent est du plain text qui est donc le contenu de notre fichier
// destinationUrl est l&apos;URL complète vers la librairie où le fichier va être stocké (avec le nom du fichier à créer)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?>&quot;
                  +&quot;&lt;soap:Envelope xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns:xsd=\&quot;http://www.w3.org/2001/XMLSchema\&quot; xmlns:soap=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;>&quot;
                  +&quot;&lt;soap:Body>&quot;
                  +&quot;&lt;CopyIntoItems xmlns=\&quot;http://schemas.microsoft.com/sharepoint/soap/\&quot;>&quot;
                  +&quot;&lt;SourceUrl>http://null&lt;/SourceUrl>&quot;
                  +&quot;&lt;DestinationUrls>&lt;string>&quot;+destinationUrl+&quot;&lt;/string>&lt;/DestinationUrls>&quot;
                  +&quot;&lt;Fields>&lt;FieldInformation Type=&apos;File&apos; />&lt;/Fields>&quot;
                  +&quot;&lt;Stream>&quot;+jsStream+&quot;&lt;/Stream>&quot;
                  +&quot;&lt;/CopyIntoItems>&quot;
                  +&quot;&lt;/soap:Body>&quot;
                  +&quot;&lt;/soap:Envelope>&quot;;
    jQuery.ajax({
        url: &quot;http://votre_sharepoint/_vti_bin/copy.asmx&quot;,
        type: &quot;POST&quot;,
        dataType: &quot;xml&quot;,
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader(&apos;SOAPAction&apos;, &apos;http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems&apos;); },
        contentType: &quot;text/xml; charset=\&quot;utf-8\&quot;&quot;
    });
}

Upload("&lt;html>&lt;table>&lt;tr>&lt;th>Colonne 1&lt;/th>&lt;th>Colonne B&lt;/th>&lt;/tr>&lt;tr>&lt;td>Total:&lt;/td>&lt;td>1500&lt;/td>&lt;/tr>&lt;/table>&lt;/html>","http://votre_sharepoint/Shared Documents/test.xls");
</pre>
<p>Ensuite si vous cliquez sur le fichier &laquo;&nbsp;test.xls&nbsp;&raquo; nouvellement créé, votre navigateur va vouloir l&#8217;ouvrir avec Excel. Celui-ci va vous donner un warning, mais il suffit d&#8217;accepter et votre tableau va apparaitre dans votre Excel !<br />
Bien sur on peut créer tout type de fichier (.txt, .jpg, .doc, etc) et avec le contenu que l&#8217;on souhaite.</p>
<p>Liens additionnels:</p>
<ul>
<li><a href="http://blog.stuartwhiteford.com/?p=86">http://blog.stuartwhiteford.com/?p=86</a></li>
<li><a href="http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c">http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx">http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réduire la taille d&#8217;une web font et bien plus encore&#8230;. [bookmark]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/01/reduire-la-taille-dune-web-font-et-bien-plus-encore-bookmark/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/01/reduire-la-taille-dune-web-font-et-bien-plus-encore-bookmark/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 21:00:42 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[À bookmarker]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[font]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=778</guid>
		<description><![CDATA[Le site FontSquirrel propose un outil très puissant qui va vous transformer votre font en tous les formats (woff, eot, ttf, svg, &#8230;), mais il vous propose aussi de réduire la taille de votre font pour une utilisation Web (ce qu&#8217;on nomme le &#171;&#160;subsetting&#160;&#187;). Par exemple si vous n&#8217;allez avoir besoin que des chiffres, il [...]]]></description>
			<content:encoded><![CDATA[<p>Le site <a href="http://www.fontsquirrel.com/fontface/generator">FontSquirrel</a> propose un outil très puissant qui va vous transformer votre font en tous les formats (woff, eot, ttf, svg, &#8230;), mais il vous propose aussi de réduire la taille de votre font pour une utilisation Web (ce qu&#8217;on nomme le &laquo;&nbsp;subsetting&nbsp;&raquo;). Par exemple si vous n&#8217;allez avoir besoin que des chiffres, il est dommage de télécharger une font de 500ko qui contient tous les caractères de tous les alphabets, alors qu&#8217;en ne conservant que les chiffres on pourrait tomber à 10ko.</p>
<p>Un outil à utiliser de toute urgence si vous devez traiter avec des web fonts !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/01/reduire-la-taille-dune-web-font-et-bien-plus-encore-bookmark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tester les performances d&#8217;un code Javascript via un benchmark [performance]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 13:50:10 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=709</guid>
		<description><![CDATA[Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire. Il existe le populaire http://jsperf.com/ qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire.</p>
<p>Il existe le populaire <a href="http://jsperf.com/">http://jsperf.com/</a> qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus (comme jQuery).</p>
<p>Mais si vous avez des besoins un peu plus particulier, ou vous devez travailler sur un environnement restreint, alors il est possible d&#8217;utiliser <a href="http://www.broofa.com/Tools/JSLitmus/">JSLitmus</a>. La façon de l&#8217;utiliser est <strong>incroyablement simple</strong> :</p>
<pre class="brush:javascript">&lt;script src="JSLitmus.js">&lt;/script>
&lt;script>
JSLitmus.test('Mon premier test', function() { /* do something */ });
JSLitmus.test('Mon second test', function() { /* do something else */ });
&lt;/script></pre>
<p>Cela fait apparaître un bouton &laquo;&nbsp;Run tests&nbsp;&raquo; avec un petit tableau. Une fois le test fini le tableau et un graphique vous donnent les informations nécessaires, et en l&#8217;occurrence plus le chiffre (nombre d&#8217;opérations/sec) est grand et mieux c&#8217;est.</p>
<p>Voici un exemple qui montre que l&#8217;utilisation de <code>search</code> est bien plus rapide que de déclarer une <code>RegExp</code> puis appeler <code>match</code> :</p>
<pre class="brush:javascript">&lt;html>
&lt;head>
&lt;script src="http://www.broofa.com/Tools/JSLitmus/JSLitmus.js">&lt;/script>
&lt;/head>
&lt;body>
&lt;script>
JSLitmus.test('Mon premier test', function() { var regExp = new RegExp("pouet$"); var ok = ("pouet".match(regExp) != null); });
JSLitmus.test('Mon deuxième test', function() { var ok = ("pouet".search("pouet") != -1); });
&lt;/script>
&lt;/body>&lt;/html></pre>
<p>Résultat :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/08/JSLitmus-238x300.png" alt="" title="JSLitmus" width="238" height="300" class="aligncenter size-medium wp-image-710" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrouver l&#8217;url d&#8217;une page JSP [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 16:50:18 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=682</guid>
		<description><![CDATA[Dans une page (scriptlet) JSP vous pouvez exécuter du Java grâce aux balises &#60;% %&#62;. C&#8217;est avec cela qu&#8217;on peut retrouver l&#8217;url de la page en cours : &#60;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&#62; &#60;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&#62; &#60;!DOCTYPE html&#62; &#60;html&#62; &#60;head&#62;&#60;title&#62;Exemple JSP&#60;/title&#62;&#60;/head&#62; &#60;body&#62; L'url de la page est : &#60;%= HttpUtils.getRequestURL(request).toString() %&#62;?&#60;%= request.getQueryString() %&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Dans une page (<em>scriptlet</em>) JSP vous pouvez exécuter du Java grâce aux balises <code>&lt;% %&gt;</code>. C&#8217;est avec cela qu&#8217;on peut retrouver l&#8217;url de la page en cours :</p>
<pre class="brush:html">&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Exemple JSP&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
L'url de la page est : &lt;%= HttpUtils.getRequestURL(request).toString() %&gt;?&lt;%= request.getQueryString() %&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stocker un mot de passe en PHP grâce à bcrypt [sécurité]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 17:53:00 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=657</guid>
		<description><![CDATA[[niveau: intermédiaire] Il a été démontré que le stockage de mot de passe n&#8217;est pas chose aisée, et que l&#8217;utilisation d&#8217;une méthode de hashage (MD5, SHA-1, etc) n&#8217;est pas parfaite, même avec l&#8217;utilisation d&#8217;un salt. D&#8217;après cette constatation plusieurs articles indiquent que la meilleure méthode reste l&#8217;utilisation de bcrypt, comme on peut le lire dans [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Il a été démontré que le stockage de mot de passe n&#8217;est pas chose aisée, et que l&#8217;utilisation d&#8217;une méthode de hashage (MD5, SHA-1, etc) n&#8217;est pas parfaite, même avec l&#8217;utilisation d&#8217;un <em>salt</em>. D&#8217;après cette constatation plusieurs articles indiquent que la meilleure méthode reste l&#8217;utilisation de <code>bcrypt</code>, comme on peut le lire dans <a href="http://codahale.com/how-to-safely-store-a-password/">How to safely store a password</a>.</p>
<p>L&#8217;utilisation de <code>bcrypt</code> est assez simple :<br />
1) Télécharger <a href="http://www.openwall.com/phpass/">phpass</a> (fichier .tgz qui contient un fichier <strong>PasswordHash.php</strong>);<br />
2) Appeler <em>PasswordHash.php</em> dans votre page :</p>
<pre class="brush:php">&lt;?php require('includes/PasswordHash.php'); ?></pre>
<p>3) Maintenant vous pouvez utiliser l&#8217;objet PasswordHash comme cela :</p>
<pre class="brush:php">&lt;?php
$password = $_POST["password"];
$hasher = new PasswordHash(8, FALSE);
$hash = $hasher->HashPassword($password);
?></pre>
<p>Et pour vérifier un mot de passe, vous devez utiliser ce petit bout de code :</p>
<pre class="brush:php">&lt;?php // vérification du mot de passe
$password = $_POST["password"];
$password_correct = "password qui vient de la base de données"; /* Le hash stocké précédemment */
$hasher = new PasswordHash(8, FALSE);
$check = $hasher->CheckPassword($password, $password_correct);

if ($check) {
 echo "Password correct!";
}
else {
 echo "Password incorrect...";
}
?></pre>
<p>A noter que si vous souhaitez le rendre compatible avec d&#8217;autres systèmes équivalents (comme <a href="http://www.mindrot.org/projects/jBCrypt/">BCrypt pour Java</a> par exemple), alors il faudra vous assurer que votre machine a bien CRYPT_BLOWFISH d&#8217;installé (on peut le voir avec <code>&lt;?php echo CRYPT_BLOWFISH; ?&gt;</code>) afin d&#8217;avoir une bonne compatibilité des deux systèmes.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evénement sur la fermeture d&#8217;une fenêtre (window close) [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 13:14:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=634</guid>
		<description><![CDATA[[niveau: intermédiaire] Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via MDN) : window.onbeforeunload = function (e) { e = e &#124;&#124; window.event; // For IE [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via <a href="https://developer.mozilla.org/En/DOM/Window.onbeforeunload">MDN</a>) :</p>
<div class="code script">
<pre class="js">window.onbeforeunload = function (e) {
  e = e || window.event;
  // For IE and Firefox prior to version 4
  if (e) e.returnValue = 'Any string';

  // For Safari
  return 'Any string';
};</pre>
</div>
<p>Si vous ne voulez pas ce comportement pour un clic sur un lien, alors il faudra gérer une variable qui sera activée lors d&#8217;un clic sur un tag A (exemple avec jQuery) :</p>
<div class="code script">
<pre class="js">
__okForClosing = false;
window.onbeforeunload = function (e) {
  if (!__okForClosing) {
    e = e || window.event;
    // For IE and Firefox prior to version 4
    if (e) e.returnValue = 'Any string';

    // For Safari
    return 'Any string';
  }
};
$('a').click(function() { __okForClosing=true; });</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple effet highlight sur un element avec jQuery [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 15:48:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=612</guid>
		<description><![CDATA[[niveau: intermédiaire] Si vous souhaitez créer un effet highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre : jQuery.prototype.highlight = function() { jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() { jQuery(this).fadeTo('slow', 1.0, function() { jQuery(this).css("background-color","white"); }); }); }; jQuery('#mon-element').highlight(); A tester ici : Hello, I&#8217;m an example Highlight Total 31337 [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Si vous souhaitez créer un effet  highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre :</p>
<div class="code script">
<pre class="js">
jQuery.prototype.highlight = function() {
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};

jQuery('#mon-element').highlight();
</pre>
</div>
<p><script>
jQuery.prototype.highlight = function() { 
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};
</script></p>
<div style="display:none">
A tester ici :</p>
<div>
<table border="1">
<tr>
<td colspan="2">Hello, I&#8217;m an example</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
<tr>
<td>Total</td>
<td>31337</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
</table>
<p>Ceci est pour le test. <a href="#nogo" onclick="jQuery(this).parent().highlight()">Highlight</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Forcer l&#8217;IPv4 au lieu de l&#8217;IPv6 sur Linux [astuce]</title>
		<link>http://blog.kodono.info/wordpress/2011/03/22/forcer-lipv4-sur-linux-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2011/03/22/forcer-lipv4-sur-linux-astuce/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 12:57:21 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[ipv6]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=566</guid>
		<description><![CDATA[[niveau intermédiaire] J&#8217;ai constaté que l&#8217;utilisation de la commande apt-get étant devenue lente, dû au fait qu&#8217;il essaie de se connecter en ipv6 au lieu d&#8217;ipv4. Pour modifier ce comportement, et forcer votre Linux à résoudre en ipv4 de manière générale, il suffit de modifier le fichier /etc/gai.conf en enlevant le commentaire sur la ligne : [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>J&#8217;ai constaté que l&#8217;utilisation de la commande <em>apt-get</em> étant devenue lente, dû au fait qu&#8217;il essaie de se connecter en ipv6 au lieu d&#8217;ipv4.</p>
<p>Pour modifier ce comportement, et forcer votre Linux à résoudre en ipv4 de manière générale, il suffit de modifier le fichier <code>/etc/gai.conf</code> en enlevant le commentaire sur la ligne :<br />
<code>precedence ::ffff:0:0/96  100</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/03/22/forcer-lipv4-sur-linux-astuce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hack de la BBox pour Android [Astuce]</title>
		<link>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 06:10:34 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=535</guid>
		<description><![CDATA[[niveau intermédiaire] EDIT: une application Android existe maintenant pour BBox (et autres box) : Penetrate. La nouvelle a rapidement fait le tour du web : le mot de pass wifi par défaut de la BBox de Bouygues Telecom se retrouve très facilement à partir du nom du réseau (appelé SSID). Ainsi on trouve un script [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p><strong>EDIT:</strong> une application Android existe maintenant pour BBox (et autres box) : <a href="https://market.android.com/details?id=org.underdev.penetrate&#038;feature=search_result">Penetrate</a>.</p>
<p>La nouvelle a rapidement fait le <a href="http://www.papygeek.com/hacking/pirater-le-wifi-dune-bbox-en-30-secondes/">tour du web</a> : le mot de pass wifi par défaut de la BBox de Bouygues Telecom se retrouve très facilement à partir du nom du réseau (appelé SSID). Ainsi on trouve un script pour Windows, et un autre pour Linux.<br />
J&#8217;ai décidé de transcrire ce script pour Android grâce au projet <a href="https://code.google.com/p/android-scripting/">Android Scripting</a>.</p>
<p><strong>Comment cela fonctionne ?</strong></p>
<p>Il suffit d&#8217;installer l&#8217;<a href="https://code.google.com/p/android-scripting/downloads/list">application SL4A</a>. Ouvrez l&#8217;application, puis &laquo;&nbsp;Menu&nbsp;&raquo; et &laquo;&nbsp;View&nbsp;&raquo;. Choisissez &laquo;&nbsp;Interpreters&nbsp;&raquo;, puis &laquo;&nbsp;Menu&nbsp;&raquo; et &laquo;&nbsp;Add&nbsp;&raquo;. Prenez &laquo;&nbsp;Python&nbsp;&raquo; dans la liste proposée. Cela va télécharger l&#8217;interpréteur Python que vous devrez installer, puis ouvrir, et enfin suivre les instructions.</p>
<p>Ensuite il vous faut récupérer le script python : <a href="http://blog.kodono.info/wordpress/wp-content/uploads/hack_bbox_Android.py">hack_bbox_Android.py</a></p>
<p>Maintenant connectez votre téléphone à l&#8217;ordinateur, activez le périphérique de stockage USB, et allez dans dans le répertoire &laquo;&nbsp;sl4a&nbsp;&raquo; qui doit se trouver à la racine, puis placez le script dans&#8230; &laquo;&nbsp;scripts&nbsp;&raquo; <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Déconnectez votre téléphone de l&#8217;USB, et lancez SL4A, et enfin le script nommé &laquo;&nbsp;Hack_BBox_android.py&nbsp;&raquo;.</p>
<p>Votre téléphone (ou votre tablette) va vous montrer les réseaux Wifi disponibles autour de vous (pensez à activer le wifi avant!). Il suffit d&#8217;en choisir un qui commence par BBox pour que le script se mette à chercher la clé correspondante. Selon la puissance de votre téléphone, l&#8217;opération peut prendre jusqu&#8217;à 15 min (temps constaté sur un HTC Hero, alors qu&#8217;il faut que 2 min sur une tabelette Toshiba Folio 100).</p>
<p>Captures d&#8217;écran :<br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_093349.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_093349-200x300.png" alt="" title="Choisir le wifi" width="200" height="300" class="aligncenter size-medium wp-image-537" /></a><br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_094722.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_094722-200x300.png" alt="" title="Le process commence" width="200" height="300" class="aligncenter size-medium wp-image-538" /></a><br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_095841.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_095841-200x300.png" alt="" title="Résultat" width="200" height="300" class="aligncenter size-medium wp-image-539" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les widgets de la sidebar WordPress ne se sauvegardent pas [WordPress]</title>
		<link>http://blog.kodono.info/wordpress/2011/02/19/probleme-widgets-sidebar-wordpress-non-sauvegardes/</link>
		<comments>http://blog.kodono.info/wordpress/2011/02/19/probleme-widgets-sidebar-wordpress-non-sauvegardes/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 11:20:16 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=520</guid>
		<description><![CDATA[[niveau: intermédiaire] Vous utilisez WordPress et avez choisi un des nombreux thèmes gratuits qu&#8217;on trouve sur le Net. Et puis vous souhaitez utiliser la barre latérale (&#171;&#160;sidebar&#160;&#187;) pour afficher dynamiquement des widgets comme WordPress le permet ? Cependant vous remarquez que même en cliquant sur &#171;&#160;Save&#160;&#187;, les widgets ajoutés ne se sauvegardent jamais&#8230; Tout d&#8217;abord [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Vous utilisez WordPress et avez choisi un des nombreux thèmes gratuits qu&#8217;on trouve sur le Net. Et puis vous souhaitez utiliser la barre latérale (&laquo;&nbsp;sidebar&nbsp;&raquo;) pour afficher dynamiquement des widgets comme WordPress le permet ? Cependant vous remarquez que même en cliquant sur &laquo;&nbsp;Save&nbsp;&raquo;, les widgets ajoutés ne se sauvegardent jamais&#8230;</p>
<p>Tout d&#8217;abord vous devez aller vérifier le fichier sidebar.php (&laquo;&nbsp;Barre latérale&nbsp;&raquo;) dans l&#8217;éditeur de votre thème.<br />
Voici un exemple de ce que vous devriez avoir:</p>
<pre class="brush:php">&lt;ul id="sidebar"&gt;
&lt;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&gt;
 &lt;li id="about"&gt;
  &lt;h2&gt;About&lt;/h2&gt;
  &lt;p&gt;This is my blog.&lt;/p&gt;
 &lt;/li&gt;
 &lt;li id="links"&gt;
  &lt;h2&gt;Links&lt;/h2&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://example.com"&gt;Example&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
&lt;?php endif; ?&gt;
&lt;/ul&gt;</pre>
<p>C&#8217;est le code par défaut <strong>qui fonctionne</strong> pour que la sidebar s&#8217;affiche correctement. Vous devriez donc d&#8217;abord tester en insérant ce code là. On notera que s&#8217;il n&#8217;y a pas de widgets, alors la barre affichera les deux éléments définis par défaut (ici &laquo;&nbsp;About&nbsp;&raquo; et &laquo;&nbsp;Links&nbsp;&raquo;).</p>
<p>Maintenant, il suffit d&#8217;activer la sidebar dans le fichier &laquo;&nbsp;functions.php&nbsp;&raquo; de votre thème. Pour cela, voici le code que vous devriez avoir dans ce fichier :</p>
<pre class="brush:php">&lt;?php
if ( function_exists('register_sidebar') )
    register_sidebar();
?&gt;</pre>
<p>C&#8217;est tout, seulement ces quatre lignes. Il dit à WordPress qu&#8217;il doit activer une sidebar. Maintenant, les widgets doivent pouvoir s&#8217;ajouter et se sauvegarder sans problème.</p>
<p>Supposons maintenant que vous ne voulez pas utiliser le code par défaut, mais que vous voulez une barre latérale un peu plus personnalisée.<br />
Voici un exemple avec des <em>div</em> :</p>
<pre class="brush:php">&lt;div id="sidebar"&gt;
&lt;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&gt;
 &lt;div class="mywidget"&gt;
  &lt;h2 class="title"&gt;About&lt;/h2&gt;
  &lt;p&gt;This is my blog.&lt;/p&gt;
 &lt;/div&gt;
 &lt;div class="mywidget"&gt;
  &lt;h2 class="title"&gt;Links&lt;/h2&gt;
  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://example.com"&gt;Example&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/div&gt;
&lt;?php endif; ?&gt;
&lt;/div&gt;</pre>
<p>Et le code associé à mettre dans le fichier functions.php :</p>
<pre class="brush:php">&lt;?php
if ( function_exists('register_sidebar') )
    register_sidebar(array(
        'before_widget' =&gt; '&lt;div class="monwidget"&gt;',
        'after_widget' =&gt; '&lt;/div&gt;',
        'before_title' =&gt; '&lt;h2 class="title"&gt;',
        'after_title' =&gt; '&lt;/h2&gt;',
    ));
?&gt;</pre>
<p>Maintenant vos widgets devraient s&#8217;enregistrer sans problème !</p>
<p>(Source: <a href="http://automattic.com/code/widgets/themes/">http://automattic.com/code/widgets/themes/</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/02/19/probleme-widgets-sidebar-wordpress-non-sauvegardes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Couper facilement une vidéo [traitement vidéo]</title>
		<link>http://blog.kodono.info/wordpress/2010/09/28/couper-facilement-une-video-traitement-video/</link>
		<comments>http://blog.kodono.info/wordpress/2010/09/28/couper-facilement-une-video-traitement-video/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 10:35:17 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Vidéo]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[encodage]]></category>
		<category><![CDATA[traitement vidéo]]></category>
		<category><![CDATA[vidéo]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=496</guid>
		<description><![CDATA[[niveau intermédiaire] (Cet article suppose que vous ayez des connaissances de base, comme comment lancer un exécutif en ligne de commande, dans le cas contraire vous pouvez vous référez à cet article qui propose deux autres solutions pour Windows) Pour cela vous aurez besoin de mencoder (qui se trouve dans le répertoire de MPlayer disponible [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>(Cet article suppose que vous ayez des connaissances de base, comme comment lancer un exécutif en ligne de commande, dans le cas contraire vous pouvez vous référez à <a href="http://blog.kodono.info/wordpress/?p=418">cet article qui propose deux autres solutions pour Windows</a>)</p>
<p>Pour cela vous aurez besoin de <strong>mencoder</strong> (qui se trouve dans le répertoire de MPlayer disponible pour Windows, Linux et Mac à <a href="http://www.mplayerhq.hu/MPlayer/releases/">http://www.mplayerhq.hu/MPlayer/releases/</a>). Vous devez ensuite lancer une console et taper la commande :<br />
<code>mencoder -ss 00:10:00 mon_fichier.avi -o mon_fichier_split.avi -oac copy -ovc copy</code><br />
Pour couper les dix premières minutes de votre vidéo.</p>
<p>Si vous souhaitez couper la fin de la vidéo, il faudra faire :<br />
<code>mencoder -endpos 00:02:00 mon_fichier.avi -o mon_fichier_split.avi -oac copy -ovc copy</code><br />
Pour couper les deux dernières minutes de votre vidéo.</p>
<p>Le format est sous la forme hh:mm:ss.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/09/28/couper-facilement-une-video-traitement-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour à la ligne pour une commande shell [linux]</title>
		<link>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/</link>
		<comments>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 16:20:49 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=490</guid>
		<description><![CDATA[[niveau intermédiaire] Difficile de trouver un titre correspondant à la problématique. Il se trouve que lorsque vous tapez la commande suivante dans un shell, vous obtenez le résultat ci-dessous: debian:~/tmp# ls test1.txt test deux.txt test_trois.txt debian:~/tmp# for i in $(find . -name &#171;&#160;*.txt&#160;&#187;); do echo $i; done ./test1.txt ./test_trois.txt ./test deux.txt Comme on peut le [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Difficile de trouver un titre correspondant à la problématique.<br />
Il se trouve que lorsque vous tapez la commande suivante dans un shell, vous obtenez le résultat ci-dessous:</p>
<div class="code">debian:~/tmp# ls<br />
test1.txt  test deux.txt  test_trois.txt<br />
debian:~/tmp# for i in $(find . -name &laquo;&nbsp;*.txt&nbsp;&raquo;); do echo $i; done<br />
./test1.txt<br />
./test_trois.txt<br />
./test<br />
deux.txt
</div>
<p>Comme on peut le constater, &laquo;&nbsp;test deux.txt&nbsp;&raquo; ayant un espace dans son nom, il est affiché sur deux lignes dans notre résultat au lieu d&#8217;une seule ligne.</p>
<p>Pour fixer ce problème, il suffit de modifier la <a href="http://tldp.org/LDP/abs/html/internalvariables.html#IFS">variable IFS</a> qui détermine le séparateur, puisque par défaut le séparateur va être un espace.<br />
Pour se faire nous devons mettre notre commande dans un script :</p>
<div class="code">#!/bin/bash<br />
# on demande à ce que le séparateur soit sur le retour à la ligne<br />
IFS=&#8217;<br />
&#8216;<br />
for i in $(find . -name &laquo;&nbsp;*.txt&nbsp;&raquo;); do<br />
  echo $i;<br />
done</div class="code">
<p>Le résultat de l&#8217;exécution de notre script :</p>
<div class="code">debian:~/tmp# ./script.sh<br />
./test1.txt<br />
./test_trois.txt<br />
./test deux.txt</div>
<p>Plus d&#8217;informations sur <a href="http://tldp.org/LDP/abs/html/internalvariables.html#IFS">http://tldp.org/LDP/abs/html/internalvariables.html#IFS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Incruster des sous-titres dans une vidéo [Traitement vidéo]</title>
		<link>http://blog.kodono.info/wordpress/2010/09/09/incruster-des-sous-titres-dans-une-video-traitement-video/</link>
		<comments>http://blog.kodono.info/wordpress/2010/09/09/incruster-des-sous-titres-dans-une-video-traitement-video/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 11:58:48 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[traitement vidéo]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=483</guid>
		<description><![CDATA[[niveau intermédiaire] Il est possible d&#8217;incruster des sous-titres dans une vidéo grâce à VirtualDub et au filtre Subtitler, mais ici nous allons voir une autre solution en utilisant mencoder qui va permettre de faire la manipulation de façon automatique, plus rapidement (environ 20 minutes pour une vidéo d&#8217;une heure) et plus facilement. J&#8217;ai pu réussir [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Il est possible d&#8217;incruster des sous-titres dans une vidéo grâce à VirtualDub et au filtre Subtitler, mais ici nous allons voir une autre solution en utilisant <a href="http://www.mplayerhq.hu/">mencoder</a> qui va permettre de faire la manipulation de façon automatique, plus rapidement (environ 20 minutes pour une vidéo d&#8217;une heure) et plus facilement.</p>
<p>J&#8217;ai pu réussir à obtenir ce que je vais vous expliquer grâce au tutorial du site <a href="http://www.hyjoo.com/sujet-24236.html">Hyjoo.com</a> où vous trouverez plus de détails (en particulier sur les options possibles). On notera que les fichiers indiqués dans ce tutorial sont plus aisés à trouver en se rendant à <a href="http://www.mplayerhq.hu/MPlayer/releases/">http://www.mplayerhq.hu/MPlayer/releases/</a>.</p>
<p>Ayant eu de nombreuses difficultés à obtenir ce que je souhaitais, j&#8217;ai décidé de le partager sur mon blog que cela puisse servir à d&#8217;autres !</p>
<p>A l&#8217;origine de ma recherche concernant l&#8217;incrustation de sous-titres, c&#8217;est parce que j&#8217;utilise <a href="http://www.orb.com">Orb</a> pour me permettre de lire les vidéos de mon ordinateur sur d&#8217;autres ordinateurs via Internet. Malheureusement Orb ne supporte pas les fichiers de sous-titres lors de la lecture d&#8217;une vidéo; de fait aucune phrase n&#8217;apparait lors de la diffusion du film via Orb.</p>
<p>Pour vous permettre l&#8217;incrustation, rien de plus facile :<br />
1) Téléchargez <a href="http://blog.kodono.info/wordpress/wp-content/uploads/MPlayer-1.0rc2.zip">ce fichier ZIP</a> (28Mo) qui contient déjà les bons programmes, c&#8217;est-à-dire MPlayer-1.0rc2 (récupéré sur le site officiel), ainsi que les codecs windows-all-20071007 (récupérés aussi sur le site officiel);<br />
2) Dézippez le fichier et vous allez trouver un répertoire qui se nomme &quot;<strong>to_convert</strong>&quot;;<br />
3) Placez vos fichiers .avi ainsi que vos fichiers de sous-titres .srt (qui doivent avoir le même nom &#8212; par exemple film.avi et film.srt) dans ce répertoire &quot;to_convert&quot;;<br />
4) Cliquez sur le fichier &quot;<strong>start.bat</strong>&quot; qui va lancer l&#8217;incrustation automatiquement sur tous les fichiers;<br />
5) Une fois terminé, les vidéos incrustées sont disponibles dans le répertoire &quot;to_convert&quot; avec le mot &quot;<strong>_subbed</strong>&quot; ajouté au nom d&#8217;origine.</p>
<p>On notera qu&#8217;un certain nombre d&#8217;options peuvent être ajoutées/modifiées :<br />
- taille des sous-titres;<br />
- position des sous-titres;<br />
- encodage de la vidéo;<br />
- dimension de la vidéo;<br />
- etc.<br />
Les options de base sont détaillées dans le tutorial de <a href="<a href="http://www.hyjoo.com/sujet-24236.html">Hyjoo.com</a>, et les options complètes sont sur <a href="http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.txt">le site officiel</a>.<br />
On notera qu&#8217;il ne semble pas possible (pour le moment en tout cas) de modifier la couleur des sous-titres malgré les options <em>-ass</em> et <em>-ass-font-color</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/09/09/incruster-des-sous-titres-dans-une-video-traitement-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Emuler Internet Explorer de Windows Mobile [Web Design]</title>
		<link>http://blog.kodono.info/wordpress/2010/08/03/emuler-internet-explorer-de-windows-mobile-web-design/</link>
		<comments>http://blog.kodono.info/wordpress/2010/08/03/emuler-internet-explorer-de-windows-mobile-web-design/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:48:28 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=462</guid>
		<description><![CDATA[[niveau: intermédiaire] Pour tester la version mobile d&#8217;Internet Explorer il vous faut installer tout un attirail : - Virtual PC 2007; - Gestionnaire pour appareils Windows Mobile 6.1; - 040C/Windows Mobile 6 Professional Images (FRA).msi (attention de bien prendre la version PROFESSIONAL). Une fois tout cela installé, il faut procéder à plusieurs étapes : Dans [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Pour tester la version mobile d&#8217;Internet Explorer il vous faut installer tout un attirail :<br />
- <a href="https://www.microsoft.com/downloads/details.aspx?displaylang=fr&#038;familyid=04d26402-3199-48a3-afa2-2dc0b40a73b6">Virtual PC 2007</a>;<br />
- <a href="https://www.microsoft.com/downloads/details.aspx?familyid=46F72DF1-E46A-4A5F-A791-09F07AAA1914&#038;displaylang=fr">Gestionnaire pour appareils Windows Mobile 6.1</a>;<br />
- <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&#038;displaylang=en">040C/Windows Mobile 6 Professional Images (FRA).msi</a> (attention de bien prendre la version PROFESSIONAL).</p>
<p>Une fois tout cela installé, il faut procéder à plusieurs étapes :</p>
<ol>
<li>Dans le menu Démarrer, choisissez <em>Windows Mobile 6 SDK</em>, puis <em>Standalone Emulator Images</em>, <em>French</em> et <em>Professional</em>; une fois lancé, cliquez sur <em>File</em>, <em>Configure&#8230;</em> puis <em>Network</em> et cochez la case &laquo;&nbsp;Enable NE2000 PCMCIA&nbsp;&raquo; et prenez votre connexion dans la liste déroulante.</li>
<li>Lancez maintenant <em>Device Emulator Manager</em> depuis le menu Démarrer de Windows; une fois lancé, dans l&#8217;arborescence, cliquez droit sur ce qui correspond à l&#8217;émulateur et prenez l&#8217;option &laquo;&nbsp;Cradle&nbsp;&raquo;.</li>
<li>Maintenant lancez le <em>Gestionnaire pour appareil Windows Mobile</em> depuis le menu Démarrer</li>
<li>Le gestionnaire devrait détecter votre émulateur et l&#8217;ajouter; de là vous pourrez configurer la connexion réseau en suivant cette image :<br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2010/08/20100803_emulateur_IE.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2010/08/20100803_emulateur_IE.png" alt="" title="20100803_emulateur_IE" width="468" height="301" class="aligncenter size-full wp-image-463" /></a></li>
<li>Maintenant vous devriez pouvoir lancer Internet Explorer sur votre émulateur et vous devriez avoir accès à Internet !</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/08/03/emuler-internet-explorer-de-windows-mobile-web-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser la première occurrence dans une regexp [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/</link>
		<comments>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 10:04:51 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=458</guid>
		<description><![CDATA[[niveau: intermédiaire] Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &#171;&#160;foo:bar:gniii&#160;&#187; avec la regexp /^(.*):(.*)$/, on va avoir &#171;&#160;foo:bar&#160;&#187; d&#8217;une part et &#171;&#160;gniii&#160;&#187; d&#8217;autre part. Alors comment faire pour obtenir la première occurrence de &#171;&#160;:&#160;&#187; dans notre chaine ? Il suffit d&#8217;ajouter le [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &laquo;&nbsp;foo:bar:gniii&nbsp;&raquo; avec la regexp <i>/^(.*):(.*)$/</i>, on va avoir &laquo;&nbsp;foo:bar&nbsp;&raquo; d&#8217;une part et &laquo;&nbsp;gniii&nbsp;&raquo; d&#8217;autre part.<br />
Alors comment faire pour obtenir la première occurrence de &laquo;&nbsp;:&nbsp;&raquo; dans notre chaine ? Il suffit d&#8217;ajouter le caractère clé &laquo;&nbsp;?&nbsp;&raquo;.<br />
Ainsi dans notre exemple il faut écrire : <i>/^(.*<b>?</b>):(.*)$/</i>, qui retournera &laquo;&nbsp;foo&nbsp;&raquo; et &laquo;&nbsp;bar:gniii&nbsp;&raquo;.</p>
<p>A noter que cela est valable pour la fonction &laquo;&nbsp;match&nbsp;&raquo; de Javascript, mais aussi pour les autres langages comme PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mettre à jour automatiquement WordPress sans FTP [wordpress]</title>
		<link>http://blog.kodono.info/wordpress/2010/06/03/mettre-a-jour-automatiquement-wordpress-sans-ftp-wordpress/</link>
		<comments>http://blog.kodono.info/wordpress/2010/06/03/mettre-a-jour-automatiquement-wordpress-sans-ftp-wordpress/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 11:01:36 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=444</guid>
		<description><![CDATA[[niveau intermédiaire] Depuis la version 2.7 de WordPress il est possible de le mettre à jour automatique. Cependant il arrive que WordPress vous demande de rentrer les crédentials d&#8217;un FTP pour se faire. Si vous utilisez sftp, alors vous avez le choix d&#8217;installer SSH pour PHP, ou ne pas utiliser FTP ! Pour cette dernière [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Depuis la version 2.7 de WordPress il est possible de le mettre à jour automatique. Cependant il arrive que WordPress vous demande de rentrer les crédentials d&#8217;un FTP pour se faire. Si vous utilisez sftp, alors vous avez le choix d&#8217;installer <a href="http://devioustree.co.uk/2009/02/21/auto-update-wordpress-with-sftp/">SSH pour PHP</a>, ou ne pas utiliser FTP !</p>
<p>Pour cette dernière solution il vous faut trouver l&#8217;utilisateur sous lequel tourne Apache (en général www-data ou nobody), puis changer le propriétaire du répertoire de votre blog en mettant celui d&#8217;Apache. Voici un exemple :</p>
<div class="code">monserveur:~$ sudo su &#8211; /* pour passer root */<br />
monserveur:/root/# cd /home/monuser/www/<br />
monserveur:/home/monuser/www/# chown -R www-data blog.kodono.info/</div>
<p>Ainsi WordPress pourra se mettre à jour automatiquement sans devoir passer par des crédentials FTP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/06/03/mettre-a-jour-automatiquement-wordpress-sans-ftp-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encoder les caractères spéciaux d&#8217;une URL en Java (comme Javascript.escape()) [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:38:05 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=429</guid>
		<description><![CDATA[[niveau intermédiaire] Il est possible de reproduire la fonction escape() de Javascript pour le langage Java. Cela permet par exemple de transformer &#171;&#160;François&#160;&#187; en &#171;&#160;Fran%E7ois&#160;&#187; ou encore &#171;&#160;Maël&#160;&#187; en &#171;&#160;Ma%EBl&#160;&#187;. public String myEncodeURI(String str) { StringBuffer ostr = new StringBuffer(); for(int i=0; i&#60;str.length(); i++) { char ch = str.charAt(i); if ((ch &#62;= 0x0020) &#038;&#038; (ch [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Il est possible de reproduire la fonction <em>escape()</em> de Javascript pour le langage Java. Cela permet par exemple de transformer &laquo;&nbsp;François&nbsp;&raquo; en &laquo;&nbsp;Fran%E7ois&nbsp;&raquo; ou encore &laquo;&nbsp;Maël&nbsp;&raquo; en &laquo;&nbsp;Ma%EBl&nbsp;&raquo;.</p>
<div class="code script">
<pre class="js">
public String myEncodeURI(String str) {
  StringBuffer ostr = new StringBuffer();
    for(int i=0; i&lt;str.length(); i++) {
      char ch = str.charAt(i);
      if ((ch &gt;= 0x0020) &#038;&#038; (ch &lt;= 0x007e))
        ostr.append(ch); // Pas besoin de convertir
      else {
        // conversion en HEX
        String hex = Integer.toHexString(str.charAt(i) &#038; 0xFFFF);
        ostr.append("%"+hex.toUpperCase());
      }
    }
    return (new String(ostr));
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bloquer les popups de publicité d&#8217;Avira AntiVir [Astuce]</title>
		<link>http://blog.kodono.info/wordpress/2010/01/27/bloquer-les-popups-de-publicite-davira-antivir-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2010/01/27/bloquer-les-popups-de-publicite-davira-antivir-astuce/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 06:56:08 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=411</guid>
		<description><![CDATA[[niveau intermédiaire] Si vous avez l&#8217;antivirus AntiVir, vous avez remarqué qu&#8217;une fenêtre publicitaire apparaît régulièrement. Voilà un effet bien gênant et désagréable. Pour éviter ce phénomène, voici la manipulation à faire (testée sur Windows Seven Ultimate et ça fonctionne) : 1) Dans le menu Démarrer, exécuter la commande &#171;&#160;secpol.msc&#160;&#187; 2) &#171;&#160;Stratégie de restriction logicielle&#160;&#187; 3) [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Si vous avez l&#8217;antivirus AntiVir, vous avez remarqué qu&#8217;une fenêtre publicitaire apparaît régulièrement. Voilà un effet bien gênant et désagréable. Pour éviter ce phénomène, voici la manipulation à faire (testée sur Windows Seven Ultimate et ça fonctionne) :<br />
1) Dans le menu Démarrer, exécuter la commande &laquo;&nbsp;secpol.msc&nbsp;&raquo;<br />
2) &laquo;&nbsp;Stratégie de restriction logicielle&nbsp;&raquo;<br />
3) &laquo;&nbsp;Règles Supplémentaires&nbsp;&raquo;<br />
4) Clic droit dans la partie de droite, puis &laquo;&nbsp;Nouvelle règle de chemin d&#8217;accès&nbsp;&raquo;<br />
5) Parcourir jusqu&#8217;au fichier nommé &laquo;&nbsp;avnotify.exe&nbsp;&raquo; (dans C:\Program Files\Avira\AntiVir Desktop)<br />
6) Niveau de Sécurité en &laquo;&nbsp;Non autorisé&nbsp;&raquo;</p>
<p>Et voilà !</p>
<p>Si vous n&#8217;avez pas &laquo;&nbsp;secpol.msc&nbsp;&raquo;, voici une autre astuce :<br />
1) Trouvez le fichier &laquo;&nbsp;avnotify.exe&nbsp;&raquo; (dans C:\Program Files\Avira\AntiVir Desktop)<br />
2) Clic droit puis &laquo;&nbsp;Propriétés&nbsp;&raquo;<br />
3) Dans l&#8217;onglet &laquo;&nbsp;Sécurité&nbsp;&raquo;, sélectionnez &laquo;&nbsp;System&nbsp;&raquo; pour l&#8217;utilisateur puis &laquo;&nbsp;Modifier&nbsp;&raquo;<br />
4) Cliquez dans la colonne &laquo;&nbsp;Refuser&nbsp;&raquo; sur &laquo;&nbsp;Lire et Exécuter&nbsp;&raquo;<br />
5) Faites &laquo;&nbsp;OK&nbsp;&raquo;</p>
<p>Je ne l&#8217;ai pas testé mais plusieurs sites proposent cette solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/01/27/bloquer-les-popups-de-publicite-davira-antivir-astuce/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utiliser la fonction mail() de PHP avec exim4 [Linux]</title>
		<link>http://blog.kodono.info/wordpress/2009/12/10/utiliser-la-fonction-mail-de-php-avec-exim4-linux/</link>
		<comments>http://blog.kodono.info/wordpress/2009/12/10/utiliser-la-fonction-mail-de-php-avec-exim4-linux/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:51:20 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=383</guid>
		<description><![CDATA[[niveau intermédiaire] Si vous utilisez une Debian ainsi que PHP, vous voulez certainement pouvoir envoyer des emails grâce à la fonction mail() qu&#8217;offre le langage. Pour cela, on va utiliser exim4 qui est en général déjà installé sur votre Debian toute fraiche (normalement vous avez également /usr/sbin/sendmail qui redirige sur /usr/sbin/exim4). Si vous n&#8217;avez pas [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Si vous utilisez une Debian ainsi que PHP, vous voulez certainement pouvoir envoyer des emails grâce à la fonction <em>mail()</em> qu&#8217;offre le langage. Pour cela, on va utiliser <b>exim4</b> qui est en général déjà installé sur votre Debian toute fraiche (normalement vous avez également /usr/sbin/sendmail qui redirige sur /usr/sbin/exim4). Si vous n&#8217;avez pas <b>exim</b> d&#8217;installé, je vous invite à aller lire <a href="http://www.paperblog.fr/576185/installer-l-envoi-de-mails-depuis-son-site-la-fonction-php-mail/">ce billet de Paperblog</a>.</p>
<p>Par défaut <b>exim4</b> est configuré pour n&#8217;envoyer les emails qu&#8217;aux utilisateurs locaux. Pour modifier ce comportement, vous devez modifier le fichier <b>/etc/exim4/update-exim4.conf.conf</b> en mettant :</p>
<div class="code">dc_eximconfig_configtype=&#8217;internet&#8217;</div>
<p>Redémarrer <b>exim4</b> et vous devriez maintenant pouvoir envoyer des emails au monde entier. Attention cependant de bien bloquer le port 25 de votre machine au monde extérieur (mais pas en local) afin d&#8217;éviter que quiconque puisse utiliser votre serveur SMTP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/12/10/utiliser-la-fonction-mail-de-php-avec-exim4-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utiliser .htaccess pour rediriger selon le referer [Apache]</title>
		<link>http://blog.kodono.info/wordpress/2009/10/08/utiliser-htaccess-pour-rediriger-selon-refere-apache/</link>
		<comments>http://blog.kodono.info/wordpress/2009/10/08/utiliser-htaccess-pour-rediriger-selon-refere-apache/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 11:42:36 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=365</guid>
		<description><![CDATA[[niveau intermédiaire] Dans certains cas on aimerait pouvoir rediriger les personnes en provenance d&#8217;un certain site vers une page en particulier. Par exemple, vous voulez que les personnes venant de Facebook soient redirigées vers une page dédiée, vous devez inscrire cela dans votre fichier .htaccess : RewriteEngine On RewriteCond %{http_referer} ^http://([^.]+\.)*(facebook)\.com RewriteRule ^$ /facebook.php [R=302,L] [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Dans certains cas on aimerait pouvoir rediriger les personnes en provenance d&#8217;un certain site vers une page en particulier. Par exemple, vous voulez que les personnes venant de Facebook soient redirigées vers une page dédiée, vous devez inscrire cela dans votre fichier .htaccess :</p>
<div class="code script">
<pre class="">RewriteEngine On
RewriteCond %{http_referer} ^http://([^.]+\.)*(facebook)\.com
RewriteRule ^$ /facebook.php [R=302,L]</pre>
</div>
<p>A noter que le <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">mod_rewrite</a> d&#8217;Apache aura dû être installé.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/10/08/utiliser-htaccess-pour-rediriger-selon-refere-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Importer des emails Thunderbird/Outlook dans GMail [Google Astuce]</title>
		<link>http://blog.kodono.info/wordpress/2009/08/02/importer-des-emails-thunderbirdoutlook-dans-gmail-google-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2009/08/02/importer-des-emails-thunderbirdoutlook-dans-gmail-google-astuce/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 17:49:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[emails]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=280</guid>
		<description><![CDATA[[niveau: intermédiaire] Après avoir essayé différentes solutions (comme gExodus, MailRedirect et Google Mail Loader), c&#8217;est finalement toGMail qui s&#8217;est imposé comme le meilleur outil pour migrer mes emails depuis Thunderbird vers mon compte GMail. Le très léger programme va utiliser les fonctions IMAP de GMail pour y déposer les messages tels qu&#8217;ils sont à l&#8217;origine, [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Après avoir essayé différentes solutions (comme <a href="http://blog.codefront.net/2004/06/23/gexodus-02-some-new-features-for-gmail-mbox-import-tool/">gExodus</a>, <a href="http://mailredirect.mozdev.org/">MailRedirect</a> et <a href="http://www.marklyon.org/gmail/default.htm">Google Mail Loader</a>), c&#8217;est finalement <a href="http://www.swampgas.com/index.php/tools/togmail-export-thunderbird-mailboxes-into-gmail/">toGMail</a> qui s&#8217;est imposé comme le meilleur outil pour migrer mes emails depuis Thunderbird vers mon compte GMail.</p>
<p>Le très léger programme va utiliser les fonctions IMAP de GMail pour y déposer les messages tels qu&#8217;ils sont à l&#8217;origine, avec les en-têtes intactes. Le procédé est rapide et efficace, et on peut même indiquer un libellé pour les messages importés.</p>
<p>Si vous utilisez Outlook, il vous faudra d&#8217;abord convertir vos boîtes mail au format de Thunderbird.</p>
<p><strong>Attention:</strong> Thunderbird conserve les emails effacés dans vos mailbox (qui se trouvent dans le <em>profil utilisateur/AppData/Roaming/Thunderbird/Profiles/&#8230;</em>) &#8212; vous devrez donc, dans Thunderbird, faire un clic droit sur les mailbox que vous souhaitez importer, puis sélectionner &laquo;&nbsp;Compacter&nbsp;&raquo;. Dès lors Thunderbird va enlever tous les emails qui ne devraient plus s&#8217;y trouver !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/08/02/importer-des-emails-thunderbirdoutlook-dans-gmail-google-astuce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sauvegarder vos contacts du téléphone [Nokia]</title>
		<link>http://blog.kodono.info/wordpress/2009/05/29/sauvegarder-vos-contacts-du-telephone-nokia/</link>
		<comments>http://blog.kodono.info/wordpress/2009/05/29/sauvegarder-vos-contacts-du-telephone-nokia/#comments</comments>
		<pubDate>Fri, 29 May 2009 10:43:22 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Téléphonie]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Nokia]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=235</guid>
		<description><![CDATA[[niveau: débutant] Nokia propose un service gratuit de backup des contacts, des notes et de l&#8217;agenda pour ses téléphones (testé et approuvé par mon N95 depuis plusieurs mois). Cela se nomme My Nokia. Pour l&#8217;utiliser, vous devez d&#8217;abord vous enregistrer. Après quoi vous aurez la possibilité d&#8217;installer My Nokia Backup qui viendra se loger dans [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>Nokia propose un service gratuit de backup des contacts, des notes et de l&#8217;agenda pour ses téléphones (testé et approuvé par mon N95 depuis plusieurs mois). Cela se nomme <a href="http://my.nokia.com/my-nokia-login">My Nokia</a>. Pour l&#8217;utiliser, vous devez d&#8217;abord vous enregistrer. Après quoi vous aurez la possibilité d&#8217;installer <b>My Nokia Backup</b> qui viendra se loger dans <em>Outils &gt; Sync &gt; My Nokia Backup</em>. De là, vous pourrez en 1 clic sauvegarder vos informations sur les serveurs de Nokia. Si l&#8217;on venait à vous voler votre téléphone vous pourriez alors, via le web, récupérer toutes vos informations !</p>
<p>Nokia propose une vidéo de présentation du programme, ainsi que des tutoriaux pour l&#8217;installer et l&#8217;utiliser. Tout se trouve sur la page <a href="https://my.nokia.com/A4761045">&laquo;&nbsp;Apprenez à utiliser My Nokia Backup&nbsp;&raquo;</a>.</p>
<p>A noter que certains opérateurs, comme SFR, proposent ce type de service, mais ça reste payant (SFR taxe à 50 centimes chaque synchronisation). Avec My Nokia Backup la synchronisation est gratuite; hors prix de la connexion à Internet, ce qui est sans frais si vous avez un forfait Internet inclus.</p>
<p>Enfin, une application tiers de ce genre est proposée sur l&#8217;Ovi Store: <a href="http://store.ovi.com/content/68390E00FCBA7B86E040050A8732533D?clickSource=browse&#038;contentArea=applications">Funambol Sync Client</a> (non testée).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/05/29/sauvegarder-vos-contacts-du-telephone-nokia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nokia ouvre son store d&#8217;applications [Nokia]</title>
		<link>http://blog.kodono.info/wordpress/2009/05/27/nokia-ouvre-son-store-dapplications-nokia/</link>
		<comments>http://blog.kodono.info/wordpress/2009/05/27/nokia-ouvre-son-store-dapplications-nokia/#comments</comments>
		<pubDate>Wed, 27 May 2009 07:29:51 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Téléphonie]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Nokia]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=230</guid>
		<description><![CDATA[[niveau: débutant] On a déjà Apple qui propose son lot d&#8217;applications pour l&#8217;iPhone/iPod Touch, puis Androïd de Google, puis Blackberry, et maintenant c&#8217;est Nokia qui décide de suivre ses concurrents en ouvrant sa boutique appelée Ovi Store. Vous y trouverez tout un tas de programmes gratuits ou payants. J&#8217;en testerai quelques uns et proposerai mes [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>On a déjà Apple qui propose son lot d&#8217;applications pour l&#8217;iPhone/iPod Touch, puis Androïd de Google, puis Blackberry, et maintenant c&#8217;est Nokia qui décide de suivre ses concurrents en ouvrant sa boutique appelée <a href="http://store.ovi.com">Ovi Store</a>.</p>
<p>Vous y trouverez tout un tas de programmes gratuits ou payants. J&#8217;en testerai quelques uns et proposerai mes préférés !</p>
<p>Je vous invite aussi à visiter le <a href="http://betalabs.nokia.com/">Nokia Labs</a> sur lequel vous pourrez trouver des applications bien sympathiques.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/05/27/nokia-ouvre-son-store-dapplications-nokia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer Linux dans Windows et tester ainsi les navigateurs Linux [Web Design]</title>
		<link>http://blog.kodono.info/wordpress/2009/05/13/installer-linux-dans-windows-et-tester-ainsi-les-navigateurs-linux-web-design/</link>
		<comments>http://blog.kodono.info/wordpress/2009/05/13/installer-linux-dans-windows-et-tester-ainsi-les-navigateurs-linux-web-design/#comments</comments>
		<pubDate>Wed, 13 May 2009 10:18:48 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=158</guid>
		<description><![CDATA[[niveau: intermédiaire] Linux est un système d&#8217;exploitation qui était réservé au geek, mais depuis plusieurs années les distributeurs font en sorte que cet OS soit plus facile à installer et à utiliser. Linux apparaît d&#8217;ailleurs de plus en plus comme une alternative à Windows. Il y a donc plusieurs raisons qui pourraient vous pousser à [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Linux est un système d&#8217;exploitation qui était réservé au <i>geek</i>, mais depuis plusieurs années les distributeurs font en sorte que cet OS soit plus facile à installer et à utiliser. Linux apparaît d&#8217;ailleurs de plus en plus comme une alternative à Windows.</p>
<p>Il y a donc plusieurs raisons qui pourraient vous pousser à installer Linux:<br />
- tester pour voir à quoi ça ressemble<br />
- regarder les applications disponibles<br />
- comprendre comment il est configurable<br />
- <b>tester les navigateurs</b> pour vos sites web</p>
<p>Pour entrer dans le monde merveilleux du Pingouin (qui en est la mascotte), vous avez principalement trois solutions:</p>
<ol>
<li>l&#8217;installation pure et dure du système en parallèle de Windows, c&#8217;est-à-dire que vous choisissez l&#8217;un ou l&#8217;autre au démarrage de la machine</li>
<li>l&#8217;utilisation d&#8217;un <a href="http://fr.wikipedia.org/wiki/LiveCD">LiveCD</a> qui offre la possibilité de démarrer sur un CD (ou une clé USB) qui contient Linux et ainsi de le tester sans rien installer sur l&#8217;ordinateur</li>
<li>virtualiser Linux (à l&#8217;instar de ce que je vous ai montré <a href="http://blog.kodono.info/wordpress/2009/04/20/tester-un-site-sous-ie6-ie7-et-ie8-web-design/">l&#8217;autre fois pour tester les IE</a>)</li>
</ol>
<p>Je vais ici vous expliquer le dernier cas. En effet, je connais déjà bien Linux, et l&#8217;intérêt majeur pour moi de l&#8217;installer est de pouvoir tester Firefox, Epiphany, et autres navigateurs afin de m&#8217;assurer du design d&#8217;un site web.</p>
<p>Virtualiser Linux dans Windows est simple. Si <a href="http://blog.kodono.info/wordpress/2009/04/20/tester-un-site-sous-ie6-ie7-et-ie8-web-design/">la dernière fois</a> nous avons utilisé VirtualPC c&#8217;est parce que Microsoft fournissait des images déjà prêtes pour leur logiciel. Mais cette fois-ci, nous allons plutôt utiliser <a href="http://www.virtualbox.org/">VirtualBox</a>. Pourquoi ? Parce que si vous installez Linux (et ici ce sera Ubuntu) dans VirtualPC, alors vous allez avoir une résolution d&#8217;écran de 800&#215;600, ce qui n&#8217;est pas franchement pratique. Les démarches pour passer en une résolution supérieure sont compliquées et risquées, alors qu&#8217;avec VirtualBox il suffit de quelques commandes !</p>
<p>La première chose à faire est donc de <a href="http://www.virtualbox.org/wiki/Downloads">télécharger VirtualBox</a> (j&#8217;utilise dans cet exemple la version &laquo;&nbsp;VirtualBox 2.2.2 for Windows hosts&nbsp;&raquo;). Ensuite, il vous faut télécharger une distribution Linux. Il en existe des centaines de versions&#8230; Plusieurs sites essaient de vous guider, comme <a href="http://www.commentcamarche.net/faq/sujet-3742-choisir-une-distribution-linux">Comment ça marche</a>. Pour notre cas pratique nous prendrons <a href="http://www.ubuntu-fr.org/">Ubuntu</a> qui est l&#8217;une des plus utilisées.<br />
Il vous faut récupérer l&#8217;image ISO d&#8217;Ubuntu (à l&#8217;heure où j&#8217;écris ces lignes le fichier est <a href="ftp://ftp.crihan.fr/releases/9.04/ubuntu-9.04-desktop-i386.iso">ftp://ftp.crihan.fr/releases/9.04/ubuntu-9.04-desktop-i386.iso</a>).</p>
<p>Une fois téléchargé, ouvrez VirtualBox (que vous aurez déjà installé). Cliquez sur &laquo;&nbsp;Nouveau&nbsp;&raquo; :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox1.jpg" alt="20090413_vbox1" title="20090413_vbox1" width="467" height="281" class="aligncenter size-full wp-image-162" /><br />
Pour le nom inscrivez &laquo;&nbsp;Ubuntu&nbsp;&raquo;, et pour système d&#8217;exploitation prenez &laquo;&nbsp;Linux&nbsp;&raquo; et la version &laquo;&nbsp;Ubuntu&nbsp;&raquo; :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox2.jpg" alt="20090413_vbox2" title="20090413_vbox2" width="495" height="420" class="aligncenter size-full wp-image-163" /><br />
Continuez avec les options par défaut.</p>
<p>Une fois fini vous devriez avoir cela :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox4.jpg" alt="20090413_vbox4" title="20090413_vbox4" width="769" height="573" class="aligncenter size-full wp-image-164" /></p>
<p>Maintenant cliquez sur &laquo;&nbsp;Lancer&nbsp;&raquo; afin d&#8217;activer l&#8217;assistant de premier lancement. Celui-ci vous demande ce que vous voulez installer. Choisissez &laquo;&nbsp;Disque Optique&nbsp;&raquo; et &laquo;&nbsp;Fichier Image&nbsp;&raquo; en sélectionnant le fichier iso que vous avez téléchargé précédemment (&laquo;&nbsp;ubuntu-9.04-desktop-i386.iso&nbsp;&raquo;) ;<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox5.jpg" alt="20090413_vbox5" title="20090413_vbox5" width="458" height="415" class="aligncenter size-full wp-image-165" /><br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox6.jpg" alt="20090413_vbox6" title="20090413_vbox6" width="632" height="494" class="aligncenter size-full wp-image-166" /></p>
<p>L&#8217;écran d&#8217;installation d&#8217;Ubuntu va démarrer. Vous n&#8217;avez plus qu&#8217;à choisir &laquo;&nbsp;Français&nbsp;&raquo; (avec les flèches) puis de prendre &laquo;&nbsp;Installer Ubuntu&nbsp;&raquo; :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox7.jpg" alt="20090413_vbox7" title="20090413_vbox7" width="650" height="560" class="aligncenter size-full wp-image-167" /></p>
<p>Laissez les options par défaut proposées. Après plusieurs clics et quelques minutes vous vous retrouvez sous Ubuntu ! Malheureusement vous remarquez que vous êtes en résolution 800&#215;600&#8230; Voilà un problème de résolution d&#8217;écran qui est simple à régler.</p>
<p>Tout d&#8217;abord, vérifiez que vous n&#8217;avez aucune image CD chargée. Pour cela, votre bureau Ubuntu doit être vide de toute icône. Si vous voyez une icône en forme de CD avec un nom qui commence par Ubuntu, alors faites un clic droit dessus puis &laquo;&nbsp;Ejecter&nbsp;&raquo;. Une fois fait, sortez de la machine virtuelle (en appuyant sur la touche &laquo;&nbsp;Ctrl&nbsp;&raquo; de votre clavier, mais celle qui se trouve à droite), puis aller dans <em>Périphériques &gt; Installer les Additions invité&#8230;</em> :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox7bis.jpg" alt="20090413_vbox7bis" title="20090413_vbox7bis" width="433" height="637" class="aligncenter size-full wp-image-168" /><br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox8.jpg" alt="20090413_vbox8" title="20090413_vbox8" width="815" height="680" class="aligncenter size-full wp-image-169" /></p>
<p>Devrait alors apparaitre une icône avec un CD sur le bureau :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox12.jpg" alt="20090413_vbox12" title="20090413_vbox12" width="492" height="257" class="aligncenter size-full wp-image-170" /><br />
(si ce n&#8217;est pas le cas, allez dans <em>Machine &gt; Redémarrage</em> pour redémarrer la machine virtuelle)</p>
<p>Maintenant, dans Ubuntu, allez dans <em>Applications &gt; Accessoires &gt; Terminal</em>. Une fenêtre au fond blanc s&#8217;ouvre. Vous allez y taper les commandes suivants :<br />
<code>sudo su<br />
<i>/* entrez votre password défini durant l'installation */</i><br />
cd /media/cdrom0<br />
./VBoxLinuxAdditions-x86.run</code><br />
Après quoi le système vous indique qu&#8217;il doit redémarrer. Ce qui doit donner :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/05/20090413_vbox13.jpg" alt="20090413_vbox13" title="20090413_vbox13" width="817" height="676" class="aligncenter size-full wp-image-171" /></p>
<p>Pour redémarrer, allez dans <em>Machine  &gt; Redémarrage</em>. Une fois le boot terminé, vous verrez Ubuntu avec une résolution d&#8217;écran équivalente à la vôtre !</p>
<p>Vous n&#8217;avez plus qu&#8217;à lancer Firefox pour découvrir le rendu de votre site, et vous pouvez installer d&#8217;autres navigateurs pour les tester.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/05/13/installer-linux-dans-windows-et-tester-ainsi-les-navigateurs-linux-web-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

