<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4308172214566237823</atom:id><lastBuildDate>Wed, 02 Oct 2024 13:17:22 +0000</lastBuildDate><title>Zork[Yy]/log</title><description></description><link>http://blogger.olivier-duval.info/</link><managingEditor>noreply@blogger.com (Olivier)</managingEditor><generator>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4308172214566237823.post-4417093640576184204</guid><pubDate>Tue, 13 Feb 2007 18:37:00 +0000</pubDate><atom:updated>2007-02-13T19:37:14.705+01:00</atom:updated><title>Hébergement photos</title><description>&lt;p&gt;&lt;a href=&quot;http://www.flickr.com&quot;&gt;Flickr&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://picasaweb.google.fr&quot;&gt;Picasa Web&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.imageshack.us/&quot;&gt;ImageShack&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.deviantart.com&quot;&gt;Deviant Art&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.pbase.com&quot;&gt;PBase&lt;/a&gt;&lt;/p&gt;</description><link>http://blogger.olivier-duval.info/2007/02/hbergement-photos.html</link><author>noreply@blogger.com (Olivier)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4308172214566237823.post-1087348508907406423</guid><pubDate>Thu, 11 Jan 2007 21:08:00 +0000</pubDate><atom:updated>2007-01-11T22:08:31.286+01:00</atom:updated><title>Votre charpente tient-elle la route ?</title><description>&lt;p&gt;La vague&amp;nbsp;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Web_2.0&quot;&gt;Web 2.0&lt;/a&gt;&amp;nbsp;&amp;nbsp;déferle sur la toile, et apporte&amp;nbsp;pour l&#39;utilisateur une réelle valeur ajoutée à l&#39;utilisation des&amp;nbsp;applications Web .&lt;/p&gt; &lt;p&gt;Parmi les technologies utilisées, nous retrouvons &lt;a href=&quot;http://fr.wikipedia.org/wiki/AJAX&quot;&gt;Ajax&lt;/a&gt;, 1ère brique fondatrice du phénomène &lt;a href=&quot;http://fr.wikipedia.org/wiki/Web_2.0&quot;&gt;Web 2.0&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;D&#39;après &lt;a href=&quot;http://www.01net.com/editorial/325932/developpement/ajax-dope-l-ergonomie-des-applications-web/&quot;&gt;01net&lt;/a&gt;,&amp;nbsp;&quot;&lt;b&gt;&lt;em&gt;Ajax dope l&#39;ergonomie des applications Web&lt;/em&gt;&lt;/b&gt;&quot;. Afin d&#39;arriver à cet état de fait,&amp;nbsp;les développeurs doivent se doter d&#39;outils, notamment de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Framework&quot;&gt;frameworks&lt;/a&gt; Javascript. Ces frameworks doivent être&amp;nbsp;capables de&amp;nbsp;gérer toute la&amp;nbsp;tuyauterie sous-jacente à &lt;a href=&quot;http://fr.wikipedia.org/wiki/AJAX&quot;&gt;Ajax&lt;/a&gt; (compatibilité des navigateurs, appels, rendus, ...), et donc &lt;em&gt;in fine&lt;/em&gt;&amp;nbsp;de simplifier son développement,&amp;nbsp;sa maintenance, et sa capacité à évoluer.&lt;/p&gt; &lt;p&gt;Parmi les frameworks existants, on pourra citer :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://atlas.asp.net&quot;&gt;Atlas&lt;/a&gt; : le framework de Microsoft, qui sera bientôt intégré à l&#39;IDE Visual Studio.  &lt;li&gt;&lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype&lt;/a&gt; : la librairie de bas niveau utilisée par bon nombre de librairies.  &lt;li&gt;&lt;a href=&quot;http://script.aculo.us/&quot;&gt;Script.aculos.us&lt;/a&gt;&amp;nbsp; : une librairie Javascript développée comme une sur-couche à&amp;nbsp;Prototype : auto-remplissage, effets, &lt;em&gt;drag &amp;amp; drop&lt;/em&gt;, ...  &lt;li&gt;&lt;a href=&quot;http://openrico.org/&quot;&gt;Rico&lt;/a&gt; : Basée aussi sur Prototype, apporte un ensemble assez riche de composants : &lt;em&gt;drag&amp;nbsp;&amp;amp; drop&lt;/em&gt;, effets, ... &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;...il en existe une bonne cinquantaine, à vous de faire le bon choix selon vos besoins, et la qualité du module. &lt;/p&gt;</description><link>http://blogger.olivier-duval.info/2007/01/votre-charpente-tient-elle-la-route.html</link><author>noreply@blogger.com (Olivier)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4308172214566237823.post-3212538629940071533</guid><pubDate>Thu, 11 Jan 2007 21:07:00 +0000</pubDate><atom:updated>2007-01-11T22:07:47.094+01:00</atom:updated><title>Script.aculo.us : auto-remplissage &amp;amp; ASP.NET</title><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Premier test d&#39;intégration d&#39;un champ rempli automatiquement dans une page &lt;em&gt;aspx &lt;/em&gt;: concluant !  &lt;p&gt;L&#39;objectif pour un projet (en ASP.NET), était de rendre plus ergonomique l&#39;aide à la saisie concernant la sélection d&#39;un intitulé. Pour cela, l&#39;auto-remplissage sous forme d&#39;un liste de choix est un bon moyen pour l&#39;utilisateur de retrouver ce qu&#39;il souhaite. Cette aide se déclenche au bout du 4ème caractère saisi.  &lt;p&gt;J&#39;ai utilisé &lt;a href=&quot;http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter&quot;&gt;Ajax.Autocompleter&lt;/a&gt;, méthode qui permet, de façon simple, d&#39;appeler un script chargé de ramener une liste d&#39;éléments, sous forme d&#39;une liste &amp;amp;lt;ul&amp;amp;gt; &amp;amp;lt;li&amp;amp;gt;&lt;em&gt;choix1&lt;/em&gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;&lt;em&gt;choix2&lt;/em&gt;&amp;amp;lt;/li&amp;amp;gt; &amp;amp;lt;/ul&amp;amp;gt;.  &lt;p&gt;Le composant est utilisé dans une page &lt;em&gt;aspx&lt;/em&gt; (ASP.NET V2), et appelle un &lt;em&gt;handler&lt;/em&gt;, page ayant une extension &lt;em&gt;.ashx&lt;/em&gt;, chargée d&#39;interroger la base de données puis de ramener les propositions.  &lt;p&gt;&lt;strong&gt;1ère étape :&lt;/strong&gt; inclure les blibliothéques dans l&#39;entête &amp;amp;lt;head&amp;amp;gt; &lt;em&gt;déclaration&lt;/em&gt; &amp;amp;lt;/head&amp;amp;gt; de la page :  &lt;p&gt;&amp;amp;lt;script type=&quot;text/javascript&quot; src=&quot;/inc/script.aculo.us/prototype.js&quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script type=&quot;text/javascript&quot; src=&quot;/inc/script.aculo.us/scriptaculous.js&quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;  &lt;p&gt;&lt;strong&gt;2ème étape :&lt;/strong&gt; positionner les éléments (&amp;amp;lt;div&amp;amp;gt;, controle &lt;em&gt;textbox&lt;/em&gt;, ...) pour l&#39;utilisation du composant :  &lt;blockquote&gt; &lt;p&gt;1. &amp;amp;lt;asp:textbox id=TBIntitule Runat=&quot;server&quot; Columns=&quot;80&quot; /&amp;amp;gt;  &lt;p&gt;2. &amp;amp;lt;span id=&quot;spinner&quot; style=&quot;display: none&quot;&amp;amp;gt;&amp;amp;lt;img src=&quot;/images/spinner_orange.gif&quot; alt=&quot;Recherche...&quot; /&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;  &lt;p&gt;3. &amp;amp;lt;div id=&quot;autocomplete_choices&quot; class=&quot;autocomplete&quot;&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;  &lt;p&gt;4. &amp;amp;lt;script type=&quot;text/javascript&quot;&amp;amp;gt; //&amp;amp;lt;![CDATA[ new Ajax.Autocompleter(&quot;&amp;amp;lt;%=TBIntitule.ClientID %&amp;amp;gt;&quot;, &quot;autocomplete_choices&quot;, &#39;&amp;amp;lt;%=Page.ResolveUrl(&quot;~/Recherche/search.ashx&quot;) %&amp;amp;gt;&#39;, {method: &#39;post&#39;, paramName: &quot;searchvalue&quot;, minChars: 4, indicator: &#39;spinner&#39;, frequency: 0.4}); //]]&amp;amp;gt; &amp;amp;lt;/script&amp;amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Explications :  &lt;p&gt;1. le champ de saisie (sera transformé en &amp;amp;lt;input type=text ...id=&#39;TBIntitule&#39;&amp;amp;gt;)  &lt;p&gt;2. le bloc d&#39;affichage de l&#39;image d&#39;attente (&lt;em&gt;spinner&lt;/em&gt;) lors du déclenchement de la recherche (voir d&#39;autres &lt;a href=&quot;http://www.napyfab.com/ajax-indicators/&quot;&gt;exemples d&#39;images animées&lt;/a&gt; utilisées pour ce type de recherche)  &lt;p&gt;3. le bloc où sera affichée la liste des propositions, sous forme &amp;amp;lt;ul&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;/ul&amp;amp;gt;  &lt;p&gt;4. le code script.aculo.us qui gère la mécanique d&#39;appel Ajax et de retour des réponses à afficher, dans l&#39;ordre des paramètres : le (DOM) id du champ de recherche, l&#39;id de la &amp;amp;lt;div&amp;amp;gt; d&#39;affichage, le script de recherche (ici un &lt;em&gt;handler ashx&lt;/em&gt;, un web service, ou un aspx reste possible), les options du composant (méthode &lt;em&gt;GET&lt;/em&gt; ou &lt;em&gt;POST&lt;/em&gt;, paramètre passé au script, déclenchement au bout du &lt;em&gt;minChars&lt;/em&gt; caractère, l&#39;id du bloc &lt;em&gt;spinner&lt;/em&gt;, et la fréquence de déclenchement &lt;em&gt;0.4 s&lt;/em&gt;).  &lt;p&gt;&lt;strong&gt;3ème étape :&lt;/strong&gt; écriture du script pour notre exemple  &lt;p&gt;J&#39;ai opté pour une solution simple : écriture d&#39;un petit &lt;em&gt;handler ashx&lt;/em&gt; pour répondre à la requête Ajax. L&#39;avantage de ce type de script est qu&#39;il est simple à mettre en oeuvre, et surtout peu coûteux en ressources (vs. un &lt;em&gt;aspx&lt;/em&gt; ou un &lt;em&gt;web service&lt;/em&gt;).  &lt;p&gt;Source de la page &lt;em&gt;search.ashx &lt;/em&gt;:  &lt;blockquote&gt; &lt;p&gt;public class search : IHttpHandler, System.Web.SessionState.IRequiresSessionState  &lt;p&gt;{  &lt;p&gt;private string _search(string strSearch) {  &lt;p&gt;IClassificationManager mgr = ClassificationMgr;  &lt;p&gt;IIntitulePoste[] intitules = mgr.GetIntitulesPostesByString(strSearch, 4);  &lt;p&gt;StringBuilder myreponse = new StringBuilder();  &lt;p&gt;myreponse.Append(&quot;&amp;amp;lt;ul&amp;amp;gt;&quot;);  &lt;p&gt;for (int i = 0; i &amp;amp;lt; intitules.Length; i++)  &lt;p&gt;myreponse.AppendFormat(&quot;&amp;amp;lt;li&amp;amp;gt;{0}&amp;amp;lt;/li&amp;amp;gt;&quot;, ((IIntitulePoste)intitules[i]).Libelle); myreponse.Append(&quot;&amp;amp;lt;/ul&amp;amp;gt;&quot;);  &lt;p&gt;return myreponse.ToString();  &lt;p&gt;}  &lt;p&gt;public new void ProcessRequest(HttpContext context)  &lt;p&gt;{  &lt;p&gt;string strSearch = context.Request.Form[&quot;searchvalue&quot;];  &lt;p&gt;if (strSearch != null &amp;amp;&amp;amp; strSearch != &quot;&quot;)  &lt;p&gt;context.Response.Write(_search(strSearch));  &lt;p&gt;else  &lt;p&gt;context.Response.Write(&quot;&amp;amp;lt;ul&amp;amp;gt;&amp;amp;lt;/ul&amp;amp;gt;&quot;); }  &lt;p&gt;public new bool IsReusable { get { return true; } }  &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;4ème étape :&lt;/strong&gt; affinage des résultats avec du style  &lt;p&gt;Le résultat étant formé de &amp;amp;lt;ul&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;, il faut y appliquer un style afin de rendre plus utilisable la liste (sans les points . , mettre une couleur sur le choix courant, ...). Le résultat est rendu dans &lt;em&gt;&amp;amp;lt;div id=&quot;autocomplete_choices&quot; class=&quot;autocomplete&quot;&amp;amp;gt;&lt;/em&gt;, appliquons un style à cette &lt;em&gt;class&lt;/em&gt; :  &lt;blockquote&gt; &lt;p&gt;div.autocomplete { position:absolute; width: 200px; background-color:white; border:1px solid #888; margin:0px; padding:0px; z-index: 1000 }  &lt;p&gt;div.autocomplete ul { list-style-type:none; margin:0px; padding:0px; } div.autocomplete ul li.selected { background-color: #ffb;}  &lt;p&gt;div.autocomplete ul li { list-style-type:none; display:block; margin:0; cursor:pointer; }&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;C&#39;est fini ;)  &lt;p&gt;Ce premier exemple, permet de voir très rapidement l&#39;avantage et l&#39;apport d&#39;Ajax dans le Web 2.0, pour un meilleur service à l&#39;utilisateur !  &lt;p&gt;A vos claviers !  </description><link>http://blogger.olivier-duval.info/2007/01/scriptaculous-auto-remplissage-aspnet.html</link><author>noreply@blogger.com (Olivier)</author><thr:total>0</thr:total></item></channel></rss>