<?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>Le blog de SpiceGuid &#187; Logiciel Libre</title>
	<atom:link href="https://blog.developpez.com/damien-guichard/pcategory/logiciel-libre/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/damien-guichard</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 16:08:44 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Mise à jour vers la version 0.2c</title>
		<link>https://blog.developpez.com/damien-guichard/p11053/logiciel-libre/mise_a_jour_vers_la_version_0_2c</link>
		<comments>https://blog.developpez.com/damien-guichard/p11053/logiciel-libre/mise_a_jour_vers_la_version_0_2c#comments</comments>
		<pubDate>Mon, 28 May 2012 16:08:44 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[ERic]]></category>
		<category><![CDATA[Logiciel Libre]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[ERic (Entity-Relationship interactive calculator) est un jeune logiciel libre, en ligne de commande, sous licence EUPL-1.1. ERic permet d&#8217;éditer et de sauvegarder des ontologies et des bases de connaissance sous forme de graphes entités/relations. Ensuite, grâce à son algorithme de subsomption, ERic est capable d&#8217;interroger sa base de connaissance de façon remarquablement flexible. ERic v0.2c ajoute le support des nombres réels flottants et des unités SI du système international de mesure. Le forum d&#8217;ERic hébergé [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><center><a href="http://www.developpez.net/forums/f1699/applications/projets/projets-heberges/eric/" target="_blank"><img src="http://damien-guichard.developpez.com/illustrations/developpez_0112.png"/></a></center></p>
<p><strong>ERic</strong> (Entity-Relationship interactive calculator) est un jeune logiciel libre, en ligne de commande, sous licence <a href="http://joinup.ec.europa.eu/software/page/eupl/licence-eupl" target="_blank">EUPL-1.1</a>.<br />
ERic permet d&rsquo;éditer et de sauvegarder des ontologies et des bases de connaissance sous forme de graphes entités/relations. Ensuite, grâce à son algorithme de subsomption, ERic est capable d&rsquo;interroger sa base de connaissance de façon remarquablement flexible.</p>
<p><strong>ERic v0.2c</strong> ajoute le support des nombres réels flottants et des unités SI du système international de mesure.</p>
<ul>
<li>Le <a href="http://www.developpez.net/forums/f1699/applications/projets/projets-heberges/eric/" target="_blank">forum d&rsquo;ERic</a> hébergé par developpez.net</li>
<li>Le <a href="http://subversion.developpez.com/projets/ERic/trunk/" target="_blank">dépôt SVN d&rsquo;ERic</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ERic disponible en version 0.2a</title>
		<link>https://blog.developpez.com/damien-guichard/p10963/logiciel-libre/eric_disponible_en_version_0_2a</link>
		<comments>https://blog.developpez.com/damien-guichard/p10963/logiciel-libre/eric_disponible_en_version_0_2a#comments</comments>
		<pubDate>Thu, 19 Apr 2012 15:27:23 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[ERic]]></category>
		<category><![CDATA[Logiciel Libre]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce billet annonce la disponibilité immédiate d&#8217;ERic v0.2a ERic (Entity-Relationship interactive calculator) est un jeune logiciel libre, en ligne de commande, sous licence EUPL-1.1. ERic permet d&#8217;éditer et de sauvegarder des ontologies et des bases de connaissance sous forme de graphes entités/relations. Ensuite, grâce à son algorithme de subsomption, ERic est capable d&#8217;interroger sa base de connaissance de façon remarquablement flexible. Le forum hébergé par developpez.net Le dépôt SVN]]></description>
				<content:encoded><![CDATA[<p><center><a href="http://www.developpez.net/forums/f1699/applications/projets/projets-heberges/eric/" target="_blank"><img src="http://damien-guichard.developpez.com/illustrations/developpez_0112.png"/></a></center></p>
<p>Ce billet annonce la disponibilité immédiate d&rsquo;<strong>ERic v0.2a</strong></p>
<p><strong>ERic</strong> (Entity-Relationship interactive calculator) est un jeune logiciel libre, en ligne de commande, sous licence <a href="http://joinup.ec.europa.eu/software/page/eupl/licence-eupl" target="_blank">EUPL-1.1</a>.<br />
ERic permet d&rsquo;éditer et de sauvegarder des ontologies et des bases de connaissance sous forme de graphes entités/relations. Ensuite, grâce à son algorithme de subsomption, ERic est capable d&rsquo;interroger sa base de connaissance de façon remarquablement flexible.</p>
<ul>
<li>Le <a href="http://www.developpez.net/forums/f1699/applications/projets/projets-heberges/eric/" target="_blank">forum</a> hébergé par developpez.net</li>
<li>Le <a href="http://subversion.developpez.com/projets/ERic/trunk/" target="_blank">dépôt SVN</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raincat, le chaton craintif</title>
		<link>https://blog.developpez.com/damien-guichard/p8795/programmation-fonctionnelle/raincat_le_chaton_craintif</link>
		<comments>https://blog.developpez.com/damien-guichard/p8795/programmation-fonctionnelle/raincat_le_chaton_craintif#comments</comments>
		<pubDate>Mon, 05 Apr 2010 19:01:41 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[Logiciel Libre]]></category>
		<category><![CDATA[Programmation fonctionnelle]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce n&#8217;est pas la première fois que je vous parle de jeu-vidéo et de programmation fonctionnelle. Cette fois il s&#8217;agit de Raincat, un jeu SDL écrit en Haskell, pour Windows et Linux. Le jeu consiste à déposer les accessoires (dans la colonne à droite) sur le parcours du chaton afin que celui-ci atteigne la sortie du niveau malgré la pluie et diverses projections d&#8217;eau. Car le Raincat est réellement hydrophobe, la moindre goutte sur son [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><center><a href="http://haskell.org/" target="_blank"><img src="http://haskell.org/sitewiki/images/a/a8/Haskell-logo-60.png"/></a></center></p>
<p>Ce n&rsquo;est pas la première fois que je vous parle de jeu-vidéo et de programmation fonctionnelle.<br />
Cette fois il s&rsquo;agit de <a href="http://bysusanlin.com/raincat/" target="_blank">Raincat</a>, un jeu SDL écrit en <a href="http://haskell.org/" target="_blank">Haskell</a>, pour Windows et Linux.</p>
<p><center><img src="http://damien-guichard.developpez.com/illustrations/developpez_0107.jpg"/></center></p>
<p>Le jeu consiste à déposer les accessoires (dans la colonne à droite) sur le parcours du chaton afin que celui-ci atteigne la sortie du niveau malgré la pluie et diverses projections d&rsquo;eau. Car le Raincat est réellement hydrophobe, la moindre goutte sur son pelage délicat et vous devrez recommencer le niveau.</p>
<p>À vrai dire ce petit puzzle ne m&rsquo;a pas rendu accro. Maintenir un chaton propre et toujours au sec m&rsquo;apparaît difficilement comme un enjeu ludique motivant.  </p>
<p>Ce qui est peut être plus intéressant que le jeu en lui-même c&rsquo;est le témoignage que le fossé qui séparaient les langages académiques des applications quotidiennes se comble de jours en jours.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personnalisez vos fichiers source</title>
		<link>https://blog.developpez.com/damien-guichard/p8578/programmation-fonctionnelle/objective-caml/personnalisez_vos_fichiers_source</link>
		<comments>https://blog.developpez.com/damien-guichard/p8578/programmation-fonctionnelle/objective-caml/personnalisez_vos_fichiers_source#comments</comments>
		<pubDate>Sat, 30 Jan 2010 15:56:10 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Objective Caml]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un MIME (Multipurpose Internet Mail Extension) est une information système pour identifier les types de fichier et leur affecter certains attributs comme une commande par défaut ou une icône personnalisée. Ce billet vous propose d&#8217;agrémenter votre station de développement Objective-Caml à l&#8217;aide d&#8217;un MIME pour vos fichiers source. Bien sûr ça n&#8217;est qu&#8217;un exemple que vous pourrez adapter à votre application ou à votre langage de programmation favori. D&#8217;abord un avertissement : l&#8217;ajout de MIMEs [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><center><a href="http://caml.inria.fr/" target="_blank"><img src="http://damien-guichard.developpez.com/logos/logo_caml.png"/></a></center></p>
<p>Un MIME (Multipurpose Internet Mail Extension) est une information système pour identifier les types de fichier et leur affecter certains attributs comme une commande par défaut ou une icône personnalisée.  </p>
<p>Ce billet vous propose d&rsquo;agrémenter votre station de développement <a href="http://caml.inria.fr/" target="_blank">Objective-Caml</a> à l&rsquo;aide d&rsquo;un MIME pour vos fichiers source.<br />
Bien sûr ça n&rsquo;est qu&rsquo;un exemple que vous pourrez adapter à votre application ou à votre langage de programmation favori.</p>
<p><span id="more-12"></span></p>
<p>D&rsquo;abord un <strong>avertissement</strong> :</p>
<ul>
<li> l&rsquo;ajout de MIMEs est une opération potentiellement dangereuse, en effet si vous perdez tous vos MIMEs vous ne pourrez plus monter un volume en cliquant sur son icône et vous devrez retourner à la console pour réaliser la plupart des opérations mêmes les plus élémentaires</li>
<li> tapez la commande <ins>update-mime-database /usr/share/mime</ins> dans une console </li>
<li> si cette commande n&rsquo;est pas reconnue alors votre système ne gère pas la mise à jour des MIMEs et vous devrez opérer à la main, à condition de savoir ce que vous faites </li>
</ul>
<p>Sinon créez un fichier <ins>/usr/share/mime/packages/ocaml.xml</ins> et éditez-le avec ce contenu :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; <br />
&lt;mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'&gt; <br />
&nbsp; &lt;mime-type type=&quot;text/ocaml-source&quot;&gt; <br />
&nbsp; &nbsp; &lt;comment&gt;Objective-Caml source&lt;/comment&gt; <br />
&nbsp; &nbsp; &lt;glob pattern=&quot;*.ml&quot;/&gt; <br />
&nbsp; &lt;/mime-type&gt; <br />
&nbsp; &lt;mime-type type=&quot;text/ocaml-interface&quot;&gt; <br />
&nbsp; &nbsp; &lt;comment&gt;Objective-Caml interface&lt;/comment&gt; <br />
&nbsp; &nbsp; &lt;glob pattern=&quot;*.mli&quot;/&gt; <br />
&nbsp; &lt;/mime-type&gt; <br />
&lt;/mime-info&gt;</div></div>
<p>Puis exécutez la commande <ins>update-mime-database /usr/share/mime</ins>.</p>
<p>Vous pouvez alors définir tous les paramètres liés à un MIME comme une icône personnalisée et une action par défaut pour votre gestionnaire de fichiers.</p>
<p>Par exemple définir une icône personnalisée pour <strong>ROX-filer</strong> :</p>
<ul>
<li> sauvez le fichier image en tête de cet article </li>
<li> sélectionnez le menu <ins>File/Set Icon&#8230;</ins> sur un fichier <strong>*.ml</strong> </li>
<li> cochez la case <ins>Pour tous les fichiers de type &lsquo;text/ocaml-source</ins> </li>
<li> lâchez l&rsquo;image sur la zone réservée à cet effet</li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello Developpez ! avec LibGlade/XML</title>
		<link>https://blog.developpez.com/damien-guichard/p7748/programmation-fonctionnelle/hello_developpez_avec_libglade_xml_1</link>
		<comments>https://blog.developpez.com/damien-guichard/p7748/programmation-fonctionnelle/hello_developpez_avec_libglade_xml_1#comments</comments>
		<pubDate>Mon, 15 Jun 2009 14:49:50 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[Logiciel Libre]]></category>
		<category><![CDATA[Objective Caml]]></category>
		<category><![CDATA[Programmation fonctionnelle]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Hier, afin d&#8217;illustrer l&#8217;usage de LablGtk2, le binding GTK+ pour le langage Objective-Caml j&#8217;ai posté le code de ce Hello Developpez tout ce qu&#8217;il y a de plus basique : Toutefois, une comparaison ligne à ligne avec la version Gtk2Hs pour Haskell, grâcieusement postée par Alp, n&#8217;était pas possible puisque mon code n&#8217;utilisait pas libglade. On pourrait se demander pour quelle raison utiliser libglade car OCaml est un langage statiquement typé particulièrement sûr comparé à [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://caml.inria.fr/" target="_blank"><img src="http://caml.inria.fr//pub/logos/caml-inria-fr.128x58.gif"/></a></p>
<p>Hier, afin d&rsquo;illustrer l&rsquo;usage de <a href="http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html" target="_blank">LablGtk2, le binding GTK+</a> pour le <a href="http://caml.inria.fr/" target="_blank">langage Objective-Caml</a> j&rsquo;ai posté le code de ce Hello Developpez tout ce qu&rsquo;il y a de plus basique :</p>
<p><img src="http://damien-guichard.developpez.com/illustrations/developpez_0077.jpg"/></p>
<p>Toutefois, une comparaison ligne à ligne avec <a href="http://blog.developpez.com/alp/p7737/programmation-fonctionnelle/hello-gtk2hs/#more7737" target="_blank">la version Gtk2Hs pour Haskell</a>, grâcieusement postée par <strong>Alp</strong>, n&rsquo;était pas possible puisque mon code n&rsquo;utilisait pas <em>libglade</em>. </p>
<p><span id="more-11"></span></p>
<p>On pourrait se demander pour quelle raison utiliser libglade car OCaml est un langage statiquement typé particulièrement sûr comparé à un fichier XML chargé dynamiquement et qui pourrait être modifié sans contrôle à tout moment. On pourrait argumenter qu&rsquo;il est bon de séparer le visuel de l&rsquo;interface et sa logique interne mais là encore le système de modules de OCaml est particulièrement bien adapté pour le <em>separation of concerns</em>.<br />
L&rsquo;intérêt indiscutable c&rsquo;est la flexibilité, en particulier l&rsquo;internationalisation est bien plus facile à réaliser que si elle était codée en dur. Et puis après tout la question n&rsquo;est pas là, c&rsquo;est à la mode, on peut le faire en Haskell, on peut le faire en OCaml, c&rsquo;est facile à faire et ça justifie bien un nouveau billet blog. </p>
<p>Mon fichier XML est en tous points identique à celui de <strong>Alp</strong> :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?xml version=&quot;1.0&quot;?&gt; <br />
&lt;glade-interface&gt; &nbsp;<br />
&nbsp; &lt;!-- interface-requires gtk+ 2.16 --&gt; &nbsp;<br />
&nbsp; &lt;!-- interface-naming-policy project-wide --&gt; &nbsp;<br />
&nbsp; &lt;widget class=&quot;GtkWindow&quot; id=&quot;window1&quot;&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;title&quot; translatable=&quot;yes&quot;&gt;Hello, Developpez !&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;default_width&quot;&gt;400&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;default_height&quot;&gt;400&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;child&gt; &nbsp;<br />
&nbsp; &lt;widget class=&quot;GtkButton&quot; id=&quot;yo&quot;&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;Bonjour Developpez, comment vas-tu ? &nbsp;<br />
&nbsp;<br />
Je suis un programme OCaml qui utilise <br />
LablGtk2, le binding GTK+ pour OCaml. <br />
&nbsp;<br />
Clique pour fermer.&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;property name=&quot;receives_default&quot;&gt;True&lt;/property&gt; &nbsp;<br />
&nbsp; &lt;/widget&gt; &nbsp;<br />
&nbsp; &lt;/child&gt; &nbsp;<br />
&nbsp; &lt;/widget&gt; &nbsp;<br />
&lt;/glade-interface&gt;</div></div>
<p>Faites attention à ce que la balise <strong>?xml</strong> soit bien sur la toute 1ière ligne du fichier sinon OCaml génèrera un avertissement et/ou une exception.</p>
<p>Le code source OCaml pour charger le XML et quitter quand l&rsquo;utilisateur clique sur le bouton : </p>
<pre>
let xml =
   Glade.create ~file:"hello.glade" ()
in let window = new GWindow.window
   (GtkWindow.Window.cast(Glade.get_widget xml "window1"))
in let button = new GButton.button
   (GtkButton.Button.cast(Glade.get_widget xml "yo")
in button#connect#clicked ~callback:
   (fun () -> print_endline "Bye"; window#destroy (); GMain.Main.quit ());
   window#show ();
   GMain.Main.main ()
</pre>
<p>La différence principale avec <strong>Gtk2Hs</strong>, hormis l&rsquo;absence de la <strong>do</strong>-notation, se situe au niveau du chargement et de la conversion.<br />
C&rsquo;est légèrement plus tortueux qu&rsquo;en Gtk2Hs, ça se fait en 3 étapes. C&rsquo;est dû à la couche orienté-objet de LablGtk.</p>
<ol>
<li> on charge le gadget à l&rsquo;aide de <em>Glade.get_widget</em>, on obtient un <em>Gtk.widget Gtk.obj</em></li>
<li> on converti ce <em>Gtk.widget Gtk.obj</em> en <em>Gtk.window Gtk.obj</em> à l&rsquo;aide de <em>GtkWindow.Window.cast</em> </li>
<li> ça ne s&rsquo;arrête pas là, il n&rsquo;est toujours pas possible d&rsquo;utiliser cette fenêtre avec les méthodes de LablGtk parce qu&rsquo;un <em>Gtk.window Gtk.obj</em> est une valeur mais pas un objet. il faut une deuxième conversion en un objet <em>GWindow.window</em>, en fait une instanciation réalisée par <strong>new GWindow.window</strong></li>
</ol>
<p>Voilà, ça n&rsquo;était pas sorcier mais comme il faut naviguer dans une doc hyper-texte touffue et avare en explication, la première fois c&rsquo;est toujours un peu déroutant.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hello LablGtk2 !</title>
		<link>https://blog.developpez.com/damien-guichard/p7741/programmation-fonctionnelle/hello_lablgtk2</link>
		<comments>https://blog.developpez.com/damien-guichard/p7741/programmation-fonctionnelle/hello_lablgtk2#comments</comments>
		<pubDate>Sun, 14 Jun 2009 18:36:16 +0000</pubDate>
		<dc:creator><![CDATA[SpiceGuid]]></dc:creator>
				<category><![CDATA[Logiciel Libre]]></category>
		<category><![CDATA[Objective Caml]]></category>
		<category><![CDATA[Programmation fonctionnelle]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[LablGtk2 est le binding GTK+ pour le langage Objective-Caml. Comme son cousin Gtk2Hs (pour Haskell) il permet aussi le chargement d&#8217;interfaces codées en XML généré à l&#8217;aide de l&#8217;outil Glade. J&#8217;espère avoir réalisé une copie conforme du Hello Developpez de Alp mais si ça n&#8217;est pas le cas ça n&#8217;est pas bien grave, l&#8217;esprit y est. Dans tous les cas voici ma capture d&#8217;écran : Comme je ne vois aucune raison de générer du XML [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://caml.inria.fr/" target="_blank"><img src="http://caml.inria.fr//pub/logos/caml-inria-fr.128x58.gif"/></a></p>
<p><a href="http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html" target="_blank">LablGtk2</a> est le binding GTK+ pour le langage <a href="http://caml.inria.fr/" target="_blank">Objective-Caml</a>.<br />
Comme son cousin <a href="http://blog.developpez.com/alp/p7737/programmation-fonctionnelle/hello-gtk2hs/#more7737" target="_blank">Gtk2Hs (pour Haskell)</a> il permet aussi le chargement d&rsquo;interfaces codées en XML généré à l&rsquo;aide de l&rsquo;outil Glade. </p>
<p>J&rsquo;espère avoir réalisé une copie conforme du <a href="http://blog.developpez.com/alp/p7737/programmation-fonctionnelle/hello-gtk2hs/#more7737" target="_blank">Hello Developpez de <strong>Alp</strong></a> mais si ça n&rsquo;est pas le cas ça n&rsquo;est pas bien grave, l&rsquo;esprit y est.</p>
<p><span id="more-10"></span></p>
<p>Dans tous les cas voici ma capture d&rsquo;écran :</p>
<p><img src="http://damien-guichard.developpez.com/illustrations/developpez_0077.jpg"/></p>
<p>Comme je ne vois aucune raison de générer du XML là où l&rsquo;on peut coder aussi bien en OCaml je vous donne la source en Objective-Caml pur et dur :</p>
<pre>
let window = GWindow.window
   ~title: "Hello, Developpez !" ()
in let button = GButton.button
   ~packing: window#add ~label:
   "Bonjour Developpez, comment vas-tu ?\n\n  \
    Je suis un programme OCaml qui utilise\n  \
    LablGtk2, le binding GTK+ pour OCaml.\n\n \
    Clique pour fermer."
   ()
in button#connect#clicked ~callback:
   (fun () -> print_endline "Bye"; window#destroy (); GMain.Main.quit ())
   window#show ();
   GMain.Main.main ()
</pre>
<p>Où les arguments optionnels (d&rsquo;où le nom <em>labl</em> pour label/étiquette) jouent le même rôle que les balises XML.<br />
Voici une explication un peu plus détaillée :</p>
<ul>
<li> le 1ier <strong>let</strong> créer la fenêtre (sans l&rsquo;ouvrir) </li>
<li> le 2nd <strong>let</strong> créer le bouton </li>
<li> la suite associe une action au bouton (écrire &laquo;&nbsp;Bye&nbsp;&raquo;, fermer la fenêtre, quitter GTK) </li>
<li> puis on affiche la fenêtre </li>
<li> finalement on passe la main à GTK </li>
</ul>
<p>En plus des composants GTK standards le binding supporte également les composants suivants :</p>
<ul>
<li> LibGlade et GdkPixbuf </li>
<li> le gadget GtkSourceView</li>
<li> le gadget GLArea </li>
</ul>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
