<?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>jaiunblog.com &#124; j&#039;ai un blog - graphisme, design, programmation &#187; tutorials</title>
	<atom:link href="http://jaiunblog.com/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://jaiunblog.com</link>
	<description>un peu de tout et beaucoup de rien ça fait du bien !</description>
	<lastBuildDate>Thu, 02 Feb 2012 14:35:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>processing #8 : SQLibrary</title>
		<link>http://jaiunblog.com/3615/processing-8-sqlibrary/</link>
		<comments>http://jaiunblog.com/3615/processing-8-sqlibrary/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 15:12:26 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3615</guid>
		<description><![CDATA[Aujourd&#8217;hui, je vais vous présenter une petite librairie pour Processing, SQLibrary. Cette librairie permet de connecter Processing et MySQL, je détaille peu, il s&#8217;agit d&#8217;un retour d&#8217;expérience personnelle que je partage pour les utilisateurs francophones. Lancer MAMP :) Premier exemple,ajouter dans une BDD. import de.bezier.data.sql.*; MySQL msql; String nom,prenom; int age; /* dans phpMyAdmin : [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /></p>
<p>Aujourd&#8217;hui, je vais vous présenter une petite librairie pour Processing, <a href="http://bezier.de/processing/libs/sql/">SQLibrary</a>.<br />
Cette librairie permet de connecter Processing et MySQL, je détaille peu, il s&#8217;agit d&#8217;un retour d&#8217;expérience personnelle que je partage pour les utilisateurs francophones. </p>
<p>Lancer MAMP :)<br />
Premier exemple,ajouter dans une BDD.</p>
<pre class="brush: java; title: ;">
import de.bezier.data.sql.*;

MySQL msql;
String nom,prenom;
int age;

/* dans phpMyAdmin :
CREATE TABLE IF NOT EXISTS `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `prenom` varchar(255) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)
*/

void setup() {
  msql = new MySQL( this, &quot;localhost:8889&quot;, &quot;esad&quot;, &quot;root&quot;, &quot;root&quot; );

  if ( msql.connect() )
  {
    nom=&quot;bond&quot;;
    prenom=&quot;james&quot;;
    age=17;
    msql.execute(&quot;INSERT INTO stu (nom,prenom,age) VALUES ('&quot;+nom+&quot;','&quot;+prenom+&quot;',&quot;+age+&quot;)&quot;);
  }
}
</pre>
<p>Ce second exemple permet d&#8217;avoir le prochain ID (auto-incrementé) :</p>
<pre class="brush: java; title: ;">
import de.bezier.data.sql.*;

MySQL msql;

void setup() {
  msql = new MySQL( this, &quot;localhost:8889&quot;, &quot;esad&quot;, &quot;root&quot;, &quot;root&quot; );

  if ( msql.connect() )
  {
    msql.query( &quot;SHOW TABLE STATUS LIKE 'students'&quot; );
    msql.next();
    println(msql.getInt(&quot;Auto_increment&quot;));
  }
}
</pre>
<p>en php</p>
<pre class="brush: php; title: ;">
$query 		= &quot;SHOW TABLE STATUS LIKE '$tablename'&quot;;
$result 	= mysql_query($query) ;

$row = mysql_fetch_assoc($result);
echo $row['Auto_increment'];
</pre>
<p>Voilà pour ce court épisode du jour, d&#8217;autres exemples sont fournis avec la librairie.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3615/processing-8-sqlibrary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>processing #7 : proControll</title>
		<link>http://jaiunblog.com/3584/processing-7-procontroll/</link>
		<comments>http://jaiunblog.com/3584/processing-7-procontroll/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 12:51:08 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[joypad]]></category>
		<category><![CDATA[joystick]]></category>
		<category><![CDATA[librairie]]></category>
		<category><![CDATA[manette]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3584</guid>
		<description><![CDATA[Aujourd&#8217;hui, je vais aborder une extension librairie qui offre pas mal de possibilités : procontroll. Pour installer cette librairie, le plus simple est de la dézipper dans utilisateurs > benoît > documents > processing > librairies selon vos préférences de Processing : À quoi sert cette librairie ? Elle permet de brancher plusieurs périphériques de [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /><br />
Aujourd&#8217;hui, je vais aborder une <del datetime="2011-09-12T12:17:58+00:00">extension</del> librairie qui offre pas mal de possibilités : <a href="http://www.creativecomputing.cc/p5libs/procontroll/">procontroll</a>.<br />
Pour installer cette librairie, le plus simple est de la dézipper dans </p>
<blockquote><p>utilisateurs > benoît > documents > processing > librairies</p></blockquote>
<p>selon vos préférences de Processing :</p>
<p><a href="http://jaiunblog.com/blog/wp-content/uploads/2011/09/preference.png"><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/09/preference-425x270.png" alt="" title="preference" width="425" height="270" class="alignnone size-medium wp-image-3585" /></a> </p>
<p><strong>À quoi sert cette librairie ?</strong><br />
Elle permet de brancher plusieurs périphériques de type joypad, joystick, souris et de récupérer les événements liés.<br />
Premier point : débrancher les périphériques exotiques des ports USB (paradoxalement ma souris Logitech sans fil est incompatible).<br />
Un exemple est livré, celui affiche dans la console les périphériques disponibles :</p>
<pre class="brush: java; title: ;">
import procontroll.*;
import java.io.*;

ControllIO controll;

void setup(){
  size(400,400);

  controll = ControllIO.getInstance(this);
  controll.printDevices();

  for(int i = 0; i &lt; controll.getNumberOfDevices(); i++){
    ControllDevice device = controll.getDevice(i);

    println(device.getName()+&quot; has:&quot;);
    println(&quot; &quot; + device.getNumberOfSliders() + &quot; sliders&quot;);
    println(&quot; &quot; + device.getNumberOfButtons() + &quot; buttons&quot;);
    println(&quot; &quot; + device.getNumberOfSticks() + &quot; sticks&quot;);

    device.printSliders();
    device.printButtons();
    device.printSticks();
  }
}
</pre>
<p>Si ma souris Logitech est branchée, ça coince :</p>
<blockquote><p>Failed to enumerate device: Device open failed: -536870203<br />
<<< available proCONTROLL devices: >>></p></blockquote>
<p>en la débranchant (sans relancer Processing juste stop -> play), on découvre que je suis sur un Mac ;¬)</p>
<blockquote><p>
0<br />
0</p>
<p><<< available proCONTROLL devices: >>></p>
<p>     0: Apple Internal Keyboard / Trackpad<br />
     1: Apple Internal Keyboard / Trackpad</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Apple Internal Keyboard / Trackpad has:<br />
 0 sliders<br />
 180 buttons<br />
 0 sticks</p>
<p><<< available Apple Internal Keyboard / Trackpad buttons: >>></p>
<p>     0: Left Control<br />
     1: Left Shift<br />
     2: Left Alt<br />
     3: Left Windows<br />
     4: Right Control<br />
     5: Right Shift<br />
     6: Right Alt<br />
     7: Right Windows<br />
     8: Unknown<br />
     9: Unknown<br />
     10: Unknown<br />
     11: A<br />
     12: B<br />
     13: C<br />
     14: D<br />
     15: E<br />
     16: F<br />
     17: G<br />
     18: H<br />
     19: I<br />
     20: J<br />
     21: K<br />
     22: L<br />
     23: M<br />
     24: N<br />
     25: O<br />
     26: P<br />
     27: Q<br />
     28: R<br />
     29: S<br />
     30: T<br />
     31: U<br />
     32: V<br />
     33: W<br />
     34: X<br />
     35: Y<br />
     36: Z<br />
     37: 1<br />
     38: 2<br />
     39: 3<br />
     40: 4<br />
     41: 5<br />
     42: 6<br />
     43: 7<br />
     44: 8<br />
     45: 9<br />
     46: 0<br />
     47: Return<br />
     48: Escape<br />
     49: Back<br />
     50: Tab<br />
     51:<br />
     52: -<br />
     53: =<br />
     54: [<br />
     55: ]<br />
     56: \<br />
     57: .<br />
     58: ;<br />
     59: &#8216;<br />
     60: ~<br />
     61: ,<br />
     62: .<br />
     63: /<br />
     64: Caps Lock<br />
     65: F1<br />
     66: F2<br />
     67: F3<br />
     68: F4<br />
     69: F5<br />
     70: F6<br />
     71: F7<br />
     72: F8<br />
     73: F9<br />
     74: F10<br />
     75: F11<br />
     76: F12<br />
     77: SysRq<br />
     78: Scroll Lock<br />
     79: Pause<br />
     80: Insert<br />
     81: Home<br />
     82: Pg Up<br />
     83: Delete<br />
     84: End<br />
     85: Pg Down<br />
     86: Right<br />
     87: Left<br />
     88: Down<br />
     89: Up<br />
     90: Num Lock<br />
     91: Num /<br />
     92: Unknown<br />
     93: Num -<br />
     94: Num +<br />
     95: Num Enter<br />
     96: Num 1<br />
     97: Num 2<br />
     98: Num 3<br />
     99: Num 4<br />
     100: Num 5<br />
     101: Num 6<br />
     102: Num 7<br />
     103: Num 8<br />
     104: Num 9<br />
     105: Num 0<br />
     106: Num .<br />
     107: \<br />
     108: Apps<br />
     109: Power<br />
     110: Num =<br />
     111: F13<br />
     112: F14<br />
     113: F15<br />
     114: Unknown<br />
     115: Unknown<br />
     116: Unknown<br />
     117: Unknown<br />
     118: Unknown<br />
     119: Unknown<br />
     120: Unknown<br />
     121: Unknown<br />
     122: Unknown<br />
     123: Unknown<br />
     124: Unknown<br />
     125: Unknown<br />
     126: Unknown<br />
     127: Stop<br />
     128: Unknown<br />
     129: Unknown<br />
     130: Unknown<br />
     131: Unknown<br />
     132: Unknown<br />
     133: Unknown<br />
     134: Unknown<br />
     135: Unknown<br />
     136: Unknown<br />
     137: Caps Lock<br />
     138: Num Lock<br />
     139: Scroll Lock<br />
     140: ,<br />
     141: Unknown<br />
     142: Unknown<br />
     143: Unknown<br />
     144: Unknown<br />
     145: Unknown<br />
     146: Unknown<br />
     147: Unknown<br />
     148: Unknown<br />
     149: Unknown<br />
     150: Unknown<br />
     151: Unknown<br />
     152: Unknown<br />
     153: Unknown<br />
     154: Unknown<br />
     155: Unknown<br />
     156: Unknown<br />
     157: Unknown<br />
     158: Unknown<br />
     159: Unknown<br />
     160: Unknown<br />
     161: SysRq<br />
     162: Unknown<br />
     163: Unknown<br />
     164: Pg Up<br />
     165: Return<br />
     166: Unknown<br />
     167: Unknown<br />
     168: Unknown<br />
     169: Unknown<br />
     170: Unknown<br />
     171: Unknown<br />
     172: Left Control<br />
     173: Left Shift<br />
     174: Left Alt<br />
     175: Left Windows<br />
     176: Right Control<br />
     177: Right Shift<br />
     178: Right Alt<br />
     179: Right Windows</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Apple Internal Keyboard / Trackpad has:<br />
 2 sliders<br />
 3 buttons<br />
 1 sticks</p>
<p><<< available Apple Internal Keyboard / Trackpad sliders: >>></p>
<p>     0: x relative<br />
     1: y relative</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad buttons: >>></p>
<p>     0: Left<br />
     1: Right<br />
     2: Middle</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad sticks: >>></p>
<p>     0: y x</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
</p></blockquote>
<p>Et si je branche un joypad (l&#8217;affreux de la freebox v6)</p>
<blockquote><p>
0<br />
0<br />
0<br />
0</p>
<p><<< available proCONTROLL devices: >>></p>
<p>     0: Apple Internal Keyboard / Trackpad<br />
     1: Apple Internal Keyboard / Trackpad<br />
     2: Apple Internal Keyboard / Trackpad<br />
     3: Generic   USB  Joystick  </p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Apple Internal Keyboard / Trackpad has:<br />
 0 sliders<br />
 180 buttons<br />
 0 sticks</p>
<p><<< available Apple Internal Keyboard / Trackpad buttons: >>></p>
<p>     0: Left Control<br />
    (&#8230;)<br />
     179: Right Windows</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Apple Internal Keyboard / Trackpad has:<br />
 2 sliders<br />
 1 buttons<br />
 1 sticks</p>
<p><<< available Apple Internal Keyboard / Trackpad sliders: >>></p>
<p>     0: x relative<br />
     1: y relative</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad buttons: >>></p>
<p>     0: Left</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad sticks: >>></p>
<p>     0: y x</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Apple Internal Keyboard / Trackpad has:<br />
 2 sliders<br />
 3 buttons<br />
 1 sticks</p>
<p><<< available Apple Internal Keyboard / Trackpad sliders: >>></p>
<p>     0: x relative<br />
     1: y relative</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad buttons: >>></p>
<p>     0: Left<br />
     1: Right<br />
     2: Middle</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Apple Internal Keyboard / Trackpad sticks: >>></p>
<p>     0: y x</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
Generic   USB  Joystick   has:<br />
 5 sliders<br />
 13 buttons<br />
 0 sticks</p>
<p><<< available Generic   USB  Joystick   sliders: >>></p>
<p>     0: x absolute<br />
     1: y absolute<br />
     2: z absolute<br />
     3: z absolute<br />
     4: rz absolute</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available Generic   USB  Joystick   buttons: >>></p>
<p>     0: 0<br />
     1: 1<br />
     2: 2<br />
     3: 3<br />
     4: 4<br />
     5: 5<br />
     6: 6<br />
     7: 7<br />
     8: 8<br />
     9: 9<br />
     10: 10<br />
     11: 11<br />
     12: cooliehat: pov</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
</p></blockquote>
<p>Un autre modèle :</p>
<blockquote><p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><br />
USB GAMEPAD 8116 has:<br />
 5 sliders<br />
 11 buttons<br />
 0 sticks</p>
<p><<< available USB GAMEPAD 8116 sliders: >>></p>
<p>     0: z absolute<br />
     1: rz absolute<br />
     2: x absolute<br />
     3: y absolute<br />
     4: slider absolute</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></p>
<p><<< available USB GAMEPAD 8116 buttons: >>></p>
<p>     0: 0<br />
     1: 1<br />
     2: 2<br />
     3: 3<br />
     4: 4<br />
     5: 5<br />
     6: 6<br />
     7: 7<br />
     8: 8<br />
     9: 9<br />
     10: cooliehat: pov</p>
<p><<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
</p></blockquote>
<p>On connait le nom du périphérique<br />
il suffit de régler cette ligne selon votre nom de périphérique comme ci-dessous<br />
à la ligne 26 : device = controll.getDevice(&laquo;&nbsp;USB GAMEPAD 8116&#8243;);</p>
<pre class="brush: java; title: ;">
import procontroll.*;
import java.io.*;

ControllIO controll;
ControllDevice device;
ControllSlider sliderX; //selon votre sauce
ControllSlider sliderY; //idem
ControllButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9; //idem

void setup() {
  size(400, 400);

  controll = ControllIO.getInstance(this);
  for (int i = 0; i &lt; controll.getNumberOfDevices(); i++) {
    ControllDevice device = controll.getDevice(i);

    println(device.getName()+&quot; has:&quot;);
    println(&quot; &quot; + device.getNumberOfSliders() + &quot; sliders&quot;);
    println(&quot; &quot; + device.getNumberOfButtons() + &quot; buttons&quot;);
    println(&quot; &quot; + device.getNumberOfSticks() + &quot; sticks&quot;);

    device.printSliders();
    device.printButtons();
    device.printSticks();
  }
  device = controll.getDevice(&quot;USB GAMEPAD 8116&quot;);
  device.setTolerance(0.05f);
  device.rumble(100,1);
  sliderX = device.getSlider(2);
  sliderY = device.getSlider(3);

  b0 = device.getButton(0);
  b1 = device.getButton(1);
  b2 = device.getButton(2);
  b3 = device.getButton(3);
  b4 = device.getButton(4);
  b5 = device.getButton(5);
  b6 = device.getButton(6);
  b7 = device.getButton(7);
  b8 = device.getButton(8);
  b9 = device.getButton(9);

  fill(0);
  rectMode(CENTER);

}

void draw() {
  background(255);

  if (b0.pressed()) {
    fill(255, 0, 0);
    println(&quot;b0&quot;);
  }
  else if (b1.pressed()) {
    fill(0, 255, 0);
    println(&quot;b0&quot;);
  }
  else if (b2.pressed()) {
    fill(0, 0,255);
    println(&quot;b2&quot;);
  }
  else if (b3.pressed()) {
    fill(255,255, 0);
    println(&quot;b3&quot;);
  }
  else if (b4.pressed()) {
    fill(0,255, 255);
    println(&quot;b4&quot;);
  }
   else if (b5.pressed()) {
    fill(255, 0, 255);
    println(&quot;b5&quot;);
  }
  else if (b6.pressed()) {
    fill(255, 255, 255);
    println(&quot;b6&quot;);
  }
   else if (b7.pressed()) {
    fill(127, 0, 255);
    println(&quot;b7&quot;);
  }
  else if (b8.pressed()) {
    fill(255, 0, 255);
    println(&quot;b8&quot;);
  }
  else if (b9.pressed()) {
    fill(255, 0, 255);
    println(&quot;b9&quot;);
  }
  else {
    fill(0);
  }

  float x = sliderX.getTotalValue() + width/2;
  float y = sliderY.getTotalValue() + height/2;

  if (x &gt; width + 20 || x &lt; - 20 || y &gt; height + 20 || y &lt; - 20) {
    sliderX.reset();
    sliderY.reset();
  }

  rect(x, y, 20, 20);
}
</pre>
<p>Je vous laisse décortiquer tout ça :)<br />
Have fun !</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3584/processing-7-procontroll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 ans</title>
		<link>http://jaiunblog.com/3553/5-ans/</link>
		<comments>http://jaiunblog.com/3553/5-ans/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 15:57:17 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3553</guid>
		<description><![CDATA[Aujourd&#8217;hui, je peux dire que j&#8217;ai un blog depuis le 4 septembre 2006, les meilleurs en maths auront calculé l&#8217;âge du capitaine ! En attendant de poster et archiver des choses passionnantes, j&#8217;en profite pour mettre cette astuce WordPress. Comme je suis graphiste et que j&#8217;aime la typo, la version française de l&#8217;administration de WordPress [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Aujourd&#8217;hui, je peux dire que j&#8217;ai un blog depuis le 4 septembre 2006, les meilleurs en maths auront calculé l&#8217;âge du capitaine !</p>
<p>En attendant de poster et archiver des choses passionnantes, j&#8217;en profite pour mettre cette astuce WordPress.</p>
<p>Comme je suis graphiste et que j&#8217;aime la typo, la version française de l&#8217;administration de WordPress m&#8217;irrite avec sa césure douteuse.<br />
L&#8217;affreux<br />
« Tableau de<br />
bord »</p>
<p>On peut le modifier dans les fichiers .po et .mo mais la moindre mise à jour du moteur annulera le changement.<br />
Pour le renommer avec un nom plus court ;¬) on peut ajouter dans le « dossier de votre thème/functions.php » (le créer si nécessaire) ces quelques lignes.</p>
<pre class="brush: php; title: ;">
&lt;?php
add_filter( 'gettext', 'dash' );
add_filter( 'ngettext', 'dash' );

function dash( $translated )
{
    $translated = str_ireplace( 'Tableau de bord', 'Home', $translated );
    return $translated;
}
?&gt;
</pre>
<p>D&#8217;autres modifications de l&#8217;administration de WordPress chez <a href="http://sixrevisions.com/wordpress/how-to-customize-the-wordpress-admin-area/">six revisions</a><br />
Une « classe » php pour aller plus loin, plus vite, plus fort, plus haut.<br />
<a href="https://gist.github.com/792b7aa5b695d1092520">wp-admin-menu-classes.php</a><br />
Mode d&#8217;emploi :<br />
Copier wp-admin-menu-classes.php dans votre thème, puis ajouter selon vos besoins les codes suivants dans functions.php.</p>
<pre class="brush: php; title: ;">
&lt;?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts');              // Swap location of Posts Section with Pages Section
  rename_admin_menu_section('Media','Photos &amp; Video');    // Rename Media Section to &quot;Photos &amp; Video&quot;
  delete_admin_menu_section('Links');                     // Get rid of Links Section
  $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags');  // Save off the Movie Tags Menu
  update_admin_menu_section('Movies',array(               // Rename two Movie Menu Items and Delete the Movie Tags Item
    array('rename-item','item'=&gt;'Movies','new_title'=&gt;'List Movies'),
    array('rename-item','item'=&gt;'Add New','new_title'=&gt;'Add Movie'),
    array('delete-item','item'=&gt;'Movie Tags'),
  ));
  copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
  renamed_admin_menu_item('Movies','Add New','Add Actor');  // Rename copied Actor 'Add New' to 'Add Actor
  add_admin_menu_item('Movies',array(                       // (Another way to get a 'Add Actor' Link to a section.)
    'title' =&gt; 'Alt Add Actor ',
    'slug' =&gt; 'post-new.php?post_type=actor',
  ), array(// Add Back the Movie Tags at the end.
    'where'=&gt;'end'
  ));
  add_admin_menu_item('Movies', $movie_tags_item_array, array(// Add Back the Movie Tags at the end.
    'where'=&gt;'end'
  ));
  delete_admin_menu_section('Actors');                      // Finally just get rid of the actors section
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3553/5-ans/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #6</title>
		<link>http://jaiunblog.com/3442/premiers-pas-en-processing-6/</link>
		<comments>http://jaiunblog.com/3442/premiers-pas-en-processing-6/#comments</comments>
		<pubDate>Thu, 26 May 2011 15:09:46 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3442</guid>
		<description><![CDATA[Et si on sauvegardait en png nos images ? void setup(){ size(400,400); } void draw(){ background(random(255),random(15),0); noLoop(); save(&#34;image.png&#34;); } C&#8217;est honteux que ça soit si simple ! Pire, en étant sur la fenêtre de l&#8217;éditeur faites pomme + k (ça ouvre le dossier de la sauvegarde) ! void setup(){ size(400,400); } void draw(){ background(random(255),random(15),0); saveFrame(&#34;anim-####.png&#34;); [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /><br />
Et si on sauvegardait en png nos images ?</p>
<pre class="brush: java; title: ;">
void setup(){
  size(400,400);
}

void draw(){
  background(random(255),random(15),0);
  noLoop();
  save(&quot;image.png&quot;);
}
</pre>
<p>C&#8217;est honteux que ça soit si simple ! Pire, en étant sur la fenêtre de l&#8217;éditeur faites pomme + k (ça ouvre le dossier de la sauvegarde) !</p>
<pre class="brush: java; title: ;">
void setup(){
  size(400,400);
}

void draw(){
  background(random(255),random(15),0);
  saveFrame(&quot;anim-####.png&quot;);
}
</pre>
<p>Encore plus honteux ? non ?</p>
<p>Un photomaton ?<br />
On n&#8217;a pas vu comment afficher une webcam mais voici la doc :<br />
<a href="http://processing.org/reference/libraries/video/Capture.html">http://processing.org/reference/libraries/video/Capture.html</a><br />
Remarque : cette fonction est dans la partie librairie de la documentation (il s&#8217;agit d&#8217;extension), d&#8217;ailleurs dans l&#8217;exemple la première ligne s&#8217;occupe de charger cette librairie.</p>
<pre class="brush: java; title: ;">
import processing.video.*;
Capture myCapture;

void setup()
{
  size(200, 200);

  // The name of the capture device is dependent those
  // plugged into the computer. To get a list of the
  // choices, uncomment the following line
  // println(Capture.list());
  // And to specify the camera, replace &quot;Camera Name&quot;
  // in the next line with one from Capture.list()
  // myCapture = new Capture(this, width, height, &quot;Camera Name&quot;, 30);

  // This code will try to use the last device used
  // by a QuickTime program
  myCapture = new Capture(this, width, height, 30);
}

void captureEvent(Capture myCapture) {
  myCapture.read();
}

void draw() {
  image(myCapture, 0, 0);
}
</pre>
<p><strong>Je fais ma sauce :</strong></p>
<pre class="brush: java; title: ;">
import processing.video.*;
Capture myCapture;

void setup()
{
  size(400, 300);
  myCapture = new Capture(this, width, height, 30);
}

void captureEvent(Capture myCapture) {
  myCapture.read();
}

void draw() {
  image(myCapture, 0, 0);
}

void mouseClicked(){
  save(&quot;capture.png&quot;);
}
</pre>
<p>C&#8217;est quoi les void setup, draw, captureEvent, mousePressed ?<br />
Le setup et le draw, on connait.<br />
Le captureEvent c&#8217;est pour lire la webcam, le programme « écoute » les informations envoyées par celle-ci.<br />
et enfin le <a href="http://processing.org/reference/mouseClicked_.html">mouseClicked</a> lui écoute l&#8217;état du clic.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3442/premiers-pas-en-processing-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #5</title>
		<link>http://jaiunblog.com/3428/premiers-pas-en-processing-5/</link>
		<comments>http://jaiunblog.com/3428/premiers-pas-en-processing-5/#comments</comments>
		<pubDate>Thu, 26 May 2011 11:46:59 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3428</guid>
		<description><![CDATA[à l&#8217;aventure ! - Avoir une idée (c&#8217;est bien) Je voudrais simuler une grille magnétique de 10 pixels (magnétisme de la grille ou snap to grid dans Illustrator). - Comprendre Quand je clique sur un point avec pour coordonnées (6,17), sur une grille de 10 px ça donne (10,20). - Traduire Deux stratégies : 1/ [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p51.png" alt="" title="p5" width="425" height="431" class="alignnone size-full wp-image-3437" /><br />
<strong>à l&#8217;aventure !</strong><br />
- Avoir une idée (c&#8217;est bien)<br />
Je voudrais simuler une grille magnétique de 10 pixels (magnétisme de la grille ou snap to grid dans Illustrator).<br />
- Comprendre<br />
Quand je clique sur un point avec pour coordonnées (6,17), sur une grille de 10 px ça donne (10,20).<br />
- Traduire<br />
Deux stratégies :<br />
1/ utiliser ses connaissances  </p>
<pre class="brush: java; title: ;">
int monX;

void draw(){
 if(mouseX&lt;10){
    monX=0;
}
if(mouseX&lt;20){
    monX=10;
}
if(mouseX&lt;30){
    monX=20;
}

println(monX);

}
</pre>
<p>Ça marche ! oui ça marche, mais ça renvoie toujours 20, un truc cloche…<br />
Je vais encadrer entre deux valeurs ;<br />
si le mouseX est supérieur ou égal à 0 ET plus petit que 10 alors monX = 0… </p>
<pre class="brush: java; title: ;">
int monX;

void draw(){
 if(mouseX&gt;=0 &amp;&amp; mouseX&lt;10){
    monX=0;
}
if(mouseX&gt;=10 &amp;&amp; mouseX&lt;20){
    monX=10;
}
if(mouseX&gt;=20 &amp;&amp; mouseX&lt;30){
    monX=20;
}
if(mouseX&gt;=30 &amp;&amp; mouseX&lt;40){
    monX=30;
}
if(mouseX&gt;=40 &amp;&amp; mouseX&lt;50){
    monX=40;
}
println(monX);

}
</pre>
<p>Voilà, un bon début mais c&#8217;est fastidieux (ou fast idiot), une pratique courante chez les débutants.</p>
<p>2/ approfondir ses connaissances<br />
Via la documentation : <a href="http://processing.org/reference/">http://processing.org/reference/</a> (pas simple)… ou via des exemples à disséquer.<br />
Remettre le problème à plat en pensant à ses cours de mathématiques.<br />
Ici, l&#8217;astuce est dans la fonction round() pour arrondir.</p>
<pre class="brush: java; title: ;">println(round(1.6));</pre>
<p>Ceci affiche 2.<br />
Dans mon idée, nous aurions 16 et nous voudrions 20.<br />
Alors 16 &#8211; je divise par 10 -> 1.6 &#8211; je round( ) -> 2 &#8211; je multiplie par 10 -> 20 ! bingo !<br />
En code, ça donne ceci :</p>
<pre class="brush: java; title: ;">round(mouseX/10)*10;</pre>
<p><strong><br />
Première utilisation :<br />
</strong></p>
<pre class="brush: java; title: ;">
int a,b,c,d;

void draw() {
  a=round(pmouseX/10)*10;
  b=round(pmouseY/10)*10;
  c=round(mouseX/10)*10;
  d=round(mouseY/10)*10;
  line(a, b, c, d);
}
</pre>
<p><strong>Variante :</strong></p>
<pre class="brush: java; title: ;">
int a, b, grille;

void setup() {
  size(360, 360);
  noStroke();
  grille=40;
  background(255);
}
void draw() {
  if (mousePressed) {
    a=round(mouseX/grille)*grille;
    b=round(mouseY/grille)*grille;
    fill(random(200)+55, 0, random(200)+55);
    rect(a+5, b+5, grille-10, grille-10);
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3428/premiers-pas-en-processing-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #4</title>
		<link>http://jaiunblog.com/3427/premiers-pas-en-processing-4/</link>
		<comments>http://jaiunblog.com/3427/premiers-pas-en-processing-4/#comments</comments>
		<pubDate>Wed, 25 May 2011 19:47:23 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3427</guid>
		<description><![CDATA[Aujourd&#8217;hui, on ajoute le « if » (une condition), ce qui permet d&#8217;améliorer avec deux lignes les scripts précédents et on aborde la notion de variable. Nos outils de dessin sont « amusants » mais, premier problème, la souris dessine en permanence, on ne peut pas lever le crayon… Gribouillis : void setup(){ size(400,400); } [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /></p>
<p>Aujourd&#8217;hui, on ajoute le « if » (une condition), ce qui permet d&#8217;améliorer avec deux lignes les scripts précédents et on aborde la notion de variable.<br />
Nos outils de dessin sont  « amusants » mais, premier problème, la souris dessine en permanence, on ne peut pas lever le crayon…</p>
<p><strong>Gribouillis : </strong></p>
<pre class="brush: java; title: ;">
void setup(){
 size(400,400);
}

void draw(){
    line(pmouseX,pmouseY,mouseX,mouseY);
}
</pre>
<p><strong>Gribouillis amélioré : </strong></p>
<pre class="brush: java; title: ;">
void setup(){
 size(400,400);
}

void draw(){
  if(mousePressed){
    line(pmouseX,pmouseY,mouseX,mouseY);
  }
}
</pre>
<p>Explication : on a toujours notre draw en boucle mais si (if) la souris est cliqué (mousePressed) il dessine sinon il n&#8217;a pas de consigne donc il ne fait rien.<br />
<strong>variante :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
 size(400,400);
 smooth();
}

void draw(){
  if(mousePressed){
    stroke(random(0,155));
    line(pmouseX+random(-10,10),
    pmouseY+random(-10,10),
    mouseX,
    mouseY);
  }
}
</pre>
<p>La fonction random(a,b) donne un chiffre (à virgule) entre a et b.</p>
<p><strong>Les variables :</strong><br />
On reviendra sur les variables mais voici une première approche :</p>
<pre class="brush: java; title: ;">
void setup(){
 size(400,400);
 background(255);
}

void draw(){
  if(mousePressed){
    a=pmouseX;
    b=pmouseY;
    c=mouseX;
    d=mouseY;
    line(a,b,c,d);
  }
}
</pre>
<p>Ceci marche dans pas mal de langage (javascript, actionscript, php…) mais ici on a une erreur :<br />
« Cannot find anything named &laquo;&nbsp;a&nbsp;&raquo; »<br />
<strong>correction :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
 size(400,400);
 background(255);
}

void draw(){
  if(mousePressed){
    int a=pmouseX;
    int b=pmouseY;
    int c=mouseX;
    int d=mouseY;
    line(a,b,c,d);
  }
}
</pre>
<p><strong>presque pareil :</strong></p>
<pre class="brush: java; title: ;">
int a,b,c,d;

void setup(){
 size(400,400);
 background(255);
}

void draw(){
  if(mousePressed){
    a=pmouseX;
    b=pmouseY;
    c=mouseX;
    d=mouseY;
    line(a,b,c,d);
  }
}
</pre>
<p>C&#8217;est quoi « int a » ?<br />
int comme integer,<br />
a est le nom de la variable (a n&#8217;est pas un nom pratique pour savoir ce qu&#8217;elle contient, mais ici c&#8217;est pour faire un raccourci temporaire)<br />
« int a » sera une variable qui stocke un chiffre entier.<br />
C&#8217;est quoi int a,b,c,d; ?<br />
c&#8217;est la version courte de<br />
int a;<br />
int b;<br />
int c;<br />
int d;</p>
<p>Les deux derniers exemples affichent la même chose,  l&#8217;un déclare les variables au début, l&#8217;autre dans le draw.<br />
<strong>comparatif : </strong></p>
<pre class="brush: java; title: ;">
int age,taille; //je déclare age et taille

void setup(){
 age=25;
 int taille=180; // je déclare la taille
 println(&quot;il mesure &quot;+taille+&quot; cm&quot;); // ça marche
}

void draw(){
  println(&quot;et il a &quot;+age+&quot; ans.&quot;); //ça marche
  println(&quot;il mesure &quot;+taille+&quot; cm&quot;); // taille = 0

  noLoop();
}
</pre>
<p><strong>à tester :</strong></p>
<pre class="brush: java; title: ;">
int age; //je déclare age

void setup(){
 age=25;
 int taille=180; // je déclare la taille
 println(&quot;il mesure &quot;+taille+&quot; cm&quot;); // ça marche
}

void draw(){
  println(&quot;et il a &quot;+age+&quot; ans.&quot;); //ça marche
  println(&quot;il mesure &quot;+taille+&quot; cm&quot;); // ça plante

  noLoop();
}
</pre>
<p>Il est parfois nécessaire de faire des  tests, println() permet d&#8217;afficher du texte et des variables dans la console de Processing (cadre du bas).<br />
<strong>à retenir :</strong> si les variables sont déclarées dans des fonctions (draw, setup, autres), elles sont lisibles que dans leurs fonctions (on parle de visibilité des variables) ;<br />
si elles sont déclarées hors fonction (à la racine ou au début par convention), elles sont lisibles dans toutes les fonctions (draw, setup…).</p>
<p><strong>une autre possibilité :</strong></p>
<pre class="brush: java; title: ;">
int age=25;

void setup(){
  println(&quot;il a &quot;+age+&quot; ans.&quot;);
}

void draw(){
  println(&quot;il a &quot;+age+&quot; ans.&quot;);
  noLoop();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3427/premiers-pas-en-processing-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #3</title>
		<link>http://jaiunblog.com/3412/premiers-pas-en-processing-3/</link>
		<comments>http://jaiunblog.com/3412/premiers-pas-en-processing-3/#comments</comments>
		<pubDate>Tue, 24 May 2011 17:18:13 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3412</guid>
		<description><![CDATA[Suite des notions de Processing, avec aujourd&#8217;hui des exemples assez simples. mouseX et mouseY : mouseX et mouseY donnent la position de la souris dans la fenêtre de l&#8217;application. void setup(){ size(800,600); //taille background(255); //fond } void draw(){ // draw = en boucle // par défaut à 60 FPS smooth(); //lissage noStroke(); //pas de contour [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /><br />
Suite des notions de Processing, avec aujourd&#8217;hui des exemples assez simples.<br />
<strong>mouseX et mouseY :</strong><br />
mouseX et mouseY donnent la position de la souris dans la fenêtre de l&#8217;application.</p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600); //taille
  background(255); //fond
}

void draw(){

//  draw = en boucle
//  par défaut à 60 FPS

  smooth(); //lissage
  noStroke(); //pas de contour
  fill(random(255),random(5),random(255));
  //une couleur aléatoire avec peu de vert
  ellipse(mouseX,mouseY,200,200);
  // un cercle de 200 px positionné à l'endroit de la souris

//  on remonte à la ligne 6

}
</pre>
<p><strong>Autre exemple :</strong><br />
On peut aussi ajouter de la transparence sur les couleurs en ajoutant une 4e valeur entre 0 (transparent) et 255 (opaque).</p>
<pre class="brush: java; title: ;">
void setup()
{
  size(400,400);
  smooth();
  background(255);
}

void draw()
{
  stroke(random(255),0,random(25)+25,100);
  strokeWeight(50);
  line(200,200,mouseX,mouseY);
}
</pre>
<p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/processing_10.png" alt="" title="processing_10" width="425" height="448" class="alignnone size-full wp-image-3415" /></p>
<p><strong>pmouseX et pmouseY :</strong><br />
Processing offre deux variables systèmes assez pratiques, pmouseX et pmouseY, celle-ci renvoient l&#8217;ancienne position de la souris à « l&#8217;image » précédente. Les exemples suivants devraient vous aider à comprendre.</p>
<pre class="brush: java; title: ;">
void setup()
{
  size(400,400);
  smooth();
  background(255);
  frameRate(3); //3 images par seconde
}

void draw()
{
  //ancienne position
  strokeWeight(5);
  stroke(255,0,0);  //rouge
  point(pmouseX,pmouseY);

  //nouvelle position
  strokeWeight(10);
  stroke(0,0,0); //noir
  point(mouseX,mouseY);
}
</pre>
<p>Une variante :</p>
<pre class="brush: java; title: ;">
void setup()
{
  size(400,400);
  background(255);
  frameRate(3); //3 images par seconde
}

void draw()
{
  //ajout d'une ligne
  noSmooth();
  strokeWeight(1);
  stroke(200); //gris
  line(pmouseX,pmouseY,mouseX,mouseY);

  smooth();

  //ancienne position
  strokeWeight(5);
  stroke(255);  // blanc
  point(pmouseX,pmouseY);

  //nouvelle position
  strokeWeight(10);
  stroke(0); //noir
  point(mouseX,mouseY);

}
</pre>
<p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/processing_10.jpg" alt="" title="processing_10" width="425" height="468" class="alignnone size-full wp-image-3417" /></p>
<p>Petite remarque, j&#8217;ai ajouté noSmooth() pour les lignes, ça enlève le lissage sur les lignes (question de goût ?).</p>
<p>Voilà pour aujourd&#8217;hui, demain on affinera ces exemples.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3412/premiers-pas-en-processing-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #2</title>
		<link>http://jaiunblog.com/3399/premiers-pas-en-processing-2/</link>
		<comments>http://jaiunblog.com/3399/premiers-pas-en-processing-2/#comments</comments>
		<pubDate>Mon, 23 May 2011 12:24:08 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3399</guid>
		<description><![CDATA[Suite de la découverte de Processing, avec aujourd&#8217;hui un peu plus de commandes et de syntaxes (le vocabulaire du langage). Après avoir vu, la taille, le frameRate, le setup, le draw et le random, voici comment dessiner un rectangle, une ellipse, un point et une ligne. Un rectangle : size(800,600); rect(10,10,200,400); // position x,y du [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /><br />
Suite de la découverte de Processing, avec aujourd&#8217;hui un peu plus de commandes et de syntaxes (le vocabulaire du langage).</p>
<p>Après avoir vu, la taille, le frameRate, le setup, le draw et le random, voici comment dessiner un rectangle, une ellipse, un point et une ligne.</p>
<p><strong>Un rectangle :</strong></p>
<pre class="brush: java; title: ;">
  size(800,600);
  rect(10,10,200,400); // position x,y du coin en haut à gauche - largueur, hauteur
</pre>
<p>Première remarque, pas besoin de setup et de draw, ça marche directement !<br />
Grosse parenthèse : On pourrait mettre ces deux lignes dans le setup, le résultat serait visuellement le même ; par contre je viens de tester dans le draw() la fonction size() ne marche pas (c&#8217;est logique).<br />
La bonne pratique est de mettre se qui définit l’environnement dans le <a href="http://processing.org/reference/setup_.html">setup()</a>, la taille, la couleur de fond, les chargements d&#8217;images…<br />
<strong>À tester : </strong></p>
<pre class="brush: java; title: ;">
  rect(10,10,200,400);
  rect(10,10,400,200);
  rect(400,300,200,200);
</pre>
<p><strong>Une ellipse :</strong></p>
<pre class="brush: java; title: ;">
  size(800,600);
  ellipse(10,10,200,400); // (x, y, largueur, hauteur)
</pre>
<p>Remarque : on verra plus tard comment avoir le même mode de positionnement pour le rect et l&#8217;ellipse.<br />
<strong>À tester : </strong></p>
<pre class="brush: java; title: ;">
  ellipse(10,10,200,400);
  ellipse(10,10,400,200);
  ellipse(400,300,200,200);
</pre>
<p><strong>Le point :</strong></p>
<pre class="brush: java; title: ;">
  size(800,600);
  point(10,10);
</pre>
<p>Il faut avoir l&#8217;œil car cette exemple affiche un pixel noir sur fond gris.</p>
<pre class="brush: java; title: ;">
   size(800,600);
   strokeWeight(20);
   point(10,10);
</pre>
<p>Là, c&#8217;est mieux ? La commande <a href="http://processing.org/reference/strokeWeight_.html">strokeWeight(20)</a> donne un contour de 20 pixel de diamètre mais c&#8217;est un peu cracra du pixel, il manque le lissage. </p>
<pre class="brush: java; title: ;">
   size(800,600);
   smooth();
   strokeWeight(20);
   point(10,10);
</pre>
<p>Remarque : <a href="http://processing.org/reference/smooth_.html">smooth()</a> peut aussi servir sur les ellipses et autres formes.</p>
<p><strong>La ligne :</strong></p>
<pre class="brush: java; title: ;">
   size(800,600);
   line(10,10,790,590); //origine x, origine y, arrivée x, arrivée y
</pre>
<hr />
<br />
<strong>Ça manque de couleurs ?</strong></p>
<pre class="brush: java; title: ;">
  size(800,600);
  background(255); // fond blanc
  fill(255,100,0); //remplissage orange
  stroke(0,0,255); //contour bleu
  rect(10,10,200,400); // position x,y du coin en haut à gauche - largueur, hauteur
</pre>
<p><strong><br />
let&#8217;s go fun :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
  size(424,424);
  background(255);
  smooth();
  stroke(255,0,0);
  strokeWeight(20);
  ellipse(212,212,500,500);
  stroke(0,0,255);
  ellipse(212,212,400,400);
  stroke(255,0,0);
  ellipse(212,212,300,300);
  stroke(0,0,255);
  ellipse(212,212,200,200);
  stroke(255,0,0);
  ellipse(212,212,100,100);
}
</pre>
<p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/processing1.png" alt="" title="processing" width="425" height="448" class="alignnone size-full wp-image-3406" /></p>
<p>Remarque : je dessine les cercles du plus grand au plus petit car par défaut ils sont remplis de la couleur blanche, il existe <a href="http://processing.org/reference/noFill_.html">noFill()</a> et <a href="http://processing.org/reference/noStroke_.html">noStroke()</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3399/premiers-pas-en-processing-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>premiers pas en processing #1</title>
		<link>http://jaiunblog.com/3384/premiers-pas-en-processing/</link>
		<comments>http://jaiunblog.com/3384/premiers-pas-en-processing/#comments</comments>
		<pubDate>Sat, 21 May 2011 12:48:21 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=3384</guid>
		<description><![CDATA[Voici quelques lignes de code pour vous aider à faire vos premiers pas en Processing. Je vous conseille de wikipedier/googler processing.org ; être étudiant en graphisme et ne pas connaître l&#8217;existence et les possibilités de cet outil serait dommage ! Deux ouvrages en français sont sortis cette année et disponibles dans les bonnes librairies (j&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2011/05/p5.png" alt="" title="p5" width="425" height="170" class="alignnone size-full wp-image-3421" /><br />
Voici quelques lignes de code pour vous aider à faire vos premiers pas en Processing.<br />
Je vous conseille de wikipedier/googler processing.org ; être étudiant en graphisme et ne pas connaître l&#8217;existence et les <a href="http://fr.flossmanuals.net/Processing/Exemplesdutilisations">possibilités</a> de cet outil serait dommage !<br />
Deux ouvrages en français sont sortis cette année et disponibles dans les bonnes librairies (j&#8217;ai déjà parlé du <a href="http://jaiunblog.com/3198/processing-livre-en-francais/">premier ou dernier</a>).<br />
Un manuel en français est disponible gratuitement : <a href="http://fr.flossmanuals.net/Processing/Introduction">http://fr.flossmanuals.net/Processing/Introduction</a>.<br />
De très bons cours sont en ligne :<br />
Là : <a href="http://www.ecole-art-aix.fr/rubrique81.html">http://www.ecole-art-aix.fr/rubrique81.html</a><br />
et chez le dernier : <a href="http://www.hyperbate.com/dernier/?page_id=2482">http://www.hyperbate.com/dernier/?page_id=2482</a><br />
Les anglophiles trouveront leur bonheur sur le site <a href="http://processing.org/learning/">officiel</a> !<br />
Et enfin, ceux qui veulent un support vidéo (eng) : <a href="http://www.youtube.com/watch?v=rJrh0RipoVo">http://www.youtube.com/watch?v=rJrh0RipoVo</a><br />
il y a une dizaine de vidéos :)</p>
<hr />
Voici une humble contribution en support de mes cours.</p>
<p><strong>INTRODUCTION</strong></p>
<p>En général, on commence par apprendre ses 3 lignes et leur structure.<br />
Comme dans de nombreux langages, // permet de commenter la ligne.<br />
<strong>Exemple 1 :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600); // pour avoir une fenêtre de 800 par 600 pixels.
}
</pre>
<p>Sur Mac l&#8217;accolade :<br />
alt + ( = {<br />
alt + ) = }</p>
<p>Pour voir le résultat, on compile avec le bouton lecture en haut à gauche.<br />
Première remarque, il ne se passe rien, seconde remarque, c&#8217;est gris.<br />
<strong>Exemple 2 :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600); // pour avoir une fenêtre de 800 par 600 pixels.
  background(0); // fond noir
}
</pre>
<p>C&#8217;est de la folie tout ça ?<br />
La commande background permet de changer la couleur du fond.<br />
À tester :</p>
<pre class="brush: java; title: ;">
  background(255);
  background(0);
  background(255/2);
  background(255,0,0);
  background(0,255,0);
  background(100,255,50);
  background(100,100,100);
  background(#ff6600);
  background(red); // ne marche pas
  background(#f60); // ne marche pas
</pre>
<p>Plutôt simple ?<br />
Non ?<br />
Astuce : Dans le menu File Edit (…) Tools -> Color Selector</p>
<p><strong>On continue avec le setup et le draw.</strong><br />
<strong>Exemple 3 :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600);
}

void draw(){

}
</pre>
<p>Exemple inutile servant juste à montrer la  syntaxe du draw. Le draw est le rafraichissement d&#8217;écran en boucle, comme si vous clignez des yeux. Le setup s&#8217;exécute juste une fois en lancement du programme.<br />
<strong>Exemple 4 :</strong></p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600);
  frameRate(2); //la cadence en images par seconde ou FPS pour frames per second
}

void draw(){
  background(random(255)); //un gris aléatoire
}
</pre>
<p>J&#8217;ai ralenti la cadence pour nos amis les épileptiques et pour faire le test j&#8217;ai utilisé random(unChiffre) qui donne un chiffre (à virgule) entre 0 et 255.<br />
À tester :</p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600);
  frameRate(2); //la cadence en images par seconde ou FPS pour frames per second
}

void draw(){
  background(random(255)); //un gris aléatoire
  background(0); // noir
}
</pre>
<p>puis</p>
<pre class="brush: java; title: ;">
void setup(){
  size(800,600);
  frameRate(2); //la cadence en images par seconde ou FPS pour frames per second
}

void draw(){
  background(0); // noir
  background(random(255)); //un gris aléatoire
}
</pre>
<p> Voilà, ça fait 5 <del datetime="2011-05-21T11:44:40+00:00">fruits et légumes</del> notions de processing pour aujourd&#8217;hui.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/3384/premiers-pas-en-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mon premier bookmarklet</title>
		<link>http://jaiunblog.com/2995/mon-premier-bookmarklet/</link>
		<comments>http://jaiunblog.com/2995/mon-premier-bookmarklet/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 20:50:44 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2995</guid>
		<description><![CDATA[Amis du code et de la typographie (du code de typographie aussi), voici une modeste contribution. Souvent je compte à la main le nom de signe par ligne dans un paragraphe de texte, la règle voudrait entre 52 et 78 signes par ligne pour une optimisation de la lecture sur le papier ; à l&#8217;écran [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Amis du code et de la typographie (du code de typographie aussi), voici une modeste contribution.<br />
Souvent je compte à la main le nom de signe par ligne dans un paragraphe de texte, la règle voudrait entre 52 et 78 signes par ligne pour une optimisation de la lecture sur le papier ; à l&#8217;écran on pourrait ajuster les lignes un peu plus longues mais vu la qualité du texte dans les navigateurs, on peut appliquer des valeurs identiques.</p>
<blockquote><p>The optimum line length in legibility terms is 2–3 alphabets, or 52–78 characters with spaces. (<a href="http://csswizardry.com/type-tips/#tip-09">via</a>)</p></blockquote>
<p>En javscript pour compter la sélection, ça donne ceci (tester sur firefox et webkit) :</p>
<pre class="brush: jscript; title: ;">
function getSelectedText(){
if (window.getSelection){
var str = window.getSelection();
}else if (document.getSelection){
var str = document.getSelection();
}else {
var str = document.selection.createRange().text;
}
return str;
}
var sel = getSelectedText();
alert(sel.toString().length);
</pre>
<p>On teste !<br />
sélectionner un texte puis cliquer <a href="javascript:function%20getSelectedText(){if(window.getSelection){var%20str=window.getSelection()}else%20if(document.getSelection){var%20str=document.getSelection()}else{var%20str=document.selection.createRange().text}return%20str}var%20sel=getSelectedText();alert(sel.toString().length);">ici</a></p>
<p>Le bookmarklet c&#8217;est une version <a href="http://dean.edwards.name/packer/">compressée sur une ligne</a> avec une <a href="http://meyerweb.com/eric/tools/dencoder/">moulinette url Encode</a>.</p>
<pre class="brush: jscript; title: ;">
javascript:function%20getSelectedText(){if(window.getSelection){var%20str=window.getSelection()}else%20if(document.getSelection){var%20str=document.getSelection()}else{var%20str=document.selection.createRange().text}return%20str}var%20sel=getSelectedText();alert(sel.toString().length);
</pre>
<p>Pour les novices, pour avoir ce script sur une autre page que mon blog, il suffit de glisser/déposer -> <a href="javascript:function%20getSelectedText(){if(window.getSelection){var%20str=window.getSelection()}else%20if(document.getSelection){var%20str=document.getSelection()}else{var%20str=document.selection.createRange().text}return%20str}var%20sel=getSelectedText();alert(sel.toString().length);">compte-signe</a> dans la barre des signets (marque-pages) !<br />
Voilà (j&#8217;ai essayer de mettre une icône au signet mais ça me semble <a href="http://www.tapper-ware.net/blog/?p=97">difficile</a>). </p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2995/mon-premier-bookmarklet/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>mootools + css + highlight</title>
		<link>http://jaiunblog.com/2679/mootools-css-highlight/</link>
		<comments>http://jaiunblog.com/2679/mootools-css-highlight/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 19:35:45 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[graphisme]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2679</guid>
		<description><![CDATA[Petit script bonbon du jour : highlight ! Prérequis : faire un xhtml ajouter une ligne pour charger mootools (lastMoo.js dans mon exemple) &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62; &#60;title&#62;high&#60;/title&#62; &#60;script type=&#34;text/javascript&#34; src=&#34;lastMoo.js&#34;&#62;&#60;/script&#62; &#60;script type=&#34;text/javascript&#34;&#62; &#60;!-- on va travailler cette partie --&#62; &#60;/script&#62; &#60;style type=&#34;text/css&#34;&#62; [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/04/moohigh.png" alt="" title="moohigh" width="425" height="304" class="alignnone size-full wp-image-2680" /></p>
<p> Petit script bonbon du jour : <a href='http://jaiunblog.com/blog/wp-content/uploads/2010/04/fade.html'>highlight</a> !</p>
<p>Prérequis :<br />
faire un xhtml<br />
ajouter une ligne pour charger mootools (lastMoo.js dans mon exemple)</p>
<pre class="brush: xml; title: ;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;high&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;lastMoo.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!-- on va travailler cette partie --&gt;
&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
&lt;!-- on va travailler cette partie --&gt;
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- on va travailler cette partie --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>1re étape :</strong><br />
Remplir de blocs carrés notre page.<br />
Un peu de maths : je veux n carrés de 50 px de large dans une <em>window</em> (une page) de 1005 px de large.<br />
20 blocs, ça passe, 21 ça dépasse (1050 px)&#8230;<br />
Techniquement en xhtml/css on laissera donc déborder le 21e bloc en ajoutant un conteneur de 1050 px de large pour nos n blocs et en masquant l&#8217;overflow (les barres de scrolling). </p>
<p>Tout ça c&#8217;est bien mais on va le faire automatiquement pour la largueur et la hauteur et pour n&#8217;importe quelle largeur de <em>window</em>.<br />
Pour les débutants on pourrait copier/coller 500 fois &laquo;&nbsp;
<div class="bloc"></div>
<p> mais ce n&#8217;est pas beaucoup plus difficile de le faire via Mootools.<br />
En CSS ceci suffit :</p>
<pre class="brush: xml; title: ;">
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body{
margin:0;
overflow: hidden;
}

.bloc{
float:left;
background: #eee;
}
--&gt;
&lt;/style&gt;
</pre>
<p>Pour le javascript </p>
<pre class="brush: jscript; title: ;">
var squareSize=50;
var winx=((window.getSize().x)/squareSize).toInt()+1;
var winy=((window.getSize().y)/squareSize).toInt()+1;
</pre>
<p>La première ligne définit la taille de mon bloc (ici 50 sur 50 px).<br />
La deuxième calcule le nombre de bloc qui rentre + 1<br />
en détaillant<br />
(la largueur de mon navigateur / taille du bloc)<br />
.toInt( ) pour arrondir en dessous (20,9).toInt()=20 et j&#8217;ajoute 1.<br />
La troisième s&#8217;occupe de la hauteur.</p>
<p>Pour continuer, il faut créer un conteneur pour mettre mes N blocs, celui-ci sera plus large que ma page mais l&#8217;overflow du body est masqué. Je le nomme full</p>
<pre class="brush: xml; title: ;">
&lt;body&gt;
&lt;div id=&quot;full&quot;&gt;
&lt;!-- ici on injectera nos div--&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Je continue mon javascript :)<br />
Je vais mettre ma div full à la taille calculée :</p>
<pre class="brush: jscript; title: ;">
var squareSize=40;
var winx=((window.getSize().x)/squareSize).toInt()+1;
var winy=((window.getSize().y)/squareSize).toInt()+1;

$('full').setStyle('width',winx*squareSize);
$('full').setStyle('height',winy*squareSize);
</pre>
<p>J&#8217;ai besoin d&#8217;injecter mon bloc dans full</p>
<pre class="brush: jscript; title: ;">
new Element('div', {
	'class':'bloc',
	'styles': {
        'width':squareSize+'px',
        'height':squareSize+'px'
    }
}).inject($('full'));
</pre>
<p>et de le faire plusieurs fois (exactement, le nombre de bloc par ligne x le nombre par colonne)</p>
<pre class="brush: jscript; title: ;">
for(var i=0;i&lt;(winx*winy);i++){
new Element('div', {
	'class':'bloc',
	'styles': {
        'width':squareSize+'px',
        'height':squareSize+'px'
    }
}).inject($('full'));
}
</pre>
<p>voici maintenant l&#8217;étape Frankestein, via motools l&#8217;effet highlight tient en une ligne</p>
<pre class="brush: jscript; title: ;">$('.bloc').highlight('#aaa','#fff');</pre>
<p>ici je l&#8217;applique au premier bloc en classe &#8216;.bloc&#8217; et il nous manque une technique pour lui dire à quel moment ou comment doit-il se déclencher, sinon il sera en highlight dès le lancement.<br />
On peut ajouter un paramètre en mouseover </p>
<pre class="brush: jscript; title: ;">
el=$('.bloc');
el.addEvent('mouseover', function () {
	var color1=('rgb('+$random(0,255)+','+$random(0,5)+','+$random(0,255)+')').rgbToHex();
	el.highlight(color1,'#fff');
	});
</pre>
<p>ci-dessus, j&#8217;ai ajouté une variable el mais ça ne change pas beaucoup et color1, qui nous donnera une couleur en hexa aléatoire (#&#8212;&#8212;&#8211;) avec très peu de vert via $random(0,5).<br />
Il manque une technique pour le faire sur tous les blocs !</p>
<pre class="brush: jscript; title: ;">
$$('.bloc').each(function (el) {
	el.addEvent('mouseover', function () {
	var color1=('rgb('+$random(0,255)+','+$random(0,5)+','+$random(0,255)+')').rgbToHex();
	el.highlight(color1,'#fff');
	});
});
</pre>
<p>ce n&#8217;est pas forcement clair pour les débutants mais ça donne une idée ?<br />
Dernière ligne mais qui sera notre début, on charge tous ça à la fin du chargement du dom html :</p>
<pre class="brush: jscript; title: ;">window.addEvent('domready', function(){
/* notre script */
)};
</pre>
<p><strong>Version complète</strong></p>
<pre class="brush: xml; title: ;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;high&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;lastMoo.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
window.addEvent('domready', function(){

var squareSize=40;
var winx=((window.getSize().x)/squareSize).toInt()+1;
var winy=((window.getSize().y)/squareSize).toInt()+1;

$('full').setStyle('width',winx*squareSize);
$('full').setStyle('height',winy*squareSize);

for(var i=0;i&lt;(winx*winy);i++){
new Element('div', {
	'class':'bloc',
	'styles': {
        'width':squareSize+'px',
        'height':squareSize+'px'
    }
}).inject($('full'));
}

$$('.bloc').each(function (el) {
	el.addEvent('mouseover', function () {
	var color1=('rgb('+$random(0,255)+','+$random(0,5)+','+$random(0,255)+')').rgbToHex();
	el.highlight(color1,'#fff');
	});
});
}) //
&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body{
margin:0;
overflow: hidden;
}

.bloc{
float:left;
background: #eee;
}

--&gt;
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id=&quot;full&quot;&gt;
&lt;!-- ici on injecte nos div--&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>ci besoin :<br />
<a href='http://jaiunblog.com/blog/wp-content/uploads/2010/04/lastMoo.js'>mon lastmoo mootools.js</a><br />
ou ici : <a href="http://mootools.net/download">http://mootools.net/download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2679/mootools-css-highlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>désactiver un plugin wordpress sur une page</title>
		<link>http://jaiunblog.com/2527/desactiver-un-plugin-wordpress/</link>
		<comments>http://jaiunblog.com/2527/desactiver-un-plugin-wordpress/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 16:37:11 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2527</guid>
		<description><![CDATA[Problématique du jour, j&#8217;ai installé un plugin pour mettre automatiquement les vidéos de youtube, vimeo et autres à la largueur de mon site : http://wordpress.org/extend/plugins/flash-video-resizer/. Mais voilà malgré les options proposées dans l&#8217;administration du plugin, impossible de spécifier la suppression du resize sur une page précise&#8230; Dans le monde merveilleux de wordpress, il existe les [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/wp-orange-1024x768-425x318.png" alt="" title="wp logo" width="425" height="318" class="alignnone size-medium wp-image-2481" /></p>
<p>Problématique du jour, j&#8217;ai installé un plugin pour mettre automatiquement les vidéos de youtube, vimeo et autres à la largueur de mon site : <a href="http://wordpress.org/extend/plugins/flash-video-resizer/">http://wordpress.org/extend/plugins/flash-video-resizer/</a>.<br />
Mais voilà malgré les options proposées dans l&#8217;administration du plugin, impossible de spécifier la suppression du <em>resize</em> sur une page précise&#8230;<br />
Dans le monde merveilleux de wordpress, il existe les filtres !<br />
Le plugin ci-dessus applique un <em>filter</em> au <em>content</em>, dans les sources de celui-ci on lira</p>
<pre class="brush: php; title: ;">add_filter('the_content', 'fvr_resizeMarkup');</pre>
<p> il suffit donc de faire l&#8217;inverse !<br />
L&#8217;avantage c&#8217;est qu&#8217;on garde les autres <em>filters</em> !</p>
<pre class="brush: php; title: ;">
&lt;?php /*
Template Name: Anti Resize !
*/ ?&gt;

&lt;?php
remove_filter('the_content', 'fvr_resizeMarkup'); // on le désactive !
?&gt;
&lt;?php
get_header(); ?&gt;
// la boucle + le pied (...)
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2527/desactiver-un-plugin-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>comment bloquer un visiteur sur votre site</title>
		<link>http://jaiunblog.com/2515/comment-bloquer-un-visiteur-sur-votre-site/</link>
		<comments>http://jaiunblog.com/2515/comment-bloquer-un-visiteur-sur-votre-site/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 23:15:55 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2515</guid>
		<description><![CDATA[Pré-requis, sur internet ou dans un réseau chaque machine possède une ip, une sorte de plaque d&#8217;immatriculation de votre connexion qui ressemble à ceci 234.232.264.129 ; quatre chiffres entre 0 et 255. La votre actuellement est http://www.mon-ip.com/ (en rouge sur ce site). Si je connais votre IP et que je n&#8217;ai pas envi de vous [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Pré-requis, sur internet ou dans un réseau chaque machine possède une ip, une sorte de plaque d&#8217;immatriculation de votre connexion qui ressemble à ceci 234.232.264.129 ; quatre chiffres entre 0 et 255.<br />
La votre actuellement est <a href="http://www.mon-ip.com/">http://www.mon-ip.com/</a> (en rouge sur ce site).</p>
<p>Si je connais votre IP et que je n&#8217;ai pas envi de vous sur mon site, je peux vous bannir en créant un fichier .htaccess à la racine de mon site, avec ceci dedans — le nom commence par un point ce qui complique un peu l&#8217;opération&#8230;<br />
On fera un htaccess.txt puis on le renommera avec le logiciel de FTP .htacces [facile ?].</p>
<pre class="brush: plain; title: ;">
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^90.xxx.xxx.xxx
RewriteRule .*    http://www.perdu.com/
</pre>
<p>Ici je bloque 90.xxx.xxx.xxx à vous de mettre l&#8217;IP à bloquer 90.123.123.123 par exemple ou 123.90.123.123.</p>
<p>Bonus, si vous voulez bloquer un <del datetime="2010-02-25T22:51:47+00:00">ami</del> <del datetime="2010-02-25T22:51:47+00:00">crétin</del> boulet&#8230;<br />
Avec un message de son email vous pouvez retrouver son IP !<br />
Sur hotmail -> clic droit sur l&#8217;email dans la boite aux lettres -> afficher la source du message -> puis chercher<br />
X-Originating-IP: [xxx.xxx.xxx.xxx]<br />
Sur Thunderbird ctrl + U ou pomme + U et chercher :<br />
Received: from xxx.xxx.xxx.xxx</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2515/comment-bloquer-un-visiteur-sur-votre-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>construisez votre thème wordpress</title>
		<link>http://jaiunblog.com/2298/construisez-votre-theme-wordpress/</link>
		<comments>http://jaiunblog.com/2298/construisez-votre-theme-wordpress/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:51:54 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2298</guid>
		<description><![CDATA[Ambiance chic et classe façon altaya ou del prado ! Cette semaine le n°1, ses fichiers php, son png et sa feuille de style, pour moins de 2 euros comme chez carglass ! L&#8217;objectif de ce tutorial est de faire un thème portfolio imitant la simplicité et l&#8217;ergonomie des indexhibit afin de comprendre les bases [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/grey-j.png" alt="" title="grey-j" width="425" height="425" class="alignnone size-full wp-image-2320" /><br />
<del datetime="2010-02-02T14:52:20+00:00">Ambiance chic et classe façon <a href="http://www.altaya.fr/index.php">altaya</a> ou del prado !<br />
Cette semaine le n°1, ses fichiers php, son png et sa feuille de style, pour moins de 2 euros comme chez carglass !</del></p>
<p>L&#8217;objectif de ce tutorial est de faire un thème portfolio imitant la simplicité et l&#8217;ergonomie des <a href="http://www.indexhibit.org/">indexhibit</a> afin de comprendre les bases de la création de thème pour WordPress.<br />
Petite précision : je ne connais pas l&#8217;interface d&#8217;administration d&#8217;indexhibit et j&#8217;ai aucun avis sur celle-ci :¬) mais j&#8217;aime beaucoup de le travail de <a href="http://www.eatock.com/">Daniel Eatock</a>.</p>
<p>Je vais supposer que l&#8217;administration de wordpress n&#8217;est plus un mystère (c&#8217;est en français et assez ergonomique ?).<br />
Prérequis, wordpress propose d&#8217;écrire des pages ou des articles, les articles sont affichés de manière antéchronologique (bizarrement comme un blog) et les pages de manière statique. Ici je détourne un peu l&#8217;usage de wordpress mais il s&#8217;agit d&#8217;un exercice pour simplifier cette première approche, notre thème n&#8217;affichera que des pages, sachant qu&#8217;on pourra toujours afficher des articles avec quelques modifications supplémentaires.</p>
<p><strong>1re étape</strong> Ajouter quelques pages : en principe une page existe déjà sous le nom de « à propos », ci-dessous j&#8217;ai quatre pages, idéalement avec une image et un petit texte (lorem ipsum) pour ne pas travailler à l&#8217;aveuglette.</p>
<p><img class="alignnone size-full wp-image-2300" title="ajouter pages" src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/Image-7.png" alt="ajouter pages" width="425" height="509" /></p>
<p><strong>2e étape</strong> spécifiquement pour ce thème, il faut mettre une page statique en accueil :<br />
Dans Réglages &gt; Lecture (cliquer sur l&#8217;image pour zoomer).<br />
<a href="http://jaiunblog.com/blog/wp-content/uploads/2010/02/Image-8.png"><img class="alignnone size-medium wp-image-2301" title="accueil" src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/Image-8-425x301.png" alt="" width="425" height="301" /></a></p>
<p>Les choses sérieuses commencent :-)<br />
Si vous aimiez ou aimez jouer au Lego© et bien ça n&#8217;a rien à voir ! enfin si un peu. Un thème est composé de multiples fichiers, des morceaux de php, une ou plusieurs feuilles de styles, des images et pour être propre un screenshot.png&#8230;<br />
selon votre machine les fichiers seront à mettre dans un dossier plus ou moins comme ceci<br />
mac : file:///Applications/MAMP/htdocs/wordpress/wp-content/themes/&#8211;le nom de votre thème &#8211;/<br />
pc : c:/wamp/www/wordpress/wp-content/themes/&#8211;le nom de votre thème &#8211;/<br />
ftp : www/wordpress/wp-content/themes/&#8211;le nom de votre thème &#8211;/</p>
<p>obligatoire : index.php, style.css<br />
obligatoire pour notre exemple : head.php, page.php<br />
Curieusement index.php peut-être vide (ici comme l&#8217;accueil est sur une page, notre index.php sera vide) mais son absence empêcherait la validité du thème !<br />
Toutes les informations sur notre thème seront dans l&#8217;entête de la feuille de style.</p>
<p>Voici un début pour style.css, j&#8217;y ajoute tout de suite un RESET (8 lignes qui améliorent les styles par défaut de nos navigateurs), je n&#8217;ai rien inventé le reset css vient d&#8217;<a href="http://meyerweb.com/eric/tools/css/reset/">ici</a> et l&#8217;entête est une modification/adaptation de celui par défaut.  </p>
<pre class="brush: css; title: ;">
/*
Theme Name: PageOnly Alpha Turbo
Theme URI: http://wordpress.org/
Description: Un thème à la indexhibit
Version: II
Author: Ben Jaiunblog
Author URI:http://jaiunblog.com
Tags: 

PageOnly Alpha Turbo II

*/

/* Begin  */
/*  RESET   */
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0}
table{border-collapse:collapse;border-spacing:0}
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400}
ol,ul{list-style:none}
caption,th{text-align:left}
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}
q:before,q:after{content:''}
fieldset,img,abbr,acronym{border:0}
/* la suite */
/* bientôt */
</pre>
<p>en image :<br />
<a href="http://jaiunblog.com/blog/wp-content/uploads/2010/02/themeWP.png"><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/themeWP-425x164.png" alt="" title="themeWP" width="425" height="164" class="alignnone size-medium wp-image-2317" /></a></p>
<p><strong>La tête dans&#8230; la page ? le header.php</strong><br />
Nos pages vont s&#8217;afficher grâce au fichier <em>page.php</em>, c&#8217;est une moulinette de wordpress qui pour simplifier dit que si on affiche une page statique, celle-ci se construit selon <em>page.php</em>. <em>Page.php</em> commence par une fonction php get_header(); qui va chercher et afficher <em>header.php</em>, on a donc un morceau de tête qui s&#8217;intercale&#8230;<br />
On pourrait faire un collage rapide copier/coller de tout le <em>header.php</em> dans <em>page.php</em> mais l&#8217;intérêt ici est de pouvoir récupérer l&#8217;header dans d&#8217;autres pages comme dans l&#8217;index.php (pour bien comprendre, il faudrait regarder le thème par défaut de wordpress car ici notre thème n&#8217;exploite pas cette avantage).<br />
<strong>header.php<br />
</strong></p>
<pre class="brush: php; title: ;">
&lt;?php
	/**
 	* @package PageOnly
	*/
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &lt;?php language_attributes(); ?&gt;&gt;
&lt;head profile=&quot;http://gmpg.org/xfn/11&quot;&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;&lt;?php bloginfo('html_type'); ?&gt;; charset=&lt;?php bloginfo('charset'); ?&gt;&quot; /&gt;
	&lt;title&gt;&lt;?php wp_title('&amp;laquo;', true, 'right'); ?&gt; &lt;?php bloginfo('name'); ?&gt;&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php bloginfo('stylesheet_url'); ?&gt;&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
	&lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo('pingback_url'); ?&gt;&quot; /&gt;
	&lt;?php wp_head(); ?&gt;
&lt;/head&gt;
&lt;body &lt;?php body_class(); ?&gt;&gt;
	&lt;div id=&quot;page&quot;&gt;
	    &lt;div id=&quot;col&quot;&gt;
			&lt;div id=&quot;header&quot;&gt;
			&lt;h1&gt;&lt;a href=&quot;&lt;?php bloginfo('home'); ?&gt;&quot;&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/a&gt;&lt;/h1&gt;
			&lt;/div&gt;&lt;!--fin de div header--&gt;
&lt;ul&gt;&lt;?php wp_list_pages('title_li=&lt;h2&gt;Pages&lt;/h2&gt;'); ?&gt;&lt;/ul&gt;
		&lt;/div&gt;&lt;!--fin de la div col--&gt;
</pre>
<p><strong>page.php<br />
</strong></p>
<pre class="brush: php; title: ;">
&lt;?php
/**
 * @package WordPress
 */
get_header(); //ceci charge le fichier header.php
?&gt;

	&lt;div id=&quot;content&quot;&gt;
		&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;
		&lt;div class=&quot;post&quot; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;
		&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
			&lt;div class=&quot;entry&quot;&gt;
				&lt;?php the_content('&lt;p&gt;Read the rest of this page &amp;raquo;&lt;/p&gt;'); ?&gt;
				&lt;?php wp_link_pages(array('before' =&gt; '&lt;p&gt;&lt;strong&gt;Pages:&lt;/strong&gt; ', 'after' =&gt; '&lt;/p&gt;', 'next_or_number' =&gt; 'number')); ?&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		&lt;?php endwhile; endif; ?&gt;
	&lt;?php edit_post_link('Edit this entry.', '&lt;p&gt;', '&lt;/p&gt;'); ?&gt;
	&lt;/div&gt;&lt;!--fin de content--&gt;
&lt;/div&gt;&lt;!--fin de page--&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Dans <em>header.php</em> une  ligne php nous intéresse particulièrement :</p>
<pre class="brush: php; title: ;">&lt;ul&gt;&lt;?php wp_list_pages('title_li=&lt;h2&gt;Pages&lt;/h2&gt;'); ?&gt;&lt;/ul&gt;</pre>
<p>Le php va produire du html en communicant avec la base de données, ici il va faire une liste des pages que l&#8217;on a ajouté dans wordpress avec les liens.</p>
<p><strong>en version simplifiée<br />
</strong>
<pre class="brush: xml; title: ;">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;page01&quot;&gt;page 01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;page02&quot;&gt;page 02&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p><strong>en version</strong> moulinette <strong>WordPress</strong> avec les options classiques (voir la documentation de <a href="http://codex.wordpress.org/Template_Tags/wp_list_pages">wp_list_pages</a>)</p>
<pre class="brush: xml; title: ;">
&lt;ul&gt;
&lt;li class=&quot;pagenav&quot;&gt;
&lt;h2&gt;Pages&lt;/h2&gt;
&lt;ul&gt;
&lt;li class=&quot;page_item page-item-24&quot;&gt;&lt;a href=&quot;http://localhost/wordpress/01/&quot; title=&quot;01&quot;&gt;01&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;page_item page-item-25&quot;&gt;&lt;a href=&quot;http://localhost/wordpress/02/&quot; title=&quot;02&quot;&gt;02&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;page_item page-item-26&quot;&gt;&lt;a href=&quot;http://localhost/wordpress/03/&quot; title=&quot;03&quot;&gt;03&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;page_item page-item-27&quot;&gt;&lt;a href=&quot;http://localhost/wordpress/04/&quot; title=&quot;04&quot;&gt;04&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Pour le reste dans <em>page.php</em>, en simplifiant, ça affiche le titre, le contenu de notre page et un bouton &laquo;&nbsp;éditer&nbsp;&raquo; si la personne qui visite le site est autorisée à modifier la page.</p>
<pre class="brush: xml; title: ;">...
&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
...
&lt;?php the_content('&lt;p&gt;Read the rest of this page &amp;raquo;&lt;/p&gt;'); ?&gt;
...
&lt;?php edit_post_link('Edit this entry.', '&lt;p&gt;', '&lt;/p&gt;'); ?&gt;
</pre>
<p>Voici le code en html produit par tout ce php :</p>
<pre class="brush: xml; title: ;">
&lt;body class=&quot;page page-id-24 logged-in&quot;&gt;
	&lt;div id=&quot;page&quot;&gt;
	    &lt;div id=&quot;col&quot;&gt;
			&lt;div id=&quot;header&quot;&gt;
			&lt;h1&gt;&lt;a href=&quot;http://localhost:8888/wordpress&quot;&gt;*****&lt;/a&gt;&lt;/h1&gt;
			&lt;/div&gt;&lt;!--fin de header--&gt;
			&lt;ul&gt;&lt;li class=&quot;pagenav&quot;&gt;&lt;h2&gt;Pages&lt;/h2&gt;&lt;ul&gt;&lt;li class=&quot;page_item page-item-24 current_page_item&quot;&gt;&lt;a href=&quot;http://localhost:8888/wordpress/01/&quot; title=&quot;01&quot;&gt;01&lt;/a&gt;&lt;/li&gt;
			&lt;li class=&quot;page_item page-item-25&quot;&gt;&lt;a href=&quot;http://localhost:8888/wordpress/02/&quot; title=&quot;02&quot;&gt;02&lt;/a&gt;&lt;/li&gt;
			&lt;li class=&quot;page_item page-item-26&quot;&gt;&lt;a href=&quot;http://localhost:8888/wordpress/03/&quot; title=&quot;03&quot;&gt;03&lt;/a&gt;&lt;/li&gt;
			&lt;li class=&quot;page_item page-item-27&quot;&gt;&lt;a href=&quot;http://localhost:8888/wordpress/04/&quot; title=&quot;04&quot;&gt;04&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
		&lt;/div&gt;&lt;!--fin de la colonne--&gt;
	&lt;div id=&quot;content&quot;&gt;
		&lt;div class=&quot;post&quot; id=&quot;post-24&quot;&gt;
		&lt;h2&gt;01&lt;/h2&gt;
			&lt;div class=&quot;entry&quot;&gt;LOREM IPSUM LOREM IPSUM LOREM IPSUM LOREM IPSUM !&lt;/div&gt;
		&lt;/div&gt;
		&lt;p&gt;&lt;a class=&quot;post-edit-link&quot; href=&quot;http://localhost:8888/wordpress/wp-admin/page.php?action=edit&amp;amp;post=24&quot; title=&quot;Modifier l&amp;rsquo;article&quot;&gt;Edit this entry.&lt;/a&gt;&lt;/p&gt;	&lt;/div&gt;&lt;!--fin de content--&gt;
&lt;/div&gt;&lt;!--fin de page--&gt;
&lt;/body&gt;
</pre>
<p>Fin des choses sérieuses :-) on passe à la suite et donc au CSS&#8230; une remarque pertinente serait de constater un peu trop d&#8217;emballage de div inutiles qui n&#8217;auront pas besoin de CSS, on pourrait les supprimer (libre à vous) sauf si vous voulez mettre plusieurs images en background et faire des sous-blocs&#8230; je suis parti du thème par défaut qui emballe beaucoup :-).</p>
<p>En lisant le html et avec un peu d&#8217;intuition les blocs à css-ifier sont #page, #header, #col, #content, body, p, ul, li, a&#8230;<br />
C&#8217;est l&#8217;heure de faire un schéma de nos blocs et de leurs places pour éclaircir la situation !</p>
<p><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/css.gif" alt="" title="css" width="425" height="369" class="alignnone size-full wp-image-2326" /></p>
<p><strong><del datetime="2010-02-09T15:31:43+00:00">Fin de l&#8217;épisode 1.</del><br />
</strong>En attendant que je peaufine mon CSS, un peu de <a href="http://www.intensivstation.ch/en/templates/">techniques CSS et gabarits proches de notre résultat</a>.</p>
<p>Les fichiers nécessaires seront ajoutés d&#8217;ici peu !<br />
Pour aller plus loin, chez francis : <a href="http://www.fran6art.com/wordpress/creez-votre-theme-wordpress-de-a-a-z/">http://www.fran6art.com/wordpress/creez-votre-theme-wordpress-de-a-a-z/<br />
</a><br />
<strong>suite et fin</strong><br />
/* fichier css avec le maximum de commentaires ! */</p>
<pre class="brush: css; title: ;">
/*
Theme Name: PageOnly Alpha Turbo
Theme URI: http://wordpress.org/
Description: Un thème à page à la indexhibit
Version: II
Author: Ben Jaiunblog
Author URI:http://jaiunblog.com
Tags: 

PageOnly Alpha Turbo II

*/

/* Begin  */
/* reset */
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0}
table{border-collapse:collapse;border-spacing:0}
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400}
ol,ul{list-style:none}
caption,th{text-align:left}
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}
q:before,q:after{content:''}
fieldset,img,abbr,acronym{border:0}

/* Start */
/* mise en page */
body {
	font-size:62.5%; /* Resets 1em to 10px */
	font-family:'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Sans-Serif;
	background:#fff url(img/fond.gif) repeat-y top left;
	color:#333;
}

#col {
	width:100px; /*largeur de ma colonne */
	float:left; /* utile pour que #content soit au top */
}

#header {
	width:100px; /* décoration de la page */
	height:100px;
	background:transparent url(img/head.png) no-repeat top left;
}

#content {
	padding:17px 20px; /* blanc tournant */
	margin-left:100px; /* placement à gauche de la colonne de 100 px */
}

/* lien */
a {
	color:#bbbbbb; /*tous les liens du site */
	text-decoration:none;
}

/* lien dans la navigation*/
.pagenav ul {
	margin-right:27px; /* ajustement calage visuel */
	float:right; /* fer du bloc ul à droite */
}

.pagenav a:hover {
	color:black; /* au passage de la souris */
}

.pagenav a {
	padding-left:18px; /* pour l'ajout d'une puce bitmap */
	height:17px; /* fixe la hauteur */
	line-height:17px; /* centre le texte sur la verticale */
	display:block; /* pour fixer la hauteur */
	outline-style:none; /* suppr le cadre */
}

li .current_page_item a,li .page_item .page_item.current_page_item a {
	color:#555;
	background:transparent url(img/puce.png) no-repeat center left; /* une puce sur la page current */
}

/* typo */

h2 {
	/* titre h2 utilisé dans content */
	font-size:2em; /* 2 x 10px = 20px */
	color:#cccccc;
	border-bottom:solid 1px #ddd; /* filet */
	margin-bottom:20px;
}

#content p {
	width:400px; /* largueur maximum des textes */
	margin-bottom:20px; /* à améliorer pour la grille typo */
}

/* typo hors champ */
#col h2 {
	line-height:5px; /* pour gagner quelques pixels */
	text-indent:-9999px;
	border:none;
}

#header h1 {
	text-indent:-9999px;
}
</pre>
<p>Le résultat :) avec trois images en plus (un dégradé pour l&#8217;ombrage, un g entête et une puce).<br />
<a href="http://jaiunblog.com/blog/wp-content/uploads/2010/02/g1.png"><img src="http://jaiunblog.com/blog/wp-content/uploads/2010/02/g1-425x264.png" alt="" title="version finale (count down)" width="425" height="264" class="alignnone size-medium wp-image-2363" /></a><br />
<strong>Les fichiers :</strong> <a href='http://jaiunblog.com/blog/wp-content/uploads/2010/02/exhib.zip'>exhib.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2298/construisez-votre-theme-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>php et programmation</title>
		<link>http://jaiunblog.com/2220/php-et-programmation/</link>
		<comments>http://jaiunblog.com/2220/php-et-programmation/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 01:06:21 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[glob]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2220</guid>
		<description><![CDATA[Voici un petit article pour démystifier la programmation et comprendre par l&#8217;exemple le php (pas forcement en détail mais au moins donner une idée de son usage et son rôle). la programmation Pour simplifier, on peut dire que la programmation sert à fuir les opérations répétitives en demandant à un ordinateur de s&#8217;en charger, le [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><a href="http://jaiunblog.com/blog/wp-content/uploads/2010/01/list_png.png"><img class="alignnone size-medium wp-image-2223" title="list_png" src="http://jaiunblog.com/blog/wp-content/uploads/2010/01/list_png-425x240.png" alt="" width="425" height="240" /></a><br />
Voici un petit article pour démystifier la programmation et comprendre par l&#8217;exemple le php (pas forcement en détail mais au moins donner une idée de son usage et son rôle).<br />
<strong>la programmation</strong><br />
Pour simplifier, on peut dire que la programmation sert à fuir les opérations répétitives en demandant à un ordinateur de s&#8217;en charger, le but est souvent de trouver une astuce pour faire en 5 minutes plus ou moins intenses une opération qui devrait prendre plus de 5 minutes, la gymnastique intellectuelle étant parfois amusante, on pourra aussi passer plusieurs journées pour finalement gagner que quelques minutes mais tomber sur des erreurs intéressantes (graphiquement). On utilise un ou plusieurs langages qui demandent des connaissances spécifiques selon les environnements, les envies, les contraintes <strong>mais</strong> dans la plupart des cas on trouvera les ressources indispensables ou utiles sur le net ou dans des livres !</p>
<p><strong>exemple avec le php</strong><br />
Voici un exemple de script php <a href="http://fr.wikipedia.org/wiki/PHP">(définition wikipedia)</a> facile à appliquer et pratique (pour les graphistes).<br />
J&#8217;ai trouvé ce bout de php <a href="http://infinity-infinity.com/2009/07/10-php-functions-you-probably-never-use/">ici</a>, il affiche la liste des fichiers php présents dans un dossier</p>
<blockquote><p><code>foreach (glob("*.php") as $file)<br />
echo "$file\n";</code></p></blockquote>
<p>en français ça donnerait : pour chaque élément (de cette liste contenant (&laquo;&nbsp;des fichiers php&nbsp;&raquo;) tu en prends un) tu affiches &laquo;&nbsp;le nom de celui-ci&nbsp;&raquo;<br />
en détail il y a trois fonctions :<br />
glob() va chercher la liste des fichiers (comme un spotlight)<br />
foreach ($machin as $truc) décompose $machin en $truc et applique en boucle à un $truc la ligne suivante (si $machin à dix $truc, j&#8217;aurais dix boucles)<br />
echo &laquo;&nbsp;un truc&nbsp;&raquo;  affiche un truc<br />
(si c&#8217;est trop abstrait google -&gt; glob, foreach, echo)</p>
<p>On va partir de la même base pour en faire une liste d&#8217;images, le php s&#8217;intègrera dans le html, mais il faut anticiper le résultat voulu, je voudrais avoir ce html :</p>
<blockquote><p><code>&lt;img src="image1.png" alt="image1.png"/&gt;<br />
&lt;img src="image2.png" alt="image2.png"/&gt;<br />
&lt;img src="image3.png" alt="image3.png"/&gt;<br />
</code></p></blockquote>
<p>Première retouche :</p>
<blockquote><p><code>foreach (glob("<strong>*.png</strong>") as $file)<br />
echo "$file\n";</code></p></blockquote>
<p>ceci affiche les noms des png dans le dossier<br />
Deuxième retouche :</p>
<blockquote><p><code>foreach (glob("<strong>*.png</strong>") as $file)<br />
echo "</code>&lt;img src=&#8217;$file&#8217; alt=&#8217;$file&#8217; /&gt;<code>";</code></p></blockquote>
<p>ceci affiche les images png.</p>
<p>Version finale avec le xHTML + CSS + reset du CSS + le nom du dossier<br />
J&#8217;ai juste copié/collé deux ou trois trucs en plus&#8230;</p>
<blockquote><p><code><br />
</code><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="fr"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;</code></p>
<p>&lt;title&gt;Liste des images jpg&lt;/title&gt;<br />
&lt;style type=&nbsp;&raquo;text/css&nbsp;&raquo; media=&nbsp;&raquo;screen&nbsp;&raquo;&gt;<br />
/*reset du css */<br />
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0}<br />
table{border-collapse:collapse;border-spacing:0}<br />
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400}<br />
ol,ul{list-style:none}<br />
caption,th{text-align:left}<br />
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}<br />
q:before,q:after{content:&nbsp;&raquo;}<br />
fieldset,img,abbr,acronym{border:0}<br />
/* mon css */<br />
body {<br />
font-size: 62.5%; /* Resets 1em to 10px */<br />
font-family: &#8216;Lucida Sans&#8217;, &#8216;Lucida Grande&#8217;, &#8216;Lucida Sans Unicode&#8217;, Verdana, Arial, Sans-Serif;<br />
background: grey;<br />
color: white;<br />
padding:10px;<br />
}</p>
<p>h1{<br />
font-size: 2em;<br />
}<br />
img{<br />
display: block;<br />
margin:10px 10px 0 0;<br />
float:left;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;liste des png du dossier : &lt;?php echo dirname($_SERVER["PHP_SELF"]); ?&gt;&lt;/h1&gt;<br />
&lt;?php<br />
foreach (glob(&laquo;&nbsp;*.png&nbsp;&raquo;) as $file)<br />
echo &laquo;&nbsp;&lt;img src=&#8217;$file&#8217; alt=&#8217;$file&#8217;/&gt;&nbsp;&raquo;;<br />
?&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p>Je vous laisse le zip du dossier à mettre dans le dossier htdocs ou www pour un test en localhost (en test local on lancera son serveur apache : mamp ou wamp ou lamp ou easyphp).</p>
<p>Télécharger les fichiers sources : <a href="http://jaiunblog.com/blog/wp-content/uploads/2010/01/list_png.zip">list_png.zip</a> avec une petite variante sur un &laquo;&nbsp;echo&nbsp;&raquo;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2220/php-et-programmation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>image youtube</title>
		<link>http://jaiunblog.com/2206/image-youtube/</link>
		<comments>http://jaiunblog.com/2206/image-youtube/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 17:07:09 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=2206</guid>
		<description><![CDATA[Je viens de faire un petit plugin pour wordpress pour mettre les images de youtube dans mon flux (feed) RSS 2 sur ce blog. C&#8217;est pour les articles qui passent dans certains lecteurs sans Flash. Premier étape savoir que toutes les vidéos youtube ont une image de preview disponible ainsi : http://www.youtube.com/watch?v=JWIoIOegZHE à pour image [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Je viens de faire un petit plugin pour wordpress pour mettre les images de youtube dans mon flux (feed) RSS 2 sur ce blog.<br />
C&#8217;est pour les articles qui passent dans certains lecteurs sans Flash.<br />
Premier étape savoir que toutes les vidéos youtube ont une image de preview disponible ainsi :<br />
<a href="http://www.youtube.com/watch?v=JWIoIOegZHE">http://www.youtube.com/watch?v=<strong>JWIoIOegZHE</strong></a><br />
à pour image -&gt;<br />
<a href="http://img.youtube.com/vi/JWIoIOegZHE/0.jpg">http://img.youtube.com/vi/<strong>JWIoIOegZHE</strong>/0.jpg</a></p>
<p>Deuxième étape connaitre le <a href="http://adambrown.info/p/wp_hooks/hook/filters">filtre</a> pour le feed :</p>
<blockquote><p>add_filter(&#8216;the_content_feed&#8217;,'ma_fonction&#8217;);</p></blockquote>
<p>Troisième étape l&#8217;expression régulière :<br />
on va récupérer le <strong>JWIoIOegZHE</strong> sur le src après le embed et avant le &amp;</p>
<blockquote><p>$regex=&#8217;|&lt;embed src.*?youtube.com/v/(.*?)&amp;|&#8217;;</p></blockquote>
<p>On finalise :</p>
<blockquote><p>&lt;?php</p>
<p>/*<br />
Plugin Name: YoutubeImg<br />
Plugin URI: http://jaiunblog.com<br />
Description: affiche les images de youtube<br />
Author: Ben<br />
Version: 1.0<br />
Author URI: http://jaiunblog.com<br />
*/</p>
<p>$img=&nbsp;&raquo;;<br />
function youtube($content) {<br />
if(strstr($content,&nbsp;&raquo;youtube.com/v/&nbsp;&raquo;)){<br />
$regex=&#8217;|&lt;embed src.*?youtube.com/v/(.*?)&amp;|&#8217;;<br />
preg_match_all($regex, $content, $result, PREG_PATTERN_ORDER);<br />
$images = $result[1];<br />
foreach($images AS $image){<br />
$img= $img.&nbsp;&raquo;&lt;a href=&#8217;http://www.youtube.com/watch?v=$image&#8217;&gt;&lt;img src=&#8217;http://img.youtube.com/vi/$image/0.jpg&#8217;/&gt;&lt;/a&gt;&nbsp;&raquo;;<br />
}<br />
$content=$img.$content;<br />
return $content;<br />
}</p>
<p>}<br />
add_filter(&#8216;the_content_feed&#8217;,'youtube&#8217;);</p>
<p>?&gt;</p></blockquote>
<p>Ce n&#8217;est pas parfait, les images sont au début de l&#8217;article mais je vous laisse peaufiner :)</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/2206/image-youtube/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>les liens, wordpress et opml</title>
		<link>http://jaiunblog.com/1987/les-liens-wordpress-et-opml/</link>
		<comments>http://jaiunblog.com/1987/les-liens-wordpress-et-opml/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 10:40:25 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=1987</guid>
		<description><![CDATA[Je viens d&#8217;ajouter des liens ! http://jaiunblog.com/liens/ Voici une technique pour ajouter dans votre blog votre marque-page firefox en quelques clics via le format OPML ;¬) 1re étape : installer ceci : OPML Support for Firefox 2e étape : menu / marques-pages / organiser&#8230; : j&#8217;exporte mon bookmark en OPML (sauf astuce ? il faut [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Je viens d&#8217;ajouter des liens ! <a href="http://jaiunblog.com/liens/">http://jaiunblog.com/liens/</a><br />
Voici une <strong>technique </strong>pour ajouter dans votre blog votre marque-page <strong>firefox</strong> en quelques clics via le format OPML ;¬)</p>
<ul>
<li>1re étape : installer ceci : <a href="https://addons.mozilla.org/en-US/firefox/addon/2625 ">OPML Support for Firefox</a></li>
<li>2e étape : menu / marques-pages / organiser&#8230; : j&#8217;exporte mon bookmark en OPML (sauf astuce ? il faut tout sauvegarder)</li>
<li>3e étape : je charge l&#8217;éditeur d&#8217;OPML <a href="http://editor.opml.org/">http://editor.opml.org/</a></li>
<li>4e étape : j&#8217;ouvre mon « gros » OPML, je copie/colle les branches souhaitées dans un nouveau fichier OPML, je sauvegarde !</li>
<li>5e étape : j&#8217;ouvre avec un éditeur texte (notepad++) et je passe l&#8217;encodage en ANSI (utf-8 ne marchait pas chez moi)</li>
<li>6e étape : dans WordPress / Outils / Importer / Liens &#8211; faire parcourir &#8211; choisir la catégorie &#8211; importer </li>
<li>7e étape : tester :-)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/1987/les-liens-wordpress-et-opml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>scriptographer</title>
		<link>http://jaiunblog.com/1795/scriptographer/</link>
		<comments>http://jaiunblog.com/1795/scriptographer/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 17:04:47 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=1795</guid>
		<description><![CDATA[Si vous aimez Illustrator et que savez lire, cet article est pour vous ! Je vais y aborder le plugin (ou module en français) assez étrange Scriptographer, celui-ci a la particularité de vous permettre de créer des outils ou des scripts et ainsi d&#8217;ouvrir de nouvelles expérimentations. Si vous êtes ou pensez être incompétents en [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p>Si vous aimez Illustrator et que savez lire, cet article est pour vous ! Je vais y aborder le plugin (ou module en français) assez étrange <a href="http://www.scriptographer.com/">Scriptographer</a>, celui-ci a la particularité de vous permettre de créer des outils ou des scripts et ainsi d&#8217;ouvrir de nouvelles expérimentations.<br />
Si vous êtes ou pensez être incompétents en programmation, il est livré avec des scripts, si vous aimez l&#8217;aventure — let&#8217;s go !</p>
<p>première étape : télécharger et installer !<br />
<a href="http://www.scriptographer.com/Download/">http://www.scriptographer.com/Download/ </a><br />
le logiciel est gratuit mac os x et windows, java est nécessaire et la dernière version est toujours la plus performante !<br />
J&#8217;utilise celui sous Illustrator CS 2, la version scriptographer 2.0.023.<br />
<br/><br />
Une fois installé, on a deux outils dans la palette verticale // et ** (des pinceaux magiques) et des fenêtres en plus, les pinceaux magiques en regardant sur le site vous devriez découvrir leurs usages !<br />
<br />
<a href="http://jaiunblog.com/blog/wp-content/uploads/2009/04/scripto01.gif"><img src="http://jaiunblog.com/blog/wp-content/uploads/2009/04/scripto01-424x303.gif" alt="scripto01" title="scripto01" width="424" height="303" class="alignnone size-medium wp-image-1796" /></a><br />
<br/><br />
L&#8217;aide du site devrait vous aider à surmonter les difficultés d&#8217;installation.<br />
<br/><br />
On se lance !<br />
Comme on peut le voir sur ma capture, les scripts sont des fichiers textes .js éditables par double clics. En bas de la fenêtre principale « scriptographer » , on trouve des pictos « play », « stop », « rafraichir », « nouveau », « console d&#8217;erreur et sortie », « // » et « ** ».<br />
Faites « nouveau » et nommer le « coloriage.js » . Éditer-le (sur pc notepad ou mieux notepad++).<br />
<br/><br />
On va faire un script qui applique une liste de couleurs « rouge, violet, jaune , rose, bleu, vert » successivement sur les objets sélectionnés. Ça donne ceci ;¬)<br />
<br/><br />
<img src="http://jaiunblog.com/blog/wp-content/uploads/2009/04/scripto02-425x425.gif" alt="scripto02" title="scripto02" width="425" height="425" class="alignnone size-medium wp-image-1806" /><br />
<br/><br />
On commence par faire « var sel = activeDocument.getSelectedItems(); »  qui récupère la sélection multiple&#8230;<br />
Ensuite on définie notre palette de couleurs</p>
<blockquote><p>var colorz = new Array();<br />
colorz[0]=new RGBColor(0.5,0,1); // violet<br />
colorz[1]=new RGBColor(1,0,0); //rouge<br />
colorz[2]=new RGBColor(0,1,0); // vert<br />
colorz[3]=new RGBColor(0,1,1); // bleu clair<br />
colorz[4]=new RGBColor(1,1,0); // jaune<br />
colorz[5]=new RGBColor(1,0,1); // rose</p></blockquote>
<p>Les couleurs sont codées en RVB de 0 à 1 par couche et pas de 0 à 255.<br />
J&#8217;ajoute un compteur « var count » afin d&#8217;appliquer la colorz 0, puis 1,2,3,4,5&#8230; puis 0,1,2,3&#8230; quand count sera plus grand que le nombre de couleurs dans colorz, il revient à 0.<br />
Puis j&#8217;applique la couleur sur mes éléments selectionnés en faisant la différence entre les textes et les autres.<br />
Attention, si la sélection contient des groupes, ça ne marche pas (mais on devrait pouvoir y remédier), on dégroupe le plus possible (crtl + maj + G). </p>
<p> version complète coloriage.js :</p>
<blockquote><p>var sel = activeDocument.getSelectedItems();<br />
var colorz = new Array();<br />
colorz[0]=new RGBColor(0.5,0,1); // violet<br />
colorz[1]=new RGBColor(1,0,0); // rouge<br />
colorz[2]=new RGBColor(0,1,0); // vert<br />
colorz[3]=new RGBColor(0,1,1); // bleu clair<br />
colorz[4]=new RGBColor(1,1,0); // jaune<br />
colorz[5]=new RGBColor(1,0,1); // rose</p>
<p>var count = -1;</p>
<p>for (var i = 0; i < sel.length; i++) { // on fait une boucle dans notre sélection<br />
	count++; // on gère le compteur<br />
	if(count >(colorz.length-1)){<br />
	var count = 0;<br />
	} //</p>
<p>	art = sel[i]; // art est un élément vectoriel<br />
	if (art instanceof TextFrame) { // si c&#8217;est un texte<br />
		art.characterStyle.fill.color= colorz[count]; // on applique la couleur n° 0,1,2,3&#8230; selon count<br />
		} else { // sinon<br />
		art.style.fill.color= colorz[count]; // on applique la couleur n° 0,1,2,3&#8230; selon count<br />
	} // fin du si c&#8217;est un texte<br />
} // fin de la boucle
</p></blockquote>
<p>On sélectionne les objets à colorier (on dégroupe le plus possible) puis « play » en bas de la fenêtre scriptographer !<br />
Done !</p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/1795/scriptographer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>comment faire un plugin pour wordpress</title>
		<link>http://jaiunblog.com/1545/comment-faire-un-plugin-pour-wordpress/</link>
		<comments>http://jaiunblog.com/1545/comment-faire-un-plugin-pour-wordpress/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 15:45:44 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jaiunblog.com/?p=1545</guid>
		<description><![CDATA[Je vais prendre 5 minutes pour contribuer au monde merveilleux de wordpress avec un mini tutorial sur les plugins (ou extensions pour être correcte). Je passe les détails sur l&#8217;installation d&#8217;un plugin dans wordpress ;¬) enfin rapidement pour ceux qui découvre, si vous avez accès au ftp de votre blog, les extensions sont dans le [...]]]></description>
			<content:encoded><![CDATA[<!-- Flash Video Resizer 1.4 : 425pixel --><p><img src="http://jaiunblog.com/blog/wp-content/uploads/2008/10/grojour.gif" alt="" title="grojour" width="425" height="468" class="alignnone size-full wp-image-1548" /><br />
Je vais prendre 5 minutes pour contribuer au monde merveilleux de wordpress avec un mini tutorial sur les plugins (ou extensions pour être correcte).<br />
Je passe les détails sur l&#8217;installation d&#8217;un plugin dans wordpress ;¬) enfin rapidement pour ceux qui découvre, si vous avez accès au ftp de votre blog, les extensions sont dans le dossier /wordpress/wp-content/plugins/ et on les active dans la partie « Extensions » du panneau d&#8217;administration.</p>
<p>Pour faire ce merveilleux plugin, il faut avoir quelques notions de php, ici le plus difficile est de comprendre les variables tableaux et la fonction <a href="http://fr2.php.net/strtr">strtr</a> ; si ça semble imbuvable, le <a href="http://www.siteduzero.com/tutoriel-3-14668-un-site-dynamique-avec-php.html">site du zéro</a> est assez pédagogique.</p>
<p>À quoi va servir ce plugin ;¬) nous allons faire un mini traducteur des jours en grolandais ! Rien d&#8217;utile mais en poussant un peu plus le principe, on peut imaginer des petites fonctions avancées en php et xhtml (pour convertir les liens .mp3 en player flash). </p>
<p>Premiers pas indispensable : <strong>L&#8217;entête</strong></p>
<blockquote><p><code>/*<br />
Plugin Name: Grojour<br />
Plugin URI: http://jaiunblog.com<br />
Description: traducteur grlandais<br />
Author: Ben<br />
Version: 1.0<br />
Author URI: http://jaiunblog.com<br />
*/<br />
</code></p></blockquote>
<p>Il s&#8217;agit de commentaire php entre /* et */ c&#8217;est la description (seul le Plugin Name est obligatoire).</p>
<p>Deuxième étape <strong>La fonction utile</strong></p>
<blockquote><p><code>function gJour($text){<br />
	$traduction = array(<br />
	"Lundi" => "Lendi",<br />
	"Mardi" => "Mordi",<br />
	"Mercredi" => "Credi",<br />
	"Jeudi" => "Joudi",<br />
	"Vendredi" => "Dredi",<br />
	"Samedi" => "Sadi",<br />
	"Dimanche" => "Gromanche",<br />
	"lundi" => "lendi",<br />
	"mardi" => "mordi",<br />
	"mercredi" => "credi",<br />
	"jeudi" => "joudi",<br />
	"vendredi" => "dredi",<br />
	"samedi" => "sadi",<br />
	"dimanche" => "gromanche"<br />
	);<br />
	$text= strtr($text,$traduction);<br />
	return $text;<br />
}</code></p></blockquote>
<p>Pour la pédagogie : echo gJour(&laquo;&nbsp;On est lundi ?&nbsp;&raquo;); // donne : On est lendi ?<br />
Ne pas oublier le « return $variable » sinon le filtre effacera ses cibles.</p>
<p>Pour finir, la magie de wordpress : <strong>les filtres</strong></p>
<blockquote><p><code>add_filter("the_content","gJour");<br />
add_filter("the_time","gJour");</code></p></blockquote>
<p>On cible les « morceaux » qui vont être filtré par notre fonction gJour, ici the_content et the_time, le contenu et la date du billet. À noter, les filtres sont appliqués juste avant l&#8217;affichage des pages et si on désactive le plugin, le site redevient comme avant :-)</p>
<p><a href='http://jaiunblog.com/blog/wp-content/uploads/2008/10/grojour.zip'>grojour.zip</a></p>
<p>Update : deux liens complémentaires<br />
<a href="http://blog.site2wouf.fr/2008/08/tutoriel-wordpress-un-plug-in-simple-pour-comprendre.html">http://blog.site2wouf.fr/2008/08/tutoriel-wordpress-un-plug-in-simple-pour-comprendre.html </a><br />
<a href="http://www.pasunclou.com/2008/09/29/ecrire-un-plugin-wordpress/">http://www.pasunclou.com/2008/09/29/ecrire-un-plugin-wordpress/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaiunblog.com/1545/comment-faire-un-plugin-pour-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

