<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Snipet</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/taxonomy/term/1176"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/taxonomy/term/1176/atom/feed"/>
  <id>http://artisan.karma-lab.net/taxonomy/term/1176/atom/feed</id>
  <updated>2008-08-07T00:09:30+02:00</updated>
  <entry>
    <title>Requête HEAD en PHP</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1662" />
    <id>http://artisan.karma-lab.net/node/1662</id>
    <published>2008-10-01T11:46:54+02:00</published>
    <updated>2008-10-01T11:47:18+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="PHP" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
  Procédures pour effectuer une requête HEAD sur une URL.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Procédures pour effectuer une requête HEAD sur une URL.
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Via socket pur (pas de SSL)</h2>
	

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> check_url<span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$source</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/parse_url"><span class="kw3">parse_url</span></a><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$address</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/gethostbyname"><span class="kw3">gethostbyname</span></a><span class="br0">&#40;</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'host'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'port'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$port</span><span class="sy0">=</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'host'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'scheme'</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="st0">'http'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$port</span><span class="sy0">=</span><span class="nu0">80</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/error_log"><span class="kw3">error_log</span></a><span class="br0">&#40;</span><span class="st0">&quot;Unsuported scheme : &quot;</span><span class="sy0">.</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'scheme'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <a target="blank" href="http://www.php.net/true"><span class="kw2">true</span></a><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="re0">$socket</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="re0">$address</span><span class="sy0">,</span> <span class="nu0">80</span><span class="sy0">,</span> <span class="re0">$errno</span><span class="sy0">,</span> <span class="re0">$errstr</span><span class="sy0">,</span> broken_anchor_timeout<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$socket</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$errstr</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="re0">$request</span> &nbsp;<span class="sy0">=</span> <span class="st0">&quot;HEAD &quot;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'path'</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="st0">&quot;&quot;</span>?<span class="st0">&quot;/&quot;</span><span class="sy0">:</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'path'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot; HTTP/1.0<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$request</span> <span class="sy0">.=</span> <span class="st0">&quot;Host: &quot;</span><span class="sy0">.</span><span class="re0">$source</span><span class="br0">&#91;</span><span class="st0">'host'</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$request</span> <span class="sy0">.=</span> <span class="st0">&quot;User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092903 Mandriva/1.9.0.3-1mdv2009.0 (2009.0) Firefox/3.0.3<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$request</span> <span class="sy0">.=</span> <span class="st0">&quot;Connection: Close<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$request</span> <span class="sy0">.=</span> <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/stream_set_timeout"><span class="kw3">stream_set_timeout</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="sy0">,</span> broken_anchor_timeout<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <a target="blank" href="http://www.php.net/fputs"><span class="kw3">fputs</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="sy0">,</span> <span class="re0">$request</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$stream_errors</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/stream_get_meta_data"><span class="kw3">stream_get_meta_data</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$stream_errors</span><span class="br0">&#91;</span><span class="st0">'timed_out'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="st0">'Writing timed out'</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/while"><span class="kw1">while</span></a> <span class="br0">&#40;</span><span class="sy0">!</span><a target="blank" href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$return</span> <span class="sy0">.=</span> <a target="blank" href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="sy0">,</span> <span class="nu0">4096</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$stream_errors</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/stream_get_meta_data"><span class="kw3">stream_get_meta_data</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$stream_errors</span><span class="br0">&#91;</span><span class="st0">'timed_out'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="st0">'Reading timed out'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="re0">$lines</span> <span class="sy0">=</span> <span class="sy0">@</span><a target="blank" href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">,</span><span class="re0">$return</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$status</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><a target="blank" href="http://www.php.net/array_shift"><span class="kw3">array_shift</span></a><span class="br0">&#40;</span><span class="re0">$lines</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$ipos</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$status</span><span class="sy0">,</span> <span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$status</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$status</span><span class="sy0">,</span> <span class="re0">$ipos</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$ipos</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$status</span><span class="sy0">,</span> <span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$status</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$status</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="re0">$ipos</span><span class="br0">&#41;</span><span class="sy0">,</span> <a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$status</span><span class="sy0">,</span> <span class="re0">$ipos</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <a target="blank" href="http://www.php.net/foreach"><span class="kw1">foreach</span></a><span class="br0">&#40;</span><span class="re0">$lines</span> <a target="blank" href="http://www.php.net/as"><span class="kw1">as</span></a> <span class="re0">$line</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$line</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$line</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$line</span><span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$iPos</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$line</span><span class="sy0">,</span> <span class="st0">&quot;:&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$iPos</span><span class="sy0">!==</span><a target="blank" href="http://www.php.net/false"><span class="kw2">false</span></a><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$header</span><span class="br0">&#91;</span><a target="blank" href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$line</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="re0">$iPos</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$line</span><span class="sy0">,</span> <span class="re0">$iPos</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$header</span><span class="br0">&#41;</span><span class="sy0">==</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="st0">&quot;No header received&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$status</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">301</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> broken_anchor_check_url<span class="br0">&#40;</span><span class="re0">$header</span><span class="br0">&#91;</span><span class="st0">&quot;Location&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$status</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">200</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$status</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">302</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$status</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot; &quot;</span><span class="sy0">.</span><span class="re0">$status</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <a target="blank" href="http://www.php.net/true"><span class="kw2">true</span></a><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>Envoyer un mail</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1649" />
    <id>http://artisan.karma-lab.net/node/1649</id>
    <published>2008-09-23T20:19:24+02:00</published>
    <updated>2008-09-23T20:19:24+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Perl" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
Envoyer un mail en perl
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Envoyer un mail en perl
</p>
<!--break-->

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co1">#!/usr/bin/perl</span><br />
<br />
<span class="kw2">use</span> strict<span class="sy0">;</span><br />
<span class="kw2">use</span> FileHandle<span class="sy0">;</span><br />
<span class="kw2">use</span> MIME<span class="sy0">::</span><span class="me2">Lite</span><span class="sy0">;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="co1">#ARGV&lt;1)</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;usage: xmail &nbsp;&lt;address&gt; &lt;subject&gt; &lt;file&gt; [&lt;file&gt; [...]]<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/exit.html"><span class="kw3">exit</span></a> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">my</span> <span class="re0">$msg</span><span class="sy0">=</span><span class="kw2">new</span> MIME<span class="sy0">::</span><span class="me2">Lite</span><br />
&nbsp; <span class="st0">'To'</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span>shift<span class="sy0">,</span><br />
&nbsp; <span class="st0">'Subject'</span> &nbsp;<span class="sy0">=&gt;</span>shift<span class="sy0">,</span><br />
&nbsp; <span class="st0">'Type'</span> &nbsp; &nbsp; <span class="sy0">=&gt;</span><span class="st0">'multipart/mixed'</span><span class="sy0">;</span><br />
<br />
<span class="kw1">my</span> <span class="re0">$file</span><span class="sy0">;</span><br />
<span class="kw1">foreach</span> <span class="re0">$file</span> <span class="br0">&#40;</span><span class="re0">@ARGV</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!-</span>e <span class="re0">$file</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="kw2">STDERR</span> <span class="st0">&quot;$file does not exist, skipping...<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; attach <span class="re0">$msg</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type &nbsp; &nbsp; <span class="sy0">=&gt;</span><span class="st0">'application/octet-stream'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Encoding <span class="sy0">=&gt;</span><span class="st0">'base64'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Filename <span class="sy0">=&gt;&amp;</span>basename<span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; Path &nbsp; &nbsp; <span class="sy0">=&gt;</span><span class="re0">$file</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">#my $mail=new FileHandle &quot;|/usr/sbin/sendmail -t&quot;;</span><br />
<span class="co1">#$msg-&gt;print($mail);</span><br />
<span class="re0">$msg</span><span class="sy0">-&gt;</span><span class="me1">send</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">sub</span> basename<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">my</span><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span><span class="sy0">=</span><span class="co5">@_</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">@foo</span><span class="sy0">=</span><a target="blank" href="http://perldoc.perl.org/functions/split.html"><span class="kw3">split</span></a><span class="br0">&#40;</span><span class="st0">'/'</span><span class="sy0">,</span> <span class="re0">$file</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$foo</span><span class="br0">&#91;</span>$<span class="co1">#foo];</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>Retrouver le chemin complet d&#039;un fichier</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1647" />
    <id>http://artisan.karma-lab.net/node/1647</id>
    <published>2008-09-23T19:56:00+02:00</published>
    <updated>2008-09-23T19:56:00+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Bash" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
Retrouver le chemin complet d'un fichier.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Retrouver le chemin complet d'un fichier.
</p>
<!--break-->

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0"># check for one arg</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> -ne <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage : $0 {relative path}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">-1</span><br />
<span class="kw1">fi</span><br />
<br />
<span class="co0"># check to see if $1 exists</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> -e $<span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">B=</span><span class="sy0">`</span><a target="blank" href="http://pwet.fr/man/linux/commandes/basename"><span class="kw2">basename</span></a> $<span class="nu0">1</span><span class="sy0">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">P=</span><span class="sy0">`</span><a target="blank" href="http://pwet.fr/man/linux/commandes/dirname"><span class="kw2">dirname</span></a> $<span class="nu0">1</span><span class="sy0">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># &nbsp;echo BASE:$B &nbsp;PATH:$P</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cd</span> <span class="re1">$P</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">`</span><span class="kw3">pwd</span><span class="sy0">`</span> <span class="sy0">!</span>= <span class="st0">&quot;/&quot;</span> <span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLNAME=</span><span class="sy0">`</span><span class="kw3">pwd</span><span class="sy0">`/</span><span class="re1">$B</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLNAME=</span><span class="sy0">/</span><span class="re1">$B</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$FULLNAME</span><br />
<span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$1 - Not a regular file&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">-1</span><br />
<span class="kw1">fi</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>Synchroniser Subversion et CVS</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1646" />
    <id>http://artisan.karma-lab.net/node/1646</id>
    <published>2008-09-23T13:50:24+02:00</published>
    <updated>2008-09-24T18:26:25+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Outils" />
    <category term="drupalfr.org" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
  La problématique peut sembler étrange mais la preuve que cela arrive vu que j'y suis confronté. Je travaille depuis longtemps sur Subversion et pour rien au monde je ne reviendrais sous CVS. D'un autre côté certaines forges (typiquement cette de Drupal.org) sont eux sous CVS. Et vu que je suis une feignasse sans nom, l'idée de m'amuser à synchroniser cela à la main ne m'a pas amusé bien longtemps. Et une fois de plus, bash me sauve la mise <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>

    ]]></summary>
    <content type="html"><![CDATA[<p>
  La problématique peut sembler étrange mais la preuve que cela arrive vu que j'y suis confronté. Je travaille depuis longtemps sur Subversion et pour rien au monde je ne reviendrais sous CVS. D'un autre côté certaines forges (typiquement cette de Drupal.org) sont eux sous CVS. Et vu que je suis une feignasse sans nom, l'idée de m'amuser à synchroniser cela à la main ne m'a pas amusé bien longtemps. Et une fois de plus, bash me sauve la mise <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>

<!--break-->
<p>
  L'idée est de construire un script qui sache :
  <ul>
     <li>Vérifier que le commit correspondant à une révision touche bien notre projet.</li>
     <li>Extraire le commentaire d'une révision SVN donnée.</li>
     <li>Mettre à jour un dépôt temporaire du projet.</li>
     <li>Synchroniser le dépôt temporaire SVN avec un dépôt temporaire cible CVS.</li>
     <li>Récupérer la liste des modifications effectuées entre les deux (ajout/suppression).</li>
     <li>Appliquer les ajouts/suppression au dépot temporaire CVS.</li>
     <li>Commité les modifications sur le serveur CVS en utilisant le même commentaire que Subversion.</li>
  </ul>
</p>
<p>
  Et pour simplifier encore la manoeuvre, le script en question sera appelé par <a class='external' target='_blank' href='/node/29' >un hook subversion</a> histoire que tout cela se fasse automatiquement. Tout d'abord commençons par la préparation de tout cela. 
</p>
<p>
  La première chose à faire est de créer un dossier à un emplacement donné, par exemple <kbd>/home/www/repos/mon_projet</kbd>. Il faut que ce dossier soit accessible par apache avec les droits qui vont bien pour cela, en lecture ET écriture. En effet, il ne faut pas oublier que le hook subversion, c'est Apache qui va le lancer...
</p>
<p>
  Pour être sur de ne pas être coincé par cet aspect droit, le mieux est de bidouiller temporairement le fichier <kbd>/etc/passwd</kbd> et de modifier le dossier HOME et l'interpréteur de commande d'apache en quelque chose comme cela :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='result'>apache:x:88:88:system user for apache:/home/www:/bin/sh</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Attention, ne surtout pas laisser les choses ainsi une fois le tout installé. Le problème de devoir laisser apache faire cela n'est déjà pas très sécurisé comme méthode, mais si vous laissez cela, c'est un très joli trou de sécurité. Lorsque vous aurez fini, veillez à changer l'interpréteur en <kbd>/bin/false</kbd>. 
</p>
<p>
  Ensuite, faites un <kbd>sudo apache</kbd>, vous devriez déboucher dans vote dossier <kbd>/home/www</kbd>. Allez dans le sous-dossier <kbd>repos/mon_projet</kbd> et faite un check-out du projet subversion. Ceci fait, renommez la racine du projet en <kbd>svn</kbd>. Recommencez l'opération pour CVS. Et renommez aussi mais cette fois en <kbd>cvs</kbd>. Dans les deux cas, je pars du principe que vos deux outils <kbd>cvs</kbd> et <kbd>subversion</kbd> sont configurés pour mémoriser les mots de passe. Là aussi, ce n'est pas le top d'un point de vue sécurité. N'utilisez cela que sur un serveur Apache de confiance, genre interne. 
</p>
<p>
  Maintenant que nous avons nos deux dépôts, il suffit de coller le script suivant dans le dossier <kbd>hooks</kbd> de votre dépôt subversion :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#! /bin/sh</span><br />
<br />
<span class="kw3">cd</span> $<span class="nu0">1</span><span class="sy0">/</span>$<span class="nu0">2</span><span class="sy0">/</span>cvs<br />
<br />
<span class="co0"># check if it is the right target</span><br />
<span class="re2">right_target=</span>$<span class="br0">&#40;</span>svn log -vr$<span class="nu0">3</span> ..<span class="sy0">/</span>svn <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> $<span class="nu0">2</span><span class="br0">&#41;</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> -z <span class="st0">&quot;$right_target&quot;</span> <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span>;<br />
<span class="kw1">fi</span><br />
<br />
<span class="co0"># Grabbing revision log</span><br />
svn log -r$<span class="nu0">3</span> ..<span class="sy0">/</span>svn<span class="sy0">/</span> <span class="sy0">|</span> &nbsp;<a target="blank" href="http://pwet.fr/man/linux/commandes/awk"><span class="kw2">awk</span></a> <span class="st0">'<br />
/r'</span>$<span class="nu0">3</span><span class="st0">'/ { next }<br />
/^<span class="es0">\-</span>+/ &nbsp;{ skip=1 ; next }<br />
/.*/ {<br />
&nbsp; if (skip==1) {<br />
&nbsp; &nbsp; skip=0 ; next<br />
&nbsp; } else {<br />
&nbsp; &nbsp; print $0 }<br />
}'</span> <span class="sy0">&gt;</span> ~<span class="sy0">/</span>tmp<span class="sy0">/</span>message<br />
<br />
<br />
<span class="co0"># Updating SVNsandbox</span><br />
svn up ..<span class="sy0">/</span>svn<span class="sy0">/</span><br />
<br />
<span class="co0"># Updating CVS sandbox</span><br />
cvs up -Pd<br />
<br />
<span class="co0"># Synchronizing SVN with CVS</span><br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/rsync"><span class="kw2">rsync</span></a> -a --cvs-exclude --delete ..<span class="sy0">/</span>svn<span class="sy0">/</span> .<br />
<br />
<span class="co0"># building CVS update script</span><br />
<span class="kw1">function</span> cvs_apply <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="re2">root=</span>$<span class="br0">&#40;</span><a target="blank" href="http://pwet.fr/man/linux/commandes/cat"><span class="kw2">cat</span></a> CVS<span class="sy0">/</span>Root <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/cut"><span class="kw2">cut</span></a> -d<span class="st0">&quot;:&quot;</span> -f4<span class="br0">&#41;</span><span class="sy0">/</span>$<span class="br0">&#40;</span><a target="blank" href="http://pwet.fr/man/linux/commandes/cat"><span class="kw2">cat</span></a> CVS<span class="sy0">/</span>Repository<span class="br0">&#41;</span><span class="sy0">/</span><br />
&nbsp; &nbsp;<span class="kw3">let</span> <span class="re2">root_length=</span><span class="co1">${#root}</span><span class="nu0">+1</span><br />
<br />
&nbsp; &nbsp;cvs status <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/awk"><span class="kw2">awk</span></a> <span class="st0">'<br />
&nbsp; &nbsp; &nbsp;/^<span class="es0">\?</span>/ { print &quot;cvs add &quot;$2 }<br />
&nbsp; &nbsp; &nbsp;/Needs Checkout/ { status=&quot;cvs delete&quot; }<br />
&nbsp; &nbsp; &nbsp;/Locally Modified/ { status=&quot;&quot; }<br />
&nbsp; &nbsp; &nbsp;/Up-to-date/ { status=&quot;&quot; }<br />
&nbsp; &nbsp; &nbsp;/Repository/ {<br />
&nbsp; &nbsp; &nbsp; &nbsp;if &nbsp;(length(status)&gt;0) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print status&quot; &quot;substr($4,'</span><span class="re1">$root_length</span><span class="st0">',length($4)-'</span><span class="re1">$root_length</span><span class="st0">'-1)<br />
&nbsp; &nbsp; &nbsp; &nbsp;}<br />
&nbsp; &nbsp; &nbsp;}'</span> <span class="sy0">&gt;</span> ~<span class="sy0">/</span>tmp<span class="sy0">/</span>cvs-update.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -s ~<span class="sy0">/</span>tmp<span class="sy0">/</span>cvs-update.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a> <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a> ~<span class="sy0">/</span>tmp<span class="sy0">/</span>cvs-update.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">return</span> <span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">return</span> <span class="nu0">0</span><br />
&nbsp; &nbsp; <span class="kw1">fi</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re2">res=</span><span class="nu0">1</span><br />
<span class="kw1">while</span> <span class="br0">&#91;</span> <span class="re1">$res</span> == <span class="nu0">1</span> <span class="br0">&#93;</span> ; <span class="kw1">do</span><br />
&nbsp; cvs_apply<br />
&nbsp; <span class="re2">res=</span><span class="re4">$?</span><br />
<span class="kw1">done</span><br />
cvs commit -F ~<span class="sy0">/</span>tmp<span class="sy0">/</span>message
  </div>
  <div class='caption'>sync-cvs.sh</div>
  </div>
</p>

<p>
   Maintenant il ne reste plus qu'à donner les droits <kbd>apache:apache</kbd> et <kbd>+x</kbd> à ce fichier, et ajouter à la fin du script <kbd>post-commit</kbd> :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">/</span>mon_depot_subversion<span class="sy0">/</span>hooks<span class="sy0">/</span>cvs-sync.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a> <span class="sy0">/</span>home<span class="sy0">/</span>www<span class="sy0">/</span>repos mon_projet $<span class="nu0">2</span> <span class="nu0">2</span><span class="sy0">&gt;&amp;</span><span class="nu0">1</span> <span class="sy0">|</span> logger
  </div>
  
  </div>
</p>
<p>
  L'argument <kbd>$2</kbd> contient le numéro de révision qui vient d'être commité. Sauvez maintenant le tout, et testez. Le <kbd>| logger</kbd> vous permet de voir si des erreurs se produisent dans vos traces <kbd>syslog</kbd>.
</p>


	<a name='chapter_1'></a>
  <h2>Conclusion</h2>
	
<p>
   Outre l'intérêt fonctionnel, ce script permet de voir à quel point la commande <kbd>awk</kbd> est aussi peu connue que pratique. C'est un véritable couteau suisse facile à mettre en oeuvre pour parser rapidement des textes. 
</p>
    ]]></content>
  </entry>
  <entry>
    <title>SWT - Drag &amp; Drop</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1626" />
    <id>http://artisan.karma-lab.net/node/1626</id>
    <published>2008-09-10T08:56:00+02:00</published>
    <updated>2008-09-10T08:56:23+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="java" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
  Un petit exemple de drag & drop entre un navigateur (source URL) et une application SWING.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Un petit exemple de drag & drop entre un navigateur (source URL) et une application SWING.
</p>
<!--break-->
<p>
D'abord la classe qui gère le type de contenu URL

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">package</span> <span class="co2">net.karmaLab.thema.ui.dnd</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">java.util.logging.Logger</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">net.karmaLab.traces.Traces</span><span class="sy0">;</span><br />
<br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.dnd.ByteArrayTransfer</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.dnd.TransferData</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.swt.internal.gtk.OS</span><span class="sy0">;</span><br />
<br />
<span class="kw1">public</span> <span class="kw1">class</span> URLTransfer <span class="kw1">extends</span> ByteArrayTransfer <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> URLTransfer _instance <span class="sy0">=</span> <span class="kw1">new</span> URLTransfer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> TYPE_NAMES <span class="sy0">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;COMPOUND_TEXT&quot;</span>, <span class="st0">&quot;UTF8_STRING&quot;</span>, <span class="st0">&quot;TEXT&quot;</span>, <span class="st0">&quot;text/plain&quot;</span>, <span class="st0">&quot;text/html&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> TYPE_IDS <span class="sy0">=</span> registerTypes<span class="br0">&#40;</span>TYPE_NAMES<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/** static class logger. */</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw1">private</span> <span class="kw1">static</span> Logger logger <span class="sy0">=</span> Traces.<span class="me1">LOGGER</span><span class="br0">&#40;</span>URLTransfer.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> URLTransfer getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> _instance<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp;* @param typeNames<br />
&nbsp; &nbsp; &nbsp;* @return<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> registerTypes<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> typeNames<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> ids <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>typeNames.<span class="me1">length</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> typeNames.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ids<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> registerType<span class="br0">&#40;</span>typeNames<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> ids<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">protected</span> <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getTypeIds<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> TYPE_IDS<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">protected</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> getTypeNames<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> TYPE_NAMES<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp;* @param transferData<br />
&nbsp; &nbsp; &nbsp;* @return<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> hex<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AInteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">toHexString</span><span class="br0">&#40;</span>transferData.<span class="me1">type</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <span class="kw4">boolean</span> isSupportedType<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> res <span class="sy0">=</span> <span class="kw1">super</span>.<span class="me1">isSupportedType</span><span class="br0">&#40;</span>transferData<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> match <span class="sy0">=</span> <span class="st0">&quot;none&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> TYPE_IDS.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>TYPE_IDS<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">==</span> transferData.<span class="me1">type</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; match <span class="sy0">=</span> TYPE_NAMES<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; logger.<span class="me1">config</span><span class="br0">&#40;</span><span class="st0">&quot;Is Supporteed:&quot;</span> <span class="sy0">+</span> hex<span class="br0">&#40;</span>transferData<span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;[&quot;</span> <span class="sy0">+</span> match <span class="sy0">+</span> <span class="st0">&quot;:&quot;</span> <span class="sy0">+</span> res <span class="sy0">+</span> <span class="st0">&quot;]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> res<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <span class="kw4">void</span> javaToNative<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> object, TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;javaToNative called&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override <span class="kw1">public</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> nativeToJava<span class="br0">&#40;</span>TransferData transferData<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>isSupportedType<span class="br0">&#40;</span>transferData<span class="br0">&#41;</span> <span class="sy0">||</span> transferData.<span class="me1">pValue</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> size <span class="sy0">=</span> transferData.<span class="me1">format</span> <span class="sy0">*</span> transferData.<span class="me1">length</span> <span class="sy0">/</span> <span class="nu0">8</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> buffer <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">byte</span><span class="br0">&#91;</span>size<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; OS.<span class="me1">memmove</span><span class="br0">&#40;</span>buffer, transferData.<span class="me1">pValue</span>, size<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#40;</span>buffer, <span class="nu0">0</span>, buffer.<span class="me1">length</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
  Utilisation :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;<span class="kw1">private</span> <span class="kw1">final</span> <span class="kw1">class</span> DropItemAdapter <span class="kw1">extends</span> DropTargetAdapter <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;@Override <span class="kw1">public</span> <span class="kw4">void</span> dragOver<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTargetEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTargetEvent</span></a> event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// try {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// if (getURIHandleres((TreeItem) event.item, new URI((String) event.data)).size() == 0) {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// System.out.println((String) event.data);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// catch (URISyntaxException e) {</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// e.printStackTrace();</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// }</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;@Override <span class="kw1">public</span> <span class="kw4">void</span> drop<span class="br0">&#40;</span><span class="kw1">final</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTargetEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTargetEvent</span></a> event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMenu+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Menu</span></a> popUpMenu <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;popUpMenu <span class="sy0">=</span> buildNewItemMenu<span class="br0">&#40;</span><span class="br0">&#40;</span>TreeItem<span class="br0">&#41;</span> event.<span class="me1">item</span>, <span class="kw1">new</span> URI<span class="br0">&#40;</span><span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> event.<span class="me1">data</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">catch</span> <span class="br0">&#40;</span>URISyntaxException e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;popUpMenu.<span class="me1">setVisible</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
<br />
<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTarget+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTarget</span></a> dt <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADropTarget+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DropTarget</span></a><span class="br0">&#40;</span>tree, DND.<span class="me1">DROP_DEFAULT</span> <span class="sy0">|</span> DND.<span class="me1">DROP_COPY</span> <span class="sy0">|</span> DND.<span class="me1">DROP_LINK</span> <span class="sy0">|</span> DND.<span class="me1">DROP_MOVE</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;dt.<span class="me1">setTransfer</span><span class="br0">&#40;</span><span class="kw1">new</span> Transfer<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span> URLTransfer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;dt.<span class="me1">addDropListener</span><span class="br0">&#40;</span><span class="kw1">new</span> DropItemAdapter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>
</p>    ]]></content>
  </entry>
  <entry>
    <title>JQuery - Position de la souris</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1624" />
    <id>http://artisan.karma-lab.net/node/1624</id>
    <published>2008-09-08T19:55:46+02:00</published>
    <updated>2008-09-08T19:55:46+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="jQuery" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
Mise à jour en temps réel de la position de la souris sur une page. 
</p>    ]]></summary>
    <content type="html"><![CDATA[<p>
Mise à jour en temps réel de la position de la souris sur une page. 
</p>


  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw2">var</span> mouse_position_x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">,</span> mouse_position_y <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="kw2">function</span> ajad_updateMousePosition<span class="br0">&#40;</span>context<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>document.<span class="me1">captureEvents</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mouse_position_x <span class="sy0">=</span> Number<span class="br0">&#40;</span>context.<span class="me1">pageX</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mouse_position_y <span class="sy0">=</span> Number<span class="br0">&#40;</span>context.<span class="me1">pageY</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>window.<span class="me1">event</span>.<span class="me1">clientX</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouse_position_x <span class="sy0">=</span> Number<span class="br0">&#40;</span>window.<span class="me1">event</span>.<span class="me1">clientX</span> <span class="sy0">+</span> document.<span class="me1">documentElement</span>.<span class="me1">scrollLeft</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouse_position_y <span class="sy0">=</span> Number<span class="br0">&#40;</span>window.<span class="me1">event</span>.<span class="me1">clientY</span> <span class="sy0">+</span> document.<span class="me1">documentElement</span>.<span class="me1">scrollTop</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">// &nbsp;log(mouse_position_x+&quot;:&quot;+mouse_position_y);</span><br />
<span class="br0">&#125;</span><br />
<br />
$<span class="br0">&#40;</span>document.<span class="me1">body</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span>ajad_updateMousePosition<span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>JQuery - Alternance de couleurs sur les lignes d&#039;une table</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1623" />
    <id>http://artisan.karma-lab.net/node/1623</id>
    <published>2008-09-08T19:50:01+02:00</published>
    <updated>2008-09-08T19:50:01+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="jQuery" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
Alternance de couleurs sur les lignes d'une table.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Alternance de couleurs sur les lignes d'une table.
</p>
<!--break-->

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw2">function</span> table_alternate<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;$<span class="br0">&#40;</span><span class="st0">'TABLE.alternate tbody tr'</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>index<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>index <span class="sy0">%</span> <span class="nu0">2</span> <span class="sy0">==</span> <span class="nu0">1</span><span class="br0">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'background-color'</span><span class="sy0">,</span><span class="st0">'#F0F0F0'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span> <br />
&nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'background-color'</span><span class="sy0">,</span><span class="st0">'white'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>Forcer la reconnection du routeur Linksys</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1612" />
    <id>http://artisan.karma-lab.net/node/1612</id>
    <published>2008-08-07T00:19:19+02:00</published>
    <updated>2008-08-07T00:19:19+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Perl" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>
L'idée est de forcer le rédémarrage d'un routeur linksys. Cela n'a plus grand intérêt mais cela peut service à d'autres usages.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
L'idée est de forcer le rédémarrage d'un routeur linksys. Cela n'a plus grand intérêt mais cela peut service à d'autres usages.
</p>
<!--break-->
<p>

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co1">#! /usr/bin/perl</span><br />
<br />
<span class="kw2">use</span> LWP<span class="sy0">;</span><br />
<span class="co1">#use LWP::Debug qw(+);</span><br />
<br />
<br />
<span class="kw1">my</span> <span class="re0">$browser</span> <span class="sy0">=</span> LWP<span class="sy0">::</span><span class="me2">UserAgent</span><span class="sy0">-&gt;</span><span class="me1">new</span><span class="sy0">;</span><br />
<span class="re0">$browser</span><span class="sy0">-&gt;</span><span class="me1">credentials</span><span class="br0">&#40;</span><span class="st0">'moya.karma-lab.net:80'</span><span class="sy0">,</span> <span class="st0">'', '</span>root<span class="st0">', '</span>karma8<span class="sy0">%</span>2lab9<span class="sy0">*&amp;</span><span class="st0">');<br />
my $router_url='</span>http<span class="sy0">://</span>moya.karma<span class="sy0">-</span>lab.net<span class="st0">';<br />
sub get_setup<br />
{<br />
&nbsp; my $request = HTTP::Request-&gt;new( GET =&gt; $router_url.&quot;/index.asp&quot; );<br />
&nbsp; my $response = $browser-&gt;request($request);<br />
<br />
&nbsp; if (!$response-&gt;is_success) <br />
&nbsp; {<br />
&nbsp; &nbsp; print &quot;Impossible d'</span>avoir la page d<span class="st0">'index :&quot;.$response-&gt;status_line.&quot;\n&quot;;<br />
&nbsp; } <br />
}<br />
<br />
<br />
sub is_adsl_up<br />
{<br />
&nbsp; my $request = HTTP::Request-&gt;new( GET =&gt; $router_url.&quot;/Status_DSL.asp&quot; );<br />
&nbsp; my $response = $browser-&gt;request($request);<br />
<br />
&nbsp; if ($response-&gt;is_success) <br />
&nbsp; {<br />
&nbsp; &nbsp; my $status=$response-&gt;content;<br />
&nbsp; &nbsp; if ($status =~ m/.*share\.nottrained.*/)<br />
&nbsp; &nbsp; { &nbsp;<br />
&nbsp; &nbsp; &nbsp; return 0;<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
&nbsp; else <br />
&nbsp; {<br />
&nbsp; &nbsp; print &quot;Impossible d'</span>avoir le status ADSL <span class="sy0">:</span><span class="st0">&quot;.$response-&gt;status_line.&quot;</span>\n<span class="st0">&quot;;<br />
&nbsp; } <br />
&nbsp; return 1;<br />
}<br />
<br />
sub is_ppp_up<br />
{<br />
&nbsp; my $request = HTTP::Request-&gt;new( GET =&gt; $router_url.&quot;</span><span class="sy0">/</span>Status_Router.asp<span class="st0">&quot; );<br />
&nbsp; my $response = $browser-&gt;request($request);<br />
<br />
&nbsp; if ($response-&gt;is_success) <br />
&nbsp; {<br />
&nbsp; &nbsp; my $status=$response-&gt;content;<br />
&nbsp; &nbsp; if ($status =~ m/.*share<span class="es0">\.</span>down.*/)<br />
&nbsp; &nbsp; { &nbsp;<br />
&nbsp; &nbsp; &nbsp; return 0;<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
&nbsp; else <br />
&nbsp; {<br />
&nbsp; &nbsp; print &quot;</span>Impossible d<span class="st0">'avoir le status PPP :&quot;.$response-&gt;status_line.&quot;\n&quot;;<br />
&nbsp; } <br />
&nbsp; return 1;<br />
}<br />
<br />
sub reset_ppp<br />
{<br />
&nbsp; print &quot;Reseting PPP...\n&quot;;<br />
&nbsp; get_setup();<br />
&nbsp; my $request = HTTP::Request-&gt;new( POST =&gt; $router_url.&quot;/apply.cgi&quot; );<br />
&nbsp; $request-&gt;authorization_basic('</span>root<span class="st0">', '</span>karma8<span class="sy0">%</span>2lab9<span class="sy0">*&amp;</span><span class="st0">');<br />
my $headers = $request-&gt;headers();<br />
<br />
# Simulation d'</span>un navigateur Konqueror. J<span class="st0">'aurais pu mettre <br />
# &nbsp;'</span>Mozilla<span class="sy0">/</span><span class="nu0">4.0</span> <span class="br0">&#40;</span>compatible<span class="sy0">;</span> MSIE <span class="nu0">6.0</span><span class="sy0">;</span> Windows NT <span class="nu0">5.1</span><span class="br0">&#41;</span><span class="st0">'<br />
# Pour simuler un IE... <br />
$headers-&gt;header( '</span>User<span class="sy0">-</span>Agent<span class="st0">','</span>Mozilla<span class="sy0">/</span><span class="nu0">5.0</span> <span class="br0">&#40;</span>compatible<span class="sy0">;</span> Konqueror<span class="sy0">/</span><span class="nu0">3.4</span><span class="sy0">;</span> Linux<span class="br0">&#41;</span> KHTML<span class="sy0">/</span><span class="nu0">3.4</span><span class="nu0">.2</span> <span class="br0">&#40;</span>like Gecko<span class="br0">&#41;</span><span class="st0">');<br />
<br />
# Ajoute une liste de contenu supporté (types mime)<br />
$headers-&gt;header( '</span>Accept<span class="st0">', '</span>text<span class="sy0">/</span>html<span class="sy0">,</span> image<span class="sy0">/</span>jpeg<span class="sy0">,</span> image<span class="sy0">/</span>png<span class="sy0">,</span> text<span class="sy0">/*,</span> image<span class="sy0">/*,</span> <span class="sy0">*/*</span><span class="st0">');<br />
<br />
# Authorize le serveur à renvoyer des contenus compressés. Attention, vous devrez les décompresser vous même. A prendre avec précaution.<br />
$headers-&gt;header( '</span>Accept<span class="sy0">-</span>Encoding<span class="st0">','</span>x<span class="sy0">-</span>gzip<span class="sy0">,</span> x<span class="sy0">-</span>deflate<span class="sy0">,</span> gzip<span class="sy0">,</span> deflate<span class="st0">');<br />
<br />
# Type d'</span>encodage caractères <a target="blank" href="http://perldoc.perl.org/functions/accept.html"><span class="kw3">accept</span></a>é<br />
<span class="re0">$headers</span><span class="sy0">-&gt;</span><span class="me1">header</span><span class="br0">&#40;</span> <span class="st0">'Accept-Charset'</span><span class="sy0">,</span> <span class="st0">'iso-8859-15, utf-8;q=0.5, *;q=0.5'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1"># Type de langage accepté</span><br />
<span class="re0">$headers</span><span class="sy0">-&gt;</span><span class="me1">header</span><span class="br0">&#40;</span> <span class="st0">'Accept-Language'</span><span class="sy0">,</span> <span class="st0">'fr, en'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1"># Bien pratique, permet de faire croire au serveur que l'on vient du site www.sourceclick.com</span><br />
<span class="re0">$headers</span><span class="sy0">-&gt;</span><span class="me1">header</span><span class="br0">&#40;</span><span class="st0">'Referer'</span><span class="sy0">,</span> <span class="st0">'http://moya.karma-lab.net/index.asp'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="re0">$request</span><span class="sy0">-&gt;</span><span class="me1">content_type</span><span class="br0">&#40;</span><span class="st0">'application/x-www-form-urlencoded'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$request</span><span class="sy0">-&gt;</span><span class="me1">content</span><span class="br0">&#40;</span><span class="st0">'submit_button=index&amp;change_action=&amp;submit_type=&amp;action=Apply&amp;daylight_time=1&amp;lan_ipaddr=4&amp;vcc_config=&amp;mtu_config=&amp;wan_connection=0&amp;wan_applyonboot=1&amp;wan_encapmode=pppoe&amp;now_encapmode=pppoe&amp;wan_multiplex=llc&amp;wan_qostype=ubr&amp;wan_autodetect=1&amp;pppoe_config=&amp;pppoe_servicename=wanadoo&amp;pppoe_username=USERe&amp;pppoe_password=PASSWORD&amp;pppoe_demand=0&amp;pppoe_redialperiod=20&amp;wan_hostname=moya&amp;wan_domain=karma-lab.net&amp;mtu_auto=1&amp;lan_ipaddr_0=192&amp;lan_ipaddr_1=168&amp;lan_ipaddr_2=154&amp;lan_ipaddr_3=100&amp;lan_netmask=255.255.255.0&amp;lan_proto=static&amp;dhcp_check=&amp;time_zone=-08+1+1&amp;timer_interval=3600&amp;_daylight_time=1'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">my</span> <span class="re0">$response</span> <span class="sy0">=</span> <span class="re0">$browser</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">is_success</span><span class="br0">&#41;</span> <br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;Impossible de ré-initialiser le PPP :&quot;</span>.<span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">status_line</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span> <br />
<span class="br0">&#125;</span><br />
<br />
<span class="co5">$|</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span>is_adsl_up<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">==</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;ADSL Down. Nothing to do about that...<span class="es0">\n</span>&quot;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;ADSL Up<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>is_ppp_up<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">==</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;PPP Down.<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; reset_ppp<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="kw1">else</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;PPP Up. Ok.<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
    ]]></content>
  </entry>
  <entry>
    <title>Logger SNMP pour linksys</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1611" />
    <id>http://artisan.karma-lab.net/node/1611</id>
    <published>2008-08-07T00:11:24+02:00</published>
    <updated>2008-08-07T00:11:24+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Perl" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>Un logger smnp pour les linksys</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Un logger smnp pour les linksys</p>
<!--break-->

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw2">use</span> strict<span class="sy0">;</span><br />
<span class="kw2">use</span> warnings<span class="sy0">;</span><br />
<br />
<span class="kw2">use</span> IO<span class="sy0">::</span><span class="me2">Socket</span><span class="sy0">;</span><br />
<span class="kw2">use</span> FileHandle<span class="sy0">;</span><br />
<span class="kw2">use</span> File<span class="sy0">::</span><span class="me2">Temp</span> <span class="co2">qw/ tempfile tempdir /</span><span class="sy0">;</span><br />
<span class="kw2">use</span> File<span class="sy0">::</span><span class="me2">Copy</span><span class="sy0">;</span><br />
<br />
<br />
<span class="sy0">&amp;</span>bindServer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">sub</span> bindServer<br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="co1"># Open &amp; Listen</span><br />
&nbsp; <span class="kw1">my</span> <span class="re0">$serverSocket</span> <span class="sy0">=</span> <span class="kw2">new</span> IO<span class="sy0">::</span><span class="me2">Socket</span><span class="sy0">::</span><span class="me2">INET</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; LocalHost <span class="sy0">=&gt;</span> <span class="st0">'192.168.0.101'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; LocalPort <span class="sy0">=&gt;</span> <span class="st0">'162'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; Proto <span class="sy0">=&gt;</span> <span class="st0">'udp'</span><span class="sy0">,</span><br />
<span class="co1"># &nbsp; Listen =&gt; SOMAXCONN,</span><br />
&nbsp; &nbsp; Type <span class="sy0">=&gt;</span> SOCK_DGRAM<span class="sy0">,</span><br />
&nbsp; &nbsp; Reuse <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="re0">$serverSocket</span> <span class="kw1">or</span> <a target="blank" href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Unable to bind :$!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">my</span><span class="br0">&#40;</span><span class="re0">$clientSocket</span><span class="sy0">,</span> <span class="re0">$c_addr</span><span class="sy0">,</span> <span class="re0">$buffer</span><span class="sy0">,</span><span class="re0">$clientAddress</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="co1"># Waiting for call...</span><br />
&nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a><span class="br0">&#40;</span> <span class="st0">&quot;Listening ...&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$clientSocket</span><span class="sy0">,</span> <span class="re0">$clientAddress</span><span class="br0">&#41;</span> <span class="sy0">=</span> <span class="re0">$serverSocket</span><span class="sy0">-&gt;</span><span class="me1">accept</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1"># Get &quot;client&quot; identity</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="br0">&#40;</span><span class="re0">$clientPort</span><span class="sy0">,</span> <span class="re0">$c_ip</span><span class="br0">&#41;</span> <span class="sy0">=</span>sockaddr_in<span class="br0">&#40;</span><span class="re0">$clientAddress</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$clientIP</span> <span class="sy0">=</span> inet_ntoa<span class="br0">&#40;</span><span class="re0">$c_ip</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$clientHost</span> <span class="sy0">=</span><a target="blank" href="http://perldoc.perl.org/functions/gethostbyaddr.html"><span class="kw3">gethostbyaddr</span></a><span class="br0">&#40;</span><span class="re0">$c_ip</span><span class="sy0">,</span> AF_INET<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><a target="blank" href="http://perldoc.perl.org/functions/defined.html"><span class="kw3">defined</span></a> <span class="br0">&#40;</span><span class="re0">$buffer</span> <span class="sy0">=</span> <span class="sy0">&lt;</span><span class="re0">$clientSocket</span><span class="sy0">&gt;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="re0">$buffer</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>    ]]></content>
  </entry>
  <entry>
    <title>Chemin complet d&#039;un fichier</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1610" />
    <id>http://artisan.karma-lab.net/node/1610</id>
    <published>2008-08-07T00:09:30+02:00</published>
    <updated>2008-08-07T00:09:30+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Bash" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>Renvoie le chemin complet d'un fichier</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Renvoie le chemin complet d'un fichier</p>
<div class='code-block code-block-fragment'>
<div class='container'>
  <span class="co0"># check for one arg</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> -ne <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage : $0 {relative path}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">-1</span><br />
<span class="kw1">fi</span></p>
<p><span class="co0"># check to see if $1 exists</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> -e $<span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">B=</span><span class="sy0">`</span><a target="blank" href="http://pwet.fr/man/linux/commandes/basename"><span class="kw2">basename</span></a> $<span class="nu0">1</span><span class="sy0">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">P=</span><span class="sy0">`</span><a target="blank" href="http://pwet.fr/man/linux/commandes/dirname"><span class="kw2">dirname</span></a> $<span class="nu0">1</span><span class="sy0">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># &nbsp;echo BASE:$B &nbsp;PATH:$P</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cd</span> <span class="re1">$P</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">`</span><span class="kw3">pwd</span><span class="sy0">`</span> <span class="sy0">!</span>= <span class="st0">&quot;/&quot;</span> <span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLNAME=</span><span class="sy0">`</span><span class="kw3">pwd</span><span class="sy0">`/</span><span class="re1">$B</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLNAME=</span><span class="sy0">/</span><span class="re1">$B</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$FULLNAME</span><br />
<span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$1 - Not a regular file&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">-1</span><br />
<span class="kw1">fi</span>
  </div>
</div>
    ]]></content>
  </entry>
</feed>
