<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blogbangbang.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog Bang Bang - tout public</title>
  <link>http://blogbangbang.com/</link>
  <atom:link href="http://blogbangbang.com/feed/category/tout-public/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Wed, 24 Dec 2008 21:33:39 +0100</pubDate>
  <copyright>cc-by-sa</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>ActionView : Imprimeur de son état</title>
    <link>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat</link>
    <guid isPermaLink="false">urn:md5:7194a5b66f789ccf00710e3937f348c2</guid>
    <pubDate>Wed, 06 Aug 2008 00:37:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
3ème et dernière partie du Modèle M.V.C. dans Rails, la Vue.
&lt;/p&gt;
&lt;p&gt;
Comme vous l'avez compris dans la partie précédente, Ruby on Rails est capable de produire ou de servir
bien plus que des pages HTML et notamment du XML, du JSON, des images, du PDF... ...
&lt;br /&gt;
Toutefois, Rails a été particulièrement bien prévu pour la génération de HTML et en facilite grandement l'écriture...
&lt;/p&gt;    &lt;p&gt;
  Pour commencer sachez que le langage de templates inclus par défaut dans Rails se nomme &lt;strong&gt;erb&lt;/strong&gt;.
  &lt;br /&gt;
  D'autres existent (Builder, HAML... et ont leur intérêt, mais je m'attarderais ici seulement sur erb).
&lt;/p&gt;

&lt;p&gt;
  Celui-ci vous permet d'intégrer du code Ruby dans votre code HTML comme vous le faites avec les balises &amp;lt;? et ?&amp;gt; de PHP.
&lt;/p&gt;

&lt;p&gt;
  En Ruby deux types de balises existent : 
  &lt;ul&gt; 
    &lt;li&gt;Le code placé entre &amp;lt;% et %&amp;gt; sera interprété, mais pas affiché.&lt;/li&gt;
    &lt;li&gt;Le code placé entre &amp;lt;%= et %&amp;gt; sera interprété et affiché.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
  On écrira par exemple pour afficher les informations d'un étudiant (méthode show) 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
  &lt;h1&gt;Présentation&lt;/h1&gt;

  Prénom: &amp;lt;%= h @student.firstname %&amp;gt;&lt;br /&gt;
  Nom: &amp;lt;%= h @student.lastname %&amp;gt;&lt;br /&gt; 
   
  &amp;lt;% if @student.major? %&amp;gt;
    Age : &amp;lt;%= @student.age %&amp;gt;
  &amp;lt;% end %&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  &lt;code&gt;@student&lt;/code&gt; étant la variable passée par notre controller dans la méthode &lt;code&gt;show&lt;/code&gt; dans la partie ActionController de ce tutoriel.
&lt;/p&gt;

&lt;p class=&quot;info&quot;&gt;
  N.B. : Je n'ai pas écrit les méthodes major? et age dans mon modèle Student dans le tutoriel sur ActiveRecord mais l'intégralité de cette 
  mini-application (absolument pas fonctionnelle) est disponible sur &lt;a href=&quot;http://github.com/&quot; hreflang=&quot;en&quot;&gt;Github&lt;/a&gt; sur &lt;a href=&quot;http://github.com/jblanche/tutoriel_ruby_rails/tree/master&quot;&gt;mon dépot&lt;/a&gt;.
  &lt;br /&gt;
  Vous trouverez ce modèle &lt;a href=&quot;http://github.com/jblanche/tutoriel_ruby_rails/tree/master/app/models/student.rb&quot;&gt;ici&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  Vous vous souvenez que l'on avait également une méthode update, censée mettre à jour les données d'un utilisateur provenant d'un formulaire.
&lt;/p&gt;

&lt;p&gt;
  Écrivons ce formulaire : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
&amp;lt;% form_for @student do |s| %&amp;gt;

  &amp;lt;%= s.label :firstname, &amp;quot;Prénom&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;%= s.text_field :firstname %&amp;gt;&lt;br /&gt;
  
  &amp;lt;%= s.label :lastname, &amp;quot;Nom&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;%= s.text_field :lastname %&amp;gt;&lt;br /&gt;
  
  &amp;lt;%= s.label :date_of_birth, &amp;quot;Date de naissance&amp;quot; %&amp;gt;&lt;br /&gt;
  &amp;lt;%= s.date_select :date_of_birth %&amp;gt;&lt;br /&gt;
  
  &amp;lt;%= submit_tag &amp;quot;Enregistrer&amp;quot; %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  Pas mal non &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Oui ok un coup de CSS ne ferait pas de mal, mais là n'est pas le sujet&lt;/p&gt;

&lt;p&gt;
  En passant le @student à la méthode &lt;code&gt;form_for&lt;/code&gt;, 
  celle-ci sait que le formulaire va modifier l'utilisateur existant et grâce à l'utilisation REST, elle peut aisément générer la balise &lt;code&gt;form&lt;/code&gt;correspondante.
&lt;/p&gt;

&lt;p&gt;
De même, l'utilisation du &lt;code&gt;|s|&lt;/code&gt; permet d'appeler les méthodes de rails pour construire un formulaire ( &lt;code&gt;text_field&lt;/code&gt;, &lt;code&gt;date_select&lt;/code&gt;, &lt;code&gt;hidden_field&lt;/code&gt;...)
en les associant à notre étudiant et donc de générer le code du formulaire avec les propriété &lt;code&gt;name&lt;/code&gt; des &lt;code&gt;input&lt;/code&gt; correctement renseignées.
&lt;/p&gt;

&lt;p&gt;
Regardez plutôt le code généré : 
&lt;/p&gt;

&lt;pre class=&quot;pre_code&quot;&gt;
&amp;lt;form action=&amp;quot;/students/1-Jonathan_Blanchet&amp;quot; class=&amp;quot;edit_student&amp;quot; id=&amp;quot;edit_student_1&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
  &amp;lt;div style=&amp;quot;margin:0;padding:0&amp;quot;&amp;gt;
  &amp;lt;input name=&amp;quot;_method&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;put&amp;quot; /&amp;gt;
  &amp;lt;input name=&amp;quot;authenticity_token&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;c810f8897fcc7bab36a440cb4653b4f87de89d6e&amp;quot; /&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;label for=&amp;quot;student_firstname&amp;quot;&amp;gt;Prénom&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
  &amp;lt;input id=&amp;quot;student_firstname&amp;quot; name=&amp;quot;student[firstname]&amp;quot; size=&amp;quot;30&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;Jonathan&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;

  &amp;lt;label for=&amp;quot;student_lastname&amp;quot;&amp;gt;Nom&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
  &amp;lt;input id=&amp;quot;student_lastname&amp;quot; name=&amp;quot;student[lastname]&amp;quot; size=&amp;quot;30&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;Blanchet&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;
  ...
&amp;lt;/form&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  Les inputs &lt;code&gt;_method&lt;/code&gt; et &lt;code&gt;authenticity_token&lt;/code&gt; sont automatiquement renseignés par Rails.
&lt;/p&gt;

&lt;p&gt;
  Le premier informe Rails sur le type de requête a utiliser selon la méthode REST (ici PUT) en attendant que les navigateurs 
  implémentent les méthodes &lt;code&gt;PUT&lt;/code&gt; et &lt;code&gt;DELETE&lt;/code&gt; (seulement &lt;code&gt;GET&lt;/code&gt; ET &lt;code&gt;POST&lt;/code&gt; sont actuellement supportées).
&lt;/p&gt;

&lt;p&gt;
  Le deuxième sert à protéger le formulaire contre des ataques extérieures mais comme le premier, vous n'aurez jamais à vous en soucier
&lt;/p&gt;

&lt;p&gt;
  Pour le reste, vous noterez la forme &lt;code&gt;student[propriété]&lt;/code&gt; de tous les inputs qui nous permettra de récupérer un tableau student contenant tous les attributs de notre étudiant.
&lt;/p&gt;

&lt;p&gt;
  Vous noterez également que les propriétés &lt;code&gt;value&lt;/code&gt; ont été automatiquement proprement remplies.
&lt;/p&gt;

&lt;p&gt;
Voilà pour notre formulaire.
&lt;/p&gt;

&lt;img title=&quot;Formulaire généré, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/ActionView_updateForm.png&quot; /&gt;&lt;br /&gt;

&lt;p&gt;
  Vous vous souvenez surement que nos étudiants doivent avoir un nom et un prénom sous peine d'être &amp;quot;invalides&amp;quot; pour ActiveRecord.
&lt;/p&gt;

&lt;p&gt;
  Rajoutons en haut de notre page le code suivant : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
&amp;lt;%= error_messages_for 'student' %&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
  Si on essaye désormais de sauvegarder notre utilisateur sans nom, nous aurons droit à ceci :
&lt;/p&gt;

&lt;img title=&quot;Erreurs de validation, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/./.ActionView_errorsDisplay_m.jpg&quot; /&gt;&lt;br /&gt;

&lt;p&gt;Évidemment, tous ces messages sont personnalisables très facilement &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; &lt;/p&gt;

&lt;p&gt;
  Je ne vous parlerais pas ici d'AJAX car même si la facilité de mise en place de fonctionnalités AJAX avec Rails est souvent mise en avant dans les tutoriels,
  le code généré par Rails dans sa version actuelle n'est vraiment pas parfait et ne respecte pas le principe de séparation du contenu, de la présentation et du comportement (HTML - CSS - Javascript)
&lt;/p&gt;

&lt;p&gt;
  Pour les plus curieux, je vous invite à regarder du côté de &lt;a href=&quot;http://ujs4rails.com/&quot; hreflang=&quot;en&quot;&gt;UJS&lt;/a&gt; un plugin permettant d'écrire ce genre de choses : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
apply_behaviour '.list_item:click' do |page, element, event|
  element.replace_html &amp;quot;Deleted.&amp;quot; 
  event.stop
end
&lt;/pre&gt;

&lt;p&gt;
  Pour en savoir plus sur la notion de &lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_Enhancement&quot; hreflang=&quot;en&quot;&gt;Progressive Enhancement&lt;/a&gt; (utilisation propre du Javascript) 
  et sur les &lt;a href=&quot;http://alternateidea.com/event-selectors/&quot; hreflang=&quot;en&quot;&gt;CSS-based Selectors&lt;/a&gt;, je vous invite à lire &lt;a href=&quot;http://www.slideshare.net/matta/unobtrusive-javascript-sdrb-2007?src=embed&quot; hreflang=&quot;en&quot;&gt;cette excellente présentation&lt;/a&gt; (c'est court mais excellent) :
&lt;/p&gt;

&lt;p&gt;
  Voilà, c'est terminé pour la partie vue et plus largement, pour cette série d'articles.
&lt;/p&gt;

&lt;p&gt;
  J'espère vous avoir convaincu de l'intérêt de Ruby et de Ruby On Rails pour écrire vos applications Web.
&lt;/p&gt;

&lt;p&gt;
  Pour ma part, je m'étonne encore régulièrement de la facilité à écrire certaines choses en Ruby ! [private joke]Même une mamie Molette blonde pourrait le faire...[/private joke].
&lt;/p&gt;

&lt;p&gt;
  Je vous invite maintenant à me laisser en commentaire, toutes vos questions, réflexions, demandes sur cette série d'articles et/ou sur Ruby/Ruby On Rails en général.
  &lt;br /&gt;
  J'y répondrais avec plaisir et peut-être sous la forme d'une FAQ qui pourrait faire office de billet de clôture de cette série. 
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/91</wfw:commentRss>
      </item>
    
  <item>
    <title>ActionController : Monsieur Circulation</title>
    <link>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation</link>
    <guid isPermaLink="false">urn:md5:1fc0572cc9cd4717ecf5213e6cbd8326</guid>
    <pubDate>Wed, 30 Jul 2008 23:10:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Dans Rails, ActionController fait la circulation, il va à chaque requête, appeler les modèles nécessaires pour récupérer les données, puis appeler la méthode render pour afficher une vue, un XML... et vous renvoyer le tout.
&lt;/p&gt;
&lt;p&gt;
La politique Rails veut que les controllers soient légers.
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
&amp;quot;Skinny Controller, Fat Model&amp;quot;&lt;br /&gt;
&lt;cite&gt;Jamis Buck, 37signals employee&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Et ça tombe bien Rails fourni tout ce qu'il faut pour vous simplifier la vie...
&lt;/p&gt;    &lt;p&gt;
  Imaginez par exemple que vous vouliez une interface de gestion de nos étudiants précédemment crées.
  &lt;br /&gt;
  Si nos souhaits se limitent à l'ajout, modification, suppression, le scaffold de Rails ferait l'affaire,
  mais on va ici partir &amp;quot;from scratch&amp;quot; pour vous montrer à quel point tout ceci est aisé.
&lt;/p&gt;

&lt;p&gt;
  On créera alors un Controller StudentsController 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
script/generate controller Students 
&lt;/pre&gt;

&lt;p&gt;
Rails2.1 permet de faire très facilement des controllers dit &amp;quot;Restful&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
  Si vous ne savez pas ce dont il s'agit je vous invite à lire l'excellente traduction de Biologeek d'un article de Softies on Rails :
  &lt;br /&gt;
  &lt;a href=&quot;http://www.biologeek.com/rest,traduction,web-semantique/pour-ne-plus-etre-en-rest-comprendre-cette-architecture/&quot;&gt;Pour ne plus être en REST, comprendre cette architecture&lt;/a&gt;
  &lt;br /&gt;
  et/ou celle-ci de pompage.net :
  &lt;br /&gt;
  &lt;a href=&quot;http://www.pompage.net/pompe/comment-j-ai-explique-rest-a-ma-femme/&quot;&gt;Comment j'ai expliqué REST à ma femme&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Si vous avez lu et compris, vous aurez retenu qu'avec REST on utilise tous les verbes du protocole HTTP et qu'on parle de ressources plutôt que de pages web ou d'images... 
&lt;/p&gt;
&lt;p&gt;
Les ressources, dans notre cas, ce sont des étudiants et voici quelques URLs qui vont nous intéresser 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
GET    /students                        :action=&amp;gt;&amp;quot;index&amp;quot;
POST   /students                        :action=&amp;gt;&amp;quot;create&amp;quot;
GET    /students/new                    :action=&amp;gt;&amp;quot;new&amp;quot;
GET    /students/:id/edit               :action=&amp;gt;&amp;quot;edit&amp;quot;
GET    /students/:id                    :action=&amp;gt;&amp;quot;show&amp;quot;
PUT    /students/:id                    :action=&amp;gt;&amp;quot;update&amp;quot;
DELETE /students/:id                    :action=&amp;gt;&amp;quot;destroy&amp;quot;
&lt;/pre&gt;

&lt;p&gt;
  Vous aurez compris que pour afficher un utilisateur on fera /students/:id, 
  mais et c'est là où REST intervient, on utilisera la même adresse pour le supprimer et le modifier.
&lt;/p&gt;
&lt;p&gt;
  En effet une ressource = une URI, donc un utilisateur =&amp;gt; &amp;quot;/students/:id&amp;quot;
&lt;/p&gt;

&lt;p&gt;
  Par contre, le type de requête HTTP, respectivement GET, DELETE ET PUT nous informera sur ce que l'on souhaite faire.
&lt;/p&gt;

&lt;p&gt;
  Avec Rails, les actions appelées sont les méthodes publiques des controllers, écrivons donc la méthode qui va afficher un utilisateur 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
def show
  @student = Student.find(params[:id])
end
&lt;/pre&gt;

&lt;p&gt;
  &lt;strong&gt;Et voilà...&lt;/strong&gt;
  &lt;br /&gt;
  Quoi c'est tout :D
&lt;/p&gt;
&lt;p&gt;
Oui, pour l'instant cela peut suffire, en effet Rails a récupéré notre ressource (l'utilisateur désiré) grâce au find et par défaut, il va appeler la méthode render avec la vue correspondante (show) dans le dossier des vues.
&lt;/p&gt;

&lt;p&gt;
  Cette dernière aura accès aux variables d'instance de notre classe et donc à l'objet @student et toutes ses propriétés.
&lt;/p&gt;

&lt;p&gt;
  Essayons maintenant d'écrire la méthode nécessaire à la modification (update) d'un utilisateur.
&lt;/p&gt;

&lt;pre&gt;[Ruby]
def update
  @student = Student.find(params[:id])
  @student.update_attributes(params[:student])
  redirect_to @student
end
&lt;/pre&gt;

&lt;p&gt;  
  Dans la première ligne, je récupère l'étudiant à créer.
  &lt;br /&gt;
  Dans la seconde j'update ses attributs (donc propriétés) avec les paramètres passés par le formulaire.
  &lt;br /&gt;
  Dans la dernière je redirige l'utilisateur vers le student modifié (cela appellera la méthode show précédemment créée)
&lt;/p&gt;

&lt;p&gt;
  En réalité il faudrait gérer le fait que la sauvegarde se soit ou non bien passée, cela donnerait donc : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
def update
  @student = Student.find(params[:id])
    if @student.update_attributes(params[:student])
      redirect_to(@student)
    else
      render :action =&amp;gt; &amp;quot;edit&amp;quot;
    end
end
&lt;/pre&gt;

&lt;p&gt;
  C'est presque la même chose sauf que si la sauvegarde n'a pas fonctionné, on revient sur la page d'édition.
&lt;/p&gt;

&lt;p&gt;
  Voilà pour la version HTML, mais si vous avez compris REST, vous savez que l'on aimerait pouvoir 
  avoir d'autre représentation de notre ressource qu'une page web ! 
  &lt;br /&gt;
  Pourquoi pas par exemple,  une représentation XML que l'on pourrait passer à un webservice distant ou je ne sais quel autre usage.
&lt;/p&gt;

&lt;p&gt;
Ré-écrivons notre méthode show dans ce but 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
def show
  @student = Student.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml =&amp;gt; @student }
  end
end
&lt;/pre&gt;

&lt;p&gt;
  Et voilà, notre controller répondra désormais à la demande générée.
  &lt;br /&gt;
  Si vous lui demandez du HTML, celui là réagira comme précédemment, si vous le voulez en XML, il exécutera la ligne : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
format.xml  { render :xml =&amp;gt; @student }
&lt;/pre&gt;  

&lt;p&gt;
  et renverra donc notre objet student converti en XML.
&lt;/p&gt;

&lt;p&gt;
Vous voulez discuter avec une application Flash/Flex/AIR..., installez &lt;a href=&quot;http://www.rubyamf.org/&quot; hreflang=&quot;en&quot;&gt;RubyAMF&lt;/a&gt; 
(l'équivalent Ruby de &lt;a href=&quot;http://www.amfphp.org/&quot; hreflang=&quot;en&quot;&gt;AMFPHP&lt;/a&gt;) et il vous suffira de rajouter : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
format.amf { render :amf =&amp;gt; @student } 
&lt;/pre&gt;

&lt;p&gt;
  Et voilà vous avez côté ActionScript votre objet tout chaud sans nécessité de désérialisation.
  &lt;br /&gt;
  Et vous n'avez presque rien eu à faire côté Rails et finalement, c'est normal, la logique et la ressource sont les mêmes, seul le rendu change ! 
&lt;/p&gt;

&lt;p&gt;
  Comme vous pouvez le voir, ActionController se débrouille donc très bien pour faire la circulation entre la vue et les modèles. 
&lt;/p&gt;


&lt;img src=&quot;http://blogbangbang.com/public/./.carrefour_m.jpg&quot; alt=&quot;carrefour&quot; style=&quot;margin: 0 auto; display: block;&quot; title=&quot;Spaghetti Junction, Chris Gin&quot; /&gt;

&lt;p&gt;
  Une des rares autres tâches qui incombe au controller est le contrôle des accès, 
  si vous souhaitez vérifier que l'utilisateur connecté peut accéder à telle ou telle ressource, c'est à lui de s'en charger.
&lt;/p&gt;

&lt;p&gt;
  Imaginons dans notre exemple, que les étudiants puissent consulter les informations les concernant, 
  mais que seul l'intendance puisse les éditer, ajouter, supprimer.
&lt;/p&gt;

&lt;p&gt;
  Ajoutons à notre controller la ligne suivante : 
&lt;/p&gt;

&lt;pre&gt;[Ruby]
  before_filter :authenticate , :exept =&amp;gt; [:index, :show]
&lt;/pre&gt;

&lt;p&gt;
  Cela signifie qu'avant toutes les méthodes sauf index et show,
  on exécutera la méthode authenticate et que l'on ne fera la suite que si cette méthode renvoi &lt;code&gt;true&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
On peut donc rajouter à la fin de notre controller la méthode authenticate :
&lt;/p&gt;

&lt;pre&gt;[Ruby]
private

def authenticate
  authenticate_or_request_with_http_basic do |username, password|
    username == &amp;quot;foo&amp;quot; &amp;amp;&amp;amp; password == &amp;quot;bar&amp;quot;
  end
end
&lt;/pre&gt;

&lt;p&gt;
  On notera que la méthode a été placée après le mot clé private afin de signifier 
  que celle-ci n'est pas une action exécutable par le navigateur.
&lt;/p&gt;

&lt;p&gt;
  Notre action va ouvrir une boite de dialogue (si l'utilisateur n'est pas encore authentifier)
  nous demandant notre login et mot de passe et renverra true si et seulement si ceux-ci sont &amp;quot;foo&amp;quot; et &amp;quot;bar&amp;quot;
  &lt;br /&gt;
  N.B. : Evidement, en réalité, cette vérification s'effectuerait en base de donnée &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
  Et voilà, désormais seul les personnes connaissant les logins et mot de passe ont accès à l'intégralité de l'application. 
&lt;/p&gt;

&lt;p&gt;
Ce sera tout pour ce soir, nous avons désormais vu &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;comment écrire&lt;/a&gt; &lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;du Ruby&lt;/a&gt;, puis, comment fonctionnent les parties &lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;Model&lt;/a&gt; et Controller de Rails.
&lt;/p&gt;

&lt;p&gt;
  Il ne nous reste donc plus qu'une partie à aborder : les vues. 
  &lt;br /&gt;
  A bientôt pour ce dernier chapitre. 
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/89</wfw:commentRss>
      </item>
    
  <item>
    <title>ActiveRecord : Vos données, c'est mon dada.</title>
    <link>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada</link>
    <guid isPermaLink="false">urn:md5:95127ed41e1bfcfd8b64485c06e3940a</guid>
    <pubDate>Fri, 25 Jul 2008 22:24:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Nous allons donc commencer par le M du M.V.C., le modèle :
&lt;br /&gt;
ActiveRecord c'est le gestionnaire de vos données et donc la plupart du temps, de votre Base de données dans Rails
&lt;br /&gt;
Ça tombe bien, la partie Base de données est surement la plus magique de Rails...
&lt;/p&gt;    &lt;p&gt;
Question à 100 piasses : Qui aime écrire du SQL ?
&lt;br /&gt;
Ceux qui ont répondu OUI peuvent s'en aller :D
&lt;/p&gt;
&lt;p&gt;
En effet que ce soit à la création ou au traitement de vos données, vous n'écrirez pratiquement jamais de SQL avec Rails.
&lt;br /&gt;
Mais alors comment on les crée nos bases ?
&lt;/p&gt;
&lt;p&gt;
La réponse de Rails s'appelle les migrations.
&lt;br /&gt;
Quand vous voulez créer une nouvelle table, vous créez (ou faite faire à Rails) une nouvelle migration, celle-ci comporte deux méthodes &amp;quot;up&amp;quot; et &amp;quot;down&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
De cette manière, il sera aisé pour Rails de revenir en arrière si finalement votre implémentation de la base ne vous plait pas.
&lt;/p&gt;
&lt;p&gt;
La création de ce modèle s'écrira : (à exécuter en console ou dans l'interface de votre IDE)
&lt;/p&gt;
&lt;pre&gt;[Ruby]
script/generate model Student firstname:string lastname:string date_of_birth:date section:string promotion_id:integer
&lt;/pre&gt;
&lt;p&gt;
On précise que l'on veut créer un modèle, on donne ensuite son nom, puis les colonnes de la base de données avec leur types.
&lt;/p&gt;
&lt;p&gt;
En exécutant ceci, vous créer tous les fichiers de votre modèle dont une migration ressemblant à ceci, dans le up, on crée notre table, dans le down on la supprime.
&lt;/p&gt;
&lt;pre&gt;[Ruby]
class AddStudents &amp;lt; ActiveRecord::Migration
    def self.up
      create_table :students do |t|
        t.string        :firstname
        t.string        :lastname
        t.date          :date_of_birth
        t.string        :section 
        #S pour Scientifique, L pour Littéraire, ES pour Economique et Social
        t.integer       :promotion_id  
        t.timestamps
      end
    end

    def self.down
      drop_table :students
    end
  end
&lt;/pre&gt;
&lt;p&gt;
Plutôt simple n'est-ce pas ? Et avec ça Rails s'adaptera à votre base de données, qu'elle soit Mysql, Postgresql, Oracle, SQLite...
&lt;/p&gt;
&lt;p&gt;
Et si demain vous changez Mysql pour Postgres, il suffira de faire un petit
&lt;/p&gt;
&lt;pre&gt;[Ruby]rake db:migrate&lt;/pre&gt;
&lt;p&gt;
pour récréer toutes vos tables (En réalité, Ruby éxécutera à la suite toutes les méthodes up de vos migrations).
&lt;/p&gt;
&lt;p&gt;
Vous aurez surement remarqué le promotion_id, on supposera dans ce tutorial que l'on a ailleurs une table Promotion avec notamment l'année de la promo et que ce champ servira à faire le lien
entre un étudiant et sa promotion.
&lt;/p&gt;
&lt;p&gt;
Ok, mais cette liaison elle est définie où ? On a pas écrit les contraintes dans notre SQL là ?
&lt;br /&gt;
Oui c'est vrai, allons donc modifier nos modèles pour changer ça.
Et puisque nous y somme, nous indiquerons qu'un étudiant doit forcément avoir un nom et un prénom (lignes not null en quelque sorte)
&lt;/p&gt;
&lt;pre&gt;[Ruby]
class Promotion &amp;lt; ActiveRecord::Base
    has_many :students
end
&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;[Ruby]
class Student &amp;lt; ActiveRecord::Base
    belongs_to :promotion
    validates_presence_of :firstname
    validates_presence_of :lastname
  end
&lt;/pre&gt;
&lt;p&gt;
Difficile de faire plus clair non ?
&lt;/p&gt;
&lt;p&gt;
Oui mais dans le code après comment ça se passe ?
&lt;/p&gt;
&lt;p&gt;
Imaginez que vous souhaitiez récupérer tous les étudiants (en gros un &lt;code&gt;SELECT * FROM students&lt;/code&gt;)
&lt;br /&gt;
vous ferez simplement
&lt;/p&gt;
&lt;pre&gt;[Ruby]Student.all &lt;/pre&gt;
&lt;p&gt;
Si vous voulez récupérer la ligne correspondant à la promotion de 2006 :
&lt;/p&gt;
&lt;pre&gt;[Ruby]promo_2006 = Promotion.find_by_year(2006)&lt;/pre&gt;
&lt;p&gt;
Les étudiants de cette promo :
&lt;/p&gt;
&lt;pre&gt;[Ruby]promo_2006.students&lt;/pre&gt;
&lt;p&gt;
Allez compliquons un peu, il n'y a pas de &lt;code&gt;where&lt;/code&gt;, pas de conditions dans nos requête actuelles, ajoutons les :
&lt;/p&gt;
&lt;p&gt;
Disons que l'on ne veut récupérer que les étudiants Scientifiques.
&lt;br /&gt;
Ajoutons à notre modèle la ligne suivante :
&lt;/p&gt;
&lt;pre&gt;[Ruby]named_scope :scientists, :conditions =&amp;gt; {:section =&amp;gt; &amp;quot;S&amp;quot;}&lt;/pre&gt;
&lt;p&gt;
En francais : on nommera &amp;quot;scientists&amp;quot; les étudiants ayant comme section &amp;quot;S&amp;quot;
&lt;br /&gt;
On peut désormais écrire
&lt;/p&gt;
&lt;pre&gt;[Ruby]Student.scientists &lt;/pre&gt;
&lt;p&gt;
pour récupérer tous les étudiants scientifiques
&lt;/p&gt;
&lt;p&gt;
Ces &lt;code&gt;named_scope&lt;/code&gt; sont géniaux, ajoutons-en deux pour trouver les étudiant majeurs et mineurs.
&lt;/p&gt;
&lt;pre&gt;[Ruby]
named_scope :majors, :conditions =&amp;gt; ['date_of_birth &amp;lt; ?', 18.years.ago]
named_scope :minors, :conditions =&amp;gt; ['date_of_birth &amp;gt; ?', 18.years.ago]
&lt;/pre&gt;
&lt;p&gt;
On peut maintenant faire dans tous nos Controllers :
&lt;/p&gt;
&lt;pre&gt;
[Ruby]Student.majors
&lt;/pre&gt;
&lt;p&gt;
Pour récupérer les étudiants majeurs.
&lt;/p&gt;
&lt;p&gt;
Et si l'on veut, dans la promo 2006, les étudiants à la fois majeurs et scientifiques :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
promo_2006.students.majors.scientists
&lt;/pre&gt;
&lt;p&gt;
Et le tour est joué !
&lt;br /&gt;
Incroyable non ? (qui me l'écrit en SQL avec la jointure et tout et tout ?)
&lt;/p&gt;
&lt;p&gt;
C'est le moment de citer DHH  :
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Beautiful code makes happy programmers.&lt;br /&gt;
&lt;cite&gt;David Heinemeier Hansson, Créateur de Rails&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Voilà pour les requêtes, pour créer un enregistrement, c'est tout aussi simple :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
jb = Student.create(:firstname =&amp;gt; &amp;quot;Jonathan&amp;quot;, :lastname =&amp;gt; &amp;quot;Blanchet&amp;quot;)
&lt;/pre&gt;
&lt;p&gt;
La création précédente fonctionnera puisqu'elle remplie bien les conditions décrites précédemment (un étudiant à forcément un nom et un prénom).
&lt;/p&gt;
&lt;p&gt;
Allez un dernier exemple pour la route, imaginez que la personne utilisant cette application souhaite,
dans l'interface de création des utilisateurs, pouvoir les lier à une promotion en tapant simplement l'année de celle-ci.
&lt;/p&gt;
&lt;p&gt;
Côté modèle, cela veut dire qu'il va falloir trouver la promotion si elle existe, la crée sinon.
&lt;/p&gt;
&lt;p&gt;
Une fois traduit en Rails cela donne :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
Promotion.find_or_create_by_year(params[:year]) 
&lt;/pre&gt;
&lt;p&gt;
Simple non &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Allez je vous attend pour la suite, on verra le rôle du Controller.
&lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
ActiveRecord : Vos données, c'est mon dada.&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/87</wfw:commentRss>
      </item>
    
  <item>
    <title>Rails, la locomotive de Ruby !</title>
    <link>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby</link>
    <guid isPermaLink="false">urn:md5:3767570209b7ca63d0e55f91a11e7c04</guid>
    <pubDate>Fri, 25 Jul 2008 22:20:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
On a vu dans les deux &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;articles&lt;/a&gt; &lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;précédents&lt;/a&gt; les rudiments de la syntaxe Ruby.
&lt;br /&gt;
Normalement, vous êtes déjà séduit par ces débuts, mais vous n'avez encore rien vu !
&lt;br /&gt;
Alors ? Ce Ruby on Rails, qu'est ce donc ?
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Rails is the killer app for Ruby.&lt;br /&gt;
&lt;cite&gt;Yukihiro Matsumoto, Createur de Ruby&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;    &lt;p&gt;
Ruby on Rails, ou Rails, en fait, est un framework dédié au développement d'application Web.
&lt;br /&gt;
Un framework, c'est selon Wikipedia, un ensemble de bibliothèques, d'outils et de conventions permettant le développement d'applications.
&lt;br /&gt;
Ceux-ci permettent donc de donner un socle commun à toutes vos applications et en facilite du même coup le développement et la maintenance.
&lt;/p&gt;
&lt;p&gt;
Rails a été à l'origine développé pour les besoins de la société américaine 37signals qui devant le succès et l'engouement remporté par l'application au sein de son activité, a décidé d'en extraire un framework qu'elle &amp;quot;donnerait&amp;quot; à la communauté du logiciel libre.
&lt;/p&gt;
&lt;p&gt;
Rails suit les principes déjà énoncés dans les articles sur Ruby et y ajoute deux grandes règles :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La convention plutôt que la configuration&lt;/strong&gt;&lt;br /&gt;
Le principal défaut des frameworks Java était souvent leur configuration au travers de 18 fichiers XML tous plus flous les uns que les autres !
Avec Rails, c'est tout l'inverse : votre table s'appelle Students, votre modèle s'appellera Student...
C'est également pour cette raison que Rails vient avec une architecture de fichiers et de dossiers bien précise, l'application ira dans app, les tests dans test...
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DRY ou Don't Repeat Yourself&lt;/strong&gt;&lt;br /&gt;
Le code doit être écrit de façon à éviter toute redondance qui compliquerait les phases de maintenances, de test, de debuggage...
Les modifications doivent se faire à un endroit et n'impacter que les objets concernés.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
En plus de ces deux règles, Rails comme la majorité des frameworks dédié au Web s'articule autour du modèle MVC ou Modèle-Vue-Controller.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les modèles sont les classes assurent la gestion des données, ils sont habituellement liés à la base de données.&lt;/li&gt;
&lt;li&gt;Les vues déterminent comment sont affichées les informations à l'utilisateur. Il s'agit généralement d'une combinaison de code HTML et de Ruby.&lt;/li&gt;
&lt;li&gt;Les contrôleurs réagissent aux requêtes utilisateur et répondent d'ordinaire à l'aide des vues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Pour faire simple, voici le chemin d'une requête web avec Rails : &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;requete_rails.png, juil 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/./.testSchema_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vous appelez une page, celle-ci correspond à une méthode, dans un controller.&lt;/li&gt;
&lt;li&gt;Celui-ci appelle un ou plusieurs modèles pour récupérer les informations nécessaires pour vous répondre.&lt;/li&gt;
&lt;li&gt;Il envoie ces données données à la vue qui va interpréter et renvoyer le code HTML (ou autre) désiré.&lt;/li&gt;
&lt;li&gt;La réponse vous est envoyée. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
On trouve partout sur internet, des tutoriels vous expliquant comment construire un blog fonctionnel en 10mn, un site en une demi-heure et Youtube en 2 jours &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;br /&gt;
Ces tutoriels, mêmes s'ils incitent souvent les débutants à essayer Ruby et Rails, restent trop basique et trop axé sur un exemple particulier pour vraiment montrer les avantages de Rails.
&lt;br /&gt;
Je vais donc pour ma part vous parler de chaque grande partie de Rails (selon le MVC) en vous montrant ce qui selon moi, fait la différence entre Rails et le reste du monde &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
On commence tout de suite avec celui qui va gérer vos données, le modèle de Rails, nommé ActiveRecord, &lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;suivez-moi...
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
Rails, la locomotive de Ruby !&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/86</wfw:commentRss>
      </item>
    
  <item>
    <title>Un peu de syntaxe Ruby...</title>
    <link>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby</link>
    <guid isPermaLink="false">urn:md5:b321fcff2130283e52e18ff69d7bb514</guid>
    <pubDate>Sat, 19 Jul 2008 22:05:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Vous avez apprécier &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;l'article précédent&lt;/a&gt; ?
&lt;br /&gt;
Alors, essayons d'écrire un peu plus de Ruby...
&lt;/p&gt;
&lt;p class=&quot;info&quot;&gt;
Pour commencer, si vous souhaitez tester ces exemples sur votre poste je vous invite à installer Ruby sur votre machine.&lt;br /&gt;
Pour les autres, vous pouvez tester &lt;a href=&quot;http://tryruby.hobix.com/&quot; hreflang=&quot;en&quot;&gt;en ligne&lt;/a&gt; ou vous contenter de lire :).
&lt;br /&gt;&lt;br /&gt;
Pour l'installation, les Linuxiens se débrouillerons avec leur gestionnaire de paquets pour installer les paquets ruby irb et rdoc.&lt;br /&gt;
&lt;br /&gt;
Pour les utilisateurs de Windows, je vous invite à utiliser le &lt;a href=&quot;http://Rubyforge.org/frs/?group_id=167&quot; hreflang=&quot;en&quot;&gt;one-click install&lt;/a&gt; qui vous donnera
tout ce qu'il faut pour commencer.
&lt;/p&gt;    &lt;p&gt;
Comme je le disais dans le précédent article, la syntaxe de Ruby peut étonner au premier abord, mais sa lisibilité en est fortement améliorée.
Regardons ces quelques lignes tirées ou inspirés du fameux &amp;quot;&lt;a href=&quot;http://poignantguide.net/ruby/&quot; hreflang=&quot;en&quot;&gt;Why's (poignant) guide to Ruby&lt;/a&gt;&amp;quot; et de
&lt;a href=&quot;http://www.softiesonrails.com/&quot; hreflang=&quot;en&quot;&gt;Softiesonrails&lt;/a&gt; pour s'en convaincre.
&lt;/p&gt;
&lt;pre&gt;[Ruby]5.times { print &amp;quot;Hello!&amp;quot; }&lt;/pre&gt;
&lt;p&gt;
Essayons de lire ce bout de code en anglais, &lt;strong&gt;Five times print Hello&lt;/strong&gt;, je vous laisse deviner ce qu'il fait &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Un autre exemple :
&lt;/p&gt;
&lt;pre&gt;[Ruby]exit unless &amp;quot;restaurant&amp;quot;.include? &amp;quot;aura&amp;quot;&lt;/pre&gt;
&lt;p&gt;
En anglais lu : &lt;strong&gt;Exit unless restaurant includes aura&lt;/strong&gt;
&lt;br /&gt;
Avec cette ligne, notre programme va se terminer (exit) sauf si (unless) le mot &amp;quot;restaurant&amp;quot; contient (include?) le mot &amp;quot;aura&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
On retiendra de cette ligne le &lt;code&gt; unless &lt;/code&gt;, assez rare dans les autres langages qui est en
fait l'inverse du &lt;code&gt;if&lt;/code&gt; ainsi que l'utilisation très judicieuse du point d'interrogation dans le nom
de méthode include? pour signifier une question, un test (est-ce que &amp;quot;restaurant&amp;quot; contient &amp;quot;aura&amp;quot; &lt;strong&gt;?&lt;/strong&gt;.
&lt;br /&gt;
Vous aurez déduis que les méthodes ce terminant par un point d'interrogation retourneront normalement &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Allez écrivons maintenant une petite méthode (ou fonction si vous préférez, mais normalement en Programmation Orientée Objet on dit méthode).
&lt;/p&gt;
&lt;p&gt;
Imaginez un appareil photo, écrivons la méthode qui prend une photo.
&lt;br /&gt;
Celle-ci vérifiera si l'appareil est allumé et s'il reste de la place sur la carte mémoire.
&lt;/p&gt;
&lt;pre&gt;[Ruby]
def capture_clicked
  capture_image if @camera.on? &amp;amp;&amp;amp; @camera.memory_available? 
end
&lt;/pre&gt;
&lt;p&gt;
Comme vous pouvez le constater, une méthode Ruby s'écrit avec &lt;code&gt;def&lt;/code&gt; et &lt;code&gt;end&lt;/code&gt;.
&lt;br /&gt;
Pour le reste c'est encore une fois plutôt standard, vous remarquerez toutefois qu'en Ruby, on peut écrire la clause &lt;code&gt;if&lt;/code&gt; à la fin de l'instruction ce qui améliore la lisibilité.
&lt;br /&gt;
En effet, ce que l'on veut faire dans notre cas (99% du temps) c'est &lt;strong&gt;capture_screen&lt;/strong&gt;,
il est donc logique de le voir tout dès le début de la méthode et pas encadré par un &lt;code&gt;if&lt;/code&gt; comme ce serait le cas dans beaucoup d'autres langages.
&lt;/p&gt;
&lt;p&gt;
Imaginons maintenant qu'on vous demande une méthode qui prendrai des photos en mode rafale tant qu'il y a de place, vous écrieriez alors simplement :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
def rafale
  capture_image while @camera.memory_available?
end
&lt;/pre&gt;
&lt;p&gt;
Allez un dernier exemple pour la route, écrivons une petite classe Etudiant.
&lt;br /&gt;
Celui-ci aura un nom, un prénom et un âge.
&lt;br /&gt;
on a déjà tous écrit un truc du style avec une classe avec trois propriétés et leurs &amp;quot;getters&amp;quot;.
&lt;/p&gt;
&lt;pre&gt;[PHP]&lt;br /&gt;class Etudiant
{
    private $prenom;
    private $nom;
    private $age;

    function Etudiant(prenom, nom, age)
    {
        $this-&amp;gt;prenom = prenom;
        $this-&amp;gt;nom = nom;
        $this-&amp;gt;age = age;
    }

    function prenom()
    {
        return $this-&amp;gt;prenom;
    }
    function nom()
    {
        return $this-&amp;gt;nom;
    }

    function age()
    {
        return $this-&amp;gt;age;
    }   
}&lt;/pre&gt;
&lt;p&gt;
C'est moche n'est-ce pas !
&lt;br /&gt;
Et bien en Ruby cela nous donne :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
class Etudiant

  attr_reader :prenom, :nom, :age

  def initialize(prenom, nom, age)
    @prenom, @nom, @age = prenom, nom, age
  end

end&lt;/pre&gt;
&lt;p&gt;
Alors, vous voyez bien que le mot sexy n'était pas exagéré pour décrire la syntaxe de Ruby &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Pour information, si l'on veut aussi les &amp;quot;setters&amp;quot;, en PHP ce sera trois nouvelles fonctions en Ruby on remplacera juste :
&lt;/p&gt;
&lt;pre&gt;[Ruby]attr_reader :prenom, :nom, :age&lt;/pre&gt;
&lt;p&gt;
par
&lt;/p&gt;
&lt;pre&gt;[Ruby]attr_accessor :prenom, :nom, :age&lt;/pre&gt;
&lt;p&gt;
et si l'on veut mettre un peu de logique dans le getter, pour récupérer le prénom avec une majuscule au début, il suffira de l'écrire à la main
&lt;/p&gt;
&lt;pre&gt;[Ruby]
def prenom
  @prenom.capitalize
end
&lt;/pre&gt;
&lt;p&gt;
Vous vous demandez quand même surement ce que sont ces &lt;code&gt;@&lt;/code&gt; que l'on peut voir devant certaines variables.
&lt;br /&gt;
Ce signe sert à distinguer les variables d'instances (les attributs d'un objet) des variables locales (à une méthode ou autre).
&lt;br /&gt;
Il existe également des variables notées &lt;code&gt;@@ma_variable&lt;/code&gt;, celles-ci sont des variables de classes, elles sont donc attachées à la classe et non à son instance.
&lt;/p&gt;
&lt;p&gt;
Regardez ce petit exemple pour mieux comprendre :
&lt;/p&gt;
&lt;pre&gt;[Ruby]
class Voiture
  @@nom = &amp;quot;Renault Clio&amp;quot;

  attr_accessor :nom

  def initialize(nom)
    @nom = nom
  end

  def nom
    @nom.capitalize
  end

  def se_presente
    puts &amp;quot;Je suis une &amp;quot;+@@nom+&amp;quot; surnomée &amp;quot;+nom
  end
end
&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;[Ruby]
ma_voiture = Voiture.new(&amp;quot;titine&amp;quot;)
ma_voiture.se_presente
&lt;/pre&gt;
&lt;p&gt;
Cet exemple va afficher &lt;br /&gt;
&lt;strong&gt;Je suis une Renault Clio surnommée Titine.&lt;/strong&gt; &lt;br /&gt;
Vous remarquerez au passage que je peux appeler les méthodes sans les parenthèses,
celles-ci sont optionnelles et les conventions veulent qu'on ne les écrive pas quand il n'y a pas de paramètres.
&lt;/p&gt;
&lt;p&gt;
Pour résumer pour les habitués à PHP :
&lt;br /&gt;
&lt;code&gt;nom&lt;/code&gt; équivaut à &lt;code&gt;$nom&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@nom&lt;/code&gt; équivaut à &lt;code&gt;$this-&amp;gt;nom&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@@nom&lt;/code&gt; équivaut à &lt;code&gt;self::$nom&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Alors, c'est qui qui a la plus &lt;del&gt;grosse&lt;/del&gt; belle syntaxe ?
&lt;br /&gt;
Voilà pour ce soir, j'espère que vous avez encore appris plein de belles choses sur Ruby
[troll]et je m'excuse d'avance pour les larmes versées lors de votre prochaine tentative de codage en PHP, ActionScript, Cobol ou Fortran :D [/troll] &lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
Un peu de syntaxe Ruby...&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/85</wfw:commentRss>
      </item>
    
  <item>
    <title>Ruby, c'est quoi comme langage ?</title>
    <link>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage</link>
    <guid isPermaLink="false">urn:md5:225d4351f86913d3c41775127618029e</guid>
    <pubDate>Tue, 15 Jul 2008 22:35:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Let's go...
&lt;/p&gt;
&lt;p&gt;
Dans Ruby on Rails, il y a avant tout Ruby !
&lt;/p&gt;
&lt;p&gt;
Ruby c'est un langage informatique, au même titre que PHP, Python, Java, C, C++, l'ActionScript...
&lt;/p&gt;
&lt;p&gt;
Parmis tous ces langages, trois familles existent, les langages compilés, les langages interprétés et les langages intermédiaires.
&lt;br /&gt;
Pour information voici comment se répartissent certains langages que vous connaissez surement :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Langages compilés : C, C++...&lt;/li&gt;
&lt;li&gt;Langages interprétés : PHP, PERL...&lt;/li&gt;
&lt;li&gt;Langages intermédiaires : Java, ActionScript...&lt;/li&gt;
&lt;/ul&gt;    &lt;p&gt;
Pour en savoir plus sur les différences entre ces trois familles de langages, je vous invite à lire &lt;a href=&quot;http://www.commentcamarche.net/langages/langages.php3#interprete&quot;&gt;l'explication de commentcamarche.net&lt;/a&gt; dont la vulgarisation est excellente (je m'étais lancé dans une explication, mais faire clair, simple et concis à ce sujet est vraiment compliqué).
Puisque que c'est de lui qu'il s'agit, Ruby est un langage interprété, donc de la même famille que PHP, c'est d'ailleurs lui que j'utiliserais dans les comparaisons à venir puisqu'il est surement le langage interpreté le plus connu (au moins des lecteurs de ce blog).
&lt;/p&gt;
&lt;p&gt;
D'ailleurs contrairement à la croyance qui veut que Ruby soit un truc tout nouveau qui tombera bientôt à l'eau, Ruby est en fait aussi &amp;quot;vieux&amp;quot; que PHP, leur première publication ayant toutes les deux eu lieu en 1995.
&lt;/p&gt;
&lt;p&gt;
Attention toutefois, Ruby est très différent de PHP !
&lt;/p&gt;
&lt;h3&gt;Pourquoi ?&lt;/h3&gt;
&lt;h4&gt; Orienté Web / Peut tout faire &lt;/h4&gt;
&lt;p&gt;
PHP a été crée par un développeur Web pour le développement Web, les bases de PHP viennent de la nécessité pour son créateur &lt;a href=&quot;http://fr.wikipedia.org/wiki/Rasmus_Lerdorf&quot;&gt;Rasmus Lerdorf&lt;/a&gt;, d'enregistrer la fréquentation sur son CV...
&lt;/p&gt;
&lt;p&gt;
Ruby quant à lui, a été crée par &lt;a href=&quot;http://fr.wikipedia.org/wiki/Yukihiro_Matsumoto&quot;&gt;Yukihiro Matsumotow&lt;/a&gt; dit &amp;quot;Matz&amp;quot; en s'inspirant notamment de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Perl_%28langage%29&quot;&gt;PERL&lt;/a&gt; et &lt;a href=&quot;http://fr.wikipedia.org/wiki/Smalltalk&quot;&gt;Smalltalk&lt;/a&gt;, cela veut principalement dire que Ruby a été écrit pour être un langage applicatif &amp;quot;à tout faire&amp;quot; en allant du petit script de classement de vos images aux bibliothèques d'interfaces graphiques (il est en cela comparable au C, C++, Java...).
&lt;/p&gt;
&lt;h4&gt; Non-Objet / Objet &lt;/h4&gt;
&lt;p&gt;
Dans un langage objet, les objets répondent à des messages.
&lt;br /&gt;
&lt;strong&gt;exemple&lt;/strong&gt; : l'objet maVoiture reçoit un message lui demandant d'avancer donne
&lt;/p&gt;
&lt;pre&gt;[Ruby] ma_voiture.avance()&lt;/pre&gt;
&lt;p&gt;
PHP, lui, n'est pas un langage (entièrement) orienté objet.
&lt;br /&gt;
D'ailleurs à l'origine PHP n'est pas du tout un langage objet.
&lt;br /&gt;
Même si depuis la version 5, tout cela a bien évolué.
&lt;/p&gt;
&lt;p&gt;
Toutefois, en PHP, pour mettre en majuscule un mot ou une phrase, on écrira :
&lt;/p&gt;
&lt;pre&gt;[PHP] strtoupper(&amp;quot;jonathan&amp;quot;)&lt;/pre&gt;
&lt;p&gt;
On voit bien ici que &amp;quot;l'objet&amp;quot; traité est passé à une méthode au lieu de recevoir un message.
&lt;/p&gt;
&lt;p&gt;
Si vous n'avez pas encore compris, regardez ce que cela donne en Ruby.
&lt;/p&gt;
&lt;pre&gt;[Ruby] &amp;quot;jonathan&amp;quot;.uppercase()&lt;/pre&gt;
&lt;p&gt;
Ici c'est bien l'objet (le string) qui reçoit le message lui indiquant de se mettre en majuscule.
&lt;/p&gt;
&lt;p&gt;
Une des particularités de Ruby est qu'absolument tout (ou presque) est Objet.
&lt;/p&gt;
&lt;p&gt;
C'est la raison pour laquelle j'ai pu écrire &amp;quot;jonathan&amp;quot;.uppercase() sans avoir auparavant créé une instance de String...
&lt;/p&gt;
&lt;p&gt;
Ruby &amp;quot;comprend&amp;quot; automatiquement que ce qui est entre deux guillemets est un string et répond donc aux méthodes de cette classe.
&lt;/p&gt;
&lt;p&gt;
On touche là une autre particularité de Ruby, le &amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Duck_Typing&quot; hreflang=&quot;en&quot;&gt;Duck Typing&lt;/a&gt;&amp;quot; ou &amp;quot;Typage Canard&amp;quot; (si ça marche comme un canard et si ça cancane comme un canard, alors ce doit être un canard&amp;quot; ).
&lt;br /&gt;
Le principe est donc de ne pas forcer le programmeur à utiliser une classe donnée, mais de l'obliger à mettre les données dans le format que nous voulons utiliser.
&lt;br /&gt;
J'ai écrit &amp;quot;jonathan&amp;quot; entre guillemets, Ruby comprends que cet objet est un String.
&lt;br /&gt;
Si j'écris [1, 14, 15] ce sera un Array (Tableau), {1=&amp;gt;&amp;quot;aaa&amp;quot;, 2=&amp;gt;&amp;quot;b&amp;quot;} sera un Hash (ou tableau associatif)...
&lt;/p&gt;
&lt;h4&gt;Bizarreries / P.O.L.S.&lt;/h4&gt;
&lt;p&gt;
Une autre particularité de Ruby est de suivre au maximum le P.O.L.S ou &amp;quot;Principle of Least Surprise&amp;quot; (&amp;quot;Principe de moindre surprise&amp;quot;).
&lt;/p&gt;
&lt;p&gt;
Cela peut sembler une évidence, mais en gros cela veut dire que les méthodes font ce que leur nom laisse penser qu'elles font.
&lt;/p&gt;
&lt;p&gt;
Pourtant, lorsque l'on lit la documentation de PHP, on se rend compte que ce n'est pas toujours le cas :
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
array_merge( array $array1  [, array $array2  [, array $...  ]] ) &lt;/p&gt;
&lt;p&gt;Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. &lt;/p&gt;
&lt;p&gt;If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. &lt;/p&gt;
&lt;p&gt;If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. &lt;/p&gt;
&lt;p&gt;If only one array is given and the array is numerically indexed, the keys get reindexed in a continuous way.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
La même chose en Ruby (méthode merge de la classe Hash) :
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
hsh.merge(other_hash) &lt;/p&gt;
&lt;p&gt;Returns a new hash containing the contents of other_hash and the contents of hsh, overwriting entries in hsh with duplicate keys with those from other_hash.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Vous voyez la différence, n'est ce pas &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
[private joke]&lt;br /&gt;
On peut aussi en faire la démonstration avec AS3 et Ruby pour retourner un string  : &lt;/p&gt;
&lt;h4&gt;AS3 :&lt;/h4&gt;
&lt;pre&gt;[Actionscript] myString.split('').reverse().join('')&lt;/pre&gt;
&lt;h4&gt;Ruby &lt;/h4&gt;
&lt;pre&gt;[Ruby] my_string.reverse()&lt;/pre&gt;
&lt;p&gt;
[/private joke]
&lt;/p&gt;
&lt;p&gt;
Voilà pour la première introduction, j'espère vous avoir donner envie d'en savoir un peu plus et je vous monterais bientot les rudiments de la syntaxe Ruby (certes un peu étrange pour un développeur PHP ou Flash, mais tellement sexy à l'usage !)
&lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
Ruby, c'est quoi comme langage ?&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/84</wfw:commentRss>
      </item>
    
  <item>
    <title>Mais Ruby, Ruby On Rails, c'est quoi en fait ?</title>
    <link>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait</link>
    <guid isPermaLink="false">urn:md5:e50a37085a0c6fb45a41464a3e04601c</guid>
    <pubDate>Tue, 15 Jul 2008 21:57:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>    &lt;p&gt;
Comme souvent quand quelque chose vous passionne, vous ne pouvez pas vous empêcher d'en faire la promotion autour de vous.
&lt;/p&gt;
&lt;p&gt;
La plupart temps il s'agit d'un groupe de musique, d'une équipe de foot, d'un réalisateur ou d'un acteur et il est assez facile d'expliquer autour de vous
pourquoi votre préféré est selon vous meilleur que tous les autres.
&lt;br /&gt;
Mais quand l'une de vos passions est le Web, vous êtes déjà un peu plus étrange.
&lt;br /&gt;
Si vous précisez que c'est du développement Web qu'il s'agit, vous devenez carrément bizare.
&lt;br /&gt;
Et si vous finissez en expliquant que c'est plus particulièrement de Ruby ou Ruby et Ruby on Rails qu'il s'agit, vous devenez aux yeux de votre interlocuteur un extraterrestre !
&lt;/p&gt;
&lt;p&gt;
Et pourtant, c'est mon cas.  &lt;br /&gt;
Je suis &amp;quot;accroc&amp;quot; à Ruby et Ruby on Rails et je vais donc essayer d'expliquer en quelques billets ce dont il s'agit avec des mots simples.
&lt;/p&gt;
&lt;p&gt;
Ce tutoriel est désormais terminé, en voici toutes les parties : &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/83</wfw:commentRss>
      </item>
    
  <item>
    <title>Et mes données, j'en fais quoi ? (1/4)</title>
    <link>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-1/4</link>
    <guid isPermaLink="false">urn:md5:c8b2efc7a612830af695ea9f823cbbdb</guid>
    <pubDate>Tue, 13 May 2008 00:23:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
            
    <description>&lt;p&gt;
Quand on parle du futur du web, deux choses (parmi tant d'autres) reviennent régulièrement...
&lt;/p&gt;    &lt;p&gt;
Premièrement les adeptes du web sont pratiquement tous fan du &lt;strong&gt;&amp;quot;tout-en-ligne&amp;quot;&lt;/strong&gt;, on commence par mettre en ligne ses mails(Gmail, YahooMail, Hotmail...), ses bookmarks (del.icio.us, Diigo), puis on met en ligne ses photos (FlickR, Picassa), ses vidéos (Youtube, Dailymotion), sa musique (Deezer, LastFM)...
&lt;/p&gt;
&lt;p&gt;
Cette possibilité d'avoir tout en distant revêt aux yeux des &amp;quot;geeks&amp;quot; d'énormes avantages : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Le premier étant bien sûr d'avoir accès à ses contenus de &lt;strong&gt;partout&lt;/strong&gt; dans le monde et sur un maximum de&lt;strong&gt; terminaux différents&lt;/strong&gt; (aux questions de formats près). &lt;/li&gt;
&lt;li&gt; Le deuxième avantage à externaliser ses données est que beaucoup ont plus confiance (à tort ?) envers les serveurs des géants du web qu'en leurs disques durs quand aux questions de la sauvegarde de ses contenus (en plus c'est souvent plus économique).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Mais, à coté de cela, quand les geeks parlent du web de demain, il y a toujours quelques rabat-joie (dont je fais partie) pour nuancer les bienfaits du &amp;quot;tout-en-ligne&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
En effet, en adoptant cette solution, vous abandonnez à 2-3 grands groupes (même seulement 1 si vous choisissez un combo Gmail, GoogleDocs, Picassa, YouTube) l'intégralité de vos données.
&lt;/p&gt;
&lt;p&gt;
Cette concentration des données à de gros désavantages. En effet, même si l'on voit mal Google faire faillite l'an prochain, il est impossible d'avoir une vision à 10ans (il y a 10 ans Google naissait) voir 20ans (il y a 20 ans les premiers navigateurs web n'était pas nés) des grands du web.
&lt;/p&gt;
&lt;p&gt;
Que deviendront alors vos données le jour ou Google et Yahoo suite à des problèmes financiers ne pourrons plus financer leurs millions de serveurs ?
&lt;/p&gt;
&lt;p&gt;
Et dès aujourd'hui, combien on déjà &amp;quot;perdu&amp;quot; l'intégralité de leurs mails suite à un &amp;quot;bug&amp;quot; de leurs webmails (cherchez un peu sur le web et vous verrez que ça arrive plus souvent qu'on ne le croit).
&lt;/p&gt;
&lt;p&gt;
De plus, cette concentration des données permet aux grands groupes du web, d'en savoir énormément (trop ?) sur vous.
&lt;/p&gt;
&lt;p&gt;
Google (ça retombe souvent sur lui), analyse vos mails, vos visites (via son moteur de recherche), les pubs sur lesquelles vous cliquez (AdSense, Cibleclick), les tags de vos photos, de vos vidéos... Tout cela afin de &amp;quot;mieux&amp;quot; coller à vos désirs et de vendre toujours plus cher ses espaces de pubs aux annonceurs.
&lt;/p&gt;
&lt;p&gt;
Quand vous &amp;quot;offrez&amp;quot; votre identité numérique à Facebook, vous mettez entre les mains d'une entreprise vos goûts cinématographiques, musicaux, votre liste d'amis, des photos...
&lt;/p&gt;
&lt;p&gt;
Depuis quelque temps, cette concentration fait peur et de plus en plus de monde voit en google et les autres un Big Brother qui serais susceptible de savoir absolument tout sur vous !
&lt;/p&gt;
&lt;p&gt;
Alors, ou aller ? Doit-on forcément se priver des avantages du &amp;quot;tout-en-ligne&amp;quot; si l'on souhaite garder un minimum de dépendance vis-à-vis des grandes entreprises du Web ou doit-on céder à leur règles au nom du progrès ?
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;
N'est-il pas possible de concilier les avantages de ces deux mondes ?
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
Vos idées sont les bienvenues mais pour être franc, j'ai déjà la mienne et je vais vous la faire partager dans le billet suivant (Il est écrit mais je suis curieux de connaitre votre sentiment sur ce problème avant de vous donner le mien).
&lt;/p&gt;
&lt;p&gt;
Un problème fait que les commentaires ne fonctionnent plus en ce moment.&lt;br /&gt;
Je vous invite donc à m'envoyer vos avis à jblanche [at] gmail [point] com&lt;br /&gt;
Je les posterais ici dès le problème résolu et à la suite de ce billet en attendant.
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-1/4#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-1/4#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/76</wfw:commentRss>
      </item>
    
  <item>
    <title>Et mes données, j'en fais quoi ? - Avant propos</title>
    <link>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-Avant-propos</link>
    <guid isPermaLink="false">urn:md5:8c819ab38a88b15a42e9b0b9e74f5cce</guid>
    <pubDate>Tue, 13 May 2008 00:17:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
            
    <description>    &lt;p&gt;
Le train est propice à la réflexion et au travail, j'ai donc profité de mes récents voyages pour écrire une série de billets sur des thèmes et un projet qui me tiennent à coeur.
&lt;strong&gt;La mise en ligne&lt;/strong&gt; de l'ensemble de nos &lt;strong&gt;ressources&lt;/strong&gt; et notre &lt;strong&gt;contrôle&lt;/strong&gt; sur celles-ci.
&lt;/p&gt;
&lt;p&gt;
Cette série se divise en quatre articles (plus celui ci) sous la forme suivante :
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-1/4&quot;&gt;Description de la situation et du problème ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Peut-on solutionner le problème ?&lt;/li&gt;
&lt;li&gt;Comment ?&lt;/li&gt;
&lt;li&gt;Le projet &lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-Avant-propos#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/05/13/Et-mes-donnees-jen-fais-quoi-Avant-propos#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/75</wfw:commentRss>
      </item>
    
  <item>
    <title>GmailV2, Greasemonkey revient et il est en colère !</title>
    <link>http://blogbangbang.com/post/2007/11/12/GmailV2-Greasemonkey-revient-et-il-est-en-colere</link>
    <guid isPermaLink="false">urn:md5:754f41f3e182127675b9cfa1abb13994</guid>
    <pubDate>Mon, 12 Nov 2007 23:08:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>firefox</category><category>gmail</category><category>Google</category><category>GreaseMonkey</category>    
    <description>    &lt;p&gt;Si vous avez basculé vers la version anglaise de Gmail, (pour avoir l'IMAP par exemple), vous avez également basculé en V2 de Gmail.&lt;/p&gt;
&lt;p&gt;Celle çi est plus rapide, plus sympa, mais aussi plus polluée, car tous les scripts (notamment &lt;a href=&quot;http://blogbangbang.com/post/2007/01/29/GreaseMonkey&quot;&gt;le mien&lt;/a&gt; qui fonctionne encore pour la V1) qui supprimait la colonne de pub ne fonctionnent plus ! &lt;/p&gt;
&lt;p&gt;Heureusement Firefox et ces milles extensions nous permettent de régler cela très vite, alors un petit coup de Firebug pour analyser la page et deux sélecteurs CSS plus tard, voilà la version 2 du &lt;a href=&quot;http://userstyles.org/styles/4112&quot; hreflang=&quot;en&quot;&gt;Gmail advertising links killer&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;En plus de vous débarrasser des ignobles pubs, ce scripts récupère même l'espace laissé libre pour afficher vos mails ! Pas de perte de place ! &lt;/p&gt;
&lt;p&gt;Pour l'installer il vous faudra soit l'extension Stylish, soit Greasemonkey, qui correspondent respectivement aux bouttons &amp;quot;Load into Stylish&amp;quot; et &amp;quot;Load as User Script&amp;quot;.&lt;/p&gt;
&lt;p&gt;Et hop encore une victoire pour &lt;del&gt;canard&lt;/del&gt; Firefox.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/11/12/GmailV2-Greasemonkey-revient-et-il-est-en-colere#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/11/12/GmailV2-Greasemonkey-revient-et-il-est-en-colere#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/56</wfw:commentRss>
      </item>
    
  <item>
    <title>Google, l'amour vache</title>
    <link>http://blogbangbang.com/post/2007/11/05/Google-lamour-vache</link>
    <guid isPermaLink="false">urn:md5:5e177a3e35eeee256dfe1fa037860814</guid>
    <pubDate>Mon, 05 Nov 2007 22:24:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>Google</category><category>Linux</category>    
    <description>    &lt;p&gt;
Google est grand, parfois trop grand, c'est pour cela notamment que je me dis régulièrement que je devrais passer mes mails sur mon serveur perso et utiliser &lt;a href=&quot;http://www.exalead.fr/search&quot;&gt;Exalead&lt;/a&gt; comme moteur de recherche.
&lt;/p&gt;
&lt;p&gt;
Pourtant, à chaque annonce d'un nouveau service Google, je suis comme un gamin le matin du 25 décembre.
&lt;/p&gt;
&lt;p&gt;
Pourquoi ?
&lt;/p&gt;
&lt;p&gt;
Parce que Google joue juste, en vient de nous le prouver &lt;del&gt;une&lt;/del&gt; deux fois en une semaine.
&lt;/p&gt;
&lt;p&gt;
Premièrement, alors que l'on attendait une réponse à Facebook avec son propre réseau social, Google fait à mon avis bien mieux en proposant &lt;a href=&quot;http://code.google.com/apis/opensocial/&quot;&gt;OpenSocial&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Google a passé des partenariats avec des dizaines de réseaux sociaux (&lt;a href=&quot;http://www.ning.com/&quot;&gt;Ning&lt;/a&gt;, &lt;a href=&quot;http://www.myspace.com/&quot;&gt;MySpace&lt;/a&gt;, &lt;a href=&quot;http://www.viadeo.com/fr/connexion/&quot;&gt;Viadeo&lt;/a&gt;, &lt;a href=&quot;http://www.linkedin.com/&quot;&gt;LinkedIn&lt;/a&gt;, &lt;a href=&quot;http://www.orkut.com/&quot;&gt;Orkut&lt;/a&gt;...) qui implémentent une API fournie par Google et permettant à chacun de créer des applications facilement exploitables par tous les réseaux sociaux ou presque (actuellement tous les &amp;quot;gros&amp;quot; sauf &lt;a href=&quot;http://www.facebook.com/&quot;&gt;Facebook&lt;/a&gt; mais, ça ne saurait tarder selon &lt;a href=&quot;http://fr.techcrunch.com/2007/11/02/echec-et-mat-myspace-bebo-et-six-apart-rejoignent-open-social/&quot;&gt;Techcrunch&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Plûtot que de créer son propre langage comme l'a fait Facebook, Google à ici fait le choix du libre en appuyant son API sur les standards que sont Javascripts, HTML et XML.
Tout le monde peut donc créer son application dans le langage de son choix (Ruby on Rails, PHP, Python...).
&lt;/p&gt;
&lt;p&gt;
Deuxièmement, alors que les rumeurs sur un Gphone devenaient tellement pressantes que le doute sur son apparition n'existait pratiquement plus, Google a pris tout le monde à contre-pied en annonçant &lt;a href=&quot;http://www.openhandsetalliance.com/android_overview.html&quot;&gt;Android&lt;/a&gt; et &lt;a href=&quot;http://www.openhandsetalliance.com/&quot;&gt;l'Open Handset Alliance&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Et là, on tient à mon humble avis, l'annonce de l'année !
&lt;/p&gt;
&lt;p&gt;
En effet, plutôt que de proposer un matériel et toutes les contraintes que cela comporte sur un marché déjà très chargé, Google a fait le pari de s'allier aux acteurs présents sur le marché (T-Mobile, HTC, Motorola, Samsung...) et de proposer une plateforme mobile pouvant servir de base au développement d'applications mobiles.
Une fois encore, Google a fait le choix du libre puisque cette plateforme sera propulsée par un OS Linux.
&lt;/p&gt;
&lt;p&gt;
Concrètement, cela veut dire que demain, chacun pourra développer, améliorer des applications pour son mobile en ayant l'assurance d'une compatibilité excellente (qui était clairement le plus gros frein à l'innovation sur plateformes mobiles actuellement).
&lt;/p&gt;
&lt;p&gt;
Vous ne voyez toujours pas ? Allez je vous aide, demain, des milliers de développeurs construiront des applications vous permettant d'envoyer instantanément les photos prises avec votre portable sur FlickR,
de synchroniser facilement votre calendrier &amp;quot;Poste&amp;quot; (qu'il soit iCal, Google Calendar) avec votre portable grâce à une appli open source que vous pourrez aisément remettre sur votre prochain puis prochain prochain portable même si vous êtes passé de HTC à Samsung en passant par Motorola... ...
&lt;/p&gt;
&lt;p&gt;
Alors que penser de Google ? Je ne sais plus ! Un jour je le déteste (quand je pense que son robot lit mes mails, qu'il bénéficie presque du monopole de la publicité sur le Web...) et le lendemain je l'adore (quand il prouve son attachement pour un Internet basé sur des technologies, langages et applications libres et accessibles par tous et qu'il nous propose des services facilitant toujours plus notre quotidien).
&lt;/p&gt;
&lt;p&gt;Et vous Google, vous aimez ? &lt;/p&gt;
&lt;p&gt;PS : En tout cas les actionnaires aiment, car suite à ses annonces, l'action grimpe encore de 1.48 % aujourd'hui et atteint 722.48 dollars US à l'heure où j'écris ce billet. &lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/11/05/Google-lamour-vache#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/11/05/Google-lamour-vache#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/55</wfw:commentRss>
      </item>
    
  <item>
    <title>Transcender CSS, un bien joli bouquin</title>
    <link>http://blogbangbang.com/post/2007/10/30/Transcender-CSS-un-bien-joli-bouquin</link>
    <guid isPermaLink="false">urn:md5:a76ecf2bf7d28caf7e9d433819c5e41c</guid>
    <pubDate>Tue, 30 Oct 2007 20:20:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>css</category><category>livre</category>    
    <description>    &lt;p&gt;Les bouquins sur le développement Web, bien que parfois excellents ( &lt;a href=&quot;http://blogbangbang.com/post/2007/05/11/Livte-%3A-Ruby-on-rails-seconde-edition&quot;&gt;Ruby on Rails&lt;/a&gt;, &lt;a href=&quot;http://blogbangbang.com/post/2007/02/05/Bien-developper-pour-le-Web20&quot;&gt;Bien développer pour le Web 2.0&lt;/a&gt;...),
sont rarement des exemples d'esthétisme (sauf peut-être pour quelques bouts de code ruby :-D), pourtant, je suis tombé sur une perle.&lt;/p&gt;
&lt;p&gt;Ayant pas mal entendu parlé d'un nouveau bouquin sur le CSS (notamment chez &lt;a href=&quot;http://blog.alsacreations.com/2007/09/05/383-le-nouveau-livre-transcender-css-oui-mais&quot;&gt;Alsacreations&lt;/a&gt; et le &lt;a href=&quot;http://standblog.org/blog/post/2007/08/31/A-propos-des-standards-du-Web&quot;&gt;Standblog&lt;/a&gt; ),
je souhaitais me faire ma propre idée sur le livre &lt;q&gt;Transcender CSS, Sublimez le Design Web !&lt;/q&gt;&lt;/p&gt;
&lt;a title=&quot;cover Transcender CSS&quot; href=&quot;http://www.eyrolles.com/Entreprise/Livre/9782212121070/livre-transcender-css.php&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;Couverture du livre transcender CSS&quot; src=&quot;http://blogbangbang.com/images/tcss_cover.jpg&quot; /&gt;
&lt;/a&gt;
&lt;p&gt;Avec nom comme celui-ci, mieux vaut assurer derrière, mais il se trouve que c'est le cas. &lt;/p&gt;
&lt;p&gt;L'auteur, à l'origine directeur artistique, est désormais membre du fameux Web Standards Project et du groupe de travail du W3C sur le CSS.&lt;/p&gt;
&lt;p&gt;Le livre est préfacé par Dave Shea, autre gourou du Web et créateur du désormais culte CSS Zen Garden. &lt;/p&gt;
&lt;p&gt;Dave Shea le dit lui-même dans la préface : &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Nous avions vu dans le (CSS) Zen (Garden) qu'un design reposant sur CSS n'est pas forcément affreux[...]. Désormais, Transcender CSS nous montre que le Web d'aujourd'hui n'est
qu'un point de départ : il est temps de se tourner vers l'avenir. &lt;cite&gt;Dave Shea&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ce livre vous donne en effet toutes les clés pour construire les sites de demain.&lt;/p&gt;
&lt;p&gt;Dans une première partie de (Re)Découverte de CSS, utile à tout le monde, l'auteur nous rappelle les origines de CSS, les applications du CSS (et oui il n'y en a pas que sur le Web), le rôle d'un balisage sémantique...&lt;/p&gt;
&lt;p&gt;Dans la deuxième partie, intitulée &lt;q&gt;Processus&lt;/q&gt;, vous trouverez tous les conseils nécessaires à la mise en place du workflow idéal. Vous apprendrez à construire
des squelettes de mise en page, des designs statiques, des prototypes interactifs...&lt;br /&gt;
Tout ce qu'il vous faut pour mener à bien la phase de pré production d'un projet digne de ce nom. &lt;/p&gt;
&lt;p&gt;Dans la troisième partie, intitulée &lt;q&gt;Inspriration&lt;/q&gt;, vous découvrirez quelques conseils de l'auteur sur la technique des grilles de mise en page et sur
les sources d'inspirations utiles à la création de nouveaux designs (architectures, journaux, magazines...)&lt;/p&gt;
&lt;p&gt;Enfin, dans la quatrième et dernière partie, l'auteur nous apprend à Transcender CSS en réalisant des designs originaux grâces aux différentes méthodes de positionnement CSS.&lt;br /&gt;
Il vous fera également découvrir quelques modules de CSS3 qui vous feront rugir d'impatience quant à la date d'intégration de ces modules dans les navigateurs dignes de ce nom. &lt;/p&gt;
&lt;p&gt;En plus d'être fourni en contenu, ce livre est tout simplement superbe. Il est parsemé de photos toutes plus sympas
les unes que les autres et bénéficie d'une impression en quadrichromie qui lui donne une esthétique irréprochable. Je vous laisse juger : &lt;/p&gt;
&lt;a class=&quot;thickbox&quot; title=&quot;inspiration&quot; href=&quot;http://blogbangbang.com/images/tcss01.jpg&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;exemple page inspiration&quot; src=&quot;http://blogbangbang.com/images/tcss01_s.jpg&quot; /&gt;
&lt;/a&gt;
&lt;a class=&quot;thickbox&quot; title=&quot;transcender CSS&quot; href=&quot;http://blogbangbang.com/images/tcss02.jpg&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;Transcender CSS chapitre 4&quot; src=&quot;http://blogbangbang.com/images/tcss02_s.jpg&quot; /&gt;
&lt;/a&gt;
&lt;a class=&quot;thickbox&quot; title=&quot;transcender CSS exemple&quot; href=&quot;http://blogbangbang.com/images/tcss03.jpg&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;transcender CSS exemple&quot; src=&quot;http://blogbangbang.com/images/tcss03_s.jpg&quot; /&gt;
&lt;/a&gt;
&lt;p&gt;Bref vous l'aurez compris, encore un livre que je ne regrette pas une seconde d'avoir acheté alors si vous voulez est un maître du CSS tout en posant un joli livre dans votre nouvelle bibliothèque, foncez !&lt;/p&gt;
&lt;p&gt;P.S. : Comme les deux livres précédemment cités, celui-ci est également à attribuer aux &lt;a href=&quot;http://www.editions-eyrolles.com/&quot;&gt;éditions Eyrolles&lt;/a&gt; qui font définitivement du très bon boulot. &lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/10/30/Transcender-CSS-un-bien-joli-bouquin#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/10/30/Transcender-CSS-un-bien-joli-bouquin#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/54</wfw:commentRss>
      </item>
    
  <item>
    <title>One year in Paris ! Au ciné...</title>
    <link>http://blogbangbang.com/post/2007/09/28/One-year-in-Paris-Au-cine</link>
    <guid isPermaLink="false">urn:md5:a8113b9aee38ff0c822e1bc2618eab46</guid>
    <pubDate>Fri, 28 Sep 2007 18:56:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>cinéma</category>    
    <description>&lt;p&gt;
Eh oui ça fait désormais un peu plus d'un an que je profite de l'abonnement illimité mk2 Cinéma.
Il est donc l'heure de dresser un petit bilan de cette année cinématographique.
&lt;/p&gt;    &lt;p&gt;
D'abord financièrement, après avoir vu plus de 50 films cette année, je peut dire que la carte était rnetable et je remettrais donc le couvert pour l'année à venir (avec une nouvelle carte suite au changement de partenaire des cinémas MK2).
&lt;/p&gt;
&lt;p&gt;
Pour le bilan cinématographique, cette carte m'aura permis d'aller voir beaucoup de films que je n'aurais pas été voir pour une place à 7euros et pour lesquels j'ai parfois eu de très bonne surprise.
Bien sur, elle m'a aussi incité à aller voir certains films sur le principe du &amp;quot;allez tente le c'est gratuit&amp;quot;, et là la déception était souvent bien réelle.
&lt;/p&gt;
&lt;p&gt;
Voilà donc selon moi, un petit résumé des films à voir et à éviter entre août 2006 et août 2007.
&lt;/p&gt;
&lt;h3&gt;Les films à voir :&lt;/h3&gt;
&lt;h4&gt;Little Miss Sunshine : &lt;/h4&gt;
1 heure trente de fou rires, une séance d'abdos gratuite, une critique bien pensée de la société Américaine.&lt;br /&gt;Un bon film qui ne veut pas en faire trop mais qui remplit son rôle à merveille.&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=109815.html&quot;&gt;La fiche...&lt;/a&gt;
&lt;h4&gt;Une vérité qui dérange : &lt;/h4&gt;
Un documentaire très clair sur les effets du réchauffement climatique qui nous fait encore un peu plus prendre conscience de l'urgence de la situation. Dommage cependant que l'on ne puisse s'empêcher de penser que Al Gore ait d'autres objectifs que de faire un bon documentaire.&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=111289.html&quot;&gt;La fiche...&lt;/a&gt;
&lt;h4&gt;Le vent se lève : &lt;/h4&gt;
Palme d'or à Cannes l'an dernier, Ken Loach nous raconte dans un film poignant les prémices de la rébellion Irlandaise face à l'ennemi anglais.
Tout y est, le jeu d'acteur, l'ambiance, la musique... A voir absolument (a fortiori si comme moi, vous aimez beaucoup l'Irlande !).
&lt;h4&gt;Libéro : &lt;/h4&gt;
Un de ces films que je n'aurais jamais vu sans la carte illimité.
L'histoire poignante d'une famille ou la mère est partie sans laisser d'adresse mais ou chacun va tout faire pour s'en sortir malgré ses difficultés économiques, jusqu'au jour ou la mère reviens...&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=111203.html&quot;&gt;La fiche...&lt;/a&gt;
&lt;h4&gt;Les infiltrés : &lt;/h4&gt;
Le dernier Scorsese raconte les histoires croisées d'un policier qui travaille pour le compte de la mafia et d'un mafioso infiltré qui bosse pour la police.
Di caprio et Matt Damon sont comme d'habitude excellents. Le film est noir, dur, on en attendait pas moins...&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=55983.html&quot;&gt;La fiche...&lt;/a&gt;
&lt;h4&gt;Babel :&lt;/h4&gt;
Alejandro González Inárritu faisait partis de ces réalisateurs que je vais voir sans la moindre hésitation. Après Babel, c'est encore plus vrai !
Certes le film n'est pas une révolution et reste très fidèle au style du réalisateur mais comment lui en vouloir quand c'est si beau ! &lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=20151.html&quot;&gt;La fiche...&lt;/a&gt;
&lt;h4&gt;Boulevard du crime : &lt;/h4&gt;
Tarantino nous livre encore une fois un vrai hommage à son cinéma ! Après l'hommage au cinéma asiatique avec Kill Bill, c'est cette fois ci la série B, qui à droit à son heure et demi de gloire.
&lt;h4&gt;La vie des autres : &lt;/h4&gt;
L'histoire d'un auteur allemand en allemagne de l'est au début des années 80. Celui ci va être surveillé par un agent de la Stasi pour être soupçonné d'agir à l'encontre de son gouvernement... Un film superbe, qui montre bien que l'autre camp n'est pas forcément plus mauvais que le votre.
&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=111643.html&quot;&gt;La fiche&lt;/a&gt;
&lt;h4&gt;Prête moi ta main : &lt;/h4&gt;
Un film très divertissant ou Alain Chabat et Charlotte Gainsbourg vous feront rires d'un bout à l'autre.
&lt;h4&gt;Persépolis : &lt;/h4&gt;
SUPERBE ! La bande annonce m'avait vraiment donné envie malgré ma réticence envers les films d'animations. On passe du rire aux larmes toutes les 5 minutes, l'histoire est poignante, les doublages excellents. Bref tout y est. Peut être bien mon coup de coeur de l'année.&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=110204.html&quot;&gt;La fiche&lt;/a&gt;
&lt;h4&gt;Je vais bien, ne t'en fais pas : &lt;/h4&gt;
Un film bourré de sentiments, Kad Merad y est méconnaissable dans un rôle poignant qu'il rempli avec maestria. Mélanie Laurent est aussi belle qu'excellente. Quand au scénario, il faudra attendre les derniers instants pour qu'il vous livre tout ses secrets.&lt;a href=&quot;http://www.allocine.fr/film/fichefilm_gen_cfilm=108818.html&quot;&gt;La fiche&lt;/a&gt;
&lt;h3&gt;Les films à éviter :&lt;/h3&gt;
&lt;h4&gt;Hors de prix: &lt;/h4&gt;
Audrey Tautou et Gad Elmaleh dans un même film, ca laisse présager d'un bon moment non ?
Et bien c'est complètement raté, ce n'est que rarement drôle, c'est très lent, c'est à éviter.
&lt;h4&gt;Arrivederci amore, ciao : &lt;/h4&gt;
Quand vous arrivez trop tard pour voir le film que vous vouliez, rentrez chez vous ! J'ai retenu la leçon après ce film. Il ne se passe rien, on ne laisse aucune place à la réflexion, la morale est plus que douteuse, bref Fuyez !
&lt;h4&gt;Saw III : &lt;/h4&gt;
Encore un film vu par défaut, faute de place pour je ne sais plus quoi (Anto, Lulu : vous vous souvenez ?). Le premier était plutôt bon, le deuxième très mauvais, le troisième est exécrable. Plus rien n'est sous entendu, tout est montré. On est dans le gore jusqu'au bout, du coup un rigole un bon coup lorsque l'on commence une opération à cerveau ouvert à coup de clé à molette et de tronçonneuse...
&lt;h4&gt;The sentinel : &lt;/h4&gt;
Ce n'est pas parce que Kieffer Sutherland est parfait dans 24 qu'il est bon partout...</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/09/28/One-year-in-Paris-Au-cine#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/09/28/One-year-in-Paris-Au-cine#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/50</wfw:commentRss>
      </item>
    
  <item>
    <title>Joost do it !</title>
    <link>http://blogbangbang.com/post/2007/05/07/Joost-do-it</link>
    <guid isPermaLink="false">urn:md5:4dd2cb5ceb820548656f40ee90aa367d</guid>
    <pubDate>Mon, 07 May 2007 15:25:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>joost</category><category>mozilla</category><category>tv</category><category>xul</category>    
    <description>    &lt;p&gt;Tout le monde en parle depuis quelque temps déjà mais maintenant je sais pourquoi.&lt;/p&gt;
&lt;img class=&quot;billet&quot; src=&quot;http://www.3dchips-fr.com/imglib/news/1178289277_535.jpg&quot; alt=&quot;joost logo&quot; /&gt;
&lt;p&gt;Joost, le nouveau bébé des créateurs de Kazaa et Skype annonçait révolutionner la télévision en vous proposant de regarder ce que vous souhaitez, quand vous le souhaitez, en interagissant avec les autres téléspectateurs...&lt;/p&gt;
&lt;p&gt;Même si le contenu est actuellement plutôt restreint (surtout en Europe), la promesse est tenue.&lt;/p&gt;
&lt;p&gt;
L’ergonomie et le design de l’interface sont superbes.&lt;br /&gt;
&lt;img class=&quot;billet&quot; src=&quot;http://www.3dchips-fr.com/imglib/articles/1178289278_80.jpg&quot; alt=&quot;joost interface&quot; /&gt;
L’application propose quelques « widgets » permettant actuellement de chatter en live avec votre compte jabber ou de récupérer un flux RSS, mais celle-ci étant
basée sur la plateforme de développement fournie par Mozilla (avec XUL notamment), il sera bientôt possible aux utilisateurs de créer leurs propres « widgets », à la manière des extensions de Firefox.
&lt;/p&gt;
&lt;p&gt;Je dispose désormais (comme tout le monde) d’un bon petit paquet d’invitations et je serais ravi de vous faire découvrir ce logiciel si vous me laissez vos noms, prénoms et adresse mail dans les commentaires.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Les bonnes idées de DELL</title>
    <link>http://blogbangbang.com/post/2007/02/19/les-bonnes-idees-de-DELL</link>
    <guid isPermaLink="false">urn:md5:0cfa28a0933f1ba138033593a31f6cc7</guid>
    <pubDate>Mon, 19 Feb 2007 23:58:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>dell</category><category>libre</category><category>Linux</category>    
    <description>    &lt;p&gt;J'ai récemment posté un billet prouvant que Linux pouvait être aussi, voire bien plus joli qu'un Windows Vista ou un MacOS X.&lt;/p&gt;
&lt;p&gt;
Malheureusement un problème subsiste, il n'est pas fourni par défaut sur les PC,de ce fait il peu utilisé et les éditeurs logiciels ne développent pas pour cet OS.&lt;/p&gt;
&lt;p&gt;Il est donc sous utilisé...&lt;/p&gt;
&lt;p&gt;
Mais là où les éditeurs ne changeront sûrement pas de vision tant que Linux n'aura pas plus de part de marché, les constructeurs (DELL...) produiront ces PC si les acheteurs en font la demande.
&lt;/p&gt;
&lt;p&gt;
Or DELL a lancé il y a quelques jours un système, &lt;a href=&quot;http://www.dellideastorm.com/&quot; hreflang=&quot;en&quot;&gt;DellIdeaStorm&lt;/a&gt;, proposant aux utilisateurs d'émettre leurs souhaits quant aux nouveaux produits ou services de DELL.
&lt;a href=&quot;http://www.dellideastorm.com/&quot;&gt;&lt;img class=&quot;billet&quot; src=&quot;http://s3.crispynews.com/themes/dell_theme_dev/images/dell_ideastorm_logo.png&quot; alt=&quot;logo dellideastorm&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et parmi ceux là, on trouve actuellement en tête, une proposition émettant le souhait de voir DELL vendre des PC avec des distributions Linux pré-installées au coté ou en lieu et place d'un Windows.
&lt;/p&gt;
&lt;p&gt;
Alors si vous aussi vous souhaitez voir Linux se développer, ce qui passe avant tout par une intégration dans les milieux professionnels et éducatifs (ou DELL est très présent), donnez un petit coup de pouce à &lt;a href=&quot;http://www.dellideastorm.com/article/show/61771&quot; hreflang=&quot;en&quot;&gt;cette proposition&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Et même si vous ne souhaitez pas utiliser Linux tout de suite, une telle décision de la part de DELL mettrait à mal l'hégémonie de Windows sur les systèmes d'exploitations, et quand on sait le mal qu'à fait l'hégémonie d'Internet Explorer sur le marché des navigateurs web pendant des années, et les progrès apportés par la montée en puissance des navigateurs respectueux des standards(&lt;a href=&quot;http://www.mozilla-europe.org/fr/products/firefox/&quot; hreflang=&quot;fr&quot;&gt;Firefox&lt;/a&gt;, &lt;a href=&quot;http://www.opera.com/&quot; hreflang=&quot;en&quot;&gt;Opera&lt;/a&gt;, &lt;a href=&quot;http://www.apple.com/fr/macosx/features/safari/&quot; hreflang=&quot;fr&quot;&gt;Safari&lt;/a&gt;...), il y a fort à parier que tout le monde sortirait gagnant d'une montée en puissance de Linux.
&lt;/p&gt;
&lt;p&gt;
Pour information, un clic sans inscription équivaut à 3 points, un clic avec inscription à 10 (l'inscription se fait en 10 secondes sans confirmation par mail)&lt;/p&gt;
&lt;p&gt;
D'autres propositions sont également très intéressantes :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dellideastorm.com/article/show/62047&quot; hreflang=&quot;en&quot;&gt;OpenOffice en lieu et place de Microsoft Office.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dellideastorm.com/article/show/61923/linux_laptop&quot; hreflang=&quot;en&quot;&gt;Linux sur les portables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dellideastorm.com/article/show/62245/Have_Firefox_preinstalled_as_default_browser&quot; hreflang=&quot;en&quot;&gt;Firefox comme navigateur par défaut.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id=&quot;misp_compose_31&quot; class=&quot;hm&quot;&gt;PS&lt;/span&gt; : J'ai fait le pari il y a trois ans que dix ans plus tard, les
systèmes d'exploitations libres seraient plus répandus que les systèmes
propriétaires alors aidez-moi à le gagner.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/02/19/les-bonnes-idees-de-DELL#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/02/19/les-bonnes-idees-de-DELL#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/13</wfw:commentRss>
      </item>
    
  <item>
    <title>Ziki : Un réseau social 2.0 d’avenir</title>
    <link>http://blogbangbang.com/post/2007/02/01/Ziki-%3A-Un-reseau-social-20-davenir</link>
    <guid isPermaLink="false">urn:md5:1e2e8e763a4a53055dbd522a7584641f</guid>
    <pubDate>Wed, 14 Feb 2007 10:22:00 +0100</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>référencement</category><category>Web2.0</category><category>ziki</category>    
    <description>    &lt;p&gt;
Ce que l'on appelle le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Web_2.0&quot;&gt;Web2.0&lt;/a&gt;
se caractérise notamment par la création de contenus par les utilisateurs (User Generated Contents), ce qui est en soi une excellente chose.
&lt;/p&gt;
&lt;p&gt;
Pourtant cette multiplication des sources de contenus à également crée de nouveaux problèmes.
Un de ceux ci est le fait de voir des contenus vous concernant fleurir sur le net, et la nécessité de contrôler ceux ci (taper son nom dans un moteur de recherches amène souvent quelques surprises plus ou moins bonnes).
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.ziki.com/&quot;&gt;Ziki&lt;/a&gt;, répond à ce problème en vous proposant de créer votre profil, d'y associer les contenus que vous souhaitez voir associés à votre nom et en s'occupant à votre place (et gratuitement pour les 10 000 premiers inscrits) du &amp;quot;référencement&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
De plus, &lt;a href=&quot;http://www.ziki.com/&quot;&gt;Ziki&lt;/a&gt; est également un réseau social : c'est à dire que celui ci taggue les utilisateurs et leur permet du même coup de rentrer en contact avec d'autres personnes du réseau ayant les mêmes passions ou cherchant un profil particulier pour réaliser un travail (il paraît même que l'on peut y trouver l'âme soeur...).
&lt;/p&gt;
&lt;p&gt;
Et le moins que l'on puisse dire, c'est que cela fonctionne à merveille, j'en veux pour preuve les résultats obtenus en tapant mon nom sur google,  yahoo ou Live search.
&lt;/p&gt;
&lt;h3&gt;Lien commercial google&lt;/h3&gt;
&lt;img class=&quot;billet&quot; alt=&quot;google seach results&quot; src=&quot;http://blogbangbang.com/images/google.png&quot; /&gt;
&lt;h3&gt;Lien promotionnel yahoo&lt;/h3&gt;
&lt;img class=&quot;billet&quot; alt=&quot;yahoo seach results&quot; src=&quot;http://blogbangbang.com/images/yahoo.png&quot; /&gt;
&lt;h3&gt;Site sponsorisé Livesearch&lt;/h3&gt;
&lt;a href=&quot;http://www.blogbangbang.com/images/livesearch.png&quot; class=&quot;thickbox&quot; title=&quot;Live search result&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;live search results&quot; src=&quot;http://www.blogbangbang.com/images/livesearch_small.png&quot; /&gt;
&lt;/a&gt;
&lt;p&gt;
Comme vous pouvez le constater, des liens commerciaux redirigeant vers mon profil me sont gracieusement offerts .
&lt;/p&gt;
&lt;p&gt;
Le réseau fonctionne également pour le mieux puisque deux personnes m'ont déjà ajouté dans leur &amp;quot;réseau&amp;quot; Ziki après deux jours d'utilisation.
&lt;/p&gt;
&lt;p&gt;
Enfin , l'accueil sur cette plateforme à la réputation d'être très convivial, ce qui vous en conviendrez est plutôt bon signe pour un &amp;quot;réseau social&amp;quot;.
&lt;/p&gt;
&lt;p&gt;Alors n'hésitez plus, et inscrivez vous.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/02/01/Ziki-%3A-Un-reseau-social-20-davenir#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/02/01/Ziki-%3A-Un-reseau-social-20-davenir#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/8</wfw:commentRss>
      </item>
    
  <item>
    <title>Les extensions Firefox</title>
    <link>http://blogbangbang.com/post/2007/01/25/Les-extensions-Firefox</link>
    <guid isPermaLink="false">urn:md5:36375d213fca3d65f28bf6d8fc74d162</guid>
    <pubDate>Thu, 25 Jan 2007 23:39:00 +0000</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>extensions</category><category>firefox</category>    
    <description>&lt;p&gt;
J'avais promis de revenir dessus, un des gros avantages de Firefox vient de ces extensions.
En effet, ces petits programmes majoritairement écrits par des utilisateurs de Firefox permettent de rajouter des fonctions au navigateur.
(Ce qui permet à chacun d'avoir toutes les fonctions souhaitées sans pour autant avoir un navigateur très lourd)&lt;/p&gt;    Parmi les extensions Firefox, certaines me sont désormais indispensables et comme je sais que vous aussi vous aimeriez avoir un navigateur plus puissant, je vais vous en présenter quelques unes.
Toutefois j'ai estimé que certaines d'entre elles méritaient une attention plus importante et elles feront donc l'objet de prochains billets (GreaseMonkey, WebDeveloper Toolbar - FireBug, Del.icio.us Bookmarks)...
Pour les autres cela se passe ici :
&lt;h3&gt;AdBlock Plus&lt;/h3&gt;
&lt;p&gt;
Tout le monde le sait, la publicité est un des moteurs du web.
J'ai d'ailleurs lu récement qu'un parisien subissait en moyenne 3500 publicités par jour.
J'imagine donc que ce nombre est largement sous-estimé dès que l'on passe quelques heures par jour à surfer.
Et bien grâce à &lt;a href=&quot;https://addons.mozilla.org/firefox/1865&quot; hreflang=&quot;en&quot;&gt;AdBlock Plus&lt;/a&gt;(Bloqueur de pub en francais), c'est fini.
Ce logiciel définit des listes d'adresses (correspondant aux régies de pub) pour lesquelles
les pubs ne s'afficheront pas.
&lt;/p&gt;
&lt;p&gt;
De plus celui ci vous permet de rajouter des éléments que vous ne souhaitez pas voir s'afficher
au fur et à mesure de votre navigation.
&lt;img class=&quot;billet&quot; alt=&quot;adblock_plus&quot; src=&quot;http://blogbangbang.com/images/adblock_plus.jpg&quot; /&gt;
&lt;/p&gt;
&lt;h3&gt;DownThemAll&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;https://addons.mozilla.org/firefox/201/&quot; hreflang=&quot;en&quot;&gt;DownThemAll&lt;/a&gt; est comme son nom l'indique une extension destinée au téléchargement.
Et cela tombe bien car s'il y a un reproche à faire à Firefox, se serait sans doute son gestionnaire de
téléchargements qui n'est malheureusement pas une référence en la matière (d'ailleurs la version 3
de Firefox devrait parait-il corriger ce défaut).
DownThemAll propose donc de télécharger tous les éléments d'une page, de diviser le téléchargement à la manière de FlashGet, de mettre en pause et de redémarrer un téléchargement...
&lt;a href=&quot;http://blogbangbang.com/images/downthemall_big.jpeg&quot; title=&quot;DownThemAll&quot; class=&quot;thickbox&quot;&gt;
&lt;img class=&quot;billet&quot; src=&quot;http://blogbangbang.com/images/downthemall.jpeg&quot; alt=&quot;downthemall&quot; /&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;ScrapBook&lt;/h3&gt;
&lt;p&gt;
Encore une fois l'essayer c'est l'adopter.
&lt;a href=&quot;https://addons.mozilla.org/firefox/427/&quot; hreflang=&quot;en&quot;&gt;ScrapBook&lt;/a&gt; vous permet de sauvegarder sur votre disque des pages ou morceaux de pages (ou mêmes des sites entiers en définissant le niveau de profondeur).
Vous pouvez également choisir les éléments à télécharger (images, styles, scripts, tout...)
&lt;/p&gt;
&lt;p&gt;
Par la suite vous pouvez annoter le document, surligner des parties en supprimer d'autres...
&lt;/p&gt;
&lt;p&gt;
Idéal lorsque vous souhaitez élaborer une &amp;quot;banque&amp;quot; de données sur un projet dans le cadre d'un exposé par exemple.
&lt;a href=&quot;http://www.blogbangbang.com/images/scrapbook_big.jpg&quot; class=&quot;thickbox&quot; title=&quot;scrapbook&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;scrapbook&quot; src=&quot;http://www.blogbangbang.com/images/scrapbook.jpg&quot; /&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;FireFTP&lt;/h3&gt;
&lt;p&gt;
Cette extension est comme son nom l'indique également (décidément elles sont bien nommées ces extensions firefox !) un client FTP intégré à Firefox.
&lt;a href=&quot;https://addons.mozilla.org/firefox/684/&quot; hreflang=&quot;en&quot;&gt;FireFTP&lt;/a&gt; est à la fois simple mais complet, il remplacera avantageusement un Filezilla pour 95% des utilisateurs.
&lt;/p&gt;
&lt;p&gt;
De plus, l'auteur de cette extension reverse toutes les donations qui lui son faites à un établissement accueillant des orphelins à Sarajevo (c'est bien mieux que de donner 30€ à Microsoft, croyez moi ;)).
&lt;a href=&quot;http://www.blogbangbang.com/images/fireftp_big.jpg&quot; class=&quot;thickbox&quot; title=&quot;fireftp&quot;&gt;
&lt;img class=&quot;billet&quot; alt=&quot;scrapbook&quot; src=&quot;http://www.blogbangbang.com/images/fireftp.jpg&quot; /&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Les 2 prochaines extensions ne sont malheureusement pas disponibles sous Linux, elles ne sont pas moins indispensables sous Windows ou Mac.
&lt;/p&gt;
&lt;h3&gt;Colorzilla&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;https://addons.mozilla.org/firefox/271/&quot; hreflang=&quot;en&quot;&gt;Colorzilla&lt;/a&gt;, ou comment faire vite et bien.
Cette extension vous permet très simplement de récupérer la couleur d'un pixel d'une page web dans tous les formats (rvb, hexa ...)
&lt;img class=&quot;billet&quot; alt=&quot;colorzilla&quot; src=&quot;http://blogbangbang.com/images/colorzilla.jpg&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;IE Tab&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;https://addons.mozilla.org/firefox/1419/&quot; hreflang=&quot;en&quot;&gt;IE Tab&lt;/a&gt; fait elle aussi dans le très simple elle permet de consulter dans Firefox, le rendu d'une page sous IE.
Indispensable donc pour les développeurs Web.
&lt;/p&gt;
&lt;p&gt;
Attention toutefois, cette extension ne fait qu'afficher l'objet de la page IE dans l'interface Firefox, tous les risques inhérents à IE sont donc présents.
&lt;img class=&quot;billet&quot; alt=&quot;ie_tab&quot; src=&quot;http://blogbangbang.com/images/ie_tab.jpg&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2007/01/25/Les-extensions-Firefox#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2007/01/25/Les-extensions-Firefox#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/5</wfw:commentRss>
      </item>
    
  <item>
    <title>les indispensables (1)</title>
    <link>http://blogbangbang.com/post/2006/11/14/les-indispensables-1</link>
    <guid isPermaLink="false">urn:md5:46327d765280675d9d1b2eea8ef6ae99</guid>
    <pubDate>Sun, 10 Dec 2006 23:05:00 +0000</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>firefox</category><category>logiciels libres</category><category>Open Office</category><category>VLC</category>    
    <description>    &lt;p&gt;Les 3 logiciels cités ci-dessous sont des logiciels gratuits et libres (qu'est ce que c'est ?).
Vous êtes donc libre de les télécharger, de les redistribuer...&lt;/p&gt;
&lt;h3&gt;Open Office&lt;/h3&gt;
&lt;p&gt;Tout le monde connait la suite Office de Microsft (Word, Excel,
Powerpoint...), et la majorité d'entre vous l'utilise.&lt;br /&gt;
Mais combien d'entre vous en possèdent la licence, combien utilisent
cette suite en toute légalité ?&lt;br /&gt;
Sachez que cette suite à des équivalents et s'il en est une à retenir,
c'est la suite OpenOffice.&lt;br /&gt;
En effet, dans sa version 2, la suite OpenOffice (communement appellée
OO), est dotée de six logiciels répondant à tous vos besoins.&lt;br /&gt;
Les équivalences entre les suites Microsoft Office et OpenOffice étant
les suivantes :&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Word : OO Writer&lt;/li&gt;
&lt;li&gt;Microsoft Excel : OO Calc&lt;/li&gt;
&lt;li&gt;Microsoft Powerpoint : OO Impress&lt;/li&gt;
&lt;li&gt;Microsoft Access : OO Base&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
De plus la suite OpenOffice vous fournit deux logiciels
supplémentaires, qui dans un usage habituel servent assez
rarement :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OO Draw pour dessiner des formes, graphiques assez simples.&lt;/li&gt;
&lt;li&gt;OO Maths pour écrire des formules mathématiques.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alors si vous ne souhaitez pas utiliser de logiciels de manière illégale ou tout simplement si vous souhaitez découvrir les possibilités de cette suite, n'hésitez pas.&lt;/p&gt;
&lt;p&gt;Open Office : page d'accueil, téléchargement.&lt;/p&gt;
&lt;h3&gt;Firefox :&lt;/h3&gt;
&lt;p&gt;Si vous lisez ces lignes en ce moment, c'est que vous surfez sur le net (La Palice sort de ce corps),&lt;br /&gt;donc que vous utilisez un navigateur web.&lt;br /&gt;Et bien sachez que si celui ci se nomme Internet Explorer vous courrez de grands dangers !&lt;br /&gt;Certes j'exagère (si peu), mais ce naviguateur, pourtant le plus répandu est à des années lumières de certains autres&lt;br /&gt;en matière de sécurité et de fonctionnalités.&lt;br /&gt;Sans rentrer dans les détails techniques, sachez que son dévelopement à&lt;br /&gt;été stoppé pendant plusieurs années et que les failles de sécurité &lt;sup&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#pnote-1&quot; id=&quot;rev-pnote-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; découvertes dans ce logiciel mettent régulièrement quelques mois à être corrigées.&lt;/p&gt;
&lt;p&gt;Parmi les solutions se trouve Firefox , un naviguateur simple, gratuit,&lt;br /&gt;libre qui à pour principaux atouts sa sécurité (les failles sont parfois corrigées en quelques heures) et un nombre infini de fonctionnalités grâce à un système de plugins &lt;sup&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#pnote-2&quot; id=&quot;rev-pnote-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt; .&lt;/p&gt;
&lt;p&gt;Dès l'installation, Firefox vous permettra par défaut de naviguer sans être dérangé par les pop-up (vous savez ces petites fenêtres de pub qui s'affichent sur votre écran de manière intempestive ! ).&lt;br /&gt;Vous découvrirez également le système d'onglet qui vous permet de n'avoir plus qu'une fenêtre ouverte même si vous souhaitez ouvrir plusieurs pages( toutes ces fonctionnalités et bien d'autres serontdécrites de manière plus précise dans un prochain billet).&lt;br /&gt;
En attendant, n'hésitez pas, rien ne vous manquera et très rapidement, vous ne pourrez plus vous en passer.&lt;/p&gt;
&lt;p&gt;Firefox : accueil, téléchargement.&lt;/p&gt;
&lt;h3&gt;VLC&lt;/h3&gt;
&lt;p&gt;Que vous souhaitiez lire le dernier DVD que vous avez acheté, le film de vos dernières vacances ou un divX &lt;sup&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#pnote-3&quot; id=&quot;rev-pnote-3&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt; .&lt;br /&gt;VLC est le logiciel qu'il vous faut !&lt;br /&gt;Ce lecteur est en effet reconnu pour lire facilement tout (et n'importe quoi).&lt;br /&gt;En effet, là ou la majorité des lecteurs nécessitent l'installation de codecs &lt;sup&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#pnote-4&quot; id=&quot;rev-pnote-4&quot;&gt;4&lt;/a&gt;]&lt;/sup&gt; ,&lt;br /&gt;VLC lui possède dès son installation de quoi lire la grande majorité des formats vidéos.&lt;br /&gt;&lt;br /&gt;Ce logiciel, assez simple d'usage remplacera avantageusement un Windows Media Player (pour la vidéo).&lt;br /&gt;Il est donc à installer d'urgence sur votre PC.&lt;/p&gt;
&lt;p&gt;VLC : accueil, téléchargement.
&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#rev-pnote-1&quot; id=&quot;pnote-1&quot;&gt;1&lt;/a&gt;] En informatique, une faille de sécurité désigne un comportement&lt;br /&gt;inattendu du concepteur d'un système. Ce type de comportement peut&lt;br /&gt;corrompre la sécurité du système. &lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#rev-pnote-2&quot; id=&quot;pnote-2&quot;&gt;2&lt;/a&gt;] En informatique, un plugin est un logiciel tiers venant se greffer à un&lt;br /&gt;logiciel principal afin de lui apporter de nouvelles fonctionnalités. &lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#rev-pnote-3&quot; id=&quot;pnote-3&quot;&gt;3&lt;/a&gt;] Légal, celà va de soit.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://blogbangbang.com/post/2006/11/14/#rev-pnote-4&quot; id=&quot;pnote-4&quot;&gt;4&lt;/a&gt;] Le terme Codec est construit d'après les mots codeur et décodeur, etfait souvent appel à la COmpression et DÉCompression des données (la compression de données est un codage).&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2006/11/14/les-indispensables-1#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2006/11/14/les-indispensables-1#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/2</wfw:commentRss>
      </item>
    
  <item>
    <title>Le système d'exploitation</title>
    <link>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation</link>
    <guid isPermaLink="false">urn:md5:0451647c6739261875110ae03e8e5c45</guid>
    <pubDate>Tue, 14 Nov 2006 23:08:00 +0000</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>Linux</category><category>Mac</category><category>Systèmes dexploitation</category><category>vulgarisation</category><category>windows</category>    
    <description>    &lt;p&gt;Lorsque
vous achetez un PC, il est la plupart du temps fourni avec ce que l'on
appelle un système d'exploitation et une suite de Logiciels.&lt;/p&gt;
&lt;p&gt;Actuellement, le système d'exploitation fourni sur la quasi-totalité des PC vendus est Windows (crée par la société Microsoft).&lt;/p&gt;
&lt;p&gt;Windows est une gamme de systèmes d'exploitation produite par
Microsoft, principalement destinées aux PC. Depuis les années 1990,
avec la sortie de Windows 95, son succès commercial pour équiper les
ordinateurs personnels est tel qu'il possède un statut de
quasi-monopole.&lt;/p&gt;
&lt;p&gt;En conséquence ses concurrents l'accusent de monopole et de
pratiques commerciales déloyales, et ont inspiré des poursuites
antitrust à son encontre. Windows est aussi un produit techniquement
très critiqué par certains. Il est notamment reproché à ce système son
instabilité et sa vulnérabilité.&lt;/p&gt;
&lt;p&gt;Pourtant, sa popularité n'a jamais été menacée, notamment parce que
les clients particuliers ne peuvent pas refuser à l'achat ces logiciels
en vente subordonnée. De ce fait, la majorité du grand public ignore
même la présence de concurrents sur ce marché.&lt;/p&gt;
&lt;p&gt;Pourtant ceux ci existent, et sont mêmes plutôt nombre ux.&lt;/p&gt;
&lt;p&gt;Parmi eux deux se détachent : Mac OS et Linux.&lt;/p&gt;
&lt;p&gt;Mac OS (pour Macintosh Operating System) est le nom du système
d'exploitation propriétaire des ordinateurs Apple Macintosh. Précurseur
de nombreux concepts actuels tel que le glisser-déposer, la corbeille
ou le plug-and-play, Mac OS ne s'est pourtant pas imposé sur le marché
des systèmes d'exploitation, certainement parce que son système ne
fonctionne que sur le matériel vendu par la marque.&lt;/p&gt;
&lt;p&gt;Linux est quand a lui un système d'exploitation libre. Après avoir
longtemps été réservé aux structures professionnelles du fait de sa
complexité, Linux a depuis quelques années acquis la maturité
nécessaire à son acceptation par le grand public &lt;a href=&quot;http://jonathan.blanchet.free.fr/dotclear/index.php/1&quot; title=&quot;1&quot;&gt;1&lt;/a&gt;
Pour l'utilisateur final, GNU/Linux se présente sous la forme d'une
distribution Linux, commerciale ou non, c'est-à-dire d'une solution
prête à être installée comprenant une sélection complète et cohérente
de logiciels, des programmes d'installation et d'administration de
l'ordinateur, ainsi qu'un mécanisme facilitant l'installation et la
mise à jour des logiciels.&lt;/p&gt;
&lt;p&gt;Conclusion :
Le but de ce billet est de montrer qu'il est possible d'avoir un autre
système d'exploitation que Microsoft Windows sur votre ordinateur
personnel. La possibilité Mac OS étant souvent réservée à des
utilisateurs précis (du fait de l'obligation d'utiliser le matériel
Apple), les utilisateurs lambda ont la possibilité de se tourner vers
le système d'exploitation Linux. Je détaillerais donc dans un prochain
billet quelques distributions libres et gratuites qui conviennent
parfaitement à l'usage d'un utilisateur lambda.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/4</wfw:commentRss>
      </item>
    
  <item>
    <title>Les logiciels libres</title>
    <link>http://blogbangbang.com/post/2006/11/14/Les-logiciels-libres</link>
    <guid isPermaLink="false">urn:md5:5c79aa3a5a7473f778387f8d4b3cca58</guid>
    <pubDate>Mon, 13 Nov 2006 19:06:00 +0000</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>logiciels libres</category>    
    <description>    &lt;p&gt;Les
logiciels libres, à l'inverse des logiciels propriétaires, peuvent être
utilisés, copiés, étudiés, modifiés et redistribués sans restriction.&lt;/p&gt;
&lt;p&gt;En clair celà veut dire qu'avec ce type de logiciel, vous pouvez
aisément le graver, le donner à quelques personnes de votre famille
pour en faire l'usage que vous voulez en toute légalité (pour rappel,
se faire installer une version non achetée de Windows ou de Word est
illégal et séverement puni).&lt;/p&gt;
&lt;p&gt;De plus, ces logiciels sont généralement développés par une
communauté plus importante que les logiciels propriétaires, ce qui est
souvent un gage de qualité et de réactivité en matière de logiciels.
Les logiciels libres ont également pris pour la plupart la bonne
résolution d'utiliser des standarts ouverts, ce qui assure une
pérennité des documents.&lt;/p&gt;
&lt;p&gt;Pour illustrer le principe du logiciel libre, l'inventeur de cette expression utilise l'analogie suivante :&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;selon le principe du libre : vous avez obtenu légalement cette recette par n'importe quel moyen (revue, bouche à oreille...). Vous avez le droit de redistribuer cette recette à qui vous voulez et vous pouvez la modifier puis la redistribuer comme il vous plaît.&lt;/li&gt;
&lt;li&gt;selon le principe du logiciel non libre : vous n'avez pas accès à la recette mais uniquement au gâteau déjà fait. Vous ne pouvez manger le gâteau que dans une seule cuisine, et personne d'autre que vous ne peut le manger. Quand bien même la recette serait fournie avec le gâteau, toute copie ou modification serait interdite.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Enfin, pour les personnes capable de programmer des logiciels, le
logiciel libre offre la possibilité de modifier le code comme on le
souhaite, de se servir du code pour créer de nouveaux logiciels... (à
condition que les nouveaux logiciels soient eux aussi placés sous des
licences libres).&lt;/p&gt;
&lt;p&gt;Conclusion :
Les logiciels libres ont mis un certain temps à s'imposer dans le monde
professionnel du fait de leut nature (si c'est gratuit, c'est
obligatoirement moins bien que du payant). Mais recement, les idées ont
évolué et les logiciels libres déferlent sur les entreprises et
administrations (la gendarmerie nationale les as déjà déjà adopté et
ils sont en passe de devenir obligatoire dans l'administration), alors
n'hésitez pas et passez au libre.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2006/11/14/Les-logiciels-libres#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2006/11/14/Les-logiciels-libres#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/atom/comments/3</wfw:commentRss>
      </item>
    
</channel>
</rss>