Qui suis-je ?Mathieu Fontaine, 25 ansDiplômé de Supinfo (promo 2008)Développeur Web (depuis 2005)Chef de projet / Développ...
Quelle place pour     le framework Ruby On Railsdans le développement d’applications web ?                
RubyMulti-paradigme                                    Orienté objet                      Libre  Interprété               ...
Tout est objetPas de type primitif1.class                          # Fixnum7.next                           #8"Vive les RM...
Syntaxe naturellePHP                                 Rubyfor ($i = 0 ; $i < 7 ; i++) {       8.times do  echo "Hello World...
Hello World!Javapublic class HelloWorld {  public static void main(String[] args) {    System.out.println("Hello World!");...
Moindre surpriseLa touche "F1" affiche laideLa touche "Suppr" envoie le fichier dans la corbeilleRuby a été écrit en respe...
YAMLXML                                                   YAML<user id="spidou" on="Ubuntu">                        spidou...
Rails RESTful                     Convention over Configuration                        LibreDont Repeat Yourself          ...
Java + Hibernate (1/2)persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="[...]" xmlns:xsi="[...]" xs...
Java + Hibernate (2/2)orm.xml<?xml version="1.0" encoding="UTF-8"?><entity-mappings xmlns="[...]" xmlns:xsi="[...]" xsi:sc...
ActiveRecordModèle                                         Base de donnéesclass User < ActiveRecord::Base                 ...
MVC       Requête                     Post.find(:all)                 Contrôleur                          Modèle          ...
RESTfulOpération                             Site classique (en PHP)            Site RESTful (en Rails)Lister les utilisat...
Rails poursuit son évolution              
Arel (1/2)Rails 2 @posts = Post.find(:all, :conditions => { :published => true })                                        #...
Arel (2/2)@posts = Post.where(:published => true)if params[:order]  @posts = @posts.order(params[:order])end@posts.each do...
UJS (1/2)UJS = Unobtrusive JavaScript = « Javascript discret »Rails 2  <%= link_to_remote Profil utilisateur, @user %>  <a...
UJS (2/2)Rails 2  <%= link_to Supprimer, @user, :method => :delete, :confirm => "Êtes-vous sûr ?" %>  <a href="/users/99" ...
Léco-système       
Github (1/2)    Hébergement et gestion de développement de     logiciel grâce à Git    Pas de publicité    Gratuit pour...
Github (2/2)    Passe devant Sourceforce et Google Code en juin 2011                        Github : 1 153 059 commits (...
New Relic (1/2)    SaaS    Monitoring et suivi des performances    Aucun serveur à installer (cloud)    Interface util...
New Relic (2/2)        
Heroku (1/2)    Déploiement ultra simplifié via Git    Manipulations en ligne de commande ou via le site web    Mise à ...
Heroku (2/2)       
Ils font confiance         
Yellow PagesAvant 2007    1 500 requêtes/sec    JavaEE + EJB = problèmes de maintenabilité, de design    125 000 lignes...
Twitter (1/2)    Créé en 2006    Développement initial en Rails    Fin 2008 :                        100 million de tw...
Twitter (2/2)    2009 : Victime de son succès, Twitter migre progressivement      vers Scala    Fin 2010 :             ...
Osirails    ERP destiné aux PME/PMI    Adapté à la fabrication sur mesure    Modulaire                      Module Tie...
Des questions ?          
Crédits    Présentation réalisée grâce à LibreOffice sur Ubuntu 11.04    Sources :                            ruby-lang...
Upcoming SlideShare
Loading in …5
×

Quelle place pour le framework Rails dans le développement d'application web

1,175 views

Published on

Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,175
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Quelle place pour le framework Rails dans le développement d'application web

  1. 1. Qui suis-je ?Mathieu Fontaine, 25 ansDiplômé de Supinfo (promo 2008)Développeur Web (depuis 2005)Chef de projet / Développeur Rails (depuis 2008)about.me/spidou    
  2. 2. Quelle place pour le framework Ruby On Railsdans le développement d’applications web ?    
  3. 3. RubyMulti-paradigme Orienté objet Libre Interprété Multi-plateforme    
  4. 4. Tout est objetPas de type primitif1.class # Fixnum7.next #8"Vive les RMLLd".length # 14true.class # TrueClassPas dopérateur1+2 <=> 1.send(+, 2) <=> 1.+(1)+ est une méthode de Fixnum1.methods.sort # ["%", "&", "*", "**", "+", "-", ...]    
  5. 5. Syntaxe naturellePHP Rubyfor ($i = 0 ; $i < 7 ; i++) { 8.times do echo "Hello World!"; puts "Hello World!"} endif (say_hi()) { puts "Hello World!" if say_hi? echo "Hello World!";}    
  6. 6. Hello World!Javapublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }} C int main(void) { printf("Hello World!n"); return 0; } Ruby puts "Hello World!"    
  7. 7. Moindre surpriseLa touche "F1" affiche laideLa touche "Suppr" envoie le fichier dans la corbeilleRuby a été écrit en respectant ce principe,et incite à en faire de mêmeVoici un exemple avec la convention de nommage des méthodes : method_name dangerous_method! question_method? setter_method=    
  8. 8. YAMLXML YAML<user id="spidou" on="Ubuntu"> spidou: <firstname>Mathieu</firstname> on: Ubuntu <lastname>Fontaine</lastname> firstname: Mathieu <skills> lastname: Fontaine <skill since="2006">Web Developer</skill> skills: <skill since="2008">Rails Project Manager</skill> - skill: Web Developer </skills> since: 2006</user> - skill: Rails Project Manager since: 2008    
  9. 9. Rails RESTful Convention over Configuration LibreDont Repeat Yourself MVC    
  10. 10. Java + Hibernate (1/2)persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="[...]" xmlns:xsi="[...]" xsi:schemaLocation="[...]" version="[...]"><persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> <mapping-file>META-INF/orm.xml</mapping-file> <class>com.mysite.User</class> <properties> <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> <property name="hibernate.cache.use_query_cache" value="true" /> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="use_sql_comments" value="false" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MYSQLDialect" /> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="300" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="3000" /> <property name="hibernate.search.default.directory_provider"value="org.hibernate.search.store.FSDirectoryProvider" /> </properties></persistence-unit></persistence>    
  11. 11. Java + Hibernate (2/2)orm.xml<?xml version="1.0" encoding="UTF-8"?><entity-mappings xmlns="[...]" xmlns:xsi="[...]" xsi:schemaLocation="[...]" version="1.0"><package>com.mysite</package><entity class="User"> <sql-result-set-mapping name="usernames"> <column-result name="username" /> </sql-result-set-mapping> <table name="User" /> <named-native-query name="myQuery" result-set-mapping="usernames"> <query><![CDATA[select u.username from User u]]> </query> </named-native-query></entity></entity-mappings>    
  12. 12. ActiveRecordModèle Base de donnéesclass User < ActiveRecord::Base usersend id username created_at updated_atUser.all # (select * from users)@user = User.first # (select * from users limit 1)@user.username # "spidou"    
  13. 13. MVC Requête Post.find(:all) Contrôleur Modèle [Post1, Post2, ...] Affichage Réponse Vue   
  14. 14. RESTfulOpération Site classique (en PHP) Site RESTful (en Rails)Lister les utilisateurs GET /list_users.php GET /usersCréer un utilisateur POST /create_user.php POST /usersAfficher un utilisateur GET /show_user.php?id=1 GET /users/1Modifier un utilisateur POST /edit_user.php PUT /users/1Supprimer un utilisateur GET /delete_user.php?id=1 DELETE /users/1Lister les commentaire dun article GET /list_comments.php?post_id=1 GET /posts/1/comments GET /delete_comment.php?Supprimer un commentaire DELETE /posts/1/comments/1 id=1&post_id=1    
  15. 15. Rails poursuit son évolution   
  16. 16. Arel (1/2)Rails 2 @posts = Post.find(:all, :conditions => { :published => true }) # Exécution de la requête SQL # @posts reçoit un tableau délémentsRails 3 @posts = Post.where(:published => true) # La requête SQL nest pas exécutée à ce moment # @posts reçoit un objet de type ActiveRecord::Relation    
  17. 17. Arel (2/2)@posts = Post.where(:published => true)if params[:order] @posts = @posts.order(params[:order])end@posts.each do |p| ...end # La requête SQL est exécutée maintenant !    
  18. 18. UJS (1/2)UJS = Unobtrusive JavaScript = « Javascript discret »Rails 2 <%= link_to_remote Profil utilisateur, @user %> <a href="#" onclick="new Ajax.Request(/users/99, { asynchronous:true, evalScripts:true, parameters:[...] })">Profil utilisateur</a>Rails 3 <%= link_to Profil utilisateur, @user, :remote => true %> <a href="/users/99" data-remote="true">Profil utilisateur</a>    
  19. 19. UJS (2/2)Rails 2 <%= link_to Supprimer, @user, :method => :delete, :confirm => "Êtes-vous sûr ?" %> <a href="/users/99" onclick="if (confirm("Êtes-vous sûr ?")) { var f = document.createElement(form); f.style.display=none; this.parentNode.appendChild(f); f.method=POST; f.action=this.href; var m = document.createElement(input); […] m.setAttribute(value, delete); f.appendChild(m) ; f.submit(); }; return false;">Supprimer</a>Rails 3 <%= link_to Supprimer, @user, :method => :delete %> <a href="/users/99" data-method="delete" ref="nofollow">Supprimer</a>    
  20. 20. Léco-système   
  21. 21. Github (1/2) Hébergement et gestion de développement de logiciel grâce à Git Pas de publicité Gratuit pour les projets open source Navigation intuitive Facilite et incite la création de forks    
  22. 22. Github (2/2) Passe devant Sourceforce et Google Code en juin 2011  Github : 1 153 059 commits (54%)  Sourceforge : 624 989 commits (30%)  Google Code 287 901 commits (14%) 2 millions de dépôts 1 million dutilisateurs prévus en septembre 2011 Quelques projets hébergés sur Github :  PHP, Perl, Python, Symfony, Rails, Facebook, Diaspora  Redmine, JQuery, Script.aculo.us, Git, Linux    
  23. 23. New Relic (1/2) SaaS Monitoring et suivi des performances Aucun serveur à installer (cloud) Interface utilisateur extrêmement simple Un plugin Rails à installer, et ça marche !    
  24. 24. New Relic (2/2)   
  25. 25. Heroku (1/2) Déploiement ultra simplifié via Git Manipulations en ligne de commande ou via le site web Mise à jour des ressources (CPU, mémoire) en fonction de la charge 43 add-ons (sendgrid, new relic, cron, memcache, etc.) + 153 300 applications déployées    
  26. 26. Heroku (2/2)   
  27. 27. Ils font confiance   
  28. 28. Yellow PagesAvant 2007 1 500 requêtes/sec JavaEE + EJB = problèmes de maintenabilité, de design 125 000 lignes de code (0 test)Après migration vers Rails en 2007 20 000 lignes de code (tests compris) Réécriture en 3 mois (5 développeurs) Performances égales    
  29. 29. Twitter (1/2) Créé en 2006 Développement initial en Rails Fin 2008 :  100 million de tweets par trimestre  Lève 15 million de dollars  Valorisé à 500 million de dollars    
  30. 30. Twitter (2/2) 2009 : Victime de son succès, Twitter migre progressivement vers Scala Fin 2010 :  Lève +140 million de dollars  Valorisé à 3.7 milliard de dollars Rails = rampe de lancement de projet    
  31. 31. Osirails ERP destiné aux PME/PMI Adapté à la fabrication sur mesure Modulaire  Module Tiers (gestion des clients, fournisseurs, etc.)  Module RH (gestion des ressources humaines, congés, etc.)  Module Stocks (gestion des articles, inventaires, etc.)  Module Ventes (gestion produits, devis, facture, etc.)  ... En cours de développement chez EMR En phase de test, bientôt en production github.com/spidou/osirails/fork    
  32. 32. Des questions ?   
  33. 33. Crédits Présentation réalisée grâce à LibreOffice sur Ubuntu 11.04 Sources :  ruby-lang.org  insideit.fr  rubyonrails.com  blog-nouvelles-technologies.fr  wikipedia.org  blog.spidou.com  workingwithrails.com Osirails  osirails.spidou.com/wiki  github.com/spidou/osirails EMR  emr-oi.com    

×